diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 00000000000..d619b7fc9d4 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,5 @@ +# Local Claude Instructions + +Include: + +@CLAUDE.local.md diff --git a/.claude/skills/spryker-ci/SKILL.md b/.claude/skills/spryker-ci/SKILL.md new file mode 100644 index 00000000000..abb87269028 --- /dev/null +++ b/.claude/skills/spryker-ci/SKILL.md @@ -0,0 +1,72 @@ +--- +name: spryker-ci +description: Run continuous integration tools and fix issues. +--- + +# SprykerCI Fixing Process + +Use this skill to systematically run continuous integration tools and fix errors in the Spryker documentation. + +## Process + +1. **Run SprykerCI**: + +2. **Results for issues**: + When there is issue output: + - Identify problematic + - Why the error exists (explanation of the type issue) + - Current code snippet + - Proposed fix with explanation + - Wait for user approval before applying + +3. **Verify**: Run the full SprykerCI execution path again + +## Important Notes + +- **Always get user approval** before applying each fix +- Present one error at a time for manageable review +- Explain WHY the error exists / test fail, not just HOW to fix it +- User may have domain knowledge that affects the fix (e.g., knowing a value is never null) +- Use type casts when user confirms value is always set +- Use null checks when uncertain + +## Example Workflow + +``` +1. Run SprykerCI +2. Present Issue #1: + - What: [what has failed] + - Why: [explanation] + - Fix: [proposed solution] +3. User approves → Apply fix +4. Run SprykerCI for this module again to verify success +9. Present Issue #2... +10. Continue until all errors/tests presented and approved +11. Run SprykerCI again to verify success +``` + +## Fix guidelines + +### Sidebar issues + +When there is a page missing in the sidebar the issues shows fileName.md to be missing. TO fix this use the same path to be added and replace `md` with `html`. + +To get the title read the file that was mentioned rto be missing and get the title from it. + +## Commands + +Run Vale +```bash +vale $(find docs/ _includes/pbc/ -type f -name "*.md" ! -path "*/202311.0/*" ! -path "*/202404.0/*") --minAlertLevel=error +``` + +Run Markdown Linter +```bash +npx markdownlint-cli2 "docs/**/*.md" "_includes/pbc/**/*.md" "#node_modules" +``` + +Run Sidebar checker +```bash +./_scripts/sidebar_checker/sidebar_checker.sh +``` + diff --git a/.github/instructions/copilot-instructions.md b/.github/instructions/copilot-instructions.md new file mode 100644 index 00000000000..169f7a499cf --- /dev/null +++ b/.github/instructions/copilot-instructions.md @@ -0,0 +1,145 @@ +# Spryker Documentation Repository Guidelines + +This file contains important instructions for working with the Spryker documentation repository. + +## Validation Workflow + +### Finding Changed Files + +When working on a branch, find all changed markdown files compared to master: + +```bash +git diff master..HEAD --name-only | grep '.md' +``` + +### Running Validation Tools + +Run both validation tools on changed files: + +**Vale (prose linting):** +```bash +vale --minAlertLevel=error path/to/file.md +``` + +**Markdownlint (markdown syntax):** +```bash +markdownlint-cli2 path/to/file.md +``` + +**Installation:** If vale or markdownlint-cli2 are not installed, install them according to the OS requirements. + +### Validation Policy + +- **ONLY address ERRORS**, not warnings or suggestions +- Provide specific fixes for each error found +- Validate all changed files before completing work + +## Documentation Standards + +Follow documentation Standards to ensure content is high-quality and consistent with Spryker documentation standards. + +### Internal Links Format + +All relative internal links MUST follow this format: + +```markdown +[link text](/docs/section/file.html) +``` + +**Rules:** +- Path starts with `/` +- Path ends with `.html` (NOT `.md`) +- Use the actual file path, replacing `.md` extension with `.html` + +**Example:** +- File location: `docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.md` +- Link format: `[Web Profiler Integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.html)` + +### Purpose and Goals + +- Evaluate content intended for documentation on docs.spryker.com +- Ensure Markdown code for Jekyll meets high-quality standards in tone, writing style, grammar, and web best practices +- Provide specific, actionable amendments to improve the article +- **ONLY show amendments - do not show "no change" items** + +### Grammar and Sentence Structure + +- Identify grammatical errors: + - Typos + - Incorrect verb tense + - Subject-verb agreement issues + - Incorrect punctuation +- Evaluate sentence structure for clarity and conciseness +- Identify sentences that are too long, complex, or unclear +- Formulate improved sentence structures for better readability +- Ensure Markdown is correct and content conforms with web best practices (alt text, no skipped headings) + +### Tone of Voice + +Analyze the overall tone to align with technical documentation styles (Google Developer Documentation Style Guide, Microsoft Style Guide). The tone should be: +- Formal yet helpful +- Encouraging +- Clear and concise +- Consistent +- Warm, relaxed, and ready to lend a hand + +**Required tone elements:** +- Use second person ('you') to address the reader directly +- Use active voice for clarity +- Use present tense where appropriate for immediacy +- Avoid contractions (use 'do not' instead of 'don't') +- Use appropriate technical terms, avoiding unnecessary jargon + +### Writing Style, Markup and Markdown + +**Spelling:** +- Use American spelling consistently + +**Markdown Formatting:** +- Use standard Markdown for headings, lists, links, code blocks, and inline formatting +- Verify proper use of headings, lists, code blocks, links, bolding, italics, etc. +- Use Jekyll-compatible syntax for Spryker-specific components: + - `{% info_block infoBox "Info" %}...{% endinfo_block %}` instead of `> [!NOTE]` +- Apply other Spryker Liquid tags as needed: + - `{% include %}` + - `{% info_block warningBox "Warning" %}` +- Ensure output renders correctly in Jekyll but remains readable in raw Markdown + +### Presenting Suggestions + +Present all suggestions in a numbered list. Each item must have: + +1. **Original markdown code** - The current text/code +2. **New markdown code** - The improved version +3. **Summary of the change** - Brief explanation of what was changed and why + +**Example format:** +``` +1. **Original:** `This is the old text.` + **New:** `This is the improved text.` + **Summary:** Changed passive voice to active voice for clarity. +``` + +## Workflow Automation + +When asked to "build" or "validate" documentation: +1. Find all changed markdown files +2. Run vale on each file +3. Run markdownlint-cli2 on each file +4. Report only errors (not warnings) +5. Suggest specific fixes for each error +6. Check internal links format and fix if needed +7. Validate with Documentation Standards + +### Best Practices + +- Always validate documentation changes before committing +- Fix validation errors immediately +- Maintain consistency with surrounding content +- Ensure all internal links are valid and properly formatted +- Follow Documentation Standards for generation and validation of documentation + +### Limitations + +- Do not suggest removing any part of the document unless it violates a documented rule in the style guides or validation tools +- If removal seems beneficial but isn't required by the rules, note it as an optional consideration rather than a recommendation diff --git a/.vale-ignore b/.vale-ignore index 2345a357b88..2dc01288757 100644 --- a/.vale-ignore +++ b/.vale-ignore @@ -1,3 +1,2 @@ lx0amx3m1b -docs/pbc/all/payment-service-provider/202410.0/base-shop/third-party-integrations/powerpay.md:115.1.2.9/2018 SprykerEco.Computop diff --git a/.vale.ini b/.vale.ini index 92152308472..712fbcb53d8 100644 --- a/.vale.ini +++ b/.vale.ini @@ -7,7 +7,7 @@ Packages = Google, Spryker [NoQuestionInHeadings] # List of file globs to ignore for this rule -ignored = docs/pbc/all/tax-management/202410.0/base-shop/third-party-integrations/vertex/vertex-faq.md +ignored = [*.{md}] BasedOnStyles = Google, Spryker, terms diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..fd5aaa7405b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,160 @@ +# Spryker Documentation Repository Guidelines + +This file contains important instructions for working with the Spryker documentation repository. + +## Project Structure + +- Documentation pages are in `docs` folder +- Sidebar of documentation is in `_data/sidebars` folder + +## Documentation Standards + +Follow documentation Standards to ensure content is high-quality and consistent with Spryker documentation standards. + +### Internal Links Format + +All relative internal links MUST follow this format: + +```markdown +[link text](/docs/section/file.html) +``` + +**Rules:** +- Path starts with `/` +- Path ends with `.html` (NOT `.md`) +- Use the actual file path, replacing `.md` extension with `.html` + +**Example:** +- File location: `docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.md` +- Link format: `[Web Profiler Integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.html)` + +### Purpose and Goals + +- Evaluate content intended for documentation on docs.spryker.com +- Ensure Markdown code for Jekyll meets high-quality standards in tone, writing style, grammar, and web best practices +- Provide specific, actionable amendments to improve the article +- **ONLY show amendments - do not show "no change" items** + +### Grammar and Sentence Structure + +- Identify grammatical errors: + - Typos + - Incorrect verb tense + - Subject-verb agreement issues + - Incorrect punctuation +- Evaluate sentence structure for clarity and conciseness +- Identify sentences that are too long, complex, or unclear +- Formulate improved sentence structures for better readability +- Ensure Markdown is correct and content conforms with web best practices (alt text, no skipped headings) + +### Tone of Voice + +Analyze the overall tone to align with technical documentation styles (Google Developer Documentation Style Guide, Microsoft Style Guide). The tone should be: +- Formal yet helpful +- Encouraging +- Clear and concise +- Consistent +- Warm, relaxed, and ready to lend a hand + +**Required tone elements:** +- Use second person ('you') to address the reader directly +- Use active voice for clarity +- Use present tense where appropriate for immediacy +- Avoid contractions (use 'do not' instead of 'don't') +- Use appropriate technical terms, avoiding unnecessary jargon + +### Writing Style, Markup and Markdown + +**Spelling:** +- Use American spelling consistently + +**Markdown Formatting:** +- Use standard Markdown for headings, lists, links, code blocks, and inline formatting +- Verify proper use of headings, lists, code blocks, links, bolding, italics, etc. +- Use Jekyll-compatible syntax for Spryker-specific components: + - `{% info_block infoBox "Info" %}...{% endinfo_block %}` instead of `> [!NOTE]` +- Apply other Spryker Liquid tags as needed: + - `{% include %}` + - `{% info_block warningBox "Warning" %}` +- Ensure output renders correctly in Jekyll but remains readable in raw Markdown + +### Presenting Suggestions + +Present all suggestions in a numbered list. Each item must have: + +1. **Original markdown code** - The current text/code +2. **New markdown code** - The improved version +3. **Summary of the change** - Brief explanation of what was changed and why + +**Example format:** +``` +1. **Original:** `This is the old text.` + **New:** `This is the improved text.` + **Summary:** Changed passive voice to active voice for clarity. +``` + +### Last updated date + +After editing a file, the field `last_updated` must be always updated to the current date. + +### Sidebar Links + +After adding a new file, the sidebar link must be added to reflect the new file location. +After removing a file, the sidebar link must be removed. +After renaming a file, the sidebar link must be renamed to reflect the new file location. +After moving a file, the sidebar link must be updated to reflect the new file location. + +## Validation Workflow + +Use the following workflow to validate documentation changes. + +1. Find Changed Files + +When working on a branch, find all changed markdown files compared to master: + +```bash +git diff master..HEAD --name-only | grep '.md' +``` + +2. Run Validation Tools + +Run both validation tools on changed files: + +**Vale (prose linting):** +```bash +vale --minAlertLevel=error path/to/file.md +``` + +**Markdownlint (markdown syntax):** +```bash +markdownlint-cli2 path/to/file.md +``` + +**Installation:** If vale or markdownlint-cli2 are not installed, install them according to the OS requirements. + +3. Validate with Documentation Standards + - internal links format + - grammar and sentence structure + - tone of voice + - writing style, markup and markdown + - `last_updated` date + - sidebar links + +4. Finalize + +- **ONLY address ERRORS**, not warnings or suggestions +- Provide specific fixes for each error found +- Re-run validation tools to ensure all errors are resolved + +### Best Practices + +- Always validate documentation changes after making changes +- Fix validation errors immediately +- Maintain consistency with surrounding content +- Ensure all internal links are valid and properly formatted +- Follow Documentation Standards for generation and validation of documentation + +### Limitations + +- Do not suggest removing any part of the document unless it violates a documented rule in the style guides or validation tools +- If removal seems beneficial but isn't required by the rules, note it as an optional consideration rather than a recommendation diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000000..ba6ca5d2a10 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,160 @@ +# Spryker Documentation Repository Guidelines + +This file contains important instructions for working with the Spryker documentation repository. + +## Project Structure + +- Documentation pages are in `docs` folder +- Sidebar of documentation is in `_data/sidebars` folder + +## Documentation Standards + +Follow documentation Standards to ensure content is high-quality and consistent with Spryker documentation standards. + +### Internal Links Format + +All relative internal links MUST follow this format: + +```markdown +[link text](/docs/section/file.html) +``` + +**Rules:** +- Path starts with `/` +- Path ends with `.html` (NOT `.md`) +- Use the actual file path, replacing `.md` extension with `.html` + +**Example:** +- File location: `docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.md` +- Link format: `[Web Profiler Integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler.html)` + +### Purpose and Goals + +- Evaluate content intended for documentation on docs.spryker.com +- Ensure Markdown code for Jekyll meets high-quality standards in tone, writing style, grammar, and web best practices +- Provide specific, actionable amendments to improve the article +- **ONLY show amendments - do not show "no change" items** + +### Grammar and Sentence Structure + +- Identify grammatical errors: + - Typos + - Incorrect verb tense + - Subject-verb agreement issues + - Incorrect punctuation +- Evaluate sentence structure for clarity and conciseness +- Identify sentences that are too long, complex, or unclear +- Formulate improved sentence structures for better readability +- Ensure Markdown is correct and content conforms with web best practices (alt text, no skipped headings) + +### Tone of Voice + +Analyze the overall tone to align with technical documentation styles (Google Developer Documentation Style Guide, Microsoft Style Guide). The tone should be: +- Formal yet helpful +- Encouraging +- Clear and concise +- Consistent +- Warm, relaxed, and ready to lend a hand + +**Required tone elements:** +- Use second person ('you') to address the reader directly +- Use active voice for clarity +- Use present tense where appropriate for immediacy +- Avoid contractions (use 'do not' instead of 'don't') +- Use appropriate technical terms, avoiding unnecessary jargon + +### Writing Style, Markup and Markdown + +**Spelling:** +- Use American spelling consistently + +**Markdown Formatting:** +- Use standard Markdown for headings, lists, links, code blocks, and inline formatting +- Verify proper use of headings, lists, code blocks, links, bolding, italics, etc. +- Use Jekyll-compatible syntax for Spryker-specific components: + - `{% info_block infoBox "Info" %}...{% endinfo_block %}` instead of `> [!NOTE]` +- Apply other Spryker Liquid tags as needed: + - `{% include %}` + - `{% info_block warningBox "Warning" %}` +- Ensure output renders correctly in Jekyll but remains readable in raw Markdown + +### Presenting Suggestions + +Present all suggestions in a numbered list. Each item must have: + +1. **Original markdown code** - The current text/code +2. **New markdown code** - The improved version +3. **Summary of the change** - Brief explanation of what was changed and why + +**Example format:** +``` +1. **Original:** `This is the old text.` + **New:** `This is the improved text.` + **Summary:** Changed passive voice to active voice for clarity. +``` + +### Last updated date + +After editing a file, the field `last_updated` must be always updated to the current date. + +### Sidebar Links + +After adding a new file, the sidebar link must be added to reflect the new file location. +After removing a file, the sidebar link must be removed. +After renaming a file, the sidebar link must be renamed to reflect the new file location. +After moving a file, the sidebar link must be updated to reflect the new file location. + +## Validation Workflow + +Use the following workflow to validate documentation changes. + +1. Find Changed Files + +When working on a branch, find all changed markdown files compared to master: + +```bash +git diff master..HEAD --name-only | grep '.md' +``` + +2. Run Validation Tools + +Run both validation tools on changed files: + +**Vale (prose linting):** +```bash +vale --minAlertLevel=error path/to/file.md +``` + +**Markdownlint (markdown syntax):** +```bash +markdownlint-cli2 path/to/file.md +``` + +**Installation:** If vale or markdownlint-cli2 are not installed, install them according to the OS requirements. + +3. Validate with Documentation Standards + - internal links format + - grammar and sentence structure + - tone of voice + - writing style, markup and markdown + - `last_updated` date should be updated to the date of the last modification of any file in this PR. + - sidebar links + +4. Finalize + +- **ONLY address ERRORS**, not warnings or suggestions +- Provide specific fixes for each error found +- Re-run validation tools to ensure all errors are resolved + +### Best Practices + +- Always validate documentation changes after making changes +- Fix validation errors immediately +- Maintain consistency with surrounding content +- Ensure all internal links are valid and properly formatted +- Follow Documentation Standards for generation and validation of documentation + +### Limitations + +- Do not suggest removing any part of the document unless it violates a documented rule in the style guides or validation tools +- If removal seems beneficial but isn't required by the rules, note it as an optional consideration rather than a recommendation diff --git a/README.md b/README.md index 04d267f51ae..37da80284c0 100644 --- a/README.md +++ b/README.md @@ -23,3 +23,13 @@ Thank you to all our contributors! + +## Working with AI Agents + +This repository includes instructions for AI agents to help with documentation tasks. These instructions are maintained in three identical files: + +- `.github/instructions/copilot-instructions.md` - Instructions for GitHub Copilot +- `AGENTS.md` - Instructions for general [AI agents](https://agents.md/) +- `CLAUDE.md` - Instructions for Claude Code + +**Important:** All three files must contain identical content. When updating agent instructions, make sure to update all three files to maintain consistency. diff --git a/_config.yml b/_config.yml index 09c16870eea..49829569a8a 100644 --- a/_config.yml +++ b/_config.yml @@ -1,5 +1,5 @@ -version: "202512.0" -release_version: "202512.0" +version: "202602.0" +release_version: "202602.0" repository: spryker/spryker-docs @@ -153,6 +153,7 @@ versions: '202410.0': '202410.0' '202507.0': '202507.0' '202512.0': '202512.0' + '202602.0': '202602.0' # versioned categories - these must match corresponding directories diff --git a/_data/labels.yml b/_data/labels.yml new file mode 100644 index 00000000000..2ae45861a2b --- /dev/null +++ b/_data/labels.yml @@ -0,0 +1,3 @@ +# Mapping of label keys to URLs used when rendering linked badges +early-access: /docs/about/all/releases/early-access-program.html + diff --git a/_data/sidebars/about_all_sidebar.yml b/_data/sidebars/about_all_sidebar.yml index f1e2dcd87ab..42261879477 100644 --- a/_data/sidebars/about_all_sidebar.yml +++ b/_data/sidebars/about_all_sidebar.yml @@ -7,6 +7,8 @@ entries: - title: Releases url: /docs/about/all/releases/product-and-code-releases.html nested: + - title: Release notes 202602.0 + url: /docs/about/all/releases/release-notes-202602.0.html - title: Release notes 202512.0 url: /docs/about/all/releases/release-notes-202512.0.html - title: Release notes 202507.0 @@ -49,18 +51,24 @@ entries: nested: - title: RabbitMQ nested: - - title: Release notes for RabbitMQ - url: /docs/about/all/releases/image-releases/rabbitmq/release-notes-spryker-rabbitmq.html + - title: Release notes for spryker-rabbitmq 20260113 + url: /docs/about/all/releases/image-releases/rabbitmq/release-notes-spryker-rabbitmq-20260113.html - title: Release notes for RabbitMQ 4.1 Update url: /docs/about/all/releases/image-releases/rabbitmq/release-notes-rabbitmq-4.1-update.html - title: Jenkins nested: - - title: Release notes for Jenkins - url: /docs/about/all/releases/image-releases/jenkins/release-notes-spryker-jenkins.html + - title: Release notes for spryker-jenkins 20260113 + url: /docs/about/all/releases/image-releases/jenkins/release-notes-spryker-jenkins-20260113.html - title: Spryker-PHP nested: + - title: Release notes for spryker-php 20260206 + url: /docs/about/all/releases/image-releases/spryker-php/release-notes-spryker-php-20260206.html + - title: Release notes for spryker-php 20260113 + url: /docs/about/all/releases/image-releases/spryker-php/release-notes-spryker-php-20260113.html - title: Release notes for Spryker-PHP Image url: /docs/about/all/releases/image-releases/spryker-php/release-notes-spryker-php.html + - title: Early access program + url: /docs/about/all/releases/early-access-program.html - title: Security audit reports nested: @@ -136,6 +144,8 @@ entries: url: /docs/about/all/spryker-marketplace/marketplace-b2c-suite.html - title: Marketplace B2B Suite url: /docs/about/all/spryker-marketplace/marketplace-b2b-suite.html + - title: Uninstall Marketplace from B2B Demo Marketplace + url: /docs/about/all/uninstall-marketplace-from-b2b-demo-marketplace.html - title: About the docs url: /docs/about/all/about-the-docs/about-spryker-docs.html diff --git a/_data/sidebars/ca_dev_sidebar.yml b/_data/sidebars/ca_dev_sidebar.yml index 4a027fa3489..065af5e38d7 100644 --- a/_data/sidebars/ca_dev_sidebar.yml +++ b/_data/sidebars/ca_dev_sidebar.yml @@ -72,6 +72,8 @@ entries: url: /docs/ca/dev/security/multi-factor-authentication-and-passwords.html - title: Web Application Firewall (WAF) url: /docs/ca/dev/security/web-application-firewall-waf.html + - title: Regular patching activities + url: /docs/ca/dev/security/patching-maintenancewindows.html - title: Configure deployment pipelines url: /docs/ca/dev/configure-deployment-pipelines/configure-deployment-pipelines.html diff --git a/_data/sidebars/ca_devscu_sidebar.yml b/_data/sidebars/ca_devscu_sidebar.yml index 73e80cb9371..f016549c70c 100644 --- a/_data/sidebars/ca_devscu_sidebar.yml +++ b/_data/sidebars/ca_devscu_sidebar.yml @@ -13,6 +13,7 @@ entries: - title: Get access url: /docs/ca/devscu/get-access-to-spryker-code-upgrader.html - title: Connect your project + url: /docs/ca/devscu/connect-spryker-code-upgrader/connect-spryker-code-upgrader-to-your-project.html nested: - title: Connect a GitHub managed project url: /docs/ca/devscu/connect-spryker-code-upgrader/connect-spryker-code-upgrader-to-a-github-managed-project.html diff --git a/_data/sidebars/dg_dev_sidebar.yml b/_data/sidebars/dg_dev_sidebar.yml index e95473cec25..78f1ba55587 100644 --- a/_data/sidebars/dg_dev_sidebar.yml +++ b/_data/sidebars/dg_dev_sidebar.yml @@ -5,15 +5,63 @@ entries: nested: - title: Developer getting started guide url: /docs/dg/dev/development-getting-started-guide.html + nested: + - title: Development tools + url: /docs/dg/dev/development-tools.html + nested: + - title: XDebug + url: /docs/dg/dev/set-up-spryker-locally/configure-after-installing/configure-debugging/configure-debugging.html + nested: + - title: Set up XDebug profiling + url: /docs/dg/dev/set-up-spryker-locally/configure-after-installing/configure-debugging/set-up-xdebug-profiling.html + - title: WebProfiler + nested: + - title: Web Profiler for Yves + url: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html + - title: Web Profiler for Glue + url: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.html + - title: Web Profiler for Backend Gateway + url: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html + - title: Web Profiler for Zed + url: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html + - title: Code Quality Tools + nested: + - title: PHPStan + url: /docs/dg/dev/sdks/sdk/development-tools/phpstan.html + - title: Code Sniffer + url: /docs/dg/dev/sdks/sdk/development-tools/code-sniffer.html + - title: Architecture Sniffer + url: /docs/dg/dev/sdks/sdk/development-tools/architecture-sniffer.html + - title: Project Architecture Sniffer + url: /docs/dg/dev/sdks/sdk/development-tools/project-architecture-sniffer.html + - title: Evaluator + url: /docs/dg/dev/guidelines/keeping-a-project-upgradable/run-the-evaluator-tool.html + - title: AI tools + nested: + - title: AI Assistant + url: /docs/dg/dev/ai/ai-assistants/ai-assistants.html + - title: Continuous Integration + url: /docs/dg/dev/ci.html + - title: Post-Installation Configuration + url: /docs/dg/dev/post-installation-configuration.html - title: AI nested: - title: AI Foundation nested: - - title: AI Foundation + - title: AI Foundation Overview url: /docs/dg/dev/ai/ai-foundation/ai-foundation-module.html - - title: AI Dev + - title: Structured Transfer Response + url: /docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html + - title: Tool call + url: /docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html + - title: Conversation History + url: /docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.html + - title: Workflow orchestration with state machines + url: /docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.html + - title: AI Dev SDK + url: /docs/dg/dev/ai/ai-dev/ai-dev.html nested: - - title: AI Dev Overview + - title: AI Dev SDK Overview url: /docs/dg/dev/ai/ai-dev/ai-dev-overview.html - title: AI Dev MCP Server url: /docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.html @@ -22,6 +70,10 @@ entries: nested: - title: AI IDE Assistants url: /docs/dg/dev/ai/ai-assistants/ai-ide-assistants.html + - title: Context7 MCP Server + url: /docs/dg/dev/ai/ai-assistants/context7-mcp-server.html + - title: Language Server for Claude Code CLI + url: /docs/dg/dev/ai/ai-assistants/lsp-for-claude.html - title: Spryker Engineer GPT url: /docs/dg/dev/ai/ai-assistants/spryker-engineer-gpt.html - title: Spryker K6 Performance Assistant GPT @@ -217,8 +269,6 @@ entries: url: /docs/dg/dev/backend-development/cronjobs/migrate-to-jenkins.html - title: Optimizing Jenkins execution url: /docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html - - title: Reduce Jenkins execution without P&S and data importers refactoring - url: /docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.html - title: Stable Workers url: /docs/dg/dev/backend-development/cronjobs/stable-workers.html - title: Multi process run @@ -458,6 +508,22 @@ entries: - title: "Inject dependencies within factories: Container globals" url: /docs/dg/dev/backend-development/factory/inject-dependencies-within-factories-container-globals.html + - title: Composable UI in Back Office + url: /docs/dg/dev/backend-development/composable-ui/composable-ui.html + nested: + - title: Install Composable UI + url: /docs/dg/dev/backend-development/composable-ui/install-composable-ui.html + - title: Create a Composable UI module + url: /docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html + - title: Entity configuration reference + url: /docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html + - title: Composable UI best practices + url: /docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html + - title: Composable UI troubleshooting + url: /docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html + - title: Extend Composable UI with custom Angular modules + url: /docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.html + - title: Frontend development url: /docs/dg/dev/frontend-development/frontend-development.html nested: @@ -822,6 +888,8 @@ entries: url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-dependency-injection.html - title: How to integrate API Platform url: /docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html + - title: How to migrate to API Platform + url: /docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.html - title: Migrate from Auth to SecurityGui module url: /docs/dg/dev/upgrade-and-migrate/migrate-from-auth-to-securitygui-module.html - title: Migrating from Twig v1 to Twig v3 @@ -883,6 +951,8 @@ entries: url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-17.html - title: Upgrade to Angular 18 url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-18.html + - title: Upgrade to Angular 20 + url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-20.html - title: Upgrade to Webpack v5 url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-webpack-v5.html @@ -899,6 +969,8 @@ entries: url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-php-81.html - title: Upgrade to PHP 8.3 url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-php-83.html + - title: Upgrade to PHP 8.4 + url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-php-84.html - title: Upgrade to PHPUnit 11 url: /docs/dg/dev/upgrade-and-migrate/upgrade-to-phpunit-11.html - title: Upgrade to Symfony 5 @@ -1018,6 +1090,8 @@ entries: url: /docs/dg/dev/integrate-and-configure/integrate-authorization-enabler.html - title: Custom location for static assets url: /docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.html + - title: Customizing HTTP headers in AJAX requests + url: /docs/dg/dev/integrate-and-configure/customizing-http-headers-in-ajax-requests.html - title: Database connections url: /docs/dg/dev/integrate-and-configure/configure-database-connections.html - title: Dynamic Yves-Zed tokens @@ -1052,6 +1126,10 @@ entries: url: /docs/dg/dev/integrate-and-configure/integrate-automated-svg-sprite-extraction.html - title: Twig and TwigExtension url: /docs/dg/dev/integrate-and-configure/twig-and-twigextension.html + - title: Symfony Messenger + url: /docs/dg/dev/integrate-and-configure/integrate-symfony-messenger.html + - title: Symfony Scheduler + url: /docs/dg/dev/integrate-and-configure/integrate-symfony-scheduler.html - title: SDKs @@ -1184,6 +1262,8 @@ entries: url: /docs/dg/dev/architecture/modules-and-application-layers.html - title: Architectural Convention url: /docs/dg/dev/architecture/architectural-convention.html + - title: Architecture as Code + url: /docs/dg/dev/architecture/architecture-as-code.html - title: "Key-value storage: Redis and Valkey" url: /docs/dg/dev/architecture/key-value-storage-redis-and-valkey.html - title: Module API @@ -1216,10 +1296,18 @@ entries: - title: API Platform url: /docs/dg/dev/architecture/api-platform.html nested: - - title: Schemas and Resource Generation - url: /docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html + - title: Resource Schemas + url: /docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: Validation Schemas + url: /docs/dg/dev/architecture/api-platform/validation-schemas.html + - title: CodeBucket Support + url: /docs/dg/dev/architecture/api-platform/code-buckets.html + - title: Relationship Support + url: /docs/dg/dev/architecture/api-platform/relationships.html - title: Enablement url: /docs/dg/dev/architecture/api-platform/enablement.html + - title: Testing + url: /docs/dg/dev/architecture/api-platform/testing.html - title: Troubleshooting url: /docs/dg/dev/architecture/api-platform/troubleshooting.html @@ -1343,6 +1431,8 @@ entries: nested: - title: Monitoring url: /docs/dg/dev/guidelines/performance-guidelines/monitoring.html + - title: APM — New Relic based troubleshooting + url: /docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.html - title: General performance guidelines url: /docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html - title: Architecture performance guidelines @@ -1357,10 +1447,18 @@ entries: url: /docs/dg/dev/guidelines/performance-guidelines/bot-control.html - title: Batch processing of Propel entities url: /docs/dg/dev/guidelines/performance-guidelines/performance-guidelines-batch-processing-propel-entities.html + - title: Database performance guidelines + url: /docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.html + - title: Key-Value storage performance guidelines + url: /docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.html - title: External HTTP requests url: /docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html - title: Search performance guidelines url: /docs/dg/dev/guidelines/performance-guidelines/search-performance-guidelines.html + - title: Infrastructure and worker configuration guidelines + url: /docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.html + - title: Custom code performance guidelines + url: /docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.html - title: Elastic computing nested: - title: New Relic transactions grouping by queue names @@ -1369,6 +1467,8 @@ entries: url: /docs/dg/dev/guidelines/performance-guidelines/elastic-computing/ram-aware-batch-processing.html - title: Storage caching for primary-replica database setups url: /docs/dg/dev/guidelines/performance-guidelines/elastic-computing/storage-caching-for-primary-replica-db-setups.html + - title: CDN and traffic management integration + url: /docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html - title: Keeping dependencies updated url: /docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.html @@ -1394,6 +1494,8 @@ entries: url: /docs/dg/dev/guidelines/testing-guidelines/building-tests-for-test-driven-devleopment.html - title: Running tests with Robot Framework url: /docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.html + - title: E2E Testing with Cypress + url: /docs/dg/dev/guidelines/testing-guidelines/cypress-testing.html - title: Test helpers url: /docs/dg/dev/guidelines/testing-guidelines/test-helpers/test-helpers.html nested: @@ -1517,6 +1619,8 @@ entries: - title: Troubleshooting performance issues url: /docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html nested: + - title: Blackfire profiling + url: /docs/dg/dev/troubleshooting/troubleshooting-performance-issues/blackfire-profiling.html - title: External calls take a lot of time url: /docs/dg/dev/troubleshooting/troubleshooting-performance-issues/external-calls-take-a-lot-of-time.html - title: External calls—several calls to Zed diff --git a/_data/sidebars/integrations.yml b/_data/sidebars/integrations.yml index 8e9c643bcc6..2ddf75a2a18 100644 --- a/_data/sidebars/integrations.yml +++ b/_data/sidebars/integrations.yml @@ -15,6 +15,8 @@ entries: - title: Getting started with APIs url: /docs/integrations/spryker-glue-api/getting-started-with-apis/getting-started-with-apis.html nested: + - title: Spryker API Strategy + url: /docs/integrations/spryker-glue-api/getting-started-with-apis/api-strategy.html - title: Differences between Storefront and Backend APIs url: /docs/integrations/spryker-glue-api/getting-started-with-apis/comparison-of-storefront-and-backend-apis.html - title: Authenticating and authorization @@ -187,5 +189,11 @@ entries: url: /docs/integrations/custom-building-integrations/developing-standalone-modules.html - title: Using Jenkins for third-party integrations url: /docs/integrations/custom-building-integrations/using-jenkins-for-third-party-integrations.html + - title: Implementing ERP Integration + url: /docs/integrations/custom-building-integrations/erp-integration-template.html + - title: Implement PunchOut on your project + url: /docs/integrations/custom-building-integrations/punchout-development-plan.html + - title: Using PSP Integration Template + url: /docs/integrations/custom-building-integrations/psp-integration-template.html - title: Community contributions url: /docs/integrations/community-contributions.html diff --git a/_data/sidebars/pbc_all_sidebar.yml b/_data/sidebars/pbc_all_sidebar.yml index 6497d89cf12..cb9ea016da7 100644 --- a/_data/sidebars/pbc_all_sidebar.yml +++ b/_data/sidebars/pbc_all_sidebar.yml @@ -6,6 +6,13 @@ entries: - title: AI Foundation url: /docs/pbc/all/ai-foundation/latest/ai-foundation.html + - title: Yves + nested: + - title: Install and upgrade + nested: + - title: Enable the Zero State component for empty data + url: /docs/pbc/all/yves/install-and-upgrade/enable-zero-state-component-for-empty-data.html + - title: Back Office nested: - title: Base shop @@ -14,6 +21,8 @@ entries: url: /docs/pbc/all/back-office/base-shop/spryker-core-back-office-feature-overview.html - title: Back Office Translations overview url: /docs/pbc/all/back-office/base-shop/back-office-translations-overview.html + - title: Backoffice Configuration Framework + url: /docs/pbc/all/back-office/base-shop/backoffice-configuration-framework.html - title: Install and upgrade nested: - title: Install the Spryker Core Back Office feature @@ -33,6 +42,8 @@ entries: - "202507.0" - title: Install Back Office dropdown navigation url: /docs/pbc/all/back-office/base-shop/install-and-upgrade/install-back-office-dropdown-navigation.html + - title: Enable Google Material Icons + url: /docs/pbc/all/back-office/base-shop/install-and-upgrade/enable-google-material-icons.html - title: Configure the timezone in the Back Office url: /docs/pbc/all/back-office/base-shop/configure-the-timezone-in-the-back-office.html @@ -818,6 +829,8 @@ entries: - title: Tutorials and HowTos nested: + - title: Convert a dropdown with many items to a searchable select combo box in the Back Office + url: /docs/pbc/all/content-management-system/base-shop/tutorials-and-howtos/searchable-select-combo-box.html - title: Create a custom content item url: /docs/pbc/all/content-management-system/base-shop/tutorials-and-howtos/create-a-custom-content-item.html - title: Create a visibility condition for CMS Blocks @@ -896,6 +909,10 @@ entries: url: /docs/pbc/all/customer-relationship-management/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html - title: Customer Account Management + Promotions & Discounts feature url: /docs/pbc/all/customer-relationship-management/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.html + - title: Customer Account Management + Service Points feature + url: /docs/pbc/all/customer-relationship-management/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-service-points-feature.html + - title: Customer Account Management + Shipment feature + url: /docs/pbc/all/customer-relationship-management/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.html - title: Install Glue API nested: @@ -1055,6 +1072,8 @@ entries: url: /docs/pbc/all/customer-relationship-management/base-shop/import-and-export-data/file-details-company.csv.html - title: customer.csv url: /docs/pbc/all/customer-relationship-management/base-shop/import-and-export-data/file-details-customer.csv.html + - title: Import file details - customer.csv + url: /docs/pbc/all/customer-relationship-management/base-shop/import-file-details-customer.csv.html - title: Marketplace nested: @@ -1075,10 +1094,19 @@ entries: - title: Configure Data Exchange API endpoints url: /docs/pbc/all/data-exchange/configure-data-exchange-api.html + include_versions: + - "202404.0" + - "202410.0" - title: Sending requests with Data Exchange API url: /docs/pbc/all/data-exchange/sending-requests-with-data-exchange-api.html + include_versions: + - "202404.0" + - "202410.0" - title: Create post plugins for Data Exchange API url: /docs/pbc/all/data-exchange/create-post-plugins-for-data-exchange-api.html + include_versions: + - "202404.0" + - "202410.0" - title: Discount Management url: /docs/pbc/all/discount-management/discount-management.html @@ -1869,8 +1897,7 @@ entries: url: /docs/pbc/all/miscellaneous/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.html nested: - title: Configure - - url: /docs/pbc/all/miscellaneous/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.html + url: /docs/pbc/all/miscellaneous/third-party-integrations/operational-tools-monitoring-legal/loggly/configure-loggly.html - title: Proclane url: /docs/pbc/all/miscellaneous/third-party-integrations/operational-tools-monitoring-legal/proclane.html - title: Data Virtuality @@ -1902,6 +1929,8 @@ entries: - title: Marketplace nested: + - title: Buy Box feature overview + url: /docs/pbc/all/offer-management/marketplace/buy-box-feature-overview.html - title: Marketplace Product Offer feature overview url: /docs/pbc/all/offer-management/marketplace/marketplace-product-offer-feature-overview.html - title: Marketplace Merchant Portal Product Offer Management feature overview @@ -1910,6 +1939,8 @@ entries: nested: - title: Install features nested: + - title: Buy Box + url: /docs/pbc/all/offer-management/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.html - title: Marketplace Merchant Portal Product Offer Management - Merchant Portal url: /docs/pbc/all/offer-management/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html - title: Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management - Merchant Portal @@ -2864,6 +2895,8 @@ entries: url: /docs/pbc/all/product-information-management/base-shop/feature-overviews/product-feature-overview/search-widget-for-concrete-products-overview.html - title: Product Readiness url: /docs/pbc/all/product-information-management/base-shop/feature-overviews/product-feature-overview/product-readiness-overview.html + - title: Product Attachments + url: /docs/pbc/all/product-information-management/base-shop/feature-overviews/product-feature-overview/product-attachments-overview.html - title: Alternative Products url: /docs/pbc/all/product-information-management/base-shop/feature-overviews/alternative-products-feature-overview.html @@ -2948,6 +2981,8 @@ entries: url: /docs/pbc/all/product-information-management/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html - title: Product Approval Process url: /docs/pbc/all/product-information-management/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html + - title: Product Attachments + url: /docs/pbc/all/product-information-management/base-shop/install-and-upgrade/install-features/install-the-product-attachments-feature.html - title: Product Bundles + Cart url: /docs/pbc/all/product-information-management/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html - title: Product Bundles @@ -3870,8 +3905,9 @@ entries: nested: - title: Integrate Algolia url: /docs/pbc/all/search/base-shop/third-party-integrations/algolia/integrate-algolia.html - - title: Configure Algolia - url: /docs/pbc/all/search/base-shop/third-party-integrations/algolia/configure-algolia.html + include_versions: + - "202410.0" + - "202507.0" - title: Customize Algolia url: /docs/pbc/all/search/base-shop/third-party-integrations/algolia/customize-algolia.html include_versions: @@ -3879,6 +3915,9 @@ entries: - "202507.0" - title: Disconnect Algolia url: /docs/pbc/all/search/base-shop/third-party-integrations/algolia/disconnect-algolia.html + include_versions: + - "202410.0" + - "202512.0" - title: Getting access to Algolia Dashboard url: /docs/pbc/all/search/base-shop/third-party-integrations/algolia/getting-access-to-algolia-dashboard.html - title: Integrate Algolia Personalization @@ -3940,7 +3979,9 @@ entries: nested: - title: Self-Service Portal Service Management feature overview url: /docs/pbc/all/self-service-portal/ssp-service-management-feature-overview.html - - title: Self-Service Portal Inquiry Management feature overview + - title: SSP Service Management architecture overview + url: /docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.html + - title: SSP Inquiry Management feature overview url: /docs/pbc/all/self-service-portal/ssp-inquiry-management-feature-overview.html - title: SSP Dashboard Management feature overview url: /docs/pbc/all/self-service-portal/ssp-dashboard-management-feature-overview.html @@ -3968,8 +4009,12 @@ entries: url: /docs/pbc/all/self-service-portal/install/install-the-ssp-inquiry-management-feature.html - title: Install the SSP Service Management feature url: /docs/pbc/all/self-service-portal/install/install-the-ssp-service-management-feature.html + - title: Install the Asset-Based Catalog feature + url: /docs/pbc/all/self-service-portal/install/install-the-ssp-asset-based-catalog-feature.html - title: SSP glossary demo data url: /docs/pbc/all/self-service-portal/install/ssp-glossary-data-import.html + - title: SSP frontend templates + url: /docs/pbc/all/self-service-portal/install/ssp-frontend-templates.html - title: Manage in the Back Office nested: @@ -4089,6 +4134,11 @@ entries: - title: Update services url: /docs/pbc/all/service-point-management/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.html + - title: Tutorials and HowTos + nested: + - title: "HowTo: Configure shipment types" + url: /docs/pbc/all/service-point-management/unified-commerce/tutorials-and-howtos/howto-configure-shipment-types.html + - title: Shopping List and Wishlist url: /docs/pbc/all/shopping-list-and-wishlist/shopping-list-and-wishlist.html nested: @@ -4415,6 +4465,8 @@ entries: url: /docs/pbc/all/warehouse-management-system/base-shop/inventory-management-feature-overview.html - title: Availability Notification feature overview url: /docs/pbc/all/warehouse-management-system/base-shop/availability-notification-feature-overview.html + - title: Product Availability Display feature overview + url: /docs/pbc/all/warehouse-management-system/base-shop/product-availability-display-feature-overview.html - title: Install and upgrade nested: - title: Install features @@ -4425,6 +4477,8 @@ entries: url: /docs/pbc/all/warehouse-management-system/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.html - title: Inventory Management url: /docs/pbc/all/warehouse-management-system/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html + - title: Product Availability Display + url: /docs/pbc/all/warehouse-management-system/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.html - title: Inventory Management + Alternative Products url: /docs/pbc/all/warehouse-management-system/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html - title: Availability Notification Glue API diff --git a/_includes/badge.html b/_includes/badge.html new file mode 100644 index 00000000000..041f62e358b --- /dev/null +++ b/_includes/badge.html @@ -0,0 +1 @@ +{% if include.type contains "," %}{% assign badge_types = include.type | split: "," %}{% for badge_type in badge_types %}{% assign type = badge_type | strip %}{% if type == "feature" %}FEATURE{% elsif type == "improvement" %}IMPROVEMENT{% elsif type == "early-access" %}EARLY ACCESS{% elsif type == "breaking-change" %}BREAKING CHANGE{% elsif type == "deprecation" %}DEPRECATION{% endif %}{% endfor %}{% else %}{% assign type = include.type | strip %}{% if type == "feature" %}FEATURE{% elsif type == "improvement" %}IMPROVEMENT{% elsif type == "early-access" %}EARLY ACCESS{% elsif type == "breaking-change" %}BREAKING CHANGE{% elsif type == "deprecation" %}DEPRECATION{% endif %}{% endif %} diff --git a/_includes/carousel.html b/_includes/carousel.html new file mode 100644 index 00000000000..e213b199be1 --- /dev/null +++ b/_includes/carousel.html @@ -0,0 +1,67 @@ +{% comment %} +Usage: +{% include carousel.html + images=" + url1|alt1|caption1:: + url2|alt2|caption2:: + url3|alt3|caption3:: + " +%} + +Format: +- Use :: to separate images +- Use | to separate url, alt, and caption within each image +- Leave alt or caption empty: url1||::url2||::url3|| +- Each image URL can be on its own line for readability +- ID is auto-generated, no need to specify it +{% endcomment %} +{% if include.id %} +{% assign carousel_id = include.id %} +{% else %} +{% capture carousel_num %}{% increment carousel_counter %}{% endcapture %} +{% assign carousel_id = "carousel-" | append: carousel_num %} +{% endif %} +{% assign carousel_js_id = carousel_id | replace: "-", "_" %} +{% assign images_array = include.images | split: "::" %} + + diff --git a/_includes/dg/early-access-program.md b/_includes/dg/early-access-program.md index 1e43edbfa69..63dd35e021c 100644 --- a/_includes/dg/early-access-program.md +++ b/_includes/dg/early-access-program.md @@ -6,12 +6,12 @@ As part of Spryker's Early Access Program, we use your feedback to refine early- ### Program goals -- Integration and compatibility testing: Evaluate how well the tool integrates into various Spryker projects. -- Identify gaps and issues: Because this is a third-party tool using another third-party tool, Spryker is not in control of how ChatGPT behaves. There may be unexpected issues and unsatisfactory results which we need to track and collect to understand if they can be improved upon. -- Understand user onboarding and learning curve: +- Integration and compatibility testing: Evaluate how well the tool integrates into various Spryker projects. +- Identify gaps and issues: Because this is a third-party tool using another third-party tool, Spryker is not in control of how ChatGPT behaves. There may be unexpected issues and unsatisfactory results which we need to track and collect to understand if they can be improved upon. +- Understand user onboarding and learning curve: - Evaluate if the tool can be successfully used by engineers with varying levels of expertise. - Assess whether engineers can effectively use the tool without extensive training and derive valuable insights for testing processes. -- Drive adoption: Promote the usage of comprehensive functional testing checklists and dependency analysis, providing an easy entry point for users. +- Drive adoption: Promote the usage of comprehensive functional testing checklists and dependency analysis, providing an easy entry point for users. - Gather case studies and success stories: Gather case studies and success stories of early users who derived significant value from the tool. @@ -20,7 +20,7 @@ Your feedback will help us understand if we are meeting these goals effectively. ## Early Access Program -Early Access Program enables real-world testing of our product's new capabilities and tools. This helps us refine and improve the product based on feedback from partners and customers. +Early Access Program enables real-world testing of our product's new capabilities and tools. This helps us refine and improve the product based on feedback from partners and customers. Early access release GPTs may be unsupported and are subject to change, potentially leading to changes or discontinuation before a general availability release. @@ -30,7 +30,7 @@ You can start participating by using the tool and providing feedback. ### Provide feedback -You can provide feedback through surveys, interviews, and [Feedback Exchange Portal](https://portal.productboard.com/spryker/2-feedback-exchange). +You can provide feedback through surveys, interviews, and [Feedback Exchange Portal](https://forms.gle/YoKXZsvdS6z5smcm6). ### Iteration and improvement diff --git a/_includes/pbc/all/glue-api-guides/202410.0/abstract-product-prices-response-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/abstract-product-prices-response-attributes.md index ae8b85dcfed..a098e48fa14 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/abstract-product-prices-response-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/abstract-product-prices-response-attributes.md @@ -7,7 +7,7 @@ | abstract-product-prices | currency.code | String | Currency code. | | abstract-product-prices | currency.name | String | Currency name. | | abstract-product-prices | currency.symbol | String | Currency symbol. | -| abstract-product-prices | volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/{{site.version}}/base-shop/prices-feature-overview/volume-prices-overview.html) for the abstract product. | +| abstract-product-prices | volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/latest/base-shop/prices-feature-overview/volume-prices-overview.html) for the abstract product. | | abstract-product-prices | netAmount | Integer | Net price in cents. | | abstract-product-prices | grossAmount | Integer | Gross price in cents. | | abstract-product-prices | quantity | Integer | Number of items. | diff --git a/_includes/pbc/all/glue-api-guides/202410.0/checkout-data-request-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/checkout-data-request-attributes.md index a9edcac2734..310852a2b5d 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/checkout-data-request-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/checkout-data-request-attributes.md @@ -1,7 +1,7 @@ | ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | | --- | --- | --- | --- | -| billingAddress | Object | | Customer's billing [address](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | -| billingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer address](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| billingAddress | Object | | Customer's billing [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | +| billingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | | billingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | | billingAddress.email | String | ✓ | Customer's email address. | | billingAddress.firstName | String | ✓ | Customer's first name. | @@ -18,8 +18,8 @@ | shipments | Array | | A list of shipments. | | shipments.items | Array | ✓ | A list of items in a shipment. | | shipments.shippingAddress | Object | ✓ | Shipping address for the items in the shipment. | -| shipments.shippingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | -| shipments.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, include the `company-business-unit-addresses` resource in your request. Alternatively, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the company-business-unit-addresses resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipments.shippingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipments.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, include the `company-business-unit-addresses` resource in your request. Alternatively, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the company-business-unit-addresses resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | | shipments.shippingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | | shipments.shippingAddress.email | String | ✓ | Customer's email address. | | shipments.shippingAddress.firstName | String | ✓ | Customer's first name. | diff --git a/_includes/pbc/all/glue-api-guides/202410.0/checkout-request-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/checkout-request-attributes.md index 9120c3bcc1f..075aa338b08 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/checkout-request-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/checkout-request-attributes.md @@ -1,13 +1,13 @@ | ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | | --- | --- | --- | --- | -| customer | Object | ✓ | A list of attributes describing the [customer](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html) to submit checkout data of. | +| customer | Object | ✓ | A list of attributes describing the [customer](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html) to submit checkout data of. | | customer.salutation | String | ✓ | Salutation to use when addressing the customer. | | customer.email | String | ✓ | Customer's email address. | | customer.firstName | String | ✓ | Customer's first name. | | customer.lastName | String | ✓ | Customer's last name. | -| idCart | String | ✓ | Unique identifier of the customer's [cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) to check out. | -| billingAddress | Object | ✓ | Customer's billing [address](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | -| billingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| idCart | String | ✓ | Unique identifier of the customer's [cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) to check out. | +| billingAddress | Object | ✓ | Customer's billing [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | +| billingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | | billingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | | billingAddress.email | String | ✓ | Customer's email address. | | billingAddress.firstName | String | ✓ | Customer's first name. | @@ -25,9 +25,9 @@ | payments.paymentProviderName | String | ✓ | Name of the payment provider for this order. | | shipment | Object | ✓ | A list of attributes describing the shipping method selected for this order. | | shipment.items | object | ✓ | A list of items that are to be delivered to the shipping address defined in this shipment. | -| shipment.shippingAddress | Object | ✓ | Customer's shipping [address](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html) for this shipment. | -| shipment.shippingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | -| shipment.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the `company-business-unit-addresses` resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipment.shippingAddress | Object | ✓ | Customer's shipping [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html) for this shipment. | +| shipment.shippingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipment.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the `company-business-unit-addresses` resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | | shipment.shippingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | | shipment.shippingAddress.email | String | ✓ | Customer's email address. | | shipment.shippingAddress.firstName | String | ✓ | Customer's first name. | diff --git a/_includes/pbc/all/glue-api-guides/202410.0/concrete-product-prices-response-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/concrete-product-prices-response-attributes.md index 7612ca2fbd0..5c994819185 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/concrete-product-prices-response-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/concrete-product-prices-response-attributes.md @@ -7,7 +7,7 @@ | concrete-product-prices| currency.code | String | Currency code. | | concrete-product-prices| currency.name | String | Currency name. | | concrete-product-prices| currency.symbol | String | Currency symbol. | -| concrete-product-prices| volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/{{site.version}}/base-shop/prices-feature-overview/volume-prices-overview.html) for the concrete product. | +| concrete-product-prices| volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/latest/base-shop/prices-feature-overview/volume-prices-overview.html) for the concrete product. | | concrete-product-prices| netAmount | Integer | Net price in cents. | | concrete-product-prices| grossAmount | Integer | Gross price in cents. | | concrete-product-prices| quantity | Integer | Number of items. | diff --git a/_includes/pbc/all/glue-api-guides/202410.0/concrete-products-response-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/concrete-products-response-attributes.md index 345c9d4975c..11791c87c96 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/concrete-products-response-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/concrete-products-response-attributes.md @@ -1,9 +1,9 @@ | RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | |-|-|-|-| | concrete-products | sku | String | SKU of the concrete product. | -| concrete-products | isDiscontinued | Boolean | Specifies whether a product is [discontinued](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html):
**true** - the product is discontinued and requires a replacement item;
**false**—the product is not discontinued. | +| concrete-products | isDiscontinued | Boolean | Specifies whether a product is [discontinued](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html):
**true** - the product is discontinued and requires a replacement item;
**false**—the product is not discontinued. | | concrete-products | discontinuedNote | String | Optional note that was specified when marking a product as discontinued. | -| concrete-products | averageRating | String | Average [rating](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) of the product based on customer rating. | +| concrete-products | averageRating | String | Average [rating](/docs/pbc/all/ratings-reviews/latest/ratings-and-reviews.html) of the product based on customer rating. | | concrete-products | reviewCount | Integer | Number of reviews left by customer for this product. | | concrete-products | name | String | Name of the concrete product. | | concrete-products | description | String | Description of the concrete product. | diff --git a/_includes/pbc/all/glue-api-guides/202410.0/orders-response-attributes.md b/_includes/pbc/all/glue-api-guides/202410.0/orders-response-attributes.md index a5579b004da..75eb22878cf 100644 --- a/_includes/pbc/all/glue-api-guides/202410.0/orders-response-attributes.md +++ b/_includes/pbc/all/glue-api-guides/202410.0/orders-response-attributes.md @@ -3,7 +3,7 @@ | ATTRIBUTE | TYPE | DESCRIPTION | | ------ | ---| - | -| itemStates | Array | Statuses of the order's items in the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html). | +| itemStates | Array | Statuses of the order's items in the [state machine](/docs/pbc/all/order-management-system/latest/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html). | | createdAt | String | Date and time when the order was created. | | currencyIsoCode | String | ISO 4217 code of the currency that was selected when placing the order. | | priceMode | String | Price mode that was active when placing the order. Possible values: | @@ -44,7 +44,7 @@ | billingAddress.email | String | Email address to use for communication. | | billingAddress.country | String | Specifies the country. | | billingAddress.iso2Code | String | ISO 2-Letter Country Code to use. | -| shippingAddress | object | Shipment address of the order. This value is returned only if you submit an order without split delivery. See [Checking out purchases in version 202009.0](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) to learn how to do that. | +| shippingAddress | object | Shipment address of the order. This value is returned only if you submit an order without split delivery. See [Checking out purchases in version 202009.0](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) to learn how to do that. | **Order item information** @@ -96,7 +96,7 @@ | items.salesOrderConfiguredBundleItem |Object |Contains information about the items of the configured bundle. | | items.salesOrderConfiguredBundleItem.configurableBundleTemplateSlotUuid| String| Unique identifier of the configurable bundle slot in the system. | | items.metadata | object | Metadata of the concrete product. | -| items.metadata.superAttributes | String | [Attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html) of the order item. | +| items.metadata.superAttributes | String | [Attributes](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html) of the order item. | | items.metadata.image | String | Product image URL. | **Measurement unit calculations** @@ -181,4 +181,4 @@ | ATTRIBUTE | TYPE | DESCRIPTION | | ----- | -------------| ---------- | -| shipments | object | Information about the shipments used in this order. This value is returned only if you submit an order without split delivery. To learn how to do that, see [Check out purchases](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html). To see all the attributes that are returned when retrieving orders without split delivery, see [Retrieving orders](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html). To retrieve shipment details, include the order-shipments resource in the request. | +| shipments | object | Information about the shipments used in this order. This value is returned only if you submit an order without split delivery. To learn how to do that, see [Check out purchases](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html). To see all the attributes that are returned when retrieving orders without split delivery, see [Retrieving orders](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html). To retrieve shipment details, include the order-shipments resource in the request. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-availabilities-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-availabilities-response-attributes.md new file mode 100644 index 00000000000..8a002365a26 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-availabilities-response-attributes.md @@ -0,0 +1,4 @@ +| FIELD | TYPE | DESCRIPTION | +| --- | --- | --- | +| availability | Boolean | Boolean to inform about the availability | +| quantity | Integer | Available stock (all warehouses aggregated) | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-image-sets-reponse-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-image-sets-reponse-attributes.md new file mode 100644 index 00000000000..1ea47d6c053 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-image-sets-reponse-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | DESCRIPTION | +| --- | --- | --- | +| abstract-product-image-sets | name | Image set name. | +| abstract-product-image-sets | externalUrlLarge | URLs to the image per image set per image. | +| abstract-product-image-sets | externalUrlSmall | URLs to the image per image set per image. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-prices-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-prices-response-attributes.md new file mode 100644 index 00000000000..a098e48fa14 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/abstract-product-prices-response-attributes.md @@ -0,0 +1,13 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| abstract-product-prices | price | Integer | Price to pay for that product in cents. | +| abstract-product-prices | priceTypeName | String | Price type. | +| abstract-product-prices | netAmount | Integer | Net price in cents. | +| abstract-product-prices | grossAmount | Integer | Gross price in cents. | +| abstract-product-prices | currency.code | String | Currency code. | +| abstract-product-prices | currency.name | String | Currency name. | +| abstract-product-prices | currency.symbol | String | Currency symbol. | +| abstract-product-prices | volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/latest/base-shop/prices-feature-overview/volume-prices-overview.html) for the abstract product. | +| abstract-product-prices | netAmount | Integer | Net price in cents. | +| abstract-product-prices | grossAmount | Integer | Gross price in cents. | +| abstract-product-prices | quantity | Integer | Number of items. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/abstract-products-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/abstract-products-response-attributes.md new file mode 100644 index 00000000000..2fc8745592e --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/abstract-products-response-attributes.md @@ -0,0 +1,17 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| abstract-products | sku | String | SKU of the abstract product. | +| abstract-products | averageRating | String | Average rating of the product based on customer rating. | +| abstract-products | reviewCount | Integer | Number of reviews left by customer for this abstract product. | +| abstract-products | name | String | Name of the abstract product. | +| abstract-products | description | String | Description of the abstract product. | +| abstract-products | attributes | Object | List of attributes and their values. | +| abstract-products | superAttributeDefinition | String | Attributes flagged as super attributes that are, however, not relevant to distinguish between the product variants. | +| abstract-products | attributeMap | Object | Each super attribute / value combination and the corresponding concrete product IDs are listed here. | +| abstract-products | attributeMap.super_attributes | Object | Applicable super attribute and its values for the product variants. | +| abstract-products | attributeMap.attribute_variants | Object | List of super attributes with the list of values. | +| abstract-products | attributeMap.product_concrete_ids | String | Product IDs of the product variants. | +| abstract-products | metaTitle | String | Meta title of the product. | +| abstract-products | metaKeywords | String | Meta keywords of the product. | +| abstract-products | metaDescription | String | Meta description of the product. | +| abstract-products | attributeNames | Object | All non-super attribute / value combinations for the abstract product. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/addresses-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/addresses-response-attributes.md new file mode 100644 index 00000000000..01b848431e2 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/addresses-response-attributes.md @@ -0,0 +1,16 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| addresses | salutation | String | Salutation to use when addressing to the customer. | +| addresses | firstName | String | Customer's first name. | +| addresses | lastName | String | Customer's last name. | +| addresses | address1 | String | The first line of the customer's address. | +| addresses | address2 | String | The second line of the customer's address. | +| addresses | address3 | String | The third line of the customer's address. | +| addresses | zipCode | String | ZIP code. | +| addresses | city | String | Specifies the city. | +| addresses | country | String | Specifies the country. | +| addresses | iso2Code | | Specifies an ISO 2 Country Code to use. | +| addresses | company | String | Specifies the customer's company. | +| addresses | phone | String | Specifies the customer's phone number. | +| addresses | isDefaultShipping | Boolean | Specifies whether the address should be used as the default shipping address of the customer. If the parameter is not set, the default value is **true**. This is also the case for the first address to be saved. | +| addresses | isDefaultBilling | Boolean | Specifies whether the address should be used as the default billing address of the customer. If the parameter is not set, the default value is **true**. This is also the case for the first address to be saved. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/bundle-items-bundled-items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/bundle-items-bundled-items-response-attributes.md new file mode 100644 index 00000000000..3ba16b35eb4 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/bundle-items-bundled-items-response-attributes.md @@ -0,0 +1,35 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| bundle-items, bundled-items | sku | String | SKU of the product. | +| bundle-items, bundled-items | quantity | Integer | Quantity of the given product in the cart. | +| bundle-items, bundled-items | groupKey | String | Unique item identifier. The value is generated based on product parameters. | +| bundle-items, bundled-items | abstractSku | String | Unique identifier of the abstract product that owns the concrete product. | +| bundle-items, bundled-items | amount | Integer | Amount of the products in the cart. | +| bundle-items, bundled-items | unitPrice | Integer | Single item price without assuming is it net or gross. This value should be used everywhere a price is disabled. It allows switching the tax mode without side effects. | +| bundle-items, bundled-items | sumPrice | Integer | Sum of all items prices calculated. | +| bundle-items, bundled-items | taxRate | Integer | Current tax rate in per cent. | +| bundle-items, bundled-items | unitNetPrice | Integer | Single item net price. | +| bundle-items, bundled-items | sumNetPrice | Integer | Sum of all items' net price. | +| bundle-items, bundled-items | unitGrossPrice | Integer | Single item gross price. | +| bundle-items, bundled-items | sumGrossPrice | Integer | Sum of items gross price. | +| bundle-items, bundled-items | unitTaxAmountFullAggregation | Integer | Total tax amount for a given item with additions. | +| bundle-items, bundled-items | sumTaxAmountFullAggregation | Integer | Total tax amount for a given amount of items with additions. | +| bundle-items, bundled-items | sumSubtotalAggregation | Integer | Sum of subtotals of the items. | +| bundle-items, bundled-items | unitSubtotalAggregation | Integer | Subtotal for the given item. | +| bundle-items, bundled-items | unitProductOptionPriceAggregation | Integer | Item total product option price. | +| bundle-items, bundled-items | sumProductOptionPriceAggregation | Integer | Item total of product options for the given sum of items. | +| bundle-items, bundled-items | unitDiscountAmountAggregation | Integer | Item total discount amount. | +| bundle-items, bundled-items | sumDiscountAmountAggregation | Integer | Sum Item total discount amount. | +| bundle-items, bundled-items | unitDiscountAmountFullAggregation | Integer | Sum total discount amount with additions. | +| bundle-items, bundled-items | sumDiscountAmountFullAggregation | Integer | Item total discount amount with additions. | +| bundle-items, bundled-items | unitPriceToPayAggregation | Integer | Item total price to pay after discounts with additions. | +| bundle-items, bundled-items | sumPriceToPayAggregation | Integer | Sum of the prices to pay (after discounts). | +| bundle-items, bundled-items | salesUnit | Object | List of attributes defining the sales unit to be used for item amount calculation. | +| bundle-items, bundled-items | salesUnit.id | Integer | Numeric value that defines the sales units to calculate the item amount in. | +| bundle-items, bundled-items | salesUnit.amount | Integer | Amount of product in the defined sales units. | +| bundle-items, bundled-items | selectedProductOptions | array | List of attributes describing the product options that were added to the cart with the product. | +| bundle-items, bundled-items | selectedProductOptions.optionGroupName | String | Name of the group to which the option belongs. | +| bundle-items, bundled-items | selectedProductOptions.sku | String | SKU of the product option. | +| bundle-items, bundled-items | selectedProductOptions.optionName | String | Product option name. | +| bundle-items, bundled-items | selectedProductOptions.price | Integer | Product option price in cents. | +| bundle-items, bundled-items | selectedProductOptions.currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/bundled-products-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/bundled-products-response-attributes.md new file mode 100644 index 00000000000..f638c4e4de6 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/bundled-products-response-attributes.md @@ -0,0 +1,4 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| bundled-products | sku | String | Unique identifier of the product in the bundle. | +| bundled-products |quantity |Integer| Quantity of the product in the bundle.| diff --git a/_includes/pbc/all/glue-api-guides/202602.0/cart-permission-groups-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/cart-permission-groups-response-attributes.md new file mode 100644 index 00000000000..74300c123e9 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/cart-permission-groups-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| cart-permission-groups | id | String | A unique ID that is used to define permissions with this permission group. | +| cart-permission-groups | name | String | The permission group's name. For example, `READ_ONLY` or `FULL_ACCESS`. | +| cart-permission-groups | isDefault | Boolean | If true, the permission group is applied to shared carts by default. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/carts-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/carts-response-attributes.md new file mode 100644 index 00000000000..8d6fe5949f8 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/carts-response-attributes.md @@ -0,0 +1,40 @@ +#### General cart information + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| carts | currency | String | Currency that was selected when the cart was created. | +| carts | isDefault | Boolean | Specifies whether the cart is the default one for the customer. The field is available in multi-cart environments only. | +| carts | name | String | Specifies a cart name. The field is available in multi-cart environments only. | +| carts | priceMode | String | Price mode that was active when the cart was created. | +| carts | store | String | Store for which the cart was created. | + +#### Discount information + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| carts | displayName | String | Discount name. | +| carts | amount | Integer | Discount amount applied to the cart. | +| carts | code | String | Discount code applied to the cart. | + +#### Totals + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| carts | expenseTotal | String | Total amount of expenses such as shipping costs. | +| carts | discountTotal | Integer | Total amount of discounts applied to the cart. | +| carts | taxTotal | Integer | Total amount of taxes to be paid. | +| carts | subTotal | Integer | Subtotal of the cart. | +| carts | grandTotal | Integer | Grand total of the cart. | +| carts | priceToPay | Integer | Total price of the cart to pay after discounts. | +| carts | selectedProductOptions | array | List of attributes describing the product options that were added to cart with the product. | + +#### Thresholds + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| carts | threshold | Array | Thresholds applied. | +| carts | type | String | Threshold type. | +| carts | threshold | Integer | Threshold monetary amount. | +| carts | fee | Integer | Fee to be paid if the threshold is not reached. | +| carts | deltaWithSubtotal | Integer | Displays the remaining amount that needs to be added to pass the threshold. | +| carts | message | String | Message shown to the customer if the threshold is not fulfilled. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/category-nodes-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/category-nodes-response-attributes.md new file mode 100644 index 00000000000..58eef245126 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/category-nodes-response-attributes.md @@ -0,0 +1,9 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| caregory-nodes | nodeId | String | Category node ID. | +| caregory-nodes | name | String | Name of category associated with the node. | +| caregory-nodes | metaTitle | String | Meta title of the category. | +| caregory-nodes | metaKeywords | String | Meta keywords of the category. | +| caregory-nodes | metaDescription | String | Meta description of the category. | +| caregory-nodes | isActive | Boolean | Boolean to see, if the category is active. | +| caregory-nodes | order | Integer | Digits between 1 and 100, with 100 ranking the highest (on one level under the parent node). | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-request-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-request-attributes.md new file mode 100644 index 00000000000..310852a2b5d --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-request-attributes.md @@ -0,0 +1,36 @@ +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| billingAddress | Object | | Customer's billing [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | +| billingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| billingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | +| billingAddress.email | String | ✓ | Customer's email address. | +| billingAddress.firstName | String | ✓ | Customer's first name. | +| billingAddress.lastName | String | ✓ | Customer's last name. | +| billingAddress.address1 | String | ✓ | The first line of the customer's address. | +| billingAddress.address2 | String | ✓ | The second line of the customer's address. | +| billingAddress.address3 | String | | The third line of the customer's address. | +| billingAddress.zipCode | String | ✓ | ZIP code. | +| billingAddress.city | String | ✓ | Specifies the city. | +| billingAddress.iso2Code | String | ✓ | Specifies an ISO 2 Country Code to use. | +| billingAddress.company | String | | Customer's company. | +| billingAddress.phone | String | | Customer's phone number. | +| payments | Array | | The payment methods used in this order. | +| shipments | Array | | A list of shipments. | +| shipments.items | Array | ✓ | A list of items in a shipment. | +| shipments.shippingAddress | Object | ✓ | Shipping address for the items in the shipment. | +| shipments.shippingAddress.id | String | . | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [add a customer addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipments.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, include the `company-business-unit-addresses` resource in your request. Alternatively, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the company-business-unit-addresses resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipments.shippingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | +| shipments.shippingAddress.email | String | ✓ | Customer's email address. | +| shipments.shippingAddress.firstName | String | ✓ | Customer's first name. | +| shipments.shippingAddress.lastName | String | ✓ | Customer's last name. | +| shipments.shippingAddress.address1 | String | ✓ | The first line of the customer's address. | +| shipments.shippingAddress.address2 | String | ✓ | The second line of the customer's address. | +| shipments.shippingAddress.address3 | String | | The third line of the customer's address. | +| shipments.shippingAddress.zipCode | String | ✓ | ZIP code. | +| shipments.shippingAddress.city | String | ✓ | Specifies the city. | +| shipments.shippingAddress.iso2Code | String | ✓ | Specifies an ISO 2 Country Code to use. | +| shipments.shippingAddress.company | String | | Customer's company. | +| shipments.shippingAddress.phone | String | | Customer's phone number. | +| shipments.shippingAddress.idShipmentMethod | Integer | ✓ | Unique identifier of a shipment method used for a shipment. | +| shipments.shippingAddress.requestedDeliveryDate | Date | ✓ | Desired delivery date for a shipment. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-response-attributes.md new file mode 100644 index 00000000000..52b248474ea --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/checkout-data-response-attributes.md @@ -0,0 +1,11 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | ----------- | ----- | ----- | +| checkout-data | addresses | Array | A list of customer addresses that can be used for billing or shipping. This attribute is deprecated. To retrieve all available addresses, include the `addresses` resource in your request. | +| checkout-data | paymentProviders | Array | Payment providers that can be used for the checkout. This attribute is deprecated. To retrieve all the available payment methods, include the `payment-methods` resource in your request. | +| checkout-data | shipmentMethods | Array | A list of available shipment methods. This attribute is deprecated. To retrieve all the available shipment methods, include the `shipment-methods` resource in your request. | +| checkout-data | selectedShipmentMethods | Array | Shipment methods selected for the order. | +| checkout-data | selectedPaymentMethods | Array | Payment methods selected for this order. | +| checkout-data | selectedPaymentMethods.paymentMethodName | String | Payment method name. | +| checkout-data | selectedPaymentMethods.paymentProviderName | String | Name of the payment provider for this payment method. | +| checkout-data | selectedPaymentMethods.priority | String | Defines the order of returned payment methods in ascending order. | +| checkout-data | selectedPaymentMethods.requiredRequestData | Array | A list of attributes required by the given method to effectuate a purchase. The actual list depends on the specific provider. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/checkout-request-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/checkout-request-attributes.md new file mode 100644 index 00000000000..075aa338b08 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/checkout-request-attributes.md @@ -0,0 +1,51 @@ +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| customer | Object | ✓ | A list of attributes describing the [customer](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html) to submit checkout data of. | +| customer.salutation | String | ✓ | Salutation to use when addressing the customer. | +| customer.email | String | ✓ | Customer's email address. | +| customer.firstName | String | ✓ | Customer's first name. | +| customer.lastName | String | ✓ | Customer's last name. | +| idCart | String | ✓ | Unique identifier of the customer's [cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) to check out. | +| billingAddress | Object | ✓ | Customer's billing [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). | +| billingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| billingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | +| billingAddress.email | String | ✓ | Customer's email address. | +| billingAddress.firstName | String | ✓ | Customer's first name. | +| billingAddress.lastName | String | ✓ | Customer's last name. | +| billingAddress.address1 | String | ✓ | The first line of the customer's address. | +| billingAddress.address2 | String | ✓ | The second line of the customer's address. | +| billingAddress.address3 | String | ✓ | The third line of the customer's address. | +| billingAddress.zipCode | String | ✓ | ZIP code. | +| billingAddress.city | String | ✓ | Specifies the city. | +| billingAddress.iso2Code | String | ✓ | Specifies an ISO 2 Country Code to use. | +| billingAddress.company | String | | Customer's company. | +| billingAddress.phone | String | | Customer's phone number. | +| payments | Array | ✓ | A list of payment methods selected for this order. | +| payments.paymentMethodName | String | ✓ | Name of the payment method for this order. | +| payments.paymentProviderName | String | ✓ | Name of the payment provider for this order. | +| shipment | Object | ✓ | A list of attributes describing the shipping method selected for this order. | +| shipment.items | object | ✓ | A list of items that are to be delivered to the shipping address defined in this shipment. | +| shipment.shippingAddress | Object | ✓ | Customer's shipping [address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html) for this shipment. | +| shipment.shippingAddress.id | String | | A hyphenated alphanumeric value of an existing customer address. To get it, include the `addresses` resource in your request or [retrieve a customer's addresses](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html). If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipment.shippingAddress.idCompanyBusinessUnitAddress | String | | A hyphenated alphanumeric value of an existing company business unit address. To get it, [retrieve a company business unit](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) with the `company-business-unit-addresses` resource included. If you pass this value for a billing or shipping address, do not pass the other address attributes. | +| shipment.shippingAddress.salutation | String | ✓ | Salutation to use when addressing the customer. | +| shipment.shippingAddress.email | String | ✓ | Customer's email address. | +| shipment.shippingAddress.firstName | String | ✓ | Customer's first name. | +| shipment.shippingAddress.lastName | String | ✓ | Customer's last name. | +| shipment.shippingAddress.address1 | String | ✓ | The first line of the customer's address. | +| shipment.shippingAddress.address2 | String | ✓ | The second line of the customer's address. | +| shipment.shippingAddress.address3 | String | ✓ | The third line of the customer's address. | +| shipment.shippingAddress.zipCode | String | ✓ | ZIP code. | +| shipment.shippingAddress.city | String | ✓ | Specifies the city. | +| shipment.shippingAddress.iso2Code | String | ✓ | Specifies an ISO 2 Country Code to use. | +| shipment.shippingAddress.company | String | | Customer's company. | +| shipment.shippingAddress.phone | String | | Customer's phone number. | +| shipment.shippingAddress.idShipmentMethod | String | | Unique identifier of the shipment method for this order or shipment. | +| shipment.shippingAddress.idShipmentMethod | String | ✓ | Unique identifier of the shipment method for this shipment. | +| shipment.shippingAddress.requestedDeliveryDate | Date | | The delivery date for this shipment requested by the customer. | + +{% info_block warningBox "Purchasing a gift card" %} + +To prevent fraud, the *invoice* payment method is not accepted if a cart contains a gift card. + +{% endinfo_block %} diff --git a/_includes/pbc/all/glue-api-guides/202602.0/cms-pages-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/cms-pages-response-attributes.md new file mode 100644 index 00000000000..e03ee93e5aa --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/cms-pages-response-attributes.md @@ -0,0 +1,7 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| cms-pages | pageKey | String | Page identifier. | +| cms-pages | Name | String | Name of the CMS page. | +| cms-pages | validTo | DateTimeUtc | Date until which the CMS page is visible on the Storefront. | +| cms-pages | isSearchable | Boolean | Indicates if the page can be searched for on the web. | +| cms-pages | url | String | URL address of the CMS page. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/companies-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/companies-response-attributes.md new file mode 100644 index 00000000000..65ddbef0024 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/companies-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| companies | name | String | Specifies the company name. | +| companies | isActive | Boolean | Indicates whether the company is active. | +| companies | status | String | Specifies the status of the company. Possible values: *Pending*, *Approved* or *Denied*. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/company-business-unit-addresses-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/company-business-unit-addresses-response-attributes.md new file mode 100644 index 00000000000..b6e3823413c --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/company-business-unit-addresses-response-attributes.md @@ -0,0 +1,10 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| company-business-unit-addresses | address1 | String | Specifies the first line of the business unit address. | +| company-business-unit-addresses | address2 | String | Specifies the second line of the business unit address. | +| company-business-unit-addresses | address3 | String | Specifies the third line of the business unit address. | +| company-business-unit-addresses | zipCode | String | Specifies the ZIP code. | +| company-business-unit-addresses | city | String | Specifies the city. | +| company-business-unit-addresses | phone | String | Specifies the phone number of the business unit. | +| company-business-unit-addresses | iso2Code | String | Specifies an ISO 2 country code to use. | +| company-business-unit-addresses | comment | String | Specifies an optional comment to the business unit. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/company-business-units-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/company-business-units-response-attributes.md new file mode 100644 index 00000000000..f8b9a8cc976 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/company-business-units-response-attributes.md @@ -0,0 +1,9 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| company-business-units | name | String | Business unit name. | +| company-business-units | email | String | Email address of the business unit. | +| company-business-units | phone | String | Telephone number of the business unit. | +| company-business-units | externalUrl | String | URL of the website of the business unit. | +| company-business-units | bic | String | Specifies the Bank Identifier Code of the Business Unit. | +| company-business-units | iban | String | Specifies the International Bank Account Number of the Business Unit. | +| company-business-units | defaultBillingAddress | String | Specifies the default billing address of the Business Unit. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/company-roles-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/company-roles-response-attributes.md new file mode 100644 index 00000000000..619f4f27f8b --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/company-roles-response-attributes.md @@ -0,0 +1,4 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| company-roles | name | String | Company role name. | +| company-roles | isDefault | Boolean | Indicates if the company role is default role for the company. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-availabilities-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-availabilities-response-attributes.md new file mode 100644 index 00000000000..c5cb22ed67a --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-availabilities-response-attributes.md @@ -0,0 +1,5 @@ +| FIELD | TYPE | DESCRIPTION | +| --- | --- | --- | +| availability | Boolean | Boolean to inform about the availability. | +| quantity|Integer|Available stock (all warehouses aggregated). | +| isNeverOutOfStock | Boolean | A boolean to show if this is a product that is never out of stock. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-image-sets-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-image-sets-response-attributes.md new file mode 100644 index 00000000000..f8788b9a8cf --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-image-sets-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | DESCRIPTION | +| --- | --- | --- | +| concrete-product-image-sets | name | Image set name. | +| concrete-product-image-sets | externalUrlLarge | URLs to the image per image set per image. | +| concrete-product-image-sets | externalUrlSmall | URLs to the image per image set per image. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-prices-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-prices-response-attributes.md new file mode 100644 index 00000000000..5c994819185 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/concrete-product-prices-response-attributes.md @@ -0,0 +1,13 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| concrete-product-prices | price | Integer | Price to pay for that product in cents. | +| concrete-product-prices| priceTypeName | String | Price type. | +| concrete-product-prices| netAmount | Integer | Net price in cents. | +| concrete-product-prices| grossAmount | Integer | Gross price in cents. | +| concrete-product-prices| currency.code | String | Currency code. | +| concrete-product-prices| currency.name | String | Currency name. | +| concrete-product-prices| currency.symbol | String | Currency symbol. | +| concrete-product-prices| volumePrices | Array | An array of objects defining the [volume prices](/docs/pbc/all/price-management/latest/base-shop/prices-feature-overview/volume-prices-overview.html) for the concrete product. | +| concrete-product-prices| netAmount | Integer | Net price in cents. | +| concrete-product-prices| grossAmount | Integer | Gross price in cents. | +| concrete-product-prices| quantity | Integer | Number of items. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/concrete-products-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/concrete-products-response-attributes.md new file mode 100644 index 00000000000..11791c87c96 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/concrete-products-response-attributes.md @@ -0,0 +1,16 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| concrete-products | sku | String | SKU of the concrete product. | +| concrete-products | isDiscontinued | Boolean | Specifies whether a product is [discontinued](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html):
**true** - the product is discontinued and requires a replacement item;
**false**—the product is not discontinued. | +| concrete-products | discontinuedNote | String | Optional note that was specified when marking a product as discontinued. | +| concrete-products | averageRating | String | Average [rating](/docs/pbc/all/ratings-reviews/latest/ratings-and-reviews.html) of the product based on customer rating. | +| concrete-products | reviewCount | Integer | Number of reviews left by customer for this product. | +| concrete-products | name | String | Name of the concrete product. | +| concrete-products | description | String | Description of the concrete product. | +| concrete-products | attributes | Object | List of attribute keys and their values for the product. | +| concrete-products | superAttributeDefinition | String | List of attributes that are flagged as super attributes. | +| concrete-products | metaTitle | String | Meta title of the product. | +| concrete-products | metaKeywords | String | Meta keywords of the product. | +| concrete-products | metaDescription | String | Meta description of the product. | +| concrete-products | attributeNames | String | List of attribute keys and their translations. | +| concrete-products | productAbstractSku | String | Unique identifier of the abstract product owning this concrete product. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/customers-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/customers-response-attributes.md new file mode 100644 index 00000000000..66eb9d7d659 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/customers-response-attributes.md @@ -0,0 +1,9 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| customers | firstName | String | Customer's first name. | +| customers | lastName | String | Customer's last name. | +| customers | gender | String | Gender of the customer. | +| customers | dateOfBirth | String | Customer's date of birth. | +| customers | salutation | String | Salutation to use when addressing the customer. | +| customers | createdAt | String | Account creation date. | +| customers | updatedAt | String | Date of the last update. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/gift-cards-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/gift-cards-response-attributes.md new file mode 100644 index 00000000000..2abe52f7f12 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/gift-cards-response-attributes.md @@ -0,0 +1,8 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| gift-cards | code | String | Code of the gift card sent to the specified email address after the gift card was purchased. | +| gift-cards | name | String | Name of the gift card. | +| gift-cards | value | Integer | Amount applied to the card when the gift card code is redeemed. | +| gift-cards | currencyIsoCode | String | Currency to which the code is applied. | +| gift-cards | actualValue | Integer | Actual value of the gift card code. | +| gift-cards | isActive | Boolean | Specifies whether the gift card code is redeemed or not. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/guest-cart-items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/guest-cart-items-response-attributes.md new file mode 100644 index 00000000000..698be41bc97 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/guest-cart-items-response-attributes.md @@ -0,0 +1,35 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| guest-cart-items | sku | String | SKU of the product. | +| guest-cart-items | quantity | Integer | Quantity of the given product in the cart. | +| guest-cart-items | groupKey | String | Unique item identifier. The value is generated based on product parameters. | +| guest-cart-items | abstractSku | String | Unique identifier of the abstract product that owns the concrete product. | +| guest-cart-items | amount | Integer | Amount of the products in the cart. | +| guest-cart-items | unitPrice | Integer | Single item price without assuming is it net or gross. This value should be used everywhere a price is disabled. It allows switching the tax mode without side effects. | +| guest-cart-items | sumPrice | Integer | Sum of all items prices calculated. | +| guest-cart-items | taxRate | Integer | Current tax rate in per cent. | +| guest-cart-items | unitNetPrice | Integer | Single item net price. | +| guest-cart-items | sumNetPrice | Integer | Sum of all items' net price. | +| guest-cart-items | unitGrossPrice | Integer | Single item gross price. | +| guest-cart-items | sumGrossPrice | Integer | Sum of items gross price. | +| guest-cart-items | unitTaxAmountFullAggregation | Integer | Total tax amount for a given item with additions. | +| guest-cart-items | sumTaxAmountFullAggregation | Integer | Total tax amount for a given amount of items with additions. | +| guest-cart-items | sumSubtotalAggregation | Integer | Sum of subtotals of the items. | +| guest-cart-items | unitSubtotalAggregation | Integer | Subtotal for the given item. | +| guest-cart-items | unitProductOptionPriceAggregation | Integer | Item total product option price. | +| guest-cart-items | sumProductOptionPriceAggregation | Integer | Item total of product options for the given sum of items. | +| guest-cart-items | unitDiscountAmountAggregation | Integer | Item total discount amount. | +| guest-cart-items | sumDiscountAmountAggregation | Integer | Sum Item total discount amount. | +| guest-cart-items | unitDiscountAmountFullAggregation | Integer | Sum total discount amount with additions. | +| guest-cart-items | sumDiscountAmountFullAggregation | Integer | Item total discount amount with additions. | +| guest-cart-items | unitPriceToPayAggregation | Integer | Item total price to pay after discounts with additions. | +| guest-cart-items | sumPriceToPayAggregation | Integer | Sum of the prices to pay (after discounts). | +| guest-cart-items | salesUnit | Object | List of attributes defining the sales unit to be used for item amount calculation. | +| guest-cart-items | salesUnit.id | Integer | Numeric value that defines the sales units to calculate the item amount in. | +| guest-cart-items | salesUnit.amount | Integer | Amount of product in the defined sales units. | +| guest-cart-items | selectedProductOptions | array | List of attributes describing the product options that were added to the cart with the product. | +| guest-cart-items | selectedProductOptions.optionGroupName | String | Name of the group to which the option belongs. | +| guest-cart-items | selectedProductOptions.sku | String | SKU of the product option. | +| guest-cart-items | selectedProductOptions.optionName | String | Product option name. | +| guest-cart-items | selectedProductOptions.price | Integer | Product option price in cents. | +| guest-cart-items | selectedProductOptions.currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/guest-carts-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/guest-carts-response-attributes.md new file mode 100644 index 00000000000..55b40f52b30 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/guest-carts-response-attributes.md @@ -0,0 +1,38 @@ +#### General cart information + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| guest-carts | priceMode | String | Price mode that was active when the cart was created. | +| guest-carts | currency | String | Currency that was selected when the cart was created. | +| guest-carts | store | String | Store for which the cart was created. | +| guest-carts | name | String | Name of the shopping cart. | +| guest-carts | isDefault | Boolean | Defines whether the cart is default or not. | + +#### Totals information + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| guest-carts | expenseTotal | Integer | Total amount of expenses such as shipping costs. | +| guest-carts | discountTotal | Integer | Total amount of discounts applied to the cart. | +| guest-carts | taxTotal | Integer | Total amount of taxes to be paid. | +| guest-carts | subTotal | Integer | Subtotal of the cart. | +| guest-carts | grandTotal | Integer | Grand total of the cart. | + +#### Discount information + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| guest-carts | displayName | String | Discount name. | +| guest-carts | code | String | Discount code applied to the cart. | +| guest-carts | amount | Integer | Discount amount applied to the cart. | + +#### Thresholds + +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| carts | threshold | Array | Thresholds applied. | +| carts | type | String | Threshold type. | +| carts | threshold | Integer | Threshold monetary amount. | +| carts | fee | Integer | Fee to be paid if the threshold is not reached. | +| carts | deltaWithSubtotal | Integer | Displays the remaining amount that needs to be added to pass the threshold. | +| carts | message | String | Message shown to the customer if the threshold is not fulfilled. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/items-response-attributes.md new file mode 100644 index 00000000000..fd25941e044 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/items-response-attributes.md @@ -0,0 +1,41 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| items | sku | String | Product SKU. | +| items | quantity | Integer | Quantity of the given product in the cart. | +| items | groupKey | String | Unique item identifier. The value is generated based on product properties. | +| items | abstractSku | String | Unique identifier of the abstract product owning this concrete product. | +| items | amount | Integer | Amount of the products in the cart. | +| items | unitPrice | Integer | Single item price without assuming if it's net or gross. This value should be used everywhere the price is displayed. It allows switching tax mode without side effects. | +| items | sumPrice | Integer | Sum of all items prices calculated. | +| items | taxRate | Integer | Current tax rate in per cent. | +| items | unitNetPrice | Integer | Single item net price. | +| items | sumNetPrice | Integer | Sum of prices of all items. | +| items | unitGrossPrice | Integer | Single item gross price. | +| items | sumGrossPrice | Integer | Sum of items gross price. | +| items | unitTaxAmountFullAggregation | Integer | Total tax amount for a given item with additions. | +| items | sumTaxAmountFullAggregation | Integer | Total tax amount for a given sum of items with additions. | +| items | sumSubtotalAggregation | Integer | Sum of subtotals of the items. | +| items | unitSubtotalAggregation | Integer | Subtotal for the given item. | +| items | unitProductOptionPriceAggregation | Integer | Item total product option price. | +| items | sumProductOptionPriceAggregation | Integer | Item total of product options for the given sum of items. | +| items | unitDiscountAmountAggregation | Integer | Item total discount amount. | +| items | sumDiscountAmountAggregation | Integer | Sum of Item total discount amount. | +| items | unitDiscountAmountFullAggregation | Integer | Sum total discount amount with additions. | +| items | sumDiscountAmountFullAggregation | Integer | Item total discount amount with additions. | +| items | unitPriceToPayAggregation | Integer | Item total price to pay after discounts with additions. | +| items | sumPriceToPayAggregation | Integer | Sum of the prices to pay (after discounts).| +| items | salesUnit |Object | List of attributes defining the sales unit to be used for item amount calculation. | +| items | salesUnit.id | Integer | Numeric value the defines the sales units to calculate the item amount in. | +| items | salesUnit.amount | Integer | Amount of product in the defined sales units. | +| items | selectedProductOptions | array | List of attributes describing the product options that were added to cart with the product. | +| items | selectedProductOptions.optionGroupName | String | Name of the group to which the option belongs. | +| items | selectedProductOptions.sku | String | SKU of the product option. | +| items | selectedProductOptions.optionName | String | Product option name. | +| items | selectedProductOptions.price | Integer | Product option price in cents. | +| items | selectedProductOptions.currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | +| items | threshold | Array | Thresholds applied. | +| items | type | String | Threshold type. | +| items | threshold | Integer | Threshold monetary amount. | +| items | fee | Integer | Fee to be paid if the threshold is not reached. | +| items | deltaWithSubtotal | Integer | Displays the remaining amount that needs to be added to pass the threshold. | +| items | message | String | Message shown to the customer if the threshold is not fulfilled. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/order-shipments-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/order-shipments-response-attributes.md new file mode 100644 index 00000000000..20e0cdd1d7b --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/order-shipments-response-attributes.md @@ -0,0 +1,25 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| :-------------------- | :------------------------- | :------- | --- | +| order-shipments | itemUuids | String | | +| order-shipments | methodName | String | | +| order-shipments | carrierName | String | | +| order-shipments | requestedDeliveryDate | Date | | +| order-shipments | shippingAddress | Object | | +| order-shipments | shippingAddress.salutation | String | | +| order-shipments | shippingAddress.firstName | String | | +| order-shipments | shippingAddress.middleName | String | Customer's middle name. | +| order-shipments | shippingAddress.lastName | String | Customer's last name. | +| order-shipments | shippingAddress.address1 | String | The first line of the customer's address. | +| order-shipments | shippingAddress.address2 | String | The second line of the customer's address. | +| order-shipments | shippingAddress.address3 | String | The third line of the customer's address. | +| order-shipments | shippingAddress.company | String | Specifies the customer's company. | +| order-shipments | shippingAddress.city | String | Specifies the city. | +| order-shipments | shippingAddress.zipCode | String | ZIP code. | +| order-shipments | shippingAddress.poBox | String | PO Box to use for communication. | +| order-shipments | shippingAddress.phone | String | Specifies the customer's phone number. | +| order-shipments | shippingAddress.cellPhone | String | Mobile phone number. | +| order-shipments | shippingAddress.description | String | Address description. | +| order-shipments | shippingAddress.comment | String | Address comment. | +| order-shipments | shippingAddress.email | String | Email address to use for communication. | +| order-shipments | shippingAddress.country | String | Specifies the country. | +| order-shipments | shippingAddress.iso2Code | String | ISO 2-Letter Country Code to use. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/orders-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/orders-response-attributes.md new file mode 100644 index 00000000000..75eb22878cf --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/orders-response-attributes.md @@ -0,0 +1,184 @@ + +**General order information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ------ | ---| - | +| itemStates | Array | Statuses of the order's items in the [state machine](/docs/pbc/all/order-management-system/latest/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html). | +| createdAt | String | Date and time when the order was created. | +| currencyIsoCode | String | ISO 4217 code of the currency that was selected when placing the order. | +| priceMode | String | Price mode that was active when placing the order. Possible values: | + +**Totals calculations** + + | Attribute | Type | Description | +| ------- | ----------------------- | ------------------------ | +| totals | Object | Totals calculations. | +| totals.expenseTotal | Integer | Total amount of expenses, such as shipping costs. | +| totals.discountTotal | Integer | Total amount of discounts applied. | +| totals.taxTotal | Integer | Total amount of taxes paid. | +| totals.subtotal | Integer | Subtotal of the order. | +| totals.grandTotal | Integer | Grand total of the order | +| totals.canceledTotal | Integer | Total canceled amount. | +| totals.remunerationTotal | Integer | Total sum of remuneration. | + +**Billing and shipping addresses** + + | Attribute | Type | Description | +| ------ | ------------- | --------------------------- | +| billingAddress | object | List of attributes describing the billing address of the order. | +| billingAddress.salutation | String | Salutation to use when addressing the customer. | +| billingAddress.firstName | String | Customer's first name. | +| billingAddress.middleName | String | Customer's middle name. | +| billingAddress.lastName | String | Customer's last name. | +| billingAddress.address1 | String | first line of the customer's address. | +| billingAddress.address2 | String | second line of the customer's address. | +| billingAddress.address3 | String | third line of the customer's address. | +| billingAddress.company | String | Specifies the customer's company. | +| billingAddress.city | String | Specifies the city. | +| billingAddress.zipCode | String | ZIP code. | +| billingAddress.poBox | String | PO Box to use for communication. | +| billingAddress.phone | String | Specifies the customer's phone number. | +| billingAddress.cellPhone | String | Mobile phone number. | +| billingAddress.description | String | Address description. | +| billingAddress.comment | String | Address comment. | +| billingAddress.email | String | Email address to use for communication. | +| billingAddress.country | String | Specifies the country. | +| billingAddress.iso2Code | String | ISO 2-Letter Country Code to use. | +| shippingAddress | object | Shipment address of the order. This value is returned only if you submit an order without split delivery. See [Checking out purchases in version 202009.0](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) to learn how to do that. | + +**Order item information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ------- | ----------- | -------------- | +| items | array | Items in the order. | +| items.state | String | Defines the state of the order in the state machine. | +| bundleItems | Array | Array of objects describing the concrete product bundles in the order. | +| bundleItems.bundleItemIdentifier | Integer | Defines the relation between the bundle and its items. The items of the bundle have the same value in the `relatedBundleItemIdentifier` attribute. | +| items.relatedBundleItemIdentifier | Integer | Defines the relation between the item and its bundle. The bundle to which this the item belongs has the same value in the `bundleItemIdentifier` attribute. | +| items.name | String | Product name. | +| items.sku | String | Product SKU. | +| items.sumPrice | Integer | Sum of all product prices. | +| items.quantity | Integer | Product quantity ordered. | +| items.unitGrossPrice | Integer | Single item gross price. | +| items.sumGrossPrice | Integer | Sum of items gross price. | +| items.taxRate | Integer | Current tax rate, in percent. | +| items.unitNetPrice | Integer | Single item net price. | +| items.sumNetPrice | Integer | Sum total of net prices for all items. | +| items.unitPrice | Integer | Single item price without assuming if it's new or gross. *This price should be displayed everywhere when a product price is displayed. It allows switching tax mode without side effects*. | +| items.unitTaxAmountFullAggregation | Integer | Total tax amount for a given item, with additions. | +| items.sumTaxAmountFullAggregation | Integer | Total tax amount for a given sum of items, with additions. | +| items.refundableAmount | Integer | Available refundable amount for an item (order only). | +| items.canceledAmount | Integer | Total canceled amount for this item (order only). | +| items.sumSubtotalAggregation | Integer | Sum of subtotals of the items. | +| items.unitSubtotalAggregation | Integer | Subtotal for the given item. | +| items.unitProductOptionPriceAggregation | Integer | Item total product option price. | +| items.sumProductOptionPriceAggregation | Integer | Item total of product options for the given sum of items. | +| items.unitExpensePriceAggregation | Integer | Item expense total for a given item. | +| items.sumExpensePriceAggregation | Integer | Total amount of expenses for the given items. | +| items.unitDiscountAmountAggregation | Integer | Item total discount amount. | +| items.sumDiscountAmountAggregation | Integer | Sum of Item total discount amounts. | +| items.unitDiscountAmountFullAggregation | Integer | Sum of item total discount amount. | +| items.sumDiscountAmountFullAggregation | Integer | Item total discount amount, with additions. | +| items.unitPriceToPayAggregation | Integer | Item total price to pay after discounts, with additions. | +| items.sumPriceToPayAggregation | Integer | Sum of all prices to pay (after discounts were applied). | +| items.taxRateAverageAggregation | Integer | Item tax rate average, with additions. This value is used when recalculating the tax amount after cancellation. | +| items.taxAmountAfterCancellation | Integer | Tax amount after cancellation, recalculated using tax average. | +| items.uuid | String | Unique identifier of the item in the order. | +| items.isReturnable | Boolean | Defines if the customer can return the item. | +| items.idShipment | Integer | Unique identifier of the shipment to which the item belongs. To retrieve all the shipments of the order, include the `order-shipments` resource into the request.| +| items.bundleItemIdentifier | Integer | Defines the relation between the bundle and its items. The items of the bundle have the same value in the relatedBundleItemIdentifier attribute. | +| items.relatedBundleItemIdentifier | Integer | Defines the relation between the item and its bundle. The bundle to which this the item belongs has the same value in the bundleItemIdentifier attribute. | +| items.salesOrderConfiguredBundle | Object | Contains information about the purhased configurable bundle. | +| items.idSalesOrderConfiguredBundle |Integer | Unique identifier of the purchased configured bundle.| +| items.idSalesOrderConfiguredBundle.configurableBundleTemplateUuid|String |Unique identifier of the configurable bundle template in the system. | +| items.idSalesOrderConfiguredBundle.name | String|Name of the configured bundle. | +| items.idSalesOrderConfiguredBundle.quantity | Integer| Quantity of the ordered configurable bundles.| +| items.salesOrderConfiguredBundleItem |Object |Contains information about the items of the configured bundle. | +| items.salesOrderConfiguredBundleItem.configurableBundleTemplateSlotUuid| String| Unique identifier of the configurable bundle slot in the system. | +| items.metadata | object | Metadata of the concrete product. | +| items.metadata.superAttributes | String | [Attributes](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html) of the order item. | +| items.metadata.image | String | Product image URL. | + +**Measurement unit calculations** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| salesUnit | Object | List of attributes defining the sales unit to be used for item amount calculation. | +| conversion | integer | Factor to convert a value from sales to base unit. If it's "null", the information is taken from the global conversions. | +| precision | integer | Ratio between a sales unit and a base unit. | +| measurementUnit | string | Code of the measurement unit. | +| name | String | Name of the measurement unit. | +| code | String | Code of the measurement unit. | + +**Calculated discounts for items** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ------ | ---------| -------- | +| items.calculatedDiscounts | Array | List of attributes describing the discount calculated for this item. | +| items.calculatedDiscounts.unitAmount | Integer | Discount value applied to this order item. | +| items.calculatedDiscounts.sumAmount | Integer | Sum of the discount values applied to this order item. | +| items.calculatedDiscounts.displayName | String | Name of the discount applied. | +| items.calculatedDiscounts.description | String | Description of the discount. | +| items.calculatedDiscounts.voucherCode | String | Voucher code redeemed. | +| items.calculatedDiscounts.quantity | String | Number of discounts applied to the product. | + +**Product options** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ----- | -----------| -------------- | +| items.productOptions | Array | List of product options ordered with this item. | +| items.productOptions.optionGroupName | String | Name of the group to which the product option belongs. | +| items.productOptions.sku | String | SKU of the product option. | +| items.productOptions.optionName | String | Name of the product option. | +| items.productOptions.price | Integer | Price of the product option. | + +**Calculated discounts** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ----- | ---------- | ------------- | +| calculatedDiscounts | Array | Discounts applied to this order item. | +| calculatedDiscounts.unitAmount | Integer | Amount of the discount provided by the given item for each unit of the product, in cents. | +| calculatedDiscounts.sumAmount | Integer | Total amount of the discount provided by the given item, in cents. | +| calculatedDiscounts.displayName | String | Display name of the given discount. | +| calculatedDiscounts.description | String | Description of the given discount. | +| calculatedDiscounts.voucherCode | String | Voucher code applied, if any. | +| calculatedDiscounts.quantity | String | Number of times the discount was applied. | + +**Expenses** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ----- | -----------| ------- | +| expenses | array | Additional expenses of the order. | +| expenses.type | String | Expense type. | +| expenses.name | String | Expense name. | +| expenses.sumPrice | Integer | Sum of expenses calculated. | +| expenses.unitGrossPrice | Integer | Single item's gross price. | +| expenses.sumGrossPrice | Integer | Sum of items' gross price. | +| expenses.taxRate | Integer | Current tax rate in percent. | +| expenses.unitNetPrice | Integer | Single item net price. | +| expenses.sumNetPrice | Integer | Sum of items' net price. | +| expenses.canceledAmount | Integer | Total canceled amount for this item (order only). | +| expenses.unitDiscountAmountAggregationexpenses. | Integer | Item total discount amount. | +| expenses.sumDiscountAmountAggregation | Integer | Sum of items' total discount amount. | +| expenses.unitTaxAmount | Integer | Tax amount for a single item, after discounts. | +| expenses.sumTaxAmount | Integer | Tax amount for a sum of items (order only). | +| expenses.unitPriceToPayAggregation | Integer | Item total price to pay after discounts with additions. | +| expenses.sumPriceToPayAggregation | Integer | Sum of items' total price to pay after discounts with additions. | +| expenses.taxAmountAfterCancellation | Integer | Tax amount after cancellation, recalculated using tax average. | +| expenses.idShipment | Integer | Unique identifier of the shipment to which this expense belongs. To retrieve all the shipments of the order, include the order-shipments resource in the request. | +| expenses.idSalesExpense | Integer | Unique identifier of the expense. | + +**Payments** + +| ATTRIBUTE | TYPE |DESCRIPTION | +| ------ | -------------| -------------- | +| payments | Array | A list of payments used in this order. | +| amount | Integer | Amount paid via the corresponding payment provider in cents. | +| paymentProvider | String | Name of the payment provider. | +| paymentMethod | String | Name of the payment method. | + +**Shipments** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ----- | -------------| ---------- | +| shipments | object | Information about the shipments used in this order. This value is returned only if you submit an order without split delivery. To learn how to do that, see [Check out purchases](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html). To see all the attributes that are returned when retrieving orders without split delivery, see [Retrieving orders](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html). To retrieve shipment details, include the order-shipments resource in the request. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/picking-list-items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/picking-list-items-response-attributes.md new file mode 100644 index 00000000000..72546cf4686 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/picking-list-items-response-attributes.md @@ -0,0 +1,8 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| picking-list-items | quantity | Integer | Quantity of the item to pick. | +| picking-list-items | numberOfPicked | Integer | Quantity of the item that was picked. | +| picking-list-items | numberOfNotPicked | Integer | Quantity of the item that was not found. | +| picking-list-items | orderItem.sku | String | Unique identifier of the product. | +| picking-list-items | orderItem.quantity | Integer | Quantity of the item that was ordered. | +| picking-list-items | orderItem.name | Integer | Name of the product. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/picking-lists-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/picking-lists-response-attributes.md new file mode 100644 index 00000000000..fa4f4568196 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/picking-lists-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| picking-lists | status | String | Status of the picking list based on your configuration. | +| picking-lists | createdAt | Date | The date and time when the picklist was generated. | +| picking-lists | updatedAt | Date | The latest date and time when the picklist was updated. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-labels-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-labels-response-attributes.md new file mode 100644 index 00000000000..889d3448a6a --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-labels-response-attributes.md @@ -0,0 +1,6 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-labels | name | String | Specifies the label name. | +| product-labels | isExclusive | Boolean | Indicates whether the label is `exclusive`.
If the attribute is set to true, the current label takes precedence over other labels the product might have. This means that only the current label should be displayed for the product, and all other possible labels should be hidden. | +| product-labels | position | Integer | Indicates the label priority.
Labels should be indicated on the frontend according to their priority, from the highest (**1**) to the lowest, unless a product has a label with the `isExclusive` attribute set.| +| product-labels | frontEndReference | String |Specifies the label custom label type (CSS class).
If the attribute is an empty string, the label should be displayed using the default CSS style. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-management-attributes-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-management-attributes-response-attributes.md new file mode 100644 index 00000000000..dcc73ec6cb4 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-management-attributes-response-attributes.md @@ -0,0 +1,10 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-management-attributes | allowInput | Boolean | Indicates if custom values can be entered for this product attribute. | +| product-management-attributes | isSuper | Boolean | Indicates if it's a super attribute or not. | +| product-management-attributes | inputType | String | Input type of the product attribute, for example, text, number, select, etc. | +| product-management-attributes | localeName | String | Name of the locale. | +| product-management-attributes | values | Array | Possible values of the attribute. | +| product-management-attributes | id | String | Product attribute key. | +| product-management-attributes | key | String | Product attribute key. | +| product-management-attributes | translation | String | Translation for the locale. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-measurement-units-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-measurement-units-response-attributes.md new file mode 100644 index 00000000000..f1f9c4aea0f --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-measurement-units-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-measurement-units | name | string | Name of the product measurement unit. | +| product-measurement-units | defaultPrecision | integer | Default ratio between a sales unit and a base unit. It is used when precision for a related sales unit is not specified. | +| product-measurement-units | measurementUnitCode | string | Code of the measurement unit. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-offer-availabilities-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-offer-availabilities-response-attributes.md new file mode 100644 index 00000000000..f24280565e4 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-offer-availabilities-response-attributes.md @@ -0,0 +1,5 @@ +|ATTRIBUTE |TYPE |DESCRIPTION | +|---------|---------|---------| +| isNeverOutOfStock | Boolean | Shows if the product offer is never out of stock. | +| availability | Boolean |Defines if the product offer is available. | +| quantity | Integer |Stock of the product offer. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-options-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-options-response-attributes.md new file mode 100644 index 00000000000..817085b1346 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-options-response-attributes.md @@ -0,0 +1,7 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-options | sku | String | Specifies the SKU of the product option. | +| product-options | optionName | String | Specifies the option name. | +| product-options | optionGroupName | String | Specifies the name of the group to which the option belongs. | +| product-options | price | Integer | Specifies the option price in cents. | +| product-options | currencyIsoCode | String | Specifies the ISO 4217 code of the currency in which the product option price is specified. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-reviews-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-reviews-response-attributes.md new file mode 100644 index 00000000000..51a33cd494e --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-reviews-response-attributes.md @@ -0,0 +1,6 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTIONS | +| --- | --- | --- | --- | +| product-reviews | nickname | String | Customer's nickname. | +| product-reviews | rating | Integer | Rating given to the product by a customer. | +| product-reviews | summary | String | Review summary. | +| product-reviews | description | String | Full review. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/product-tax-sets-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/product-tax-sets-response-attributes.md new file mode 100644 index 00000000000..530af90c516 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/product-tax-sets-response-attributes.md @@ -0,0 +1,6 @@ +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| name | Tax set name | +| restTaxRates.name | Tax rate name | +| restTaxRates.rate | Tax rate | +| restTaxRates.country | Applicable country for the tax rate | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-request-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-request-attributes.md new file mode 100644 index 00000000000..56cb5d7fdb9 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-request-attributes.md @@ -0,0 +1,3 @@ +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | Boolean | ✓ | This name is used when subscribing to notifications. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-response-attributes.md new file mode 100644 index 00000000000..4c60aa6c6ee --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/push-notification-providers-response-attributes.md @@ -0,0 +1,4 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| push-notification-providers | uuid | String | Unique identifier of the provider. It's used to retrieve or update a provider. | +| push-notification-providers | name | String | This name is used when subscribing to notifications. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/sales-units-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/sales-units-response-attributes.md new file mode 100644 index 00000000000..8cc43153b2f --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/sales-units-response-attributes.md @@ -0,0 +1,7 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| sales-units | conversion | integer | Factor to convert a value from sales to base unit. If it's "null", the information is taken from the global conversions. | +| sales-units | precision | integer | Ratio between a sales unit and a base unit. | +| sales-units | is displayed | boolean | Defines if the sales unit is displayed on the product details page. | +| sales-units | is default | boolean | Defines if the sales unit is selected by default on the product details page. | +| sales-units | measurementUnitCode | string | Code of the measurement unit. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/service-point-addresses-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/service-point-addresses-response-attributes.md new file mode 100644 index 00000000000..201414027b2 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/service-point-addresses-response-attributes.md @@ -0,0 +1,9 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| service-point-addresses | uuid | String | Unique identifier of the service point address. | +| service-point-addresses | countryIso2Code | String | ISO-2 country code. | +| service-point-addresses | address1 | String | Address line 1. | +| service-point-addresses | address2 | String | Address line 2. | +| service-point-addresses | address3 | String | Address line 3. | +| service-point-addresses | city | String | City. | +| service-point-addresses | zipCode | String | Zip code. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/service-points-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/service-points-response-attributes.md new file mode 100644 index 00000000000..74b5dae02cd --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/service-points-response-attributes.md @@ -0,0 +1,6 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| service-points | name | String | This name is displayed on the Storefront. | +| service-points | key | String | Unique identifier of the service point. | +| service-points | isActive | Boolean | Defines if the service point is active. If it's inactive, customers can't select it. | +| service-points | stores | Object | Defines the stores the service point is available in. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/service-types-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/service-types-response-attributes.md new file mode 100644 index 00000000000..718653a55e2 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/service-types-response-attributes.md @@ -0,0 +1,4 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| service-types | name | String | Name. | +| service-types | key | String | Unique key of the service type. You will use it as a reference when adding services of this type. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/services-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/services-response-attributes.md new file mode 100644 index 00000000000..5bc5efef162 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/services-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| services | uuid | String | Unique identifier of the service. | +| services | isActive | Boolean | Defines if the service is active. Inactive services are not displayed on the Storefront. | +| services | key | String | Unique key of the service. It's used as a reference when assigning services to service points. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shared-carts-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shared-carts-response-attributes.md new file mode 100644 index 00000000000..f89a9de7326 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shared-carts-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| shared-carts | id | String | The unique ID used for sharing the cart. | +| shared-carts | idCompanyUser | String | The unique ID of the company user the cart is shared with. | +| shared-carts | idCartPermissionGroup | Integer | The unique ID of the cart permission group that describes the permissions granted to the user the cart is shared with. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shipment-methods-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shipment-methods-response-attributes.md new file mode 100644 index 00000000000..bb6678d380b --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shipment-methods-response-attributes.md @@ -0,0 +1,10 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| shipment-methods | name | String | The name of the shipment method. | +| shipment-methods | id | String | The unique identifier of the shipment method. | +| shipment-methods | name | String | The name of the shipment method. | +| shipment-methods | carrierName | String | The name of the carrier. | +| shipment-methods | deliveryTime | Integer | The estimated delivery time. | +| shipment-methods | defaultGrossPrice | Integer | Default gross price, in cents. | +| shipment-methods | defaultNetPrice | Integer | Default net price, in cents. | +| shipment-methods | currencyIsoCode | String | The ISO 4217 code of the currency in which the prices are specified. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shipment-types-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shipment-types-response-attributes.md new file mode 100644 index 00000000000..803c86ce249 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shipment-types-response-attributes.md @@ -0,0 +1,6 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| shipment-types | name | String | You will use it to as a reference when adding shipment types to offers in the Merchant Portal. | +| shipment-types | key | String | Unique key of the shipment type. You will use it as a reference when adding shipment types to offers in the Merchant Portal. | +| shipment-types | isActive | Boolean | Defines if the shipment type is active. Only active shipment types are displayed in the Merchant Portal. | +| shipment-types | stores | Object | Defines the stores this shipment type is available for. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shipments-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shipments-response-attributes.md new file mode 100644 index 00000000000..927c8b755d0 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shipments-response-attributes.md @@ -0,0 +1,27 @@ +| shipments | Items | Array | A list of items in the shipment. | +| shipments | requestedDeliveryDate | Date | The desired delivery date. | +| shipments | shippingAddress | Object | The address to which this shipment will be delivered. | +| shipments | shippingAddress.id | String | The unique identifier of a customer address. | +| shipments | shippingAddress.salutation | String | The salutation to use when addressing the customer. | +| shipments | shippingAddress.firstName | String | The customer's first name. | +| shipments | shippingAddress.lastName | String | The customer's last name. | +| shipments | shippingAddress.address1 | String | The first line of the customer's address. | +| shipments | shippingAddress.address2 | String | The second line of the customer's address. | +| shipments | shippingAddress.address3 | String | The third line of the customer's address. | +| shipments | shippingAddress.zipCode | String | The ZIP code. | +| shipments | shippingAddress.city | String | The name of the city. | +| shipments | shippingAddress.country | String | The name of the country. | +| shipments | shippingAddress.iso2Code | String | Specifies an ISO 2 Country Code to use. | +| shipments | shippingAddress.company | String | Specifies the customer's company. | +| shipments | shippingAddress.phone | String | Specifies the customer's phone number. | +| shipments | shippingAddress.isDefaultShipping | Boolean | If true, it's the default shipping address of the customer. | +| shipments | shippingAddress.isDefaultBilling | Boolean | If true, it's the default billing address of the customer. | +| shipments | shippingAddress.idCompanyBusinessUnitAddress | String | The unique identifier of a business unit address used for this shipment. | +| shipments | selectedShipmentMethod | Object | Describes the shipment method for the shipment. | +| shipments | selectedShipmentMethod.id | String | The unique identifier of the shipment method. | +| shipments | selectedShipmentMethod.name | String | The name of the shipment method. | +| shipments | selectedShipmentMethod.carrierName | String | The name of the shipment method provider. | +| shipments | selectedShipmentMethod.price | String | The price of the shipment method. | +| shipments | selectedShipmentMethod.taxRate | String | The tax rate for this shipment method. | +| shipments | selectedShipmentMethod.deliveryTime | String | The estimated delivery time provided by the shipment method provider. | +| shipments | selectedShipmentMethod.currencyIsoCode | String | The ISO 4217 code of the currency in which the price is specified. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shopping-list-items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shopping-list-items-response-attributes.md new file mode 100644 index 00000000000..b23fe9e63e9 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shopping-list-items-response-attributes.md @@ -0,0 +1,12 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| shopping-list-items | productOfferReference | String | Unique identifier of the product offer. | +| shopping-list-items| merchantReference | String | Unique identifier of the merchant. | +| shopping-list-items| quantity | Integer | Quantity of the product. | +| shopping-list-items| sku | String | Product SKU. | +| shopping-list-items| productConfigurationInstance.displayData | Array | Array of variables that are proposed to a Storefront user to set up in the configurator. | +| shopping-list-items | productConfigurationInstance.configuration | Array | Default configuration of the configurable product. | +| shopping-list-items | productConfigurationInstance.configuratorKey | String | Configurator type. | +| shopping-list-items | productConfigurationInstance.isComplete | Boolean | Shows if the configurable product configuration is complete:
| +| shopping-list-items | productConfigurationInstance.quantity | Integer | Quantity of the product that is added to the wishlist. | +| shopping-list-items | productConfigurationInstance.availableQuantity | Integer | Product quantity available in the store. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/shopping-lists-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/shopping-lists-response-attributes.md new file mode 100644 index 00000000000..8c91455056c --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/shopping-lists-response-attributes.md @@ -0,0 +1,7 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| shopping-lists | owner | String | First and last names of the shopping list owner. | +| shopping-lists | name | String |Shopping list name. | +| shopping-lists | numberOfItems | Integer | Number of items on the shopping list. | +| shopping-lists | updatedAt | String | Date when the shopping list was last updated. | +| shopping-lists | createdAt | String | Date when the shopping list was created. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/users-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/users-response-attributes.md new file mode 100644 index 00000000000..bee30c62c6e --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/users-response-attributes.md @@ -0,0 +1,5 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| users | username | String | Username of the user you are authenticated with. | +| users | firstName | String | First name. | +| users | lastName | String | Last name. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/vouchers-cart-rules-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/vouchers-cart-rules-response-attributes.md new file mode 100644 index 00000000000..b707edcaad3 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/vouchers-cart-rules-response-attributes.md @@ -0,0 +1,10 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| vouchers, cart-rules | displayName | String | Discount name displayed on the Storefront. | +| vouchers, cart-rules | amount | Integer | Amount of the provided discount. | +| vouchers, cart-rules | code | String | Discount code. | +| vouchers, cart-rules | discountType | String | Discount type. | +| vouchers, cart-rules | isExclusive | Boolean | Discount exclusivity. | +| vouchers, cart-rules | expirationDateTime | DateTimeUtc | Date and time on which the discount expires. | +| vouchers, cart-rules | discountPromotionAbstractSku | String | SKU of the products to which the discount applies. If the discount can be applied to any product, the value is `null`. | +| vouchers, cart-rules | discountPromotionQuantity | Integer | Specifies the amount of the product required to be able to apply the discount. If the minimum number is `0`, the value is `null`. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/warehouse-user-assignments-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/warehouse-user-assignments-response-attributes.md new file mode 100644 index 00000000000..40b156224f1 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/warehouse-user-assignments-response-attributes.md @@ -0,0 +1,7 @@ +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| userUuid | String | Unique identifier of the warehouse user the assignment belongs to. | +| isActive | Boolean | Defines if the warehouse assignment is active. | +| warehouse.name | String | Name of the warehouse in the assignment. | +| warehouse.uuid | String | Unique identifier of the warehouse in the assignment. | +| warehouse.isActive | Boolean | Defines if the warehouse in the assignment is active. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/warehouses-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/warehouses-response-attributes.md new file mode 100644 index 00000000000..83e5cdfb9e1 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/warehouses-response-attributes.md @@ -0,0 +1,4 @@ +| RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| warehouses | name | Integer | Name of the warehouse. | +| warehouses | isActive | Boolean | Defines if the warehouse is active. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-request-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-request-attributes.md new file mode 100644 index 00000000000..6f79c245877 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-request-attributes.md @@ -0,0 +1,9 @@ +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| sku | String | Concrete or configurable product SKU to add. | +| displayData | Array | Array of variables that are proposed for a Storefront user to set up in the configurator. | +| configuration | Array | Default configurable product configuration. | +| configuratorKey | String | Configurator type. | +| isComplete | Boolean | Shows if the configurable product configuration is complete:
| +| quantity | Integer | Quantity of the product that is added to the wishlist. | +| availableQuantity | Integer | Product quantity available in the store. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-response-attributes.md new file mode 100644 index 00000000000..eed66318be0 --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/wishlist-items-response-attributes.md @@ -0,0 +1,11 @@ +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| sku | String | Concrete or configurable product SKU added to the wishlist. | +| displayData | Array | Array of variables a Storefront user set up in the configurator. | +| configuration | Array | Default configurable product configuration. | +| configuratorKey | String | Configurator type. | +| isComplete | Boolean | Shows if the configurable product configuration is complete:
| +| quantity | Integer | Quantity of the product added to the wishlist. | +| availableQuantity | Integer | Product quantity available in the store. | +| productOfferReference | String | Unique identifier of the product offer. | +| merchantReference | String | Unique identifier of the merchant. | diff --git a/_includes/pbc/all/glue-api-guides/202602.0/wishlists-response-attributes.md b/_includes/pbc/all/glue-api-guides/202602.0/wishlists-response-attributes.md new file mode 100644 index 00000000000..6845c93fcef --- /dev/null +++ b/_includes/pbc/all/glue-api-guides/202602.0/wishlists-response-attributes.md @@ -0,0 +1,6 @@ +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| name | String | Name of the wishlist. | +| numberOfItems | Integer | Number of items in the wishlist. | +| createdAt | String | Creation date of the wishlist. | +| updatedAt | String | Date of the last update. | diff --git a/_includes/pbc/all/install-features/202410.0/enable-gift-cards.md b/_includes/pbc/all/install-features/202410.0/enable-gift-cards.md index de21841a2a3..bcc88031578 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-gift-cards.md +++ b/_includes/pbc/all/install-features/202410.0/enable-gift-cards.md @@ -2,13 +2,13 @@ The Gift Cards feature is shipped with the following modules: -- **GiftCard**: implements the basic functionality of the Gift Cards feature as well as the Replacement value-checking strategy. +- GiftCard: implements the basic functionality of the Gift Cards feature as well as the Replacement value-checking strategy. -- **GiftCardBalance**: implements gift card Balance value-checking strategy<. +- GiftCardBalance: implements gift card Balance value-checking strategy<. -- **GiftCardMailConnector**: responsible for sending e-mails on gift cards usage (balance change) as well as gift cards codes delivery. +- GiftCardMailConnector: responsible for sending e-mails on gift cards usage (balance change) as well as gift cards codes delivery. -- **Nopayment**: implements payment methods if the price to pay is fully covered by a gift card. +- Nopayment: implements payment methods if the price to pay is fully covered by a gift card. To enable the gift cards in your project, do the following: diff --git a/_includes/pbc/all/install-features/202410.0/enable-the-content-widget.md b/_includes/pbc/all/install-features/202410.0/enable-the-content-widget.md index 8651b2a1628..98791943f5d 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-the-content-widget.md +++ b/_includes/pbc/all/install-features/202410.0/enable-the-content-widget.md @@ -16,7 +16,7 @@ Integration of CMS widget consists of three main parts: 2. Providing configuration in module shared directory so that Yves and Zed can read it. 3. (Optionally) Providing CMS content function parameter mapper plugins. -### Step 1: Registering twig function in Yves +### 1. Registering twig function in Yves The CMS content widget is a twig function. Therefore, twig syntax rules apply and must be followed when including the inside content. For example, `{% raw %}{{{% endraw %} product(['012', '013', '321']) {% raw %}}}{% endraw %}` will include carousel component with three products. @@ -26,7 +26,7 @@ where **key** is the function name you want to use in a template and **value** i To enable the feature for CMS blocks, you have to configure twig rendering plugin `\Spryker\Yves\CmsContentWidget\Plugin\CmsTwigContentRendererPlugin` and add it to `\Pyz\Yves\CmsBlock\CmsBlockDependencyProvider::getCmsBlockTwigContentRendererPlugin`. This will enable twig function rendering in CMS blocks. -### Step 2: Providing CMS content widget configuration +### 2. Providing CMS content widget configuration Some information needs to be shared between Yves and Zed. Therefore, the configuration plugin must be placed in a shared namespace. @@ -40,7 +40,7 @@ The configuration provider requires implementation of the following methods: - `getAvailableTemplates` is the list of supported templates, it's a key value pair where key is the template identifier which is passed to function and value is a path to twig template. - `getUsageInformation` is a plain text usage information, displayed when rendering help pane below the content editor. -### Step 3: Function mapping plugins - optional +### 3. Function mapping plugins - optional When defining functions, you may want to accept "natural identifiers", such as "sku" for products or "set_key" for product sets. It is preferable that the content manager provides the identifiers instead of relying on surrogate keys. The problem arises when you need to read data from the Yves data store as the Yves data store uses "surrogate key/primary keys". Therefore, to read data, convert/map those natural identifiers to surrogate keys. @@ -238,10 +238,6 @@ class YvesBootstrap ``` --> -### Version Check When Using the Widget for CMS Blocks +### Version check when using the widget for CMS blocks If you use this widget for CMS Blocks, then check that you have proper versions of your modules as follows: `cms-block >= 1.2.0, cms-block-collector >= 1.1.0, cms-block-gui >= 1.1.0`. - - - -[//]: # (by Denis Turkov) diff --git a/_includes/pbc/all/install-features/202410.0/feature-integration-guides.md b/_includes/pbc/all/install-features/202410.0/feature-integration-guides.md new file mode 100644 index 00000000000..129c3b1b6d3 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/feature-integration-guides.md @@ -0,0 +1,9 @@ + + +The integration guides provide step-by-step instructions on how to enable individual Spryker features for your project. + +Because Spryker Commerce OS is a highly modular system, you have total freedom in choosing what features to add to your project. When making a decision to install new features, we recommend not to bloat your project by installing everything, but opt for the features that are really justified in terms of your business needs. + +If you have spotted an issue with either of the guides, feel free to [create an issue](https://github.com/spryker/spryker-docs/issues) or pull request by using the Edit on GitHub option. + +Not found an integration guide you are looking for? Let us know about it by [creating an issue on Github](https://github.com/spryker/spryker-docs/issues) or dropping an email to [documentation@spryker.com](mailto:documentation@spryker.com). diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-availability-notification-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-availability-notification-feature.md index 8fd53bc67b5..c8ac3130759 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-availability-notification-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-availability-notification-feature.md @@ -1,18 +1,16 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [Availability Notification](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/availability-notification-feature-overview.html) feature. +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Availability Notification](/docs/pbc/all/warehouse-management-system/latest/base-shop/availability-notification-feature-overview.html) feature. -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Availability Notification | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Availability Notification | {{page.release_tag}} | -### Set up configuration +## Set up configuration Add the following configuration: @@ -24,7 +22,6 @@ Add the following configuration: **config/Shared/config_default.php** ```php - getenv('SPRYKER_YVES_HOST_EU'), 'US' => getenv('SPRYKER_YVES_HOST_US'), ]; - ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cart-feature.md index e3aaad8d32d..0b45a8d6d50 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cart-feature.md @@ -1,17 +1,15 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [Cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html) feature. +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html) feature. -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Cart | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Cart | {{page.release_tag}} | -### Set up behavior +## Set up behavior Register the following plugins: diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cms-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cms-feature.md index e3d8110e10d..7cddd496626 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cms-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-cms-feature.md @@ -1,9 +1,9 @@ -This document describes how to install the [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [CMS](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/cms-feature-overview.html) feature, install the required features: +This document describes how to install the [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [CMS](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/cms-feature-overview.html) feature, install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| CMS | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| CMS | {{page.release_tag}} | ## Troubleshooting diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-customer-account-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-customer-account-management-feature.md index 1d98dfa6d97..a1ecc63896e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-customer-account-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-customer-account-management-feature.md @@ -1,18 +1,16 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Customer Account Management | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | -### Set up configuration +## Set up configuration Provide a prefix used during customer reference generation. If no prefix is provided, it will use the current store name, which can lead to issues in Dynamic Store setup. @@ -44,7 +42,7 @@ class CustomerConfig extends SprykerCustomerConfig {% info_block warningBox "Verification" %} -1. [Create a customer](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/create-customers.html). +1. [Create a customer](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-in-the-back-office/customers/create-customers.html). 2. On the **Customers** page, next to the created customer, click **View**. 3. On the **View Customer** page, make sure that the **Customer Reference** contains the prefix you've configured. diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-prices-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-prices-feature.md index 60148920db4..200bb78dccc 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-prices-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-prices-feature.md @@ -1,29 +1,27 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [Prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/prices-feature-overview.html) feature. +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Prices](/docs/pbc/all/price-management/latest/base-shop/prices-feature-overview/prices-feature-overview.html) feature. -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Prices | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Prices | {{page.release_tag}} | -### 1) Set up configuration +## 1) Set up configuration {% info_block warningBox "stores.php configuration" %} Since Dynamic Multistore is now enabled, configuration of stores is stored in the database, making `config/Shared/stores.php` deprecated. The default store configuration is imported using new data import modules, like `CurrencyDataImport`. These modules populate the store configuration in the database. -The `Currency` module is responsible for extending store data and configuring it in the database. For upgrade instructions, see [Upgrade the Currency module](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html). +The `Currency` module is responsible for extending store data and configuring it in the database. For upgrade instructions, see [Upgrade the Currency module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html). {% endinfo_block %} -### 2) Set up the database schema and transfer objects +## 2) Set up the database schema and transfer objects 1. Adjust the schema definition, so entity changes trigger events: @@ -82,7 +80,7 @@ Make sure you can add a currency to a store when editing a product in the Back O {% endinfo_block %} -### 3) Configure export to Redis +## 3) Configure export to the key-value store 1. Set up publisher plugins: @@ -130,7 +128,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider Using the following data, make sure that when you add, update, or delete a store currency, it's exported to or removed from Storage. -Storage type: Redis +Storage type: Redis or Valkey Target entity: Store Example expected data identifier: `kv:store:de` @@ -155,7 +153,7 @@ Example expected data fragment: -### 4) Import data +## 4) Import data Import locale, store, and country data: @@ -283,7 +281,7 @@ Make sure that the currency store data has been added to the `spy_currency_store {% endinfo_block %} -### 5) Set up behavior +## 5) Set up behavior Register the following plugins: @@ -424,7 +422,9 @@ class StoreDependencyProvider extends SprykerStoreDependencyProvider {% endinfo_block %} -**src/Pyz/Zed/StoreGui/StoreGuiDependencyProvider.php** + +
+ src/Pyz/Zed/StoreGui/StoreGuiDependencyProvider.php ```php + {% info_block warningBox "Verification" %} -Steps: - Make sure that you can see the currency selection fields on the Store form. - Make sure that you can see the currency tabs and tables on the Store form. - Make sure that you can see the Currencies tab on the Store form. diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-product-feature.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-product-feature.md index 1682aac46e1..1b997e918c0 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-product-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore-the-product-feature.md @@ -1,17 +1,15 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) + the [Product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) feature. +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) feature. -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Product | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Product | {{page.release_tag}} | -### Set up behavior +## Set up behavior Register the following plugins: diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md index b1f944cad0f..4e7d7e185c8 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md @@ -1,4 +1,4 @@ -This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html). +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html). ## Install feature core @@ -8,7 +8,7 @@ Follow the steps below to install the Dynamic Multistore feature core. {% info_block warningBox "Project version" %} -If your project is of version 202307.0 or later, go to [Enable the dynamic store feature](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.html#enable-the-dynamic-store-feature). +If your project is of version 202307.0 or later, go to [Enable the dynamic store feature](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.html#enable-the-dynamic-store-feature). {% endinfo_block %} @@ -16,16 +16,16 @@ If your project is of version 202307.0 or later, go to [Enable the dynamic store | NAME | VERSION | UPGRADE GUIDE | |----------|---------|---| -| Country | ^4.0.0 | [Upgrade the Country module](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.html) | -| Locale | ^4.0.0 | [Upgrade the Locale module](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.html) | -| Currency | ^4.0.0 | [Upgrade the Currency module](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html) | +| Country | ^4.0.0 | [Upgrade the Country module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.html) | +| Locale | ^4.0.0 | [Upgrade the Locale module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.html) | +| Currency | ^4.0.0 | [Upgrade the Currency module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html) | 2. Install the following features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -|Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +|Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | 3. Install the required modules: @@ -33,7 +33,7 @@ If your project is of version 202307.0 or later, go to [Enable the dynamic store Install the required modules using Composer: ```bash -composer require "spryker-feature/spryker-core":"{{page.version}}" --update-with-dependencies +composer require "spryker-feature/spryker-core":"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -692,9 +692,9 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider {% info_block warningBox "Verification" %} -When a store's data is created, updated, or deleted, including local and country information, make sure it's correctly exported to or removed from Redis. +When a store's data is created, updated, or deleted, including local and country information, make sure it's correctly exported to or removed from the key-value store, such as Redis or Valkey. -Storage type: Redis +Storage type: Redis or Valkey Target entity: Store Example expected data identifier: `kv:store:de` @@ -1386,14 +1386,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -|Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +|Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require "spryker-feature/spryker-core":"{{page.version}}" --update-with-dependencies +composer require "spryker-feature/spryker-core":"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-backend-api-glue-json-api-convention.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-backend-api-glue-json-api-convention.md new file mode 100644 index 00000000000..6d94b80100b --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-backend-api-glue-json-api-convention.md @@ -0,0 +1,140 @@ + + + +This document describes how to install the Glue JSON:API convention for Backend API application. + +## Install feature core + +Follow the steps below to install the Glue JSON:API convention core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker/glue-backend-api-application-glue-json-api-convention-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +| MODULE | EXPECTED DIRECTORY | +|---------------------------------------------------------|--------------------------------------------------------------------------------| +| GlueBackendApiApplicationGlueJsonApiConventionConnector | vendor/spryker/glue-backend-api-application-glue-json-api-convention-connector | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfers: + +```bash +vendor/bin/console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------|-------|---------|-----------------------------------------------------------------------| +| GlueRequest | class | created | src/Generated/Shared/Transfer/GlueRequestTransfer.php | +| ApiApplicationSchemaContext | class | created | src/Generated/Shared/Transfer/ApiApplicationSchemaContextTransfer.php | +| RelationshipPluginsContext | class | created | src/Generated/Shared/Transfer/RelationshipPluginsContextTransfer.php | +| ResourceContext | class | created | src/Generated/Shared/Transfer/ResourceContextTransfer.php | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +|-------------------------------------------|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------| +| RelationshipPluginsContextExpanderPlugin | Adds resource relationships to the documentation generation context. | Spryker\\Glue\\GlueBackendApiApplicationGlueJsonApiConventionConnector\\Plugin\\DocumentationGeneratorApi | +| BackendApiRelationshipProviderPlugin | Provides a collection of resource relationships for the backend API application. | Spryker\\Glue\\GlueBackendApiApplicationGlueJsonApiConventionConnector\\Plugin\\GlueBackendApiApplication | + +**Glue/DocumentationGeneratorApi/DocumentationGeneratorApiDependencyProvider.php** + +```php +getApiApplicationProviderPlugins() as $apiApplicationProviderPlugin) { + $apiApplications[] = $apiApplicationProviderPlugin->getName(); + } + $contextExpanderCollection->addApplications($apiApplications); + + $contextExpanderCollection->addExpander(new BackendRelationshipPluginsContextExpanderPlugin(), [static::GLUE_BACKEND_API_APPLICATION_NAME]); + + return $contextExpanderCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +To make sure that `RelationshipPluginsContextExpanderPlugin` is setup correctly, generate the documentation for `backend` by passing the optional `--application` parameter: + +```bash +vendor/bin/glue api:generate:documentation --application backend +``` + +Make sure only the backend application documentation has been generated with related relationships. + +{% endinfo_block %} + +**src/Pyz/Glue/GlueJsonApiConvention/GlueJsonApiConventionDependencyProvider.php** + +```php + + */ + public function getRelationshipProviderPlugins(): array + { + return [ + new BackendApiRelationshipProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify that everything is set up correctly and that you can access the endpoint, see [Create backend resources](/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.html). + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-glue-api.md new file mode 100644 index 00000000000..a37d4d05267 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-glue-api.md @@ -0,0 +1,367 @@ + + +Functionally, Spryker API can be split into 2 parts: API infrastructure (GLUE) and feature modules. The infrastructure provides the general functionality of the API layer, while each feature module implements a specific resource or resource relation. + +To integrate GLUE API in your project, you need to: + +- [1. Installing GLUE](#1-installing-glue) +- [2. Enabling GLUE](#enabling-glue) +- [Integrate REST API resources](#integrate-rest-api-resources) + +## 1. Installing GLUE + +GLUE infrastructure is shipped with the following modules: + +| MODULE | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| [GlueApplication](https://github.com/spryker/glue-application) | v |Provides API infrastructure for Spryker features.| +| [GlueApplicationExtension](https://github.com/spryker/glue-application-extension) | v |Provides extension point/plugin interfaces for the Glue Application module. | +| [AuthRestApi](https://github.com/spryker/auth-rest-api) | | Provides API endpoints to obtain an authentication token to use for subsequent requests. | + +To install it, you need to do the following: + +{% info_block warningBox "Note" %} + +Spryker Shop Suite contains GLUE out of the box. If your project has the latest Shop Suite master merged, you can proceed directly to step 2. Enable GLUE. + +{% endinfo_block %} + +1. Install the required modules using Composer: + + ```bash + composer update "spryker/*" "spryker-shop/*" --update-with-dependencies + composer require spryker/glue-application --update-with-dependencies + ``` + +2. Add a Front Controller for GLUE: + - In the directory where your code is installed, locate a directory public and create a subdirectory Glue in it. + - Create a file index.php in the Glue directory with the following content: + +```php +initialize(); + +$bootstrap = new GlueBootstrap(); +$bootstrap + ->boot() + ->run(); +``` + +3. Create GLUE application bootstrap: + - In the `src/Pyz` directory of your Spryker code installation, create a folder Glue, then create a subfolder `GlueApplication/Bootstrap` in it. + - In the GlueApplication/Bootstrap folder, create file GlueBootstrap.php with the following content: + +```php +'; +$config[GlueApplicationConstants::GLUE_APPLICATION_REST_DEBUG] = false; +``` + +where **** is the URL domain you want to use for GLUE. If you want to use the default domain of the Spryker shop, you can leave it empty. + +{% info_block infoBox "Tip" %} + +If you want to enable GLUE application debugging, set the `GLUE_APPLICATION_REST_DEBUG` variable to true. + +{% endinfo_block %} + +6. Optional: Enable customer authentication via OAuth tokens: + +GLUE provides the possibility to authenticate customer users with the help of OAuth tokens. If you are going to use customer authentication, you will also need to perform the following additional steps: + +- Install the `AuthRestApi` and `OauthCustomerConnector` modules: + +```yaml +composer require spryker/auth-rest-api spryker/oauth-customer-connector --update-with-dependencies +``` + +- Add OAuth plugins to the GLUE dependency provider. To do this, open file `src/Pyz/GlueApplication/GlueApplicationDependencyProvider.php` and make the following changes: +Add use statements for the required OAuth plugins: + +```php +... +namespace Pyz\Glue\GlueApplication; + +use Spryker\Glue\AuthRestApi\Plugin\AccessTokensResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\FormatAuthenticationErrorResponseHeadersPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\AccessTokenRestRequestValidatorPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\SimultaneousAuthenticationRestRequestValidatorPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\TokenResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\RefreshTokensResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\RestUserFinderByAccessTokenPlugin.;.. +``` + +Add OAuth resource plugins: + +```php +protected function getResourceRoutePlugins(): array +{ + return [ + new AccessTokensResourceRoutePlugin(), + new RefreshTokensResourceRoutePlugin(), + new TokenResourceRoutePlugin() + ]; +} +``` + +Add token validation plugins: + +```php +protected function getRestRequestValidatorPlugins(): array +{ + return [ + new AccessTokenRestRequestValidatorPlugin(), + new SimultaneousAuthenticationRestRequestValidatorPlugin(), + ]; +} +``` + +Add error response plugin: + +```php +protected function getFormatResponseHeadersPlugins(): array +{ + return [ + new FormatAuthenticationErrorResponseHeadersPlugin(), + ]; +} +``` + +Add Oauth user finder plugin: + +```php +protected function getRestUserFinderPlugins(): array +{ + return [ + new RestUserFinderByAccessTokenPlugin(), + ]; +} +``` + +- Add OAuth dependency provider. To do this, create file `Pyz/Zed/Oauth/OauthDependencyProvider.php` as follows: + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Ensure that: + +- Invalid agent access tokens passed in the `X-Agent-Authorization` header are rejected with the 401 error code. + +- The `X-Agent-Authorization` header is required for `/agent-customer-impersonation-access-tokens` and `/agent-customer-search` resources. Requests without the header return the 401 error code. + +- When a valid agent access token is provided via the `X-Agent-Authorization`, the `RestRequest` object in Glue controllers populates `restUser.idAgent` with the current agent identifier. + +- The following resources are available: + +| RESOURCE | REQUEST TO CHECK | +| --- | --- | +| `/agent-access-tokens` | `POST https://glue.mysprykershop.com/agent-access-tokens` | +| `/agent-customer-impersonation-access-tokens` | `POST https://glue.mysprykershop.com/agent-customer-impersonation-access-tokens` | +| `/agent-customer-search` | `GET https://glue.mysprykershop.com/agent-customer-search` | + + +{% endinfo_block %} + + +**src/Pyz/Glue/AuthRestApi/AuthRestApiDependencyProvider.php** + +```php +addRelationship( + CatalogSearchRestApiConfig::RESOURCE_CATALOG_SEARCH, + new CatalogSearchAbstractProductsResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CatalogSearchRestApiConfig::RESOURCE_CATALOG_SEARCH_SUGGESTIONS, + new CatalogSearchSuggestionsAbstractProductsResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +If `CatalogSearchResourceRoutePlugin` and `CatalogSearchSuggestionsResourceRoutePlugin` are installed correctly, the following endpoints should now be available: +`https://glue.mysprykershop.com/catalog-search?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}` +`https://glue.mysprykershop.com/catalog-search-suggestions?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To make sure that `CatalogSearchAbstractProductsResourceRelationshipPlugin` and `CatalogSearchSuggestionsAbstractProductsResourceRelationshipPlugin` are functioning correctly, do the following: +Send a request to `https://glue.mysprykershop.com/catalog-search?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}&include=abstract-products` and verify that the response includes relationships to `abstract-products` resources. +Send a request to `https://glue.mysprykershop.com/catalog-search-suggestions?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}&include=abstract-products` and verify that the response includes relationships to `abstract-products` resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md new file mode 100644 index 00000000000..b6bb988e7e8 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md @@ -0,0 +1,120 @@ +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Merchant Product Restrictions | {{page.release_tag}} | [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-relationship-product-lists-rest-api:"^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------|-------------------------------------------------------------| +| MerchantRelationshipProductListsRestApi | vendor/spryker/merchant-relationship-product-lists-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------|--------|----------|-------------------------------------------------------------------------| +| Customer | class | created | src/Generated/Shared/Transfer/RestCatalogSearchAttributesTransfer | +| RestUser | class | created | src/Generated/Shared/Transfer/RestCatalogSearchSortTransfer | +| CustomerProductListCollection | class | created | src/Generated/Shared/Transfer/RestCatalogSearchPaginationTransfer | +| CustomerIdentifier | class | created | src/Generated/Shared/Transfer/RestCatalogSearchAbstractProductsTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------|------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------| +| CustomerProductListOauthCustomerIdentifierExpanderPlugin | Expands `CustomerIdentifierTransfer` with customers product list collection. | None | Spryker\Zed\MerchantRelationshipProductListsRestApi\Communication\Plugin\OauthCustomerConnector | +| CustomerProductListCustomerExpanderPlugin | Expands `CustomerTransfer` with customer's product list collection. | None | Spryker\Glue\MerchantRelationshipProductListsRestApi\Plugin\CustomersRestApi | + + +**src/Pyz/Zed/OauthCustomerConnector/OauthCustomerConnectorDependencyProvider.php** + +```php + + */ + protected function getOauthCustomerIdentifierExpanderPlugins(): array + { + return [ + new CustomerProductListOauthCustomerIdentifierExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send request `POST https://glue.mysprykershop.com/access-tokens` and make sure that `sub` property includes related `customer_product_list_collection`. + +{% endinfo_block %} + +**src/Pyz/Glue/CustomersRestApi/CustomersRestApiDependencyProvider.php** + +```php + + */ + protected function getCustomerExpanderPlugins(): array + { + return array_merge(parent::getCustomerExpanderPlugins(), [ + new CustomerProductListCustomerExpanderPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Send request `GET https://glue.mysprykershop.com/catalog-search` and make sure that response is considering the customers black- and whitelists. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-category-management-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-category-management-glue-api.md index 892ced3e952..b68bc517b86 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-category-management-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-category-management-glue-api.md @@ -9,8 +9,8 @@ Install the required features: |FEATURE |VERSION |REQUIRED SUB-FEATURE | |--- |--- |--- | -| Spryker Core | {{page.version}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Category Management | {{page.version}} | | +| Spryker Core | {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Category Management | {{page.release_tag}} | | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-checkout-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-checkout-glue-api.md index 63d9a1405c9..d5c1be2aa05 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-checkout-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-checkout-glue-api.md @@ -1,4 +1,4 @@ -This document describes how to install the [Checkout](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.html) Glue API. +This document describes how to install the [Checkout](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.html) Glue API. ## Prerequisites @@ -6,11 +6,11 @@ Install the required features: | FEATURE | VERSION | INSTALLATION GUIDE | |-----------------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Glue API: Cart | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Glue API: Customer Account Management | {{page.version}} | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html) | -| Glue API: Payments | {{page.version}} | [Install the Payments Glue API](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/install-and-upgrade/install-the-payments-glue-api.html) | -| Glue API: Shipment | {{page.version}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Glue API: Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Glue API: Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-customer-account-management-glue-api.html) | +| Glue API: Payments | {{page.release_tag}} | [Install the Payments Glue API](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-glue-api.html) | +| Glue API: Shipment | {{page.release_tag}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | ## 1) Install the required modules @@ -623,7 +623,7 @@ Make sure `GuestCartByRestCheckoutDataResourceRelationshipPlugin` has been activ {% endinfo_block %} -For more details, see [Interact with third party payment providers using Glue API](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/interact-with-third-party-payment-providers-using-glue-api.html). +For more details, see [Interact with third party payment providers using Glue API](/docs/pbc/all/payment-service-provider/latest/base-shop/interact-with-third-party-payment-providers-using-glue-api.html). ### Configure mapping @@ -840,7 +840,7 @@ class CheckoutRestApiDependencyProvider extends SprykerCheckoutRestApiDependency Ensure that the plugins work correctly: -1. [Set up a minimum hard threshold](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-minimum-hard-threshold). +1. [Set up a minimum hard threshold](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-minimum-hard-threshold). 2. Add a product to cart with a price lower than the threshold you've set. 3. Send the request: `GET https://glue.mysprykershop.com/carts/{cart-uuid}` Make sure the message about threshold conditions not being met is returned. Example: @@ -1003,5 +1003,5 @@ Activate the following plugins: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |--------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Glue API: Shipment | ✓ | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | -| Glue API: Payments | ✓ | [Install the Payments Glue API](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/install-and-upgrade/install-the-payments-glue-api.html) | +| Glue API: Shipment | ✓ | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | +| Glue API: Payments | ✓ | [Install the Payments Glue API](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-cms-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-cms-glue-api.md index 5a7e6876c2e..4b70a018278 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-cms-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-cms-glue-api.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | REQUIRED SUB-FEATURE | | --------- | ------ | ------------------------ | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| CMS | {{page.version}} | [Install the CMS feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| CMS | {{page.release_tag}} | [Install the CMS feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | ## 1) Install the required modules @@ -198,5 +198,5 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | ---------- | ----------------- | ---------------------------- | -| Content items | | [Install the Content Items feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html) | -| CMS | ✓ | [Install the CMS feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | +| Content items | | [Install the Content Items feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html) | +| CMS | ✓ | [Install the CMS feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-company-account-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-company-account-glue-api.md index e6d627b7448..5a892d86c73 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-company-account-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-company-account-glue-api.md @@ -14,13 +14,13 @@ Install the following features: | FEATURE OR GLUE API | VERSION | INSTALLATION GUIDE | |---------------------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Company Account | {{page.version}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Glue API: Customer Account Management | {{page.version}} | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html) | -| Glue API: Glue Application | {{page.version}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| UUID Generation Console | {{page.version}} | [Install the Uuid Generation Console feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html) | -| Glue API: Shipment | {{page.version}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | -| Glue API: Checkout | {{page.version}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Company Account | {{page.release_tag}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Glue API: Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-customer-account-management-glue-api.html) | +| Glue API: Glue Application | {{page.release_tag}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| UUID Generation Console | {{page.release_tag}} | [Install the Uuid Generation Console feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html) | +| Glue API: Shipment | {{page.release_tag}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | +| Glue API: Checkout | {{page.release_tag}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | @@ -1032,11 +1032,11 @@ class CompanyUserDependencyProvider extends SprykerCompanyUserDependencyProvider Verify the feature is set up correctly: -1. [Authenticate as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). +1. [Authenticate as a customer](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). -2. [Retrieve available company users](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html#retrieve-available-company-users). +2. [Retrieve available company users](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html#retrieve-available-company-users). -3. Using the company user ID you've retrieved in the previous step, [authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). +3. Using the company user ID you've retrieved in the previous step, [authenticate as a company user](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). Check that the response contains all the necessary data. {% endinfo_block %} @@ -1044,7 +1044,7 @@ Check that the response contains all the necessary data. {% info_block warningBox "Verification" %} -To verify that all the required data is provided in the access token, decode the token at [jwt.io](https://jwt.io/). The `sub` property of the payload data should contain the following: +To verify that all the required data is provided in the access token, decode the token at `jwt.io`. The `sub` property of the payload data should contain the following: - `customer_reference` - `id_customer` - `id_company_user` diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md index b84c114c3de..f6e9143e305 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md @@ -11,9 +11,9 @@ To start the feature integration, overview and install the necessary features: | FEATURE | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Configurable Bundle | {{page.version}} | [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) | -|Cart | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Configurable Bundle | {{page.release_tag}} | [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) | +|Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | ## 1) Install the required modules @@ -194,5 +194,5 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Glue API: Configurable Bundle Feature | ✓ | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | -| Glue API: Configurable Bundle + Product Feature | ✓ | [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) | +| Glue API: Configurable Bundle Feature | ✓ | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| Glue API: Configurable Bundle + Product Feature | ✓ | [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-glue-api.md index 19b4f72b9fe..1742340081e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-glue-api.md @@ -9,9 +9,9 @@ To start the feature integration, overview and install the necessary features: | FEATURE | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -|Configurable Bundles |{{page.version}} | [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html)| -|Order Management |{{page.version}} |[Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +|Configurable Bundles | {{page.release_tag}} | [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html)| +|Order Management | {{page.release_tag}} |[Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html)| ## 1) Install the required modules @@ -187,5 +187,5 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Glue API: Configurable Bundle + Cart Feature | ✓ | [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | -| Glue API: Configurable Bundle + Product Feature | ✓ | [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) | +| Glue API: Configurable Bundle + Cart Feature | ✓ | [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| Glue API: Configurable Bundle + Product Feature | ✓ | [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-product-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-product-glue-api.md index 6b810e715f7..e5bdeddb2e8 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-product-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-configurable-bundle-product-glue-api.md @@ -8,9 +8,9 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Configurable Bundle | {{page.version}} | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | -| Product | {{page.version}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Configurable Bundle | {{page.release_tag}} | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | ## 1) Install the required modules @@ -106,5 +106,5 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Glue API: Configurable Bundle | ✓ | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | -| GLUE: Configurable Bundle + Cart | ✓ | [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| Glue API: Configurable Bundle | ✓ | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| GLUE: Configurable Bundle + Cart | ✓ | [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-content-items-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-content-items-glue-api.md index 82cb1deefe2..c233582f841 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-content-items-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-content-items-glue-api.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product | {{page.version}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Content Item | {{page.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Content Item | {{page.release_tag}} | | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-access-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-access-glue-api.md index 0ca29d3bcde..35dac14368a 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-access-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-access-glue-api.md @@ -15,8 +15,8 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Customer Access | {{page.version}} | [Install the Customer Access feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Customer Access | {{page.release_tag}} | [Install the Customer Access feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-account-management-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-account-management-glue-api.md index 5e4a8b753e1..ad2cb235ee1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-account-management-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-customer-account-management-glue-api.md @@ -18,11 +18,11 @@ Install the required features: | FEATURE | VERSION | INSTALLATION GUIDE | | ------------- | ---------- | ------------- | -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Glue API: Glue Application | {{page.version}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Glue API: Shipment | {{page.version}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | -| Glue API: Checkout | {{page.version}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | -| Customer Account Management | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Glue API: Glue Application | {{page.release_tag}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Glue API: Shipment | {{page.release_tag}} | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | +| Glue API: Checkout | {{page.release_tag}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ## 1) Install the required modules @@ -377,7 +377,7 @@ $jobs[] = [ {% info_block infoBox %} -For information on how to protect resources, see [Security and authentication](/docs/dg/dev/glue-api/{{page.version}}/security-and-authentication.html). +For information on how to protect resources, see [Authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html). {% endinfo_block %} @@ -881,7 +881,7 @@ Make sure the following endpoints are available: Verify that the `addresses` resource relationship is registered correctly: -1. [Add a customer address](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html#add-an-address). +1. [Add a customer address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html#add-an-address). 2. Send the request: `GET https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}?include=addresses`. diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-inventory-management-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-inventory-management-glue-api.md new file mode 100644 index 00000000000..a66dd9370f5 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-inventory-management-glue-api.md @@ -0,0 +1,130 @@ + + +This document describes how to install the Inventory Management feature API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core| {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +|Inventory Management| {{page.release_tag}} | | + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-availabilities-rest-api:"^2.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductAvailabilitiesRestApi| vendor/spryker/product-availabilities-rest-api| +| ProductsRestApi| vendor/spryker/products-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestAbstractProductAvailabilityAttributesTransfer| class| created| src/Generated/Shared/Transfer/RestAbstractProductAvailabilityAttributesTransfer| +| RestConcreteProductAvailabilityAttributesTransfer| class| created| src/Generated/Shared/Transfer/RestConcreteProductAvailabilityAttributesTransfer| + +{% endinfo_block %} + +## 3) Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|AbstractProductAvailabilitiesRoutePlugin | Registers the abstract product availabilities resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin | +| ConcreteProductAvailabilitiesRoutePlugin | Registers the concrete product availabilities resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin | +| AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin | Adds the abstract product availability resource as a relationship to the abstract product resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication | +| ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin | Adds the concrete product availability resource as a relationship to the concrete product resource. | None |Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication | + + +
+src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: + +- `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-availabilities` +- `http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-availabilities` + +Send the `GET http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-availabilities` and make sure that the response includes relationships to the `abstract-product-availabilities` resource. + +Send the `GET http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=concrete-product-availabilities` and make sure that the response includes relationships to the `concrete-product-availabilities` resource. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-measurement-units-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-measurement-units-glue-api.md index 2c1fa1bb9c7..fa51e6ee0b8 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-measurement-units-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-measurement-units-glue-api.md @@ -8,8 +8,8 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | LINK | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product Measurement Units | {{page.version}} | [Install the Product Measurement Units feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Measurement Units | {{page.release_tag}} | [Install the Product Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | ## 1) Install the required modules using Composer @@ -84,7 +84,7 @@ console event:trigger -r product_concrete {% info_block warningBox "Verification" %} -Make sure that the following Redis keys exist and there is data in them: +Make sure that the following key-value store keys exist and there is data in them: - `kv:product_measurement_unit:code:{% raw %}{{{% endraw %}product_measurement_unit_code{% raw %}}}{% endraw %}` - `kv:product_concrete:{% raw %}{{{% endraw %}locale_name{% raw %}}}{% endraw %}:sku:{% raw %}{{{% endraw %}sku_product_concrete{% raw %}}}{% endraw %}` diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-multiple-carts-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-multiple-carts-glue-api.md index 049f8500656..80720badef3 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-multiple-carts-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-multiple-carts-glue-api.md @@ -7,9 +7,9 @@ Install the required features: | Name | Version | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Multiple Carts | {{page.version}} | [Install the Multiple Carts feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Multiple Carts | {{page.release_tag}} | [Install the Multiple Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-navigation-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-navigation-glue-api.md index 0e807eaefa2..6d308940515 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-navigation-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-navigation-glue-api.md @@ -14,8 +14,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Navigation | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Navigation | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-order-management-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-order-management-glue-api.md index a3dca35c64a..83caa67ba45 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-order-management-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-order-management-glue-api.md @@ -9,8 +9,8 @@ To start feature integration, overview and install the following features and Gl | NAME | VERSION | INSTALLATION GUIDE | | ---------------- | ------- | --------------------------- | -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-payments-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-payments-glue-api.md index 09182851ad0..ee5fa7b1895 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-payments-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-payments-glue-api.md @@ -15,8 +15,8 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Payments | {{page.version}} | [Install the Payments feature](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/install-and-upgrade/install-the-payments-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Payments | {{page.release_tag}} | [Install the Payments feature](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-feature.html) | ## 1) Install the required modules using Composer @@ -359,4 +359,4 @@ To verify that SelectedPaymentMethodCheckoutDataResponseMapperPlugin is activate | FEATURE | LINK | | --- | --- | -| Checkout API | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Checkout API | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundle-cart-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundle-cart-glue-api.md index 8a5b9bbf390..76c87af8672 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundle-cart-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundle-cart-glue-api.md @@ -9,9 +9,9 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product Bundles |{{page.version}}| [Install the Product Bundles feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| -| Cart |{{page.version}}| [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Bundles | {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html)| ## 1) Install the required modules @@ -66,7 +66,7 @@ Activate the following plugins: | BundledItemByQuoteResourceRelationshipPlugin| Adds the `bundled-items` resource as a relationship to the `bundle-items` resource. Uses the`QuoteTransfer` payload of the `bundle-items` resource. |None |Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication| | GuestBundleItemByQuoteResourceRelationshipPlugin |Adds the `bundle-items` resource as a relationship if `QuoteTransfer` is provided as a payload. It should be used for the `guest-carts` parent resource. |None |Spryker\Glue\ProductBundleCartsRestApi\Plugin\GlueApplication| | BundleItemQuoteItemReadValidatorPlugin |Checks if `CartItemRequestTransfer` is a bundle item in `QuoteTransfer` before performing update or delete operations on it. |None |Spryker\Zed\ProductBundleCartsRestApi\Communication\Plugin| - +| BundleItemQuoteMergePersistentCartChangeExpanderPlugin | Transfers the Product Bundles from guest Quote to Customer Quote correctly during the guest quote to customer quote merge. | If AddGuestQuoteItemsToCustomerQuotePostAuthPlugin is used. | Spryker\Zed\ProductBundleCartsRestApi\Communication\Plugin\CartsRestApi |
src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php @@ -209,11 +209,37 @@ Ensure that you can: {% endinfo_block %} +## Quote Merge Extension for Guest-to-Customer Cart (Single Cart Behavior) + +When single cart behavior is enabled, and AddGuestQuoteItemsToCustomerQuotePostAuthPlugin is used, add the following plugin to correctly merge bundled items: + +```php + + */ + protected function getQuoteMergePersistentCartChangeExpanderPlugins(): array + { + return [ + new BundleItemQuoteMergePersistentCartChangeExpanderPlugin(), + ]; + } +} +``` + ## Install related features Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Products | ✓ | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Product Bundles |✓ |[Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html)| +| Products | ✓ | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Product Bundles |✓ |[Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html)| diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundles-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundles-glue-api.md index 3d0bc3f3809..4e6ed9cda56 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundles-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-bundles-glue-api.md @@ -9,9 +9,9 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product Bundles| {{page.version}}| [Install the Product Bundles feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| -| Order Management| {{page.version}}| [Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Bundles| {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Order Management| {{page.release_tag}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html)| ## 1) Install the required modules @@ -180,4 +180,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Products | ✓ | [Install the Product Glue API - ongoing](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Products | ✓ | [Install the Product Glue API - ongoing](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-configuration-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-configuration-glue-api.md index 67c58ba5314..8e96753dcd3 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-configuration-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-configuration-glue-api.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product Configuration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) feature API. +This document describes how to install the [Product Configuration](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) feature API. ## Install feature core @@ -12,13 +12,13 @@ To start feature integration, integrate the required features and Glue APIs: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core API | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product API | {{page.version}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Cart API | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Wishlist API | {{page.version}} | [Install the Wishlist Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.html) | -| Shopping List API | {{page.version}} | [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) | -| Order Management API | {{page.version}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | -| Product Configuration | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core API | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product API | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Wishlist API | {{page.release_tag}} | [Install the Wishlist Glue API](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.html) | +| Shopping List API | {{page.release_tag}} | [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) | +| Order Management API | {{page.release_tag}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Product Configuration | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-glue-api.md index 9653176dabd..bf6badbc9be 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-glue-api.md @@ -9,9 +9,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product | {{page.version}} | | -| Price | {{page.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | | +| Price | {{page.release_tag}} | | ## 1) Install the required modules @@ -128,7 +128,7 @@ console publish:trigger-events -r product_concrete {% info_block warningBox "Verification" %} -Ensure that the following Redis keys exist, and there is data in them: +Ensure that the following key-value store (Redis or Valkey) keys exist, and there is data in them: - `kv:product_abstract:{% raw %}{{{% endraw %}store_name{% raw %}}}{% endraw %}:{% raw %}{{{% endraw %}locale_name{% raw %}}}{% endraw %}:sku:{% raw %}{{{% endraw %}sku_product_abstract{% raw %}}}{% endraw %}` diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-image-sets-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-image-sets-glue-api.md index 87cc5f81156..b23ff616fd0 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-image-sets-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-image-sets-glue-api.md @@ -8,10 +8,10 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Customer Account Management | {{page.version}} | -| ProductImage | {{page.version}} | -| ProductsRestApi | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | +| ProductImage | {{page.release_tag}} | +| ProductsRestApi | {{page.release_tag}} | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-labels-feature-integration.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-labels-feature-integration.md index 75a6fb4c12d..021a0c1ec49 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-labels-feature-integration.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-labels-feature-integration.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | REQUIRED SUB-FEATURE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product Management | {{page.version}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Product Label | {{page.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Management | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Product Label | {{page.release_tag}} | | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-options-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-options-glue-api.md index f6acc3baec7..b3b8349c569 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-options-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-options-glue-api.md @@ -8,8 +8,8 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Product Options | {{page.version}} | Feature | -| Spryker Core | {{page.version}} | [Feature API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Options | {{page.release_tag}} | Feature | +| Spryker Core | {{page.release_tag}} | [Feature API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-price-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-price-glue-api.md index a5381b3493a..12080259c7f 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-price-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-price-glue-api.md @@ -8,9 +8,9 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product | {{page.version}} | [Install the Product Glue API - ongoing](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Price | {{page.version}} | [Install the Prices feature - ongoing](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API - ongoing](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Price | {{page.release_tag}} | [Install the Prices feature - ongoing](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html)| ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-rating-and-reviews-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-rating-and-reviews-glue-api.md index 8205c4ab957..a4c40911110 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-rating-and-reviews-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-rating-and-reviews-glue-api.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product Raiting and Reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) Glue API feature. +This document describes how to install the [Product Raiting and Reviews](/docs/pbc/all/ratings-reviews/latest/ratings-and-reviews.html) Glue API feature. ## Install feature core @@ -13,8 +13,8 @@ To start feature integration, integrate the required features and Glue APIs: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core Glue API | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product Rating & Reviews | {{page.version}} | [Install the Product Rating and Reviews feature](/docs/pbc/all/ratings-reviews/{{page.version}}/install-and-upgrade/install-the-product-rating-and-reviews-feature.html) | +| Spryker Core Glue API | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Rating & Reviews | {{page.release_tag}} | [Install the Product Rating and Reviews feature](/docs/pbc/all/ratings-reviews/latest/install-and-upgrade/install-the-product-rating-and-reviews-feature.html) | ### 1) Install the required modules @@ -73,7 +73,7 @@ console event:trigger -r product_concrete {% info_block warningBox "Verification" %} -Make sure that there is data in Redis with keys: +Make sure that there is data in key-value store with keys: - `kv:product_abstract:{% raw %}{{{% endraw %}store_name{% raw %}}}{% endraw %}:{% raw %}{{{% endraw %}locale_name{% raw %}}}{% endraw %}:sku:{% raw %}{{{% endraw %}sku_product_abstract{% raw %}}}{% endraw %}` - `kv:product_concrete:{% raw %}{{{% endraw %}locale_name{% raw %}}}{% endraw %}:sku:{% raw %}{{{% endraw %}sku_product_concrete{% raw %}}}{% endraw %}` diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-relations-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-relations-glue-api.md index 8e514b6bc6e..855f88d888d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-relations-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-product-relations-glue-api.md @@ -10,10 +10,10 @@ Install the required features: | NAME | VERSION | REQUIRED SUB-FEATURE| |---|---|---| -|Spryker Core| {{page.version}} |[Glue Application](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| -|Product Relation| {{page.version}} | [Install the Product Relations feature](/docs/pbc/all/product-relationship-management/{{page.version}}/install-and-upgrade/install-the-product-relations-feature.html)| -|Cart| {{page.version}}| [Cart API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Product| {{page.version}} |[Products API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html)| +|Spryker Core| {{page.release_tag}} |[Glue Application](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +|Product Relation| {{page.release_tag}} | [Install the Product Relations feature](/docs/pbc/all/product-relationship-management/latest/install-and-upgrade/install-the-product-relations-feature.html)| +|Cart| {{page.release_tag}} | [Cart API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Product| {{page.release_tag}} |[Products API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html)| ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md index b0a9afbc3f8..f4c9264645d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Product | {{page.version}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | -| Promotions & Discounts | {{page.version}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | ## 1) Install the required modules @@ -685,7 +685,7 @@ Verify that the `PromotionItemByQuoteTransferResourceRelationshipPlugin` and `Pr Prerequisites: -- [Create a discount for the product](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/create-discounts.html). The discount application type should be promotional product. +- [Create a discount for the product](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). The discount application type should be promotional product. - Create a cart. Add items to the cart to satisfy the conditions of the discount rule: @@ -856,7 +856,7 @@ Verify the `DiscountPromotionCartItemExpanderPlugin` and `DiscountPromotionCartI Prerequisites: -- [Create a discount])(/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/create-discounts.html). Discount application type should be promotional product. +- [Create a discount])(/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). Discount application type should be promotional product. - Create a cart with items that satisfy the conditions of the discount rule. - Get a concrete promotional product SKU. diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-quotation-process-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-quotation-process-glue-api.md index a1f35f6b449..797a3896a75 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-quotation-process-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-quotation-process-glue-api.md @@ -10,11 +10,11 @@ To start feature integration, integrate the required features and Glue APIs: | NAME | VERSION | INSTALLATION GUIDE | |---------------------|------------------|--------------------| -| Spryker Core API | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Cart API | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Company Account API | {{page.version}} | [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html) | -| Agent Assist API | {{page.version}} | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | -| Quotation Process | {{page.version}} | [Install the Quotation Process feature](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-feature.html) | +| Spryker Core API | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Company Account API | {{page.release_tag}} | [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html) | +| Agent Assist API | {{page.release_tag}} | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | +| Quotation Process | {{page.release_tag}} | [Install the Quotation Process feature](/docs/pbc/all/request-for-quote/latest/install-and-upgrade/install-features/install-the-quotation-process-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-rest-schema-validation-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-rest-schema-validation-glue-api.md index ac1f71d0bf2..75f46421f87 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-rest-schema-validation-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-rest-schema-validation-glue-api.md @@ -8,7 +8,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | ## 1) Install the required modules using Composer diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-return-management-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-return-management-glue-api.md index 624fae2298e..4cd4ef70df6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-return-management-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-return-management-glue-api.md @@ -8,15 +8,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Feature API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Return Management | {{page.version}} | [Install the Return Management feature](/docs/pbc/all/return-management/{{page.version}}/base-shop/install-and-upgrade/install-the-return-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Feature API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Return Management | {{page.release_tag}} | [Install the Return Management feature](/docs/pbc/all/return-management/latest/base-shop/install-and-upgrade/install-the-return-management-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker/sales-returns-rest-api:"{{page.version}}" --update-with-dependencies +composer require spryker/sales-returns-rest-api:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shared-carts-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shared-carts-glue-api.md index 357705c7262..f79b3c79765 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shared-carts-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shared-carts-glue-api.md @@ -9,9 +9,9 @@ To start feature integration, overview and install the following features and Gl | NAME | VERSION | INTEGRATION GUIDE | | - | - | - | -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Uuid generation console | {{page.version}} | [Install the Uuid Generation Console feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Uuid generation console | {{page.release_tag}} | [Install the Uuid Generation Console feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shipment-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shipment-glue-api.md index 97895b8822a..7f35c4dc83e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shipment-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shipment-glue-api.md @@ -1,7 +1,7 @@ -This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) Glue API. +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) Glue API. ## Prerequisites @@ -9,11 +9,11 @@ Install the required features: | FEATURE | VERSION | INSTALLATION GUIDE | |----------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Glue API: Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | -| Glue API: Checkout | {{page.version}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | -| Glue API: Glue Application | {{page.version}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Glue API: Order Management | {{page.version}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Glue API: Checkout | {{page.release_tag}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Glue API: Glue Application | {{page.release_tag}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Glue API: Order Management | {{page.release_tag}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | ## 1) Install the required modules @@ -481,4 +481,4 @@ To verify the plugins are activated, send the `POST https://glue.mysprykershop.c | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |--------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Glue API: Checkout | ✓ | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Glue API: Checkout | ✓ | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shopping-lists-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shopping-lists-glue-api.md new file mode 100644 index 00000000000..134080ccc49 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-shopping-lists-glue-api.md @@ -0,0 +1,328 @@ + + +{% info_block infoBox "Included features" %} + +The following feature integration guide expects the basic feature to be in place. +The current feature integration guide only adds the Shopping List Rest API functionality. + +{% endinfo_block %} + +Follow the steps below to install Shopping List feature API. + +## Prerequisites + +Install the required features: + +| FEATURE | VERSION | INSTALLATION GUIDE | +| --- | --- |--- | +| Spryker Core | {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Shopping Lists | {{page.release_tag}} |[Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/shopping-lists-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module is installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ShoppingListsRestApi | vendor/spryker/shopping-lists-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Run the following commands to generate the transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_shopping_list.uuid | column | added | +| spy_shopping_list_item.uuid | column | added | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestShoppingListsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListsAttributesTransfer | +| RestShoppingListRequestAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListRequestAttributesTransfer | +| ShoppingListItemRequestTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListItemRequestTransfer | +| RestShoppingListItemsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer | +| ShoppingListTransfer.uuid | property | added | src/Generated/Shared/Transfer/ShoppingListTransfer | +| ShoppingListItemTransfer.uuid | property | added | src/Generated/Shared/Transfer/ShoppingListItemTransfer | + +{% endinfo_block %} + + + +## 3) Set up behavior + +Set up the following behavior. + + +### Generate UUIDs for existing records that do not have IDs + +Run the following commands: + +```bash +console uuid:generate ShoppingList spy_shopping_list +console uuid:generate ShoppingList spy_shopping_list_item +``` + +{% info_block warningBox "Verification" %} + +Make sure that the uuid field is populated for all records in the spy_shopping_list table. To do so, run the following SQL query and make sure that the result is **0 records** : + +```php +SELECT COUNT(*) FROM spy_shopping_list WHERE uuid IS NULL; +``` + +Make sure that the uuid field is populated for all records in the spy_shopping_list_item table. To do so, run the following SQL query and make sure that the result is **0 records**. + +```php +SELECT COUNT(*) FROM spy_shopping_list_item WHERE uuid IS NULL; +``` + +{% endinfo_block %} + +### Enable resources + +{% info_block infoBox %} + +`ShoppingListsResourcePlugin` GET, POST, PATCH and DELETE, `ShoppingListItemsResourcePlugin` POST, PATCH and DELETE verbs are protected resources. For details, refer to the Configure section of [Glue Infrastructure documentation](/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.html). + +{% endinfo_block %} + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ShoppingListsResourcePlugin | Registers the shopping-lists resource. | None | Spryker\Glue\ShoppingListsRestApi\Plugin | +| ShoppingListItemsResourcePlugin | Registers the shopping-list-items resource. | None | Spryker\Glue\ShoppingListsRestApi\Plugin | +| ShoppingListItemByShoppingListResourceRelationshipPlugin | Adds the shopping-list-items resource as a relationship to shopping-lists. | None | Spryker\Glue\ShoppingListsRestApi\Plugin\GlueApplication | +| ConcreteProductBySkuResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `shopping-list-items` resource. | None | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | + +
+src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LISTS, + new ShoppingListItemByShoppingListResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +To verify that the `ShoppingListsResourcePlugin` resource route plugin and the `ShoppingListItemByShoppingListResourceRelationshipPlugin`, `ConcreteProductBySkuResourceRelationshipPlugin` relationship plugins are set up correctly, make sure that following endpoint and relationships are available: + +- `https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}?include=shopping-list-items,concrete-products` + +Check the response: +
+GET https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}?include=shopping-list-items,concrete-products + +```json +{ + "data": [ + { + "type": "shopping-lists", + "id": "adb17f85-953f-565a-a4ce-e5cb02405f83", + "attributes": { + "owner": "Sonia Wagner", + "name": "Workstations", + "numberOfItems": 1, + "updatedAt": "2020-03-16 13:07:38.286054", + "createdAt": "2020-03-16 13:07:38.286054" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/adb17f85-953f-565a-a4ce-e5cb02405f83?include=shopping-list-items,concrete-products" + }, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "0615fe0d-fdbe-576b-a220-3398b9965d73" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists?include=shopping-list-items,concrete-products" + }, + "included": [ + { + "type": "concrete-products", + "id": "115_27295368", + "attributes": { + "sku": "115_27295368", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "DELL OptiPlex 3020", + "description": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and easy serviceability. Stop advanced threats and zero-day attacks with Dell Data Protection | Protected Workspace — a proactive, real-time solution for malware protection. Ensure authorized access through multifactor, single sign-on (SSO) and preboot authentication with Dell Data Protection | Security Tools. Streamline administration with integration into Dell KACE appliances, Microsoft System Center and industry-standard tools. Deploy with flexibility through multiple chassis options. Select the small form factor chassis, optimized for constrained workspaces, or the expandable mini tower with support for up to four PCIe cards.", + "attributes": { + "processor_cache": "3 MB", + "bus_type": "DMI", + "processor_threads": "2", + "tcase": "72 °", + "brand": "DELL", + "processor_frequency": "3.2 GHz" + }, + "superAttributesDefinition": [ + "processor_cache", + "processor_frequency" + ], + "metaTitle": "DELL OptiPlex 3020", + "metaKeywords": "DELL,Tax Exempt", + "metaDescription": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and ", + "attributeNames": { + "processor_cache": "Processor cache type", + "bus_type": "Bus type", + "processor_threads": "Processor Threads", + "tcase": "Tcase", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/115_27295368" + } + }, + { + "type": "shopping-list-items", + "id": "0615fe0d-fdbe-576b-a220-3398b9965d73", + "attributes": { + "quantity": 1, + "sku": "115_27295368" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/adb17f85-953f-565a-a4ce-e5cb02405f83/shopping-list-items/0615fe0d-fdbe-576b-a220-3398b9965d73" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "115_27295368" + } + ] + } + } + } + ] +} +``` + +
+ +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To verify that the `ShoppingListItemsResourcePlugin` is set up correctly, make sure that the following endpoint is available: + +- `https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}/shopping-list-items` + +Post a request with the following body: + +**Body request** + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "sku": "218_1234", + "quantity": 1 + } + } +} +``` + +Check the response: + +`POST https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}/shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 1, + "sku": "218_1234" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/d8c5539b-774e-509b-87a9-58cead6a1486/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + } + } +} +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-spryker-core-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-spryker-core-glue-api.md index 91fe724ab01..efdcca2bc68 100644 --- a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-spryker-core-glue-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-spryker-core-glue-api.md @@ -8,7 +8,7 @@ Install the required features: | NAME | TYPE | VERSION | | --- | --- | --- | -| Spryker Core | Feature | {{page.version}} | +| Spryker Core | Feature | {{page.release_tag}} | ## 1) Install the required modules @@ -557,10 +557,10 @@ Make sure the response contains the correct resource identifier. {% info_block warningBox "Verification" %} -- To verify `SecurityBlockerCustomerControllerAfterActionPlugin` and `SecurityBlockerCustomerRestRequestValidatorPlugin`, [authenticate as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html) with incorrect credentials for as many times as you've specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCKING_NUMBER_OF_ATTEMPTS`. +- To verify `SecurityBlockerCustomerControllerAfterActionPlugin` and `SecurityBlockerCustomerRestRequestValidatorPlugin`, [authenticate as a customer](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-customer.html) with incorrect credentials for as many times as you've specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCKING_NUMBER_OF_ATTEMPTS`. Make sure the account gets blocked for the number of seconds you've specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCK_FOR`. Consequent login attempts should return the `429 Too many requests` error. -- To verify `SecurityBlockerAgentRestRequestValidatorPlugin` and `SecurityBlockerAgentControllerAfterActionPlugin`, [authenticate as an agent assist](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html#authenticate-as-an-agent-assist) with incorrect credentials. +- To verify `SecurityBlockerAgentRestRequestValidatorPlugin` and `SecurityBlockerAgentControllerAfterActionPlugin`, [authenticate as an agent assist](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html#authenticate-as-an-agent-assist) with incorrect credentials. The agent account should get blocked according to the configured you've set up. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-tax-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-tax-glue-api.md new file mode 100644 index 00000000000..03ef6e8affc --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-tax-glue-api.md @@ -0,0 +1,147 @@ + +## Install feature API + +### Prerequisites + +Install the required features: + +| Name | Version | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | 201907.0 | [Glue Application](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | 201907.0 | [Products API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Tax | 201907.0 | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-tax-sets-rest-api:"^2.0.0" --update-with-dependencies +``` + +
+ +Make sure that the following module has been installed: + +| Module | Expected Directory | +| --- | --- | +| `ProductTaxSetsRestApi` | `vendor/spryker/product-tax-sets-rest-api` | + +
+ +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +
+Make sure that the following changes have been applied by checking your database. + +| Database Entity | Type | Event | +| --- | --- | --- | +| `spy_tax_set.uuid` | column | added | + +
+ +
+Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +| --- | --- | --- | --- | +| `RestProductTaxRateTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxRateTransfer` | +| `RestProductTaxSetsAttributesTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `RestProductTaxSetsAttributesTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `RestProductTaxRateTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `TaxSetTransfer.uuid` | property | added | `src/Generated/Shared/Transfer/TaxSetTransfer` | + +
+ +### 3) Set up Behavior + +#### Generate UUIDs for existing records + +Generates new UUIDs for existing entries in the `spy_tax_set` table: + +```bash +console uuid:generate Tax spy_tax_set +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `uuid` field is populated for all records in the `spy_tax_set` table. You can run the following SQL query for it and make sure that the result is 0 records.
`SELECT COUNT(* +{% endinfo_block %} FROM spy_tax_set WHERE uuid IS NULL;`) + +#### Enable resource and relationship + +Activate the following plugin: + +| Plugin | Specification | Prerequisites | Namespace | +| --- | --- | --- | --- | +| `ProductTaxSetsResourceRoutePlugin` | Registers the `product-tax` resource. | None | `Spryker\Glue\ProductTaxSetsRestApi\Plugin\GlueApplication` | +| `ProductTaxSetByProductAbstractSkuResourceRelationshipPlugin` | Adds the `product-tax-sets` resource as a relationship to the `abstract-product` resource. | None | `Spryker\Glue\ProductTaxSetsRestApi\Plugin\GlueApplication` | + +
+src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductTaxSetByProductAbstractSkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
+
+ +{% info_block warningBox "Verification" %} + +Make sure that the following endpoint is available:
`http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-tax-sets`
Send a request to `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=product-tax-sets`. Make sure that the response includes relationships to the `product-tax-sets` resources. +{% endinfo_block %} + +**See also:** + +- [Tax Management](/docs/pbc/all/tax-management/latest/base-shop/tax-feature-overview.html) + + +*Last review date: Mar 21, 2019* + + diff --git a/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-wishlist-glue-api.md b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-wishlist-glue-api.md new file mode 100644 index 00000000000..e6edc372f41 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-glue-api/install-the-wishlist-glue-api.md @@ -0,0 +1,153 @@ + + +Follow the steps below to install Wishlist feature API. + +### Prerequisites + +Install the required features: + +|NAME|VERSION|INTEGRATION GUIDE| +|---|---|---| +| Spryker Core| {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +|Product| {{page.release_tag}} |[Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html)| +|Wishlist| {{page.release_tag}} | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/wishlists-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +|MODULE|EXPECTED DIRECTORY| +|---|---| +|WishlistsRestApi|vendor/spryker/wishlists-rest-apiWishlistItems| + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +Run the following commands to apply database changes, and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in the database: + +|DATABASE ENTITY|TYPE|EVENT| +|---|---|---| +|spy_wishlist.uuid|column|added| + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in transfer objects: + +|TRANSFER|TYPE|EVENT|PATH| +|---|---|---|---| +|RestWishlistItemsAttributesTransfer|class|created|src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer| +|RestWishlistsAttributesTransfer|class|created|src/Generated/Shared/Transfer/RestWishlistsAttributesTransfer| +|WishlistTransfer.uuid|property|added|src/Generated/Shared/Transfer/WishlistTransfer| + +{% endinfo_block %} + +### 3) Set up behavior + +#### Migrate data in the database + +{% info_block infoBox %} + +The following steps generate UUIDs for existing entities in the `spy_wishlist` table. + +{% endinfo_block %} + +Assign UUIDs to existing records in the `spy_wishlist` table and stores them in the corresponding `uuid` column: + +```bash +console uuid:update Wishlist spy_wishlist +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `uuid` field is populated for all records in the `spy_wishlist` table. +For this purpose, run the following SQL query and make sure that the result is 0 records: +`SELECT COUNT(*) FROM spy_wishlist WHERE uuid IS NULL;` + +{% endinfo_block %} + + +#### Enable resources and relationships + +Activate the following plugins: + +|PLUGIN|SPECIFICATION|PREREQUISITES|NAMESPACE| +|---|---|---|---| +|WishlistsResourceRoutePlugin|Registers the `wishlists` resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +|WishlistItemsResourceRoutePlugin|Registers the `wishlist-items` resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +|WishlistRelationshipByResourceIdPlugin|Adds the `wishlists` resource as a relationship to the customers resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +| ConcreteProductBySkuResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `wishlist-items` resource. | None | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + CustomersRestApiConfig::RESOURCE_CUSTOMERS, + new WishlistRelationshipByResourceIdPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: +`http:///glue.mysprykershop.com/wishlists` +`http:///glue.mysprykershop.com/wishlists/{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}/wishlists-items` +Send a request to `https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}?include=wishlists` and make sure that the given customer has at least one wishlist. Make sure that the response includes relationships to the `wishlists` resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-microsoft-azure-active-directory.md b/_includes/pbc/all/install-features/202410.0/install-microsoft-azure-active-directory.md index cb69cfa6d02..349f7c02feb 100644 --- a/_includes/pbc/all/install-features/202410.0/install-microsoft-azure-active-directory.md +++ b/_includes/pbc/all/install-features/202410.0/install-microsoft-azure-active-directory.md @@ -2,18 +2,13 @@ This page describes the Microsoft Azure Active Directory and how to install it. -## General information - Azure Active Directory is Microsoft's multi-tenant, cloud-based directory and identity management service. For an organization, Azure AD helps employees sign up to multiple services and access them anywhere over the cloud with a single set of login credentials. - The [`SprykerEco.Oauth-Azure`](https://github.com/spryker-eco/oauth-azure) enables OAuth 2.0 authentication via Microsoft Azure Active Directory. -## Integrating Azure Active Directory - Follow the steps below to integrate Azure Active Directory. -### Prerequisites +## Prerequisites To start the feature integration: @@ -22,12 +17,12 @@ To start the feature integration: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core Back Office | {{page.version}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | 2. [Register an application with the Microsoft identity platform](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app). -### 1) Install the required modules +## 1) Install the required modules Install the required modules: @@ -45,7 +40,7 @@ Make sure the following modules have been installed: {% endinfo_block %} -### 2) Set up the configuration +## 2) Set up the configuration Using the data from your Microsoft Azure Active Directory account, configure OAuth Azure credentials: @@ -65,7 +60,7 @@ $config[OauthAzureConstants::PATH_AUTHORIZE] = '/oauth2/v2.0/authorize'; $config[OauthAzureConstants::PATH_TOKEN] = '/oauth2/v2.0/token'; ``` -### 3) Set up transfer objects +## 3) Set up transfer objects Generate transfer changes: @@ -86,7 +81,7 @@ Make sure that the following changes have been applied in the transfer objec {% endinfo_block %} -### 4) Set up behavior +## 4) Set up behavior Activate the following plugins: diff --git a/_includes/pbc/all/install-features/202410.0/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md index f4cc5ea60ca..1fb29a145a3 100644 --- a/_includes/pbc/all/install-features/202410.0/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md @@ -1,21 +1,17 @@ -This document describes how to add *multiple abstract products as promotional products* to the [Promotions & Discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/promotions-discounts-feature-overview.html) feature. +This document describes how to add *multiple abstract products as promotional products* to the [Promotions & Discounts](/docs/pbc/all/discount-management/latest/base-shop/promotions-discounts-feature-overview.html) feature. -## Install feature core - -Follow the steps below to install the feature core. - -### Prerequisites +## Prerequisites Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Promotions & Discounts | {{page.version}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | -| Spryker Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Spryker Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -### 1) Install the required modules +## 1) Install the required modules Install the required modules using Composer: @@ -33,7 +29,7 @@ Make sure the following modules have been installed: {% endinfo_block %} -### 2) Set up database schema and transfer objects +## 2) Set up database schema and transfer objects Apply database changes and generate entity and transfer changes: @@ -74,7 +70,7 @@ Ensure that the *ABSTRACT PRODUCT SKU(S)** field is displayed, and it accepts a {% endinfo_block %} -### 3) Add translations +## 3) Add translations Append glossary according to your configuration: @@ -97,7 +93,7 @@ Ensure that in the database the configured data are added to the `spy_glossary` {% endinfo_block %} -### 4) Add Zed translations +## 4) Add Zed translations Generate a new translation cache for Zed: @@ -115,7 +111,7 @@ Ensure that all labels and help tooltips in the **Discount** form has English an {% endinfo_block %} -### 5) Set up behavior +## 5) Set up behavior Set up the following behaviors: @@ -151,7 +147,7 @@ class CartPageDependencyProvider extends SprykerCartPageDependencyProvider Ensure that the plugin works correctly: -1. [Create a discount](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/create-discounts.html). +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). 2. On the **Discount calculation** tab, for **DISCOUNT APPLICATION TYPE**, select **PROMOTIONAL PRODUCT**. 3. Add **ABSTRACT PRODUCT SKU**. 4. Create another discount with one or more identic promotional products. @@ -160,7 +156,7 @@ Ensure that the plugin works correctly: {% endinfo_block %} -### 4) Build Zed UI frontend +## 6) Build Zed UI frontend Enable Javascript and CSS changes: diff --git a/_includes/pbc/all/install-features/202410.0/install-self-service-portal.md b/_includes/pbc/all/install-features/202410.0/install-self-service-portal.md new file mode 100644 index 00000000000..990383e5f68 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-self-service-portal.md @@ -0,0 +1,114 @@ + + + + + + + + + +This document describes how to install Self-Service Portal (SSP). + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|----------------------------------| ------- | ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +## Set up the configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------| +| KernelConstants::CORE_NAMESPACES | Adds the SprykerFeature namespace to the Core namespaces. | Spryker\Shared\Kernel\KernelConstants | + +**config/Shared/config_default.php** + +```php + +use Spryker\Shared\Kernel\KernelConstants; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ..., + 'SprykerFeature', +]; + +``` + +## Install feature frontend + +The entire project is now an *npm workspace*, meaning each submodule declares its dependencies. During the installation stage, npm installs all of those dependencies and stores them into the root of the project. + +### Prerequisites + +- [Node.js](https://nodejs.org/en/download/package-manager) 18 or higher +- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) 9 or higher + + +### Install dependencies and build Yves and Zed applications + +1. In `package.json`, add `spryker-feature` to the `workspaces` section: + +```json +{ + "workspaces": [ + "vendor/spryker-feature/*", + "vendor/spryker-feature/*/assets/Zed" + ], + "devDependencies": { + "@spryker/oryx-for-zed": "~3.4.5", + } +} +``` + +2. Adjust `frontend/settings.js` to resolve typescript files in the `vendor/spryker-features` directory: + +```javascript +const globalSettings = { + paths: { + + features: './vendor/spryker-feature', + } +} + +const getAppSettingsByTheme = (namespaceConfig, theme, pathToConfig) => { + const paths = { + + features: globalSettings.paths.features, + }; + + return { + find: { + componentEntryPoints: { + dirs: [ + join(globalSettings.context, paths.features), + ], + }, + componentStyles: { + dirs: [join(globalSettings.context, paths.features)], + }, + }, + }; +} +``` + +3. Build the project: + +```bash +vendor/bin/console frontend:project:install-dependencies +vendor/bin/console frontend:yves:build +vendor/bin/console frontend:zed:build +``` + +## Install the features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| Self-Service Portal (SSP) Asset Management | | [Self-Service Portal (SSP) Asset Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature) | +| Self-Service Portal (SSP) Dashboard Management | | [Self-Service Portal (SSP) Dashboard Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature) | +| Self-Service Portal (SSP) File Management | | [Self-Service Portal (SSP) File Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature) | +| Self-Service Portal (SSP) Inquiry Management | | [Self-Service Portal (SSP) Inquiry Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature) | +| Self-Service Portal (SSP) SSP Service Management | | [Self-Service Portal (SSP) SSP Inquiry Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature) | +| Self-Service Portal (SSP) SSP Model Management | | [Self-Service Portal (SSP) SSP Model Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-acl-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-acl-feature.md new file mode 100644 index 00000000000..eeb94fe51d2 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-acl-feature.md @@ -0,0 +1,459 @@ +This document describes how to install the ACL feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/acl:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | REQUIRED | EXPECTED DIRECTORY | +|-------------------|-------------|---------------------------------------| +| Acl | v | vendor/spryker/acl | +| AclDataImport | v | vendor/spryker/acl-data-import | +| AclEntity | v | vendor/spryker/acl-entity | +| AclEntityDataImport | v | vendor/spryker/acl-entity-data-import | +| AclEntityExtension | | vendor/spryker/acl-entity-extension | +| AclExtension | v | vendor/spryker/acl-extension | + +{% endinfo_block %} + +## 2) Set up the database schema + +Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied to the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------|-------|---------| +| spy_acl_role | table | created | +| spy_acl_rule | table | created | +| spy_acl_group | table | created | +| spy_acl_user_has_group | table | created | +| spy_acl_groups_has_roles | table | created | +| spy_acl_entity_segment | table | created | +| spy_acl_entity_rule | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------|--------|---------|-------------------------------------------------------------------------| +| Group | object | Created | src/Generated/Shared/Transfer/GroupTransfer | +| AclEntityRule | object | Created | src/Generated/Shared/Transfer/AclEntityRuleTransfer | +| AclEntitySegment | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentTransfer | +| AclEntitySegmentRequest | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentRequestTransfer | +| AclEntityRuleRequest | object | Created | src/Generated/Shared/Transfer/AclEntityRuleRequestTransfer | +| AclEntityRuleCollection | object | Created | src/Generated/Shared/Transfer/AclEntityRuleCollectionTransfer | +| AclEntitySegmentResponse | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentResponseTransfer | +| AclEntitySegmentCriteria | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentCriteriaTransfer | +| AclEntityRuleCriteria | object | Created | src/Generated/Shared/Transfer/AclEntityRuleCriteriaTransfer | +| AclEntityRuleResponse | object | Created | src/Generated/Shared/Transfer/AclEntityRuleResponseTransfer | +| AclEntityMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataTransfer | +| AclEntityParentMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityParentMetadataTransfer | +| AclEntityParentConnectionMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityParentConnectionMetadataTransfer | +| AclEntityMetadataCollection | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataCollectionTransfer | +| AclEntityMetadataConfig | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataConfigTransfer | +| AclRoleCriteria | object | Created | src/Generated/Shared/Transfer/AclRoleCriteriaTransfer | +| GroupCriteria | object | Created | src/Generated/Shared/Transfer/GroupCriteriaTransfer | +| Groups | object | Created | src/Generated/Shared/Transfer/GroupsTransfer | +| Role | object | Created | src/Generated/Shared/Transfer/RoleTransfer | +| Roles | object | Created | src/Generated/Shared/Transfer/RolesTransfer | +| Rule | object | Created | src/Generated/Shared/Transfer/RuleTransfer | +| Rules | object | Created | src/Generated/Shared/Transfer/Transfer | +| User | object | Created | src/Generated/Shared/Transfer/UserTransfer | +| NavigationItem | object | Created | src/Generated/Shared/Transfer/NavigationItemTransfer | +| NavigationItemCollection | object | Created | src/Generated/Shared/Transfer/NavigationItemCollection | +| AclUserHasGroupCollection | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupCollection | +| AclUserHasGroup | object | Created | src/Generated/Shared/Transfer/AclUserHasGroup | +| AclUserHasGroupCriteria | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupCriteria | +| AclUserHasGroupConditions | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupConditions | + +{% endinfo_block %} + +## 4) Import the ACL groups and roles + +1. Prepare your data according to your requirements using our demo data: + +**data/import/common/common/acl_group.csv** + +```csv +name,reference +root_group,root_group +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|--------------|----------------------------------------------------------------------| +| name | ✓ | string | root_group | The name of the ACL group. | +| reference | x | string | root_group | Key of the ACL group that is used as a reference in the data import. | + +**data/import/common/common/acl_role.csv** + +```csv +name,reference +root_role,root_role +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|--------------|---------------------------------------------------------------------| +| name | ✓ | string | root_role | The name of the ACL role. | +| reference | x | string | root_role | Key of the ACL role that is used as a reference in the data import. | + +**data/import/common/common/acl_group_role.csv** + +```csv +group_name,role_name +root_group,root_role +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------|----------|-----------|--------------|----------------------------| +| group_name | ✓ | string | root_group | The name of the ACL group. | +| role_name | ✓ | string | root_role | The name of the ACL role. | + +2. Extend the data import configuration: + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# Acl import +- data_entity: acl-role + source: data/import/common/common/acl_role.csv +- data_entity: acl-group + source: data/import/common/common/acl_group.csv +- data_entity: acl-group-role + source: data/import/common/common/acl_group_role.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------|--------------------------------------------------------------------------------|---------------|-------------------------------------------------| +| AclGroupDataImportPlugin | Imports ACL group data from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | +| AclRoleDataImportPlugin | Imports ACL role data from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | +| AclGroupRoleDataImportPlugin | Imports the connections between ACL roles and ACL groups from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new AclGroupDataImportPlugin(), + new AclRoleDataImportPlugin(), + new AclGroupRoleDataImportPlugin(), + ]; + } +} +``` + +4. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_ROLE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP_ROLE), + new AclEntitySynchronizeConsole(), + ]; + + return $commands; + } +} +``` + +4. Import the data: + +```bash +console data:import:data:import:acl-role +console data:import:data:import:acl-group +console data:import:data:import:acl-group-role +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: +- `spy_acl_group` +- `spy_acl_role` +- `spy_acl_groups_has_roles` + +{% endinfo_block %} + +5. Synchronize the ACL entities for the merchants and their users: + +```bash +console acl:entity:synchronize +``` + +{% info_block warningBox "Verification" %} + +Make sure the synchronized data has been added to the following database tables: +- `spy_acl_entity_rule` +- `spy_acl_entity_segment` +- `spy_acl_entity_segment_merchant` +- `spy_acl_entity_segment_merchant_user` +- `spy_acl_group` +- `spy_acl_groups_has_roles` +- `spy_acl_role` +- `spy_acl_rule` + +With a multi-merchant environment, make sure the ACL entities are synchronized for each merchant. +If the ACL entities have already been synchronized, the synchronization process doesn't create duplicate entries. + +{% endinfo_block %} + +## 5) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| AccessControlEventDispatcherPlugin | Adds a listener to `\Symfony\Component\HttpKernel\KernelEvents::REQUEST`, which checks if the user is allowed to access the current resource. | | Spryker\Zed\Acl\Communication\Plugin\EventDispatcher | +| AclNavigationItemCollectionFilterPlugin | Checks if the navigation item can be accessed by the current user. | | Spryker\Zed\Acl\Communication\Plugin\Navigation | +| AclInstallerPlugin | Fills the database with required ACL data. | | Spryker\Zed\Acl\Communication\Plugin | +| GroupPlugin | Provides ACL groups for user. | | Spryker\Zed\Acl\Communication\Plugin | +| AclEntityAclRolePostSavePlugin | Saves `RoleTransfer.aclEntityRules` to the database. | | Spryker\Zed\AclEntity\Communication\Plugin\Acl | +| AclRulesAclRolesExpanderPlugin | Expands the `Roles` transfer object with ACL rules. | | Spryker\Zed\AclEntity\Communication\Plugin\Acl | +| AclEntityApplicationPlugin | Enables ACL for the whole Application. | | Spryker\Zed\AclEntity\Communication\Plugin\Application | + +**src/Pyz/Zed/EventDispatcher/EventDispatcherDependencyProvider.php** + +```php + + */ + protected function getEventDispatcherPlugins(): array + { + return [ + new AccessControlEventDispatcherPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ZedNavigation/ZedNavigationDependencyProvider.php** + +```php + + */ + protected function getNavigationItemCollectionFilterPlugins(): array + { + return [ + new AclNavigationItemCollectionFilterPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins() + { + return [ + new AclInstallerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php +set(static::PLUGIN_GROUP, function (Container $container) { + return new GroupPlugin(); + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/Acl/AclDependencyProvider.php** + +```php + + */ + protected function getAclRolesExpanderPlugins(): array + { + return [ + new AclRulesAclRolesExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\AclExtension\Dependency\Plugin\AclRolePostSavePluginInterface> + */ + protected function getAclRolePostSavePlugins(): array + { + return [ + new AclEntityAclRolePostSavePlugin(), + ]; + } +} +``` + +2. To enable the ACL Entity feature for `MerchantPortalApplication`, register the `AclEntityApplicationPlugin` plugin. The ACL Entity feature lets you manage access to the entities of different merchants separately. + +**src/Pyz/Zed/MerchantPortalApplication/MerchantPortalApplicationDependencyProvider.php** + +```php + + */ + protected function getMerchantPortalApplicationPlugins(): array + { + return [ + new AclEntityApplicationPlugin(), + ]; + } +} +``` + +## 6) Install the database data for ACL + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure the following works correctly: + +- The request to access the Merchant Portal doesn't succeed for users without permissions. +- A marketplace user can see only the allowed Merchant Portal menu links. +- `spy_acl_role`, `spy_acl_group`, and `spy_acl_user_has_group` tables contain default data. +- You can edit a user's ACL groups when [editing users in the Back Office](/docs/pbc/all/user-management/latest/base-shop/manage-in-the-back-office/manage-users/edit-users.html). +- When a `RoleTransfer` is saved and contains `AclEntityRules`, `AclEntityRule` is created in `spy_acl_entity_rule`. +- `RolesTransfer` contains the needed `AclEntityRules`. +- Users without permissions to access an entity or endpoint can't access them. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-cart-feature.md index 2ec23098666..34928d8667d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-cart-feature.md @@ -1,25 +1,28 @@ -This document describes how to install the Agent Assist + Cart feature. +This document describes how to install the Agent Assist + Cart + Order Management feature. ## Prerequisites To start the feature integration, overview and install the necessary features: -| NAME | VERSION | INSTALLATION GUIDE | -| ------------ | ------- | ------------------------------------------------------------ | -| Spryker Core | {{page.version}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Agent Assist | {{page.version}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | -| Cart | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Agent Assist | {{page.release_tag}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | ## 1) Set up behavior Activate the following plugins: -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -| -------------------- | -------------------- | ------------- | -------------------- | -| SanitizeCustomerQuoteImpersonationSessionFinisherPlugin | Sanitizes a customer quote. | None | Spryker\Client\Quote\Plugin\Agent | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|---------------------------------------|---------------------------------------------------|-----------------------------------------------| +| SanitizeCustomerQuoteImpersonationSessionFinisherPlugin | Sanitizes a customer quote. | None | Spryker\Client\Quote\Plugin\Agent | +| AgentQuoteTransferExpanderPlugin | Adds agent's user email to the Quote. | AgentConfig::isSalesOrderAgentEnabled() === true | Spryker\Client\Agent\Plugin\Quote | +| AgentOrderExpanderPreSavePlugin | Adds agent email to the sales order. | AgentConfig::isSalesOrderAgentEnabled() === true | Spryker\Zed\Agent\Communication\Plugin\Sales | **src/Pyz/Client/Agent/AgentDependencyProvider.php** @@ -45,9 +48,59 @@ class AgentDependencyProvider extends SprykerAgentDependencyProvider } ``` +For capturing the agent email in the order update the following files: + +
src/Pyz/Client/Quote/QuoteDependencyProvider.php + +```php +namespace Pyz\Client\Quote; + +use Spryker\Client\Agent\Plugin\Quote\AgentQuoteTransferExpanderPlugin; + +class QuoteDependencyProvider extends \Spryker\Client\Quote\QuoteDependencyProvider +{ + /** + * @return array<\Spryker\Client\QuoteExtension\Dependency\Plugin\QuoteTransferExpanderPluginInterface> + */ + protected function getQuoteTransferExpanderPlugins(): array + { + return [ + new AgentQuoteTransferExpanderPlugin(), + ]; + } +} +``` + +
+ +
src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php +namespace Pyz\Zed\Sales; + +use Spryker\Zed\Agent\Communication\Plugin\Sales\AgentOrderExpanderPreSavePlugin; + +class SalesDependencyProvider extends \Spryker\Zed\Sales\SalesDependencyProvider +{ + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPreSavePluginInterface> + */ + protected function getOrderExpanderPreSavePlugins(): array + { + return [ + new AgentOrderExpanderPreSavePlugin(), + ]; + } +} +``` + +
+ {% info_block warningBox "Verification" %} Ensure that, after finishing a customer impersonation, the session quote is empty. +Ensure that after placing an order by an agent, the order contains the agent's email in the `agentEmail` field, when an agent assists a customer. +Ensure that the agent email is visible in the placed order in the "Orders" section of the Back Office, when an agent assists a customer. {% endinfo_block %} @@ -58,4 +111,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | ----------------- | ------------ | ----------------------- | -| Agent Assist + Shopping List | | [Install the Agent Assist + Shopping List feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.html) | +| Agent Assist + Shopping List | | [Install the Agent Assist + Shopping List feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-feature.md index 78585b472ef..a7c50e1d8b8 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Agent Assist](/docs/pbc/all/user-management/{{site.version}}/base-shop/agent-assist-feature-overview.html) feature. +This document describes how to install the [Agent Assist](/docs/pbc/all/user-management/latest/base-shop/agent-assist-feature-overview.html) feature. ## Install feature core @@ -12,14 +12,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{site.version}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{site.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | -| Cart | {{site.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Cart | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/agent-assist:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/agent-assist:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -36,6 +36,26 @@ Make sure the following modules have been installed: ### 2) Set up the database schema +Enabled feature configuration if you want to capture the agent email in the order data: + +
src/Pyz/Shared/Agent/AgentConfig.php + +```php +namespace Pyz\Shared\Agent; + +use Spryker\Shared\Agent\AgentConfig as SprykerAgentConfig; + +class AgentConfig extends SprykerAgentConfig +{ + public function isSalesOrderAgentEnabled(): bool + { + return true; + } +} +``` + +
+ Apply database changes and generate entity and transfer changes: ```bash @@ -45,11 +65,12 @@ console transfer:generate {% info_block warningBox "Verification" %} -Make sure the following changes have been applied in the database:: +Make sure the following changes have been applied in the database: -| DATABASE ENTITY | TYPE | EVENT | -|---------------------|--------|---------| -| spy_user.is_agent | column | created | +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------|--------|---------| +| spy_user.is_agent | column | created | +| spy_sales_order.agent_email | column | created | Make sure the following transfers have been created: @@ -124,6 +145,13 @@ class UserDependencyProvider extends SprykerUserDependencyProvider
+Update the Back Office translations: + +```bash +console translator:generate-cache +``` + + {% info_block warningBox "Verification" %} Ensure that the following plugins have been registered: @@ -146,12 +174,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/agent-assist:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/agent-assist:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -380,8 +408,8 @@ Enable the following behaviors by registering the plugins: | SaveAgentSessionSecurityPlugin | Extends security builder event dispatcher with save session agent listener. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | | ValidateAgentSessionSecurityPlugin | Extends security service with agent session validator listener. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | | SessionAgentValidationSecurityAuthenticationListenerFactoryTypeExpanderPlugin | Expands security authentication listener factory types list with the agent's session validator factory type. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | -| SessionRedisSessionAgentSaverPlugin | Saves an agent's session data to the Redis storage. | Session data is stored in Redis. | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | -| SessionRedisSessionAgentValidatorPlugin | Validates an agent's session data in the Redis storage. | Session data is stored in Redis. | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | +| SessionRedisSessionAgentSaverPlugin | Saves an agent's session data to the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | +| SessionRedisSessionAgentValidatorPlugin | Validates an agent's session data in the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | | SessionFileSessionAgentSaverPlugin | Saves an agent's session data to a file. | Session data is stored in a file. | Spryker\Yves\SessionFile\Plugin\SessionAgentValidation | | SessionFileSessionAgentValidatorPlugin | Validates an agent's session data in a file. | Session data is store in a file. | Spryker\Yves\SessionFile\Plugin\SessionAgentValidation | @@ -424,7 +452,7 @@ class SecurityDependencyProvider extends SprykerSecurityDependencyProvider {% info_block warningBox "" %} -Apply the following changes only if session data is stored in Redis. +Apply the following changes only if session data is stored in the key-value store (Redis or Valkey). {% endinfo_block %} @@ -464,7 +492,7 @@ class SessionAgentValidationDependencyProvider extends SprykerSessionAgentValida {% info_block warningBox "Verification" %} 1. Log in as an agent. -2. Make sure the following Redis key exists and contains the data: +2. Make sure the following key-value store (Redis or Valkey) key exists and contains the data: `{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}:agent:entity` 3. Change the session data to an invalid value. Make sure the agent has been logged out. @@ -513,7 +541,7 @@ class SessionAgentValidationDependencyProvider extends SprykerSessionAgentValida {% info_block warningBox "Verification" %} 1. Log in as an agent. -2. Make sure the following Redis key exists and contains the data: +2. Make sure the following key-value store (Redis or Valkey) key exists and contains the data: `{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}:agent:entity` 3. Change the session data to an invalid value. Make sure the agent has been logged out. diff --git a/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-shopping-list-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-shopping-list-feature.md new file mode 100644 index 00000000000..af58f4766a9 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-agent-assist-shopping-list-feature.md @@ -0,0 +1,60 @@ + + +This document describes how to install the Agent Assist + Shopping List feature. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ------------- | ------- | ------------------------------------------------------------ | +| Spryker Core | master | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Agent Assist | master | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Shopping List | master | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +## 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | ----------------- | ------------- | ------------------ | +| SanitizeCustomerShoppingListsImpersonationSessionFinisherPlugin | Removes a customer shopping list collection from the session. | None | Spryker\Client\ShoppingListSession\Plugin\Agent | + +**src/Pyz/Client/Agent/AgentDependencyProvider.php** + +```php +add(new AvailabilityNotificationSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationSubscriber` works: + +1. Add a new product and make it unavailable. +2. As a customer, subscribe to its availability notifications on the Storefront. +3. Make the product available. +4. Check your mailbox for the email about the product's availability. + +{% endinfo_block %} + +#### Configure email handling + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------|------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| AvailabilityNotificationSubscriptionMailTypePlugin | Handles the email sent after subscribing to product availability notification. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | +| AvailabilityNotificationUnsubscribedMailTypePlugin | Handles the email sent after unsubscribing from product availability notification. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | +| AvailabilityNotificationMailTypePlugin | Handles the email sent after the product's availability status change. | None | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | + +
src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ... + ->add(new AvailabilityNotificationUnsubscribedMailTypePlugin()) + ->add(new AvailabilityNotificationSubscriptionMailTypePlugin()) + ->add(new AvailabilityNotificationMailTypePlugin()) + ... + ; + + return $mailCollection; + }); + ... + + return $container; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationSubscriptionMailTypePlugin`, `AvailabilityNotificationUnsubscribedMailTypePlugin`, and `AvailabilityNotificationMailTypePlugin` work: +1. Add a new product. +2. On the Storefront, as a customer, subscribe to its availability notifications. +3. Switch the availability status of the product several times. +4. Check your mailbox for emails about the product's status being switched to available and unavailable. + +{% endinfo_block %} + +#### Configure customer behavior + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| AvailabilityNotificationAnonymizerPlugin | Anonymizes customer data during customer anonymization. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\CustomerAnonymizer | +| AvailabilityNotificationSubscriptionCustomerTransferExpanderPlugin | Expands `CustomerTransfer` with availability notification subscriptions data. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Customer | + +
+src/Pyz/Zed/Customer/CustomerDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationAnonymizerPlugin` works: +1. Add a new product. +2. On the Storefront, as a company user, subscribe to its availability notifications. +3. Check that the corresponding line is added to the `spy_availability_notification_subscription` table. +4. Delete the company user that is subscribed to the product's availability. +5. Check that the line is deleted from the `spy_availability_notification_subscription` table. + +Verify that `AvailabilityNotificationSubscriptionCustomerTransferExpanderPlugin` works: +1. Add a new product. +2. On the Storefront, as a company user, subscribe to its availability notifications. +3. On the Storefront, go to account overview > **Newsletters**. +4. Check that you are subscribed to the product's availability notifications. + +{% endinfo_block %} + +### 4) Set up the configuration + +{% info_block infoBox %} + +You can define stores to Yves hosts mapping. This allows generating correct URLs—for example, unsubscription URL—for multi-store setup when product availability is shared between two or more stores. + +{% endinfo_block %} + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| AvailabilityNotificationConstants::BASE_URL_YVES_PORT | Defines base URL Yves port. | Spryker\Shared\AvailabilityNotification | +| AvailabilityNotificationConstants::STORE_TO_YVES_HOST_MAPPING | Defines stores to Yves host mapping. Example: the format of returned array is ['DE' => 'yves.de.mysprykershop.com', 'AT' => 'yves.at.mysprykershop.com'] | Spryker\Shared\AvailabilityNotification | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\AvailabilityNotification\AvailabilityNotificationConstants; + +// >>> Availability Notification +$config[AvailabilityNotificationConstants::BASE_URL_YVES_PORT] = $yvesPort; +$config[AvailabilityNotificationConstants::STORE_TO_YVES_HOST_MAPPING] = [ + 'DE' => getenv('SPRYKER_YVES_HOST_DE'), + 'AT' => getenv('SPRYKER_YVES_HOST_AT'), + 'US' => getenv('SPRYKER_YVES_HOST_US'), +]; +``` + +2. To set YVES host environment variables, adjust your deploy file: + +**deploy.*.yml** + +```yaml +version: "0.1" + +namespace: spryker_demo +tag: '1.0' + +environment: docker.dev +image: + environment: + SPRYKER_YVES_HOST_DE: yves.de.spryker.local + SPRYKER_YVES_HOST_AT: yves.at.spryker.local + SPRYKER_YVES_HOST_US: yves.us.spryker.local +... +``` + +{% info_block infoBox %} + +You can control whether `AvailabilityNotificationFacade::subscribe()` throws an exception `\Spryker\Zed\Product\Business\Exception\MissingProductException` (if SKU does not exist in the database) or not. You can do it through the `AvailabilityNotificationConfig::AVAILABILITY_NOTIFICATION_CHECK_PRODUCT_EXISTS` config setting. If set to `false` (by default), then the exception is thrown. If set to `true`, then the exception is not thrown, but `AvailabilityNotificationFacade::subscribe()` returns the instance of `AvailabilityNotificationSubscriptionResponseTransfer::$isSuccess = true`. + +{% endinfo_block %} + +**src/Pyz/Glue/AvailabilityNotification/AvailabilityNotificationConfig.php** + +```php +getIsSuccess()`. + +The config setting exists for BC reasons only. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Availability Notification feature frontend. + +### Prerequisites + +To start feature integration, integrate the required feature: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require "spryker-feature/availability-notification":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|------------------------------------------------------| +| AvailabilityNotificationPage | vendor/spryker-shop/availability-notification-page | +| AvailabilityNotificationPageWidget | vendor/spryker-shop/availability-notification-widget | + +{% endinfo_block %} + +### 2) Add translations + +Feature-specific glossary keys: + +
+/data/import/glossary.csv + +```yaml +availability_notification.notify_me,Notify me when back in stock,en_US +availability_notification.notify_me,"Benachrichtigen Sie mich, wenn der Artikel wieder verfügbar ist",de_DE +availability_notification.do_not_notify_me,Do not notify me when back in stock,en_US +availability_notification.do_not_notify_me,"Benachrichtigen Sie mich nicht, wenn der Artikel wieder verfügbar ist",de_DE +availability_notification.subscribed,Successfully subscribed,en_US +availability_notification.subscribed,Erfolgreich abonniert,de_DE +availability_notification.unsubscribed,Successfully unsubscribed,en_US +availability_notification.unsubscribed,Erfolgreich abgemeldet,de_DE +availability_notification.successfully_unsubscribed,"Successfully unsubscribed",en_US +availability_notification.successfully_unsubscribed,"Erfolgreich abbestellt",de_DE +availability_notification.successfully_unsubscribed_text,"You have successfully unsubscribed from being notified when the product is available again",en_US +availability_notification.successfully_unsubscribed_text,"Sie haben erfolgreich eine Benachrichtigung erhalten, wenn das produkt wieder verfügbar ist",de_DE +availability_notification_subscription.mail.subscribed.head,"We just informed our purchase team about your subscription!",en_US +availability_notification_subscription.mail.subscribed.head,"Wir haben unser Einkaufsteam gerade über Ihr Abonnement informiert!",de_DE +availability_notification_subscription.mail.subscribed.body,"You will receive an email when the product will be available again",en_US +availability_notification_subscription.mail.subscribed.body,"Sie erhalten eine E-Mail, sobald das Produkt wieder verfügbar ist",de_DE +availability_notification_subscription.mail.subscribed.subject,"We just informed our purchase team about your subscription!",en_US +availability_notification_subscription.mail.subscribed.subject,"Abonnement für Produktverfügbarkeit",de_DE +availability_notification_subscription.mail.unsubscribed.subject,"You will not be notified when the product %name% will be available again.",en_US +availability_notification_subscription.mail.unsubscribed.subject,"Sie werden nicht benachrichtigt, wenn das Produkt %name% wieder verfügbar ist.",de_DE +availability_notification_subscription.mail.unsubscribed.body,"You will not be notified when the product %name% will be available again.",en_US +availability_notification_subscription.mail.unsubscribed.body,"Sie werden nicht benachrichtigt, wenn das Produkt %name% wieder verfügbar ist.",de_DE +availability_notification_subscription.mail.notification.buy_now,"Buy now",en_US +availability_notification_subscription.mail.notification.buy_now,"Kaufe jetzt",de_DE +availability_notification_subscription.mail.notification.subject,"%name% is available again!",en_US +availability_notification_subscription.mail.notification.subject,"%name% ist wieder verfügbar!",de_DE +availability_notification_subscription.mail.notification.head,"%name% is available again!",en_US +availability_notification_subscription.mail.notification.head,"%name% ist wieder verfügbar",de_DE +availability_notification_subscription.mail.notification.body,"The wait is over, you can not add this product inside your cart.",en_US +availability_notification_subscription.mail.notification.body,"Das Warten hat ein Ende, Sie können dieses Produkt nicht in Ihren Warenkorb legen.",de_DE +availability_notification_subscription.mail.copyright,"Copyright © current year company name, All rights reserved.

",en_US +availability_notification_subscription.mail.copyright,"Copyright © Name des aktuellen Jahres, Alle Rechte vorbehalten.

",de_DE +availability_notification_subscription.mail.unsubscribe,"Want to change how you receive these emails?
You can unsubscribe from this list.",en_US +availability_notification_subscription.mail.unsubscribe,"Möchten Sie ändern, wie Sie diese E-Mails erhalten?
Sie können aus dieser Liste austragen.",de_DE +availability_notification.email_address,"Email address",en_US +availability_notification.email_address,"E-Mail-Addresse",de_DE +``` + +
+ +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following controller providers in the Yves application: + +| PROVIDER | NAMESPACE | ENABLE CONTROLLER | CONTROLLER SPECIFICATION | +|--------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------|--------------------------------------------------------------------------------------| +| AvailabilityNotificationPageControllerProvider | SprykerShop\Yves\AvailabilityNotificationPage\Plugin\Provider | AvailabilityNotificationPageController | Provides the functionality of subscription removal by a subscription key. | +| AvailabilityNotificationWidgetControllerProvider | SprykerShop\Yves\AvailabilityNotificationWidget\Plugin\Provider | AvailabilityNotificationSubscriptionController | Provides subscription management functionality for `AvailabilityNotificationWidget`. | + +**src/Pyz/Yves/ShopApplication/YvesBootstrap.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new CartPageRouteProviderPlugin(), + new CartPageAsyncRouteProviderPlugin(), + new CartNoteWidgetRouteProviderPlugin(), + new CartNoteWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + + +| PLUGIN | VERIFICATION | +| - | - | +| CartPageRouteProviderPlugin` | `https://mysprykershop.com/cart` page is accessible | + +| CartPageAsyncRouteProviderPlugin | You can perform cart actions, like changing item quantity or removing an item, with AJAX mode enabled. | + +| CartNoteWidgetRouteProviderPlugin | You can add a cart note. | + +| CartNoteWidgetAsyncRouteProviderPlugin | You can add a cart item note with AJAX mode enabled. | + +{% endinfo_block %} + +### 4) Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|------------------------------------------------------------------|---------------|-------------------------------------------| +| CartBlockMiniCartViewExpanderPlugin | Expands the provided `MiniCartView.content` with a mini cart view. | | SprykerShop\Yves\CartPage\Plugin\CartPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new CartBlockMiniCartViewExpanderPlugin(), + ]; + } +} +``` + + +2. B2C Shop: Add the following configuration: + +**src/Pyz/Yves/CartPage/CartPageConfig.php** + +```php + +*/ +protected function getCartPreCheckPlugins(Container $container): array +{ + return [ + // your existing plugins ... + new CartItemPricePreCheckPlugin(), + ]; +} +``` + +Adjust the configuration constant to allow or prevent adding products with zero price: + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorConfig.php** + +```php +select([ + SpyProductTableMap::COL_ID_PRODUCT, + SpyProductTableMap::COL_ATTRIBUTES, + SpyProductTableMap::COL_SKU, + ]) + ->withColumn(SpyProductLocalizedAttributesTableMap::COL_ATTRIBUTES, 'localized_attributes') + ->useSpyProductLocalizedAttributesQuery() + ->filterByFkLocale($this->locale->getIdLocale()) + ->endUse() + ->filterByFkProductAbstract($idProductAbstract) + ->filterByIsActive(true) + ->find() + ->toArray(null, false, TableMap::TYPE_CAMELNAME); +} +``` + +The `filterConcreteProductIds` function changes to the following: + +```php +/** + * @param array $concreteProducts + * + * @return array + */ +protected function filterConcreteProductIds(array $concreteProducts) +{ + $concreteProductIds = array_map(function ($product) { + return $product[SpyProductTableMap::COL_ID_PRODUCT]; + }, $concreteProducts); + foreach ($concreteProducts as $product) { + $concreteProductIds[$product[SpyProductTableMap::COL_SKU]] = $product[SpyProductTableMap::COL_ID_PRODUCT]; + } + asort($concreteProductIds); + return $concreteProductIds; +} +``` diff --git a/_includes/pbc/all/install-features/202410.0/install-the-catalog-category-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-catalog-category-management-feature.md index c8774655057..cfdb9b7461d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-catalog-category-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-catalog-category-management-feature.md @@ -12,9 +12,9 @@ To start feature integration, integrate the required features | NAME | VERSION | INSTALLATION GUIDE | | ------------------- | ------- | ------------------------------------------------------------ | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Catalog | {{page.version}} | | -| Category Management | {{page.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Catalog | {{page.release_tag}} | | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | ### 1) Set up behavior @@ -90,4 +90,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | ------------- | ---------------- | -------------------- | | Catalog | ✓ | | -| Category Management | ✓ | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Category Management | ✓ | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-catalog-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-catalog-order-management-feature.md new file mode 100644 index 00000000000..81c149d256f --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-catalog-order-management-feature.md @@ -0,0 +1,225 @@ + + +This document describes how to install the Catalog + Order Management feature connector. + +## Install feature core + +Follow the steps below to install the Catalog + Order Management feature connector's core. + +### 1) Install the required modules + +```shell +composer require spryker/sales-product-connector:"^1.6.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ---------------------------- | ------------------------------------------- | +| Product | vendor/spryker/product | +| Catalog | vendor/spryker/catalog | +| Product Page Search | vendor/spryker/product-page-search | +| Product Page Search Extension | vendor/spryker/product-page-search-extension | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```shell +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ----------------- | ------- | ------ | --------------------------------------------- | +| popularity | property | Created | src/Generated/Shared/Transfer/ProductPayload | +| idProductAbstract | property | Created | | +| popularity | property | Created | src/Generated/Shared/Transfer/ProductPageSearch | +| name | property | Created | src/Generated/Shared/Transfer/SortConfig | +| parameterName | property | Created | | +| fieldName | property | Created | | +| isDescending | property | Created | | +| unmappedType | property | Created | | +| productAbstractIds | property | Created | src/Generated/Shared/Transfer/ProductPageLoad | +| payloadTransfers | property | Created | | + + +{% endinfo_block %} + +## 3) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------------- | -------------------- | ------------ | ---------------------------- | +| ProductPopularityDataExpanderPlugin | Expands the provided `ProductAbstractPageSearch` transfer object's data with popularity. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\ProductPageSearch | +| ProductPopularityMapExpanderPlugin | Adds product popularity related data to product abstract search data. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\ProductPageSearch | +| ProductPopularityPageDataLoaderPlugin | Expands the `ProductPageLoadTransfer` object with popularity data. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\ProductPageSearch | +| ProductPageProductAbstractRefreshConsole | Executes refreshing of a product abstract. | | Spryker\Zed\ProductPageSearch\Communication\Console\ProductPageProductAbstractRefreshConsole | +| PopularitySortConfigTransferBuilderPlugin | Builds a popularity sort configuration transfer for a catalog page. | | Spryker\Client\SalesProductConnector\Plugin\PopularitySortConfigTransferBuilderPlugin | + + +
/src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + + +**/src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new ProductPageProductAbstractRefreshConsole(), + ]; + + return $commands; + } +} +``` + + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php + 'page-product-abstract-refresh', + 'command' => '$PHP_BIN vendor/bin/console product-page-search:product-abstract-refresh', + 'schedule' => '0 6 * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +2. Optional: To apply the updated cron job configuration without redeploying, run the following command in CLI: + +```shell +vendor/bin/console scheduler:setup +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can sort products by popularity: +1. Place several orders. +2. Go to a Catalog page. +3. Try to sort products by popularity. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-category-image-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-category-image-feature.md index cb3f24b5853..0cb1cba7c99 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-category-image-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-category-image-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Category Image feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/alternative-products-feature-overview.html). +This document describes how to install the [Category Image feature](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/alternative-products-feature-overview.html). ## Install feature core @@ -13,13 +13,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE| |---|---|---| -| Spryker Core | {{site.version}}| [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Category | {{site.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category | {{page.release_tag}} | | ### 1) Install the required modules ```bash -composer require spryker-feature/category-image:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/category-image:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -137,9 +137,9 @@ Make sure that the following changes have been implemented in transfer objects: {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) -To configure export to Redis, follow steps in the subsections. +To configure export to the key-value store (Redis or Valkey), follow steps in the subsections. #### Set up event listeners @@ -235,7 +235,7 @@ Add the following plugins to your project: | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | | --- | --- | --- | --- | -| CategoryImageSynchronizationDataPlugin | Synchronizes all category image entries from the database to Redis. | None | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | +| CategoryImageSynchronizationDataPlugin | Synchronizes all category image entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -263,13 +263,13 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Make sure that when a category image is created, updated, or deleted, it's exported or removed from Redis accordingly. +Make sure that when a category image is created, updated, or deleted, it's exported or removed from the key-value store (Redis or Valkey) accordingly. {% endinfo_block %} -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | Category Image | `kv:category_image:en_us:1` | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Category Image | `kv:category_image:en_us:1` | **An example of expected data fragment** @@ -440,13 +440,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---|---|---| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Category | {{site.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category | {{page.release_tag}} | | ### 1) Install the required modules ```bash -composer require spryker-feature/category-image:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/category-image:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-category-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-category-management-feature.md index 6fc011647bb..1b15c6fae4b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-category-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-category-management-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Category Management](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/category-management-feature-overview.html) feature. +This document describes how to install the [Category Management](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/category-management-feature-overview.html) feature. ## Install feature core @@ -12,12 +12,12 @@ Install the required feature: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/category-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/category-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -460,7 +460,7 @@ class SearchDependencyProvider extends SprykerSearchDependencyProvider } ``` -### 6) Configure export to Redis and Elasticsearch +### 6) Configure export to the key-value store (Redis or Valkey) and Elasticsearch Configure tables to be published to `spy_category_image_storage`, `spy_category_node_storage`, `spy_category_tree_storage`, and `spy_category_node_page_search` and synchronized to the Storage on create, edit, and delete changes: @@ -665,7 +665,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider | CategoryNodeSynchronizationDataBulkRepositoryPlugin | Retrieves a category node storage collection based on the provided offset, limit, and IDs. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Synchronization | | CategoryTreeSynchronizationDataBulkRepositoryPlugin | Retrieves a category tree storage collection based on the provided offset, limit, and `categoryTreeStorageId` values. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Synchronization | | CategoryPageSynchronizationDataBulkRepositoryPlugin | Retrieves a collection of synchronization data based on the provided offset, limit, and IDs. | | Spryker\Zed\CategoryPageSearch\Communication\Plugin\Synchronization | -| CategoryImageSynchronizationDataBulkPlugin | Synchronizes all category image entries from the database to Redis. | | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | +| CategoryImageSynchronizationDataBulkPlugin | Synchronizes all category image entries from the database to the key-value store (Redis or Valkey). | | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -714,14 +714,14 @@ Make sure that *category-node* and *category-tree* synchronization plugins works 3. Run the `console sync:data -r category_tree` command. 4. Check that, in your system, the storage entries are displayed with the `kv:category_node:{store}:{locale}:{id}` and `kv:category_tree:{store}:{locale}:{id}` masks. -Make sure that, when a category is created or edited through ORM, it's exported to Redis and Elasticsearch accordingly. +Make sure that, when a category is created or edited through ORM, it's exported to the key-value store (Redis or Valkey) and Elasticsearch accordingly. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -|---------------|---------------|----------------------------------| -| Elasticsearch | CategoryNode | category_node:at:en_us:2 | -| Redis | CategoryNode | category_node:de:de_de:5 | -| Redis | CategoryTree | category_tree:de:en_us | -| Redis | CategoryImage | category_image:de_de:15 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------|---------------|----------------------------------| +| Elasticsearch | CategoryNode | category_node:at:en_us:2 | +| Key-value store (Redis or Valkey) | CategoryNode | category_node:de:de_de:5 | +| Key-value store (Redis or Valkey) | CategoryTree | category_tree:de:en_us | +| Key-value store (Redis or Valkey) | CategoryImage | category_image:de_de:15 | **EXAMPLE EXPECTED DATA FRAGMENT: category_node:at:en_us:2** @@ -1229,12 +1229,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/category-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/category-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1334,6 +1334,6 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |-------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| GLUE: Category Management | | [Install the Category Management Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html) | -| Catalog + Category Management | | [Install the Catalog + Category Management feature](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html) | -| CMS + Category Management | | [Install the CMS + Category Management feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html) | +| GLUE: Category Management | | [Install the Category Management Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html) | +| Catalog + Category Management | | [Install the Catalog + Category Management feature](/docs/pbc/all/search/latest/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html) | +| CMS + Category Management | | [Install the CMS + Category Management feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-category-management-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-category-management-promotions-and-discounts-feature.md index 0305e8c3da0..92d84ee5b53 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-category-management-promotions-and-discounts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-category-management-promotions-and-discounts-feature.md @@ -1,6 +1,6 @@ -This document describes how to add the `category` parameter to calculation and conditions queries in the [Promotions & Discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/promotions-discounts-feature-overview.html) feature. +This document describes how to add the `category` parameter to calculation and conditions queries in the [Promotions & Discounts](/docs/pbc/all/discount-management/latest/base-shop/promotions-discounts-feature-overview.html) feature. ## Install feature core @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Promotions & Discounts | {{page.version}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | -| Category Management | {{page.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Set up behavior @@ -64,7 +64,7 @@ class DiscountDependencyProvider extends SprykerDiscountDependencyProvider Ensure that the plugins work correctly: -1. [Create a discount](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a *category* field. +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a *category* field. 2. Add a product assigned to the defined category to the cart. 3. The discount should be applied to the cart. diff --git a/_includes/pbc/all/install-features/202410.0/install-the-checkout-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-checkout-feature.md index 0941a374e6d..6b9ceca454d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-checkout-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-checkout-feature.md @@ -5,7 +5,7 @@ This document describes how to install the Checkout feature. {% info_block warningBox %} -This integration guide expects the basic feature to be in place. It only adds the [Order Threshold](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.html) functionality. +This integration guide expects the basic feature to be in place. It only adds the [Order Threshold](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.html) functionality. {% endinfo_block %} @@ -20,19 +20,19 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Cart | {{page.version}} | -| Checkout | {{page.version}} | -| Order Management | {{page.version}} | -| Prices | {{page.version}} | -| Spryker Core | {{page.version}} | -| Tax | {{page.version}} | +| Cart | {{page.release_tag}} | +| Checkout | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Prices | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | +| Tax | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/order-threshold:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/order-threshold:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -525,14 +525,14 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/order-threshold:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/order-threshold:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -643,4 +643,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | --- | --- | --- | -| Glue API: Checkout | | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Glue API: Checkout | | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-checkout-non-splittable-products-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-checkout-non-splittable-products-feature.md index 37659e971db..09998938bb6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-checkout-non-splittable-products-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-checkout-non-splittable-products-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | |-------------------------|------------------| -| Checkout | {{page.version}} | -| Non-splittable Products | {{page.version}} | +| Checkout | {{page.release_tag}} | +| Non-splittable Products | {{page.release_tag}} | ## Adjust concrete product quantity diff --git a/_includes/pbc/all/install-features/202410.0/install-the-checkout-quotation-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-checkout-quotation-process-feature.md new file mode 100644 index 00000000000..7c4a12c74d5 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-checkout-quotation-process-feature.md @@ -0,0 +1,126 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Checkout | {{page.release_tag}} | +| Quotation Process | {{page.release_tag}} | + +### 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuoteRequestPreCheckPlugin | Prevents the checkout for quote in the quotation process. | None | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | +| CloseQuoteRequestCheckoutPostSaveHookPlugin | Closes a quote request after the order has been placed from it. | None | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | + +**Pyz\Zed\Checkout\CheckoutDependencyProvider.php** + +```php +Make sure that after you placed an order form quote request, a quote request has a closed status. + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Checkout | {{page.release_tag}} | +| Quotation Process | {{page.release_tag}} | + +### Set up behavior + +#### Set up quote request workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuoteRequestAgentCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for agent RFQ edit workflow. | None | SprykerShop\Yves\QuoteRequestAgentPage\Plugin\CheckoutPage | +| QuoteWithCustomShipmentPriceCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for a quote with source shipment price workflow. | None | SprykerShop\Yves\QuoteRequestPage\Plugin\CheckoutPage | +| QuoteRequestCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for buyer RFQ edit workflow. | None | SprykerShop\Yves\QuoteRequestPage\Plugin\CheckoutPage | + +**Pyz\Yves\CheckoutPage\CheckoutPageDependencyProvider.php** + +```php + User Control > User section > {% endinfo_block %} -### 4) Configure export to Redis and Elasticsearch +### 4) Configure export to the key-value store (Redis or Valkey) and Elasticsearch 1. Set up event listeners. By doing this step, you enable tables to be published upon a change—create, edit, or delete. @@ -506,16 +506,16 @@ class EventBehaviorDependencyProvider extends SprykerEventBehaviorDependencyProv {% info_block warningBox "Verification" %} -Make sure that all the CMS entity changes performed manually in the Back Office are exported or removed from Redis and Elasticsearch accordingly. +Make sure that all the CMS entity changes performed manually in the Back Office are exported or removed from the key-value store (Redis or Valkey) and Elasticsearch accordingly. | STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | | --- | --- | --- | -| Redis | CmsBlock | cms\_block:de:de\_de:blck-1 | -| Redis | CmsBlockCategory | cms\_block\_category:5 | -| Redis | CmsBlockProduct | cms\_block\_product:93 | -| Redis | CmsPage | cms\_page:de:de\_de:1 | -| Redis | CmsSlot | cms_slot:slt-1 | -| Redis | CmsSlotBlock | cms\_slot\_block:@productdetailpage/views/pdp/pdp.twig:slt-5 | +| Key-value store (Redis or Valkey) | CmsBlock | cms\_block:de:de\_de:blck-1 | +| Key-value store (Redis or Valkey) | CmsBlockCategory | cms\_block\_category:5 | +| Key-value store (Redis or Valkey) | CmsBlockProduct | cms\_block\_product:93 | +| Key-value store (Redis or Valkey) | CmsPage | cms\_page:de:de\_de:1 | +| Key-value store (Redis or Valkey) | CmsSlot | cms_slot:slt-1 | +| Key-value store (Redis or Valkey) | CmsSlotBlock | cms\_slot\_block:@productdetailpage/views/pdp/pdp.twig:slt-5 | | Elasticsearch | CmsPage | cms\_page:de:de\_de:6 | {% endinfo_block %} @@ -735,11 +735,11 @@ Make sure that all the CMS entity changes performed manually in the Back Office ### 5) Register XSS Protection Form plugin -1. Enable the form plugin to add XSS protection options in Back Office. +1. Enable the form plugin to add XSS protection options in Backoffice. | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |------------------------------------|-----------------------------------------------------------------------------------------------------|---------------|-------------------------------------------| -| SanitizeXssTypeExtensionFormPlugin | Registers options `allowed_attributes`, `allowed_html_tags`, `sanitize_xss` in Back Office CMS forms | None | Spryker\Zed\Gui\Communication\Plugin\Form | +| SanitizeXssTypeExtensionFormPlugin | Registers options `allowed_attributes`, `allowed_html_tags`, `sanitize_xss` in Backoffice CMS forms | None | Spryker\Zed\Gui\Communication\Plugin\Form | **src/Pyz/Zed/Form/FormDependencyProvider.php** @@ -1202,7 +1202,7 @@ Follow the steps below to install the CMS feature frontend. ### 1) Install the required modules ```bash -composer require spryker-feature/cms:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/cms:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1301,7 +1301,7 @@ Enable Twig plugins: | --- | --- | --- | | CmsBlockTwigPlugin | Provides the list of plugins for CMS block widget. See the [table](#plugin-table). | SprykerShop\Yves\CmsBlockWidget\Plugin | | CmsTwigPlugin | Provides the `spyCms` function. | SprykerShop\Yves\CmsPage\Plugin\Twig | -| CmsContentWidgetTwigPlugin | Provides the list of plugins for enabling content widgets. You can use them inside CMS blocks and page content. However, we recommend using the [Content Items Widgets feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/navigation-feature-overview.html) instead. | Spryker\Yves\CmsContentWidget\Plugin\Twig | +| CmsContentWidgetTwigPlugin | Provides the list of plugins for enabling content widgets. You can use them inside CMS blocks and page content. However, we recommend using the [Content Items Widgets feature](/docs/pbc/all/content-management-system/latest/base-shop/navigation-feature-overview.html) instead. | Spryker\Yves\CmsContentWidget\Plugin\Twig | | ShopCmsSlotTwigPlugin | Provides the `cms_slot` Twig tag. | SprykerShop\Yves\ShopCmsSlot\Plugin\Twig | **Pyz\Yves\Twig\TwigDependencyProvider** @@ -1385,7 +1385,7 @@ Set up Search and Storage clients: | PaginatedCmsPageResultFormatterPlugin | Adds pagination information to search results. | None | Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter | | RawCmsPageSearchResultFormatterPlugin | Raw search result formatter. | None | Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter | | SortedCmsPageSearchResultFormatterPlugin | Allows sorting results. | None | Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter | -| UrlStorageCmsPageMapperPlugin | Allows getting a page resource from Redis. | None | Spryker\Client\CmsStorage\Plugin | +| UrlStorageCmsPageMapperPlugin | Allows getting a page resource from the key-value store (Redis or Valkey). | None | Spryker\Client\CmsStorage\Plugin | **Pyz\Client\CmsPageSearch\CmsPageSearchDependencyProvider** @@ -1534,14 +1534,14 @@ class ShopCmsSlotDependencyProvider extends SprykerShopShopCmsSlotDependencyProv {% info_block warningBox "Verification" %} -Verify the changes by adding a slot widget to a page. See [Templates & Slots Feature Overview](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/templates-and-slots-overview.html) for references. +Verify the changes by adding a slot widget to a page. See [Templates & Slots Feature Overview](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/templates-and-slots-overview.html) for references. {% endinfo_block %} ### Set up SprykerCmsBlocks content provider behavior {% info_block infoBox %} -Follow the further steps only if you are going to use the [visibility conidtions](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/templates-and-slots-overview.html#visibility-conditions) functionality with `SprykerCmsBlocks` content provider for slots. +Follow the further steps only if you are going to use the [visibility conidtions](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/templates-and-slots-overview.html#visibility-conditions) functionality with `SprykerCmsBlocks` content provider for slots. {% endinfo_block %} #### 1) Install the required modules @@ -1649,7 +1649,7 @@ class CmsSlotBlockGuiDependencyProvider extends SprykerCmsSlotBlockGuiDependency 1. In the Back Office, go to **Content Management > Slots**. 2. In **List of Templates**, choose the template for which you've created the visibility condition. 3. Choose a slot in the **List of Slots for [NAME] Template**. -4. Select or [assign](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/manage-slots.html#assigning-cms-blocks-to-slots) a CMS block to a slot in the **List of Blocks for [NAME] Slot**. +4. Select or [assign](/docs/pbc/all/content-management-system/latest/base-shop/manage-in-the-back-office/manage-slots.html#assigning-cms-blocks-to-slots) a CMS block to a slot in the **List of Blocks for [NAME] Slot**. 5. Make sure that for each CMS block, there is an additional form allowing you to define the visibility condition you have created. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-cms-product-lists-catalog-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-cms-product-lists-catalog-feature.md index 352d98c43c2..491538cf25f 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-cms-product-lists-catalog-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-cms-product-lists-catalog-feature.md @@ -6,10 +6,10 @@ Install the following required features: | NAME | VERSION | | --- | --- | -| Cms | {{page.version}} | -| Product lists | {{page.version}} | -| Catalog | {{page.version}} | -| Customer | {{page.version}} | +| Cms | {{page.release_tag}} | +| Product lists | {{page.release_tag}} | +| Catalog | {{page.release_tag}} | +| Customer | {{page.release_tag}} | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-feature.md new file mode 100644 index 00000000000..16eb27d0f79 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-feature.md @@ -0,0 +1,479 @@ +This document describes how to install the Comments feature. + +## Install feature core + +Follow the steps below to install the Comments feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +To install the required modules using Composer: + +```bash +composer require spryker-feature/comments:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|------------------------------------| +| Comment | vendor/spryker/comment | +| CommentDataImport | vendor/spryker/comment-data-import | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------------------|----------------------------------------------------|--------------------| +| CommentConfig::getAvailableCommentTags() | Allows saving comment tags to the database. | Pyz\Shared\Comment | +| See the regular expression in `config/Shared/config_default.php`. | Blocks access for customers that are not logged in. | None | + +**src/Pyz/Zed/Comment/CommentConfig.php** + +```php + + */ + public function getAvailableCommentTags(): array + { + return [ + 'delivery', + 'important', + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the comment tags defined in the `getAvailableCommentTags()` method of the `CommentConfig` class are available on the **Cart** page. + +{% endinfo_block %} + +**config/Shared/config_default.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new CommentDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import comment +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_comment_thread` +- `spy_comment` +- `spy_comment_to_comment_tag` + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------------------------|---------------|--------------------------------------------------| +| CustomerCommentAuthorValidationStrategyPlugin | Validates if a customer with the provided ID exists and if the comment belongs to them. | | Spryker\Zed\Comment\Communication\Plugin\Comment | +| CommentThreadQuoteExpanderPlugin | Expands `QuoteTransfer` with a comment thread. | | Spryker\Zed\Comment\Communication\Plugin\Quote | + +**src/Pyz/Zed/Comment/CommentDependencyProvider.php** + +```php + + */ + protected function getCommentAuthorValidatorStrategyPlugins(): array + { + return [ + new CustomerCommentAuthorValidationStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new CommentThreadQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in as a customer. +2. Add a comment. +3. Reload the page. + Make sure that you can see customer's information under the added comment. + +{% endinfo_block %} + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|--| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/comments:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------|----------------------------------------------| +| CommentWidget | vendor/spryker-shop/comment-widget | +| CommentWidgetExtension | vendor/spryker-shop/comment-widget-extension | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +comment_widget.comments_to_cart,Comments to Cart,en_US +comment_widget.comments_to_cart,Kommentare zum Warenkorb,de_DE +comment_widget.form.add_comment,Add,en_US +comment_widget.form.add_comment,Hinzufügen,de_DE +comment_widget.form.update_comment,Update,en_US +comment_widget.form.update_comment,Aktualisieren,de_DE +comment_widget.form.remove_comment,Remove,en_US +comment_widget.form.remove_comment,Entfernen,de_DE +comment_widget.form.you,You,en_US +comment_widget.form.you,Sie,de_DE +comment_widget.form.attach,Attach,en_US +comment_widget.form.attach,Anhängen,de_DE +comment_widget.form.unattach,Unattach,en_US +comment_widget.form.unattach, Anhang entfernen,de_DE +comment_widget.form.all,All,en_US +comment_widget.form.all,Alles,de_DE +comment_widget.form.attached,Attached,en_US +comment_widget.form.attached,Angehängt,de_DE +comment_widget.form.button_default,Button,en_US +comment_widget.form.button_default,Schaltfläche,de_DE +comment_widget.form.edited,edited,en_US +comment_widget.form.edited,bearbeitet,de_DE +comment_widget.form.tags,Tags,en_US +comment_widget.form.tags,Tags,de_DE +comment_widget.form.placeholder.add_comment,Add a comment,en_US +comment_widget.form.placeholder.add_comment,Kommentar hinzufügen,de_DE +comment_widget.tags.all,All,en_US +comment_widget.tags.all,Alles,de_DE +comment_widget.tags.delivery,Delivery,en_US +comment_widget.tags.delivery,Lieferung,de_DE +comment_widget.tags.important,Important,en_US +comment_widget.tags.important,Wichtig,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|----------------------------------|----------------------------------------------| +| CommentWidgetRouteProviderPlugin | SprykerShop\Yves\CommentWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + CommentThreadWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| MODULE | TEST | VERIFICATION | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | +| CommentThreadWidget | `{% raw %}{%{% endraw %} widget 'CommentThreadWidget' args \[...\] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | Add a comment on the **Cart** page. Submit the order. Go to the order details page and make sure the comment you've added is displayed in the order. | + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contract-requests-feature.md index cb48c58835e..5962e250eb9 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contract-requests-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contract-requests-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Comments | {{page.version}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | -| Merchant B2B Contract Requests | {{page.version}} | [Install the Merchant B2B Contract Requests feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | +| Comments | {{page.release_tag}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| Merchant B2B Contract Requests | {{page.release_tag}} | [Install the Merchant B2B Contract Requests feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contracts-feature.md index a0ba9e0c5e1..8ce96f31c00 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contracts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-merchant-b2b-contracts-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Comments | {{page.version}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | -| Merchant B2B Contracts | {{page.version}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| Comments | {{page.release_tag}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-order-management-feature.md index 36291853356..39003e3fbd1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-comments-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-order-management-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Comment | {{page.version}} | -| Order Management | {{page.version}} | +| Comment | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-persistent-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-persistent-cart-feature.md index 98ddfaa38c3..20eb187c2b1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-comments-persistent-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-persistent-cart-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Comments | {{page.version}} | -| Cart | {{page.version}} | +| Comments | {{page.release_tag}} | +| Cart | {{page.release_tag}} | ### 1) Set up behavior @@ -58,8 +58,8 @@ Install the following required features: | NAME | VERSION | | --- | --- | -| Comments | {{page.version}} | -| Cart | {{page.version}} | +| Comments | {{page.release_tag}} | +| Cart | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-comments-spryker-core-back-office-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-comments-spryker-core-back-office-feature.md index eb3c623de38..99183eb3a0e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-comments-spryker-core-back-office-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-comments-spryker-core-back-office-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Comments | {{page.version}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | -| Spryker Core Back Office | {{page.version}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Comments | {{page.release_tag}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-company-account-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-company-account-feature.md index c7a29fadd94..ed78efe7cf5 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-company-account-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-company-account-feature.md @@ -16,14 +16,14 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/company-account: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/company-account:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -123,9 +123,9 @@ Make sure that the changes have been implemented successfully. For this purpose, {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) -Follow instructions in the following sections to configure export to Redis. +Follow instructions in the following sections to configure export to the key-value store (Redis or Valkey). #### Set up event listeners @@ -232,11 +232,11 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Make sure that the corresponding company users' records are exported (or removed from Redis) when the company user is created, updated, or deleted, and the company status changes or the company is activated or deactivated. +Make sure that the corresponding company users' records are exported (or removed from the key-value store (Redis or Valkey)) when the company user is created, updated, or deleted, and the company status changes or the company is activated or deactivated. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | Company User | kv:company_user:1 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Company User | kv:company_user:1 | {% endinfo_block %} @@ -652,7 +652,7 @@ class CompanyBusinessUnitGuiDependencyProvider extends SprykerCompanyBusinessUni Log in to a customer account which has multiple company users and a default one. In the session, check if the default company user is assigned to the customer and the `IsOnBehalf` property is set correctly for the customer. -Make sure that token generation for a company user works. For more information, see [HowTo: Generate a Token for Login](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/generate-login-tokens.html). +Make sure that token generation for a company user works. For more information, see [HowTo: Generate a Token for Login](/docs/pbc/all/customer-relationship-management/latest/base-shop/generate-login-tokens.html). To make sure the `CompanyBusinessUnitCompanyUserStorageExpanderPlugin` is set up correctly, check the data exported to the key-value storage key `kv:company_user:1` for the `id_company_business_unit:id`. `id_company_business_unit` must be set up to a correct foreign key of the business unit that the company user is assigned to. @@ -694,16 +694,16 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Customer Account Management | {{page.version}} | -| Company Account | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/company-account: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/company-account: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contract-requests-feature.md index 0ef22e761bc..02d62fd33cc 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contract-requests-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contract-requests-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{page.version}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Merchant B2B Contract Requests | {{page.version}} | [Install the Merchant B2B Contract Requests feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant B2B Contract Requests | {{page.release_tag}} | [Install the Merchant B2B Contract Requests feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | ## 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contracts-feature.md index 3c0718f4ee9..557a854565d 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contracts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-company-account-merchant-b2b-contracts-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{page.version}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Merchant B2B Contracts | {{page.version}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | ## 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-company-account-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-company-account-order-management-feature.md index 5a40e75bac1..c36002885ad 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-company-account-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-company-account-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Order Management | {{page.version}} | -| Company Account | {{page.version}} | -| Spryker Core | {{page.version}} | +| Order Management | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules @@ -170,7 +170,7 @@ class PermissionDependencyProvider extends SprykerPermissionDependencyProvider {% info_block warningBox "Verification" %} -Navigate to Back Office UI → Maintenance → Sync permissions. +Navigate to Back Office → Maintenance → Sync permissions. Make sure that you see rows with plugin names at `spy_permission` table. {% endinfo_block %} @@ -313,8 +313,8 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | | --- | --- | -| Customer Account Management | {{page.version}} | -| Company Account | {{page.version}} | +| Customer Account Management | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | Append glossary according to your configuration: diff --git a/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-feature.md index f5fdd8a7f0f..32d19b8d715 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-feature.md @@ -10,17 +10,17 @@ Install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| -| Product | {{site.version}} |[Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| -| Product Lists | {{site.version}} | [Install the Product Lists feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| +| Product Lists | {{page.release_tag}} | [Install the Product Lists feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/configurable-bundle:"^{{site.version}}" --update-with-dependencies +composer require spryker-feature/configurable-bundle:"^{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -391,7 +391,7 @@ class ConfigurableBundlePageSearchDependencyProvider extends SprykerConfigurable } ``` -### 5) Configure export to Redis and Elasticsearch +### 5) Configure export to the key-value store (Redis or Valkey) and Elasticsearch This step publishes tables on change (create, edit) to `spy_configurable_bundle_template_storage` and synchronizes the data to Storage. @@ -609,18 +609,18 @@ class ConfigurableBundlePageSearchConfig extends SprykerConfigurableBundlePageSe 3. Run the `console sync:data configurable_bundle_template` command. Make sure the data has been exported as follows: - - from `spy_configurable_bundle_template_storage` table to Redis + - from `spy_configurable_bundle_template_storage` table to the key-value store (Redis or Valkey) - from `spy_configurable_bundle_template_page_search` table to Elasticsearch 4. Create or edit a configurable bundle template or template slot through ORM. - Make sure it's exported to Redis or Elasticsearch accordingly. + Make sure it's exported to the key-value store (Redis or Valkey) or Elasticsearch accordingly. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | ConfigurableBundleTemplate | kv:configurable_bundle_template:1 | -| Elasticsearch | ConfigurableBundleTemplate | configurable_bundle_template:en_us:1 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | ConfigurableBundleTemplate | kv:configurable_bundle_template:1 | +| Elasticsearch | ConfigurableBundleTemplate | configurable_bundle_template:en_us:1 | -**Example expected data fragment for Redis** +**Example expected data fragment for the key-value store (Redis or Valkey)** ```xml { @@ -1174,17 +1174,17 @@ Install the required features. | Feature | Version | Installation guide | | --- | --- | --- | | -------------- | ----------------- | ----------------- | -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| -| Product | {{site.version}} |[Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| -| Prices | {{site.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/configurable-bundle: "^{{site.version}}" --update-with-dependencies +composer require spryker-feature/configurable-bundle: "^{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-order-management-feature.md index a19a1876c3a..80801566c1c 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-configurable-bundle-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Configurable Bundle | {{page.version}} | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Configurable Bundle | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up behaviour diff --git a/_includes/pbc/all/install-features/202410.0/install-the-content-items-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-content-items-feature.md index 9a31b336e1c..775e38367c6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-content-items-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-content-items-feature.md @@ -1,6 +1,6 @@ -This document describes how. to integrate the [Content Items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/navigation-feature-overview.html) feature. +This document describes how. to integrate the [Content Items](/docs/pbc/all/content-management-system/latest/base-shop/navigation-feature-overview.html) feature. ## Install feature core @@ -12,14 +12,14 @@ To start the feature integration, review and install the necessary features: | NAME | VERSION | | ----------- | ------ | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/content-item:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/content-item:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -134,7 +134,7 @@ Make sure that the following changes have been applied in transfer objects by ch {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) The following plugins are responsible for publishing the content item to storage. @@ -274,7 +274,7 @@ class EventBehaviorDependencyProvider extends SprykerEventBehaviorDependencyProv | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | | ---------------- | ------------------- | ---------- | -------------------- | -| ContentStorageSynchronizationDataPlugin | Syncs all the content entries from the database to Redis. | | Spryker\Zed\ContentStorage\Communication\Plugin\Synchronization | +| ContentStorageSynchronizationDataPlugin | Syncs all the content entries from the database to the key-value store (Redis or Valkey). | | Spryker\Zed\ContentStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -314,14 +314,14 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Make sure that, when content banners are exported or created, updated, deleted in the Back Office, they are exported or removed from Redis accordingly. +Make sure that, when content banners are exported or created, updated, deleted in the Back Office, they are exported or removed from the key-value store (Redis or Valkey) accordingly. -| STORAG TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| ---------- | ---------------------------- | ---------------------------------------------- | -| Redis | Content Banner | content:en_us:br1 | -| Redis | Content Abstract Product List | content:en_us:apl2 | -| Redis | Content Product Set | content:en_us:ps-1 | -| Redis | Content File List | content:en_us:0d9f4722-d076-5acc-9d8e-e9daff7cd61 | +| STORAG TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| ---------------------------- | ---------------------------------------------- | +| Key-value store (Redis or Valkey) | Content Banner | content:en_us:br1 | +| Key-value store (Redis or Valkey) | Content Abstract Product List | content:en_us:apl2 | +| Key-value store (Redis or Valkey) | Content Product Set | content:en_us:ps-1 | +| Key-value store (Redis or Valkey) | Content File List | content:en_us:0d9f4722-d076-5acc-9d8e-e9daff7cd61 | {% endinfo_block %} @@ -739,7 +739,7 @@ To start the feature integration, review and install the necessary features: | NAME | VERSION | | ---------- | -------- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-customer-access-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-customer-access-feature.md index fce18671c2d..92fa2a85269 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-customer-access-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-customer-access-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Customer Access feature](/docs/pbc/all/customer-relationship-management/{{site.version}}/base-shop/customer-access-feature-overview.html). +This document describes how to install the [Customer Access feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-access-feature-overview.html). ## Install Feature Core @@ -12,12 +12,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE| |---|---|---| -| Spryker Core | {{site.version}}| [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/customer-access:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/customer-access:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -132,7 +132,7 @@ Make sure that the changes were implemented successfully. To achieve this, trigg {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) This step publishes tables on change (create, edit, delete) to the `spy_unauthenticated_customer_access_storage` and synchronizes the data to Storage. @@ -170,7 +170,7 @@ class EventDependencyProvider extends SprykerEventDependencyProvider {% info_block warningBox "Verification" %} -Make sure that when a customer access rule is created, updated, or deleted, it's exported (or removed) to Redis. +Make sure that when a customer access rule is created, updated, or deleted, it's exported (or removed) to the key-value store (Redis or Valkey). | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | |-------------------------------------|------------------------------------| @@ -408,7 +408,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE| |---|---|---| -| Spryker Core | {{site.version}}| [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Add translations diff --git a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-agent-assist-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-agent-assist-feature.md index d8706bca986..a57e8b605b1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-agent-assist-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-agent-assist-feature.md @@ -12,13 +12,13 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Customer Account ManagemenT | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | -| Agent Assist | {{page.version}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Customer Account ManagemenT | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Agent Assist | {{page.release_tag}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | ### 1) Install the required modules ```bash -composer require spryker/oauth-agent-connector:"^1.0.0" --update-with-dependencies +composer require spryker/oauth-agent-connector:"^1.0.0" spryker/oauth-customer-connector:"^1.0.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -28,6 +28,7 @@ Ensure that the following module has been installed: | MODULE | EXPECTED DIRECTORY | |---------------------|--------------------------------------| | OauthAgentConnector | vendor/spryker/oauth-agent-connector | +| OauthCustomerConnector | vendor/spryker/oauth-customer-connector | {% endinfo_block %} @@ -101,9 +102,11 @@ Activate the following plugins: | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| -| AgentOauthUserProviderPlugin | Authenticates an agent, reads the agent's data and provides it for the access token. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | +| AgentOauthUserProviderPlugin | Authenticates an agent, reads the agent's data and provides it for the access token. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | +| CustomerImpersonationOauthUserProviderPlugin | Enables impersonation of the customer. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | | AgentOauthScopeProviderPlugin | Provides the agent scopes. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | | AgentCredentialsOauthGrantTypeConfigurationProviderPlugin | Provides configuration of the`agent_credentials` grant type. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | +| CustomerImpersonationOauthGrantTypeConfigurationProviderPlugin | Provides configuration of the`customer_impersonation` grant type. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth | | UpdateAgentSessionAfterCustomerAuthenticationSuccessPlugin | Updates agent's session data in storage if access is granted and an agent is logged in. | None | SprykerShop\Yves\SessionAgentValidation\Plugin\CustomerPage | | CustomerUpdateSessionPostImpersonationPlugin | Updates customer's session data in storage if a given customer is valid after the session impersonation is started. | None | SprykerShop\Yves\SessionCustomerValidationPage\Plugin\AgentPage | | UpdateAgentTokenAfterCustomerAuthenticationSuccessPlugin | Updates agent token after customer authentication success. | None | SprykerShop\Yves\AgentPage\Plugin\Security | @@ -119,6 +122,8 @@ use Spryker\Zed\Oauth\OauthDependencyProvider as SprykerOauthDependencyProvider; use Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth\AgentCredentialsOauthGrantTypeConfigurationProviderPlugin; use Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth\AgentOauthScopeProviderPlugin; use Spryker\Zed\OauthAgentConnector\Communication\Plugin\Oauth\AgentOauthUserProviderPlugin; +use Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Oauth\CustomerImpersonationOauthGrantTypeConfigurationProviderPlugin; +use Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Oauth\CustomerImpersonationOauthUserProviderPlugin; class OauthDependencyProvider extends SprykerOauthDependencyProvider { @@ -129,6 +134,7 @@ class OauthDependencyProvider extends SprykerOauthDependencyProvider { return [ new AgentOauthUserProviderPlugin(), + new CustomerImpersonationOauthUserProviderPlugin(), ]; } @@ -149,6 +155,7 @@ class OauthDependencyProvider extends SprykerOauthDependencyProvider { return array_merge(parent::getGrantTypeConfigurationProviderPlugins(), [ new AgentCredentialsOauthGrantTypeConfigurationProviderPlugin(), + new CustomerImpersonationOauthGrantTypeConfigurationProviderPlugin(), ]); } } @@ -229,7 +236,7 @@ class CustomerPageDependencyProvider extends SprykerShopCustomerPageDependencyPr 1. Log in as an agent. 2. Log in as a customer. 3. Ensure that the agent's session data in storage is created or updated: - - If session data is stored in Redis, ensure that the following Redis key exists and contains data: + - If session data is stored in the key-value store (Redis or Valkey), ensure that the following key-value store (Redis or Valkey) key exists and contains data: `{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}:agent:entity` - If session data is stored in a file, ensure that a file in the following path exists and contains data: `data/session/session:agent:{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}` @@ -265,7 +272,7 @@ class AgentPageDependencyProvider extends SprykerAgentPageDependencyProvider 1. Log in as an agent. 2. Start impersonation session as a customer. 3. Ensure that the customer's session data in storage is created or updated: - - If session data is stored in Redis, ensure that the following Redis key exists and contains data: + - If session data is stored in the key-value store (Redis or Valkey), ensure that the following key-value store (Redis or Valkey) key exists and contains data: `{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}:customer:entity` - If session data is stored in a file, ensure that a file in the following path exists and contains data: `data/session/session:customer:{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}` @@ -278,6 +285,6 @@ Install the following related features: | FEATURE | INSTALLATION GUIDE | |-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Customer Account Management | [Customer Acount Management feature integration](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | -| Agent Assist | [Install the Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | -| Agent Assist API | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | +| Customer Account Management | [Customer Acount Management feature integration](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Agent Assist | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Agent Assist API | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-feature.md index e1fd39b2d5f..3f63430c371 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. +This document describes how to install the [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. {% info_block errorBox "Included features" %} @@ -25,12 +25,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/customer-account-management: "{{page.version}}" spryker/oauth-customer-connector:"^1.8.0" --update-with-dependencies +composer require spryker-feature/customer-account-management: "{{page.release_tag}}" spryker/oauth-customer-connector:"^1.8.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -627,7 +627,7 @@ SELECT * FROM spy_oauth_client WHERE identifier = 'some-client-identifier'; {% info_block warningBox "Verification" %} -Make sure you can obtain the customer OAuth access token with customer credentials or customer reference. For details, see [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html). +Make sure you can obtain the customer OAuth access token with customer credentials or customer reference. For details, see [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-customer-account-management-glue-api.html). {% endinfo_block %} @@ -868,14 +868,14 @@ Install the following features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/customer-account-management: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/customer-account-management: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1066,8 +1066,8 @@ Enable the following behaviors by registering the plugins: | SaveCustomerSessionSecurityPlugin | Extends security builder event dispatcher with a save customer session listener. | | SprykerShop\Yves\SessionCustomerValidationPage\Plugin\Security | | ValidateCustomerSessionSecurityPlugin | Extends security service with a customer session validator listener. | | SprykerShop\Yves\SessionCustomerValidationPage\Plugin\Security | | LogoutInvalidatedCustomerFilterControllerEventHandlerPlugin | Logs out an invalidated customer. | | SprykerShop\Yves\CustomerValidationPage\Plugin\ShopApplication | -| RedisCustomerSessionSaverPlugin | Saves a customer's session data to Redis storage. | Session data is stored in Redis. | Spryker\Yves\SessionRedis\Plugin\SessionCustomerValidationPage | -| RedisCustomerSessionValidatorPlugin | Validates a customer's session data in Redis storage. | Session data is stored in Redis. | Spryker\Yves\SessionRedis\Plugin\SessionCustomerValidationPage | +| RedisCustomerSessionSaverPlugin | Saves a customer's session data to the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionCustomerValidationPage | +| RedisCustomerSessionValidatorPlugin | Validates a customer's session data in the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionCustomerValidationPage | | FileCustomerSessionSaverPlugin | Saves a customer's session data to a file. | Session data is stored in a file. | Spryker\Yves\SessionFile\Plugin\SessionCustomerValidationPage | | FileCustomerSessionValidatorPlugin | Validates a customer's session data in a file. | Session data is stored in a file. | Spryker\Yves\SessionFile\Plugin\SessionCustomerValidationPage | @@ -1171,7 +1171,7 @@ class SecurityDependencyProvider extends SprykerSecurityDependencyProvider {% info_block warningBox "" %} -Apply the following changes only if session data is stored in Redis. +Apply the following changes only if session data is stored in the key-value store (Redis or Valkey). {% endinfo_block %} @@ -1214,7 +1214,7 @@ class SessionCustomerValidationPageDependencyProvider extends SprykerSessionCust {% info_block warningBox "Verification" %} 1. Log in as a customer. - Make sure that the following Redis key exists and contains the data: `{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}:customer:entity`. + Make sure that the following key-value store (Redis or Valkey) key exists and contains the data: `{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}:customer:entity`. 2. Change the session data to an invalid value. Make sure the customer has been logged out. @@ -1275,5 +1275,5 @@ class SessionCustomerValidationPageDependencyProvider extends SprykerSessionCust | NAME | INSTALLATION GUIDE | |------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Customer API | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html) | -| Customer Account Management + Order Management | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | +| Customer API | [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-customer-account-management-glue-api.html) | +| Customer Account Management + Order Management | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-order-management-feature.md index 9ef4474af20..f0216a541fc 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Customer Account Management | {{page.version}} | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Customer Account Management | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up configuration diff --git a/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..494dccfa0ca --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-customer-account-management-promotions-and-discounts-feature.md @@ -0,0 +1,173 @@ +This document describes how to install the Customer Account Management + Promotions & Discounts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/customer-discount-connector:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|-----------------------------------------| +| CustomerDiscountConnector | vendor/customer-discount-connector | + +{% endinfo_block %} + +## 2) Set up database schema + +Apply database changes: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------|-------|---------| +| spy_customer_discount | table | created | + +{% endinfo_block %} + +## 3) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|--------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------| +| CustomerReferenceDecisionRulePlugin | Checks if a customer reference matches the discount's condition. | | Spryker\Zed\CustomerDiscountConnector\Communication\Plugin\Discount | +| CustomerMaximumOrderAmountDecisionRulePlugin | Checks if a customer's order number matches the discount's condition. | | Spryker\Zed\CustomerDiscountConnector\Communication\Plugin\Discount | +| CustomerDiscountOrderSavePlugin | Stores the relationship between a customer and discount. | | Spryker\Zed\CustomerDiscountConnector\Communication\Plugin\Checkout | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CustomerReferenceDecisionRulePlugin(), + new CustomerMaximumOrderAmountDecisionRulePlugin(), + ]); + } +} +``` + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutOrderSavers(Container $container): array + { + return [ + new CustomerDiscountOrderSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-reference` field. +2. Add the `maximum-uses-per-customer` condition with value `1`. +3. Log in as a customer with a customer reference defined in the discount you've created. Make sure that the discount is applied to the cart automatically. +4. Place an order. Make sure a relationship between the customer and the discount is created in the `spy_customer_discount` database table. +5. Create a new cart and add some items. Make sure the same discount is not applied. + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-category-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-category-management-feature.md index de9be0307c7..bf2f6fd3852 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-category-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-category-management-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Data Exchange API | {{page.version}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/{{page.version}}/install-and-upgrade/install-the-data-exchange-api.html) | -| Category Management | {{page.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Data Exchange API | {{page.release_tag}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/latest/install-and-upgrade/install-the-data-exchange-api.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-inventory-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-inventory-management-feature.md index 049e07c01f0..0014f5f9185 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-inventory-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api-inventory-management-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------|------------------|------------------| -| Data Exchange API | {{page.version}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/{{page.version}}/install-and-upgrade/install-the-data-exchange-api.html) | -| Inventory Management | {{page.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Data Exchange API | {{page.release_tag}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/latest/install-and-upgrade/install-the-data-exchange-api.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | ### 1) Set up behavior @@ -71,7 +71,7 @@ COMMIT; Do the following: -1. Obtain an access token. Follow [How to send a request in Data Exchange API](/docs/pbc/all/data-exchange/{{page.version}}/sending-requests-with-data-exchange-api.html) for details on how to do that. +1. Obtain an access token. Follow [How to send a request in Data Exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) for details on how to do that. 2. Send a `PATCH` request. This request needs to include the necessary headers, such as Content-Type, Accept, and Authorization, with the access token provided: diff --git a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api.md b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api.md index 72ddbdb7d5b..adc77b0f058 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-data-exchange-api.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Backend API Application | {{page.version}} | [Integrate Backend API Application](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | -| Backend API Authentication | {{page.version}} | [Backend API - Authentication integration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.html) | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API Application](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Backend API Authentication | {{page.release_tag}} | [Backend API - Authentication integration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.html) | ### Install the required modules @@ -739,7 +739,7 @@ class GlueBackendApiApplicationDependencyProvider extends SprykerGlueBackendApiA {% info_block warningBox "Verification" %} -Make sure you can operate data. For instructions, see [Requesting data using the Data Exchange API](/docs/pbc/all/data-exchange/{{page.version}}/sending-requests-with-data-exchange-api.html) +Make sure you can operate data. For instructions, see [Requesting data using the Data Exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-discontinued-products-product-labels-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-discontinued-products-product-labels-feature.md index cd4320d8d13..d7cac796896 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-discontinued-products-product-labels-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-discontinued-products-product-labels-feature.md @@ -11,9 +11,9 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | | --- | --- | -| Discontinued Products | {{page.version}} | -| Product Labels | {{page.version}} | -| Spryker Core | {{page.version}} | +| Discontinued Products | {{page.release_tag}} | +| Product Labels | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Import data diff --git a/_includes/pbc/all/install-features/202410.0/install-the-file-manager-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-file-manager-feature.md index 2a15ac59cee..0667a1982d6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-file-manager-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-file-manager-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [File Manager feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/file-manager-feature-overview.html). +This document describes how to install the [File Manager feature](/docs/pbc/all/content-management-system/latest/base-shop/file-manager-feature-overview.html). ## Install feature core @@ -13,12 +13,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/file-manager:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/file-manager:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -457,6 +457,6 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider {% info_block warningBox "Verification" %} -When a file data is created, updated, or deleted, make sure it's exported or removed from Redis accordingly. +When a file data is created, updated, or deleted, make sure it's exported or removed from the key-value store (Redis or Valkey) accordingly. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-gift-cards-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-gift-cards-feature.md index 12587570d52..361acbb36a9 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-gift-cards-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-gift-cards-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Gift Cards feature](/docs/pbc/all/gift-cards/{{site.version}}/gift-cards.html). +This document describes how to install the [Gift Cards feature](/docs/pbc/all/gift-cards/latest/gift-cards.html). ## Install feature core @@ -12,19 +12,19 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{site.version}}| [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| -|Product | {{site.version}} |[Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| -|Payments | {{site.version}} |[Install the Payments feature](/docs/pbc/all/payment-service-provider/{{site.version}}/base-shop/install-and-upgrade/install-the-payments-feature.html)| -| Shipment | {{site.version}} |[Install the Shipment feature](/docs/pbc/all/carrier-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html)| -| Order Management | {{site.version}} |[Install the Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html)| -| Mailing & Notifications | {{site.version}} |[Install the Mailing & Notifications feature](/docs/pbc/all/emails/{{page.version}}/install-the-mailing-and-notifications-feature.html)| -| Promotions & Discounts | {{site.version}} |[Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +|Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| +|Payments | {{page.release_tag}} |[Install the Payments feature](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-feature.html)| +| Shipment | {{page.release_tag}} |[Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html)| +| Order Management | {{page.release_tag}} |[Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html)| +| Mailing & Notifications | {{page.release_tag}} |[Install the Mailing & Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html)| +| Promotions & Discounts | {{page.release_tag}} |[Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html)| ### 1) Install the required modules ```bash -composer require spryker-feature/gift-cards:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/gift-cards:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1160,14 +1160,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| -| Checkout | {{site.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/gift-cards:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/gift-cards:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-inventory-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-inventory-management-feature.md new file mode 100644 index 00000000000..46bd4004ce8 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-inventory-management-feature.md @@ -0,0 +1,814 @@ + + +This document describes how to install the [Inventory Management](/docs/pbc/all/warehouse-management-system/latest/base-shop/inventory-management-feature-overview.html) feature. + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. + +The current feature integration guide adds the following functionality: +- [Warehouse Management](/docs/pbc/all/warehouse-management-system/latest/base-shop/inventory-management-feature-overview.html#warehouse-management) +- [Add to cart from catalog page](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.html) +- [Warehouse address](/docs/pbc/all/warehouse-management-system/latest/base-shop/inventory-management-feature-overview.html#defining-a-warehouse-address) + +{% endinfo_block %} + +## Install feature core + +Follow the steps below to install the Inventory Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/inventory-management:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------|-----------------------------------------------| +| Stock | vendor/spryker/stock | +| StockDataImport | vendor/spryker/stock-data-import | +| StockGui | vendor/spryker/stock-gui | +| StockAddress | vendor/spryker/stock-address | +| StockAddressDataImport | vendor/spryker/stock-address-data-import | +| WarehouseAllocation | vendor/spryker/warehouse-allocation | +| WarehouseAllocationExtension | vendor/spryker/warehouse-allocation-extension | +| WarehousesBackendApi | vendor/spryker/warehouses-backend-api | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Adjust the schema definition so `EventTransfer` has the additional columns for the Availability entity: + +**src/Pyz/Zed/Availability/Persistence/Propel/Schema/spy_availability.schema.xml** + +```xml + + + + + + + +
+ + + + + + + +
+ +
+``` + +2. Configure the full import list: + +**Zed/DataImport/DataImportConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + $customImportTypes = [ + StockDataImportConfig::IMPORT_TYPE_STOCK, + StockDataImportConfig::IMPORT_TYPE_STOCK_STORE, + StockAddressDataImportConfig::IMPORT_TYPE_STOCK_ADDRESS, + ]; + + return array_merge(parent::getFullImportTypes(), $customImportTypes); + } +} +``` + +3. Generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------|-------|-------|----------------------------------------------------------------------| +| Item | class | added | src/Generated/Shared/Transfer/ItemTransfer | +| Order | class | added | src/Generated/Shared/Transfer/OrderTransfer | +| Stock | class | added | src/Generated/Shared/Transfer/StockTransfer | +| StockCriteriaFilter | class | added | src/Generated/Shared/Transfer/StockCriteriaFilterTransfer | +| StockResponse | class | added | src/Generated/Shared/Transfer/StockResponseTransfer | +| StockAddress | class | added | src/Generated/Shared/Transfer/StockAddressTransfer | +| WarehouseAllocation | class | added | src/Generated/Shared/Transfer/WarehouseAllocationTransfer | +| WarehouseAllocationCriteria | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCriteriaTransfer | +| WarehouseAllocationConditions | class | added | src/Generated/Shared/Transfer/WarehouseAllocationConditionsTransfer | +| WarehouseAllocationCollection | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCollectionTransfer | +| WarehouseResourceCollection | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCollectionTransfer | +| WarehousesBackendApiAttributes | class | added | src/Generated/Shared/Transfer/WarehousesBackendApiAttributesTransfer | + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------|---------|----------| +| spy_stock_store | table | created | +| spy_stock_address | table | created | +| spy_warehouse_allocation | table | created | +| spy_stock.is_active | column | added | +| spy_stock.uuid | column | added | +| spy_stock_product.uuid | column | added | + +Make sure that propel entities have been generated: + +| FILE PATH | EXTENDS | +|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------| +| src/Orm/Zed/Stock/Persistence/Base/SpyStockStore.php | Spryker/Zed/Stock/Persistence/Propel/AbstractSpyStockStore.php | +| src/Orm/Zed/Stock/Persistence/Base/SpyStockStoreQuery.php | Spryker/Zed/Stock/Persistence/Propel/AbstractSpyStockStoreQuery.php | +| src/Orm/Zed/StockAddress/Persistence/Base/SpyStockAddress.php | Spryker/Zed/StockAddress/Persistence/Propel/AbstractSpyStockAddress.php | +| src/Orm/Zed/StockAddress/Persistence/Base/SpyStockAddressQuery.php | Spryker/Zed/StockAddress/Persistence/Propel/AbstractSpyStockAddressQuery.php | +| src/Orm/Zed/WarehouseAllocation/Persistence/Base/SpyWarehouseAllocation.php | Spryker/Zed/WarehouseAllocation/Persistence/Propel/AbstractSpyWarehouseAllocation.php | +| src/Orm/Zed/WarehouseAllocation/Persistence/Base/SpyWarehouseAllocationQuery.php | Spryker/Zed/WarehouseAllocation/Persistence/Propel/AbstractSpyWarehouseAllocationQuery.php | + +Make sure that `SpyAvailabilityTableMap::getBehaviors()` provides mapping for `spy_availability_is_never_out_of_stock`, `spy_availability_quantity`, and `spy_availability_sku`. + +{% endinfo_block %} + +### 3) Configure OMS + +1. Create the OMS subprocess file: + +**config/Zed/oms/WarehouseAllocationSubprocess/WarehouseAllocation01.xml** + +```xml + + + + + + + + + + + + + +``` + +2. Using the `DummyPayment01.xml` process as an example, adjust your OMS state machine configuration according to your project's requirements. + +**config/Zed/oms/DummyPayment01.xml** + +```xml + + + + + + + new + warehouse allocated + allocate warehouse + + + + + + WarehouseAllocation + + + + + + + +``` + +### 4) Configure export to Elasticsearch + +{% info_block errorBox %} + +This section is only related to the integration of the *Add to cart from catalog page* functionality. + +{% endinfo_block %} + +Install the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------|---------------|-----------------------------------------------------------------| +| AvailabilityProductAbstractAddToCartPlugin | Filters out the products that are not available. | | Spryker\Zed\Availability\Communication\Plugin\ProductPageSearch | + + +**src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php** + +```php +createDataImporterCollection(); + $dataImporterCollection->addDataImporterPlugins($this->getDataImporterPlugins()); + $dataImporterCollection->addDataImporter($this->createProductStockImporter()); + + return $dataImporterCollection; + } + +} +``` + +5. Enable behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + Removes an existing warehouse address if it's not attached to a warehouse update request. | | Spryker\Zed\StockAddress\Communication\Plugin\Stock | +| StockAddressStockCollectionExpanderPlugin | Expands a warehouse collection with related addresses. | | Spryker\Zed\StockAddress\Communication\Plugin\Stock | + +
Zed/Stock/StockDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that the warehouse address management works: +1. In the Back Office, create a warehouse. +2. Import a warehouse address using a data import functionality. +3. Check if the imported warehouse address exists in the `spy_stock_address` database table. + +{% endinfo_block %} + +4. Register the following plugins for warehouse allocation: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|-------------------------------------------|---------------|----------------------------------------------------------| +| SalesOrderWarehouseAllocationCommandPlugin | Allocates warehouse for sales order item. | | Spryker\Zed\WarehouseAllocation\Communication\Plugin\Oms | + + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new SalesOrderWarehouseAllocationCommandPlugin(), 'WarehouseAllocation/WarehouseAllocate'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that after the order is created, order items gain the `warehouse allocated` status. + +{% endinfo_block %} + +## Implement and integrate the warehouse allocation process for product and product offer order items + +This section describes an example of how to implement and integrate the warehouse allocation process for product and product offer order items and how this process work. + +Follow the steps below to install an example for product and product offer warehouse allocations. + +### Prerequisites + +To start integration, integrate the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|-------------------------------------------------------------------| +| Inventory Management | {{page.release_tag}} | [Inventory Mamagement feature integration](#install-feature-core) | + +### 1) Install the required modules + +```bash +composer require spryker/product-warehouse-allocation-example:"^0.3.0" --update-with-dependencies +composer require spryker/product-offer-warehouse-allocation-example:"^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------|------------------------------------------------------------| +| ProductWarehouseAllocationExample | vendor/spryker/product-warehouse-allocation-example | +| ProductOfferWarehouseAllocationExample | vendor/spryker/product-offer-warehouse-allocation-example | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------|-------|-------|-------------------------------------------------------------------------| +| ProductOfferTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferTransfer.php | +| ProductOfferStockTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferStockTransfer.php | +| ProductOfferWarehouseCriteriaTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferWarehouseCriteriaTransfer.php | +| ProductWarehouseCriteriaTransfer | class | added | src/Generated/Shared/Transfer/ProductWarehouseCriteriaTransfer.php | +| StockProductTransfer | class | added | src/Generated/Shared/Transfer/StockProductTransfer.php | +| StoreRelationTransfer | class | added | src/Generated/Shared/Transfer/StoreRelationTransfer.php | +| StoreTransfer | class | added | src/Generated/Shared/Transfer/StoreTransfer.php | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------| +| ProductSalesOrderWarehouseAllocationPlugin | Associates warehouses to a sales order product item. | | Spryker\Zed\ProductWarehouseAllocationExample\Communication\Plugin\WarehouseAllocation | +| ProductOfferSalesOrderWarehouseAllocationPlugin | Associates warehouses to a sales order product offer item. | | Spryker\Zed\ProductOfferWarehouseAllocationExample\Communication\Plugin\WarehouseAllocation | +| WarehouseOrderItemExpanderPlugin | Expands order item with warehouse. | | Spryker\Zed\WarehouseAllocation\Communication\Plugin\Sales | +| ProductConcreteAfterCreatePlugin | Persists product stock data after product is created. | | Spryker\Zed\Stock\Communication\Plugin | +| ProductConcreteAfterUpdatePlugin | Persists product stock data after product is updated. | | Spryker\Zed\Stock\Communication\Plugin | +| StockProductConcreteExpanderPlugin | Expands product concrete transfers with stock information from the database. | | Spryker\Zed\Stock\Communication\Plugin\Product | + +**src/Pyz/Zed/WarehouseAllocation/WarehouseAllocationDependencyProvider.php** + +```php + + */ + protected function getSalesOrderWarehouseAllocationPlugins(): array + { + return [ + new ProductOfferSalesOrderWarehouseAllocationPlugin(), + new ProductSalesOrderWarehouseAllocationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new WarehouseOrderItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductConcreteAfterCreatePlugins(Container $container): array + { + return [ + new StockProductConcreteAfterCreatePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Product\Dependency\Plugin\ProductConcretePluginUpdateInterface> + */ + protected function getProductConcreteAfterUpdatePlugins(Container $container): array + { + return [ + new StockProductConcreteAfterUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface> + */ + protected function getProductConcreteExpanderPlugins(): array + { + return [ + new StockProductConcreteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Make sure that after the order is created, the new row in the `warehouse_allocation` table is created with the appropriate `warehouseId` for the product and product offer in the order accordingly. +2. Make sure that when you retrieve an order each order item has warehouse property set. +3. Make sure that product stock data is persisted in `spy_stock_product` database table after creating/updating concrete product. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Inventory Management API | | [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | +| Alternative Products | | [Install the Alternative Products + Inventory Management feature - ongoing](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contract-requests-feature.md index b2648988d1a..29c32823d70 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contract-requests-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contract-requests-feature.md @@ -10,17 +10,17 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Mailing and Notifications | {{page.version}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/{{page.version}}/install-the-mailing-and-notifications-feature.html) | -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Merchant B2B Contracts | {{page.version}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-contract-requests: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -405,16 +405,16 @@ Overview and install the necessary features before beginning the integration ste | NAME | VERSION | INSTALLATION GUIDE | |-----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{page.version}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules: ```bash -composer require spryker-feature/merchant-contract-requests: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contracts-feature.md index 0590fd64b6c..e597fd77fd1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contracts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-merchant-b2b-contracts-feature.md @@ -1,4 +1,4 @@ -This document describes how to install the [Merchant B2B Contracts](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html) feature. +This document describes how to install the [Merchant B2B Contracts](/docs/pbc/all/merchant-management/latest/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html) feature. ## Install feature core @@ -10,17 +10,17 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{page.version}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Mailing and Notifications | {{page.version}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/{{page.version}}/install-the-mailing-and-notifications-feature.html) | -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-contracts: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-contracts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -369,16 +369,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{page.version}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-contracts: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-contracts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-merchant-custom-prices-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-merchant-custom-prices-feature.md index cb5ac87dfe4..a200d15cd73 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-merchant-custom-prices-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-merchant-custom-prices-feature.md @@ -8,18 +8,18 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Merchant | {{page.version}} | -| Merchant Contracts | {{page.version}} | -| Prices | {{page.version}} | -| Product | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Merchant | {{page.release_tag}} | +| Merchant Contracts | {{page.release_tag}} | +| Prices | {{page.release_tag}} | +| Product | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-custom-prices:"{{page.version}}" spryker/price-product-merchant-relationship-gui:"^1.0.0" --update-with-dependencies +composer require spryker-feature/merchant-custom-prices:"{{page.release_tag}}" spryker/price-product-merchant-relationship-gui:"^1.0.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -101,7 +101,7 @@ Make sure that the changes were implemented successfully. For this purpose, trig {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) {% info_block infoBox %} With this step, you will be able to publish prices on change (create, edit, delete to `spy_price_product_abstract_merchant_relationship_storage`, `spy_price_product_concrete_merchant_relationship_storage` and synchronize the data to Storage. @@ -138,12 +138,12 @@ class EventDependencyProvider extends SprykerEventDependencyProvider {% info_block warningBox "Verification" %} -Make sure when prices are exported, created, updated, or deleted manually in Zed UI, they are exported (or removed to Redis accordingly. +Make sure when prices are exported, created, updated, or deleted manually in Zed UI, they are exported (or removed to the key-value store (Redis or Valkey) accordingly. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | Product Abstract Price | kv:price_product_abstract_merchant_relationship:de:1:1 | -| Redis | Product Concrete Price | kv:price_product_concrete_merchant_relationship:de:1:1 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Product Abstract Price | kv:price_product_abstract_merchant_relationship:de:1:1 | +| Key-value store (Redis or Valkey) | Product Concrete Price | kv:price_product_concrete_merchant_relationship:de:1:1 | {% endinfo_block %} @@ -209,8 +209,8 @@ Make sure when prices are exported, created, updated, or deleted manually in Zed | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | | --- | --- | --- | --- | -| PriceProductAbstractMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_abstract_merchant_relationship` entries from the database to Redis. | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | -| PriceProductConcreteMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_concrete_merchant_relationship` entries from the database to Redis. | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | +| PriceProductAbstractMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_abstract_merchant_relationship` entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | +| PriceProductConcreteMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_concrete_merchant_relationship` entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -342,7 +342,7 @@ Enable the following behaviors by registering the plugins: | MerchantRelationshipPriceDimensionConcreteWriterPlugin | Enables saving product concrete prices to the `spy_price_product_merchant_relationship` table. | Expects `PriceProductTransfer.priceDemnsion.idMerchantRelationshop`, otherwise skips element. | Spryker\Zed\PriceProductMerchantRelationship\Communication\Plugin\PriceProduct | | MerchantRelationshipPriceProductDimensionExpanderStrategyPlugin | Sets `PriceProductTransfer.PriceDimension.idMerchantRelationship` and `PriceProductTransfer.PriceDimension.name`. | None | Spryker\Zed\PriceProductMerchantRelationship\Communication\Plugin\PriceProduct | | MerchantRelationshipPriceProductFilterPlugin | Selects min prices from the MR prices available for the current customer (company business can be assigned for multiple MRs). | None | Spryker\Service\PriceProductMerchantRelationship\Plugin\PriceProductExtension | -| PriceProductMerchantRelationshipStorageDimensionPlugin | Adds MR prices to the list of available prices for the current customer when they are read from Redis. | None | Spryker\Client\PriceProductMerchantRelationshipStorage\Plugin\PriceProductStorageExtension | +| PriceProductMerchantRelationshipStorageDimensionPlugin | Adds MR prices to the list of available prices for the current customer when they are read from the key-value store (Redis or Valkey). | None | Spryker\Client\PriceProductMerchantRelationshipStorage\Plugin\PriceProductStorageExtension | | MerchantRelationshipProductAbstractFormExpanderPlugin | Adds select control to PIM (abstract products) where an admin can choose Merchant Relationship on the Prices tab to manage prices for a concrete Merchant Relationship. | None | Spryker\Zed\PriceProductMerchantRelationshipGui\Communication\Plugin\ProductManagement | | MerchantRelationshipProductConcreteFormExpanderPlugin | Adds select control to PIM (product variants) where an admin can choose Merchant Relationship on the Prices tab to manage prices for a concrete Merchant Relationship. | None | Spryker\Zed\PriceProductMerchantRelationshipGui\Communication\Plugin\ProductManagement | @@ -488,7 +488,7 @@ class PriceProductStorageDependencyProvider extends SprykerPriceProductStorageDe {% info_block warningBox "Verification" %} -Make sure that there is the "Merchant Price Dimension" drop-down in the Back Office on the Product Abstract and Concrete variants edit page (on the Price & Tax tab). When you select some Merchant Relationship, the current page should be reloaded and the prices table should display prices from the selected Merchant Relationship if they exist or an empty table should be displayed when they do not exist. Make sure that when you added/changed prices for some Merchant Relationship, they appear after submitting the form and reloading the page. Make sure that Redis keys are updated/created for this product and business units are assigned to the selected MR. +Make sure that there is the "Merchant Price Dimension" drop-down in the Back Office on the Product Abstract and Concrete variants edit page (on the Price & Tax tab). When you select some Merchant Relationship, the current page should be reloaded and the prices table should display prices from the selected Merchant Relationship if they exist or an empty table should be displayed when they do not exist. Make sure that when you added/changed prices for some Merchant Relationship, they appear after submitting the form and reloading the page. Make sure that key-value store (Redis or Valkey) keys are updated/created for this product and business units are assigned to the selected MR. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-merchant-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-merchant-feature.md index e77462584da..96e8195c40e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-merchant-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-merchant-feature.md @@ -8,7 +8,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ## 1) Install the required modules @@ -243,11 +243,11 @@ Make sure that the merchant edit and create forms contain a **Store** toggle for {% endinfo_block %} -## 7) Configure export to Redis and Elasticsearch +## 7) Configure export to the key-value store (Redis or Valkey) and Elasticsearch This step publishes tables on change (create, edit) to `spy_merchant_profile_storage` and synchronizes data to Storage. -### Configure export to Redis +### Configure export to the key-value store (Redis or Valkey) 1. Set up event listeners and publishers: @@ -257,7 +257,7 @@ This step publishes tables on change (create, edit) to `spy_merchant_profile_sto | MerchantStoragePublisherPlugin | Publishes merchant data to the `spy_merchant_storage` table. | | Spryker\Zed\MerchantStorage\Communication\Plugin\Publisher\Merchant\MerchantStoragePublisherPlugin | | MerchantProductOfferStorageExpanderPlugin | Returns the `ProductOfferStorage` transfer object expanded with `Merchant`. | | Spryker\Client\MerchantStorage\Plugin\ProductOfferStorage | | MerchantProductOfferStorageFilterPlugin | Filters the `ProductOfferCollection` transfer object by an active and approved merchant. | | Spryker\Zed\MerchantStorage\Communication\Plugin\ProductOfferStorage | -| UrlStorageMerchantMapperPlugin | Provides access to merchant storage data in the controller related to the `https://mysprykershop.com/merchant/{merchantReference}` URL. | Publish URL storage data to Redis by running `console sync:data url`. | Spryker\Client\MerchantStorage\Plugin | +| UrlStorageMerchantMapperPlugin | Provides access to merchant storage data in the controller related to the `https://mysprykershop.com/merchant/{merchantReference}` URL. | Publish URL storage data to the key-value store (Redis or Valkey) by running `console sync:data url`. | Spryker\Client\MerchantStorage\Plugin | **src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** @@ -420,7 +420,7 @@ class RabbitMqConfig extends SprykerRabbitMqConfig | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant profile messages to synchronize with Redis and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant profile messages to synchronize with the key-value store (Redis or Valkey) and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/MerchantStorage/MerchantStorageConfig.php** @@ -504,7 +504,7 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Make sure that, when merchant profile entities are created or updated through ORM, they are exported to Redis accordingly. +Make sure that, when merchant profile entities are created or updated through ORM, they are exported to the key-value store (Redis or Valkey) accordingly. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-merchant-product-restrictions-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-merchant-product-restrictions-feature.md index 61b446fdfd0..afc69d04bc1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-merchant-product-restrictions-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-merchant-product-restrictions-feature.md @@ -8,16 +8,16 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Product Lists | {{page.version}} | -| Merchant | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Product Lists | {{page.release_tag}} | +| Merchant | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-product-restrictions:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-product-restrictions:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multi-store-products-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-multi-store-products-feature.md index b878cb138a7..c5a7d2c6f19 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-multi-store-products-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-multi-store-products-feature.md @@ -9,12 +9,12 @@ By default abstract products are available in all stores. This feature provides To prepare your project to work with multi-store abstract products: -1. Update/install `spryker/collector` to at least 6.0.0 version. You can find additional help for feature migration in [Upgrade the Collector module](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.html). -2. Update/install `spryker/touch` to at least 4.0.0 version. You can find additional help for feature migration in [_Upgrade the Touch module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.html). +1. Update/install `spryker/collector` to at least 6.0.0 version. You can find additional help for feature migration in [Upgrade the Collector module](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.html). +2. Update/install `spryker/touch` to at least 4.0.0 version. You can find additional help for feature migration in [_Upgrade the Touch module](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.html). 3. Update/install `spryker/store` to at least 1.3.0 version. -4. Update/install `spryker/product` to at least 6.0.0 version. You can find additional help for feature migration in [Upgrade the Product module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.html). +4. Update/install `spryker/product` to at least 6.0.0 version. You can find additional help for feature migration in [Upgrade the Product module](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.html). 5. If you want to have Zed Admin UI support for the multi-store abstract product management: -- Update/install `spryker/productmanagement` to at least 0.10.0 version. You can find additional help for feature migration in [Upgrade the ProductManagement module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.html). +- Update/install `spryker/productmanagement` to at least 0.10.0 version. You can find additional help for feature migration in [Upgrade the ProductManagement module](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.html). - Override `Spryker\Zed\Store\StoreConfig::isMultiStorePerZedEnabled()` in your project to return `true`. This will enable the store management inside the Product Information Management (PIM) Zed Admin UI. **Example override** diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature.md index 156c15c104b..07fedfa4b2c 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/multiple-carts-feature-overview.html). +This document describes how to install the [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/multiple-carts-feature-overview.html). ## Install feature core @@ -9,20 +9,50 @@ Follow the steps below to install the Multiple Carts feature core. ### Prerequisites -- Enable the database storage strategy in the Quote module. +- Enable database storage strategy in the Quote module -- Install the required features: +To enable database storage strategy for customer quotes, override the `getStorageStrategy()` method in the Quote module's shared configuration. +Create or modify the `src/Pyz/Shared/Quote/QuoteConfig.php` file: + +```php +> + * @return list> */ public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array { @@ -80,15 +111,41 @@ class MultiCartConfig extends SprykerMultiCartConfig ]); } } +``` + +{% info_block warningBox "Verification" %} + +Make sure that only the fields you've defined are saved in a customer's session. + +{% endinfo_block %} + +2. Configure the cart name for the reorder cart. + +**src/Pyz/Zed/MultiCart/MultiCartConfig.php** + +```php + -| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | -|--------------------|-----------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| -| key | ✓ | string | quote-19 | Unique identifier used to refer to in other imports. | -| name | ✓ | string | >My Cart | The name of the quote. | -| customer_reference | ✓ | string | DE--21 | Customer reference of the quote owner. | -| store | ✓ | string | DE | The store name that the quote is related to. | -| is_default | ✓ | int | 1 | Thelag to show that the quote is default for the customer. | -| quote_data | ✓ | string | {""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""} | Quote data params serialized as json. | +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|-----------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| +| key | ✓ | string | quote-19 | Unique identifier used to refer to in other imports. | +| name | ✓ | string | >My Cart | The name of the quote. | +| customer_reference | ✓ | string | DE--21 | Customer reference of the quote owner. | +| store | ✓ | string | DE | The store name that the quote is related to. | +| is_default | ✓ | int | 1 | The flag to show that the quote is default for the customer. | +| quote_data | ✓ | string | {""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""} | Quote data params serialized as json. | 2. Register the following plugin to enable data import: @@ -187,7 +244,7 @@ use Spryker\Zed\MultiCartDataImport\Communication\Plugin\MultiCartDataImportPlug class DataImportDependencyProvider extends SprykerDataImportDependencyProvider { /** - * @return array<\Spryker\Zed\MultiCartDataImport\Communication\Plugin\MultiCartDataImportPlugin> + * @return list<\Spryker\Zed\MultiCartDataImport\Communication\Plugin\MultiCartDataImportPlugin> */ protected function getDataImporterPlugins(): array { @@ -212,7 +269,7 @@ Make sure the data has been imported to the `spy_quote` table. ### 5) Set up behavior -Set up the baheviors in the following sections. +Set up the behaviors in the following sections. #### Set up quote integration @@ -245,7 +302,7 @@ use Spryker\Zed\Quote\QuoteDependencyProvider as SprykerQuoteDependencyProvider; class QuoteDependencyProvider extends SprykerQuoteDependencyProvider { /** - * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> */ protected function getQuoteCreateAfterPlugins(): array { @@ -255,7 +312,7 @@ class QuoteDependencyProvider extends SprykerQuoteDependencyProvider } /** - * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> */ protected function getQuoteCreateBeforePlugins(): array { @@ -267,7 +324,7 @@ class QuoteDependencyProvider extends SprykerQuoteDependencyProvider } /** - * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> */ protected function getQuoteUpdateBeforePlugins(): array { @@ -279,7 +336,7 @@ class QuoteDependencyProvider extends SprykerQuoteDependencyProvider } /** - * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteDeleteAfterPluginInterface> + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteDeleteAfterPluginInterface> */ protected function getQuoteDeleteAfterPlugins(): array { @@ -308,7 +365,7 @@ class QuoteDependencyProvider extends SprykerQuoteDependencyProvider /** * @param \Spryker\Client\Kernel\Container $container * - * @return array<\Spryker\Client\Quote\Dependency\Plugin\QuoteTransferExpanderPluginInterface> + * @return list<\Spryker\Client\Quote\Dependency\Plugin\QuoteTransferExpanderPluginInterface> */ protected function getQuoteTransferExpanderPlugins(Container $container): array { @@ -367,11 +424,10 @@ Register the following plugins: | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| -| CustomerCartQuoteResponseExpanderPlugin | Adds a customer quote collection to the quote response transfer after cart operation handling. Replaces a quote with an active quote if it exist. | | Spryker\Zed\Spryker\Zed\MultiCart\Communication\Plugin | +| CustomerCartQuoteResponseExpanderPlugin | Adds a customer quote collection to the quote response transfer after cart operation handling. Replaces a quote with an active quote if it exists. | | Spryker\Zed\Spryker\Zed\MultiCart\Communication\Plugin | | SaveCustomerQuotesQuoteUpdatePlugin | Extracts a customer quote collection from a quote response object and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | | DefaultQuoteUpdatePlugin | Locates a customer default quote in a customer quote collection and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | | QuoteSelectorPersistentCartChangeExpanderPlugin | Takes a quote ID form parameters and replaces it in a quote change request. | | Spryker\Client\MultiCart\Plugin | -| MultiCartMiniCartViewExpanderPlugin | Expands the provided mini cart view template with a multi-cart view. | | | **src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** @@ -388,7 +444,7 @@ use Spryker\Client\PersistentCart\PersistentCartDependencyProvider as SprykerPer class PersistentCartDependencyProvider extends SprykerPersistentCartDependencyProvider { /** - * @return array<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\QuoteUpdatePluginInterface> + * @return list<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\QuoteUpdatePluginInterface> */ protected function getQuoteUpdatePlugins(): array { @@ -399,7 +455,7 @@ class PersistentCartDependencyProvider extends SprykerPersistentCartDependencyPr } /** - * @return array<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface> + * @return list<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface> */ protected function getChangeRequestExtendPlugins(): array { @@ -410,37 +466,12 @@ class PersistentCartDependencyProvider extends SprykerPersistentCartDependencyPr } ``` -**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** - -```php - - */ - protected function getMiniCartViewExpanderPlugins(): array - { - return [ - new MultiCartMiniCartViewExpanderPlugin(), - ]; - } -} -``` - {% info_block warningBox "Verification" %} 1. On the Storefront, log in as a customer. 2. Add products to cart. 3. Update quantity of products. - Open the mini-cart widget and make sure the updated quantity, prices, and products are displayed correctly. + Open the mini-cart widget and make sure the updated quantity, prices and products are displayed correctly. {% endinfo_block %} @@ -457,7 +488,7 @@ use Spryker\Zed\PersistentCart\PersistentCartDependencyProvider as SprykerPersis class PersistentCartDependencyProvider extends SprykerPersistentCartDependencyProvider { /** - * @return array<\Spryker\Zed\PersistentCartExtension\Dependency\Plugin\QuoteResponseExpanderPluginInterface> + * @return list<\Spryker\Zed\PersistentCartExtension\Dependency\Plugin\QuoteResponseExpanderPluginInterface> */ protected function getQuoteResponseExpanderPlugins(): array { @@ -495,7 +526,7 @@ use Spryker\Client\MultiCart\Plugin\GuestCartSaveCustomerSessionSetPlugin; class CustomerDependencyProvider extends SprykerCustomerDependencyProvider { /** - * @return array<\Spryker\Client\Customer\Dependency\Plugin\CustomerSessionSetPluginInterface> + * @return list<\Spryker\Client\Customer\Dependency\Plugin\CustomerSessionSetPluginInterface> */ protected function getCustomerSessionSetPlugins() { @@ -522,13 +553,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/multiple-carts: "{{site.version}}" --update-with-dependencies +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -692,7 +723,7 @@ use SprykerShop\Yves\MultiCartPage\Plugin\Router\MultiCartPageRouteProviderPlugi class RouterDependencyProvider extends SprykerRouterDependencyProvider { /** - * @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface> + * @return list<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface> */ protected function getRouteProvider(): array { @@ -708,22 +739,23 @@ class RouterDependencyProvider extends SprykerRouterDependencyProvider | PLUGIN | VERIFICATION | | - | - | -| MultiCartPageRouteProviderPlugin | The cart list page is available for a logged-in customer, for example—at `http://mysprykershop.com/multi-cart/`. | +| MultiCartPageRouteProviderPlugin | The cart list page is available for a logged-in customer, for example — at `http://mysprykershop.com/multi-cart/`. | | MultiCartPageAsyncRouteProviderPlugin | You can clear a cart with the cart actions AJAX mode enabled. | | MultiCartPageRouteProviderPlugin | After performing a cart action with the cart actions AJAX mode enabled, the mini cart counter is updated. This can be verified after you complete the installation. | {% endinfo_block %} -### 4) Set up widgets +### 4) Set up widgets & plugins 1. Register the following global widgets: -| WIDGET | DESCRIPTION | NAMESPACE | -|-------------------------|--------------------------------------------------------------|-----------------------------------------| -| AddToMultiCartWidget | Shows the cart list for adding items to cart. | SprykerShop\Yves\MultiCartWidget\Widget | -| CartOperationsWidget | Shows multi-cart functionalities on the cart page. | SprykerShop\Yves\MultiCartWidget\Widget | -| MiniCartWidget | Shows the mini cart in the header. | SprykerShop\Yves\MultiCartWidget\Widget | -| MultiCartMenuItemWidget | Shows a cart list navigation menu item. | SprykerShop\Yves\MultiCartWidget\Widget | +| WIDGET | DESCRIPTION | NAMESPACE | +|-------------------------------------|-----------------------------------------------------------------------|--------------------------------------------------| +| AddToMultiCartWidget | Shows the cart list for adding items to cart. | SprykerShop\Yves\MultiCartWidget\Widget | +| CartOperationsWidget | Shows multi-cart functionalities on the cart page. | SprykerShop\Yves\MultiCartWidget\Widget | +| MiniCartWidget | Shows the mini cart in the header. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMenuItemWidget | Shows a cart list navigation menu item. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMiniCartViewExpanderPlugin | Expands the provided mini cart view template with a multi-cart view. | SprykerShop\Yves\MultiCartWidget\Plugin\CartPage | **src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** @@ -741,7 +773,7 @@ use SprykerShop\Yves\ShopApplication\ShopApplicationDependencyProvider as Spryke class ShopApplicationDependencyProvider extends SprykerShopApplicationDependencyProvider { /** - * @return array + * @return list */ protected function getGlobalWidgets(): array { @@ -755,6 +787,30 @@ class ShopApplicationDependencyProvider extends SprykerShopApplicationDependency } ``` +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new MultiCartMiniCartViewExpanderPlugin(), + ]; + } +} +``` + 2. Enable Javascript and CSS changes: ```bash diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature0.md b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature0.md new file mode 100644 index 00000000000..e78963b8ebe --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-feature0.md @@ -0,0 +1,775 @@ + + + +This document describes how to install the [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/multiple-carts-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Multiple Carts feature core. + +### Prerequisites + +- Enable the database storage strategy in the Quote module. + +- Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + + +### 1) Install the required modules + +```bash +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------|---------------------------------------| +| MultiCart | vendor/spryker/multi-cart | +| MultiCartDataImport | vendor/spryker/multi-cart-data-import | + +{% endinfo_block %} + +### 2) Set up configuration + +Configure the quote fields that are allowed for saving in quote collection in the customer's session. You can specify nested fields. + +**src/Pyz/Client/MultiCart/MultiCartConfig.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + QuoteTransfer::ID_QUOTE, + QuoteTransfer::ITEMS, + QuoteTransfer::BUNDLE_ITEMS, + QuoteTransfer::TOTALS, + QuoteTransfer::CURRENCY, + QuoteTransfer::PRICE_MODE, + QuoteTransfer::NAME, + QuoteTransfer::IS_DEFAULT, + QuoteTransfer::CUSTOMER_REFERENCE, + QuoteTransfer::CUSTOMER => [ + CustomerTransfer::CUSTOMER_REFERENCE, + ], + QuoteTransfer::IS_LOCKED, + QuoteTransfer::STORE => [ + StoreTransfer::ID_STORE, + StoreTransfer::NAME, + ], + ]); + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that only configured fields are saved in a customer's session. + +{% endinfo_block %} + +### 3) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|------------------------------------------|--------|---------| +| spy_quote.name | column | created | +| spy_quote.is_default | column | created | +| spy_quote.key | column | created | +| spy_quote-unique-name-customer_reference | index | created | + +Make sure that the following changes in transfer objects have been applied: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------|--------|---------|--------------------------------------------------------------------| +| QuoteTransfer.name | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteTransfer.isDefault | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteTransfer.key | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteResponseTransfer.customQuotes | column | created | src/Generated/Shared/Transfer/QuoteResponseTransfer | +| QuoteUpdateRequestAttributesTransfer.name | column | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| QuoteUpdateRequestAttributesTransfer.totals | column | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| QuoteActivationRequestTransfer | class | created | src/Generated/Shared/Transfer/QuoteActivationRequestTransfer | + +{% endinfo_block %} + +### 4) Import multicarts + + +1. Prepare data according to your requirements using our demo data: + + +
+ vendor/spryker/spryker/multi-cart-data-import/data/import/multi_cart.csv + +```yaml +key,name,customer_reference,store,is_default,quote_data +quote-1,My Cart,DE--1,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-2,My Cart,DE--2,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-3,My Cart,DE--3,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-4,My Cart,DE--4,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-5,My Cart,DE--5,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-6,My Cart,DE--6,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-7,My Cart,DE--7,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-8,My Cart,DE--8,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-9,My Cart,DE--9,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-10,My Cart,DE--10,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-11,My Cart,DE--11,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-12,My Cart,DE--12,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-13,My Cart,DE--13,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-14,My Cart,DE--14,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-15,My Cart,DE--15,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-16,My Cart,DE--16,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-17,My Cart,DE--17,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-18,My Cart,DE--18,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-19,My Cart,DE--19,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-20,My Cart,DE--20,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-21,My Cart,DE--21,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +``` + +
+ +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|-----------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| +| key | ✓ | string | quote-19 | Unique identifier used to refer to in other imports. | +| name | ✓ | string | >My Cart | The name of the quote. | +| customer_reference | ✓ | string | DE--21 | Customer reference of the quote owner. | +| store | ✓ | string | DE | The store name that the quote is related to. | +| is_default | ✓ | int | 1 | Thelag to show that the quote is default for the customer. | +| quote_data | ✓ | string | {""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""} | Quote data params serialized as json. | + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------|----------------------------------------|----------------------------------------------|------------------------------------------------------| +| MultiCartDataImportPlugin | Imports a customer's quotes to database. | Customers are imported. | Spryker\Zed\MultiCartDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MultiCartDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import multi-cart +``` + +{% info_block warningBox "Verification" %} + +Make sure the data has been imported to the `spy_quote` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the baheviors in the following sections. + +#### Set up quote integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------| +| AddSuccessMessageAfterQuoteCreatedPlugin | Adds success message to messenger afterward. | | Spryker\Zed\MultiCart\Communication\Plugin | +| AddDefaultNameBeforeQuoteSavePlugin | Sets the default quote name if a quote doesn't have a name. | | Spryker\Zed\MultiCart\Communication\Plugin | +| ResolveQuoteNameBeforeQuoteCreatePlugin | Resolves a quote name to make it unique for the customer before it's saved. | If `AddDefaultNameBeforeQuoteSavePlugin` is used, it must be added afterwards. | Spryker\Zed\MultiCart\Communication\Plugin | +| DeactivateQuotesBeforeQuoteSavePlugin | Marks a quote as default. Makes an SQL request to mark all customers' quotes as not default. | | Spryker\Zed\MultiCart\Communication\Plugin | +| InitDefaultQuoteCustomerQuoteDeleteAfterPlugin | Activates any customer quote if an active customer quote was removed. | | Spryker\Zed\MultiCart\Communication\Plugin | +| NameQuoteTransferExpanderPlugin | Sets the default quote name if a quote doesn't have a name. Default guest quote name is used for guest customer quotes. | | Spryker\Client\MultiCart\Plugin | +| TotalItemCountDefaultCartQuoteExpanderPlugin | Calculates the number of items in the provided `QuoteTransfer` and sets the result to `QuoteTransfer.totalItemCount`. | | Spryker\Client\Cart\Plugin\MultiCart | + +
src/Pyz/Zed/Quote/QuoteDependencyProvider.php + +```php + + */ + protected function getQuoteCreateAfterPlugins(): array + { + return [ + new AddSuccessMessageAfterQuoteCreatedPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteCreateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteUpdateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteDeleteAfterPluginInterface> + */ + protected function getQuoteDeleteAfterPlugins(): array + { + return [ + new InitDefaultQuoteCustomerQuoteDeleteAfterPlugin(), + ]; + } +} +``` + +
+ +**src/Pyz/Client/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteTransferExpanderPlugins(Container $container): array + { + return [ + new NameQuoteTransferExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/MultiCart/MultiCartDependencyProvider.php** + +```php + + */ + protected function getDefaultCartQuoteExpanderPlugins(): array + { + return [ + new TotalItemCountDefaultCartQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that customer carts have unique names. If a customer creates a cart with a name that was already used for another cart of the same customer, the cart name is extended with an iterative suffix. + +Example: +1. A customer creates a cart named "Shopping cart". +2. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 1". +3. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 2". + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that a customer has only one active cart at a time. If a customer updates an inactive cart, it becomes active, while the previous active cart becomes inactive. + +{% endinfo_block %} + +#### Set up persistent cart integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| CustomerCartQuoteResponseExpanderPlugin | Adds a customer quote collection to the quote response transfer after cart operation handling. Replaces a quote with an active quote if it exist. | | Spryker\Zed\Spryker\Zed\MultiCart\Communication\Plugin | +| SaveCustomerQuotesQuoteUpdatePlugin | Extracts a customer quote collection from a quote response object and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| DefaultQuoteUpdatePlugin | Locates a customer default quote in a customer quote collection and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| QuoteSelectorPersistentCartChangeExpanderPlugin | Takes a quote ID form parameters and replaces it in a quote change request. | | Spryker\Client\MultiCart\Plugin | +| MultiCartMiniCartViewExpanderPlugin | Expands the provided mini cart view template with a multi-cart view. | | | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteUpdatePlugins(): array + { + return [ + new SaveCustomerQuotesQuoteUpdatePlugin(), + new DefaultQuoteUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface> + */ + protected function getChangeRequestExtendPlugins(): array + { + return [ + new QuoteSelectorPersistentCartChangeExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new MultiCartMiniCartViewExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in as a customer. +2. Add products to cart. +3. Update quantity of products. + Open the mini-cart widget and make sure the updated quantity, prices, and products are displayed correctly. + +{% endinfo_block %} + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteResponseExpanderPlugins(): array + { + return [ + new CustomerCartQuoteResponseExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in a multi-cart session, adding items to cart updates the customer's cart list. + +{% endinfo_block %} + +#### Set up the customer integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------|---------------------------------| +| GuestCartSaveCustomerSessionSetPlugin | Executed after a customer was added to the session. Saves a guest customer quote to the database if it's not empty. Takes an actual customer quote from the database if the guest cart is empty. | Must be added before `GuestCartUpdateCustomerSessionSetPlugin`. | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/Customer/CustomerDependencyProvider.php** + +```php + + */ + protected function getCustomerSessionSetPlugins() + { + return [ + new GuestCartSaveCustomerSessionSetPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When a customer logs in, make sure an empty guest cart isn't saved to the database. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Multiple Carts feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------|---------------------------------------| +| MultiCartPage | vendor/spryker-shop/multi-cart-page | +| MultiCartWidget | vendor/spryker-shop/multi-cart-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +
src/data/import/glossary.csv + +```yaml +page.multi_cart.shopping_cart.list.title,Shopping cart,en_US +page.multi_cart.shopping_cart.list.title,Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.create_link,Create,en_US +page.multi_cart.shopping_cart.list.create_link,Erstellen,de_DE +page.multi_cart.shopping_cart.list.label.name,Name,en_US +page.multi_cart.shopping_cart.list.label.name,Name,de_DE +page.multi_cart.shopping_cart.list.label.num_of_products,Number of products,en_US +page.multi_cart.shopping_cart.list.label.num_of_products,Anzahl der Produkte,de_DE +page.multi_cart.shopping_cart.list.label.prices,Prices,en_US +page.multi_cart.shopping_cart.list.label.prices,Preise,de_DE +page.multi_cart.shopping_cart.list.label.total,Total,en_US +page.multi_cart.shopping_cart.list.label.total,Gesamt,de_DE +page.multi_cart.shopping_cart.list.label.actions,Actions,en_US +page.multi_cart.shopping_cart.list.label.actions,Aktionen,de_DE +page.multi_cart.shopping_cart.list.link.edit_name,Edit name,en_US +page.multi_cart.shopping_cart.list.link.edit_name,Namen bearbeiten,de_DE +page.multi_cart.shopping_cart.list.link.duplicate,Duplicate,en_US +page.multi_cart.shopping_cart.list.link.duplicate,Duplikat,de_DE +page.multi_cart.shopping_cart.list.link.delete,Delete,en_US +page.multi_cart.shopping_cart.list.link.delete,Löschen,de_DE +page.multi_cart.shopping_cart.list.label.item,"Item",en_US +page.multi_cart.shopping_cart.list.label.item,"Artikel",de_DE +page.multi_cart.shopping_cart.list.label.items,"Items",en_US +page.multi_cart.shopping_cart.list.label.items,"Artikel",de_DE +customer.account.shopping_cart.list.title,Manage Shopping carts,en_US +customer.account.shopping_cart.list.title,Verwalten Sie Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.label.access,Access,en_US +page.multi_cart.shopping_cart.list.label.access,Zugriff,de_DE +page.multi_cart.shopping_cart.update.title,Edit,en_US +page.multi_cart.shopping_cart.update.title,Bearbeiten,de_DE +page.multi_cart.shopping_cart.create.title,Create,en_US +page.multi_cart.shopping_cart.create.title,Erstellen,de_DE +multi_cart.form.create_cart,"Add new cart",en_US +multi_cart.form.create_cart,"Füge einen neuen Warenkorb hinzu",de_DE +multi_cart.form.quote.name,"Cart Name",en_US +multi_cart.form.quote.name,"Name des Einkaufswagens",de_DE +multi_cart.form.edit_cart,"Change Name",en_US +multi_cart.form.edit_cart,"Namen ändern",de_DE +multi_cart.form.edit_cart_information,"Edit Cart information",en_US +multi_cart.form.edit_cart_information,"Einkaufswageninformationen bearbeiten",de_DE +multi_cart.cart.set_default.success,"Cart '%quote%' was successfully set as active.",en_US +multi_cart.cart.set_default.success,"Warenkorb '%quote%' wurde erfolgreich auf aktiv gesetzt.",de_DE +multi_cart_page.cart_clear.success,"Cart was successfully cleared",en_US +multi_cart_page.cart_clear.success,"Einkaufswagen wurde erfolgreich gelöscht",de_DE +multi_cart_page.cart_delete_confirmation.warning,Warning,en_US +multi_cart_page.cart_delete_confirmation.warning,Warnung,de_DE +multi_cart_page.cart_delete_confirmation.trying_to_delete,You are trying to delete Cart,en_US +multi_cart_page.cart_delete_confirmation.trying_to_delete,Sie versuchen den Warenkorb zu löschen,de_DE +multi_cart_page.cart_delete_confirmation.shared_with,It is shared with the following users,en_US +multi_cart_page.cart_delete_confirmation.shared_with,Der Warenkorb ist mit den folgenden Personen geteilt,de_DE +multi_cart_page.cart_delete_confirmation.from_all_of_them,It will be deleted from all of them,en_US +multi_cart_page.cart_delete_confirmation.from_all_of_them,Der Warenkorb wird für alle Nutzer gelöscht,de_DE +multi_cart_page.cart_delete_confirmation.cancel,Cancel,en_US +multi_cart_page.cart_delete_confirmation.cancel,Abbrechen,de_DE +multi_cart_page.cart_delete_confirmation.delete,Delete,en_US +multi_cart_page.cart_delete_confirmation.delete,Löschen,de_DE +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Shopping carts,en_US +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Warenkörbe,de_DE +multi_cart_widget.cart.cart_name,"Cart Name",en_US +multi_cart_widget.cart.cart_name,"Name des Einkaufswagens",de_DE +multi_cart_widget.cart.add,"Create New Cart",en_US +multi_cart_widget.cart.add,"Neuen Warenkorb erstellen",de_DE +multi_cart_widget.cart.action.change_name,"Change Name",en_US +multi_cart_widget.cart.action.change_name,"Namen ändern",de_DE +multi_cart_widget.cart.action.duplicate,"Duplicate",en_US +multi_cart_widget.cart.action.duplicate,"Duplikat",de_DE +multi_cart_widget.cart.action.clear,"Clear cart",en_US +multi_cart_widget.cart.action.clear,"Leerer Warenkorb",de_DE +multi_cart_widget.cart.action.delete,"Delete cart",en_US +multi_cart_widget.cart.action.delete,"Warenkorb löschen",de_DE +multi_cart_widget.cart.action.view,"View details",en_US +multi_cart_widget.cart.action.view,"Warenkorb ansehen",de_DE +multi_cart_widget.cart.action.set_default,"Set active",en_US +multi_cart_widget.cart.action.set_default,"Aktiv setzen",de_DE +multi_cart_widget.cart.default,"Active",en_US +multi_cart_widget.cart.default,"Aktiv",de_DE +multi_cart_widget.cart.item,"Item",en_US +multi_cart_widget.cart.item,"Artikel",de_DE +multi_cart_widget.cart.items,"Items",en_US +multi_cart_widget.cart.items,"Artikel",de_DE +multi_cart_widget.cart.view_all,"View all carts",en_US +multi_cart_widget.cart.view_all,"Alle Warenkörbe anzeigen",de_DE +multi_cart_widget.cart.cart,"Cart",en_US +multi_cart_widget.cart.cart,"Warenkorb",de_DE +multi_cart_widget.cart.carts,"Carts",en_US +multi_cart_widget.cart.carts,"Warenkorb",de_DE +multi_cart_widget.cart.list,"Cart List",en_US +multi_cart_widget.cart.list,"Warenkorb-Liste",de_DE +multi_cart_widget.cart.status,"Status",en_US +multi_cart_widget.cart.status,"Status",de_DE +multi_cart_widget.cart.sub_total,"Sub Total",en_US +multi_cart_widget.cart.sub_total,"Zwischensumme",de_DE +multi_cart_widget.cart.actions,"Actions",en_US +multi_cart_widget.cart.actions,"Aktionen",de_DE +multi_cart_widget.cart.created.success,"Cart '%quoteName%' was created successfully",en_US +multi_cart_widget.cart.created.success,"Warenkorb '%quoteName%' wurde erfolgreich erstellt",de_DE +multi_cart_widget.cart.updated.success,"Cart updated successfully",en_US +multi_cart_widget.cart.updated.success,"Einkaufswagen wurde erfolgreich aktualisiert",de_DE +multi_cart_widget.cart.was-deleted-before,Dieser Warenkorb wurde bereits gelöscht,de_DE +multi_cart_widget.cart.was-deleted-before,This cart was already deleted,en_US +``` + +
+ +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Enable the following controllers + +#### Router list + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|----------------------------------|------------------------------------------------| +| MultiCartPageRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | +| MultiCartPageAsyncRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MultiCartPageRouteProviderPlugin(), + new MultiCartPageAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +| PLUGIN | VERIFICATION | +| - | - | +| MultiCartPageRouteProviderPlugin | The cart list page is available for a logged-in customer, for example—at `http://mysprykershop.com/multi-cart/`. | +| MultiCartPageAsyncRouteProviderPlugin | You can clear a cart with the cart actions AJAX mode enabled. | +| MultiCartPageRouteProviderPlugin | After performing a cart action with the cart actions AJAX mode enabled, the mini cart counter is updated. This can be verified after you complete the installation. | + +{% endinfo_block %} + +### 4) Set up widgets + +1. Register the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|-------------------------|--------------------------------------------------------------|-----------------------------------------| +| AddToMultiCartWidget | Shows the cart list for adding items to cart. | SprykerShop\Yves\MultiCartWidget\Widget | +| CartOperationsWidget | Shows multi-cart functionalities on the cart page. | SprykerShop\Yves\MultiCartWidget\Widget | +| MiniCartWidget | Shows the mini cart in the header. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMenuItemWidget | Shows a cart list navigation menu item. | SprykerShop\Yves\MultiCartWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + AddToMultiCartWidget::class, + CartOperationsWidget::class, + MiniCartWidget::class, + MultiCartMenuItemWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | VERIFICATION | +|-------------------------|------------------------------------------------------------------------------------------------------------| +| AddToMultiCartWidget | Go to the product details page. A shopping cart list is displayed in the cart form. | +| CartOperationsWidget | Go to the cart overview page. Make sure the cart title and the **Clear all** button are displayed. | +| MiniCartWidget | The minicart with all customer's carts is displayed the header. | +| MultiCartMenuItemWidget | Go to the customer account overview page. The carts list navigation menu item is displayed. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-quick-order-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-quick-order-feature.md index 0e43e81c8e8..960ed9b67b4 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-quick-order-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-quick-order-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Multiple Carts | {{page.version}} | -| Quick Add To Cart | {{page.version}} | -| Spryker Core |{{page.version}} | +| Multiple Carts | {{page.release_tag}} | +| Quick Add To Cart | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up behavior @@ -58,9 +58,9 @@ Install the following required features: | NAME | VERSION | | --- | --- | -| Multiple Carts | {{page.version}} | -| Quick Add To Cart | {{page.version}} | -| Spryker Core | {{page.version}} | +| Multiple Carts | {{page.release_tag}} | +| Quick Add To Cart | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up widgets diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature.md index c136cbc5355..a02f7983429 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature.md @@ -1,51 +1,96 @@ +This document describes how to install the Multiple Carts + Reorder feature. - -## Install feature core - -### Prerequisites +## Prerequisites Install the required features: -| NAME | VERSION | -| --- | --- | -| Multiple Carts | {{page.version}} | -| Reorder | {{page.version}} | -| Spryker Core | {{page.version}} | +| NAME | VERSION | +|----------------|------------------| +| Multiple Carts | {{page.release_tag}} | +| Reorder | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | -### 1) Set up behavior +## 1) Set up behavior Register the following plugins: -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -| --- | --- | --- | --- | -| ReorderPersistentCartChangeExpanderPlugin | Adds a default reorder name and adds it to add item request. | 1 | Spryker\Client\MultiCart\Plugin | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|--------------------------------------------------------------|---------------|--------------------------------------------------------| +| DefaultReorderQuoteNameCartPreReorderPlugin | Sets quote reorder name to `CartReorderTransfer.quote.name`. | | Spryker\Zed\MultiCart\Communication\Plugin\CartReorder | -**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** +**src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php** ```php + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new DefaultReorderQuoteNameCartPreReorderPlugin(), + ]; + } } ``` {% info_block warningBox "Verification" %} -When using the reorder feature, a new customer quote must be created with the name "Cart from order {Order reference}". +1. Log in on the Storefront as a customer. +2. Go to the orders. +3. Select an existing order and click the reorder button. + +Make sure the following applies: +- On the Storefront: + - A new cart has been created + - The cart name follows the format: `Cart from order {Order reference}` + - All available items from the original order have been added to the cart +- In the `spy_quote` database table, the newly created quote record contains the `name` field in the format: `Cart from order {Original order reference}` {% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature0.md b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature0.md new file mode 100644 index 00000000000..fd2354e19cd --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-multiple-carts-reorder-feature0.md @@ -0,0 +1,51 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Multiple Carts | {{page.release_tag}} | +| Reorder | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ReorderPersistentCartChangeExpanderPlugin | Adds a default reorder name and adds it to add item request. | 1 | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + QuoteTransfer::AMENDMENT_ORDER_REFERENCE + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that only configured fields are saved in a customer's session. + +{% endinfo_block %} + +**src/Pyz/Zed/Quote/QuoteConfig.php** + +```php + + */ + public function getQuoteFieldsAllowedForSaving() + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::AMENDMENT_ORDER_REFERENCE, + QuoteTransfer::QUOTE_PROCESS_FLOW, + QuoteTransfer::ORIGINAL_SALES_ORDER_ITEM_UNIT_PRICES, + QuoteTransfer::ORIGINAL_SALES_ORDER_ITEMS, + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you edit an order, the following applies: +- `amendmentOrderReference` and `quoteProcessFlow` are added to the JSON data in the `spy_quote.quote_data` database column of the corresponding quote. +- `originalSalesOrderItems` is added to the JSON data in the `spy_quote.quote_data` database column of the corresponding quote. + +{% endinfo_block %} + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php + + */ + public function getQuoteFieldsAllowedForSaving(): array + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::BUNDLE_ITEMS, + QuoteTransfer::CART_NOTE, + QuoteTransfer::EXPENSES, + QuoteTransfer::VOUCHER_DISCOUNTS, + QuoteTransfer::GIFT_CARDS, + QuoteTransfer::CART_RULE_DISCOUNTS, + QuoteTransfer::PROMOTION_ITEMS, + QuoteTransfer::IS_LOCKED, + QuoteTransfer::QUOTE_REQUEST_VERSION_REFERENCE, + QuoteTransfer::QUOTE_REQUEST_REFERENCE, + QuoteTransfer::MERCHANT_REFERENCE, + QuoteTransfer::IS_ORDER_PLACED_SUCCESSFULLY, + ]); + } +} +``` + +2. Remove the quote fields that are not relevant for your project. + +3. Configure the batch availability check facade method: + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php + + config/Zed/oms/DummySubprocess/DummyOrderAmendment01.xml + +```xml + + + + + + + amendment in progress + + + + + + + grace period pending + deleted item unreserved + unreserve deleted items + + + + deleted item unreserved + grace period started + start grace period + + + + grace period started + order amendment + start-order-amendment + + + + order amendment + cancelled + finish-order-amendment + + + + order amendment + grace period started + cancel-order-amendment + + + + order amendment + grace period finished + skip-order-amendment + + + + + + + + + + + + + + +``` + +
+ +{% info_block warningBox "Verification" %} + +Verify the order amendment state machine configuration in the following step. + +{% endinfo_block %} + +2. Using the following process as an example, adjust your OMS state machine configuration according to your project's requirements. + +
config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyRefund + DummyReturn + DummyInvoice + DummyPicking + CreateGiftCard + WarehouseAllocation + DummyMerchantCommission + DummyOrderAmendment + + + + + cancellable + + + + cancellable + amendable + + + cancellable + + + cancellable + + + exclude from customer + + + + cancellable + + + + + + + + + + + + + + + new + grace period pending + + + + grace period started + grace period finished + skip grace period + + + + grace period finished + warehouse allocated + allocate warehouse + + + + warehouse allocated + payment pending + authorize + + + + warehouse allocated + invalid + authorize + + + + warehouse allocated + cancelled + cancel + + + + payment pending + paid + pay + + + + tax pending + tax invoice submitted + submit tax invoice + + + + payment pending + cancelled + pay + + + + payment pending + cancelled + cancel + + + + tax invoice submitted + product review requested + request product review + + + + product review requested + confirmed + confirm + + + + confirmed + waiting + skip timeout + + + + waiting + picking list generation scheduled + picking list generation schedule + + + + waiting + exported + skip picking + + + + picking finished + exported + finish picking + + + + waiting + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +
+ +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01** and check the following: + +- The `grace period started` state has the `amendable` tag +- The `order amendment` state exists + +{% endinfo_block %} + +## 3) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------|-------|---------| +| spy_sales_order_amendment | table | created | +| spy_sales_order_amendment_quote | table | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------------|-------|---------|--------------------------------------------------------------------------------------------| +| SalesOrderAmendment | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentTransfer.php | +| SalesOrderAmendmentQuote | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteTransfer.php | +| SalesOrderAmendmentCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentCriteriaTransfer.php | +| SalesOrderAmendmentQuoteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCriteriaTransfer.php | +| SalesOrderAmendmentQuoteConditions | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteConditionsTransfer.php | +| SalesOrderAmendmentDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentDeleteCriteriaTransfer.php | +| SalesOrderAmendmentQuoteCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionDeleteCriteriaTransfer.php | +| SalesOrderAmendmentConditions | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentConditionsTransfer.php | +| SalesOrderAmendmentCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentCollectionTransfer.php | +| SalesOrderAmendmentQuoteCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionTransfer.php | +| SalesOrderAmendmentRequest | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentRequestTransfer.php | +| SalesOrderAmendmentQuoteCollectionRequest | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionRequestTransfer.php | +| SalesOrderAmendmentQuoteCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionResponseTransfer.php | +| SalesOrderAmendmentResponse | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentResponseTransfer.php | +| SalesOrderAmendmentItemCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentItemCollectionTransfer.php | +| Quote | class | updated | src/Generated/Shared/Transfer/QuoteTransfer.php | +| QuoteUpdateRequestAttributes | class | updated | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer.php | +| CartReorderRequest | class | updated | src/Generated/Shared/Transfer/CartReorderRequestTransfer.php | +| Order | class | updated | src/Generated/Shared/Transfer/OrderTransfer.php | +| Item | class | updated | src/Generated/Shared/Transfer/ItemTransfer.php | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer.php | +| CartReorderResponse | class | created | src/Generated/Shared/Transfer/CartReorderResponseTransfer.php | +| CartReorder | class | created | src/Generated/Shared/Transfer/CartReorderTransfer.php | +| OrderConditions | class | created | src/Generated/Shared/Transfer/OrderConditionsTransfer.php | +| OrderCriteria | class | created | src/Generated/Shared/Transfer/OrderCriteriaTransfer.php | +| OrderCollection | class | created | src/Generated/Shared/Transfer/OrderCollectionTransfer.php | +| OrderItemFilter | class | created | src/Generated/Shared/Transfer/OrderItemFilterTransfer.php | +| CheckoutResponse | class | updated | src/Generated/Shared/Transfer/CheckoutResponseTransfer.php | +| OmsOrderItemState | class | created | src/Generated/Shared/Transfer/OmsOrderItemStateTransfer.php | +| RestCartsAttributes | class | created | src/Generated/Shared/Transfer/RestCartsAttributesTransfer.php | +| RestCartReorderRequestAttributes | class | created | src/Generated/Shared/Transfer/RestCartReorderRequestAttributesTransfer.php | +| RestOrderAmendmentsAttributes | class | created | src/Generated/Shared/Transfer/RestOrderAmendmentsAttributesTransfer.php | +| PriceProductResolveConditions | class | created | src/Generated/Shared/Transfer/PriceProductResolveConditionsTransfer.php | +| PriceProductFilter | class | updated | src/Generated/Shared/Transfer/PriceProductFilterTransfer.php | +| OriginalSalesOrderItem | class | updated | src/Generated/Shared/Transfer/OriginalSalesOrderItemTransfer.php | +| SellableItemsRequest | class | updated | src/Generated/Shared/Transfer/SellableItemsRequestTransfer.php | +| SellableItemRequest | class | updated | src/Generated/Shared/Transfer/SellableItemRequestTransfer.php | +| ProductAvailabilityCriteria | class | updated | src/Generated/Shared/Transfer/ProductAvailabilityCriteriaTransfer.php | +| SellableItemResponse | class | updated | src/Generated/Shared/Transfer/SellableItemResponseTransfer.php | +| SellableItemsResponse | class | updated | src/Generated/Shared/Transfer/SellableItemsResponseTransfer.php | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your language configuration: + +**src/data/import/glossary.csv** + +```yaml +sales_order_amendment_oms.validation.order_not_amendable,The order cannot be amended.,en_US +sales_order_amendment_oms.validation.order_not_amendable,Die Bestellung kann nicht geändert werden.,de_DE +sales_order_amendment_oms.validation.amended_order_does_not_exist,Order with reference %order_reference% could not be found.,en_US +sales_order_amendment_oms.validation.amended_order_does_not_exist,Bestellnummer %order_reference% konnte nicht gefunden werden.,de_DE +sales_order_amendment_oms.validation.amendment_order_does_not_exist,Order with reference %order_reference% could not be found.,en_US +sales_order_amendment_oms.validation.amendment_order_does_not_exist,Bestellnummer %order_reference% konnte nicht gefunden werden.,de_DE +sales_order_amendment.validation.sales_order_amendment_does_not_exist,Can not update the sales order amendment with ID %uuid%. Please check the ID.,en_US +sales_order_amendment.validation.sales_order_amendment_does_not_exist,Die Änderung der Bestellung mit der ID %uuid% kann nicht aktualisiert werden. Bitte überprüfen Sie die ID.,de_DE +sales_order_amendment.validation.order_amendment_duplicated,An amendment is already in progress for this order. Please complete or cancel it before starting a new one.,en_US +sales_order_amendment.validation.order_amendment_duplicated,"Für diese Bestellung ist bereits eine Änderung in Bearbeitung. Diese Änderung muss abgeschlossen oder storniert sein, damit Sie eine neue Änderung beginnen können.",de_DE +sales_order_amendment.validation.cart_reorder.order_reference_not_match,"Another order is currently being amended. Complete or cancel the previous amendment before making changes to this order.",en_US +sales_order_amendment.validation.cart_reorder.order_reference_not_match,"Eine andere Bestellung wird gerade geändert. Diese Änderung muss abgeschlossen oder storniert sein, bevor Sie Änderungen an dieser Bestellung vornehmen können.",de_DE +sales_order_amendment.validation.cart.cart_cant_be_amended,"Current cart cannot be amended.",en_US +sales_order_amendment.validation.cart.cart_cant_be_amended,"Der aktuelle Warenkorb kann nicht geändert werden.",de_DE +oms.state.order-amendment,Editing in Progress,en_US +oms.state.order-amendment,Bestelländerung in Bearbeitung,de_DE +sales_order_amendment_oms.validation.order_not_being_amended,This order cannot be edited because the time limit for changes has expired.,en_US +sales_order_amendment_oms.validation.order_not_being_amended,"Eine Bearbeitung dieser Bestellung ist nicht möglich, da die Änderungsfrist abgelaufen ist.",de_DE +sales_order_amendment.pre_check.cannot_change_currency,"Currency cannot be changed during order edit.",en_US +sales_order_amendment.pre_check.cannot_change_currency,"Währung kann während der Bearbeitung einer Bestellung nicht geändert werden.",de_DE +sales_order_amendment.pre_check.cannot_change_price_mode,"Price mode cannot be changed during order edit.",en_US +sales_order_amendment.pre_check.cannot_change_price_mode,"Preismodus kann während der Bearbeitung einer Bestellung nicht geändert werden.",de_DE +store.cart_reorder.error.store_mismatch,"This order was placed in a different store. This action cannot be performed.",en_US +store.cart_reorder.error.store_mismatch,"Diese Bestellung wurde in einem anderen Store getätigt. Aktion kann nicht ausgeführt werden.",de_DE +sales_order_amendment.quote_request.validation.error.forbidden,"Quote requests are unavailable during order amendment.",en_US +sales_order_amendment.quote_request.validation.error.forbidden,"Angebotsanfragen sind während der Bestelländerung nicht verfügbar.",de_DE +sales_order_amendment.order_amendment_after_rfq.validation.error.forbidden,"Amendments are not allowed for orders created from a quote.",en_US +sales_order_amendment.order_amendment_after_rfq.validation.error.forbidden,"Für Bestellungen, die aus einem Angebot erstellt wurden, sind keine Änderungen zulässig.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| OrderAmendmentCartReorderValidatorPlugin | Validates if quote amendment order reference matches `CartReorderTransfer.order.orderReference`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| OrderAmendmentQuoteProcessFlowExpanderCartPreReorderPlugin | Expands the quote process flow with the quote process flow name. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| StartOrderAmendmentCartReorderPostCreatePlugin | Triggers the OMS event to start the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\CartReorder | +| IsAmendableOrderCartReorderRequestValidatorPlugin | Validates if all order items are in the order item state that has the `amendable` flag. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\CartReorder | +| AmendmentOrderReferenceCartPreReorderPlugin | Sets `CartReorderTransfer.quote.amendmentOrderReference` taken from `CartReorderRequestTransfer.orderReference`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| AmendmentQuoteNameCartPreReorderPlugin | Updates `CartReorderTransfer.quote.name` with a custom amendment quote name. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| OriginalSalesOrderItemPriceCartPreReorderPlugin | Adds original sales order item unit prices to `CartReorderTransfer.quote.originalSalesOrderItemUnitPrices` with group keys as an array. | | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\CartReorder | +| OrderSalesOrderAmendmentValidatorRulePlugin | Validates if an order with provided original or amended order reference exists. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\SalesOrderAmendment | +| CartNoteSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's cart notes with the corresponding item's cart notes from `OrderTransfer.items`. | | Spryker\Zed\CartNote\Communication\Plugin\SalesOrderAmendment | +| ShipmentSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's shipments with the corresponding item's shipments from `OrderTransfer.items`. | | Spryker\Zed\Shipment\Communication\Plugin\SalesOrderAmendment | +| ConfigurableBundleNoteSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's configurable bundle notes with the corresponding item's configurable bundle notes from `OrderTransfer.items`. | | Spryker\Zed\ConfigurableBundleNote\Communication\Plugin\SalesOrderAmendment | +| SalesProductConfigurationSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's configurations with the corresponding item's configurations from `OrderTransfer.items`. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\SalesOrderAmendment | +| SalesServicePointSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's service points with the corresponding item's service points from `OrderTransfer.items`. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\SalesOrderAmendment | +| OrderAmendmentRestCartReorderAttributesMapperPlugin | Maps the `isAmendment` property from `RestCartReorderRequestAttributesTransfer` to `CartReorderRequestTransfer`. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\CartReorderRestApi | +| OrderAmendmentRestCartAttributesMapperPlugin | Maps the `amendmentOrderReference` field from `QuoteTransfer` to `RestCartsAttributesTransfer`. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\CartsRestApi | +| OrderAmendmentCheckoutPreCheckPlugin | Validates if an order is in a state that allows amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| CustomerOrderSavePlugin | Saves customer info to a sales related table. | | Spryker\Zed\Customer\Communication\Plugin\Checkout | +| UpdateOrderByQuoteCheckoutDoSaveOrderPlugin | Updates order billing address with billing address data from quote. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OrderTotalsSaverPlugin | Saves order totals. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| ReleaseUsedCodesCheckoutDoSaveOrderPlugin | Decreases the number of uses of each of located discount codes by 1. | | Spryker\Zed\Discount\Communication\Plugin\Checkout | +| ShipmentTypeCheckoutDoSaveOrderPlugin | Creates or updates a sales shipment type entity. | | Spryker\Zed\SalesShipmentType\Communication\Plugin\Checkout | +| UpdateCartNoteCheckoutDoSaveOrderPlugin | Updates an order's cart note with the cart note provided in `QuoteTransfer.cartNote`. | | Spryker\Zed\CartNote\Communication\Plugin\Checkout | +| ReplaceSalesOrderDiscountsCheckoutDoSaveOrderPlugin | Deletes sales discount and sales discount code entities related to a provided sales order ID. Iterates over `orderItems` and `orderExpenses` and creates sales discount entities for each item. | | Spryker\Zed\Discount\Communication\Plugin\Checkout | +| ReplaceSalesOrderShipmentCheckoutDoSaveOrderPlugin | Recreates new sales shipment expenses for each item level shipment. | | Spryker\Zed\Shipment\Communication\Plugin\Checkout | +| SalesOrderAmendmentItemsCheckoutDoSaveOrderPlugin | Replaces an order item during amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| ProductBundleOrderSaverPlugin | Saves order bundle items. | | Spryker\Zed\ProductBundle\Communication\Plugin\Checkout | +| ReplaceSalesOrderPaymentCheckoutDoSaveOrderPlugin | Saves order payments from `QuoteTransfer`. | | Spryker\Zed\SalesPayment\Communication\Plugin\Checkout | +| GiftCardPaymentCheckoutDoSaveOrderPlugin | Iterates over `QuoteTransfer.payments` and saves gift card related payments into the `spy_payment_gift_card` table. | | Spryker\Zed\GiftCard\Communication\Plugin\Checkout | +| ReplaceSalesOrderThresholdExpensesCheckoutDoSaveOrderPlugin | Iterates over `QuoteTransfer.expenses` and stores expenses of the type defined by `{@link \Spryker\Shared\SalesOrderThreshold\SalesOrderThresholdConfig::THRESHOLD_EXPENSE_TYPE}` in the database. | | Spryker\Zed\SalesOrderThreshold\Communication\Plugin\Checkout | +| FinishOrderAmendmentCheckoutPostSavePlugin | Triggers the OMS event defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getFinishOrderAmendmentEvent()}` to finish the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| DummyPaymentCheckoutPostSavePlugin | If `QuoteTransfer.billingAddress.lastName` is `Invalid`, adds the error into `CheckoutResponseTransfer`. | | Spryker\Zed\DummyPayment\Communication\Plugin\Checkout | +| CloseQuoteRequestCheckoutPostSaveHookPlugin | If quote contains a quote request version reference, marks the quote request as closed. | | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | +| SendEmailToGiftCardUser | Sends an email to a Gift Card user. | | Spryker\Zed\GiftCardMailConnector\Communication\Plugin\Checkout | +| PaymentAuthorizationCheckoutPostSavePlugin | Checks whether the payment method selected for the given order requires authorization. | | Spryker\Zed\Payment\Communication\Plugin\Checkout | +| PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin | Send a request to the used PSP App to confirm the preorder payment. | | Spryker\Zed\Payment\Communication\Plugin\Checkout | +| DisallowQuoteCheckoutPreSavePlugin | Disallows quote checkout for the configured amount of seconds. | | Spryker\Zed\QuoteCheckoutConnector\Communication\Plugin\Checkout | +| SalesOrderExpanderPlugin | Transforms the provided cart items according to the configured cart item transformer strategies. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OriginalOrderQuoteExpanderCheckoutPreSavePlugin | Sets `QuoteTransfer.originalOrder` with a found order entity. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| CancelOrderAmendmentQuoteDeleteAfterPlugin | Triggers the OMS event defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getCancelOrderAmendmentEvent()}` to cancel the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Quote | +| SalesOrderAmendmentOrderExpanderPlugin | Expands `OrderTransfer.salesOrderAmendment` with a found sales order amendment. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Sales | +| IsAmendableOrderExpanderPlugin | Checks if all order items are in the order item state that has a flag defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getAmendableOmsFlag()}`. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| CreateSalesOrderAmendmentOrderPostSavePlugin | Persists a sales order amendment entity. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Sales | +| OrderAmendmentCartPreCheckPlugin | Validates if the customer order with a provided amendment order reference exists. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Cart | +| ResetAmendmentOrderReferencePreReloadItemsPlugin | Resets `QuoteTransfer.amendmentOrderReference` before reloading cart items. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Cart | +| ResetOriginalSalesOrderItemUnitPricesPreReloadItemsPlugin | Resets `QuoteTransfer.originalSalesOrderItemUnitPrices` before reloading cart items. | | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\Cart | +| ResetAmendmentQuoteProcessFlowQuotePostMergePlugin | If `PersistentQuoteTransfer.idQuote` is not equal to `CurrentQuoteTransfer.idQuote`, and `quoteProcessFlow` is set to `order-amendment`, resets `quoteProcessFlow`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\PersistentCart | +| DefaultQuoteCollectionFilterPlugin | Filters out non-default quotes. | | Spryker\Zed\MultiCart\Communication\Plugin\Quote | +| IsAmendableOrderSearchOrderExpanderPlugin | Expands the `OrderTransfer.isAmendable` property. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| OrderAmendmentDefaultOrderItemInitialStateProviderPlugin | Returns the initial OMS order item state for order items in the order amendment flow. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| OrderAmendmentsByOrderResourceRelationshipPlugin | Adds the `order-amendments` resource as relationship if `OrderTransfer` and `OrderTransfer.salesOrderAmendment` are provided as a payload. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\GlueApplication | +| CountriesCheckoutDataValidatorPlugin | Verifies if countries can be found by `countryIso2Codes` given in `CheckoutDataTransfer.shipments.shippingAddress`. | | Spryker\Zed\Country\Communication\Plugin\CheckoutRestApi | +| ShipmentMethodCheckoutDataValidatorPlugin | Verifies if a shipment method is valid. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | +| ItemsCheckoutDataValidatorPlugin | Validates if `CheckoutDataTransfer` provides shipment data per item level. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | +| CustomerAddressCheckoutDataValidatorPlugin | Checks if customer addresses exist. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressCheckoutDataValidatorPlugin | Checks if company addresses exist. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\CheckoutRestApi | +| ShipmentTypeCheckoutDataValidatorPlugin | Validates whether a shipment type related to the shipment method is active and belongs to the quote store. | | Spryker\Zed\ShipmentTypesRestApi\Communication\Plugin\CheckoutRestApi | +| ClickAndCollectExampleReplaceCheckoutDataValidatorPlugin | Replaces filtered product offers with suitable product offers from Persistence. | | Spryker\Zed\ClickAndCollectExample\Communication\Plugin\CheckoutRestApi | +| SaveOrderCommentThreadOrderPostSavePlugin | Saves a comments thread after an order is saved. | | Spryker\Zed\CommentSalesConnector\Communication\Plugin\Sales | +| SaveCompanyBusinessUnitUuidOrderPostSavePlugin | Saves company business unit UUID to the order after it's saved. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Sales | +| SaveCompanyUuidOrderPostSavePlugin | Saves company UUID to the order after it's saved. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Sales | +| DiscountSalesOrderItemCollectionPreDeletePlugin | Deletes sales discount and sales discount code entities found by criteria. | | Spryker\Zed\Discount\Communication\Plugin\Sales | +| SalesDiscountSalesExpensePreDeletePlugin | Deletes sales discount entities related to provided expenses. | | Spryker\Zed\Discount\Communication\Plugin\Sales | +| GiftCardOrderItemsPostSavePlugin | Processes gift card order items after they're saved. | | Spryker\Zed\GiftCard\Communication\Plugin\Sales | +| GiftCardSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item gift card entities found by criteria. | | Spryker\Zed\GiftCard\Communication\Plugin\Sales | +| NopaymentSalesOrderItemCollectionPreDeletePlugin | Deletes no-payment paid entities found by criteria. | | Spryker\Zed\Nopayment\Communication\Plugin\Sales | +| DefaultOrderItemInitialStateProviderPlugin | Sets the initial OMS state for order items. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OmsItemHistorySalesOrderItemCollectionPreDeletePlugin | Deletes entities found by criteria. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| UpdateOrderCustomReferenceOrderPostSavePlugin | Updates custom order reference after an order is saved. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Sales | +| ProductOptionOrderItemsPostSavePlugin | Processes product option order items after they're saved. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| ProductOptionSalesOrderItemCollectionPostUpdatePlugin | Processes product options after an order items collection is updated. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| ProductOptionSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item option entities. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| SalesConfigurableBundleSalesOrderItemCollectionPreDeletePlugin | Deletes sales order configured bundle item entities. | | Spryker\Zed\SalesConfigurableBundle\Communication\Plugin\Sales | +| SalesConfiguredBundlesSalesOrderItemCollectionPostUpdatePlugin | Processes configured bundles after an order items collection is updated. | | Spryker\Zed\SalesConfigurableBundle\Communication\Plugin\Sales | +| SalesProductConfigurationSalesOrderItemCollectionPostUpdatePlugin | Processes product configurations after an order items collection is updated. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\Sales | +| SalesProductConfigurationSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item configuration entities found by criteria. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\Sales | +| ItemMetadataSalesOrderItemCollectionPostUpdatePlugin | Processes item metadata after an order items collection is updated. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\Sales | +| ItemMetadataSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item metadata entities found by criteria. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\Sales | +| SalesReclamationSalesOrderItemCollectionPreDeletePlugin | Deletes sales reclamation item entities found by criteria. | | Spryker\Zed\SalesReclamation\Communication\Plugin\Sales | +| ServicePointSalesOrderItemCollectionPostUpdatePlugin | Processes service points after an order items collection is updated. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales | +| ServicePointSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item service point entities found by criteria. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales | +| SalesOrderAmendmentCurrentCurrencyIsoCodePreCheckPlugin | Disallows changing the currency when an order is being edited. | | Spryker\Client\SalesOrderAmendment\Plugin\Currency | +| SalesOrderAmendmentCurrentPriceModePreCheckPlugin | Disallows changing the price mode when an order is being edited. | | Spryker\Client\SalesOrderAmendment\Plugin\Price | +| PriceItemExpanderPlugin | Adds product prices to item based on currency, price mode, and price type. Allows to expand items with nullable prices. | For Order amendment flow, should be executed instead of `{@link \Spryker\Zed\PriceCartConnector\Communication\Plugin\CartItemPricePlugin}`. | Spryker\Zed\PriceCartConnector\Communication\Plugin\Cart | +| OriginalSalesOrderItemPriceItemExpanderPlugin | Replaces an item's prices with the original sales order item's prices before adding or removing cart items to persistence. | Should be executed after `{@link \Spryker\Zed\PriceCartConnector\Communication\Plugin\PriceItemExpanderPlugin}`. | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\Cart | +| OriginalSalesOrderItemPriceProductPostResolvePlugin | Replaces an item's prices with the original sales order item's prices after resolving prices for the resulting `PriceProductTransfer`. | | Spryker\Client\PriceProductSalesOrderAmendment\Plugin\PriceProduct | +| OrderItemPriceProductResolveConditionsPriceProductFilterExpanderPlugin | Expands `PriceProductFilterTransfer` with `PriceProductResolveConditionsTransfer` from `ProductViewTransfer`. | | Spryker\Client\PriceProductSalesOrderAmendment\Plugin\PriceProductStorage | +| CurrentStoreCartReorderValidatorPlugin | Validates that the current store matches the store of the order and quote. | | Spryker\Zed\Store\Communication\Plugin\CartReorder | +| ProductOfferOriginalSalesOrderItemGroupKeyExpanderPlugin | Expands a provided group key with a product offer reference if `ItemTransfer.productOfferReference` is set. | | Spryker\Service\ProductOffer\Plugin\SalesOrderAmendment | +| ProductOfferOriginalSalesOrderItemPriceGroupKeyExpanderPlugin | Expands a provided price group key with a product offer reference if `ItemTransfer.productOfferReference` is set. | | Spryker\Service\ProductOffer\Plugin\SalesOrderAmendment | +| OrderAmendmentQuantityBatchAvailabilityStrategyPlugin | Calculates available quantity for each processed item. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Availability | +| OrderAmendmentProductApprovalCartPreCheckPlugin | Checks the approval status for products. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Cart | +| OrderAmendmentProductApprovalPreReloadItemsPlugin | Checks and removes unapproved product items from Quote transfer. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Cart | +| OrderAmendmentProductBundleAvailabilityCartPreCheckPlugin | Checks if product bundle items in `CartChangeTransfer` are available and active. Skips `isActive` validation for items with SKUs from `CartChangeTransfer.quote.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| OrderAmendmentProductBundleStatusCartPreCheckPlugin | Checks if product bundle items in `CartChangeTransfer` are active. Skips validation for items with SKUs from `CartChangeTransfer.quote.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| OrderAmendmentProductExistsCartPreCheckPlugin | Checks if the products added to cart exist. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Cart | +| OrderAmendmentRemoveInactiveItemsPreReloadPlugin | Removes inactive items from quote. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Cart | +| OrderAmendmentProductDiscontinuedCartPreCheckPlugin | Checks all item related products from a cart change request are not discontinued. Skips items that are part of the original order. | | Spryker\Zed\ProductDiscontinued\Communication\Plugin\Cart | +| OrderAmendmentFilterInactiveProductOfferPreReloadItemsPlugin | Checks and removes inactive product offers from cart. Skips inactive product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| OrderAmendmentProductOfferCartPreCheckPlugin | Checks if a cart item product offer belongs to a product. Skips product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| OriginalOrderBundleItemCartPreReorderPlugin | Expands `CartReorderTransfer.quote` with original sales order items from a provided `CartReorderTransfer.order.bundleItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\CartReorder | +| OriginalSalesOrderItemCartPreReorderPlugin | Expands `CartReorderTransfer.quote` with original sales order items from a provided `CartReorderTransfer.order.items`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin | Filters out items with inactive product options from `CartChangeTransfer`. | | Spryker\Zed\ProductOptionCartConnector\Communication\Plugin\CartReorder | +| OrderAmendmentProductApprovalCheckoutPreConditionPlugin | Returns `false` if at least one quote item transfer has items with unapproved product. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Checkout | +| OrderAmendmentProductBundleAvailabilityCheckoutPreConditionPlugin | Checks if the product bundle items in the `QuoteTransfer` are available and active. Skips `isActive` validation for items with SKUs from `QuoteTransfer.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Checkout | +| OrderAmendmentProductExistsCheckoutPreConditionPlugin | Validates if concrete products with the `QuoteTransfer.item.sku` SKU exist and are active. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Checkout | +| OrderAmendmentProductDiscontinuedCheckoutPreConditionPlugin | Checks if there are no discontinued products in checkout. Skips items that are part of the original order. | | Spryker\Zed\ProductDiscontinued\Communication\Plugin\Checkout | +| OrderAmendmentProductOfferCheckoutPreConditionPlugin | Returns `false` if at least one quote item transfer has items with inactive or unapproved `ProductOffer`. Skips product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Checkout | +| SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin | Creates a new sales order amendment quote entity based on a provided `QuoteTransfer`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| UpdateDeletedItemReservationCommandByOrderPlugin | Retrieves the sales order amendment quote collection by order reference. If the collection is not empty, updates the reservations of deleted items in the order. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| OriginalSalesOrderItemGroupKeyCartReorderItemHydratorPlugin | Hydrates `items.originalSalesOrderItemGroupKey` with the original sales order item group key. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | + + + +
+ src/Pyz/Service/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getOriginalSalesOrderItemGroupKeyExpanderPlugins(): array + { + return [ + new ProductOfferOriginalSalesOrderItemGroupKeyExpanderPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Service/PriceProductSalesOrderAmendment/PriceProductSalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getOriginalSalesOrderItemPriceGroupKeyExpanderPlugins(): array + { + return [ + new ProductOfferOriginalSalesOrderItemPriceGroupKeyExpanderPlugin(), + ]; + } +} +``` + +
+ + +
+ src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getSalesOrderAmendmentCreateValidationRulePlugins(): array + { + return [ + new OrderSalesOrderAmendmentValidatorRulePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesOrderAmendmentExtension\Dependency\Plugin\SalesOrderItemCollectorPluginInterface> + */ + protected function getSalesOrderItemCollectorPlugins(): array + { + return [ + new CartNoteSalesOrderItemCollectorPlugin(), + new ShipmentSalesOrderItemCollectorPlugin(), + new ConfigurableBundleNoteSalesOrderItemCollectorPlugin(), + new SalesProductConfigurationSalesOrderItemCollectorPlugin(), + new SalesServicePointSalesOrderItemCollectorPlugin(), + ]; + } +} +``` + +
+ + +
+ src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php + +```php + + */ + protected function getCartReorderRequestValidatorPlugins(): array + { + return [ + new IsAmendableOrderCartReorderRequestValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderValidatorPluginInterface> + */ + protected function getCartReorderValidatorPluginsForOrderAmendment(): array + { + return [ + new CurrentStoreCartReorderValidatorPlugin(), + new OrderAmendmentCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPreReorderPluginInterface> + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new OrderAmendmentQuoteProcessFlowExpanderCartPreReorderPlugin(), + new AmendmentOrderReferenceCartPreReorderPlugin(), + new AmendmentQuoteNameCartPreReorderPlugin(), + new OriginalSalesOrderItemPriceCartPreReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderItemHydratorPluginInterface> + */ + protected function getCartReorderItemHydratorPlugins(): array + { + return [ + new OriginalSalesOrderItemGroupKeyCartReorderItemHydratorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPostReorderPluginInterface> + */ + protected function getCartPostReorderPlugins(): array + { + return [ + new StartOrderAmendmentCartReorderPostCreatePlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Glue/CartReorderRestApi/CartReorderRestApiDependencyProvider.php + + +```php + + */ + protected function getRestCartReorderAttributesMapperPlugins(): array + { + return [ + new OrderAmendmentRestCartReorderAttributesMapperPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php + + +```php + + */ + protected function getRestCartAttributesMapperPlugins(): array + { + return [ + new OrderAmendmentRestCartAttributesMapperPlugin(), + ]; + } +} +``` + + +
+ + +
+ src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + */ + protected function getCheckoutPreConditionsForOrderAmendment(Container $container): array + { + return [ + new OrderAmendmentProductBundleAvailabilityCheckoutPreConditionPlugin(), + new OrderAmendmentProductDiscontinuedCheckoutPreConditionPlugin(), + new OrderAmendmentProductOfferCheckoutPreConditionPlugin(), + new OrderAmendmentProductExistsCheckoutPreConditionPlugin(), + new OrderAmendmentProductApprovalCheckoutPreConditionPlugin(), + new OrderAmendmentCheckoutPreCheckPlugin(), + ]; + } + + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutSaveOrderInterface|\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutDoSaveOrderInterface> + */ + protected function getCheckoutOrderSaversForOrderAmendment(Container $container): array + { + return [ + new CustomerOrderSavePlugin(), + new UpdateOrderByQuoteCheckoutDoSaveOrderPlugin(), + new OrderTotalsSaverPlugin(), + new ReleaseUsedCodesCheckoutDoSaveOrderPlugin(), + new ShipmentTypeCheckoutDoSaveOrderPlugin(), + new UpdateCartNoteCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderDiscountsCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderShipmentCheckoutDoSaveOrderPlugin(), + new SalesOrderAmendmentItemsCheckoutDoSaveOrderPlugin(), + new ProductBundleOrderSaverPlugin(), + new ReplaceSalesOrderPaymentCheckoutDoSaveOrderPlugin(), + new SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin(), + new GiftCardPaymentCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderThresholdExpensesCheckoutDoSaveOrderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooks(Container $container): array + { + return [ + new FinishOrderAmendmentCheckoutPostSavePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooksForOrderAmendment(Container $container): array + { + return [ + new DummyPaymentCheckoutPostSavePlugin(), + new CloseQuoteRequestCheckoutPostSaveHookPlugin(), + new SendEmailToGiftCardUser(), + new PaymentAuthorizationCheckoutPostSavePlugin(), + new PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutPreSaveHookInterface|\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutPreSaveInterface|\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPreSavePluginInterface> + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new DisallowQuoteCheckoutPreSavePlugin(), + new SalesOrderExpanderPlugin(), + new OriginalOrderQuoteExpanderCheckoutPreSavePlugin(), + new FilterOriginalOrderBundleItemCheckoutPreSavePlugin(), + ]; + } +} +``` + +
+ + + +
+ src/Pyz/Zed/Quote/QuoteDependencyProvider.php + + +```php + + */ + protected function getQuoteDeleteAfterPlugins(): array + { + return [ + new CancelOrderAmendmentQuoteDeleteAfterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteCollectionFilterPluginInterface> + */ + protected function getQuoteCollectionFilterPlugins(): array + { + return [ + new DefaultQuoteCollectionFilterPlugin(), + ]; + } +} +``` + +
+ + + +
+ src/Pyz/Zed/Sales/SalesDependencyProvider.php + + +```php + + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new SalesOrderAmendmentOrderExpanderPlugin(), + new IsAmendableOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderPostSavePluginInterface> + */ + protected function getOrderPostSavePluginsForOrderAmendment(): array + { + return [ + new SaveOrderCommentThreadOrderPostSavePlugin(), + new UpdateOrderCustomReferenceOrderPostSavePlugin(), + new SaveCompanyBusinessUnitUuidOrderPostSavePlugin(), + new SaveCompanyUuidOrderPostSavePlugin(), + new CreateSalesOrderAmendmentOrderPostSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SearchOrderExpanderPluginInterface> + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new IsAmendableOrderSearchOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new GiftCardOrderItemsPostSavePlugin(), + new ProductOptionOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesExpensePreDeletePluginInterface> + */ + protected function getSalesExpensePreDeletePlugins(): array + { + return [ + new SalesDiscountSalesExpensePreDeletePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPreDeletePluginInterface> + */ + protected function getSalesOrderItemCollectionPreDeletePlugins(): array + { + return [ + new DiscountSalesOrderItemCollectionPreDeletePlugin(), + new ItemMetadataSalesOrderItemCollectionPreDeletePlugin(), + new OmsItemHistorySalesOrderItemCollectionPreDeletePlugin(), + new ProductOptionSalesOrderItemCollectionPreDeletePlugin(), + new ServicePointSalesOrderItemCollectionPreDeletePlugin(), + new SalesConfigurableBundleSalesOrderItemCollectionPreDeletePlugin(), + new SalesProductConfigurationSalesOrderItemCollectionPreDeletePlugin(), + new GiftCardSalesOrderItemCollectionPreDeletePlugin(), + new NopaymentSalesOrderItemCollectionPreDeletePlugin(), + new SalesReclamationSalesOrderItemCollectionPreDeletePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPostUpdatePluginInterface> + */ + protected function getOrderItemCollectionPostUpdatePlugins(): array + { + return [ + new SalesConfiguredBundlesSalesOrderItemCollectionPostUpdatePlugin(), + new SalesProductConfigurationSalesOrderItemCollectionPostUpdatePlugin(), + new ItemMetadataSalesOrderItemCollectionPostUpdatePlugin(), + new ServicePointSalesOrderItemCollectionPostUpdatePlugin(), + new ProductOptionSalesOrderItemCollectionPostUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemInitialStateProviderPluginInterface> + */ + protected function getOrderItemInitialStateProviderPlugins(): array + { + return [ + new DefaultOrderItemInitialStateProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemInitialStateProviderPluginInterface> + */ + protected function getOrderItemInitialStateProviderPluginsForOrderAmendment(): array + { + return [ + new OrderAmendmentDefaultOrderItemInitialStateProviderPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + OrdersRestApiConfig::RESOURCE_ORDERS, + new OrderAmendmentsByOrderResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + + + +
+ + + +
+ src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php + + +```php + + */ + protected function getCheckoutDataValidatorPluginsForOrderAmendment(): array + { + return [ + new CountriesCheckoutDataValidatorPlugin(), + new ShipmentMethodCheckoutDataValidatorPlugin(), + new ItemsCheckoutDataValidatorPlugin(), + new CustomerAddressCheckoutDataValidatorPlugin(), + new CompanyBusinessUnitAddressCheckoutDataValidatorPlugin(), + new ShipmentTypeCheckoutDataValidatorPlugin(), + new ClickAndCollectExampleReplaceCheckoutDataValidatorPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php + +```php + + */ + protected function getBatchAvailabilityStrategyPlugins(): array + { + return [ + /* + * OrderAmendmentQuantityBatchAvailabilityStrategyPlugin needs to be after all other implementations including ProductConcreteBatchAvailabilityStrategyPlugin. + */ + new OrderAmendmentQuantityBatchAvailabilityStrategyPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new UpdateDeletedItemReservationCommandByOrderPlugin(), 'OrderAmendment/UnreserveDeletedItems'); + $commandCollection->add(new DeleteOrderAmendmentQuoteCommandByOrderPlugin(), 'OrderAmendment/StartGracePeriod'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +1. Place an order with different types of products–for example, physical or digital, and check if the order amendment is available. +2. Go to order detail and order list pages and check if the **edit order** button is displayed. +3. Deactivated and discontinue the products in the order. Make sure the order can be amended. + +{% endinfo_block %} + +**src/Pyz/Client/Currency/CurrencyDependencyProvider.php** + +```php + + */ + protected function getCurrentCurrencyIsoCodePreCheckPlugins(): array + { + return [ + new SalesOrderAmendmentCurrentCurrencyIsoCodePreCheckPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Price/PriceDependencyProvider.php** + +```php + + */ + protected function getCurrentPriceModePreCheckPlugins(): array + { + return [ + new SalesOrderAmendmentCurrentPriceModePreCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make a Glue API call with a currency and price mode different from those in the cart when an order is being edited. For example: `htts://glue.mysprykershop.com/catalog-search?q=001¤cy=CHF&priceMode=NET_MODE`. Make sure the currency and price mode remain unchanged. + +{% endinfo_block %} + +
+ src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + */ + protected function getExpanderPluginsForOrderAmendment(Container $container): array + { + return [ + new PriceItemExpanderPlugin(), + new OriginalSalesOrderItemPriceItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> + */ + protected function getCartPreCheckPluginsForOrderAmendment(): array + { + return [ + new OrderAmendmentProductExistsCartPreCheckPlugin(), + new OrderAmendmentProductBundleAvailabilityCartPreCheckPlugin(), + new OrderAmendmentProductBundleStatusCartPreCheckPlugin(), + new OrderAmendmentProductDiscontinuedCartPreCheckPlugin(), + new OrderAmendmentProductOfferCartPreCheckPlugin(), + new OrderAmendmentProductApprovalCartPreCheckPlugin(), + // Plugins from getCartPreCheckPlugins() without CartItemPricePreCheckPlugin + new OrderAmendmentCartPreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + new ResetAmendmentOrderReferencePreReloadItemsPlugin(), + new ResetOriginalSalesOrderItemUnitPricesPreReloadItemsPlugin(), + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPluginsForOrderAmendment(Container $container): array + { + return [ + new OrderAmendmentRemoveInactiveItemsPreReloadPlugin(), + new OrderAmendmentFilterInactiveProductOfferPreReloadItemsPlugin(), + new OrderAmendmentProductApprovalPreReloadItemsPlugin(), + // Plugins from getPreReloadPlugin() without FilterItemsWithoutPricePlugin + ]; + } +} +``` + +
+ +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuotePostMergePlugins(): array + { + return [ + new ResetAmendmentQuoteProcessFlowQuotePostMergePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PriceProduct/PriceProductDependencyProvider.php** + +```php + + */ + protected function getPriceProductPostResolvePlugins(): array + { + return [ + new OriginalSalesOrderItemPriceProductPostResolvePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** + +```php + + */ + protected function getPriceProductFilterExpanderPlugins(): array + { + return [ + new OrderItemPriceProductResolveConditionsPriceProductFilterExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Place an order with a product. +2. Increase the price of the product from the order. +3. Start the order amendment process for the order you've placed. + Make sure the product still has the original price. +4. Go to the order details page and click the product to go to the product details page. + Make sure that, on the product details page, the product still has the original price. + + + +{% endinfo_block %} + +## Add the quotation process context + +Take the steps in the following sections to add the context for quote requests. + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-quote-request-connector: "^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|----------------------------------------------| +| SalesQuoteRequestConnector | vendor/spryker/sales-quote-request-connector | + +{% endinfo_block %} + +### 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------| +| QuoteRequestVersionReferenceOrderPostSavePlugin | Persists the `QuoteTransfer.quoteRequestVersionReference` transfer property in the `spy_sales_order` table. | | Spryker\Zed\SalesQuoteRequestConnector\Communication\Plugin\Sales | +| OrderAmendmentQuoteRequestQuoteCheckPlugin | Returns false if quote is in amendment process; otherwise, returns true. | | Spryker\Client\SalesOrderAmendment\Plugin\QuoteRequest | +| OrderAmendmentQuoteRequestValidatorPlugin | Prevents create and update of a quote request with quote in order amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\QuoteRequest | +| OrderAmendmentQuoteRequestUserValidatorPlugin | Prevents create and update of a quote request with quote in order amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\QuoteRequest | +| QuoteRequestVersionCartReorderValidatorPlugin | Returns `CartReorderResponseTransfer.errors` with error messages if `CartReorderTransfer.order.quoteRequestVersionReference` is set. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostSavePlugins(): array + { + return [ + new QuoteRequestVersionReferenceOrderPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create a request for quote. +2. As an agent, approve the quote request. +3. Place an order that was converted from request for quote. +Make sure the `quote_request_version_reference` column in the `spy_sales_order` table is populated with the correct value. + +{% endinfo_block %} + +**src/Pyz/Client/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestQuoteCheckPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestQuoteCheckPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestValidatorPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteRequestExtension\Dependency\Plugin\QuoteRequestUserValidatorPluginInterface> + */ + protected function getQuoteRequestUserValidatorPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestUserValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php** + +```php + + */ + protected function getCartReorderValidatorPluginsForOrderAmendment(): array + { + return [ + new OriginalSalesOrderItemCartPreReorderPlugin(), + new QuoteRequestVersionCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderPreAddToCartPluginInterface> + */ + protected function getCartReorderPreAddToCartPluginsForOrderAmendment(): array + { + return [ + new RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify that reordering is disabled for orders created from a quote request: + +1. Create a request for quote. +2. As an agent, approve the quote request. +3. Place an order that was converted from the request. +4. Try to reorder the order. + Make sure the error message is displayed: `You cannot reorder this order because it is in the amendment process.`. + +{% endinfo_block %} + +## Enable order editing by company users + +Take the steps in the following sections to enable order editing by company users. + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/company-business-unit-sales-connector: "^1.3.0" spryker/company-sales-connector: "^1.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|------------------------------------------------------| +| CompanyBusinessUnitSalesConnector | vendor/spryker/company-business-unit-sales-connector | +| CompanySalesConnector | vendor/spryker/company-sales-connector | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + + +**>src/data/import/glossary.csv** + +```yaml +permission.name.EditCompanyOrdersPermissionPlugin,Edit Company orders,en_US +permission.name.EditCompanyOrdersPermissionPlugin,Edit Company orders,de_DE +permission.name.EditBusinessUnitOrdersPermissionPlugin,Edit Business unit orders,en_US +permission.name.EditBusinessUnitOrdersPermissionPlugin,Edit Business unit orders,de_DE +``` + + + +2. Import data: + +```bash +console data:import glossary +``` + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------| +| EditCompanyOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same company in the Client layer. | | Spryker\Client\CompanySalesConnector\Plugin\Permission | +| EditCompanyOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same company in the Zed layer. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Permission | +| EditBusinessUnitOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same business unit in the Client layer. | | Spryker\Client\CompanyBusinessUnitSalesConnector\Plugin\Permission | +| EditBusinessUnitOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same business unit in the Zed layer. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Permission | +| EditCompanyOrderCartReorderOrderProviderPlugin | Provides an order if `CartReorderRequestTransfer.companyUserTransfer` has the permission to edit company orders. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\CartReorder | +| EditBusinessUnitOrderCartReorderOrderProviderPlugin | Provides an order if `CartReorderRequestTransfer.companyUserTransfer` has the permission to edit business unit orders. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\CartReorder | +| EditCompanyOrderQuoteExpanderCheckoutPreSavePlugin | Expands `QuoteTransfer` with original order if `QuoteTransfer.customer.companyUserTransfer` has the permission to edit company orders. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Checkout | +| EditBusinessUnitOrderQuoteExpanderCheckoutPreSavePlugin | Expands `QuoteTransfer` with original order if `QuoteTransfer.customer.companyUserTransfer` has the permission to edit business unit orders. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Checkout | + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new EditCompanyOrdersPermissionPlugin(), + new EditBusinessUnitOrdersPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new EditCompanyOrdersPermissionPlugin(), + new EditBusinessUnitOrdersPermissionPlugin(), + ]; + } +} +``` + +3. Execute registered installer: + + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +1. Log in as a company admin. +2. Go to `https://www.mysprykershop.com/en/company/company-role`. +3. Click **Edit** next to a role. + Make sure you can assign the **Edit Company orders** and **Edit Business unit orders** permissions. + +{% endinfo_block %} + +**src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php** + +```php + + */ + protected function getCartReorderOrderProviderPlugins(): array + { + return [ + new EditCompanyOrderCartReorderOrderProviderPlugin(), + new EditBusinessUnitOrderCartReorderOrderProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/CartReorderRestApi/CartReorderRestApiDependencyProvider.php** + +```php + + */ + protected function getCartReorderRequestExpanderPlugins(): array + { + return [ + new CompanyUserCompanyCartReorderRequestExpanderPlugin(), + new CompanyUserCompanyBusinessUnitCartReorderRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new EditCompanyOrderQuoteExpanderCheckoutPreSavePlugin(), + new EditBusinessUnitOrderQuoteExpanderCheckoutPreSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Place an order as a company user. +3. Log in as a different company user from the same company and business unit. +4. Go to `https://www.mysprykershop.com/en/company/company-role`. +5. Click **Edit** next to a role for your user. +6. Assign the **Edit Company orders**, **Edit Business unit orders**, **View Company orders** and **View Business Unit orders** permissions to the role. +7. Re-login as the same user. +8. Go to `https://www.mysprykershop.com/en/customer/order`. +9. Click **Company orders**. +10. Click **Edit order** for an order from the same company or business unit. +Make sure the order amendment starts correctly. +11. Change the order. Make sure the order can be placed successfully. + +{% endinfo_block %} + +## Optionally: Enable order amendment in asynchronous mode + +Order amendment can be enabled in asynchronous mode to improve performance by offloading the most resource-intensive operations to the OMS. + +### 1) Install the required modules + +Some of the Async Order Amendment functionality is provided by an example module. You can install it to see how it works in practice and replace it with your own implementation if needed. + +Install the OrderAmendmentExample module using Composer: + +```bash +composer require spryker/order-amendment-example: "^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------|----------------------------------------| +| OrderAmendmentExample | vendor/spryker/order-amendment-example | + +{% endinfo_block %} + +### 2) Set up configuration + +1. Add the following configuration: + +```php + + */ + public function getQuoteFieldsAllowedForSaving(): array + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::CUSTOMER, + QuoteTransfer::CUSTOMER_REFERENCE, + QuoteTransfer::STORE, + QuoteTransfer::PAYMENT, + QuoteTransfer::PAYMENTS, + QuoteTransfer::BILLING_ADDRESS, + QuoteTransfer::SHIPPING_ADDRESS, + QuoteTransfer::ORDER_CUSTOM_REFERENCE, + QuoteTransfer::SHIPMENT, + QuoteTransfer::ERRORS, + ]); + } +} +``` + +2. Remove the quote fields that are not relevant for your project. + +{% info_block warningBox "Verification" %} + +Make sure `SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin` saves the specified fields to `spy_sales_order_amendment_quote`. + +{% endinfo_block %} + +#### Configure OMS + +1. Create the async Order amendment OMS subprocess file using the example: + +
+ config/Zed/oms/DummySubprocess/DummyOrderAmendmentAsync01.xml + +```xml + + + + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + + + + order amendment draft pending + order amendment draft + + + + order amendment draft + order amendment draft applied + apply-order-amendment-draft + + + + order amendment draft applied + draft apply succeeded + + + + order amendment draft applied + draft apply failed + + + + draft apply succeeded + grace period pending + notify-order-amendment-applied + + + + draft apply failed + grace period pending + notify-order-amendment-failed + + + + order amendment + order amendment draft pending + start-order-amendment-draft + + + + + + + + + + + + + +``` + +
+ +2. Adjust your OMS state machine configuration according to your project's requirements. + +
config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyOrderAmendmentAsync + + + + + + + +``` + +
+ +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01 [preview-version]** and make sure the `order amendment draft pending` state exists. + +{% endinfo_block %} + +### 3) Add translations + +1. Append glossary according to your configuration: + + +
src/data/import/glossary.csv + +```yaml +sales_order_amendment_oms.mail.order_amendment_applied.subject,Your order has been successfully updated,en_US +sales_order_amendment_oms.mail.order_amendment_applied.subject,Ihre Bestellung wurde erfolgreich aktualisiert,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.salutation,Hello,en_US +sales_order_amendment_oms.mail.order_amendment_applied.salutation,Hallo,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.title,Your order has been successfully updated,en_US +sales_order_amendment_oms.mail.order_amendment_applied.title,Ihre Bestellung wurde erfolgreich aktualisiert,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_1,Thank you for shopping at Spryker Shop!,en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_1,Danke für deine Bestellung beim Spryker Shop!,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_2,We are writing to let you know that your order has been successfully updated as requested. You will receive a shipping confirmation by e-mail as soon as your updated order has been sent.,en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_2,"Wir möchten Sie darüber informieren, dass Ihre Bestellung wie gewünscht erfolgreich aktualisiert wurde. Sobald Ihre aktualisierte Bestellung versendet wurde, erhalten Sie eine Versandbestätigung per E-Mail.",de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_3,"If you change your mind, you can return the items within 14 days after delivery. We hope you enjoy your purchase!",en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_3,"Falls Sie es sich anders überlegen, können Sie die Artikel innerhalb von 14 Tagen nach Lieferung zurücksenden. Wir wünschen Ihnen viel Freude mit Ihrem Einkauf!",de_DE +sales_order_amendment_oms.mail.order_amendment_failed.subject,Order edit could not be saved,en_US +sales_order_amendment_oms.mail.order_amendment_failed.subject,Bestelländerung konnte nicht gespeichert werden,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.salutation,Hello,en_US +sales_order_amendment_oms.mail.order_amendment_failed.salutation,Hallo,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.title,Order edit could not be saved,en_US +sales_order_amendment_oms.mail.order_amendment_failed.title,Bestelländerung konnte nicht gespeichert werden,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_1,Thank you for shopping at Spryker Shop!,en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_1,Danke für deine Bestellung beim Spryker Shop!,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_2,"We are writing to let you know that we tried to update your order as requested. Unfortunately, the changes could not be saved due to the following error:",en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_2,"Wir möchten Sie darüber informieren, dass wir versucht haben, Ihre Bestellung wie gewünscht zu aktualisieren. Leider konnten die Änderungen aufgrund des folgenden Fehlers nicht gespeichert werden:",de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_3,"Your original order remains unchanged. If you need help or would like to try again, please contact our customer service team. We’re happy to assist you.",en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_3,"Ihre ursprüngliche Bestellung bleibt unverändert. Wenn Sie Hilfe benötigen oder es erneut versuchen möchten, wenden Sie sich bitte an unser Kundenservice — wir helfen Ihnen gerne weiter.",de_DE +sales_order_amendment_oms.mail.footer.text.line_1,Viele Grüße,de_DE +sales_order_amendment_oms.mail.footer.text.line_1,Have a great day!,en_US +sales_order_amendment_oms.mail.footer.text.line_2,Dein Spryker Shop,de_DE +sales_order_amendment_oms.mail.footer.text.line_2,Your Spryker Shop,en_US +sales_order_amendment_oms.error.apply_order_amendment_draft_failed,We could not process your order edit.,en_US +sales_order_amendment_oms.error.apply_order_amendment_draft_failed,Ihre Bestelländerung konnte nicht bearbeitet werden.,de_DE +oms.state.order-amendment-draft-pending,Editing in Progress,en_US +oms.state.order-amendment-draft-pending,Bestelländerung in Bearbeitung,de_DE +oms.state.order-amendment-draft-applied,Editing in Progress,en_US +oms.state.order-amendment-draft-applied,Bestelländerung in Bearbeitung,de_DE +``` + +
+ + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| QuoteToSaveOrderMapperCheckoutDoSaveOrderPlugin | Maps an original order from `QuoteTransfer.originalOrder` to `SaveOrderTransfer`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| StartOrderAmendmentDraftCheckoutPostSavePlugin | Triggers the OMS event to start the order amendment draft. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| NotifyOrderAmendmentAppliedMailTypeBuilderPlugin | Builds `MailTransfer` with data for the `notify order amendment applied` email. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Mail | +| NotifyOrderAmendmentFailedMailTypeBuilderPlugin | Builds `MailTransfer` with data for the `notify order amendment failed` email. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Mail | +| ApplyOrderAmendmentDraftCommandByOrderPlugin | Places an order with a found sales order amendment quote and quote process flow set to `order-amendment`. | | Spryker\Zed\OrderAmendmentExample\Communication\Plugin\Oms | +| NotifyOrderAmendmentAppliedCommandPlugin | When a sales order amendment quote is found, sends an email notification about successfully applying order amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| NotifyOrderAmendmentFailedCommandPlugin | If a sales order amendment quote is found, sends an email notification about failing order amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| IsOrderAmendmentDraftSuccessfullyAppliedConditionPlugin | Returns `true` if the sales order amendment quote is not found; otherwise returns `false`. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| ShipmentGroupsSalesOrderAmendmentQuoteExpanderPlugin | Expands each `SalesOrderAmendmentQuoteTransfer` in `SalesOrderAmendmentQuoteCollectionTransfer.salesOrderAmendmentQuotes` with shipment groups data. | | Spryker\Zed\Shipment\Communication\Plugin\SalesOrderAmendment | + +
+ src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + */ + protected function getCheckoutOrderSaversForOrderAmendmentAsync(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new QuoteToSaveOrderMapperCheckoutDoSaveOrderPlugin(), #Order Amendment Feature + new SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin(), #Order Amendment Feature + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooksForOrderAmendmentAsync(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new StartOrderAmendmentDraftCheckoutPostSavePlugin(), #Order Amendment Feature + ]; + } +} +``` + +
+ +
+ src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new NotifyOrderAmendmentAppliedMailTypeBuilderPlugin(), + new NotifyOrderAmendmentFailedMailTypeBuilderPlugin(), + ]; + } +} +``` + +
+ +
+ src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new ApplyOrderAmendmentDraftCommandByOrderPlugin(), 'OrderAmendmentAsync/ApplyOrderAmendmentDraft'); + $commandCollection->add(new NotifyOrderAmendmentAppliedCommandPlugin(), 'OrderAmendmentAsync/NotifyOrderAmendmentApplied'); + $commandCollection->add(new NotifyOrderAmendmentFailedCommandPlugin(), 'OrderAmendmentAsync/NotifyOrderAmendmentFailed'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendConditionPlugins(Container $container): Container // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + $container->extend(self::CONDITION_PLUGINS, function (ConditionCollectionInterface $conditionCollection) { + $conditionCollection + ->add(new IsOrderAmendmentDraftSuccessfullyAppliedConditionPlugin(), 'DummyOrderAmendmentAsync/IsSuccessfullyApplied'); + + return $conditionCollection; + }); +} +``` + +
+ +
+ src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getSalesOrderAmendmentQuoteExpanderPlugins(): array + { + return [ + new ShipmentGroupsSalesOrderAmendmentQuoteExpanderPlugin(), + ]; + } +} +``` + +
+ + +### Enable asynchronous order amendment + +You can set up asynchronous order amendment in two ways: + +1. Conditionally: The standard order amendment flow starts first, then switches to the asynchronous flow based on specific conditions. +2. Unconditionally: The asynchronous flow runs from the start. + +Follow the instructions in the following sections according to how you want to set it up. + +#### Option 1: Enable async order amendment conditionally + +The Example module lets you enable the asynchronous order amendment flow based on the selected payment method. To configure this behavior, follow the steps: + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| PaymentToAsyncOrderAmendmentFlowCheckoutPreSavePlugin | Sets `QuoteTransfer.quoteProcessFlow` to a new `QuoteProcessFlowTransfer` with the `order-amendment-async` name. | | Spryker\Zed\OrderAmendmentExample\Communication\Plugin\Checkout | + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new PaymentToAsyncOrderAmendmentFlowCheckoutPreSavePlugin(), + ]; + } +} +``` + + +2. Specify the payment methods to enable the asynchronous order amendment checkout process flow for: + +**src/Pyz/Zed/OrderAmendmentExample/OrderAmendmentExampleConfig.php** + +```php + + */ + protected const ASYNC_ORDER_AMENDMENT_PAYMENT_METHOD_NAMES = [ + 'dummyPaymentInvoice', + ]; +} +``` + +#### Option 2: Enable async order amendment unconditionally + +1. Specify the order amendment quote process flow: + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php +setName(SalesOrderAmendmentExtensionContextsInterface::CONTEXT_ORDER_AMENDMENT_ASYNC); + } +} +``` + +2. Enable plugins for the asynchronous order amendment checkout process flow: + +Make sure all the needed plugins registered for the `order-amendment` checkout process flow are also registered for the `order-amendment-async` checkout process flow. + +Replace dependency provider methods postfixed with `ForOrderAmendment` with `ForOrderAmendmentAsync` methods in the following modules: +- `Cart` +- `CartReorder` +- `Checkout` +- `CheckoutRestApi` +- `Sales` + + +{% info_block warningBox "Verification" %} + +1. Place an order. +2. Initiate and finish order amendment. Make sure the following applies: +- The order doesn't show the changes you've submitted. +- The quote has been saved to the `spy_sales_order_amendment_quote` table. +- The order items are in the `order amendment draft pending` state. +3. Execute `console oms:check-condition` command. +- Make sure the order items are in the `order amendment draft applied` state. +- Make sure the changes made in the order have been applied to the order. +- Make sure an email notification about order amendment has been sent. + +{% endinfo_block %} + +#### Optional: Project level customizations + +- Display errors: Display errors appearing during the `ApplyOrderAmendmentDraftCommandByOrderPlugin` execution. If any errors occur, `ApplyOrderAmendmentDraftCommandByOrderPlugin` saves them to `spy_sales_order_amendment_quote` table to the `quote_data` with the other Quote data. You can obtain them from the Quote and display in the frontend. +- Customize email templates: Customize email templates for the order amendment applied and failed notifications by redefining Twig templates: + - `notify-order-amendment-applied.html.twig` + - `notify-order-amendment-applied.text.twig` + - `notify-order-amendment-failed.html.twig` + - `notify-order-amendment-failed.text.twig` +- Customize the OMS process: you can customize you OMS processes to add more states and transitions, for example, to add a state and transition to implement the retry logic for the order amendment draft applying in case of errors. + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/order-amendment: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|--------------------------------------------------| +| SalesOrderAmendmentWidget | vendor/spryker-shop/sales-order-amendment-widget | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------| +| SalesOrderAmendmentWidgetConfig::ORDER_AMENDMENT_CART_REORDER_STRATEGY | Defines the cart reorder strategy for order amendment, for example `replace`, `new`. The corresponding strategy plugin handling the specified value must be registered in the project. | Pyz\Yves\SalesOrderAmendmentWidget | +| SalesOrderAmendmentWidgetConfig::IS_ORDER_AMENDMENT_CONFIRMATION_ENABLED | Defines if the order amendment confirmation popup window is displayed. | Pyz\Yves\SalesOrderAmendmentWidget | + +**src/Pyz/Yves/SalesOrderAmendmentWidget/SalesOrderAmendmentWidgetConfig.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SalesOrderAmendmentWidgetRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure order amendment is available on order details and orders pages. + +{% endinfo_block %} + +### 5) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------|---------------------------------------------------------------------|---------------|---------------------------------------------------| +| OrderAmendmentWidget | Enables customers to edit existing orders. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| CancelOrderAmendmentWidget | Enables customers to cancel order amendment requests. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| OrderAmendmentItemLinkWidget | Handles URL generation for deactivated products in order amendment. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| UpdateOrderCheckoutSubmitButtonTextWidget | Displays the text for the submit order update button. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| UpdateOrderCheckoutSuccessTitleWidget | Displays the title for the successful order update page. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderAmendmentWidget::class, + CancelOrderAmendmentWidget::class, + OrderAmendmentItemLinkWidget::class, + UpdateOrderCheckoutSubmitButtonTextWidget::class, + UpdateOrderCheckoutSuccessTitleWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Widgets in Twig" %} + +If your project uses Twig templates, make sure the corresponding widgets are used in the redefined templates. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|-------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OrderAmendmentWidget | Make sure the edit order button is displayed on the orders and order details pages. | +| CancelOrderAmendmentWidget | Make sure the cancel order amendment button is displayed on the Cart page. | +| OrderAmendmentItemLinkWidget | Make sure that, on the Cart page, product URLs are not displayed for deactivated products. | +| UpdateOrderCheckoutSubmitButtonTextWidget | Make sure that, on the Checkout summary page, the submit button text is displayed as configured for the `sales_order_amendment_widget.summary_step.update.order` glossary key. | +| UpdateOrderCheckoutSuccessTitleWidget | Make sure that, on the Successful order update page, the title is displayed as configured for the `sales_order_amendment_widget.success_step.update.success.title` glossary key. | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Make sure that after clicking the edit order button the specified reorder strategy for order amendment is applied (the current cart items are replaced by the amended order items in case the `replace` strategy is applied, new cart is created in case the `new` strategy is applied). + +- Ensure that clicking the "Edit Order" button applies the specified reorder strategy for order amendment: + - `replace` strategy: current cart items are replaced with amended order items + - `new` strategy: a new cart is created +- If the `IS_ORDER_AMENDMENT_CONFIRMATION_ENABLED` configuration is set to `true`, make sure that the order amendment confirmation popup window is displayed. + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature.md index 0f52dd7b742..9cd8629261b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature.md @@ -1,11 +1,11 @@ -This document describes how to install the [Order Management](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. +This document describes how to install the [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. {% info_block warningBox "Included features" %} -The following feature integration guide expects the basic feature to be in place. It only adds the following functionalities: +This guide expects the basic feature to be in place. It only adds the following functionalities: - Order cancellation behavior - Show `display names` for order item states @@ -27,15 +27,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Mailing and Notifications | {{site.version}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/{{site.version}}/install-the-mailing-and-notifications-feature.html) | -| Order Management | {{site.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Persistent Cart | {{site.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Persistent Cart | {{page.release_tag}} | | ### 1) Install the required modules ```bash -composer require spryker-feature/order-management: "{{site.version}}" --update-with-dependencies +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -82,29 +82,43 @@ Make sure that the following changes have been applied in the database: Make sure the following changes have been applied in transfer objects: -| TRANSFER | TYPE | EVENT | PATH | -|---------------------------------------------------|----------|---------|----------------------------------------------------------------------| -| OrderInvoice | class | created | src/Generated/Shared/Transfer/OrderInvoiceTransfer | -| OrderInvoiceSendRequest | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendRequestTransfer | -| OrderInvoiceSendResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendResponseTransfer | -| OrderInvoiceCriteria | class | created | src/Generated/Shared/Transfer/OrderInvoiceCriteriaTransfer | -| OrderInvoiceCollection | class | created | src/Generated/Shared/Transfer/OrderInvoiceCollectionTransfer | -| OrderInvoiceResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceResponseTransfer | -| OrderCustomReferenceResponse | class | created | src/Generated/Shared/Transfer/OrderCustomReferenceResponseTransfer | -| OrderResourceCollection | class | created | src/Generated/Shared/Transfer/OrderResourceCollectionTransfer | -| OrdersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrdersBackendApiAttributesTransfer | -| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | -| Mail.recipientBccs | property | created | src/Generated/Shared/Transfer/MailTransfer | -| Quote.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteTransfer | -| QuoteUpdateRequestAttributes.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | -| Order.orderCustomReference | property | created | src/Generated/Shared/Transfer/OrderTransfer | -| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | -| OrderMatrix | class | created | src/Generated/Shared/Transfer/OrderMatrixTransfer | -| OrderMatrixCriteria | class | created | src/Generated/Shared/Transfer/OrderMatrixCriteriaTransfer | -| OrderMatrixRequest | class | created | src/Generated/Shared/Transfer/OrderMatrixRequestTransfer | -| IndexedOrderMatrixResponse | class | created | src/Generated/Shared/Transfer/IndexedOrderMatrixResponseTransfer | -| OrderMatrixConditions | class | created | src/Generated/Shared/Transfer/OrderMatrixConditionsTransfer | -| OrderMatrixCollection | class | created | src/Generated/Shared/Transfer/OrderMatrixCollectionTransfer | +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------------|----------|---------|------------------------------------------------------------------------------| +| OrderInvoice | class | created | src/Generated/Shared/Transfer/OrderInvoiceTransfer | +| OrderInvoiceSendRequest | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendRequestTransfer | +| OrderInvoiceSendResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendResponseTransfer | +| OrderInvoiceCriteria | class | created | src/Generated/Shared/Transfer/OrderInvoiceCriteriaTransfer | +| OrderInvoiceCollection | class | created | src/Generated/Shared/Transfer/OrderInvoiceCollectionTransfer | +| OrderInvoiceResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceResponseTransfer | +| OrderCustomReferenceResponse | class | created | src/Generated/Shared/Transfer/OrderCustomReferenceResponseTransfer | +| OrderResourceCollection | class | created | src/Generated/Shared/Transfer/OrderResourceCollectionTransfer | +| OrdersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrdersBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| Customer | class | created | src/Generated/Shared/Transfer/CustomerTransfer | +| Mail.recipientBccs | property | created | src/Generated/Shared/Transfer/MailTransfer | +| Quote.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteUpdateRequestAttributes.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| Order.orderCustomReference | property | created | src/Generated/Shared/Transfer/OrderTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Quote.quoteProcessFlow | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Quote.originalOrder | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Item.originalSalesOrderItemGroupKey | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| QuoteProcessFlow | class | created | src/Generated/Shared/Transfer/QuoteProcessFlowTransfer | +| SalesExpenseCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionDeleteCriteriaTransfer | +| SalesExpenseCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionResponseTransfer | +| SalesOrderItemCollectionRequest | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionRequestTransfer | +| SalesOrderItemCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionDeleteCriteriaTransfer | +| SalesOrderItemCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionResponseTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| SalesExpenseCollection | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionTransfer | +| OmsOrderItemState | class | created | src/Generated/Shared/Transfer/OmsOrderItemStateTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| OrderMatrix | class | created | src/Generated/Shared/Transfer/OrderMatrixTransfer | +| OrderMatrixCriteria | class | created | src/Generated/Shared/Transfer/OrderMatrixCriteriaTransfer | +| OrderMatrixRequest | class | created | src/Generated/Shared/Transfer/OrderMatrixRequestTransfer | +| IndexedOrderMatrixResponse | class | created | src/Generated/Shared/Transfer/IndexedOrderMatrixResponseTransfer | +| OrderMatrixConditions | class | created | src/Generated/Shared/Transfer/OrderMatrixConditionsTransfer | +| OrderMatrixCollection | class | created | src/Generated/Shared/Transfer/OrderMatrixCollectionTransfer | {% endinfo_block %} @@ -332,9 +346,8 @@ Verify the invoice state machine configuration in the following step. 1. In the Back Office, go to **Administration > OMS**. 2. Select **DummyPayment01 [preview-version]** and check the following: - -- The `new`, `payment pending`, `paid`, and `confirmed` states keep the `cancellable` tag inside. -- The `invoice generated` state has been added. +- The `new`, `payment pending`, `paid`, and `confirmed` states have the `cancellable` tag inside. +- The `invoice generated` state exists. {% endinfo_block %} @@ -671,9 +684,9 @@ By default, in state machine names, the following applies: {% endinfo_block %} 1. Append the glossary according to your configuration: -
src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php -**src/data/import/glossary.csv** +
+ src/data/import/glossary.csv ```csv sales.error.customer_order_not_found,Customer Order not found.,en_US @@ -738,12 +751,14 @@ Set up the following behaviors. #### Set up order item display name -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -|---------------------------------------------------|------------------------------------------------|---------------|----------------------------------------------| -| CurrencyIsoCodeOrderItemExpanderPlugin | Expands order items with currency codes (ISO). | | Spryker\Zed\Sales\Communication\Plugin\Sales | -| StateHistoryOrderItemExpanderPlugin | Expands order items with history states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | -| ItemStateOrderItemExpanderPlugin | Expands order items with item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | -| OrderAggregatedItemStateSearchOrderExpanderPlugin | Expands orders with aggregated item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------|---------------|---------------------------------------------------------------| +| CurrencyIsoCodeOrderItemExpanderPlugin | Expands order items with currency codes (ISO). | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| StateHistoryOrderItemExpanderPlugin | Expands order items with history states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| ItemStateOrderItemExpanderPlugin | Expands order items with item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OrderAggregatedItemStateSearchOrderExpanderPlugin | Expands orders with aggregated item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| PaymentGiftCardSalesPaymentPreDeletePlugin | Removes found payment gift card entities. | | Spryker\Zed\GiftCard\Communication\Plugin\SalesPayment | +| GiftCardBalanceLogSalesPaymentPreDeletePlugin | Removes gift card balance log entities. | | Spryker\Zed\GiftCardBalance\Communication\Plugin\SalesPayment |
src/Pyz/Zed/Sales/SalesDependencyProvider.php @@ -787,6 +802,34 @@ class SalesDependencyProvider extends SprykerSalesDependencyProvider
+
src/Pyz/Zed/SalesPayment/SalesPaymentDependencyProvider.php + +```php + + */ + protected function getSalesPaymentPreDeletePlugins(): array + { + return [ + new PaymentGiftCardSalesPaymentPreDeletePlugin(), + new GiftCardBalanceLogSalesPaymentPreDeletePlugin(), + ]; + } +} +``` + +
+ {% info_block warningBox "Verification" %} - Make sure that every order item from the `SalesFacade::getOrderItems()` result contains the following: @@ -1071,7 +1114,7 @@ class QuoteDependencyProvider extends SprykerQuoteDependencyProvider 1. In the Back Office, go to **Sales**>**Orders**. 2. Click **View** next to an order. -Make sure that, on the order details page, the *Custom Order Reference* section with the **Edit Reference** button is displayed. +Make sure that, on the order details page, the **Custom Order Reference** section with the **Edit Reference** button is displayed. {% endinfo_block %} @@ -1172,9 +1215,11 @@ Make sure that, on the following Storefront pages, even if the `display` propert 2. Make sure the `sales-orders` resource is returned as a relationship to the `picking-list-items` resource. -`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-orders` +Request example: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-orders` +
Response body example + ```json { "data": { @@ -1335,15 +1380,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------| - | -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| -| Checkout | {{site.version}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | -| Customer Account Management | {{site.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/order-management: "{{site.version}}" --update-with-dependencies +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1414,7 +1459,7 @@ class RouterDependencyProvider extends SprykerRouterDependencyProvider {% info_block warningBox "Verification" %} -Make sur the `yves.mysprykershop.com/order/cancel` route is available for POST requests. +Make sure the `yves.mysprykershop.com/order/cancel` route is available for POST requests. {% endinfo_block %} @@ -1422,7 +1467,7 @@ Make sur the `yves.mysprykershop.com/order/cancel` route is available for POST r Set up the following behaviors. -#### Set up an order cancellation behavior +#### Set up order cancellation Set up the following plugin: @@ -1458,7 +1503,6 @@ class ShopApplicationDependencyProvider extends SprykerShopApplicationDependency Make sure the following applies: -- The `OrderCancelButtonWidget` widget has been registered. - On the **Order Details** page on the Storefront, the **Cancel** button is displayed. - In the **item state** table column on the **Customer Overview** and **Order History** pages on the Storefront, aggregated order item states are displayed. - On the **Returns** page on the Storefront, aggregated return item states are displayed. @@ -1541,7 +1585,7 @@ console frontend:yves:build {% info_block warningBox "Verification" %} -Log in as a customer on the Storefront and check that the **Custom order reference** form is displayed on the order view page. +Log in as a customer on the Storefront and check that, on the order view page, the **Custom order reference** form is displayed. {% endinfo_block %} @@ -1551,12 +1595,12 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |--------------------------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Install the Comments + Order Management feature | | [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | -| Install the Order Management Glue API | | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | -| Install the Company Account + Order Management feature | | [Install the Company Account + Order Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html) | -| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | -| Install the Customer Account Management + Order Management feature | | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | -| Install the Packaging Units feature | | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | -| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | -| Install the Product Options + Order Management feature | | [Install the Product Options + Order Management feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | -| Install the Promotions & Discounts + Order Management feature | | [Install the Promotions & Discounts + Order Management feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.html) | +| Install the Comments + Order Management feature | | [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | +| Install the Order Management Glue API | | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Install the Company Account + Order Management feature | | [Install the Company Account + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Customer Account Management + Order Management feature | | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | +| Install the Packaging Units feature | | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Product Options + Order Management feature | | [Install the Product Options + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | +| Install the Promotions & Discounts + Order Management feature | | [Install the Promotions & Discounts + Order Management feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature0.md b/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature0.md new file mode 100644 index 00000000000..5bca9a3802a --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-order-management-feature0.md @@ -0,0 +1,1451 @@ + + + +This document describes how to install the [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. + +{% info_block warningBox "Included features" %} + +The following feature integration guide expects the basic feature to be in place. It only adds the following functionalities: + +- Order cancellation behavior +- Show `display names` for order item states +- Invoice generation +- Custom order reference +- Sales Orders Backend API + +{% endinfo_block %} + + +## Install feature core + +Follow the steps below to install the Order Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Persistent Cart | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|---------------------------------------------------| +| OrderCustomReference | vendor/spryker/order-custom-reference | +| OrderCustomReferenceGui | vendor/spryker/order-custom-reference-gui | +| SalesOrdersBackendApi | vendor/spryker/sales-orders-backend-api | +| SalesOrdersBackendApiExtension | vendor/spryker/sales-orders-backend-api-extension | + + {% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------|--------|---------| +| spy_sales_order_invoice | table | created | +| spy_sales_order.order_custom_reference | column | created | +| spy_sales_order.uuid | column | created | +| spy_sales_order_item.uuid | column | created | +| spy_sales_order_address.uuid | column | created | +| spy_sales_order_address_history.uuid | column | created | +| spy_sales_order_totals.uuid | column | created | +| spy_sales_order_note.uuid | column | created | +| spy_sales_order_comment.uuid | column | created | +| spy_sales_expense.uuid | column | created | +| spy_sales_order_item_metadata.uuid | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------------|----------|---------|----------------------------------------------------------------------| +| OrderInvoice | class | created | src/Generated/Shared/Transfer/OrderInvoiceTransfer | +| OrderInvoiceSendRequest | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendRequestTransfer | +| OrderInvoiceSendResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendResponseTransfer | +| OrderInvoiceCriteria | class | created | src/Generated/Shared/Transfer/OrderInvoiceCriteriaTransfer | +| OrderInvoiceCollection | class | created | src/Generated/Shared/Transfer/OrderInvoiceCollectionTransfer | +| OrderInvoiceResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceResponseTransfer | +| OrderCustomReferenceResponse | class | created | src/Generated/Shared/Transfer/OrderCustomReferenceResponseTransfer | +| OrderResourceCollection | class | created | src/Generated/Shared/Transfer/OrderResourceCollectionTransfer | +| OrdersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrdersBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| Mail.recipientBccs | property | created | src/Generated/Shared/Transfer/MailTransfer | +| Quote.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteUpdateRequestAttributes.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| Order.orderCustomReference | property | created | src/Generated/Shared/Transfer/OrderTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +Set up the following configuration. + +#### Configure OMS + +{% info_block infoBox %} + +- The `cancellable` flag allows proceeding to the `order cancel` process. +- The `display` attribute allows attaching the `display name` attribute to specific order item states. +- The `DummyInvoice` subprocess allows triggering `invoice-generate` events. + +{% endinfo_block %} + +1. Create the OMS subprocess file: + +
+ config/Zed/oms/DummySubprocess/DummyInvoice01.xml + +```xml + + + + + + + + + + + confirmed + invoice generated + invoice-generate + + + + invoice generated + waiting + invoice-generated + + + + + + + + + + +``` + +
+ +{% info_block warningBox "Verification" %} + +Verify the invoice state machine configuration in the following step. + +{% endinfo_block %} + +2. Using the following process as an example, adjust your OMS state machine configuration according to your project's requirements. + +
config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + + DummyInvoice + + + + + cancellable + + + cancellable + + + exclude from customer + + + exclude from customer + + + cancellable + + + cancellable + + + + + + + + + + + new + payment pending + authorize + + + + new + invalid + authorize + + + + new + cancelled + cancel + + + + payment pending + paid + pay + + + + payment pending + cancelled + pay + + + + payment pending + cancelled + cancel + + + + paid + confirmed + confirm + + + + confirmed + waiting + skip timeout + + + + confirmed + cancelled + cancel + + + + waiting + exported + check giftcard purchase + + + + waiting + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + +``` + +
+ +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01 [preview-version]** and check the following: + +- The `new`, `payment pending`, `paid`, and `confirmed` states keep the `cancellable` tag inside. +- The `invoice generated` state has been added. + +{% endinfo_block %} + +#### Configure the fallback display name prefix + +Adjust configuration according to your project's requirements: + +**src/Pyz/Zed/Oms/OmsConfig.php** + +```php +src/Pyz/Zed/SalesInvoice/Presentation/Invoice/Invoice.twig + +```twig +{%- raw -%} +{# @var order \Generated\Shared\Transfer\OrderTransfer #} +{# @var invoice \Generated\Shared\Transfer\OrderInvoiceTransfer #} + + + + + + + + + + + + + + + + + + + + + +
+ Logo + + {{ 'order_invoice.invoice_template.company.name' | trans }} +
{{ 'order_invoice.invoice_template.company.group' | trans }}
+
{{ 'order_invoice.invoice_template.company.address' | trans | raw }}
+
+
+ {{ 'order_invoice.invoice_template.merchant.name' | trans }} +
{{ 'order_invoice.invoice_template.merchant.address' | trans }}
+
+
+ {{ order.billingAddress.firstName }} {{ order.billingAddress.lastName }}
+ {{ order.billingAddress.address1 }} {{ order.billingAddress.address2 }} {{ order.billingAddress.address3 }}
+ {{ order.billingAddress.zipcode }} {{ order.billingAddress.city }}
+ {{ order.billingAddress.region }} +
+
+
{{ invoice.issueDate | date('d. M Y') }}
+
+ + + + + + + + +
+
+ {{ 'order_invoice.invoice_template.reference' | trans }} {{ invoice.reference }} +
+
+
{{ 'order_invoice.invoice_template.introduction' | trans }}
+
+ + + + + + + + + + + + + {% set linenumber = 0 %} + {% set renderedBundles = [] %} + {% set taxes = {} %} + {% set itemSumByTaxes = {} %} + + {% for item in order.items %} + {# @var item \Generated\Shared\Transfer\ItemTransfer #} + + {% set taxRate = item.taxRate %} + {% set rateSum = taxes[item.taxRate] | default(0) + item.sumTaxAmountFullAggregation %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + item.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + {% if item.productBundle is not defined or item.productBundle is null %} + {% set linenumber = linenumber + 1 %} + + + + + + + + + {% endif %} + + {% if item.productBundle is defined and item.productBundle is not null %} + {% if item.relatedBundleItemIdentifier not in renderedBundles %} + {# @var productBundle \Generated\Shared\Transfer\ItemTransfer #} + + {% set linenumber = linenumber + 1 %} + {% set productBundle = item.productBundle %} + + + + + + + + + + {% for bundleditem in order.items %} + {% if item.relatedBundleItemIdentifier == bundleditem.relatedBundleItemIdentifier %} + + + + + + + + {% endif %} + {% endfor %} + + {% set renderedBundles = renderedBundles | merge([item.relatedBundleItemIdentifier]) %} + {% endif %} + {% endif %} + {% endfor %} + + {% for expense in order.expenses %} + {% set linenumber = linenumber + 1 %} + {% set taxRate = expense.taxRate %} + {% set rateSum = taxes[expense.taxRate] | default(0) + expense.sumTaxAmount %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + expense.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + + + + + + + + {% endfor %} + + + + + + + + + + + + + {% for rate, tax in taxes %} + + + + + + + {% endfor %} + + + + + + + + + + + + +
{{ 'order_invoice.invoice_template.table.number' | trans }}{{ 'order_invoice.invoice_template.table.quantity' | trans }}{{ 'order_invoice.invoice_template.table.name' | trans }}{{ 'order_invoice.invoice_template.table.tax' | trans }}{{ 'order_invoice.invoice_template.table.price' | trans | raw }}
{{ linenumber }}{{ item.quantity }}{{ item.name }}{{ item.taxRate | number_format }}%{{ item.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
{{ linenumber }}{{ productBundle.quantity }}{{ productBundle.name }}{{ productBundle.taxRate | number_format }}%{{ productBundle.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
{{ bundleditem.quantity }}{{ bundleditem.name }}{{ bundleditem.taxRate | number_format }}%{{ bundleditem.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
{{ linenumber }}{{ expense.name }}{{ expense.taxRate | number_format }}%{{ expense.sumPrice | money(true, order.currencyIsoCode) }}
{{ 'order_invoice.invoice_template.table.subtotal' | trans }}{{ order.totals.subtotal | money(true, order.currencyIsoCode) }}
{{ 'order_invoice.invoice_template.table.discount' | trans }}{{ order.totals.discountTotal | money(true, order.currencyIsoCode) }}
{{ 'order_invoice.invoice_template.table.tax.included' | trans({ '%tax_rate%': rate | number_format }) }}{{ (itemSumByTaxes[rate] - tax) | money(true, order.currencyIsoCode) }}{{ 'order_invoice.invoice_template.table.tax.name' | trans }}{{ tax | money(true, order.currencyIsoCode) }}
{{ 'order_invoice.invoice_template.table.total.net' | trans }}{{ (order.totals.grandTotal - order.totals.taxTotal.amount) | money(true, order.currencyIsoCode) }}
{{ 'order_invoice.invoice_template.table.grandtotal' | trans }}{{ order.totals.grandTotal | money(true, order.currencyIsoCode) }}
+ + +{% endraw %} +``` + +
+ +{% info_block warningBox "Verification" %} + +You will be able to verify the invoice template configuration in a later step. + +{% endinfo_block %} + + +### 4) Add translations + + +{% info_block errorBox %} + +An `oms.state.` prefixed translation key is a combination of the `OmsConfig::getFallbackDisplayNamePrefix()` and a normalized state machine name. If you have different OMS state machine states or a fallback display name prefix, adjust the corresponding translations. + +{% endinfo_block %} + + +{% info_block infoBox "Normalized state machine names" %} + +By default, in state machine names, the following applies: + +- Spaces are replaced with dashes. +- All the words are decapitalized. + +{% endinfo_block %} + +1. Append the glossary according to your configuration: +
src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +**src/data/import/glossary.csv** + +```csv +sales.error.customer_order_not_found,Customer Order not found.,en_US +sales.error.customer_order_not_found,Die Bestellung wurde nicht gefunden.,de_DE +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Order cannot be canceled because of wrong item state.,en_US +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Die Bestellung kann wegen dem falschen Artikelstatus nicht storniert werden.,de_DE +oms.state.new,New,en_US +oms.state.new,Neu,de_DE +oms.state.payment-pending,Payment pending,en_US +oms.state.payment-pending,Ausstehende Zahlung,de_DE +oms.state.invalid,Ivalid,en_US +oms.state.invalid,Ungültig,de_DE +oms.state.canceled,Canceled,en_US +oms.state.canceled,Abgebrochen,de_DE +oms.state.paid,Paid,en_US +oms.state.paid,Bezahlt,de_DE +oms.state.confirmed,Confirmed,en_US +oms.state.confirmed,Bestätigt,de_DE +oms.state.waiting,Waiting,en_US +oms.state.waiting,Warten,de_DE +oms.state.exported,Exported,en_US +oms.state.exported,Exportiert,de_DE +oms.state.shipped,Shipped,en_US +oms.state.shipped,Versandt,de_DE +oms.state.delivered,Delivered,en_US +oms.state.delivered,Geliefert,de_DE +quote_request.status.closed,Closed,en_US +quote_request.status.closed,Geschlossen,de_DE +mail.order_invoice.subject,"Invoice: %invoiceReference%",en_US +mail.order_invoice.subject,"Rechnung: %invoiceReference%",de_DE +order_custom_reference.reference_saved,Custom order reference was successfully saved.,en_US +order_custom_reference.reference_saved,Ihre Bestellreferenz wurde erfolgreich gespeichert.,de_DE +order_custom_reference.reference_not_saved,Custom order reference has not been changed.,en_US +order_custom_reference.reference_not_saved,Ihre Bestellreferenz wurde nicht geändert.,de_DE +order_custom_reference.validation.error.message_invalid_length,Custom order reference length is invalid.,en_US +order_custom_reference.validation.error.message_invalid_length,Die Länge der Bestellreferenz ist ungültig.,de_DE +order_custom_reference.title,Custom Order Reference,en_US +order_custom_reference.title,Ihre Bestellreferenz,de_DE +order_custom_reference.form.placeholder,Add custom order reference,en_US +order_custom_reference.form.placeholder,Ihre Bestellreferenz hinzufügen,de_DE +order_custom_reference.save,Save,en_US +order_custom_reference.save,Speichern,de_DE +``` + +
+ + 2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the following behaviors. + +#### Set up order item display name + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------|---------------|----------------------------------------------| +| CurrencyIsoCodeOrderItemExpanderPlugin | Expands order items with currency codes (ISO). | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| StateHistoryOrderItemExpanderPlugin | Expands order items with history states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| ItemStateOrderItemExpanderPlugin | Expands order items with item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OrderAggregatedItemStateSearchOrderExpanderPlugin | Expands orders with aggregated item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | + + +
src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new CurrencyIsoCodeOrderItemExpanderPlugin(), + new StateHistoryOrderItemExpanderPlugin(), + new ItemStateOrderItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SearchOrderExpanderPluginInterface> + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new OrderAggregatedItemStateSearchOrderExpanderPlugin() + ]; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +- Make sure that every order item from the `SalesFacade::getOrderItems()` result contains the following: + - Currency ISO code + - State history code + - Item state data +- Make sure that every order from the `SalesFacade::getCustomerOrders()` result contains aggregated item state data. + +{% endinfo_block %} + +### Set up order cancellation behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------| +| IsCancellableOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| IsCancellableSearchOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Oms\Communication\Plugin\Sales | + + +
src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new IsCancellableSearchOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new IsCancellableOrderExpanderPlugin(), + ]; + } +} +``` + +
+ +{% info_block warningBox "Verification" %} + +Make sure that, on the following pages, each order contains the `isCancellable` flag: + +- Storefront pages: + - **Order History** + - **Overview** +- The Back Office: the **Overview of Orders** page. + +{% endinfo_block %} + +### Set up the order invoice generation behavior + +Set up the following order invoice generation behaviors. + +#### Set up order invoice mail type + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|---------------------------------------------------------|---------------|----------------------------------------------------| +| OrderInvoiceMailTypePlugin | Prepares an invoice email for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Mail | + + +
src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ->add(new OrderInvoiceMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +
+ + +#### Set up an order invoice OMS command + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|----------------------------------------------------------------------------|---------------|---------------------------------------------------| +| GenerateOrderInvoiceCommandPlugin | A command in the OMS state machine that generates an invoice for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Oms | + + +
src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(static::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new GenerateOrderInvoiceCommandPlugin(), 'Invoice/Generate'); + return $commandCollection; + }); + + return $container; + } +} +``` + +
+ +#### Set up an order invoice OMS command + +1. Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|---------------------------------------------------------------------|---------------|------------------------------------------------| +| OrderInvoiceSendConsole | A console command that sends not-yet-sent order invoices via email. | | Spryker\Zed\SalesInvoice\Communication\Console | + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new OrderInvoiceSendConsole(), + ]; + } +} +``` + +2. Adjust the scheduler configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +/* Order invoice */ +$jobs[] = [ + 'name' => 'order-invoice-send', + 'command' => '$PHP_BIN vendor/bin/console order:invoice:send', + 'schedule' => '*/5 * * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +3. Apply the scheduler configuration update: + +```bash +vendor/bin/console scheduler:suspend +vendor/bin/console scheduler:setup +vendor/bin/console scheduler:resume +``` + +{% info_block warningBox "Verification" %} + +- Move at least one item in an order to the `invoice generated` state. + Make sure that, according to your `DummyInvoice01.xml` and `SalesInvoiceConfig::getOrderInvoiceTemplatePath()` configuration, the correct order invoice template has been assigned to the order: `spy_sales_order_invoice`. + +- Place an order with an invoice. Make sure that you receive an invoice within the time configured in the scheduler. + +{% endinfo_block %} + +### Set up a custom order reference workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| OrderCustomReferenceOrderPostSavePlugin | After an order is saved, persists `orderCustomReference` in the `spy_sales_order` schema. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Sales | +| OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin | Returns the `QuoteTransfer` fields related to a custom order reference. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Quote | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostSavePlugins() + { + return [ + new OrderCustomReferenceOrderPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteFieldsAllowedForSavingProviderPlugins(): array + { + return [ + new OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Sales**>**Orders**. +2. Click **View** next to an order. +Make sure that, on the order details page, the *Custom Order Reference* section with the **Edit Reference** button is displayed. + +{% endinfo_block %} + +### Set up order-saving plugins + +Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|--------------------------------------------------|---------------|----------------------------------------------------| +| OrderSaverPlugin | Saves an order. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OrderTotalsSaverPlugin | Saves order totals. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| SalesOrderShipmentSaverPlugin | Saves an order shipment. Adds shipment expenses. | | Spryker\Zed\Shipment\Communication\Plugin\Checkout | +| OrderItemsSaverPlugin | Saves order items. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | + + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutOrderSavers(Container $container) + { + return [ + new OrderSaverPlugin(), + new OrderTotalsSaverPlugin(), + new SalesOrderShipmentSavePlugin(), + new OrderItemsSaverPlugin(), + ]; + } +} +``` + +### Set up warehouse picking relationship plugins + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------| +| SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin | Adds `sales-orders` resources as a relationship to `picking-list-items` resources. | | Spryker\Glue\SalesOrdersBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, on the following Storefront pages, even if the `display` property isn't set in the process definition, the item states are displayed correctly: + +- **Customer overview** +- **Order history** +- **Order details** +- **Returns** +- **Return details** + +2. Make sure the `sales-orders` resource is returned as a relationship to the `picking-list-items` resource. + +`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-orders` +
+ Response body example +```json +{ + "data": { + "id": "14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b", + "type": "picking-lists", + "attributes": { + "status": "picking-finished", + "createdAt": "2023-03-23 15:47:07.000000", + "updatedAt": "2023-03-30 12:47:45.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b?include=picking-list-items,sales-orders" + } + }, + "included": [ + { + "id": "DE--1", + "type": "sales-orders", + "attributes": { + "cartNote": null, + "orderReference": "DE--1" + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/sales-orders/DE--1?include=picking-list-items,sales-orders" + } + }, + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 1, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "31e21001-e544-5533-9754-51331c8c9ac5", + "sku": "141_29380410", + "quantity": 1, + "name": "Asus Zenbook US303UB", + "amountSalesUnit": null + } + }, + "relationships": { + "sales-orders": { + "data": [ + { + "id": "DE--1", + "type": "sales-orders" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/65bb3aec-0a45-5ec6-9b12-bbca6551d87f?include=picking-list-items,sales-orders" + } + } + ] +} +``` +
+ +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Order Management feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------| - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|---------------------------------------------------| +| OrderCustomReferenceWidget | vendor/spryker-shop/order-custom-reference-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +```csv +order_cancel_widget.cancel_order,Cancel Order,en_US +order_cancel_widget.cancel_order,Bestellung stornieren,de_DE +order_cancel_widget.order.cancelled,Order was canceled successfully.,en_US +order_cancel_widget.order.cancelled,Die Bestellung wurde erfolgreich storniert.,de_DE +``` + +2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider on the Storefront: + +| PROVIDER | NAMESPACE | +|--------------------------------------|--------------------------------------------------| +| OrderCancelWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCancelWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCancelWidgetRouteProviderPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Make sur the `yves.mysprykershop.com/order/cancel` route is available for POST requests. + +{% endinfo_block %} + +### 4) Set up behavior + +Set up the following behaviors. + +#### Set up an order cancellation behavior + +Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|----------------------------------------------|---------------|-------------------------------------------| +| OrderCancelButtonWidget | Displays the **Cancel** button on the Storefront. | | SprykerShop\Yves\OrderCancelWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCancelButtonWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The `OrderCancelButtonWidget` widget has been registered. +- On the **Order Details** page on the Storefront, the **Cancel** button is displayed. +- In the **item state** table column on the **Customer Overview** and **Order History** pages on the Storefront, aggregated order item states are displayed. +- On the **Returns** page on the Storefront, aggregated return item states are displayed. +- On the **Order Details** and **Return Details** pages on the Storefront, item states are displayed. + +{% endinfo_block %} + +### 5) Enable a route provider plugin + +Register the route provider in the Yves application: + +| PROVIDER | NAMESPACE | +|----------------------------------------------------|-----------------------------------------------------------| +| OrderCustomReferenceWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | +| OrderCustomReferenceWidgetAsyncRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCustomReferenceWidgetRouteProviderPlugin(), + new OrderCustomReferenceWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +### 5) Set up widgets + +1. Register the following plugin to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|----------------------------|-------------------------------------------------------------|---------------|----------------------------------------------------| +| OrderCustomReferenceWidget | Edits and shows a custom order reference on the Storefront. | | SprykerShop\Yves\OrderCustomReferenceWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCustomReferenceWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Log in as a customer on the Storefront and check that the **Custom order reference** form is displayed on the order view page. + +{% endinfo_block %} + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Install the Comments + Order Management feature | | [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | +| Install the Order Management Glue API | | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Install the Company Account + Order Management feature | | [Install the Company Account + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Customer Account Management + Order Management feature | | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | +| Install the Packaging Units feature | | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Product Options + Order Management feature | | [Install the Product Options + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | +| Install the Promotions & Discounts + Order Management feature | | [Install the Promotions & Discounts + Order Management feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature.md index a12d365d8d2..8b19c1483a1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature.md @@ -10,16 +10,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Promotions & Discounts | {{page.version}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker/sales-discount-connector:"^1.0.0" --update-with-dependencies +composer require spryker/sales-discount-connector:"^1.1.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -36,8 +36,8 @@ Make sure the following modules have been installed: Set up the following behaviors: -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -|--------------------------------------|--------------------------------------------------|---------------|------------------------------------------------------------------| +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|------------------------------------------------------------------------|---------------|------------------------------------------------------------------| | CustomerOrderCountDecisionRulePlugin | Checks if the customer's order count matches the discount's condition. | | Spryker\Zed\SalesDiscountConnector\Communication\Plugin\Discount | **src/Pyz/Zed/Discount/DiscountDependencyProvider.php** @@ -66,9 +66,94 @@ class DiscountDependencyProvider extends SprykerDiscountDependencyProvider {% info_block warningBox "Verification" %} -1. [Create a discount](/docs/pbc/all/discount-management/{{site.version}}/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. 2. Log in as a customer with a number of orders that fulfills the discount condition. 3. Add any product to the cart. 4. Verify that the discount is applied to the cart. {% endinfo_block %} + +### 3) Configure discount context synchronization + +By default, when a discount based on `CustomerOrderCountDecisionRulePlugin` is applied to the main order, it is *not* automatically applied to associated merchant orders in a marketplace setup. Merchant orders discounts are calculated separately from the main order. + +For customer order count-based discounts to be applied to merchant orders, configure the synchronization of discount context between the main order and merchant orders: + +1. Update the required modules using Composer: + +```bash +composer require spryker/merchant-sales-order:"^1.7.0" spryker/merchant-sales-order-extension:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|-----------------------------------------------| +| MerchantSalesOrder | vendor/spryker/merchant-sales-order | +| MerchantSalesOrderExtension | vendor/spryker/merchant-sales-order-extension | + +{% endinfo_block %} + +2. Set `SalesDiscountConnectorConfig::isCurrentOrderExcludedFromCount` to return `true` if you want to exclude the current order from the `customer-order-count` discount condition: + +**src/Pyz/Zed/SalesDiscountConnector/SalesDiscountConnectorConfig.php** + +```php + + */ + protected function getMerchantOrderTotalsPreRecalculatePlugins(): array + { + return [ + new CopyOrderContextMerchantOrderTotalsPreRecalculatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +2. Log in as a customer with a number of orders that fulfills the discount condition. +3. Add any product offer (merchant product) to the cart. +4. Verify that the discount is applied to the cart. +5. Place an order. +6. Trigger OMS commands and conditions till merchant order is created. +7. Go to merchant portal and check the order. +8. Discount should be applied to the merchant order. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature0.md b/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature0.md new file mode 100644 index 00000000000..2e24c8242ce --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-order-management-promotions-and-discounts-feature0.md @@ -0,0 +1,74 @@ +This document describes how to install the Order Management + Promotions & Discounts feature. + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-discount-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|-----------------------------------------| +| SalesDiscountConnector | vendor/spryker/sales-discount-connector | + +{% endinfo_block %} + +### 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|--------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerOrderCountDecisionRulePlugin | Checks if the customer's order count matches the discount's condition. | | Spryker\Zed\SalesDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CustomerOrderCountDecisionRulePlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +2. Log in as a customer with a number of orders that fulfills the discount condition. +3. Add any product to the cart. +4. Verify that the discount is applied to the cart. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-packaging-units-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-packaging-units-feature.md index 6b23b2bdc81..b1c50818166 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-packaging-units-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-packaging-units-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Packaging Units](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/feature-overviews/packaging-units-feature-overview.html) feature. +This document describes how to install the [Packaging Units](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/packaging-units-feature-overview.html) feature. ## Install feature core @@ -13,16 +13,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Order Management | {{site.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Inventory Management | {{site.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Measurement Units | {{page.version}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Measurement Units | {{page.release_tag}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/packaging-units:"{{page.version}}" --update-with-dependencies` +composer require spryker-feature/packaging-units:"{{page.release_tag}}" --update-with-dependencies` ``` {% info_block warningBox "Verification" %} @@ -262,7 +262,7 @@ Make sure that the configured data in the database has been added to the `spy_gl {% endinfo_block %} -### 5) Configure export to Redis +### 5) Configure export to the key-value store (Redis or Valkey) This step publishes tables on change (create, edit, delete) to `spy_product_packaging_unit_storage` and synchronizes the data to Storage. @@ -974,14 +974,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Measurement Units | {{page.version}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | -| Non-splittable Products | {{page.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Measurement Units | {{page.release_tag}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | +| Non-splittable Products | {{page.release_tag}} | | ### 1) Install the required modules ```bash -composer require spryker-feature/packaging-units: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/packaging-units: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-payments-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-payments-feature.md index 24fa4fd990c..8f0026a4eb5 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-payments-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-payments-feature.md @@ -18,7 +18,7 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### Prerequisites for PayPal Express by PayOne @@ -34,7 +34,7 @@ Make sure all payment methods can be used with your PayOne account before deploy Install the required modules using Composer: ```bash -composer require "spryker-feature/payments:{{page.version}}" "spryker/checkout-rest-api:^3.0.0" "spryker/payment-cart-connector" --update-with-dependencies +composer require spryker-feature/payments:"{{page.release_tag}}" spryker/checkout-rest-api:"^3.0.0" spryker/payment-cart-connector --update-with-dependencies ``` diff --git a/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-feature.md index ac0de1d2e31..5f5a65f66d4 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Resource Sharing | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Resource Sharing | {{page.release_tag}} | | | | ### 1) Install the required modules @@ -17,7 +17,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/persistent-cart-sharing: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/persistent-cart-sharing: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -59,16 +59,16 @@ Install the following required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Resource Sharing | {{page.version}} | -| Customer Account Management | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Resource Sharing | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/persistent-cart-sharing: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/persistent-cart-sharing: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-shared-carts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-shared-carts-feature.md index e443bcf972e..52af7f26a8b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-shared-carts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-persistent-cart-sharing-shared-carts-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Shared Carts | {{page.version}} | -| Persistent Cart Sharing | {{page.version}} | +| Shared Carts | {{page.release_tag}} | +| Persistent Cart Sharing | {{page.release_tag}} | ### 1) Set up behavior @@ -112,8 +112,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Shared Carts | {{page.version}} | -| Persistent Cart Sharing | {{page.version}} | +| Shared Carts | {{page.release_tag}} | +| Persistent Cart Sharing | {{page.release_tag}} | ## 1) Add translations diff --git a/_includes/pbc/all/install-features/202410.0/install-the-prices-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-prices-feature.md index b9cbf1c5cf3..b681c65456b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-prices-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-prices-feature.md @@ -14,15 +14,15 @@ Install the required features: | NAME | VERSION | |---|---| -| Spryker Core | {{page.version}} | -| Prices | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Prices | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/prices: "^{{page.version}}" --update-with-dependencies +composer require spryker-feature/prices: "^{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -226,15 +226,15 @@ Install the following required features: | NAME | VERSION | |---|---| -| Spryker Core E-commerce | {{page.version}} | -| Prices | {{page.version}} | +| Spryker Core E-commerce | {{page.release_tag}} | +| Prices | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/prices: "^{{page.version}}" --update-with-dependencies +composer require spryker-feature/prices: "^{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -315,6 +315,6 @@ Make sure the following widgets were registered: | MODULE | TEST | | --- | --- | | ProductPriceVolumeWidget | Go to the product detail page for a product with Volume Prices set, and observe the table in the detail area that contains the Volume Prices data. | -| PriceProductWidget | Could be checked on a slot configurator page of a [Configurable Bundle](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/configurable-bundle-feature-overview.html) feature. | +| PriceProductWidget | Could be checked on a slot configurator page of a [Configurable Bundle](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/configurable-bundle-feature-overview.html) feature. | {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-prices-per-merchant-relation-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-prices-per-merchant-relation-feature.md index 0ca29115313..fa6a686399c 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-prices-per-merchant-relation-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-prices-per-merchant-relation-feature.md @@ -32,7 +32,7 @@ spryker/price-product-merchant-relationship-storage:"^1.0.0" spryker/price-produ | MODULE | PLUGIN | DESCRIPTION | METHOD IN DEPENDENCY PROVIDER | | --- | --- | --- | --- | -| PriceProductStorage | PriceProductMerchantRelationshipStorageDimensionPlugin | Reads prices for merchant relations from Redis to show them in catalog. | getPriceDimensionPlugins | +| PriceProductStorage | PriceProductMerchantRelationshipStorageDimensionPlugin | Reads prices for merchant relations from the key-value store (Redis or Valkey) to show them in catalog. | getPriceDimensionPlugins | **src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** @@ -369,6 +369,6 @@ class PriceProductDependencyProvider extends SprykerPriceProductDependencyProvid {% info_block infoBox %} -See [Upgrade the PriceProduct module](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.html) for information on how to migrate to a newer version of the `PriceProduct` module with price dimensions support. +See [Upgrade the PriceProduct module](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.html) for information on how to migrate to a newer version of the `PriceProduct` module with price dimensions support. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-approval-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-approval-process-feature.md index 864400ec43f..3c3dd7deba2 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-approval-process-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-approval-process-feature.md @@ -12,10 +12,10 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Checkout | {{page.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | ### 1) Install the required modules using Сomposer @@ -23,7 +23,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/product-approval-process:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-approval-process:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature.md index 3b460dded02..db6a32c6b1b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature.md @@ -2,26 +2,23 @@ This document describes how to install the Product Bundles + Cart feature. -## Install feature core - -Follow the steps below to install feature core. - -### Prerequisites +## Prerequisites Install the required features: | NAME | EXPECTED DIRECTORY | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html)| -| Product Bundles | {{page.version}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| -| Cart | {{page.version}} | | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html)| +| Product Bundles | {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Cart | {{page.release_tag}} | | -### Set up behavior +## Set up behavior -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -| --- | --- | --- | --- | -| ProductBundleItemCountQuantityPlugin | Returns combined quantity of all items in the cart. | None | Spryker\Client\ProductBundle\Plugin\Cart | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|--------------------------------------------------------------|---------------|------------------------------------------------------| +| ProductBundleItemCountQuantityPlugin | Returns the combined quantity of all items in the cart. | | Spryker\Client\ProductBundle\Plugin\Cart | +| SanitizeBundleItemsBeforeQuoteSavePlugin | Sanitizes quote bundle items when all items are removed from the cart. | | Spryker\Zed\ProductBundle\Communication\Plugin\Quote | **src/Pyz/Client/Cart/CartDependencyProvider.php** @@ -47,18 +44,45 @@ class CartDependencyProvider extends SprykerCartDependencyProvider {% info_block warningBox "Verification" %} -Add several regular products and product bundles to the cart. -Make sure that the item counter of the cart widget shows the correct number—bundled items must not be counted as separate items. +Add several regular products and product bundles to cart. Make sure that the item counter of the cart widget shows the correct number–bundled items must not be counted as separate items. + +{% endinfo_block %} + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteUpdateBeforePlugins(): array + { + return [ + new SanitizeBundleItemsBeforeQuoteSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure bundle items are removed from the quote when all items are removed from the cart. Cart counter must show 0 items after all items are removed from the cart. {% endinfo_block %} ## Alternative setup for handling large quantities of bundled products in the cart -When a bundle product is added to the cart with a large quantity (for example, 100-200 items), users may -experience a slow-down in the cart operations handling or even may get an internal server error because of insufficient memory. +When a bundle product is added to cart with a big number of items–for example, 100-200 items–users may experience a slowdown in cart operations or even get an internal server error because of insufficient memory. -To avoid a slow-down in the cart operations and internal server errors, an alternative set of plugins has been -implemented: +To avoid this, you can use the following alternative plugins: | PLUGIN | ALTERNATIVE FOR | NAMESPACE | |--------------------------------------------------------------|-----------------------------------------|---------------------------------------------------------------| @@ -66,11 +90,11 @@ implemented: | UnfoldBundlesToUnitedItemsItemExpanderPlugin | ExpandBundleItemsPlugin | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | | ReplaceBundlesWithUnitedItemsCartChangeRequestExpanderPlugin | RemoveBundleChangeRequestExpanderPlugin | Spryker\Client\ProductBundle\Plugin\Cart | | ReplaceBundlesWithUnitedItemsCartChangeRequestExpandPlugin | RemoveBundleChangeRequestExpanderPlugin | Spryker\Zed\ProductBundle\Communication\Plugin\PersistentCart | -| ExpandBundleItemsWithImagesPlugin | None | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| ExpandBundleItemsWithImagesPlugin | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | -### 1) Set up new plugins +### 1) Set up plugins -To use this alternative solution, all old plugins must be removed and new ones connected instead. +Remove the existing plugins and add the alternative ones: **src/Pyz/Zed/Cart/CartDependencyProvider.php** @@ -167,18 +191,48 @@ class PersistentCartDependencyProvider extends SprykerPersistentCartDependencyPr {% info_block warningBox "Verification" %} -Add a product bundle to the cart and increase its quantity to a larger number—for example, 1,000 items. Then, decrease the quantity. -Make sure that increase and decrease operations are performed without a significant delay and do not fail, with an exception. +- Do the following as a guest user: + 1. Add a product bundle to cart. + 2. Increase the bundle's quantity to a larger number—for example, 1,000 items. + 3. Decrease the quantity. + Make sure that increase and decrease operations are performed without a significant delay and don't fail with an exception. + 4. Repeat steps 1-3 as a registered user. -Perform this verification both as an anonymous and logged-in user. -Make sure that bundled products have an images that are displayed correctly in the cart. +- Make sure that the images of bundled products are displayed correctly in cart. {% endinfo_block %} -### 2) Adjust a non-splittable quantity threshold for bundled items in the `SalesQuantity` module config +### 2) Adjust a non-splittable quantity threshold for bundled items + +For orders with a large numbers of product bundles to be created successfully, the threshold for creating separate shipments out of bundled items needs to be not higher than 10. Lowering the threshold reduces the number of separate shipments in an order, decreasing the risk of insufficient memory errors during order creation. + +You can set the threshold using the `SalesQuantityConfig::BUNDLED_ITEM_NONSPLIT_QUANTITY_THRESHOLD` constant in the `SalesQuantity` module config. When the threshold is reached, bundled items are kept together instead of being split into individual items, ensuring they are processed as a single shipment. Lowering the threshold reduces the number of separate shipments in an order, decreasing the risk of insufficient memory errors during order creation. + +For details more details on, see [Install the Splittable Order Items feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html). + + + + + + + + + + + + + + + + + + + + + + + + + -To create an order successfully with a large number of product bundles in the cart, the `SalesQuantityConfig::BUNDLED_ITEM_NONSPLIT_QUANTITY_THRESHOLD` constant in the `SalesQuantity` module config must be also set to a lower number—for example, 10. -This constant controls the bundle quantity threshold. When the threshold is reached, it keeps bundled items from splitting into individual items and adds them to the order as a single shipment. -The lower the threshold, the fewer number of separate shipments are created in an order, which decreases the potential probability of insufficient memory errors during the order creation process. -For details, see [Install the Splittable Order Items feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature0.md b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature0.md new file mode 100644 index 00000000000..bdd51784b3f --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-cart-feature0.md @@ -0,0 +1,184 @@ + + +This document describes how to install the Product Bundles + Cart feature. + +## Install feature core + +Follow the steps below to install feature core. + +### Prerequisites + +Install the required features: + +| NAME | EXPECTED DIRECTORY | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html)| +| Product Bundles | {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Cart | {{page.release_tag}} | | + + +### Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductBundleItemCountQuantityPlugin | Returns combined quantity of all items in the cart. | None | Spryker\Client\ProductBundle\Plugin\Cart | + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + // new ExpandBundleItemsPlugin(), + new ExpandBundleItemsWithImagesPlugin() + new UnfoldBundlesToUnitedItemsItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartOperationPostSavePluginInterface> + */ + protected function getPostSavePlugins(Container $container): array + { + return [ + // new CartPostSaveUpdateBundlesPlugin(), + new RefreshBundlesWithUnitedItemsCartOperationPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php*** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpandPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Add a product bundle to the cart and increase its quantity to a larger number—for example, 1,000 items. Then, decrease the quantity. +Make sure that increase and decrease operations are performed without a significant delay and do not fail, with an exception. + +Perform this verification both as an anonymous and logged-in user. +Make sure that bundled products have an images that are displayed correctly in the cart. + +{% endinfo_block %} + +### 2) Adjust a non-splittable quantity threshold for bundled items in the `SalesQuantity` module config + +To create an order successfully with a large number of product bundles in the cart, the `SalesQuantityConfig::BUNDLED_ITEM_NONSPLIT_QUANTITY_THRESHOLD` constant in the `SalesQuantity` module config must be also set to a lower number—for example, 10. +This constant controls the bundle quantity threshold. When the threshold is reached, it keeps bundled items from splitting into individual items and adds them to the order as a single shipment. +The lower the threshold, the fewer number of separate shipments are created in an order, which decreases the potential probability of insufficient memory errors during the order creation process. + +For details, see [Install the Splittable Order Items feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-feature.md index 282d5e8cccd..65a39144bc7 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-feature.md @@ -9,8 +9,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} |[Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| ## 1) Install required modules using Composer @@ -140,9 +140,9 @@ Ensure that the changes have been implemented successfully by triggering the fol {% endinfo_block %} -## 3) Configure export to Redis and Elasticsearch +## 3) Configure export to the key-value store (Redis or Valkey) and Elasticsearch -To configure export to Redis and Elasticsearch, follow the steps below: +To configure export to the key-value store (Redis or Valkey) and Elasticsearch, follow the steps below: ### Set up event listeners @@ -210,9 +210,9 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Ensure that, when a product bundle is created, updated, or deleted, it's exported to or removed from Redis. +Ensure that, when a product bundle is created, updated, or deleted, it's exported to or removed from the key-value store (Redis or Valkey). -Storage type: Redis +Storage type: Redis or Valkey Target entity: Product Bundle Example expected data identifier: `kv:product_bundle:1` diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-order-management-feature.md index 7887fe9a5f1..60075be6f2f 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Product Bundles | {{page.version}} | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Product Bundles | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-return-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-return-management-feature.md index 42836d44a06..1e6b3b1aba1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-return-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-bundles-return-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Product Bundles | {{page.version}} | -| Return Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Product Bundles | {{page.release_tag}} | +| Return Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-cart-feature.md index 3a0de3f3137..7a1f8b59c32 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-cart-feature.md @@ -13,8 +13,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Cart | {{page.version}} | -| Product | {{page.version}} | +| Cart | {{page.release_tag}} | +| Product | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-category-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-category-feature.md index cfc4d22a174..64815d0edb3 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-category-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-category-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) + [Category](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/category-management-feature-overview.html#root-parent-and-child-categories) feature. +This document describes how to install the [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) + [Category](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/category-management-feature-overview.html#root-parent-and-child-categories) feature. ## Install feature core @@ -12,14 +12,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Category Management | {{site.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -140,7 +140,7 @@ Make sure that the following changes have been applied in the database. {% endinfo_block %} -### 4) Configure export to Redis +### 4) Configure export to the key-value store (Redis or Valkey) Configure tables to be published to the `spy_product_abstract_category_storage` and `spy_product_category_filter_storage` and synchronized to the Storage on create, edit, and delete changes: @@ -346,12 +346,12 @@ class EventBehaviorDependencyProvider extends SprykerEventBehaviorDependencyProv {% info_block warningBox "Verification" %} -When a category product assignment is changed through ORM, make sure it's exported to Redis. +When a category product assignment is changed through ORM, make sure it's exported to the key-value store (Redis or Valkey). -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -|--------------|-------------------------|--------------------------------------| -| Redis | ProductAbstractCategory | product_abstract_category:de:de_de:1 | -| Redis | ProductCategoryFilter | product_category_filter:8 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------|-------------------------|--------------------------------------| +| Key-value store (Redis or Valkey) | ProductAbstractCategory | product_abstract_category:de:de_de:1 | +| Key-value store (Redis or Valkey) | ProductCategoryFilter | product_category_filter:8 | **An expected data fragment example: `product_abstract_category:de:de_de:1`** @@ -667,15 +667,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Category Management | {{site.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -732,8 +732,8 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |-------------------------------|----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Category Management Feature | ✓ | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | -| Product Management Feature | ✓ | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Glue API: Category Management | | [Install the Category Management Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html) | -| Catalog + Category Management | | [Install the Catalog + Category Management feature](/docs/pbc/all/search/{{site.version}}/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html) | -| CMS + Category Management | | [Install the CMS + Category Management feature](/docs/pbc/all/content-management-system/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html) | +| Category Management Feature | ✓ | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Product Management Feature | ✓ | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Glue API: Category Management | | [Install the Category Management Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html) | +| Catalog + Category Management | | [Install the Catalog + Category Management feature](/docs/pbc/all/search/latest/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html) | +| CMS + Category Management | | [Install the CMS + Category Management feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-comparison-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-comparison-feature.md index 6350c78090e..ba29ff9e108 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-comparison-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-comparison-feature.md @@ -11,15 +11,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/product-comparison:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-comparison:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-configuration-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-configuration-feature.md index 5103f2e86c2..7a637857c74 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-configuration-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-configuration-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product Configuration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) feature. +This document describes how to install the [Product Configuration](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) feature. ## Install feature core @@ -13,22 +13,22 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Checkout | {{page.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | -| Prices | {{page.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | -| Inventory Management | {{page.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | -| Wishlist | {{page.version}} || -| ShoppingList | {{page.version}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Wishlist | {{page.release_tag}} || +| ShoppingList | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require "spryker-feature/configurable-product":"{{page.version}}" --update-with-dependencies +composer require "spryker-feature/configurable-product":"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1454,15 +1454,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require "spryker-feature/configurable-product":"{{page.version}}" --update-with-dependencies +composer require "spryker-feature/configurable-product":"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1824,8 +1824,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-feature.md index 664593e38ed..4c99fd807ca 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-feature.md @@ -18,15 +18,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---|---|---| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Prices | {{page.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | ### 1) Install the required modules 1. Install the required modules using Composer: ```bash -composer require spryker-feature/product:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -140,7 +140,7 @@ Make sure that, on the **Create a Product Attribute** page, a **mutliselect** in {% endinfo_block %} -#### Configure export to Redis and Elasticsearch +#### Configure export to the key-value store (Redis or Valkey) and Elasticsearch Add the configuration for adding products to cart from the catalog page: @@ -182,7 +182,6 @@ Enable the following behaviors by registering the plugins: | ProductImageProductConcretePageDataExpanderPlugin | Expands product concrete page data with the images data. | | Spryker\Zed\ProductPageSearch\Communication\Plugin\PageMapExpander | | ProductConcretePublisherTriggerPlugin | Triggers the concrete products resource to be published. | | Spryker\Zed\ProductPageSearch\Communication\Plugin\Publisher | | MultiSelectProductAttributeDataFormatterPlugin | Formats product attributes with input type `multiselect` to array. | | Spryker\Zed\ProductAttribute\Communication\Plugin\ProductAttribute | -| ProductLocalizedAttributesProductAbstractWritePublisherPlugin | Publishes product abstract data by `SpyProductLocalizedAttributes` entity events. | | Spryker\Zed\ProductStorage\Communication\Plugin\Publisher\ProductAbstract | **src/Pyz/Zed/Event/EventDependencyProvider.php** @@ -258,20 +257,10 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> */ protected function getPublisherPlugins(): array - { - return [ - new CategoryStoreProductAbstractPageSearchWritePublisherPlugin(), - new ProductLocalizedAttributesProductAbstractWritePublisherPlugin(), - ]; - } - - /** - * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> - */ - protected function getPublisherTriggerPlugins(): array { return [ new ProductConcretePublisherTriggerPlugin(), + new CategoryStoreProductAbstractPageSearchWritePublisherPlugin(), ]; } } @@ -280,9 +269,8 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider {% info_block warningBox "Verification" %} Make sure the following applies: -- Executing the `console sync:data product_concrete` command syncs the product data, including images, to Elasticsearch product concrete documents. -- When a product or its images are updated in the Back Office, these changes are synced to respective Elasticsearch product concrete documents. -- When product attribute translations are updated in the Back Office, the changes are synced to the product abstract storage items in Redis. +1. Executing the `console sync:data product_concrete` command, syncs the product data, including images, to Elasticsearch product concrete documents. +2. When a product or its images are updated in the Back Office, these changes are synced to respective Elasticsearch product concrete documents. | STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | | --- | --- | --- | @@ -365,6 +353,36 @@ Make sure that you can manage "multiselect" product attributes at `https://zed.d {% endinfo_block %} +### 5) Search for concrete product SKU in the list of abstract products + +{% info_block warningBox "Performance impact" %} + +We recommend testing how this feature affects table loading times. + +{% endinfo_block %} + +Extend the `isConcreteSkuSearchInProductTableEnabled` method in the `ProductManagementConfig` class at the project level and return `true`: + +**src/Pyz/Zed/ProductManagement/ProductManagementConfig.php** + +```php +The result of the query will contain only Products that were on the given Whitelists, but not on the given Blacklists.| The Customer session must contain Product List information. See [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) for an example implementation. | Spryker\Client\CustomerCatalog\Plugin\Search | +| ProductListQueryExpanderPlugin | Expands an Elasticsearch query for Abstract and Concrete Products with Blacklist and Whitelist filters based on the Customer session.
The result of the query will contain only Products that were on the given Whitelists, but not on the given Blacklists.| The Customer session must contain Product List information. See [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) for an example implementation. | Spryker\Client\CustomerCatalog\Plugin\Search | | ProductListQueryExpanderPlugin | Expands search query with filtering by product list ID. | None | Spryker\Client\ProductListSearch\Plugin\Search | {% info_block infoBox "Info" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-lists-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-lists-feature.md index 28c6cc3285e..a3335052aff 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-lists-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-lists-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Product Lists feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-lists-feature-overview.html). +This document describes how to install the [Product Lists feature](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-lists-feature-overview.html). ## Install feature core @@ -13,14 +13,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE| |---|---|---| -| Spryker Core | {{page.version}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Category Management | {{page.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product-lists:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-lists:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -243,9 +243,9 @@ Make sure that the configured data has been added to the `spy_glossary` table in {% endinfo_block %} -### 5) Configure export to Redis and Elasticsearch +### 5) Configure export to the key-value store (Redis or Valkey) and Elasticsearch -Configure export to Redis and Elasticsearch as follows. +Configure export to the key-value store (Redis or Valkey) and Elasticsearch as follows. ### Set up event listeners @@ -282,14 +282,14 @@ class EventDependencyProvider extends SprykerEventDependencyProvider {% info_block warningBox "Verification" %} -Make sure that when a product list is created, updated, or deleted, they are exported or removed to Redis and Elasticsearch accordingly. +Make sure that when a product list is created, updated, or deleted, they are exported or removed to the key-value store (Redis or Valkey) and Elasticsearch accordingly. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | Product Abstract Product List | kv:product_abstract_product_lists:1 | -| Redis | Product Concrete Product List | kv:product_concrete_product_list:1 | -| Elasticsearch | Product Abstract | product_abstract:de:en_us:1 | -| Elasticsearch | Product Concrete | product_concrete:de:en_us:1 | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Product Abstract Product List | kv:product_abstract_product_lists:1 | +| Key-value store (Redis or Valkey) | Product Concrete Product List | kv:product_concrete_product_list:1 | +| Elasticsearch | Product Abstract | product_abstract:de:en_us:1 | +| Elasticsearch | Product Concrete | product_concrete:de:en_us:1 | {% endinfo_block %} @@ -346,8 +346,8 @@ Add the following plugins to your project: | ProductListDataLoaderPlugin |Loads product list data as payload for the publishing process. | None|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch\DataLoader | |ProductListDataLoadExpanderPlugin|Expands product page data with all its product lists for publishing based on the previously collected product information.|Product list data must be available in the product payload. Suggestion: use `ProductListDataLoaderPlugin` (the first plugin in the table).|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch\DataExpander| |ProductListMapExpanderPlugin|Maps product list data to the Elasticsearch document structure.|Product list data must be available. Suggestion: use `ProductListDataLoadExpanderPlugin` (see the preceding one).|`Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch`| -|ProductAbstractProductListSynchronizationDataPlugin|Can be executed to synchronize all product_abstract_product_list entries from the database to Redis.|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| -|ProductConcreteProductListSynchronizationDataPlugin|Can be executed to synchronize all product_concrete_product_list entries from the database to Redis.|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| +|ProductAbstractProductListSynchronizationDataPlugin|Can be executed to synchronize all product_abstract_product_list entries from the database to the key-value store (Redis or Valkey).|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| +|ProductConcreteProductListSynchronizationDataPlugin|Can be executed to synchronize all product_concrete_product_list entries from the database to the key-value store (Redis or Valkey).|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| |ProductConcreteProductListPageDataExpanderPlugin|Expands `ProductConcretePageSearchTransfer` with product lists data and returns the modified object.|None|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch| |ProductConcreteProductListPageMapExpanderPlugin|Maps product list data related to concrete products to the Elasticsearch document structure.|Product list data must be available. Suggestion: use `ProductConcreteProductListPageDataExpanderPlugin` (see the preceding one).|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch| @@ -802,7 +802,7 @@ class ProductStorageDependencyProvider extends SprykerProductStorageDependencyPr {% info_block warningBox "Verification" %} -Make sure that features that use Redis to read product data—for example, the product details page or product relations—don't show it when a product is restricted for the customer. +Make sure that features that use the key-value store (Redis or Valkey) to read product data—for example, the product details page or product relations—don't show it when a product is restricted for the customer. {% endinfo_block %} @@ -865,6 +865,6 @@ Make sure that no restricted products can be added to a cart. If they were alre After completing the integration of this feature, you need to extend it further to provide one or many owner types for product lists to be able to assign them. A product list can only be fully functional when a user, who browses the catalog, gets product lists assigned, and this can be fulfilled by providing owners with product lists. -To add this functionality for merchant relationships, see [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html). +To add this functionality for merchant relationships, see [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html). {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-measurement-unit-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-measurement-unit-feature.md new file mode 100644 index 00000000000..229da99935a --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-measurement-unit-feature.md @@ -0,0 +1,1039 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Cart | {{page.release_tag}} | +|Product| {{page.release_tag}} | +|Order Management| {{page.release_tag}} | +|Spryker Core| {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/measurement-units:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductMeasurementUnit | vendor/spryker/product-measurement-unit | +| ProductMeasurementUnitDataImport | vendor/spryker/product-measurement-unit-data-import | +| ProductMeasurementUnitStorage | vendor/spryker/product-measurement-unit-storage | + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +Adjust the schema definition so entity changes will trigger events. + +| MODULE | TRIGGERED EVENTS | +| --- | --- | +| spy_product_measurement_unit |
  • Entity.spy_product_measurement_unit.create
  • Entity.spy_product_measurement_unit.update
  • Entity.spy_product_measurement_unit.delete
| +| spy_product_measurement_base_unit |
  • Entity.spy_product_measurement_base_unit.create
  • Entity.spy_product_measurement_base_unit.update
  • Entity.spy_product_measurement_base_unit.delete
| +| spy_product_measurement_sales_unit |
  • Entity.spy_product_measurement_sales_unit.create
  • Entity.spy_product_measurement_sales_unit.update
  • Entity.spy_product_measurement_sales_unit.delete
| +| spy_product_measurement_sales_unit_store |
  • Entity.spy_product_measurement_sales_unit_store.create
  • Entity.spy_product_measurement_sales_unit_store.update
  • Entity.spy_product_measurement_sales_unit_store.delete
| + +**src/Pyz/Zed/ProductMeasurementUnit/Persistence/Propel/Schema/spy_product_measurement_unit.schema.xml** + +```xml + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+
+``` + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_measurement_unit | table | created | +| spy_product_measurement_base_unit | table | created | +| spy_product_measurement_sales_unit | table | created | +| spy_product_measurement_sales_unit_store | table | created | +| spy_product_measurement_unit_storage | table | created | +| spy_product_concrete_measurement_unit_storage | table | created | +| spy_sales_order_item.quantity_base_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_precision | column | created | +| spy_sales_order_item.quantity_measurement_unit_conversion | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductMeasurementUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitTransfer | +| ProductMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementBaseUnitTransfer | +| ProductMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementSalesUnitTransfer | +| SpyProductMeasurementUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitEntityTransfer | +| SpyProductMeasurementBaseUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementBaseUnitEntityTransfer | +| SpyProductMeasurementSalesUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitEntityTransfer | +| SpyProductMeasurementSalesUnitStoreEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitStoreEntityTransfer | +| ProductMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitStorageTransfer | +| ProductConcreteMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementBaseUnitTransfer | +| ProductConcreteMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementSalesUnitTransfer | +| ProductConcreteMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementUnitStorageTransfer | +| SpyProductMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitStorageEntityTransfer | +| SpyProductConcreteMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductConcreteMeasurementUnitStorageEntityTransfer | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the changes were implemented successfully. For this purpose, trigger the following methods and make sure that the above events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementUnit.php | prepareSaveEventName()
addSaveEventToMemory()
addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementBaseUnit.php | prepareSaveEventName()
addSaveEventToMemory()
addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnit.php | prepareSaveEventName()
addSaveEventToMemory()
addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnitStore.php | prepareSaveEventName()
addSaveEventToMemory()
addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Add translations + +{% info_block infoBox "Info" %} + +All measurement units need to have glossary entities for the configured locales. + +{% endinfo_block %} + +Infrastructural record's glossary keys: + +**src/data/import/glossary.csv** + +```yaml +measurement_units.item.name,Item,en_US +measurement_units.item.name,Stück,de_DE +``` + +Demo data glossary keys: + +**src/data/import/glossary.csv** + +```yaml +measurement_units.standard.weight.kilo.name,Kilo,en_US +measurement_units.standard.weight.gram.name,Gram,en_US +measurement_units.standard.length.metre.name,Meter,en_US +measurement_units.standard.length.centimetre.name,Centimeter,en_US +measurement_units.standard.length.feet.name,Feet,en_US +measurement_units.standard.weight.kilo.name,Kilo,de_DE +measurement_units.standard.weight.gram.name,Gramm,de_DE +measurement_units.standard.length.metre.name,Meter,de_DE +measurement_units.standard.length.centimetre.name,Centimeter,de_DE +measurement_units.standard.length.feet.name,Fuß,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + + +### 4) Configure export to the key-value store (Redis or Valkey) + +This step will publish tables on change (create, edit, delete) to the `spy_product_measurement_unit_storage` and `spy_product_concrete_measurement_unit_storage` and synchronise the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitStorageEventSubscriber | Registers listeners that are responsible to publish product measurement unit storage entity changes when a related entity change event occurs. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php + add(new ProductMeasurementUnitStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Setup re-generate and re-sync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductConcreteMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty storage table with data. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty storage table with data. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductConcreteMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | +| ProductMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php +
  • Referred product abstracts to be imported
  • Referred measurement units to be imported
  • |Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin| + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +A custom multiplier that is used to calculate base unit. This field can be empty if both base and sales unit code is defined in the general [conversion ratios](https://github.com/spryker/util-measurement-unit-conversion/blob/1ae26cf8e629d25157e273097941bde438a24ddc/src/Spryker/Service/UtilMeasurementUnitConversion/UtilMeasurementUnitConversionConfig.php).

    Example: 5 means that 1 quantity of this sales unit represents 5 of the base unit.

    | +|precision|mandatory|integer, power of ten, empty|100|A property that affects how detailed to render a float measurement unit. Affects visual only, not used in calculations.
    When left empty, the precision of the measurement unit is used.| +|is_displayed|mandatory|integer|0|Controls if the sales unit can be displayed for customers.| +|is_default|mandatory|integer|1|Controls if this sales unit is preferred as the default sales unit when offered for customers.
    Takes no effect if is_displayed set as 0.
    1 product concrete can have up to 1 default sales unit.| + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementSalesUnitDataImportPlugin | Imports sales measurement unit definitions into the database. |
    • Referred product concretes to be imported
    • Related product abstracts to be imported
    • Related product abstracts' base units to be imported
    • Referred measurement units to be imported
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +Proceed with this step even if you have only 1 Store. + +{% endinfo_block %} + +Prepare your data according to your requirements using our demo data: + +**vendor/spryker/product-measurement-unit-data-import/data/import/product_measurement_sales_unit_store.csv** + +```yaml +sales_unit_key,store_name +sales_unit_1,DE +sales_unit_1,US +sales_unit_1,AT +sales_unit_2,DE +sales_unit_2,US +sales_unit_2,AT +sales_unit_3,DE +sales_unit_3,US +sales_unit_3,AT +sales_unit_4,DE +sales_unit_4,AT +sales_unit_5,US +sales_unit_6,DE +sales_unit_6,US +sales_unit_6,AT +sales_unit_7,DE +sales_unit_7,US +sales_unit_7,AT +sales_unit_8,DE +sales_unit_8,US +sales_unit_8,AT +sales_unit_9,DE +sales_unit_9,US +sales_unit_9,AT +sales_unit_10,DE +sales_unit_10,US +sales_unit_10,AT +sales_unit_11,DE +sales_unit_11,US +sales_unit_11,AT +sales_unit_12,DE +sales_unit_12,AT +sales_unit_12,US +sales_unit_13,DE +sales_unit_13,US +sales_unit_13,AT +sales_unit_14,DE +sales_unit_14,US +sales_unit_14,AT +sales_unit_15,DE +sales_unit_15,US +sales_unit_15,AT +sales_unit_16,DE +sales_unit_16,US +sales_unit_16,AT +sales_unit_17,DE +sales_unit_17,US +sales_unit_17,AT +sales_unit_18,DE +sales_unit_18,US +sales_unit_18,AT +sales_unit_19,DE +sales_unit_19,US +sales_unit_19,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| sales_unit_key |mandatory | string | sales_unit_1 |A reference used for the product measurement sales unit data import. | +|store_name|mandatory|string|DE|Contains the store name where the sales unit is available.| + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|ProductMeasurementSalesUnitStoreDataImportPlugin |Imports sales measurement units' Store configuration into the database. |
    • Referred sales units to be imported.
    • Referred Stores to be imported.
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +` action works with measurement units by adding an item to cart with sales unit and checking if `QuoteTransfer.items[].quantitySalesUnit` record gets populated. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that checkout workflow works with measurement unit by ordering item with sales unit and checking the `spy_sales_order_item` contains `quantity_base_measurement_unit_name`, `quantity_measurement_unit_name`, `quantity_measurement_unit_code`, `quantity_measurement_unit_precision` and `quantity_measurement_unit_conversion` fields populated. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that abstract products which have measurement units don't have `add_to_cart_sku` field at Elasticsearch document. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that every order item from the `SalesFacade::getOrderItems()` results contains quantity sales unit data. + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core E-commerce | {{page.release_tag}} | +|Checkout| {{page.release_tag}} | +| | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/measurement-units: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductMeasurementUnitWidget | vendor/spryker-shop/product-measurement-unit-widget | + +{% endinfo_block %} + + +### 2) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.item_quantity,Quantity,en_US +product.measurement.sales_unit,Sales Unit,en_US +page.detail.add-to-cart,Add to Cart,en_US +measurement_units.recommendation.between-units-info,The quantity you have chosen is in between 2 base units,en_US +measurement_units.recommendation.min-violation,Minimum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.max-violation,Maximum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.suggestion,Would you like to add,en_US +cart.pre.check.quantity.min.failed,Minimum quantity requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.pre.check.quantity.max.failed,Maximum quantity for product SKU '%sku%' is exceeded.,en_US +cart.pre.check.quantity.interval.failed,Quantity interval requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.item_quantity,Anzahl,de_DE +product.measurement.sales_unit,Maßeinheit,de_DE +page.detail.add-to-cart,In den Warenkorb,de_DE +measurement_units.recommendation.between-units-info,Ihre gewählte Anzahl liegt zwischen 2 basis Einheiten,de_DE +measurement_units.recommendation.min-violation,Minimale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.max-violation,Maximale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.suggestion,Was würden Sie gerne hinzufügen? ,de_DE +cart.pre.check.quantity.min.failed,Die Mindestanzahl für Produkt SKU '%sku%' ist nicht erreicht.,de_DE +cart.pre.check.quantity.max.failed,Die Maximalanzahl für Produkt SKU '%sku%' ist überschritten.,de_DE +cart.pre.check.quantity.interval.failed,Die Anzahl für Produkt SKU '%sku%' liegt nicht innerhalb des vorgegebenen Intervals.,de_DE +cart.item.sales_unit.not_found,Sales unit is not found for product with SKU '%sku%'.,en_US +cart.item.sales_unit.not_found,Verkaufseinheit wird für Produkt mit SKU '%sku%' nicht gefunden.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitWidgetPlugin | Allows customers to select sales units for the product when adding to cart. |None | SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\ProductDetailPage | +|QuantitySalesUnitWidgetPlugin|Displays selected sales unit information for products on the cart overview page.|None|SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\CartPage| + +**src/Pyz/Yves/ProductDetailPage/ProductDetailPageDependencyProvider.php** + +```php + sales unit calculations. Applies product quantity restrictions on sales unit level. Offers recommendation when invalid quantity is selected. Maintains stock-based quantity and sales unit information for posting |vendor/spryker-shop/product-measurement-unit-widget/src/SprykerShop/Yves/ProductMeasurementUnitWidget/Theme/default/components/molecules/measurement-quantity-selector/measurement-quantity-selector.ts | + +Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +| --- | --- | +| ProductMeasurementUnitWidgetPlugin | Go to the product detail page where the product has sales units and add a product to the cart with a sales unit. | +| QuantitySalesUnitWidgetPlugin | Go to the cart overview page and see if the sales unit information appears for a product. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-availability-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-availability-feature.md index 6255ee0af30..cc03e213b2b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-availability-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-availability-feature.md @@ -12,15 +12,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Product Offer Service Points | {{page.version}} | [Install the Product Offer Service Points feature](/docs/pbc/all/offer-management/{{page.version}}/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | -| Marketplace Inventory Management | {{page.version}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Product Offer Service Points | {{page.release_tag}} | [Install the Product Offer Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | ### 1) Install the required modules 1. Install the required modules using Composer: ```bash -composer require spryker-feature/product-offer-service-points-availability: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-offer-service-points-availability: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-feature.md index 50e536206f3..32de0cbcb3b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-service-points-feature.md @@ -12,13 +12,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Product Offer | {{page.version}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Service Points | {{page.version}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Product Offer | {{page.release_tag}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product-offer-service-points: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-offer-service-points: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -252,7 +252,7 @@ product_offer_service_point.validation.product_offer_not_unique,Ein Product Offe console data:import glossary ``` -### 5) Configure export to Redis +### 5) Configure export to the key-value store (Redis or Valkey) Configure tables to be published and synchronized to the Storage on create, edit, and delete changes. @@ -359,7 +359,7 @@ class ProductOfferServicePointStorageConfig extends SprykerProductOfferServicePo | ServiceWritePublisherPlugin | Publishes product offer services data by `SpyService` entity events. | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Publisher\Service | | ServicePointWritePublisherPlugin | Publishes product offer services data by `SpyServicePoint` entity events. | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Publisher\ServicePoint | | ServicePointStoreWritePublisherPlugin | Publishes product offer services data by `SpyServicePointStore` entity events. | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Publisher\ServicePointStore | -| ProductOfferServicePublisherTriggerPlugin | Allows to populate product offer service storage table with data and trigger further export to Redis. | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Publisher | +| ProductOfferServicePublisherTriggerPlugin | Allows to populate product offer service storage table with data and trigger further export to the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Publisher |
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php @@ -425,7 +425,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |------------------------------------------------------------|----------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| -| ProductOfferServiceSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer service storage table content into Redis. | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Synchronization | +| ProductOfferServiceSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer service storage table content into the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -466,9 +466,9 @@ Make sure that the `product-offer-service` synchronization plugin works correctl 2. Run the `console sync:data -r product_offer_service` command. 3. Make sure that, in your system, storage entries are displayed with the `kv:product_offer_service:{store}:{product_offer_reference}` mask. -Make sure when a product offer service is created via DataImport, it's exported to Redis accordingly. +Make sure when a product offer service is created via DataImport, it's exported to the key-value store (Redis or Valkey) accordingly. -Make sure that, in Redis, data is displayed in the following format: +Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: ```yaml { diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-availability-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-availability-feature.md index 199cf1630a3..b1d2fd5dc5f 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-availability-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-availability-feature.md @@ -12,13 +12,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Product Offer Service Points Availability | {{page.version}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/{{page.version}}/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product-offer-shipment-availability: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-offer-shipment-availability: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-feature.md index b0a62ca1bc2..3b45dbdb9d7 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-offer-shipment-feature.md @@ -8,19 +8,19 @@ Follow the steps below to install the Product Offer Shipment feature core. ## Prerequisites -To start feature integration, integrate the following required features: +Before you start the feature integration, make sure you have integrated the following required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| Product Offer | {{page.version}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Product Offer | {{page.release_tag}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | ## 1) Install the required modules 1. Install the required modules using Composer: ```bash -composer require spryker-feature/product-offer-shipment:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-offer-shipment:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -142,7 +142,7 @@ Ensure the following transfers have been created: {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) Configure tables to be published to `spy_product_offer_shipment_type_storage` and synchronized to the Storage on create, edit, and delete changes: @@ -236,7 +236,7 @@ class ProductOfferShipmentTypeStorageConfig extends SprykerProductOfferShipmentT | ProductOfferStoreProductOfferShipmentTypeWritePublisherPlugin | Publishes product offer shipment type data by `SpyProductOfferStore` events. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Publisher\ProductOfferStore | | ShipmentTypeProductOfferShipmentTypeWritePublisherPlugin | Publishes product offer shipment type data by `SpyShipmentType` events. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Publisher\ShipmentType | | ShipmentTypeStoreProductOfferShipmentTypeWritePublisherPlugin | Publishes product offer shipment type data by `SpyShipmentTypeStore` events. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Publisher\ShipmentTypeStore | -| ProductOfferShipmentTypePublisherTriggerPlugin | Allows to populate product offer shipment type storage table with data and trigger further export to Redis. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Publisher | +| ProductOfferShipmentTypePublisherTriggerPlugin | Allows to populate product offer shipment type storage table with data and trigger further export to the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Publisher | **src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** @@ -271,7 +271,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider protected function getPublisherTriggerPlugins(): array { return [ - return new ProductOfferShipmentTypePublisherTriggerPlugin(), + new ProductOfferShipmentTypePublisherTriggerPlugin(), ]; } @@ -295,7 +295,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |-----------------------------------------------------------------|------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| -| ProductOfferShipmentTypeSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer shipment type storage table's content into Redis. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Synchronization | +| ProductOfferShipmentTypeSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer shipment type storage table's content into the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -336,9 +336,9 @@ Make sure that `product-offer-shipment-type` synchronization plugin works correc 2. Run the `console sync:data -r product_offer_shipment_type` command. 3. Make sure that, in your system, storage entries are displayed with the `kv:product_offer_shipment_type:{store}:{product_offer_reference}` mask. -Make sure that when a product offer shipment type relation is created or edited through BAPI, it's exported to Redis accordingly. +Make sure that when a product offer shipment type relation is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. -In Redis, make sure data is represented in the following format: +In the key-value store (Redis or Valkey), make sure data is represented in the following format: ```json { @@ -469,14 +469,14 @@ console data:import glossary Enable the following plugins: -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| -| ShipmentTypeProductOfferPostCreatePlugin | Persists the product offer shipment type to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer | -| ShipmentTypeProductOfferPostUpdatePlugin | Deletes redundant product offer shipment types from persistence. Persists missed product offer shipment types to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer | -| ShipmentTypeProductOfferExpanderPlugin | Expands `ProductOfferTransfer` with related shipment types. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer | -| ShipmentTypeProductOfferStorageExpanderPlugin | Expands `ProductOfferStorageTransfer` with shipment type storage data. | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\ProductOfferStorage | -| ShipmentTypeProductOfferAvailableShipmentTypeFilterPlugin | Filters out shipment types without the product offer shipment type relation. | | Spryker\Client\ClickAndCollectExample\Plugin\ShipmentTypeStorage | -| ShipmentTypeProductOfferViewSectionPlugin | Expands the product offer view section with shipment types. | | Spryker\Zed\ProductOfferShipmentTypeGui\Communication\Plugin\ProductOfferGui | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------| +| ShipmentTypeProductOfferPostCreatePlugin | Persists the product offer shipment type to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferPostUpdatePlugin | Deletes redundant product offer shipment types from persistence. Persists missed product offer shipment types to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferExpanderPlugin | Expands `ProductOfferTransfer` with related shipment types. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferStorageExpanderPlugin | Expands `ProductOfferStorageTransfer` with shipment type storage data. | | Spryker\Client\ProductOfferShipmentTypeStorage\Plugin\ProductOfferStorage | +| ShipmentTypeProductOfferAvailableShipmentTypeFilterPlugin | Filters out shipment types without the product offer shipment type relation. | | Spryker\Client\ClickAndCollectExample\Plugin\ShipmentTypeStorage | +| ShipmentTypeProductOfferViewSectionPlugin | Expands the product offer view section with shipment types. | | Spryker\Zed\ProductOfferShipmentTypeGui\Communication\Plugin\ProductOfferGui |
    src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php @@ -487,9 +487,9 @@ Enable the following plugins: namespace Pyz\Zed\ProductOffer; use Spryker\Zed\ProductOffer\ProductOfferDependencyProvider as SprykerProductOfferDependencyProvider; -use Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer\ShipmentTypeProductOfferExpanderPlugin; -use Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer\ShipmentTypeProductOfferPostCreatePlugin; -use Spryker\Zed\ProductOfferShipmentType\Communication\Plugins\ProductOffer\ShipmentTypeProductOfferPostUpdatePlugin; +use Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer\ShipmentTypeProductOfferExpanderPlugin; +use Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer\ShipmentTypeProductOfferPostCreatePlugin; +use Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer\ShipmentTypeProductOfferPostUpdatePlugin; class ProductOfferDependencyProvider extends SprykerProductOfferDependencyProvider { @@ -534,7 +534,7 @@ class ProductOfferDependencyProvider extends SprykerProductOfferDependencyProvid namespace Pyz\Client\ProductOfferStorage; use Spryker\Client\ProductOfferStorage\ProductOfferStorageDependencyProvider as SprykerProductOfferStorageDependencyProvider; -use Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\ProductOfferStorage\ShipmentTypeProductOfferStorageExpanderPlugin; +use Spryker\Client\ProductOfferShipmentTypeStorage\Plugin\ProductOfferStorage\ShipmentTypeProductOfferStorageExpanderPlugin; class ProductOfferStorageDependencyProvider extends SprykerProductOfferStorageDependencyProvider { diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-options-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-options-order-management-feature.md index 681f9648652..2547f16c901 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-options-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-options-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Product Options | {{page.version}} | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Product Options | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-order-management-feature.md index fc2c4712305..911982b19d1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-order-management-feature.md @@ -8,9 +8,9 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Product | {{page.version}} | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Product | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-rating-and-reviews-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-rating-and-reviews-feature.md index 24576098ac5..0dcfc582675 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-rating-and-reviews-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-rating-and-reviews-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product Rating and Reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) feature. +This document describes how to install the [Product Rating and Reviews](/docs/pbc/all/ratings-reviews/latest/ratings-and-reviews.html) feature. ## Install feature core @@ -12,13 +12,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/product-rating-reviews:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/product-rating-reviews:"{{page.release_tag}}" spryker-shop/product-review-widget:"^1.17.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -138,7 +138,7 @@ Make sure the following changes have been applied in transfer objects: ### 3) Import product reviews -For details about this step, see [Ratings and Reviews data import](/docs/pbc/all/ratings-reviews/{{page.version}}/import-and-export-data/ratings-and-reviews-data-import.html). +For details about this step, see [Ratings and Reviews data import](/docs/pbc/all/ratings-reviews/latest/import-and-export-data/ratings-and-reviews-data-import.html). ### 4) Add translations @@ -437,7 +437,7 @@ class ProductPageSearchDependencyProvider extends SprykerProductPageSearchDepend {% endinfo_block %} -### 5) Configure export to Redis +### 5) Configure export to the key-value store (Redis or Valkey) Configure tables to be published and synchronized to the Storage on create, edit, and delete changes: @@ -478,7 +478,7 @@ class ProductReviewStorageConfig extends SprykerProductReviewStorageConfig | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |------------------------------------------|--------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| -| ProductReviewSynchronizationDataPlugin | Allows synchronizing the product review search table content into Redis. | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Synchronization | +| ProductReviewSynchronizationDataPlugin | Allows synchronizing the product review search table content into the key-value store (Redis or Valkey). | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -508,7 +508,7 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |---------------------------------------------------|------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| -| ProductReviewEventResourceQueryContainerPlugin | Allows synchronizing the product abstract review storage table content with Redis. | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Event | +| ProductReviewEventResourceQueryContainerPlugin | Allows synchronizing the product abstract review storage table content with the key-value store (Redis or Valkey). | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Event | **src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** @@ -571,7 +571,7 @@ class EventDependencyProvider extends SprykerEventDependencyProvider 1. Fill the `spy_product_review` table with some data and run `console event:trigger -r product_abstract_review`. 2. Make sure that the `spy_product_abstract_review_storage` table is filled with respective data. 3. In the `spy_product_abstract_review_storage` table, change some records and run `console sync:data product_abstract_review`. -4. Make sure that your changes have been synced to the Redis. +4. Make sure that your changes have been synced to the key-value store (Redis or Valkey). {% endinfo_block %} @@ -652,7 +652,7 @@ class RouterDependencyProvider extends SprykerRouterDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |---------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| -| ProductReviewSummaryProductViewBulkExpanderPlugin | Expands `ProductViewTransfer` objects with product review rating data. | None | SprykerShop\Yves\ProductReviewWidget\Plugin\ProductGroupWidget | +| ProductReviewStorageProductViewExpanderPlugin | Expands `ProductViewTransfer` objects with product review rating data. | None | SprykerShop\Yves\ProductReviewWidget\Plugin\ProductGroupWidget | **src/Pyz/Yves/ProductGroupWidget/ProductGroupWidgetDependencyProvider.php** @@ -662,7 +662,7 @@ class RouterDependencyProvider extends SprykerRouterDependencyProvider namespace Pyz\Yves\ProductGroupWidget; use SprykerShop\Yves\ProductGroupWidget\ProductGroupWidgetDependencyProvider as SprykerShopProductGroupWidgetDependencyProvider; -use SprykerShop\Yves\ProductReviewWidget\Plugin\ProductGroupWidget\ProductReviewSummaryProductViewBulkExpanderPlugin; +use SprykerShop\Yves\ProductReviewWidget\Plugin\ProductGroupWidget\ProductReviewStorageProductViewExpanderPlugin; class ProductGroupWidgetDependencyProvider extends SprykerShopProductGroupWidgetDependencyProvider { @@ -672,7 +672,7 @@ class ProductGroupWidgetDependencyProvider extends SprykerShopProductGroupWidget protected function getProductViewBulkExpanderPlugins(): array { return [ - new ProductReviewSummaryProductViewBulkExpanderPlugin(), + new ProductReviewStorageProductViewExpanderPlugin(), ]; } } diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-relations-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-relations-feature.md index 45a97354561..963e44f65e5 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-relations-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-relations-feature.md @@ -10,15 +10,15 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| ProductRelations | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| ProductRelations | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require "spryker-feature/product-relations:"{{page.version}}" --update-with-dependencies +composer require "spryker-feature/product-relations:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -125,7 +125,7 @@ Make sure the following changes have been applied in transfer objects: {% endinfo_block %} -### 3) Configure export to Redis +### 3) Configure export to the key-value store (Redis or Valkey) Follow the procedure below to to publish tables on change (create, edit, delete) to the `spy_product_abstract_group_storage` table and synchronize the data to Storage. diff --git a/_includes/pbc/all/install-features/202410.0/install-the-product-sets-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-product-sets-feature.md index 2c4500eddf9..3961915cad0 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-product-sets-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-product-sets-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Product Sets feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/product-sets-feature-overview.html). +This document describes how to install the [Product Sets feature](/docs/pbc/all/content-management-system/latest/base-shop/product-sets-feature-overview.html). ## Prerequisites @@ -12,7 +12,6 @@ composer require spryker/product-set spryker/product-set-collector spryker/produ ``` 2. If you want to enable the Product Sets search powered by Elasticsearch, install the `spryker/search-elasticsearch` module: -3. ```bash composer require spryker/search-elasticsearch @@ -164,7 +163,7 @@ class ProductSetDependencyProvider extends SprykerProductSetDependencyProvider {% info_block warningBox "Sorting product sets" %} -You can reorder product sets in the Back Office. See [Reorder product sets](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.html) for more details. +You can reorder product sets in the Back Office. See [Reorder product sets](/docs/pbc/all/content-management-system/latest/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.html) for more details. {% endinfo_block %} @@ -179,3 +178,124 @@ Integrating the Product Set feature in Yves is completely up to your project's r 5. We've added **Add to cart** buttons per each product and also **Add all to cart** when all variants are selected. To handle adding multiple items to cart at once, we've added a custom cart controller action (`\Pyz\Yves\Cart\Controller\CartController::addItemsAction()`). Check out our [Demoshop](https://github.com/spryker/demoshop) for more detailed examples and ideas regarding the complete Yves integration.--> + +## Enable the text alternatives functionality + +The Text Alternatives functionality lets you add alternative text to product images for better accessibility and SEO. + +### 1) Upgrade modules + +Upgrade the following modules to the specified versions or higher + +| NAME | VERSION | +|------------------------------------|-----------| +| spryker/product-image | 3.20.0 | +| spryker/product-set-gui | 2.13.0 | +| spryker/product-set-page-search | 1.13.0 | +| spryker/product-set-storage | 1.13.0 | +| spryker/glossary | 3.16.0 | +| spryker/glossary-storage | 1.5.0 | +| spryker-shop/product-set-list-page | 1.2.0 | +| spryker-shop/product-set-widget | 1.10.0 | +| spryker-shop/shop-ui | 1.96.0 | + +```bash +composer require spryker/glossary:^3.16.0 spryker/glossary-storage:^1.5.0 spryker/product-image:^3.20.0 spryker/product-set-gui:^2.13.0 spryker/product-set-page-search:^1.13.0 spryker/product-set-storage:^1.13.0 spryker-shop/product-set-list-page:^1.2.0 spryker-shop/product-set-widget:^1.10.0 spryker-shop/shop-ui:^1.96.0 --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------|-------------------------------------------| +| ProductImage | vendor/spryker/spryker/product-image | +| ProductSetGui | vendor/spryker/product-set-gui | +| ProductSetPageSearch | vendor/spryker/product-set-page-search | +| ProductSetStorage | vendor/spryker/product-set-storage | +| Glossary | vendor/spryker/glossary | +| GlossaryStorage | vendor/spryker/glossary-storage | +| ProductSetListPage | vendor/spryker-shop/product-set-list-page | +| ProductSetWidget | vendor/spryker-shop/product-set-widget | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +### 2) Enable the feature in the ProductImage module configuration + +**src/Pyz/Shared/ProductImage/ProductImageConfig.php** + +```php + + */ + protected function getDiscountPostUpdatePlugins(): array + { + return [ + new DeleteDiscountVoucherPoolDiscountPostUpdatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Merchandising > Discount**. +2. Create a discount with the **Voucher** type. +3. Generate several voucher codes for the created discount. +4. Switch the discount type from **Voucher** to another type–for example, **Cart rule**. Make sure the voucher pool and voucher codes related to discount are deleted from `spy_discount_voucher_pool` and from `spy_discount_voucher` DB tables. + +{% endinfo_block %} + +### 5) Build Zed UI frontend Enable Javascript and CSS changes: diff --git a/_includes/pbc/all/install-features/202410.0/install-the-push-notification-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-push-notification-feature.md index 8595472a4b5..ff10e2c625e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-push-notification-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-push-notification-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/push-notification-feature-overview.html). +This document describes how to install the [Push Notification feature](/docs/pbc/all/miscellaneous/latest/push-notification-feature-overview.html). ## Install feature core @@ -13,14 +13,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/push-notification: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/push-notification: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-discontinued-products-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-discontinued-products-feature.md index e5af070360f..bb22a7f5ccb 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-discontinued-products-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-discontinued-products-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -|Quick Add To Cart | {{page.version}} | -|Discontinued Products | {{page.version}} | +|Quick Add To Cart | {{page.release_tag}} | +|Discontinued Products | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-feature.md index f004f93f6c8..526e9a81cc1 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-feature.md @@ -7,17 +7,17 @@ To start the feature integration, overview and install the necessary features: | NAME | VERSION | | --- | --- | -| Spryker Core E-commerce | {{page.version}} | -| Cart| {{page.version}} | -| Product | {{page.version}} | -| Checkout | {{page.version}} | +| Spryker Core E-commerce | {{page.release_tag}} | +| Cart| {{page.release_tag}} | +| Product | {{page.release_tag}} | +| Checkout | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/quick-add-to-cart:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/quick-add-to-cart:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -131,10 +131,10 @@ To start feature integration, review and install the necessary features: | NAME | VERSION | |---|---| -|Spryker Core| {{page.version}} | -|Cart| {{page.version}} | -|Product| {{page.version}} | -|Checkout| {{page.version}} | +|Spryker Core| {{page.release_tag}} | +|Cart| {{page.release_tag}} | +|Product| {{page.release_tag}} | +|Checkout| {{page.release_tag}} | ### 1) Install the required modules @@ -357,5 +357,5 @@ Make the following checks at `https://mysprykershop.com/quick-order`: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |---------|--------------|--------------| -| Marketplace Product + Quick Add to Cart | | [Install the Marketplace Product + Quick Add to Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html) | -| Marketplace Product Offer + Quick Add to Cart | | [Install the Marketplace Product Offer + Quick Add to Cart feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html) | +| Marketplace Product + Quick Add to Cart | | [Install the Marketplace Product + Quick Add to Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html) | +| Marketplace Product Offer + Quick Add to Cart | | [Install the Marketplace Product Offer + Quick Add to Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-measurement-units-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-measurement-units-feature.md index ee7d280b971..c65fd5b9a45 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-measurement-units-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-measurement-units-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | |---|---| -|Quick Order| {{page.version}} | -|Measurement units| {{page.version}} | +|Quick Order| {{page.release_tag}} | +|Measurement units| {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-non-splittable-products-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-non-splittable-products-feature.md index 48eac5eadf8..73ce226a66f 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-non-splittable-products-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-non-splittable-products-feature.md @@ -8,8 +8,8 @@ To start feature integration, review and install the necessary features: | NAME | VERSION | |---|---| -|Quick Add To Cart| {{page.version}} | -|Non-splittable Products| {{page.version}} | +|Quick Add To Cart| {{page.release_tag}} | +|Non-splittable Products| {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-packaging-units-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-packaging-units-feature.md index b5b19423db1..70da1b61ba0 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-packaging-units-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-packaging-units-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | |---|---| -|Quick Order| {{page.version}} | -|Packaging Units| {{page.version}} | +|Quick Order| {{page.release_tag}} | +|Packaging Units| {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-shopping-lists-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-shopping-lists-feature.md index c80a584bfba..333fb156588 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-shopping-lists-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quick-add-to-cart-shopping-lists-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | |---|---| -|Quick Order| {{page.version}} | -|Shopping Lists| {{page.version}} | +|Quick Order| {{page.release_tag}} | +|Shopping Lists| {{page.release_tag}} | ### 1) Set up widgets diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-approval-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-approval-process-feature.md index 40d9b388049..83fff225a8b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-approval-process-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-approval-process-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------|------------------|------------------| -| Quotation Process | {{page.version}} | [Install the Quotation Process feature](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-feature.html) | -| Approval Process | {{page.version}} | [Install the Approval Process feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html) | +| Quotation Process | {{page.release_tag}} | [Install the Quotation Process feature](/docs/pbc/all/request-for-quote/latest/install-and-upgrade/install-features/install-the-quotation-process-feature.html) | +| Approval Process | {{page.release_tag}} | [Install the Approval Process feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-feature.md index 51a78024660..179d6d229ba 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-feature.md @@ -8,18 +8,18 @@ Install the required features: | NAME | VERSION | | --- | --- | -|Spryker Core | {{page.version}} | -| Cart | {{page.version}} | -|Company Account | {{page.version}} | -|Prices | {{page.version}} | -| Agent Assist | {{page.version}} | +|Spryker Core | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +|Company Account | {{page.release_tag}} | +|Prices | {{page.release_tag}} | +| Agent Assist | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/quotation-process: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/quotation-process: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -409,18 +409,18 @@ Install the required features: | NAME | VERSION | | --- | --- | -|Spryker Core | {{page.version}} | -| Cart | {{page.version}} | -| Company Account | {{page.version}} | -|Prices | {{page.version}} | -|Agent Assist | {{page.version}} | +|Spryker Core | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | +|Prices | {{page.release_tag}} | +|Agent Assist | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/quotation-process: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/quotation-process: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-multiple-carts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-multiple-carts-feature.md index 96f98672bdf..4bd56e99ea6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-multiple-carts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-quotation-process-multiple-carts-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Quotation Process | {{page.version}} | -| Multiple Carts | {{page.version}} | +| Quotation Process | {{page.release_tag}} | +| Multiple Carts | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-reclamations-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-reclamations-feature.md index 08fb1c971d9..ded406794d5 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-reclamations-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-reclamations-feature.md @@ -8,15 +8,15 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Order Management | {{page.version}} | -| Spryker Core | {{page.version}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/reclamations: "{{page.version}}" --update-with-dependencies` +composer require spryker-feature/reclamations: "{{page.release_tag}}" --update-with-dependencies` ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-reorder-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-reorder-feature.md new file mode 100644 index 00000000000..670adf99646 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-reorder-feature.md @@ -0,0 +1,600 @@ +This document describes how to install the Reorder feature. + +## Install feature core + +Follow the steps below to install the Reorder feature core. + +Some plugins mentioned in the document are needed only for optional features. The document provides a list of plugins for all possible integration scenarios, but you need to include only the plugins that match your setup. + + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/reorder: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|------------------------------------------------| +| CartReorder | vendor/spryker/cart-reorder | +| CartReorderExtension | vendor/spryker/cart-reorder-extension | +| CartReorderRestApi | vendor/spryker/cart-reorder-rest-api | +| CartReorderRestApiExtension | vendor/spryker/cart-reorder-rest-api-extension | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------------------|------------------------------------------------|-----------| +| A regular expression. | Used to close access for guest users. | | + +**config/Shared/config_default.php** + +```php + + */ + protected function getCartReorderQuoteProviderStrategyPlugins(): array + { + return [ + new ResetItemsSessionCartReorderQuoteProviderStrategyPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php + +```php + + */ + protected function getCartReorderValidatorPlugins(): array + { + return [ + new CurrentStoreCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderQuoteProviderStrategyPluginInterface> + */ + protected function getCartReorderQuoteProviderStrategyPlugins(): array + { + return [ + new ReplacePersistentCartReorderQuoteProviderStrategyPlugin(), + new NewPersistentCartReorderQuoteProviderStrategyPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPreReorderPluginInterface> + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new CopyOrderCurrencyCartPreReorderPlugin(), + new CopyOrderPriceModeCartPreReorderPlugin(), + new ProductListRestrictedItemsCartPreReorderPlugin(), + new ReplaceBundledItemsCartPreReorderPlugin(), + new MergeProductMeasurementUnitItemsCartPreReorderPlugin(), + new MergeProductPackagingUnitItemsCartPreReorderPlugin(), + new MergeConfigurableBundleItemsCartPreReorderPlugin(), + new CartNoteCartPreReorderPlugin(), + new OrderCustomReferenceCartPreReorderPlugin(), + new MergeProductQuantityRestrictionItemsCartPreReorderPlugin(), + new CopyOrderCommentThreadCartPreReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderItemHydratorPluginInterface> + */ + protected function getCartReorderItemHydratorPlugins(): array + { + return [ + new ProductMeasurementUnitCartReorderItemHydratorPlugin(), + new ProductPackagingUnitCartReorderItemHydratorPlugin(), + new CartNoteCartReorderItemHydratorPlugin(), + new ProductOfferCartReorderItemHydratorPlugin(), + new MerchantProductCartReorderItemHydratorPlugin(), + new MerchantProductOfferCartReorderItemHydratorPlugin(), + new ProductConfigurationCartReorderItemHydratorPlugin(), + new ProductOptionCartReorderItemHydratorPlugin(), + new ConfigurableBundleCartReorderItemHydratorPlugin(), + new ConfigurableBundleNoteCartReorderItemHydratorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPostReorderPluginInterface> + */ + protected function getCartPostReorderPlugins(): array + { + return [ + new UpdateQuoteCartPostReorderPlugin(), + new ConfiguredBundleCartPostReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderPreAddToCartPluginInterface> + */ + protected function getCartReorderPreAddToCartPlugins(): array + { + return [ + new RemoveUnavailableItemsCartReorderPreAddToCartPlugin(), + new RemoveInactiveItemsCartReorderPreAddToCartPlugin(), + new RemoveInactiveProductOffersCartReorderPreAddToCartPlugin(), + new RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderOrderItemFilterPluginInterface> + */ + protected function getCartReorderOrderItemFilterPlugins(): array + { + return [ + new ProductBundleCartReorderOrderItemFilterPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new CartReorderResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that a customer can reorder with different types of products on the cart page. + +{% endinfo_block %} + +## Install feature frontend + +To install the feature frontend, take the following steps. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/reorder: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------|-------------------------------------------------| +| CartReorderPage | vendor/spryker-shop/cart-reorder-page | +| CartReorderPageExtension | vendor/spryker-shop/cart-reorder-page-extension | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cart_reorder_page.reorder_all,Reorder all,en_US +cart_reorder_page.reorder_all,Alle Artikel Nachbestellen,de_DE +cart_reorder_page.reorder,Reorder,en_US +cart_reorder_page.reorder,Nachbestellen,de_DE +cart_reorder_page.reorder_selected,Reorder selected items,en_US +cart_reorder_page.reorder_selected,Ausgewählte Artikel Nachbestellen,de_DE +cart_reorder.pre_add_to_cart.inactive_product_option_item_removed,Inactive item %sku% was removed from your shopping cart.,en_US +cart_reorder.pre_add_to_cart.inactive_product_option_item_removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------|--------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| CartReorderPageRouteProviderPlugin | Expands router collection with the `cart-reorder` endpoint. | | SprykerShop\Yves\CartReorderPage\Plugin\Router | +| ProductAvailabilityCartReorderItemCheckboxAttributeExpanderPlugin | Overwrites the disabled attribute for unavailable items. | | SprykerShop\Yves\AvailabilityWidget\Plugin\CartReorderPage | +| ProductBundleCartReorderItemCheckboxAttributeExpanderPlugin | Overwrites attribute name and value for bundle items. | | SprykerShop\Yves\ProductBundleWidget\Plugin\CartReorderPage | +| ProductBundleCartReorderRequestExpanderPlugin | Expands `CartReorderRequestTransfer` with bundle item identifiers. | | SprykerShop\Yves\ProductBundleWidget\Plugin\CartReorderPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new CartReorderPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartReorderPage/CartReorderPageDependencyProvider.php** + +```php + + */ + protected function getCartReorderItemCheckboxAttributeExpanderPlugins(): array + { + return [ + new ProductAvailabilityCartReorderItemCheckboxAttributeExpanderPlugin(), + new ProductBundleCartReorderItemCheckboxAttributeExpanderPlugin(), + ]; + } + + /** + * @return list<\SprykerShop\Yves\CartReorderPageExtension\Dependency\Plugin\CartReorderRequestExpanderPluginInterface> + */ + protected function getCartReorderRequestExpanderPlugins(): array + { + return [ + new ProductBundleCartReorderRequestExpanderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure a customer can reorder on the order details and order list pages. + +{% endinfo_block %} + +### 4) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|---------------------------------------------------------------------------------------|---------------|-----------------------------------------| +| CartReorderWidget | Enables customers to reorder existing orders on the order table page. | | SprykerShop\Yves\CartReorderPage\Widget | +| CartReorderItemCheckboxWidget | Enables customers to reorder concrete products from existing orders on the order detail page. | | SprykerShop\Yves\CartReorderPage\Widget | +| CartReorderItemsWidget | Enables customers to reorder existing orders on the order details page. | | SprykerShop\Yves\CartReorderPage\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + CartReorderWidget::class, + CartReorderItemCheckboxWidget::class, + CartReorderItemsWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|-------------------------------|-----------------------------------------------------------------------------------------------------------------------| +| CartReorderWidget | Go to the **Order List** page and make sure you can reorder an existing order by clicking the reorder button. | +| CartReorderItemCheckboxWidget | Go to the **Order Details** page and make sure you can select and reorder items clicking the reorder button. | +| CartReorderItemsWidget | Go to the **Order Details** page and make sure you can reorder all items by clicking the reorder all button. | + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202410.0/install-the-resource-sharing-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-resource-sharing-feature.md index 42ebe3d69df..2495ebd4f80 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-resource-sharing-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-resource-sharing-feature.md @@ -8,14 +8,14 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/resource-sharing: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/resource-sharing: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -70,14 +70,14 @@ Install the following required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/resource-sharing: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/resource-sharing: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-return-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-return-management-feature.md index be11f6087be..5e29c402158 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-return-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-return-management-feature.md @@ -8,15 +8,15 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | -| Order Management | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/return-management:"{{page.version}}" spryker/barcode:"^1.1.1" --update-with-dependencies +composer require spryker-feature/return-management:"{{page.release_tag}}" spryker/barcode:"^1.1.1" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -778,14 +778,14 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/return-management:"{{page.version}}" spryker-shop/barcode-widget:"^1.0.0" --update-with-dependencies +composer require spryker-feature/return-management:"{{page.release_tag}}" spryker-shop/barcode-widget:"^1.0.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-sales-data-export-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-sales-data-export-feature.md index 969ae41a3c2..e3587273e1e 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-sales-data-export-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-sales-data-export-feature.md @@ -211,7 +211,7 @@ class DataExportDependencyProvider extends SprykerDataExportDependencyProvider Run the export: ```bash -vendor/bin/console data:export -c order_export_config.yml` +vendor/bin/console data:export -c order_export_config.yml ``` Make sure the files with the exported data have been created in the `data/export` folder. diff --git a/_includes/pbc/all/install-features/202410.0/install-the-scheduled-prices-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-scheduled-prices-feature.md index b3ab96a40dc..9936c91a7aa 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-scheduled-prices-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-scheduled-prices-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Product Lists feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-lists-feature-overview.html). +This document describes how to install the [Product Lists feature](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-lists-feature-overview.html). ## Install feature core @@ -13,14 +13,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE| |---|---|---| -| Spryker Core | {{page.version}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Price | {{page.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Price | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/scheduled-prices:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/scheduled-prices:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-search-widget-for-concrete-products-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-search-widget-for-concrete-products-feature.md new file mode 100644 index 00000000000..40ef2f944a0 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-search-widget-for-concrete-products-feature.md @@ -0,0 +1,166 @@ + + +## Install feature core + +### Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | REQUIRED | VERSION | +| --- | --- | --- | +| Cart | v | {{page.release_tag}} | +| Product | v | {{page.release_tag}} | +| Non-splittable Products | | {{page.release_tag}} | + +### 1) Check the installed modules + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | REQUIRED | EXPECTED DIRECTORY | +| --- | --- | --- | +| Cart | v | vendor/spryker/cart | +| Product | v | vendor/spryker/product | +| ProductQuantity | | vendor/spryker/product-quantity | +| ProductSearchWidget | | vendor/spryker-shop/product-search-widget | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are present in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CartChangeTransfer | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| ItemTransfer | class | created |src/Generated/Shared/Transfer/ItemTransfer | +| MessageTransfer | class | created | src/Generated/Shared/Transfer/MessageTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Append glossary according to your language configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.quick_add_to_cart,Schnell zum Warenkorb hinzufügen,de_DE +cart.quick_add_to_cart,Quick add to Cart,en_US +cart.quick_add_to_cart.submit,In den Warenkorb,de_DE +cart.quick_add_to_cart.submit,Add to Cart,en_US +product_quick_add_widget.form.quantity,"# Qty",en_US +product_quick_add_widget.form.quantity,"# Anzahl",de_DE +product_quick_add_widget.form.error.quantity.required,"Quantity must be at least 1",en_US +product_quick_add_widget.form.error.quantity.required,"Die Anzahl muss mindestens 1 sein",de_DE +product_quick_add_widget.form.error.quantity.max_value_constraint,"Provided quantity is too high",en_US +product_quick_add_widget.form.error.quantity.max_value_constraint,"Die Menge ist leider zu groß",de_DE +product_quick_add_widget.form.error.redirect_route_empty,"Redirect router should not be empty",en_US +product_quick_add_widget.form.error.redirect_route_empty,"Redirect Router kann nicht leer sein",de_DE +product_quick_add_widget.form.error.sku.empty,"SKU should not be empty",en_US +product_quick_add_widget.form.error.sku.empty,"SKU kann nicht leer sein",de_DE +product-quantity.notification.quantity.min.failed,The ordered quantity was adjusted to the next possible quantity for the article because minimum quantity is %min%.,en_US +product-quantity.notification.quantity.min.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Mindestanzahl ist %min%.,de_DE +product-quantity.notification.quantity.max.failed,The ordered quantity was adjusted to the next possible quantity for the article because maximum quantity is %max%.,en_US +product-quantity.notification.quantity.max.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Maximalanzahl ist %max%.,de_DE +product-quantity.notification.quantity.interval.failed,The ordered quantity was adjusted to the next possible quantity for the article because quantity step is %step%.,en_US +product-quantity.notification.quantity.interval.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Intervallgröße ist %step%.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up widgets + +Enable global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +| --- | --- | --- | +| ProductConcreteAddWidget | Provides a form with the product concrete search and quantity inputs to add the concrete products to cart. | SprykerShop\Yves\ProductSearchWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ServicePointCheckoutPreConditionPlugin(), + ]; + } +``` + +{% info_block warningBox "Verification" %} + +1. Add an item to cart and proceed to checkout. +2. Select a service point. +3. Deactivate the service point. +4. Proceed to the **Summary** page. + On the **Summary** page, make sure you get the validation error. + +{% endinfo_block %} + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteMapperPlugins(): array + { + return [ + new ReplaceServicePointQuoteItemsQuoteMapperPlugin() # Has to be placed before PaymentsQuoteMapperPlugin + ]; + } +``` + +{% info_block warningBox "Verification" %} + +1. Prepare two product offers for the same product: + + 1. With support for the pickup shipment type and a connection to a service point. + 2. Without support for the pickup shipment type. + +2. Using Glue API, add the product offer 2 to cart. +3. Using the `checkout-data` endpoint, select a service point for the item. + Make sure the selected service point is returned in the response. Make sure the product offer 2 has been replaced with the product offer 1. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-service-points-customer-account-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-service-points-customer-account-management-feature.md index dc9e42f503f..d1988063b1b 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-service-points-customer-account-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-service-points-customer-account-management-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the Service Points + [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. +This document describes how to install the Service Points + [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. ## Prerequisites @@ -9,8 +9,8 @@ To start feature installation, install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Service Points | {{page.version}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | -| Customer Account Management | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/install-the-service-points-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-service-points-feature.md new file mode 100644 index 00000000000..8480480ac06 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-service-points-feature.md @@ -0,0 +1,1699 @@ + + +This document describes how to install the Service Points feature. + +## Install feature core + +Follow the steps below to install the Service Points feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/service-points: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------|------------------------------------------------| +| ServicePoint | vendor/spryker/service-point | +| ServicePointDataImport | vendor/spryker/service-point-data-import | +| ServicePointsBackendApi | vendor/spryker/service-points-backend-api | +| ServicePointSearch | vendor/spryker/service-point-search | +| ServicePointsRestApi | vendor/spryker/service-points-rest-api | +| ServicePointStorage | vendor/spryker/service-point-storage | +| ServicePointWidget | vendor/spryker/service-point-widget | +| SalesServicePoint | vendor/spryker/sales-service-point | +| SalesServicePointGui | vendor/spryker/sales-service-point-gui | +| SalesServicePointWidget | vendor/spryker-shop/sales-service-point-widget | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|---------------------------|-------------------------------------------------------------------------------------------------------------------------------| +| spy_service_point | Entity.spy_service_point.create
    Entity.spy_service_point.update
    Entity.spy_service_point.delete | +| spy_service_point_address | Entity.spy_service_point_address.create
    Entity.spy_service_point_address.update
    Entity.spy_service_point_address.delete | +| spy_service_point_store | Entity.spy_service_point_store.create
    Entity.spy_service_point_store.update
    Entity.spy_service_point_store.delete | +| spy_service_type | Entity.spy_service_type.create
    Entity.spy_service_type.update
    Entity.spy_service_type.delete | + +**src/Pyz/Zed/ServicePoint/Persistence/Propel/Schema/spy_service_point.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    + +
    +``` + +2. Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been applied to the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------|--------|---------| +| spy_service_point | table | created | +| spy_service_point_address | table | created | +| spy_service | table | created | +| spy_service_point_store | table | created | +| spy_service_point_search | table | created | +| spy_service_point_storage | table | created | +| spy_service_type | table | created | +| spy_region.uuid | column | created | +| spy_sales_order_item_service_point | table | created | + +- Make sure propel entities have been generated successfully by checking their existence. +- Make sure the existing Propel classes have been extended to include the new added columns. + +| CLASS NAMESPACE | EXTENDS | +|---------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| \Orm\Zed\ServicePoint\Persistence\SpyServicePoint | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePoint | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddress | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddress | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddressQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddressQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyService | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyService | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddressQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddressQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointStore | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointStore | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointStoreQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointStoreQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceType | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceType | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceTypeQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceTypeQuery | +| \Orm\Zed\ServicePointSearch\Persistence\SpyServicePointSearch | \Spryker\Zed\ServicePointSearch\Persistence\Propel\AbstractSpyServicePointSearch | +| \Orm\Zed\ServicePointSearch\Persistence\SpyServicePointSearchQuery | \Spryker\Zed\ServicePointSearch\Persistence\Propel\AbstractSpyServicePointSearchQuery | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServicePointStorage | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServicePointStorage | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServicePointStorageQuery | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServicePointStorageQuery | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServiceTypeStorage | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServiceTypeStorage | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServiceTypeStorageQuery | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServiceTypeStorageQuery | +| \Orm\Zed\SalesServicePoint\Persistence\SpySalesOrderItemServicePoint | \Spryker\Zed\SalesServicePoint\Persistence\Propel\AbstractSpySalesOrderItemServicePoint | +| \Orm\Zed\SalesServicePoint\Persistence\SpySalesOrderItemServicePointQuery | \Spryker\Zed\SalesServicePoint\Persistence\Propel\AbstractSpySalesOrderItemServicePointQuery | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------|-------|---------|---------------------------------------------------------------------------------| +| ServicePoint | class | created | src/Generated/Shared/Transfer/ServicePointTransfer | +| ServicePointCollection | class | created | src/Generated/Shared/Transfer/ServicePointCollectionTransfer | +| ServicePointCollectionRequest | class | created | src/Generated/Shared/Transfer/ServicePointCollectionRequestTransfer | +| ServicePointCollectionResponse | class | created | src/Generated/Shared/Transfer/ServicePointCollectionResponseTransfer | +| ServicePointCriteria | class | created | src/Generated/Shared/Transfer/ServicePointCriteriaTransfer | +| ServicePointConditions | class | created | src/Generated/Shared/Transfer/ServicePointConditionsTransfer | +| ServicePointSearchConditions | class | created | src/Generated/Shared/Transfer/ServicePointSearchConditions | +| ServicePointsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicePointsBackendApiAttributesTransfer | +| ServiceTypesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServiceTypesBackendApiAttributesTransfer | +| ServicesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicesBackendApiAttributesTransfer | +| ServicesRequestBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicesRequestBackendApiAttributesTransfer | +| ServicePointAddressesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicePointAddressesBackendApiAttributesTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| Sort | class | created | src/Generated/Shared/Transfer/SortTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| DataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReport | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| CountryCriteria | class | created | src/Generated/Shared/Transfer/CountryCriteriaTransfer | +| CountryConditions | class | created | src/Generated/Shared/Transfer/CountryConditionsTransfer | +| Country | class | created | src/Generated/Shared/Transfer/CountryTransfer | +| CountryCollection | class | created | src/Generated/Shared/Transfer/CountryCollectionTransfer | +| Region | class | created | src/Generated/Shared/Transfer/RegionTransfer | +| ServicePointAddressCollection | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionTransfer | +| ServicePointAddressCollectionRequest | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionRequestTransfer | +| ServicePointAddressCollectionResponse | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionResponseTransfer | +| ServicePointAddressCriteria | class | created | src/Generated/Shared/Transfer/ServicePointAddressCriteriaTransfer | +| ServicePointAddressConditions | class | created | src/Generated/Shared/Transfer/ServicePointAddressConditionsTransfer | +| ServicePointAddress | class | created | src/Generated/Shared/Transfer/ServicePointAddressTransfer | +| GlueRelationship | class | created | src/Generated/Shared/Transfer/GlueRelationshipTransfer | +| ServicePointSearchCollection | class | created | src/Generated/Shared/Transfer/ServicePointSearchCollectionTransfer | +| ServicePointSearch | class | created | src/Generated/Shared/Transfer/ServicePointSearchTransfer | +| ServicePointSearchRequest | class | created | src/Generated/Shared/Transfer/ServicePointSearchRequestTransfer | +| ServiceCollectionRequest | class | created | src/Generated/Shared/Transfer/ServiceCollectionRequestTransfer | +| ServiceCollectionResponse | class | created | src/Generated/Shared/Transfer/ServiceCollectionResponseTransfer | +| ServiceCollection | class | created | src/Generated/Shared/Transfer/ServiceCollectionTransfer | +| ServiceConditions | class | created | src/Generated/Shared/Transfer/ServiceConditionsTransfer | +| ServiceCriteria | class | created | src/Generated/Shared/Transfer/ServiceCriteriaTransfer | +| Service | class | created | src/Generated/Shared/Transfer/ServiceTransfer | +| ServiceTypeCollectionRequest | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionRequestTransfer | +| ServiceTypeCollectionResponse | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionResponseTransfer | +| ServiceTypeCollection | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionTransfer | +| ServiceTypeConditions | class | created | src/Generated/Shared/Transfer/ServiceTypeConditionsTransfer | +| ServiceTypeCriteria | class | created | src/Generated/Shared/Transfer/ServiceTypeCriteriaTransfer | +| ServiceType | class | created | src/Generated/Shared/Transfer/ServiceTypeTransfer | +| ServicePointStorage | class | created | src/Generated/Shared/Transfer/ServicePointStorageTransfer | +| ServicePointAddressStorage | class | created | src/Generated/Shared/Transfer/ServicePointAddressStorageTransfer | +| ServiceStorage | class | created | src/Generated/Shared/Transfer/ServiceStorageTransfer | +| CountryStorage | class | created | src/Generated/Shared/Transfer/CountryStorageTransfer | +| RegionStorage | class | created | src/Generated/Shared/Transfer/RegionStorageTransfer | +| ServicePointStorageCollection | class | created | src/Generated/Shared/Transfer/ServicePointStorageCollectionTransfer | +| ServicePointStorageCriteria | class | created | src/Generated/Shared/Transfer/ServicePointStorageCriteriaTransfer | +| ServicePointStorageConditions | class | created | src/Generated/Shared/Transfer/ServicePointStorageConditionsTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| SalesOrderItemServicePoint | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| Item | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| SalesOrderItemServicePointCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointCriteria | +| SalesOrderItemServicePointConditions | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointConditions | +| SalesOrderItemServicePointCollection | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointCollection | +| Quote | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| SaveOrder | class | created | src/Generated/Shared/Transfer/SaveOrderTransfer | +| ShipmentGroup | class | created | src/Generated/Shared/Transfer/ShipmentGroupTransfer | +| RestServicePointsAttributes | class | created | src/Generated/Shared/Transfer/RestServicePointsAttributesTransfer | +| RestServicePointAddressesAttributes | class | created | src/Generated/Shared/Transfer/RestServicePointAddressesAttributesTransfer | +| RestErrorMessage | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +To make the `service-points`, `service-point-addresses`, `services`, and `service-types` resources protected, adjust the protected paths configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + // ... + '/\/service-points.*/' => [ + 'isRegularExpression' => true, + ], + '/\/services.*/' => [ + 'isRegularExpression' => true, + ], + '/\/service-types.*/' => [ + 'isRegularExpression' => true, + ], + ]; + } +} +``` + +### 4) Import service points + +1. Prepare the data according to your requirements using our demo data: + +**data/import/common/common/service_point.csv** + +```csv +key,name,is_active +sp1,Spryker Main Store,1 +sp2,Spryker Berlin Store,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|-----------|-----------|--------------------|-----------------------------------------| +| key | ✓ | string | sp1 | Unique key of the service point. | +| name | ✓ | string | Spryker Main Store | Name of the service point. | +| is_active | ✓ | bool | 0 | Defines if the service point is active. | + +**data/import/common/{store}/service_point_store.csv** + +```csv +service_point_key,store_name +sp1,DE +sp2,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|--------------|-----------------------------------------| +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| store_name | ✓ | string | DE | Store relation for the service point. | + +**data/import/common/common/service_point_address.csv** + +```csv +service_point_key,region_iso2_code,country_iso2_code,address1,address2,address3,city,zip_code +sp1,,DE,Caroline-Michaelis-Straße,8,,Berlin,10115 +sp2,,DE,Julie-Wolfthorn-Straße,1,,Berlin,10115 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|---------------------------|----------------------------------| +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| region_iso2_code | | string | DE-BE | Region ISO2 code. | +| country_iso2_code | ✓ | string | DE | Country ISO2 code. | +| address1 | ✓ | string | Caroline-Michaelis-Straße | First line of address. | +| address2 | ✓ | string | 8a | Second line of address. | +| address3 | | string | 12/1 | Third line of address. | +| city | ✓ | string | Berlin | City. | +| zip_code | ✓ | string | 10115 | Zip code. | + +**data/import/common/common/service_type.csv** + +```csv +name,key +Pickup,pickup +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------|-----------|-----------|--------------|-----------------------------------| +| name | ✓ | string | Pickup | Unique key of the service type. | +| key | ✓ | string | pickup | Unique name of the service type. | + +**data/import/common/common/service.csv** + +```csv +key,service_point_key,service_type_key,is_active +s1,sp1,pickup,1 +s2,sp2,pickup,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|-------------------|-----------------------------------| +| key | ✓ | string | sps1 | Unique key of the service. | +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| service_type_key | ✓ | string | pickup | Unique key of the service type. | +| is_active | ✓ | bool | 0 | Defines if the service is active. | + +2. Enable the data imports per your configuration file—for example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: service-point + source: data/import/common/common/service_point.csv + - data_entity: service-point-store + source: data/import/common/{store}/service_point_store.csv + - data_entity: service-point-address + source: data/import/common/common/service_point_address.csv + - data_entity: service-type + source: data/import/common/common/service_type.csv + - data_entity: service + source: data/import/common/common/service.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|---------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| ServicePointDataImportPlugin | Imports service points into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServicePointStoreDataImportPlugin | Imports service point store relations into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServicePointAddressDataImportPlugin | Imports service point addresses into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServiceTypeDataImportPlugin | Imports service types into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServiceDataImportPlugin | Imports services into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ServicePointDataImportPlugin(), + new ServicePointStoreDataImportPlugin(), + new ServicePointAddressDataImportPlugin(), + new ServiceTypeDataImportPlugin(), + new ServiceDataImportPlugin(), + ]; + } +} +``` + +4. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT_ADDRESS), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_TYPE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE), + ]; + + return $commands; + } +} +``` + +5. Import data: + +```bash +console data:import service-point +console data:import service-point-address +console data:import:service +console data:import service-point-store +console data:import:service-type +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_service_point` +- `spy_service_point_store` +- `spy_service_point_address` +- `spy_service_type` +- `spy_service` + +{% endinfo_block %} + +### 5) Add translations + +1. Append the glossary according to your configuration: + +
    + Glossary +```csv +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +### 5) Configure export to Elasticsearch + +1. In `SearchElasticsearchConfig`, adjust the Elasicsearch config: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + protected function getQueueConfiguration(): array + { + return [ + ServicePointSearchConfig::QUEUE_NAME_SYNC_SEARCH_SERVICE_POINT, + ]; + } +} +``` + +4. Register the new queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ServicePointSearchConfig::QUEUE_NAME_SYNC_SEARCH_SERVICE_POINT => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +5. Configure the synchronization pool: + +**src/Pyz/Zed/ServicePointSearch/ServicePointSearchConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ServicePointSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ServicePointPublisherTriggerPlugin(), + ]; + } +} +``` + +#### Register publisher plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|-----------------------------------------------------------|---------------|-----------------------------------------------------------------------------------| +| ServicePointWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePoint | +| ServicePointDeletePublisherPlugin | Listens for events and unpublishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePoint | +| ServicePointAddressWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePointAddress | +| ServicePointStoreWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePointStore | +| ServiceWritePublisherPlugin | Listens for service events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\Service | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new ServicePointWritePublisherPlugin(), + new ServicePointDeletePublisherPlugin(), + new ServicePointAddressWritePublisherPlugin(), + new ServicePointStoreWritePublisherPlugin(), + new ServiceWritePublisherPlugin(), + ]; + } +} +``` + +#### Register query expander and result formatter plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointSearchResultFormatterPlugin | Maps raw Elasticsearch results to a transfer. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\ResultFormatter | +| SortedServicePointSearchQueryExpanderPlugin | Adds sorting to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| PaginatedServicePointSearchQueryExpanderPlugin | Adds pagination to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| StoreServicePointSearchQueryExpanderPlugin | Adds filtering by locale to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| ServiceTypesServicePointSearchQueryExpanderPlugin | Adds filtering by service types to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| ServicePointAddressRelationExcludeServicePointQueryExpanderPlugin | Excludes the service point address relation from a query if the `excludeAddressRelation` request parameter is provided. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | + +**src/Pyz/Client/ServicePointSearch/ServicePointSearchDependencyProvider.php** + +```php + + */ + protected function getServicePointSearchResultFormatterPlugins(): array + { + return [ + new ServicePointSearchResultFormatterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getServicePointSearchQueryExpanderPlugins(): array + { + return [ + new StoreServicePointSearchQueryExpanderPlugin(), + new SortedServicePointSearchQueryExpanderPlugin(), + new PaginatedServicePointSearchQueryExpanderPlugin(), + new ServiceTypesServicePointSearchQueryExpanderPlugin(), + new ServicePointAddressRelationExcludeServicePointQueryExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Fill the `spy_service_point` table with some data and run `console publish:trigger-events -r service_point`. + - Make sure the `spy_service_point_search` table is filled with respective data per store. + - Make sure, in Elasticearch documents, data is structured in the following format: + +```yaml +{ + "store":"DE", + "type":"service_point", + "search-result-data":{ + "idServicePoint":123, + "uuid":"40320bdf-c2af-4dd8-8d09-4550ece4287d", + "name":"Service Point Name #1", + "key":"service-point-name-1", + "address":{ + "idServicePointAddress":44, + "uuid":"2f02b327-0165-46ea-88df-0190d9a1c242", + "address1":"Seeburger Str.", + "address2":"270", + "address3":"Block B", + "city":"Berlin", + "zipCode":"10115", + "country":{ + "iso2Code":"DE", + "name":"Germany" + }, + "region":{ + "name":"Saxony" + } + } + }, + "full-text-boosted":[ + "Service Point Name #1" + ], + "full-text":[ + "Service Point Name #1", + "Seeburger Str. 270 Block B", + "Berlin", + "10115", + "Germany", + "Saxony" + ], + "suggestion-terms":[ + "Service Point Name #1" + ], + "completion-terms":[ + "Service Point Name #1" + ], + "string-sort":{ + "city":"Berlin" + } +} +``` + +1. In the `spy_service_point_search` table, change some records and run `console sync:data service_point`. + Make sure your changes have been synced to the respective Elasticsearch document. + +{% endinfo_block %} + +### 6) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published and synced to the Storage on create, edit, and delete changes: + +1. In `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`, adjust the `RabbitMq` module's configuration: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_SERVICE_POINT, + ]; + } +} +``` + +2. Register the queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_SERVICE_POINT => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +3. Configure the synchronization pool and event queue name: + +**src/Pyz/Zed/ServicePointStorage/ServicePointStorageConfig.php** + +```php +getServicePointStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ServicePointStoragePublisherTriggerPlugin(), + new ServiceTypePublisherTriggerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getServicePointStoragePlugins(): array + { + return [ + new ServicePointStorageWritePublisherPlugin(), + new ServicePointStorageAddressWritePublisherPlugin(), + new ServicePointStorageStoreWritePublisherPlugin(), + new ServicePointStorageServiceWritePublisherPlugin(), + new ServiceTypeWritePublisherPlugin(), + ]; + } +} +``` + +5. Set up the synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|--------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| ServicePointSynchronizationDataBulkRepositoryPlugin | Synchronizes the content of the service point storage table into the key-value store (Redis or Valkey). | | Spryker\Zed\ServicePointStorage\Communication\Plugin\Synchronization | +| ServiceTypeSynchronizationDataBulkRepositoryPlugin | Synchronizes the content of the service type storage table into the key-value store (Redis or Valkey). | | Spryker\Zed\ServicePointStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ServicePointStorageSynchronizationDataBulkRepositoryPlugin(), + new ServiceTypeSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the `service-point` trigger plugin works correctly: + +1. Fill the `spy_service_point`, `spy_service_point_store`, and `spy_servoce_point_address` tables with data. +2. Run the `console publish:trigger-events -r service_point` command. +- Make sure the `spy_service_point_storage` table has been filled with respective data. +- Make sure storage entries are now displayed with the `kv:service_point:{store}:{service_point_id}` mask. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `service-point` synchronization plugin works correctly: + +1. Fill the `spy_service_point_storage` table with some data. +2. Run the `console sync:data -r service_point` command. + Make sure storage entries are now displayed with the `kv:service_point:{store}:{service_point_id}` mask. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Make sure that, when a service point is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +- Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: + +```yaml +{ + "id_service_point": 1, + "uuid": "262feb9d-33a7-5c55-9b04-45b1fd22067e", + "name": "Spryker Main Store", + "key": "sp1", + "is_active": true, + "address": { + "id_service_point_address": 1, + "uuid": "74768ee9-e7dd-5e3c-bafd-b654e7946c54", + "address1": "Caroline-Michaelis-Stra\u00dfe", + "address2": "8", + "address3": null, + "zip_code": "10115", + "city": "Berlin", + "country": { + "iso2_code": "DE", + "id_country": 60 + }, + "region": { + "uuid": "2f02b327-0165-46ea-88df-0190d9a1c242", + "id_region": 1, + "name": "Berlin" + } + }, + "services": {[ + { + "idService": 1, + "uuid": "f34c6ee7-8c73-4542-a621-846d91fafa56", + "key": "s1", + "serviceType": "pickup" + }, + { + "idService": 2, + "uuid": "b516a972-59cf-41d5-9f91-ef1011179b60", + "key": "s2", + "serviceType": "delivery" + } + ]}, + "_timestamp": 1683216744.8334839 +} +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `service-type` trigger plugin works correctly: + +1. Fill the `spy_service_type` table with data. +2. Run the `console publish:trigger-events -r service_type` command. +- Make sure the `spy_service_type_storage` table has been filled with respective data. +- Make sure storage entries are now displayed with the `kv:service_type:{service_type_id}` mask. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify the `service-type` synchronization plugin works correctly: + +1. Fill the `spy_service_type_storage` table with some data. +2. Run the `console sync:data -r service_type` command. + Make sure storage entries are now displayed with the `kv:service_type:{service_type_id}` mask. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +- Make sure that when a service type is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +- Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: + +```json +{ + "id_service_type": 1, + "uuid": "2370ad95-4e9f-5ac3-913e-300c5805b181", + "name": "Pickup", + "key": "pickup", + "_timestamp": 1692352890.0729749 +} +``` + +{% endinfo_block %} + +### 7) Set up behavior + +1. To enable the Backend API, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointsBackendResourcePlugin | Registers the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplication | +| ServicePointAddressesBackendResourcePlugin | Registers the `service-point-addresses` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplication | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new ServicePointsBackendResourcePlugin(), + new ServicePointAddressesBackendResourcePlugin(), + new ServiceTypesBackendResourcePlugin(), + new ServicesBackendResourcePlugin(), + ]; + } +} + +``` + +2. To enable the Backend API relationships, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------------------------| +| ServicePointAddressesByServicePointsBackendResourceRelationshipPlugin | Adds the `service-point-addresses` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServicesByServicePointsBackendResourceRelationshipPlugin | Adds the `services` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServicePointsByServicesBackendResourceRelationshipPlugin | Adds the `service-points` relationship to the `services` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServiceTypesByServicesBackendResourceRelationshipPlugin | Adds the `service-types` relationship to the `services` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICE_POINTS, + new ServicePointAddressesByServicePointsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICE_POINTS, + new ServicesByServicePointsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICES, + new ServicePointsByServicesBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICES, + new ServiceTypesByServicesBackendResourceRelationshipPlugin(), + ); + + ... + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can send the following requests: + +- `POST https://glue-backend.mysprykershop.com/service-points` + + ```json + { + "data": { + "type": "service-points", + "attributes": { + "name": "Some Service Point", + "key": "ssp", + "isActive": "true", + "stores": ["DE", "AT"] + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-points", + "attributes": { + "name": "Another Name" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/service-points/` +- `GET https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + + ```json + { + "data": { + "type": "service-point-address", + "attributes": { + "address1": "address1", + "address2": "address2", + "address3": "address3", + "city": "city", + "zipCode": "10115", + "countryIso2Code": "DE" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses/{% raw %}{{service-point-address-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-point-address", + "attributes": { + "address1": "another address1", + "address2": "another address2", + "address3": "another address3", + "city": "another city", + "zipCode": "20115", + "countryIso2Code": "AT" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + +- `GET https://glue-backend.mysprykershop.com/service-types/` +- `GET https://glue-backend.mysprykershop.com/service-types/{% raw %}{{service-type-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/service-types/` + + ```json + { + "data": { + "type": "service-types", + "attributes": { + "name": "ServiceType", + "key": "st-4" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-types/{% raw %}{{service-type-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-types", + "attributes": { + "name": "ServiceType" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/services/` +- `GET https://glue-backend.mysprykershop.com/services/{% raw %}{{service-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/services/` + + ```json + { + "data": { + "type": "services", + "attributes": { + "isActive": false, + "key": 123, + "servicePointUuid": "{% raw %}{{service-point-uuid}}{% endraw %}", + "serviceTypeUuid": "{% raw %}{{service-type-uuid}}{% endraw %}" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/services/{% raw %}{{service-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "services", + "attributes": { + "isActive": true + } + } + } + ``` + +{% endinfo_block %} + +3. To enable the Storefront API, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------|---------------|-----------------------------------------------------------| +| ServicePointsResourceRoutePlugin | Registers the `service-points` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | +| ServicePointAddressesResourceRoutePlugin | Registers the `service-point-addresses` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ServicePointsResourceRoutePlugin(), + new ServicePointAddressesResourceRoutePlugin(), + ]; + } +} +``` + +4. To enable the Storefront API relationships, register the plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|-----------------------------------------------------------------------------------|---------------|-----------------------------------------------------------| +| ServicePointAddressesByServicePointUuidResourceRelationshipPlugin | Adds the `service-point-addresses` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ServicePointsRestApiConfig::RESOURCE_SERVICE_POINTS, + new ServicePointAddressesByServicePointUuidResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can send the following requests: + +- `GET https://glue.mysprykershop.com/service-points` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + +Make sure that you can include the `service-point-addresses` resource in the `service-points` resource requests. +- `GET https://glue.mysprykershop.com/service-points?include=service-point-addresses` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}?include=service-point-addresses` + +{% endinfo_block %} + +### 8) Set up the reorder process + +1. To enable reorder to work with service points, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointReorderItemSanitizerPlugin | Cleans up service point data during the reorder process. | | \SprykerShop\Yves\SalesServicePointWidget\Plugin\CustomerReorderWidget | + +**src/Pyz/Yves/CustomerReorderWidget/CustomerReorderWidgetDependencyProvider.php** + +```php + + */ + protected function getReorderItemSanitizerPlugins(): array + { + return [ + new ServicePointReorderItemSanitizerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure sales service points are empty for order items during the reorder process. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Service Points feature frontend. + +### 1) Add translations + +1. Append the glossary: + +```csv +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 2) Set up configuration + +Add the following configuration: + +1. Disable service points to be selected for product bundles during checkout: + +|CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------|----------------------------------------------------------|-----------------------------| +| ServicePointWidgetConfig::getNotApplicableServicePointAddressStepFormItemPropertiesForHydration() | Defines the list of properties in an `ItemTransfer` that are not intended for form hydration. | Pyz\Yves\ServicePointWidget | +| ProductBundleConfig::getAllowedBundleItemFieldsToCopy() | Defines the list of allowed fields to be copied from a source bundle item to destination bundled items. | Pyz\Zed\ProductBundle | + +**src/Pyz/Yves/ServicePointWidget/ServicePointWidgetConfig.php** + +```php + + */ + public function getNotApplicableServicePointAddressStepFormItemPropertiesForHydration(): array + { + return [ + ItemTransfer::BUNDLE_ITEM_IDENTIFIER, + ItemTransfer::RELATED_BUNDLE_ITEM_IDENTIFIER, + ]; + } +} +``` + +**src/Pyz/Zed/ProductBundle/ProductBundleConfig.php** + +```php + + */ + public function getAllowedBundleItemFieldsToCopy(): array + { + return [ + ItemTransfer::SHIPMENT, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure service points can't be selected for product bundles on the checkout address step. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route providers on the Storefront: + +| PROVIDER | NAMESPACE | +|---------------------------------------|---------------------------------------------------| +| ServicePointWidgetRouteProviderPlugin | SprykerShop\Yves\ServicePointWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + $routeProviders = [ + new ServicePointWidgetRouteProviderPlugin(), + ]; + + return $routeProviders; + } +} +``` + +### 4) Set up widgets + +1. To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------------------------------|---------------|--------------------------------------------| +| ServicePointSearchWidget | Enables customers to search and sort service points. | | SprykerShop\Yves\ServicePointWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ServicePointSearchWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +|--------------------------|-----------------------------------------------------------------| +| ServicePointSearchWidget | `{% raw %}{%{% endraw %} widget 'ServicePointSearchWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | + +Make sure that, during checkout, you can select a service point for the order items. + +{% endinfo_block %} + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` diff --git a/_includes/pbc/all/install-features/202410.0/install-the-service-points-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-service-points-order-management-feature.md index 5353741637e..8f076d7c7db 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-service-points-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-service-points-order-management-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the Service Points + [Order Management](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. +This document describes how to install the Service Points + [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. ## Install feature core @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Service Points | {{page.version}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | ### Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shared-carts-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shared-carts-feature.md index cbb10616c29..6d36070eb14 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shared-carts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shared-carts-feature.md @@ -8,18 +8,18 @@ Install the required features: | NAME | VERSION | |---|---| -|Cart|{{page.version}}| -|Persistent Cart |{{page.version}}| -|Multiple Carts|{{page.version}}| -|Company Account|{{page.version}}| -|Spryker Core|{{page.version}}| +|Cart| {{page.release_tag}} | +|Persistent Cart | {{page.release_tag}} | +|Multiple Carts| {{page.release_tag}} | +|Company Account| {{page.release_tag}} | +|Spryker Core| {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/shared-carts: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/shared-carts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -560,17 +560,17 @@ Install the required features: | NAME | VERSION | |---|---| -|Cart|{{page.version}}| -|Persistent Cart|{{page.version}}| -|Multiple Carts|{{page.version}}| -|Spryker Core|{{page.version}}| +|Cart| {{page.release_tag}} | +|Persistent Cart| {{page.release_tag}} | +|Multiple Carts| {{page.release_tag}} | +|Spryker Core| {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/shared-carts: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/shared-carts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-approval-process-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-approval-process-feature.md index 349bf73e481..caba2ec42fe 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-approval-process-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-approval-process-feature.md @@ -8,8 +8,8 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Shipment | {{page.version}} | -| Approval Process | {{page.version}} | +| Shipment | {{page.release_tag}} | +| Approval Process | {{page.release_tag}} | ### 1) Install the required modules @@ -136,7 +136,7 @@ Install the required features: | NAME | VERSION | | --- | --- | -| CheckoutPage | {{page.version}} | +| CheckoutPage | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-cart-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-cart-feature.md index bb63e7551d2..c61e4d9c972 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-cart-feature.md @@ -8,10 +8,10 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | |--------------|------------------| -| Spryker Core | {{page.version}} | -| Shipment | {{page.version}} | -| Cart | {{page.version}} | -| Prices | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Shipment | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +| Prices | {{page.release_tag}} | ### Install the required modules using Composer @@ -167,8 +167,8 @@ Install the required features: | NAME | VERSION | |----------|------------------| -| Shipment | {{page.version}} | -| Cart | {{page.version}} | +| Shipment | {{page.release_tag}} | +| Cart | {{page.release_tag}} | ### Add translations diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-customer-account-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-customer-account-management-feature.md index 004993d2de6..10bcb863a0c 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-customer-account-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-customer-account-management-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) + [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) + [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. ## Prerequisites @@ -9,8 +9,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | -| Customer Account Management | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ## 1) Add translations diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-feature.md index c52b277fc98..07896da3b8a 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-feature.md @@ -22,13 +22,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/shipment:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/shipment:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -781,7 +781,7 @@ Make sure that the configured data has been added to the `spy_glossary_key` and {% endinfo_block %} -### 6) Configure export to Redis +### 6) Configure export to the key-value store (Redis or Valkey) Configure tables to be published to `spy_shipment_type_storage` and synchronized to the Storage on create, edit, and delete changes: @@ -876,7 +876,7 @@ class ShipmentTypeStorageConfig extends SprykerShipmentTypeStorageConfig | ShipmentMethodPublishShipmentTypeWriterPublisherPlugin | Publishes shipment type data by `ShipmentMethod` publish events. | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Publisher\ShipmentMethod | | ShipmentMethodShipmentTypeWriterPublisherPlugin | Publishes shipment type data by `SpyShipmentMethod` entity events. | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Publisher\ShipmentMethod | | ShipmentMethodStoreShipmentTypeWriterPublisherPlugin | Publishes shipment type data by `SpyShipmentMethodStore` entity events. | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Publisher\ShipmentMethodStore | -| ShipmentTypePublisherTriggerPlugin | Enables populating the shipment type storage table with data and triggering the export to Redis. | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Publisher | +| ShipmentTypePublisherTriggerPlugin | Enables populating the shipment type storage table with data and triggering the export to the key-value store (Redis or Valkey). | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Publisher |
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php @@ -939,7 +939,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |-----------------------------------------------------|--------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| -| ShipmentTypeSynchronizationDataBulkRepositoryPlugin | Enables synchronizing the shipment type storage table's content into Redis. | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Synchronization | +| ShipmentTypeSynchronizationDataBulkRepositoryPlugin | Enables synchronizing the shipment type storage table's content into the key-value store (Redis or Valkey). | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Synchronization | **src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** @@ -980,9 +980,9 @@ Make sure that `shipment-type` synchronization plugin works correctly: 2. Run the `console sync:data -r shipment_type` command. 3. Make sure that, in your system, storage entries are displayed with the `kv:shipment_type:{store}:{shipment_type_id}` mask. -Make sure that when a shipment type is created or edited through BAPI, it's exported to Redis accordingly. +Make sure that when a shipment type is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. -In Redis, make sure data is represented in the following format: +In the key-value store (Redis or Valkey), make sure data is represented in the following format: ```json { @@ -1528,7 +1528,7 @@ class ShipmentDependencyProvider extends SprykerShipmentDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |----------------------------------------------------|---------------|---------------|-----------| -| ShipmentTypeShipmentMethodFilterPlugin | | | | +| ShipmentTypeShipmentMethodFilterPlugin | | | Spryker\Zed\ShipmentType\Communication\Plugin\Shipment | **src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php** @@ -1790,13 +1790,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product | {{page.version}} | [Isntall the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Isntall the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/shipment:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/shipment:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-product-offer-service-points-availability-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-product-offer-service-points-availability-feature.md index 9a8ba0720f9..bc5ea5fec82 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-product-offer-service-points-availability-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-product-offer-service-points-availability-feature.md @@ -8,15 +8,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Product Offer Service Points Availability | {{page.version}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/{{page.version}}/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | ## 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/shipment-product-offer-service-points-availability: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/shipment-product-offer-service-points-availability: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shipment-service-points-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shipment-service-points-feature.md index 4474a923352..196b4091bae 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shipment-service-points-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shipment-service-points-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) + Service Points feature. +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) + Service Points feature. ## Prerequisites @@ -9,15 +9,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | -| Service Points | {{page.version}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | ## 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/shipment-service-points: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/shipment-service-points: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-feature.md index f64466327d4..89c14cfb829 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-feature.md @@ -10,12 +10,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Company Account | {{site.version}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Customer Account Management | {{site.version}} | [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Prices | {{site.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules @@ -23,7 +23,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/shopping-lists:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/shopping-lists:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -221,7 +221,7 @@ Make sure that, in the database, the configured data has been added to the `spy_ {% endinfo_block %} -### 4) Configure export to Redis +### 4) Configure export to the key-value store (Redis or Valkey) This step publishes tables on change (create, edit, delete) to the `spy_shopping_list_storage` and syncs the data to Storage. @@ -346,7 +346,7 @@ class RabbitMqConfig extends SprykerRabbitMqConfig | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | | --- | --- | --- | --- | -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all shopping list messages to sync with Redis storage and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all shopping list messages to sync with the key-value store (Redis or Valkey) and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/Queue/QueueDependencyProvider.php** @@ -415,11 +415,11 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} -Make sure when shopping lists are exported or created, updated, deleted manually in the Back Office, they are exported (or removed) to Redis accordingly. +Make sure when shopping lists are exported or created, updated, deleted manually in the Back Office, they are exported (or removed) to the key-value store (Redis or Valkey) accordingly. -| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | -| --- | --- | --- | -| Redis | Shopping List |`shopping_list_customer:de--1` | +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Shopping List |`shopping_list_customer:de--1` | {% endinfo_block %} @@ -1007,18 +1007,18 @@ Install the following required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Company Account | {{site.version}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | -| Multiple Carts | {{site.version}} | [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | -| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | -| Customer Account Management | {{site.version}} | [Customer Account Management](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Company Account | {{page.release_tag}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Multiple Carts | {{page.release_tag}} | [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/shopping-lists:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/shopping-lists:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-product-options-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-product-options-feature.md new file mode 100644 index 00000000000..a0b7098d65a --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-shopping-lists-product-options-feature.md @@ -0,0 +1,239 @@ + + +## Install feature core + +### Prerequisites + +To start feature integration, review ad install the necessary features. + +| NAME | VERSION | +|---|---| +|Product Options| {{page.release_tag}} | +|Shopping Lists| {{page.release_tag}} | + +### 1) Install the required modules by bsing Composer + +Install the required modules using Composer: + +```bash +composer require spryker-feature/shopping-list-product-option-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Verify that the following modules were installed: + +| MODULE | EXPECTED DIRECTORY | +|---|---| +|ShoppingListProductOptionConnector|vendor/spryker/shopping-list-product-option-connector| + +{% endinfo_block %} + +### 2) Set up the database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```yaml +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are applied by checking your database: + +|MODULE|TYPE|EVENT| +|---|---|---| +|spy_shopping_list_product_option|table|created| + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are applied in transfer objects: + +| MODULE | TYPE | EVENT | PATH | +|---|---|---|---| +|ProductOption|class|created|src/Generated/Shared/Transfer/ProductOptionTransfer| +|ProductOptionCriteria|class|created|src/Generated/Shared/Transfer/ProductOptionCriteriaTransfer| +|ProductOptionCollection|class|created|src/Generated/Shared/Transfer/ProductOptionCollectionTransfer| +|ProductOptionValueStorage|class|created|src/Generated/Shared/Transfer/ProductOptionValueStorageTransfer| +|ShoppingListItem|class|created|src/Generated/Shared/Transfer/ShoppingListItemTransfer| + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|ShoppingListItemProductOptionRequestMapperPlugin|Provides the ability to map product options from request parameters to `ShoppingListItemTransfer`.|None|Spryker\Client\ShoppingListProductOptionConnector\ShoppingList| +| ProductOptionQuoteItemToItemMapperPlugin |Provides the ability to map an item product option to a shopping list item product option when transferring items from a shopping list to a cart. | None |Spryker\Client\ShoppingListProductOptionConnector\ShoppingListShoppingListItem| +|ProductOptionToItemProductOptionMapperPlugin|Provides the ability to map a shopping list item product option to an item product option when transferring items from a shopping list to a cart.|None|Spryker\Client\ShoppingListProductOptionConnector\ShoppingList| + +**src/Pyz/Client/ShoppingList/ShoppingListDependencyProvider.php** + +```php +store("secret_category", "secret_id", $secret); assertSame($secret, $vaultFacade->retrieve("secret_category", "secret_id")); ``` -#### Configure Redis +#### Configure key-value storage (Redis or Valkey) Add the configuration: | CONFIGURATION | SPECIFICATION | NAMESPACE | | --- | --- | --- | -| SessionRedisConstants::LOCKING_TIMEOUT_MILLISECONDS | Defines the Redis lock timeout in milliseconds. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::LOCKING_RETRY_DELAY_MICROSECONDS | Defines the retry delay between the attempts to acquire Redis lock in microseconds. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::LOCKING_LOCK_TTL_MILLISECONDS | Defines the time to live for Redis lock in milliseconds. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::LOCKING_TIMEOUT_MILLISECONDS | Defines the key-value storage (Redis or Valkey) lock timeout in milliseconds. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::LOCKING_RETRY_DELAY_MICROSECONDS | Defines the retry delay between the attempts to acquire key-value storage (Redis or Valkey) lock in microseconds. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::LOCKING_LOCK_TTL_MILLISECONDS | Defines the time to live for key-value storage (Redis or Valkey) lock in milliseconds. | Spryker\Shared\SessionRedis | | SessionFileConstants::ZED_SESSION_FILE_PATH | Defines the filesystem path for storing Zed sessions. | Spryker\Shared\SessionFile | -| SessionRedisConstants::ZED_SESSION_REDIS_PASSWORD | Defines the password for connecting to Redis as a Zed session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::ZED_SESSION_REDIS_HOST | Defines the host for connecting to Redis as a Zed session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::ZED_SESSION_REDIS_PORT | Defines the protocol for connecting to Redis as a Zed session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::ZED_SESSION_REDIS_DATABASE | Defines the database for connecting to Redis as a Zed session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::ZED_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs for connecting to Redis a as Zed session storage in replication mode. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::ZED_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options for connecting to Redis as a Zed session storage in replication mode. | Spryker\Shared\SessionRedis | -| StorageRedisConstants::STORAGE_REDIS_PROTOCOL | Defines the protocol for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_PASSWORD | Defines the password for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_HOST | Defines the host for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_PORT | Defines the port for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_DATABASE | Defines the database for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_PERSISTENT_CONNECTION | Enables and disables data persistence for a Redis connection. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_DATA_SOURCE_NAMES | Specifies an array of DSN strings for a multi-instance cluster and replication Redis setup. | Spryker\Shared\StorageRedis | -| StorageRedisConstants::STORAGE_REDIS_CONNECTION_OPTIONS | Specifies an array of client options for connecting to Redis as a key-value storage. | Spryker\Shared\StorageRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_PASSWORD | Defines the password for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_HOST | Defines the host for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_PORT | Defines the protocol for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_DATABASE | Defines the database for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs for connecting to key-value storage (Redis or Valkey) a as Zed session storage in replication mode. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options for connecting to key-value storage (Redis or Valkey) as a Zed session storage in replication mode. | Spryker\Shared\SessionRedis | +| StorageRedisConstants::STORAGE_REDIS_PROTOCOL | Defines the protocol for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PASSWORD | Defines the password for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_HOST | Defines the host for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PORT | Defines the port for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_DATABASE | Defines the database for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PERSISTENT_CONNECTION | Enables and disables data persistence for a key-value storage (Redis or Valkey) connection. | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_DATA_SOURCE_NAMES | Specifies an array of DSN strings for a multi-instance cluster and replication key-value storage (Redis or Valkey) setup. | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_CONNECTION_OPTIONS | Specifies an array of client options for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | #### Configure general storage @@ -178,7 +180,7 @@ Make sure to replace all the values in the following examples with real values. {% endinfo_block %} -In case of a multi-instance Redis setup, add the following configuration: +In case of a multi-instance key-value storage (Redis or Valkey) setup, add the following configuration: **config/Shared/config_default.php** @@ -196,7 +198,7 @@ $config[StorageRedisConstants::STORAGE_REDIS_PASSWORD] = false; $config[StorageRedisConstants::STORAGE_REDIS_DATABASE] = 0; ``` -In case of a single-instance Redis setup, add the following configuration: +In case of a single-instance key-value storage (Redis or Valkey) setup, add the following configuration: **config/Shared/config_default.php** @@ -223,7 +225,7 @@ Make sure to replace all the values in the following examples with real values. {% endinfo_block %} -If Redis is used as session storage, add the following configuration: +If key-value storage (Redis or Valkey) is used as session storage, add the following configuration: **config/Shared/config_default.php** @@ -249,7 +251,7 @@ $config[SessionRedisConstants::LOCKING_LOCK_TTL_MILLISECONDS] = 0; {% endinfo_block %} -In case of a multi-instance Redis setup, add the following configuration: +In case of a multi-instance key-value storage (Redis or Valkey) setup, add the following configuration: **config/Shared/config_default.php** @@ -271,11 +273,11 @@ $config[SessionRedisConstants::ZED_SESSION_REDIS_CLIENT_OPTIONS] = [ {% info_block warningBox "" %} -This configuration is used exclusively. In other words, you can't use any other Redis configuration. +This configuration is used exclusively. In other words, you can't use any other key-value storage (Redis or Valkey) configuration. {% endinfo_block %} -In case of a single-instance Redis setup, add the following configuration: +In case of a single-instance key-value storage (Redis or Valkey) setup, add the following configuration: **config/Share/config_default.php** @@ -311,7 +313,9 @@ $config[SessionFileConstants::ZED_SESSION_FILE_PATH] = session_save_path(); #### Configure SecurityBlocker -1. `SecurityBlocker` stores information about blocked accounts in Redis. So, it needs connection information. You can get it in the environment configuration of your project: +The SecurityBlocker module provides the functionality to block a user for a certain period of time if the number of failed login attempts exceeds the configured threshold. + +1. To set up SecurityBlocker, add the following environment configuration: **config/Shared/config_default.php** @@ -346,8 +350,8 @@ $config[SecurityBlockerStorefrontCustomerConstants::CUSTOMER_BLOCKING_NUMBER_OF_ | CONFIGURATION | SPECIFICATION | NAMESPACE | |-----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|--------------------| -| LogConstants::LOG_FILE_PATH_ZED | Absolute path to the log file to be used by the stream handler. | Spryker\Shared\Log | -| LogConstants::LOG_FILE_PATH_GLUE | Absolute path to the log file to be used by the stream handler. | Spryker\Shared\Log | +| LogConstants::LOG_FILE_PATH_ZED | Absolute path to the log file of the Zed application to be used by the stream handler. | Spryker\Shared\Log | +| LogConstants::LOG_FILE_PATH_GLUE | Absolute path to the log file of the Glue application to be used by the stream handler. | Spryker\Shared\Log | | LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_ZED | Provides plugin class names providing the configuration for audit logging for the Zed application. | Spryker\Shared\Log | | LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_MERCHANT_PORTAL | Provides plugin class names providing the configuration for audit logging for the Merchant Portal application. | Spryker\Shared\Log | | LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_GLUE | Provides plugin class names providing the configuration for audit logging for the Glue application. | Spryker\Shared\Log | @@ -388,7 +392,7 @@ $config[LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_MERCHANT_PORTAL] = [ After finishing the installation, make sure the following applies: - Security actions in Zed, Glue, Glue Backend, and Merchant Portal applications can be logged. -- The configured log file paths contain the corresponding logs for each application. +- The configured log file paths contain the logs for each application. Example: ```php @@ -524,11 +528,11 @@ Ensure that, in the database, the configured data has been added to the `spy_glo |------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --- |------------------------------------------------------------------------------------------------------------------------------------| | ZedSecurityApplicationPlugin | Extends the Zed global container with required services for security functionality. | | Spryker\Zed\Security\Communication\Plugin\Application | | SessionHandlerFileProviderPlugin | Provides a file-based session handler implementation for Zed sessions. | | Spryker\Zed\SessionFile\Communication\Plugin\Session | -| SessionHandlerRedisLockingProviderPlugin | Provides a Redis-based session handler implementation with session locking for Zed sessions. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | -| SessionHandlerRedisProviderPlugin | Provides a Redis-based session handler implementation for Zed sessions. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | -| StorageRedisPlugin | Provides a Redis-based storage implementation. | | Spryker\Client\StorageRedis\Plugin | +| SessionHandlerRedisLockingProviderPlugin | Provides a key-value storage (Redis or Valkey)-based session handler implementation with session locking for Zed sessions. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | +| SessionHandlerRedisProviderPlugin | Provides a key-value storage (Redis or Valkey)-based session handler implementation for Zed sessions. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | +| StorageRedisPlugin | Provides a key-value storage (Redis or Valkey)-based storage implementation. | | Spryker\Client\StorageRedis\Plugin | | ZedSystemUserSecurityPlugin | Sets security firewalls, such as rules and handlers, for system users; provides Yves access to Zed. | | Spryker\Zed\SecurityGui\Communication\Plugin\Security | -| ZedSessionRedisLockReleaserPlugin | Removes a session lock from Redis by session ID for Zed sessions. It's used for removing previously created locks by running `session:lock:remove`. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | +| ZedSessionRedisLockReleaserPlugin | Removes a session lock from key-value storage (Redis or Valkey) by session ID for Zed sessions. It's used for removing previously created locks by running `session:lock:remove`. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | | CustomerSecurityBlockerConfigurationSettingsExpanderPlugin | Expands security blocker configuration settings with customer settings. | | Spryker\Client\SecurityBlockerStorefrontCustomer\Plugin\SecurityBlocker\CustomerSecurityBlockerConfigurationSettingsExpanderPlugin | | AuditLogTagFilterBufferedStreamHandlerPlugin | Provides the Monolog handler. | | Spryker\Glue\Log\Plugin\Log | | PsrLogMessageProcessorPlugin | Processes a record's message according to PSR-3 rules. | | Spryker\Glue\Log\Plugin\Processor | @@ -845,7 +849,7 @@ Make sure the following applies: | COMMAND | SPECIFICATION | PREREQUISITES | NAMESPACE | | --- | --- | --- | --- | -| StorageRedisExportRdbConsole | Exports a Redis database as an .rdb file. | | Spryker\Zed\StorageRedis\Communication\Console | +| StorageRedisExportRdbConsole | Exports a key-value storage (Redis or Valkey) database as an .rdb file. | | Spryker\Zed\StorageRedis\Communication\Console | | StorageRedisImportRdbConsole | Imports an rdb file. | | Spryker\Zed\StorageRedis\Communication\Console | **Pyz\Zed\Console\ConsoleDependencyProvider** @@ -899,7 +903,10 @@ To verify that the navigation for Store GUI is successfully generated, make sure ### 6) Set up Publish and Synchronize -1. Update the RabbitMQ configuration: +RabbitMQ is used for event handling in Spryker. The default event queues are used to handle events that are published by the system. + +1. Enable the default event queues in the RabbitMQ configuration: +
    Pyz/Client/RabbitMq/RabbitMqConfig.php @@ -1025,7 +1032,7 @@ Follow the steps below to install the Spryker Core feature frontend. ### 1) Install the required modules ```bash -composer require "spryker-feature/spryker-core": "{{page.version}}" +composer require "spryker-feature/spryker-core": "{{page.release_tag}}" ``` ### 2) Set up configuration @@ -1035,13 +1042,13 @@ Add the following configuration: | CONFIGURATION | SPECIFICATION | NAMESPACE | |-------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------------| | SessionFileConstants::YVES_SESSION_FILE_PATH | Defines the filesystem path for storing Yves sessions. | Spryker\Shared\SessionFile | -| SessionRedisConstants::YVES_SESSION_REDIS_SCHEME | Defines a scheme protocol for Redis connection when used as Yves session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_PASSWORD | Defines the password used while connecting to Redis as Yves session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_HOST | Defines the host used while connecting to Redis as Yves session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_PORT | Defines the port used while connecting to Redis as Yves session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_DATABASE | Defines the database used while connecting to Redis as Yves session storage. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs used while connecting to Redis as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | -| SessionRedisConstants::YVES_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options used while connecting to Redis as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_SCHEME | Defines a scheme protocol for key-value storage (Redis or Valkey) connection when used as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_PASSWORD | Defines the password used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_HOST | Defines the host used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_PORT | Defines the port used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_DATABASE | Defines the database used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs used while connecting to key-value storage (Redis or Valkey) as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options used while connecting to key-value storage (Redis or Valkey) as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | | LogConstants::LOG_FILE_PATH_YVES | Absolute path to the log file to be used by the stream handler. | Spryker\Shared\Log | | LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_YVES | Provides plugin class names that contain the configuration for audit logging for the Yves application. | Spryker\Shared\Log | @@ -1056,21 +1063,29 @@ use Spryker\Shared\SessionRedis\SessionRedisConfig; use Spryker\Shared\SessionRedis\SessionRedisConstants; // ---------- Session -$config[SessionConstants::YVES_SESSION_SAVE_HANDLER] = SessionRedisConfig::SESSION_HANDLER_REDIS_LOCKING; +$config[SessionConstants::YVES_SESSION_SAVE_HANDLER] = SessionRedisConfig::SESSION_HANDLER_CONFIGURABLE_REDIS_LOCKING; $config[SessionRedisConstants::YVES_SESSION_TIME_TO_LIVE] = SessionConfig::SESSION_LIFETIME_1_HOUR; ``` {% info_block warningBox "" %} -`SessionRedisConfig::SESSION_HANDLER_REDIS_LOCKING` and `SessionRedisConfig::SESSION_HANDLER_REDIS` can be used as values for the session handler configuration option. +You can configure the session handler using one of the following options: + +- `SessionRedisConfig::SESSION_HANDLER_REDIS_LOCKING` +- `SessionRedisConfig::SESSION_HANDLER_CONFIGURABLE_REDIS_LOCKING` +- `SessionRedisConfig::SESSION_HANDLER_REDIS` + +The most flexible option is `SessionRedisConfig::SESSION_HANDLER_CONFIGURABLE_REDIS_LOCKING`, which allows enabling or disabling key-value storage (Redis or Valkey) locking based on your configuration. + + {% endinfo_block %} -2. In case of a multi-instance Redis setup, add the following configuration: +2. In case of a multi-instance key-value storage (Redis or Valkey) setup, add the following configuration: {% info_block warningBox "" %} -This configuration is used exclusively. In other words, you can't use any other Redis configuration. +This configuration is used exclusively. In other words, you can't use any other key-value storage (Redis or Valkey) configuration. {% endinfo_block %} @@ -1093,11 +1108,11 @@ $config[SessionRedisConstants::YVES_SESSION_REDIS_CLIENT_OPTIONS] = [ ``` -3. In case of a single-instance Redis setup, add the following configuration: +3. In case of a single-instance key-value storage (Redis or Valkey) setup, add the following configuration: {% info_block warningBox "" %} -Make sure you don't use the same Redis database for Yves and Zed sessions. +Make sure you don't use the same key-value storage (Redis or Valkey) database for Yves and Zed sessions. {% endinfo_block %} @@ -1174,15 +1189,15 @@ class SecurityBlockerPageConfig extends SprykerSecurityBlockerPageConfig {% info_block warningBox "Verification" %} -Make sure that, when the login form for the customer or agent is submitted, the URL it uses contains a locale code. Examples of default values: -- For customer: `/de/login_check` -- For agent: `/de/agent/login_check` +Make sure that, when a customer or agent submits a login form, the request URL includes a locale code. Examples of default values: +- Customer: `/de/login_check` +- Agent: `/de/agent/login_check` {% endinfo_block %} {% info_block infoBox "" %} -All locale-related configs in `CustomerPage`, `AgentPage`, and `SecurityBlockerPage` are deprecated; in future releases, only locale-specific URLs will be used. +All locale-related configs in `CustomerPage`, `AgentPage`, and `SecurityBlockerPage` are deprecated. In future releases, only locale-specific URLs will be used. {% endinfo_block %} @@ -1204,8 +1219,8 @@ $config[LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_YVES] = [ After finishing the installation, make sure the following applies: -- Security actions in the Yves applications can be logged. -- The configured log file path contains the corresponding log. +- Security actions in the Yves applications can be logged +- The configured log file path contains the corresponding log Example: ```php @@ -1235,6 +1250,72 @@ class AuditLogger {% endinfo_block %} + +
    + src/Pyz/Yves/SessionRedis/SessionRedisConfig.php + +```php + + */ + public function getSessionRedisLockingExcludedUrlPatterns(): array + { + return [ + '/^.*\/error-page\/*.*$/', + '/^.*\/health-check$/', + ]; + } + + /** + * @return list + */ + public function getSessionRedisLockingExcludedBotUserAgents(): array + { + return [ + 'Googlebot', + 'bingbot', + 'Baiduspider', + 'YandexBot', + 'DuckDuckBot', + 'Sogou', + 'ia_archiver', + 'facebookexternalhit', + 'Twitterbot', + 'LinkedInBot', + 'Slackbot', + 'WhatsApp', + 'Discordbot', + 'AhrefsBot', + 'Applebot', + 'msnbot', + 'MJ12bot', + 'SEMrushBot', + 'PetalBot', + 'SeznamBot', + 'AdsBot-Google', + 'crawler', + 'spider', + 'robot', + 'bot/', + ]; + } +} +``` + +
    + + ### 3) Add translations 1. Append the glossary according to your configuration: @@ -1264,21 +1345,23 @@ Ensure that, in the database, the configured data has been added to the `spy_glo Install the plugins and modules: -| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | -|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| -| SessionHandlerRedisProviderPlugin | Provides a Redis-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionRedis\Plugin\Session | -| SessionHandlerRedisLockingProviderPlugin | Provides a Redis-based session handler implementation with session locking for Yves sessions. | | Spryker\Yves\SessionRedis\Plugin\Session | -| SessionHandlerFileProviderPlugin | Provides a file-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionFile\Plugin\Session | -| YvesSessionRedisLockReleaserPlugin | Removes a session lock from Redis by session ID for Yves sessions. It's used for removing previously created locks by running `session:lock:remove`. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | -| SecurityBlockerCustomerEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the customers' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | -| SecurityBlockerAgentEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the agents' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | -| AuditLogTagFilterBufferedStreamHandlerPlugin | Provides the Monolog handler. | | Spryker\Yves\Log\Plugin\Log | -| PsrLogMessageProcessorPlugin | Processes a record's message according to PSR-3 rules. | | Spryker\Yves\Log\Plugin\Processor | -| EnvironmentProcessorPlugin | Adds environment related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | -| ServerProcessorPlugin | Adds service related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | -| AuditLogRequestProcessorPlugin | Adds request related data to the log data. | | Spryker\Yves\Log\Plugin\Log | -| ResponseProcessorPlugin | Removes response data from the log data. | | Spryker\Yves\Log\Plugin\Processor | -| AuditLogMetaDataProcessorPlugin | Adds the `audit_log` log type to the log data. | | Spryker\Yves\Log\Plugin\Log | +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------| +| SessionHandlerRedisProviderPlugin | Provides a key-value storage (Redis or Valkey)-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionRedis\Plugin\Session | +| SessionHandlerConfigurableRedisLockingProviderPlugin() | Provides a configurable, key-value storage (Redis or Valkey)-based session handler for Yves sessions, offering fine-grained control over session locking. | | Spryker\Yves\SessionFile\Plugin\Session | +| SessionHandlerFileProviderPlugin | Provides a file-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionFile\Plugin\Session | +| YvesSessionRedisLockReleaserPlugin | Removes a session lock from key-value storage (Redis or Valkey) by session ID for Yves sessions. It's used for removing previously created locks by running `session:lock:remove`. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | +| SecurityBlockerCustomerEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the customers' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | +| SecurityBlockerAgentEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the agents' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | +| AuditLogTagFilterBufferedStreamHandlerPlugin | Provides the Monolog handler. | | Spryker\Yves\Log\Plugin\Log | +| PsrLogMessageProcessorPlugin | Processes a record's message according to PSR-3 rules. | | Spryker\Yves\Log\Plugin\Processor | +| EnvironmentProcessorPlugin | Adds environment related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | +| ServerProcessorPlugin | Adds service related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | +| AuditLogRequestProcessorPlugin | Adds request related data to the log data. | | Spryker\Yves\Log\Plugin\Log | +| ResponseProcessorPlugin | Removes response data from the log data. | | Spryker\Yves\Log\Plugin\Processor | +| AuditLogMetaDataProcessorPlugin | Adds the `audit_log` log type to the log data. | | Spryker\Yves\Log\Plugin\Log | +| UrlSessionRedisLockingExclusionConditionPlugin | Skips key-value storage (Redis or Valkey) session locking when the request URI matches any of the URL patterns from the module configuration. | | Spryker\Yves\SessionRedis\Plugin\SessionRedisLockingExclusion | +| BotSessionRedisLockingExclusionConditionPlugin | Skips key-value storage (Redis or Valkey) session locking when the request's User-Agent header contains any of the patterns returned by the module configuration. | | Spryker\Yves\SessionRedis\Plugin\SessionRedisLockingExclusion | **src/Pyz/Yves/Session/SessionDependencyProvider.php** @@ -1291,6 +1374,7 @@ use Spryker\Yves\Session\SessionDependencyProvider as SprykerSessionDependencyPr use Spryker\Yves\SessionFile\Plugin\Session\SessionHandlerFileProviderPlugin; use Spryker\Yves\SessionRedis\Plugin\Session\SessionHandlerRedisLockingProviderPlugin; use Spryker\Yves\SessionRedis\Plugin\Session\SessionHandlerRedisProviderPlugin; +use Spryker\Yves\SessionRedis\Plugin\Session\SessionHandlerConfigurableRedisLockingProviderPlugin(); class SessionDependencyProvider extends SprykerSessionDependencyProvider { @@ -1301,7 +1385,7 @@ class SessionDependencyProvider extends SprykerSessionDependencyProvider { return [ new SessionHandlerRedisProviderPlugin(), - new SessionHandlerRedisLockingProviderPlugin(), + new SessionHandlerConfigurableRedisLockingProviderPlugin(), new SessionHandlerFileProviderPlugin(), ]; } @@ -1332,12 +1416,6 @@ class SessionDependencyProvider extends SprykerSessionDependencyProvider } ``` -{% info_block warningBox "Verification" %} - -Go to `https://mysprykershop.com` and make sure that Yves boots up without errors. - -{% endinfo_block %} - **src/Pyz/Yves/EventDispatcher/EventDispatcherDependencyProvider.php** ```php @@ -1366,13 +1444,22 @@ class EventDispatcherDependencyProvider extends SprykerEventDispatcherDependency {% info_block warningBox "Validation" %} -1. Make sure `SecurityBlockerCustomerEventDispatcherPlugin` is activated by attempting to sign in with as a customer the incorrect credentials. After making the number of attempts specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCKING_NUMBER_OF_ATTEMPTS`, the account should get blocked for the period of time specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCK_FOR`. Consequent login attempts should return the `429 Too many requests` error. +1. Make sure is activated by + +2. To verify , + + +| Plugin | Verification | +|------|-------------| +| `SecurityBlockerCustomerEventDispatcherPlugin` | Attempt to sign in as a customer with incorrect credentials. After making the number of attempts specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCKING_NUMBER_OF_ATTEMPTS`, the account should get blocked for the period of time specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCK_FOR`. Consequent login attempts should return the `429 Too many requests` error. | +| `SecurityBlockerAgentEventDispatcherPlugin` | Repeat the prior verification using an agent agent account. The security behavior should match the configuration you've set up in [Set up configuration](#set-up-configuration). | -2. To verify `SecurityBlockerAgentEventDispatcherPlugin`, repeat step 2 for the agent sign-in to check. The security behavior should match the configuration you've set up in [Set up configuration](#set-up-configuration). {% endinfo_block %} -**src/Pyz/Yves/Log/LogDependencyProvider.php** + +
    + src/Pyz/Yves/Log/LogDependencyProvider.php ```php use Spryker\Yves\Log\LogDependencyProvider as SprykerLogDependencyProvider; @@ -1413,10 +1500,51 @@ class LogDependencyProvider extends SprykerLogDependencyProvider } ``` +
    + {% info_block warningBox "Verification" %} Make sure the following applies: -- The logs data has been expanded with the registered plugins: environment, server, request. -- The log type sections exists and contains the corresponding data. +- The logs data has been expanded with the registered plugins: environment, server, request +- The log type section exists and contains the corresponding data + +{% endinfo_block %} + +**src/Pyz/Yves/SessionRedis/SessionRedisDependencyProvider.php** + +```php + + */ + protected function getSessionRedisLockingExclusionConditionPlugins(): array + { + return [ + new UrlSessionRedisLockingExclusionConditionPlugin(), + new BotSessionRedisLockingExclusionConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Validation" %} + +Make sure that the key-value storage (Redis or Valkey) session locking is skipped for the URLs and user agents specified in the configuration. +- For example, if the URL `/error-page` is accessed, the key-value storage (Redis or Valkey) session locking should be skipped. +- If the user agent `Googlebot` is used, the key-value storage (Redis or Valkey) session locking should be skipped. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-based-catalog-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-based-catalog-feature.md new file mode 100644 index 00000000000..501dc6136be --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-based-catalog-feature.md @@ -0,0 +1,327 @@ +This document describes how you install the Self-Service Portal (SSP) asset-based catalog feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features the asset-based catalog depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) + +## Prerequisites + +Before you start the installation, make sure you have installed the following features: + + +| FEATURE | VERSION | INSTALLATION GUIDE | +|---------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + + +## Configure event triggering for catalog entities + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model_to_product_list.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model_to_ssp_asset.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +## Apply database schema changes + +Apply schema updates: + +```bash +console propel:install +``` + + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_model_to_product_list` +- `spy_ssp_asset_to_ssp_model` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Set up behavior + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|-----------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| SspModelAssetWritePublisherPlugin | Publishes SSP model data by `SpySspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetToModelWritePublisherPlugin | Publishes SSP model data by `SpySspAssetToSspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SspAssetToModelWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToSspModel` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getSspAssetStoragePlugins(), + $this->getSspAssetSearchPlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetStoragePlugins(): array + { + return [ + new SspModelAssetWritePublisherPlugin(), + new SspAssetToModelWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetSearchPlugins(): array + { + return [ + new SearchSspAssetToModelWritePublisherPlugin(), + ]; + } +} +``` + + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|-------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| SspAssetInfoForItemWidget | On the cart page, renders asset information for a cart item. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspItemAssetSelectorWidget | On the product details page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspCartItemAssetSelectorWidget | On the cart page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| AssetCompatibilityLabelWidget | Displays the compatibility label for assets. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetFilterNameWidget | Displays the asset name in search result section. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetFilterWidget | Display asset data. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspAssetInfoForItemWidget::class, + AssetCompatibilityLabelWidget::class, + SspAssetFilterNameWidget::class, + SspAssetFilterWidget::class, + SspCartItemAssetSelectorWidget::class, + SspItemAssetSelectorWidget::class, + ]; + } +} +``` + +## Import the Model relation data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/product_list_to_concrete_product.csv** + +```csv +product_list_key,concrete_sku +ssp-pl-001,service-001-1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------------|----------|-----------|---------------|---------------------------------------------------------------------| +| product_list_key | ✓ | string | ssp-pl-001 | Unique identifier for the product list used as a reference. | +| concrete_sku | ✓ | string | service-001-1 | SKU of the concrete product to be associated with the product list. | + +**data/import/common/common/ssp_model_asset.csv** + +```csv +model_reference,asset_reference +MDL--1,AST--3 +MDL--2,AST--4 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------|----------|-----------|--------------|------------------------------------------------------------------| +| model_reference | ✓ | string | MDL--1 | Unique identifier for the model used as a reference. | +| asset_reference | ✓ | string | AST--3 | Unique identifier for the asset to be associated with the model. | + +**data/import/common/common/ssp_model_product_list.csv** + +```csv +model_reference,product_list_key +MDL--2,ssp-pl-001 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------------|----------|-----------|--------------|-------------------------------------------------------------------------| +| model_reference | ✓ | string | MDL--2 | Unique identifier for the model used as a reference. | +| product_list_key | ✓ | string | ssp-pl-001 | Unique identifier for the product list to be associated with the model. | + +## Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal + - data_entity: ssp-model-asset + source: data/import/common/common/ssp_model_asset.csv + - data_entity: ssp-model-product-list + source: data/import/common/common/ssp_model_product_list.csv +``` + +## Register data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------------------------------| +| SspModelAssetDataImportPlugin | Imports ssp asset model relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| SspModelProductListDataImportPlugin | Imports ssp asset model relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspModelAssetDataImportPlugin(), + new SspModelProductListDataImportPlugin(), + ]; + } +} +``` + + +### Import the data + +{% info_block infoBox "Prerequisites" %} + +Before importing the data, make sure you have imported demo data for the following entities: + +- [Import product data](/docs/dg/dev/data-import/latest/importing-product-data-with-a-single-file.html#single-csv-file-for-combined-product-data-import) - required for `product-abstract` and `product-concrete` data imports +- [Import product lists](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html#import-product-lists) - required for `product-list` data import +- [Import product lists product concrete relation](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html#import-product-lists) - required for `product-list-product-concrete` data import + +{% endinfo_block %} + +```bash +console data:import product-list +console data:import product-abstract +console data:import product-concrete +console data:import product-list-product-concrete +console data:import ssp-model-product-list +console data:import ssp-asset +console data:import ssp-model-asset +console data:import merchant-product-offer +``` + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-management-feature.md new file mode 100644 index 00000000000..5256fcfaa16 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-asset-management-feature.md @@ -0,0 +1,1446 @@ +This document describes how to install the Self-Service Portal (SSP) Asset Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Asset Management depends on + +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Defines the Flysystem service configuration for handling asset file storage. This configuration specifies the adapter, such as local or S3, and the root path for storing asset files, ensuring they're managed securely and efficiently. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::BASE_URL_YVES | Specifies the base URL for the Yves frontend. This URL is used to generate absolute links to asset-related pages on the Storefront, ensuring correct navigation and resource loading. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::ASSET_STORAGE_NAME | Defines the unique identifier for the Flysystem storage instance used for SSP assets. This name links the asset management feature to the specific filesystem configuration defined in `FileSystemConstants::FILESYSTEM_SERVICE`. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE | Defines the default file max size per file upload during ssp asset creation and update. | SprykerFeature\Zed\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | +| SelfServicePortalConfig::getAssetStatusClassMap() | Defines a map that associates asset status values, such as `pending` or `approved`, with their corresponding CSS class names. This is used in the Back Office and Storefront to visually represent the status of each asset, for example, with colored labels. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET | Defines queue name as used for processing SSP asset storage messages. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET | Defines queue name as used for processing ssp asset search synchronization. | SprykerFeature\Shared\SelfServicePortal | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\FileSystem\FileSystemConstants; +use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConstants; +use Spryker\Service\FlysystemAws3v3FileSystem\Plugin\Flysystem\Aws3v3FilesystemBuilderPlugin; + +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'ssp-asset-image' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_ASSETS_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_ASSETS_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_ASSETS_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-asset-image', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::BASE_URL_YVES] = 'https://your-yves-url'; +$config[SelfServicePortalConstants::ASSET_STORAGE_NAME] = 'ssp-asset-image'; +$config[SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE] = getenv('SPRYKER_SSP_DEFAULT_FILE_MAX_SIZE') ?: '10M'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_ASSETS_KEY` - AWS S3 access key for SSP assets storage +- `SPRYKER_S3_SSP_ASSETS_SECRET` - AWS S3 secret key for SSP assets storage +- `SPRYKER_S3_SSP_ASSETS_BUCKET` - AWS S3 bucket name for SSP assets storage +- `AWS_REGION` - AWS region +- `SPRYKER_SSP_DEFAULT_FILE_MAX_SIZE` - Maximum file size for SSP asset uploads (defaults to `10M` if not set) + +{% endinfo_block %} + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getAssetStatusClassMap(): array + { + return [ + 'pending' => 'label-warning', + 'in_review' => 'label-primary', + 'approved' => 'label-success', + 'deactivated' => 'label-danger', + ]; + } + + + /** + * @return string|null + */ + public function getSspAssetSearchSynchronizationPoolName(): ?string + { + return SynchronizationConfig::DEFAULT_SYNCHRONIZATION_POOL_NAME; + } +} +``` + +## Configure synchronization queues + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET, + SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET, + ]; + } +} +``` + + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET => new SynchronizationStorageQueueMessageProcessorPlugin(), + SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Set up the queue infrastructure: + +```bash +vendor/bin/console queue:setup +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the RabbitMQ management interface, the following queues are available: +- `sync.search.ssp_asset` +- `sync.search.ssp_asset.error` +- `sync.storage.ssp_asset` +- `sync.storage.ssp_asset.error` +{% endinfo_block %} + +## Configure ElasticSearch supported source indexes + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + protected const SUPPORTED_SOURCE_IDENTIFIERS = [ + 'ssp_asset', + ]; +} +``` + +**src/Pyz/Zed/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + public function getJsonSchemaDefinitionDirectories(): array + { + $directories = parent::getJsonSchemaDefinitionDirectories(); + + $directory = sprintf('%s/vendor/spryker-feature/*/src/*/Shared/*/Schema/', APPLICATION_ROOT_DIR); + if (glob($directory, GLOB_NOSORT | GLOB_ONLYDIR)) { + $directories[] = $directory; + } + + $directories[] = sprintf('%s/src/Pyz/Shared/*/Schema/', APPLICATION_ROOT_DIR); + + return $directories; + } +} +``` + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetSearchResultFormatterPlugins(): array + { + return [ + new SspAssetSearchResultFormatterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getSspAssetSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetSearchQueryExpanderPlugin(), + ]; + } +} + +``` + +## Configure the event triggering for the Asset entity + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_asset.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_asset` +- `spy_ssp_asset_file` +- `spy_ssp_asset_to_company_business_unit` +- `spy_sales_order_item_ssp_asset` +- `spy_ssp_asset_storage` +- `spy_ssp_asset_search` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Assets` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Assets + self-service-portal + list-asset + index + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Back Office, the **Customer portal** > **Assets** section is available. + +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------------| +| ViewCompanySspAssetPermissionPlugin | Grants permission to view assets of an entire company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspAssetPermissionPlugin | Grants permission to view assets within the user's business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| CreateSspAssetPermissionPlugin | Grants permission to create assets. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| UpdateSspAssetPermissionPlugin | Grants permission to update assets. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| UnassignSspAssetPermissionPlugin | Grants permission to unassign assets from business units. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides routes for the SSP asset management pages on the Storefront. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes into a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SspAssetPreAddToCartPlugin | When a product is added to cart, maps the asset reference from the request to the item transfer object. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| SspAssetItemExpanderPlugin | Expands cart items with asset data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| SspAssetOrderExpanderPlugin | Expands an order with asset data for all its items. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetOrderItemsPostSavePlugin | After an order is placed, saves the relations between order items and assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetOrderItemExpanderPlugin | Expands individual order items with asset data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetPublisherTriggerPlugin | Retrieves SSP assets by offset and limit. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher | +| SspAssetQueryExpanderPlugin | Expands search query with asset-specific product filtering based on SSP asset reference. | | SprykerFeature\Client\SelfServicePortal\Plugin\Catalog | +| SspAssetWritePublisherPlugin | Publishes SSP asset data by `SpySspAsset` entity events to the storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetToCompanyBusinessUnitWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToCompanyBusinessUnit` entity events to the storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetWritePublisherPlugin | Publishes SSP asset data by `SpySspAsset` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SearchSspAssetToCompanyBusinessUnitWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToCompanyBusinessUnit` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SspAssetListSynchronizationDataBulkRepositoryPlugin | Retrieves SSP assets by offset and limit for synchronization to a storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\Storage | +| SearchSspAssetListSynchronizationDataBulkRepositoryPlugin | Retrieves SSP assets by offset and limit for synchronization to a search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\SspAsset\Search | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspAssetPermissionPlugin(), + new ViewBusinessUnitSspAssetPermissionPlugin(), + new UpdateSspAssetPermissionPlugin(), + new UnassignSspAssetPermissionPlugin(), + new CreateSspAssetPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspAssetPermissionPlugin(), + new ViewBusinessUnitSspAssetPermissionPlugin(), + new UpdateSspAssetPermissionPlugin(), + new UnassignSspAssetPermissionPlugin(), + new CreateSspAssetPermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new SspAssetPreAddToCartPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new SspAssetItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new SspAssetOrderExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new SspAssetOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPluginInterface> + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new SspAssetOrderItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getSspAssetStoragePlugins(), + $this->getSspAssetSearchPlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new SspAssetPublisherTriggerPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetStoragePlugins(): array + { + return [ + new SspAssetWritePublisherPlugin(), + new SspAssetToCompanyBusinessUnitWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetSearchPlugins(): array + { + return [ + new SearchSspAssetWritePublisherPlugin(), + new SearchSspAssetToCompanyBusinessUnitWritePublisherPlugin(), + ]; + } +} +``` + + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +|array<\Spryker\Client\Search\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function createCatalogSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetQueryExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new SspAssetListSynchronizationDataBulkRepositoryPlugin(), + new SearchSspAssetListSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +Setup search updates + +```bash +console search:setup +``` + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|-----------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| SspAssetListWidget | Renders a list of assets on the **My Assets** page in the Customer Account. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetMenuItemWidget | Renders the **My Assets** menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspItemAssetSelectorWidget | On the product details page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspListMenuItemWidget | Renders the menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspAssetListWidget::class, + SspAssetMenuItemWidget::class, + SspListMenuItemWidget::class, + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **View company assets** + - **View business unit assets** + - **Update assets** + - **Unassign business unit ssp assets** + - **Create assets** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Assets** menu item is displayed. +2. Go to **Customer Account** > **Assets**. +3. Click **Create Asset**. +4. Upload an image and fill in the required fields. +5. Click **Save**. + Make sure the asset gets saved and this opens the asset details page. +6. Go to **Customer Account** > **Assets**. + Make sure the the asset you've created is displayed in the list. +7. Go to **Customer Account** > **Dashboard**. + Make sure the **Assets** widget displays the asset you've created. +8. Log out and log in with a company user without the role you've created. + Make sure the **Assets** menu item is not displayed, and you can't access the **Assets** page. + +{% endinfo_block %} + +## Enable the Backend API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| SspAssetsBackendResourcePlugin | Provides the GET, POST and PATCH endpoints for SSP assets. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueBackendApiApplication | +| SspAssetSearchResultFormatterPlugin | Formats search ssp asset search result. | | SprykerFeature\Client\SelfServicePortal\Plugin\Elasticsearch\ResultFormatter | +| SspAssetSearchQueryExpanderPlugin | Expands SSP asset search query with permissions, sorting and search criterias. | | SprykerFeature\Client\SelfServicePortal\Plugin\Elasticsearch\Query | + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetSearchResultFormatterPlugins(): array + { + return [ + new SspAssetSearchResultFormatterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getSspAssetSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetSearchQueryExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new SspAssetsBackendResourcePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can manage `ssp-assets` resources as a Back Office user: + + +1. Get the access token by sending a `POST` request to the token endpoint with back office user credentials: + +`POST https://glue-backend.mysprykershop.com/token` + +```http +POST https://glue-backend.mysprykershop.com/token HTTP/2.0 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 1051 + +grant_type=password&username={username}&password={password} +``` + +2. Use the access token to access the `ssp-assets` backend endpoint: + +
    + GET https://glue-backend.mysprykershop.com/ssp-assets + +```json +{ + "data": [ + { + "id": "AST--1", + "type": "ssp-assets", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "status": "pending", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--1" + } + }, + { + "id": "AST--2", + "type": "ssp-assets", + "attributes": { + "reference": "AST--2", + "name": "DemoHaul Titan X9", + "serialNumber": "TRK1200027", + "status": "pending", + "note": "The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--2" + } + }, + { + "id": "AST--3", + "type": "ssp-assets", + "attributes": { + "reference": "AST--3", + "name": "OfficeJet Pro 9025e All-in-One Printer", + "serialNumber": "CN1234ABCD", + "status": "pending", + "note": "The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--3" + } + }, + { + "id": "AST--4", + "type": "ssp-assets", + "attributes": { + "reference": "AST--4", + "name": "Logistic Casa F-08", + "serialNumber": "", + "status": "pending", + "note": "1FUJGLDR5KL123456", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--4" + } + }, + { + "id": "AST--5", + "type": "ssp-assets", + "attributes": { + "reference": "AST--5", + "name": "AssetName1", + "serialNumber": "serialNumberAsset1API", + "status": "pending", + "note": "noteAsset", + "createdDate": "2025-09-23 12:50:06", + "externalImageUrl": "http://emaple.com", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--5" + } + } + ], + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets" + } +} +``` + +
    + +3. To get the particular asset, use the access token to send a `GET` request to the `ssp-assets` endpoint with the asset ID: + +`GET https://glue-backend.mysprykershop.com/ssp-assets/AST--1` + +```json +{ + "data": { + "id": "AST--1", + "type": "ssp-assets", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "status": "pending", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--1" + } + } +} +``` + +4. Use the access token to create the `ssp-assets` resource: +`POST https://glue-backend.mysprykershop.com/ssp-assets` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": + { + "name": {% raw %}{{{% endraw %}Asset name{% raw %}}}{% endraw %}, + "serialNumber": {% raw %}{{{% endraw %}Serial number{% raw %}}}{% endraw %}", + "status": {% raw %}{{{% endraw %}One of the following statuses: pending, in_review, approved and deactivated{% raw %}}}{% endraw %}, + "note":{% raw %}{{{% endraw %}Note{% raw %}}}{% endraw %}, + "externalImageUrl": {% raw %}{{{% endraw %}URL to an image{% raw %}}}{% endraw %}, + "companyBusinessUnitOwnerUuid": {% raw %}{{{% endraw %}The UUID of the company business unit{% raw %}}}{% endraw %} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "id": "AST--6", + "type": "ssp-assets", + "attributes": { + "reference": "AST--6", + "name": "Test Asset for CRUD TEST", + "serialNumber": "CRUD-TEST-YYYYY", + "status": "pending", + "note": "This asset will be used for testing all CRUD operations!!!!!", + "createdDate": "2025-09-23 13:59:35", + "externalImageUrl": "https://example.com/asset-image_1.jpg", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--6" + } + } +} +``` + +5. For updating the particular asset, use the access token to send a `PATCH` request to the `ssp-assets` endpoint with the asset ID: + +`PATCH https://glue-backend.mysprykershop.com/ssp-assets/AST--6` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": + { + "name": {% raw %}{{{% endraw %}Asset name{% raw %}}}{% endraw %}, + "serialNumber": {% raw %}{{{% endraw %}Serial number{% raw %}}}{% endraw %}", + "status": {% raw %}{{{% endraw %}One of the following statuses: pending, in_review, approved and deactivated{% raw %}}}{% endraw %}, + "note":{% raw %}{{{% endraw %}Note{% raw %}}}{% endraw %}, + "externalImageUrl": {% raw %}{{{% endraw %}URL to an image{% raw %}}}{% endraw %}, + "companyBusinessUnitOwnerUuid": {% raw %}{{{% endraw %}The UUID of the company business unit{% raw %}}}{% endraw %}, + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "id": "AST--6", + "type": "ssp-assets", + "attributes": { + "reference": "AST--6", + "name": "Test Asset for CRUD TEST", + "serialNumber": "CRUD-TEST-XXXX", + "status": "pending", + "note": "This asset will be used for testing all CRUD operations!!!!!", + "createdDate": "2025-09-23 13:59:35", + "externalImageUrl": "https://example.com/asset-image_1.jpg", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--6" + } + } +} +``` + +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------|---------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspAssetsResourceRoutePlugin | Provides the GET and POST endpoints for the SSP assets. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspAssetsResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can manage `ssp-assets` resources for the company user: + +0. Prerequisites: +- You have a company user +- You have company user credentials: username and password +- Assets are assigned to the business unit of the company user +- You have imported assets as described in data import section + +1. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +2. Use the access token to access the `ssp-assets` endpoint: + + +
    + GET https://glue.mysprykershop.com/ssp-assets + +```json +{ + "data": [ + { + "type": "ssp-assets", + "id": "AST--1", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--1" + } + }, + { + "type": "ssp-assets", + "id": "AST--2", + "attributes": { + "reference": "AST--2", + "name": "DemoHaul Titan X9", + "serialNumber": "TRK1200027", + "note": "The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--2" + } + }, + { + "type": "ssp-assets", + "id": "AST--3", + "attributes": { + "reference": "AST--3", + "name": "OfficeJet Pro 9025e All-in-One Printer", + "serialNumber": "CN1234ABCD", + "note": "The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--3" + } + }, + { + "type": "ssp-assets", + "id": "AST--4", + "attributes": { + "reference": "AST--4", + "name": "Logistic Casa F-08", + "serialNumber": "", + "note": "1FUJGLDR5KL123456", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--4" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets" + } +} +``` + +
    + +3. To get the particular asset, use the access token to send a `GET` request to the `ssp-assets` endpoint with the asset ID: + +`GET https://glue.mysprykershop.com/ssp-assets/AST--1` + +```json +{ + "data": { + "type": "ssp-assets", + "id": "AST--1", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--1" + } + } +} +``` + +4. Use the access token to create the `ssp-assets` resource: + +`POST https://glue.mysprykershop.com/ssp-assets` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": { + "name": {Asset name}, + "serialNumber": {Serial number}, + "note": {Note}, + "externalImageUrl": {URL} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "type": "ssp-assets", + "id": "AST--5", + "attributes": { + "reference": "AST--5", + "name": "AssetName1", + "serialNumber": "serialNumberAsset1API", + "note": "noteAsset", + "externalImageUrl": "http://emaple.com" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--5" + } + } +} +``` + +{% endinfo_block %} + + +## Demo data for EU region / DE store + +### Add asset demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_asset.csv** + +```csv +reference,name,serial_number,note,external_image_url,business_unit_key,assigned_business_unit_keys +AST--1,DemoBrand Print Pro 2100,PRNT000014,"The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.",https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg,spryker_systems_HR,"spryker_systems_HR" +AST--2,DemoHaul Titan X9,TRK1200027,"The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.",https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png,spryker_systems_Zurich,spryker_systems_Zurich +AST--3,OfficeJet Pro 9025e All-in-One Printer,CN1234ABCD,"The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.",https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg,spryker_systems_HR,spryker_systems_HR +AST--4,Logistic Casa F-08,,1FUJGLDR5KL123456,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg,spryker_systems_HR,spryker_systems_HR +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------------------|----------|-----------|----------------------------------------------------------------|---------------------------------------------------------------------------| +| reference | ✓ | string | AST--1 | Unique identifier for the asset used as a reference in the system. | +| name | ✓ | string | DemoBrand Print Pro 2100 | The display name of the asset. | +| serial_number | x | string | PRNT000014 | The serial number of the asset for identification purposes. | +| note | x | string | The DemoBrand Print Pro 2100... | Detailed description or notes about the asset. | +| external_image_url | x | string | `https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg` | URL to an external image of the asset. | +| business_unit_key | x | string | spryker_systems_HR | The key of the business unit that owns the asset. | +| assigned_business_unit_keys | x | string | spryker_systems_HR | Comma-separated list of business unit keys that have access to the asset. | + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: ssp-asset + source: data/import/common/common/ssp_asset.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------|---------------|----------------------------------------------------------------------| +| SspAssetDataImportPlugin | Imports a ssp asset into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspAssetDataImportPlugin(), + ]; + } +} +``` + +Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_SSP_ASSET), + ]; + + return $commands; + } +} +``` + + +### Import the data + +```bash +console data:import:ssp-asset +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: + +- `spy_asset` +- `spy_ssp_asset_to_company_business_unit` +- `spy_ssp_asset_storage` +- `spy_ssp_asset_search` + {% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-dashboard-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-dashboard-management-feature.md new file mode 100644 index 00000000000..f0b4cf4b11d --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-dashboard-management-feature.md @@ -0,0 +1,398 @@ +This document describes how to install the Self-Service Portal (SSP) Dashboard Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Dashboard Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} +Make sure the following transfer objects have been generated: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------|----------|---------|------------------------------------------------------------------| +| DashboardRequest | transfer | created | src/Generated/Shared/Transfer/DashboardRequestTransfer | +| DashboardComponentCriteria | transfer | created | src/Generated/Shared/Transfer/DashboardComponentCriteriaTransfer | +| DashboardResponse | transfer | created | src/Generated/Shared/Transfer/DashboardResponseTransfer | +| CmsBlockRequest | transfer | created | src/Generated/Shared/Transfer/CmsBlockRequestTransfer | +| CmsBlock | transfer | created | src/Generated/Shared/Transfer/CmsBlockTransfer | +| SynchronizationData | transfer | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Customer | transfer | created | src/Generated/Shared/Transfer/CustomerTransfer | +| CompanyUser | transfer | created | src/Generated/Shared/Transfer/CompanyUserTransfer | +| Store | transfer | created | src/Generated/Shared/Transfer/StoreTransfer | + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +### Add dashboard demo data + +1. Append `cms_block.csv`: + +
    + data/import/common/common/cms_block.csv + +```csv +cms-sales_rep:default,sales_rep:default,Title and Content,@CmsBlock/template/title_and_content_block.twig,1,,,
    Mitarbeiter des Kundendienstes
    ,,,,, +ssp-news-block-1,News Banner-1,Title and Content,@CmsBlock/template/title_and_content_block.twig,1,"
    {{ 'ssp_dashboard.general.news' | trans }}
    ","
    {{ 'ssp_dashboard.general.news' | trans }}
    ","
    {{ content_banner('ssp-br-1', 'bottom-title') }}
    {{ content_banner('ssp-br-2', 'bottom-title') }}
    ","
    {{ content_banner('ssp-br-1', 'bottom-title') }}
    {{ content_banner('ssp-br-2', 'bottom-title') }}
    ",,,, +``` + +
    + +2. Append **data/import/common/DE/cms_block_store.csv** + +```csv +ssp-news-block-1,DE +cms-sales_rep:default,DE +``` + +3. Append **data/import/common/common/cms_slot.csv**: + +```csv +ssp-news,ssp-news-block-1,SSP News.,SprykerCmsSlotBlock,@SelfServicePortal/views/dashboard/dashboard.twig,1 +``` + +4. Append **data/import/common/common/cms_slot_block.csv** + +```csv +slt-mobile-header,blck-9,1,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +ssp-news,ssp-news-block-1,1,@SelfServicePortal/views/dashboard/dashboard.twig,,,,,,, +``` + +5. Append **data/import/common/common/cms_slot_template.csv** + +```csv +SSP Dashboard,Dashboard Page.,@SelfServicePortal/views/dashboard/dashboard.twig +``` + +6. Append **data/import/common/common/content_banner.csv** + +```csv +ssp-br-1,SSP Banner Name 1,SSP Banner Description 1, ,,, ,,,/assets/current/default/images/400x200.png,,,/en/demo-landing-page,,,ssp-banner-image,, +ssp-br-2,SSP Banner Name 2,SSP Banner Description 2, ,,, ,,,/assets/current/default/images/400x200.png,,,/en/demo-landing-page,,,ssp-banner-image,, +``` + +7. Append **data/import/common/common/company_role_permission.csv** + +```csv +Ottom_Admin,ViewBusinessUnitSspServicePermissionPlugin, +Spryker_Admin,ViewBusinessUnitSspServicePermissionPlugin, +test-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +trial-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +proof-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Jim_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Kudamm_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Mitte_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Regular_Admin,ViewBusinessUnitSspServicePermissionPlugin, +test-company-2_Admin,ViewBusinessUnitSspServicePermissionPlugin, +Spryker_Buyer_With_Limit,ViewBusinessUnitSspServicePermissionPlugin, +Ottom_Admin,ViewCompanySspServicePermissionPlugin, +Spryker_Admin,ViewCompanySspServicePermissionPlugin, +test-company_Admin,ViewCompanySspServicePermissionPlugin, +trial-company_Admin,ViewCompanySspServicePermissionPlugin, +proof-company_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Jim_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Kudamm_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Mitte_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Regular_Admin,ViewCompanySspServicePermissionPlugin, +test-company-2_Admin,ViewCompanySspServicePermissionPlugin, +Spryker_Buyer_With_Limit,ViewCompanySspServicePermissionPlugin, +``` + +## Add twig template + +1. Create a new CMS template to be used for dashboard content sourced from the CMS: + +**src/Pyz/Shared/CmsBlock/Theme/default/template/title_and_content_block.twig** + +```twig +{% raw %}{% block content %}{% endraw %} + + + + {{ spyCmsBlockPlaceholder('title') | raw }} + {{ spyCmsBlockPlaceholder('content') | raw }} +{% raw %}{% endblock %}{% endraw %} +``` + +### Import the data + +Import dashboard demo data: + +```bash +console data:import cms-slot-template +console data:import content-banner +console data:import cms-block +console data:import cms-block-store +console data:import cms-slot +console data:import cms-slot-block +console data:import company-role-permission +``` + +{% info_block warningBox "Verification" %} + +- Make sure the glossary keys have been added to `spy_glossary_key` and `spy_glossary_translation` tables. +- Make sure that the imported data on CMS blocks, CMS slots, and content banners is present in the Back Office. + {% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ViewDashboardPermissionPlugin | Provides access to the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewCompanySspServicePermissionPlugin | Provides access to company services on the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspServicePermissionPlugin | Provides access to company business unit services on the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| CmsBlockCompanyBusinessUnitCmsBlockStorageReaderPlugin | Enables business unit-specific CMS blocks. | | SprykerFeature\Client\SelfServicePortal\Plugin\CmsBlockStorage | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the the SSP dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| SspDashboardFilterControllerEventHandlerPlugin | Restricts access to dashboard pages for non-company users. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceDashboardDataExpanderPlugin | Expands dashboard data with services. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspInquiryDashboardDataExpanderPlugin | Expands dashboard data with inquiries. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspFileDashboardDataExpanderPlugin | Expands dashboard data with file attachments. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspAssetDashboardDataExpanderPlugin | Expands dashboard data with assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | + + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Client\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewDashboardPermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspServicePermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewCompanySspServicePermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new ViewDashboardPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + new ViewCompanySspServicePermissionPlugin(), + new ViewBusinessUnitSspServicePermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getCmsBlockStorageReaderPlugins(): array + { + return [ + new CmsBlockCompanyBusinessUnitCmsBlockStorageReaderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getDashboardDataExpanderPlugins(): array + { + return [ + new SspInquiryDashboardDataExpanderPlugin(), + new SspFileDashboardDataExpanderPlugin(), + new SspAssetDashboardDataExpanderPlugin(), + new SspServiceDashboardDataExpanderPlugin(), + ]; + } +} +``` + +## Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|-----------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| DashboardMenuItemWidget | Provides a menu item widget for the customer account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspFileListWidget | Displays a file attachment available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceListWidget | Displays services available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + DashboardMenuItemWidget::class, + SspFileListWidget::class, + SspServiceListWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the **View Dashboard** permission. +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Dashboard** menu item is displayed. +2. Go to **Customer Account** > **Dashboard**. Make sure the page shows the following: + +- Correct company account information +- Widgets for Assets, Inquiries, and Files + +3. Log out and log in with a compnay user without the role you've created. +Make sure the **Dashboard** menu item is not displayed, and you can't access the **Dashboard** page. + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-file-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-file-management-feature.md new file mode 100644 index 00000000000..f1c271f1c1b --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-file-management-feature.md @@ -0,0 +1,435 @@ +This document describes how to install the Self-Service Portal (SSP) File Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP File Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Configures the Flysystem service for managing file uploads, specifying the adapter and storage path for files. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::STORAGE_NAME | Defines the storage name for SSP files in the Flysystem configuration, linking to the specified file system service. | SprykerFeature\Shared\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_FILES_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_FILES_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_FILES_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/files', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::STORAGE_NAME] = 'ssp-files'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure the following tables have been created in the database: + +- `spy_company_user_file` +- `spy_company_business_unit_file` + +Make sure the following columns have been added to the `spy_file` table: + +- `file_reference` +- `uuid` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Files` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + File Attachments + self-service-portal + list-file + index + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Back Office, the **Customer portal** > **File Attachments** section is available. + +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ViewCompanyUserFilesPermissionPlugin | Enables company users to view the files they uploaded. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanyBusinessUnitFilesPermissionPlugin | Allows access to files uploaded within a business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanyFilesPermissionPlugin | Allows access to all files within a company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| DownloadCompanyFilesPermissionPlugin | Enables downloading files. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the [SSP file management feature](/docs/pbc/all/self-service-portal/latest/ssp-file-management-feature-overview.html). | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes in a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SelfServicePortalTwigPlugin | Provides Twig functionality for Self-Service Portal features. | | SprykerFeature\Zed\SelfServicePortal\Communication\Twig | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanyUserFilesPermissionPlugin(), + new ViewCompanyBusinessUnitFilesPermissionPlugin(), + new ViewCompanyFilesPermissionPlugin(), + ]; + } +} + +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new DownloadCompanyFilesPermissionPlugin(), + new ViewCompanyUserFilesPermissionPlugin(), + new ViewCompanyBusinessUnitFilesPermissionPlugin(), + new ViewCompanyFilesPermissionPlugin(), + ]; + } +} + +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new SspFileSspAssetManagementExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new SelfServicePortalTwigPlugin(), + ]; + } +} +``` + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|------------------------------------------------------|---------------|----------------------------------------------| +| SspCompanyFilesMenuItemWidget | Provides a menu item widget for the customer account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspFileListWidget | Displays a file attachment available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspCompanyFilesMenuItemWidget::class, + SspFileListWidget::class, + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Verify file upload and attachment: + +1. In the Back Office, go to **Customer portal** > **File Attachments**. +2. Click **Upload file**. +3. Drag and drop three files into the upload area. +4. Click **Upload**. + Make sure the File Attachments list page shows the files you've uploaded. +5. Next to a file attachment with reference `FILE-1`, click **Attach**. +6. Go to the **Company user** tab. +7. Select a company user. +8. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-1`. +9. In the **Linked entities** section, make sure the previously selected company user is displayed. +10. Go to **Customer portal** > **File Attachments**. +11. Next to a file attachment with reference `FILE-2`, click **Attach**. +12. Go to the **Business unit** tab. +13. Select a business unit. +14. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-2`. +15. In the **Linked entities** section, make sure the previously selected business unit is displayed. +16. Go to **Customer portal** > **File Attachments**. +17. Next to a file attachment with reference `FILE-3`, click **Attach**. +18. Go to the **Company** tab. +19. Select a company. +20. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-3`. +21. In the **Linked entities** section, make sure that business units from the previously selected company are displayed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify permission management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **Open My Files page** + - **Download file** + - **View My Files** + - **View Business unit files** + - **View Company Files** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. +10. Go to **Customer portal** > **File Attachments**. +11. Next to a file attachment with reference `FILE-1`, click **Attach**. +12. Go to the **Company user** tab. +13. Select the company user you've assigned the role to. +14. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-1`. +9. In the **Linked entities** section, make sure the previously selected company user is displayed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify permissions on Storefront: + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Files** menu item is displayed. +2. Go to **Customer Account** > **Files** page. + Make sure the file with reference FILE-1 is displayed. +4. Click Download next to a file. Make sure a file is downloaded. +3. Log out and log in with another company user that doesn't have the role. + Make sure the **Files** menu item is not displayed and you can't access the **Files** page. + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-inquiry-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-inquiry-management-feature.md new file mode 100644 index 00000000000..1ba5eb73449 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-inquiry-management-feature.md @@ -0,0 +1,971 @@ +This document describes how to install the Self-Service Portal (SSP) Inquiry Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Inquiry Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Configures the Flysystem service for managing file uploads, specifying the adapter and storage path for inquiry-related files. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::BASE_URL_YVES | Defines the base URL for the Yves frontend, which is used to construct links in email notifications sent for inquiries. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE | Sets a maximum total size for all files that can be uploaded with a single inquiry, preventing excessively large submissions. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE | Sets a maximum size for a single file that can be uploaded with an inquiry. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::INQUIRY_STORAGE_NAME | Defines the storage name for inquiry files in the Flysystem configuration, linking to the specified file system service. | SprykerFeature\Shared\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kernel | +| SelfServicePortalConfig::getInquiryInitialStateMachineMap() | Maps an inquiry's state machine process to its initial state, determining the starting point of the inquiry workflow. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryStateMachineProcessInquiryTypeMap() | Maps each inquiry type to a specific state machine process, allowing for different workflows based on the inquiry's nature. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryCancelStateMachineEventName() | Defines the name of a state machine event that is triggered to cancel an inquiry. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryAvailableStatuses() | Provides a list of all possible statuses that an inquiry can have, which are used for filtering and display purposes. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getInquiryStatusClassMap() | Maps inquiry statuses to corresponding CSS class names, allowing for visual styling of status indicators in the user interface. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConfig::getInquiryPendingStatus() | Specifies which inquiry status is considered "Pending," which is used for dashboard widgets and filtering. | SprykerFeature\Zed\SelfServicePortal | +| SalesConfig::getSalesDetailExternalBlocksUrls() | Extends the order details page in the Back Office by adding a block to display related inquiries. | Spryker\Zed\Sales | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_CLAIM_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_CLAIM_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_CLAIM_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-inquiry', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::BASE_URL_YVES] = 'https://your-yves-url'; +$config[SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE') ?: '100M'; +$config[SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_FILE_MAX_SIZE') ?: '20M'; +$config[SelfServicePortalConstants::INQUIRY_STORAGE_NAME] = 'ssp-inquiry'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_CLAIM_KEY` - AWS S3 access key for SSP inquiry file storage +- `SPRYKER_S3_SSP_CLAIM_SECRET` - AWS S3 secret key for SSP inquiry file storage +- `SPRYKER_S3_SSP_CLAIM_BUCKET` - AWS S3 bucket name for SSP inquiry file storage +- `AWS_REGION` - AWS region +- `SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE` - Maximum total size for all files uploaded with a single inquiry (defaults to `100M` if not set) +- `SPRYKER_DEFAULT_FILE_MAX_SIZE` - Maximum size for a single file uploaded with an inquiry (defaults to `20M` if not set) + +{% endinfo_block %} + +
    + src/Pyz/Shared/SelfServicePortal/SelfServicePortalConfig.php + +```php + 'created', + ]; + } + + public function getSspInquiryStateMachineProcessInquiryTypeMap(): array + { + return [ + 'general' => 'SspInquiryDefaultStateMachine', + 'order' => 'SspInquiryDefaultStateMachine', + 'ssp_asset' => 'SspInquiryDefaultStateMachine', + ]; + } + + /** + * @return string + */ + public function getSspInquiryCancelStateMachineEventName(): string + { + return 'cancel'; + } + + /** + * @return array + */ + public function getSspInquiryAvailableStatuses(): array + { + return [ + 'pending', + 'in_review', + 'approved', + 'rejected', + 'canceled', + ]; + } +} + +``` + +
    + +
    + src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php + +```php + + */ + public function getInquiryStatusClassMap(): array + { + return [ + 'approved' => 'label-success', + 'rejected' => 'label-danger', + 'pending' => 'label-warning', + 'canceled' => 'label-default', + 'in_review' => 'label-primary', + ]; + } + + public function getInquiryPendingStatus(): string + { + return 'pending'; + } +} + +``` + +
    + +**src/Pyz/Zed/Sales/SalesConfig.php** + +```php + + */ + public function getSalesDetailExternalBlocksUrls(): array + { + $projectExternalBlocks = [ + 'inquiries' => '/self-service-portal/list-order-inquiry' + ]; + + $externalBlocks = parent::getSalesDetailExternalBlocksUrls(); + + return array_merge($externalBlocks, $projectExternalBlocks); + } +} +``` + +## Configure navigation + +Add the `Inquiries` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Inquiries + self-service-portal + list-inquiry + index + + + + +``` + +Generate routers and navigation cache + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the Back Office, the **Customer portal** > **Inquiries** menu item is available. +{% endinfo_block %} + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_inquiry` +- `spy_ssp_inquiry_file` +- `spy_ssp_inquiry_sales_order` +- `spy_ssp_inquiry_sales_order_item` +- `spy_ssp_inquiry_ssp_asset` + {% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Add state machine configuration + +Create an XML configuration file for the state machine. + +
    + config/Zed/StateMachine/SspInquiry/SspInquiryDefaultStateMachine.xml + +```xml + + + + + + + + + + + + + + + + created + pending + initiate + + + pending + in_review + start_review + + + pending + canceled + cancel + + + in_review + approved + approve + + + in_review + rejected + reject + + + + + + + + + + + + +``` + +
    + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| CreateSspInquiryPermissionPlugin | Allows customer to create inquiries. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspInquiryPermissionPlugin | Allows customer to view inquiries within the same company business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanySspInquiryPermissionPlugin | Allows customer to view inquiries within the same company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the SSP inquiry feature. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| SspInquiryRestrictionHandlerPlugin | Restricts access to inquiries and inquiry details pages for non-company users. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes in a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SelfServicePortalTwigPlugin | Provides Twig functionality for Self-Service Portal features. | | SprykerFeature\Zed\SelfServicePortal\Communication\Twig | +| SspInquiryDataImportPlugin | Introduces the `ssp-inquiry` import type. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| SspInquiryApprovedMailTypeBuilderPlugin | Sends an email on inquiry approval. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | +| SspInquiryRejectedMailTypeBuilderPlugin | Sends an email on inquiry rejection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | +| SspInquirySspAssetManagementExpanderPlugin | Adds the inquiries table to Assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement | +| SspInquiryStateMachineHandlerPlugin | State Machine handler for inquiry processing. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine | +| ApproveSspInquiryCommandPlugin | State Machine command that handles inquiry approval. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement | +| RejectSspInquiryCommandPlugin | State Machine command that handles inquiry rejection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Zed\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new CreateSspInquiryPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Yves\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new CreateSspInquiryPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspInquiryDataImportPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new SspInquirySspAssetManagementExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StateMachine\Dependency\Plugin\CommandPluginInterface> + */ + protected function getStateMachineCommandPlugins(): array + { + return [ + 'SspInquiry/Approve' => new ApproveSspInquiryCommandPlugin(), + 'SspInquiry/Reject' => new RejectSspInquiryCommandPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/StateMachine/StateMachineDependencyProvider.php** + +```php + + */ + protected function getStateMachineHandlers(): array + { + return [ + new SspInquiryStateMachineHandlerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new SelfServicePortalTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------|------------------------------------------------------|---------------|----------------------------------------------| +| SspInquiryMenuItemWidget | Provides a customer menu item for the inquiries. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| CreateOrderSspInquiryWidget | Provides a button to create an inquiry for an order. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspInquiryListWidget | Provides the inquiries table. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspListMenuItemWidget | Renders the menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspInquiryMenuItemWidget::class, + CreateOrderSspInquiryWidget::class, + SspInquiryListWidget::class, + SspListMenuItemWidget::class, + ]; + } + + protected function getFilterControllerEventSubscriberPlugins(): array + { + return [ + new SspInquiryRestrictionHandlerPlugin(), + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block infoBox "CMS block data" %} + +CMS block data import is required for email templates to work properly. To import CMS block data for email templates, see the [Add cms block data import for email templates](#add-cms-block-data-import-for-email-templates) section below. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Set customer permissions for inquiry management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **Create inquiry** + - **View company inquiries** + - **View business unit inquiries** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify customer permissions on Storefront: + +1. On the Storefront, log in with the company user you've assigned the role to. +2. Go to **Customer Account** > **Inquiries**. +3. Click **Create Inquiry**. +4. Fill in the required fields. +5. Optional: Upload up to 5 files. +6. Click **Submit Inquiry**. + Make sure this saves the inquiry and opens the inquiry details page. +7. Go to **Customer Account** > **Inquiries**. + Make sure the inquiry you've created is displayed in the list. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify inquiries in the Back Office: + +1. In the Back Office, go to **Customer Portal** > **Inquiries** page. Make sure the following applies: + +- The inquiry you've created on the Storefront is displayed in the list. +- You can filter the list by **Inquiry status** and **Inquiry type**. + +2. Click **View** next to an inquiry. + Make sure that, in the **Status** section, **Start review** and **Cancel** buttons are displayed. +3. Click **Start review**. + Make sure the inquiry status changes to **In review**. + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add inquiry demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_inquiry.csv** + +```csv +reference,store,type,company_user_key,subject,description +DE-INQR--1,DE,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account. +DE-INQR--2,DE,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details. +DE-INQR--3,AT,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account. +DE-INQR--4,AT,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details. +``` + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: ssp-inquiry + source: data/import/common/common/ssp_inquiry.csv +``` + +### Add cms block data import for email templates + +{% info_block warningBox "Required" %} + +CMS block data import is required for inquiry email notifications to work properly. Make sure to complete this step. + +{% endinfo_block %} + +Add to **data/import/common/common/cms_block.csv**: + +
    + cms_block.csv + +```csv +{% raw %} +cms-block-email--ssp-inquiry-approved--html,ssp-inquiry-approved--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    ","

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    " +cms-block-email--ssp-inquiry-approved--text,ssp-inquiry-approved--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}" +cms-block-email--ssp-inquiry-rejected--html,ssp-inquiry-rejected--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.sspInquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    ","

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    " +cms-block-email--ssp-inquiry-rejected--text,ssp-inquiry-rejected--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}" +{% endraw %} +``` + +
    + +Add to **data/import/common/DE/cms_block_store.csv**: + +```csv +cms-block-email--ssp-inquiry-approved--html,DE +cms-block-email--ssp-inquiry-approved--text,DE +cms-block-email--ssp-inquiry-rejected--html,DE +cms-block-email--ssp-inquiry-rejected--text,DE +``` + +### Import the data + +```bash +console data:import ssp-inquiry +console data:import cms-block +console data:import cms-block-store +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- Glossary keys have been added to `spy_glossary_key` and `spy_glossary_translation` tables. +- The `ssp_inquiry` table contains the new inquiries. +- The new CMS blocks are assigned to correct stores. + +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------|------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspInquiriesResourceRoutePlugin | Provides the GET and POST endpoints for the SSP inquiries. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspInquiriesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create inquiries by importing demo data as described in the previous sections. + +2. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +3. Use the access token to access the `ssp-inquiries` endpoint: + + +
    + GET https://glue.mysprykershop.com/ssp-inquiries + +```json +{ + "data": [ + { + "type": "ssp-inquiries", + "id": "DE-INQR--1", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Request for documentation", + "description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.", + "reference": "DE-INQR--1", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1" + } + }, + { + "type": "ssp-inquiries", + "id": "DE-INQR--2", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Product catalog issue", + "description": "I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details.", + "reference": "DE-INQR--2", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--2" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries" + } +} +``` + +4. To get the particular inquiry, use the access token to send a `GET` request to the `ssp-inquiries` endpoint with the asset ID: + `GET https://glue.mysprykershop.com/ssp-inquiries/DE-INQR--1` + +```json +{ + "data": { + "type": "ssp-inquiries", + "id": "DE-INQR--1", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Request for documentation", + "description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.", + "reference": "DE-INQR--1", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1" + } + } +} +``` + +5. Use the access token to create the `ssp-inquiries` resource: + `POST https://glue.mysprykershop.com/ssp-inquiries` + +```json +{ + "data": { + "type": "ssp-inquiries", + "attributes": { + "subject": {Inquiry subject}, + "description": {Inquiry description}, + "type": {One of the following types: general, order, ssp_asset} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "type": "ssp-inquiries", + "id": "DE-INQR--3", + "attributes": { + "sspAssetReference": "AST--39", + "orderReference": null, + "type": "ssp_asset", + "status": "pending", + "subject": "TestInquiryAPIsubject", + "description": "TestInquiryAPIdescription", + "reference": "DE-INQR--3", + "isCancellable": true + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--3" + } + } +} +``` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-model-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-model-management-feature.md new file mode 100644 index 00000000000..0b0f4b1302a --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-model-management-feature.md @@ -0,0 +1,482 @@ +This document describes how to install the Self-Service Portal (SSP) Model Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Model Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|---------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +Add the following configuration to `config/Shared/config_default.php`: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Defines the Flysystem service configuration for handling asset file storage. This configuration specifies the adapter, such as local or S3, and the root path for storing model files, ensuring they're managed securely and efficiently. | Spryker\Shared\FileSystem | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kernel | +| SelfServicePortalConstants::SSP_MODEL_IMAGE_STORAGE_NAME | Defines the unique identifier for the Flysystem storage instance used for SSP models. This name links the model management feature to the specific filesystem configuration defined in `FileSystemConstants::FILESYSTEM_SERVICE`. | Spryker\Shared\Kernel | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL | Defines queue name as used for processing SSP model storage messages. | SprykerFeature\Shared\SelfServicePortal | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_MODELS_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_MODELS_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_MODELS_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-model-image', + 'path' => '', + ], +]; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +$config[SelfServicePortalConstants::SSP_MODEL_IMAGE_STORAGE_NAME] = 'ssp-model-image'; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_MODELS_KEY` - AWS S3 access key for SSP model file storage +- `SPRYKER_S3_SSP_MODELS_SECRET` - AWS S3 secret key for SSP model file storage +- `SPRYKER_S3_SSP_MODELS_BUCKET` - AWS S3 bucket name for SSP model file storage +- `AWS_REGION` - AWS region + +{% endinfo_block %} + +## Configure synchronization queues + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL, + ]; + } +} +``` + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Set up the queue infrastructure: + +```bash +vendor/bin/console queue:setup +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the RabbitMQ management interface, the following queues are available: + +- `sync.storage.ssp_model` +- `sync.storage.ssp_model.error` + +{% endinfo_block %} + +## Configure the event triggering for the model entity + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +Apply changes: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_model` +- `spy_ssp_model_storage` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Models` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Models + self-service-portal + list-model + index + + + + +``` + +Generate routers and navigation cache + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the Back Office, the **Customer portal** > **Models** section is available. +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|----------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| SspModelPublisherTriggerPlugin | Retrieves SSP models by provided limit and offset. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher | +| SspModelWritePublisherPlugin | Publishes SSP model data by `SpySspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspModel\Storage | +| SspModelToProductListWritePublisherPlugin | Publishes SSP model data by `SpySspModelToProductList` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspModel\Storage | +| SspModelListSynchronizationDataBulkRepositoryPlugin | Retrieves a collection of SSP model storage transfers according to provided offset, limit and IDs. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\Storage | +| SspModelProductListUsedByTableExpanderPlugin | Expands table data by adding SSP models related to the product list. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductListGui | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return [ + new SspModelWritePublisherPlugin(), + new SspModelToProductListWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new SspModelPublisherTriggerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new SspModelListSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductListGui/ProductListGuiDependencyProvider.php** + +```php + + */ + protected function getProductListUsedByTableExpanderPlugins(): array + { + return [ + new SspModelProductListUsedByTableExpanderPlugin(), + ]; + } +} +``` + +### Set up widgets + +{% info_block infoBox "Info" %} + +No widgets are required for the Model Management feature. + +{% endinfo_block %} + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Verify models in the Back Office: + +1. In the Back Office, go to **Customer Portal** > **Models**. +2. Click **Create Model**. +3. Fill in the required fields (name). +4. Optional: Upload an image or provide an image URL, set model code. +5. Click **Save**. + Make sure the model gets saved and this opens the model details page. +6. Go to **Customer Portal** > **Models**. + Make sure the model you've created is displayed in the list. + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add model demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_model.csv** + +```csv +reference,name,code,image_url +MDL--1,OfficeJet Pro,9025e,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg +MDL--2,Casa,F-08,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|-------------------------------------------------------------------------|------------------------------------------------------| +| reference | ✓ | string | MDL--1 | Unique identifier for the model used as a reference. | +| name | | string | OfficeJet Pro | The display name of the model. | +| code | ✓ | string | 9025e | The model code for identification purposes. | +| image_url | | string | `https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg` | URL to an image of the model. | + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... +# SelfServicePortal +- data_entity: ssp-model + source: data/import/common/common/ssp_model.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------|---------------|----------------------------------------------------------------------| +| SspModelDataImportPlugin | Imports a ssp model into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspModelDataImportPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_SSP_MODEL), + ]; + + return $commands; + } +} +``` + +### Import the data + +```bash +console data:import:ssp-model +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: + +- `spy_ssp_model` +- `spy_ssp_model_storage` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). + diff --git a/_includes/pbc/all/install-features/202410.0/install-the-ssp-service-management-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-ssp-service-management-feature.md new file mode 100644 index 00000000000..97e9bd9a3a5 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/install-the-ssp-service-management-feature.md @@ -0,0 +1,1764 @@ +{% info_block warningBox %} + +SSP Service Management feature is not compatible with the [Order Amendment feature](/docs/pbc/all/order-management-system/latest/base-shop/order-amendment-feature-overview.html). Orders that include services booked through the SSP can't be amended. + +{% endinfo_block %} + +This document describes how to install the Self-Service Portal (SSP) SSP Service Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Service Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Shipment Service Points | {{page.release_tag}} | [Install the Shipment Service Points feature](/docs/pbc/all/carrier-management/latest/unified-commerce/install-features/install-the-shipment-service-points-feature.html) | +| Click and Collect | {{page.release_tag}} | [Enable Click and Collect](/docs/pbc/all/service-point-management/latest/unified-commerce/enable-click-collect.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Service Points Product Offer | {{page.release_tag}} | [Install the Service Points Product Offer feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-product-offer-feature.html) | +| Product Offer Service Points | {{page.release_tag}} | [Install the Product Offer Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | +| Product Offer Shipment | {{page.release_tag}} | [Install the Product Offer Shipment feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html) | +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Marketplace Product Offer Cart | {{page.release_tag}} | [Install the Marketplace Product Offer Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required packages using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following package is listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------| +| SelfServicePortalConstants::GOOGLE_MAPS_API_KEY | Defines a Google Maps API key required for rendering maps and location-based features in the service point selector. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING | Maps payment methods to their corresponding state machine processes, ensuring that service orders follow the correct payment workflow. | SprykerFeature\Shared\SelfServicePortal | +| ClickAndCollectPageExampleConfig::CLICK_AND_COLLECT_SHIPMENT_TYPES | Defines the shipment types that are supported by Click & Collect, enabling customers to choose between different delivery or pickup options. | SprykerShop\Yves\ClickAndCollectPageExample | +| ClickAndCollectPageExampleConfig::DEFAULT_PICKABLE_SERVICE_TYPES | Specifies default service types that are considered "pickable," meaning they can be selected for in-person service or pickup. | SprykerShop\Yves\ClickAndCollectPageExample | +| SelfServicePortalConfig::getDefaultMerchantReference() | Provides a default merchant reference used when creating product offers from the Back Office, ensuring that offers are associated with the correct merchant. | SprykerFeature\Zed\SelfServicePortal | +| DataImportConfig::getFullImportTypes() | Specifies the list of data import entities to be processed during a full data import, including service-related data. | Pyz\Zed\DataImport | +| ServicePointWidgetConfig::getDeliveryShipmentTypeKeys() | Defines a list of shipment type keys that are treated as delivery types within the service point widget. | SprykerShop\Yves\ServicePointWidget | +| ShipmentTypeWidgetConfig::getDeliveryShipmentTypes() | Defines a list of shipment type keys that are treated as delivery types within the shipment type widget. | SprykerShop\Yves\ShipmentTypeWidget | +| SelfServicePortalConfig::getProductOfferServiceAvailabilityShipmentTypeKeys() | Returns a list of shipment type keys that are applicable for product offer service availability. | SprykerFeature\Client\SelfServicePortal | +| SelfServicePortalConfig::getDefaultSelectedShipmentTypeKey() | This shipment type will be pre-selected in the shipment type options for the services. | Pyz\Yves\SelfServicePortal\SelfServicePortalConfig | +| SelfServicePortalConfig::getDeliveryLikeShipmentTypes() | Override this method in project-level configuration to define delivery-like shipment types. | Pyz\Yves\SelfServicePortal\SelfServicePortalConfig | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | + + +**config/Shared/config_default.php** + +```php +use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConstants; + +$config[SelfServicePortalConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = $config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING]; +$config[SelfServicePortalConstants::GOOGLE_MAPS_API_KEY] = getenv('SPRYKER_GOOGLE_MAPS_API_KEY') ?: ''; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +**src/Pyz/Yves/ClickAndCollectPageExample/ClickAndCollectPageExampleConfig.php** + +```php + + */ + protected const array CLICK_AND_COLLECT_SHIPMENT_TYPES = [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + self::SHIPMENT_TYPE_DELIVERY, + ]; + + /** + * @var array + */ + protected const array DEFAULT_PICKABLE_SERVICE_TYPES = [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + return [ + SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE, + ]; + } +} +``` + +**src/Pyz/Yves/ServicePointWidget/ServicePointWidgetConfig.php** + +```php + + */ + public function getDeliveryShipmentTypeKeys(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +**src/Pyz/Yves/ShipmentTypeWidget/ShipmentTypeWidgetConfig.php** + +```php + + */ + public function getDeliveryShipmentTypes(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getProductOfferServiceAvailabilityShipmentTypeKeys(): array + { + return [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; + } +} +``` + +**src/Pyz/Yves/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getShipmentTypeSortOrder(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; + } + + /** + * @return array + */ + public function getDeliveryLikeShipmentTypes(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +### Protect Google Maps API key + +Your Google Maps API production key must be protected. Unprotected keys can be stolen and abused, leading to unauthorized usage and unexpected charges. + +To protect the API key, follow the steps: + +1. Go to [Google Cloud Console](https://console.cloud.google.com/apis/credentials). +2. Select your project and open **APIs & Services → Credentials**. +3. Select the API key you want to protect. +4. Set application restrictions: +- For web: choose **HTTP referrers** +- For server: choose **IP addresses** +- For mobile apps: use **Android/iOS options** +5. For API restrictions, enable only required APIs, such as Maps JavaScript API or Places API. +6. Click **Save**. + + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------------------------|--------|---------| +| spy_product_shipment_type | table | created | +| spy_sales_product_class | table | created | +| spy_sales_order_item_product_class | table | created | +| spy_product_class | table | created | +| spy_product_to_product_class | table | created | +| spy_sales_order_item_metadata.scheduled_at | column | added | +| spy_service_point_address.longitude | column | added | +| spy_service_point_address.latitude | column | added | + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Services` and `Offers` sections to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Booked Services + self-service-portal + list-service + index + fa-paperclip + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure the following menu items are available in the Back Office navigation: + +- **Customer Portal** > **Booked Services** + +{% endinfo_block %} + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +## Set up behavior + +1. Add the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------| +| ProductClassFacetConfigTransferBuilderPlugin | Configures a facet filter for product classes as an enumeration type with multi-value support. | | SprykerFeature\Client\SelfServicePortal\Plugin\Catalog | +| ShipmentTypeProductViewExpanderPlugin | Adds shipment type information to product view based on provided shipment type identifiers. | | SprykerFeature\Client\SelfServicePortal\Plugin\ProductStorage | +| ProductOfferPreAddToCartPlugin | Adds the product offer reference to an item during the add-to-cart process. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| ServicePointPreAddToCartPlugin | Associates a service point with a cart item using a provided product offer reference and service point UUID. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| ShipmentTypePreAddToCartPlugin | Associates a shipment type with a cart item during the add-to-cart process. | | SprykerFeature\Yves\SelfServicePortal\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\SelfServicePortal\Plugin\CartPage | +| SelfServicePortalPageRouteProviderPlugin | Defines and adds routes for managing service points, searching, listing customer services, updating service times, and canceling services. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| ShipmentTypeProductConcretePostCreatePlugin | Adds shipment type information after creating a product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcretePostUpdatePlugin | Updates shipment type information after updating a product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteExpanderPlugin | Expands product concrete data with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteStorageCollectionExpanderPlugin | Expands product concrete storage collection with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductStorage | +| SspShipmentTypeQuoteExpanderPlugin | Expands quote data with SSP shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Quote | +| ServicePointQuoteExpanderPlugin | Expands quote data with service point information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Quote | +| ScheduleTimeOrderItemExpanderPreSavePlugin | Expands order item data with scheduled time information before saving. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspServiceShipmentTypePreReloadItemsPlugin | Checks and removes service items without a shipment type from cart. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| EditOfferProductOfferTableActionPlugin | Expands the product offer table with an edit button. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductOfferGui | +| SspServiceCancellableOrderItemExpanderPlugin | Expands order items with an `isCancellable` property. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ServiceSspAssetManagementExpanderPlugin | Expands assets with a services collection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement | +| ProductServiceClassNameTwigPlugin | Adds the `serviceProductClassName` Twig global variable with the value from config. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Twig | +| SingleAddressPerShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin | Expands the checkout multi-shipping address form with single address per shipment type checkbox. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CustomerPage | +| ProductClassItemExpanderPlugin | Expands cart items with the related product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| ServicePointItemExpanderPlugin | Expands cart items with a selected service point. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| SspShipmentTypeItemExpanderPlugin | Expands cart items with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| ProductClassDataImportPlugin | Imports product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductToProductClassDataImportPlugin | Imports product to product class relations. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductShipmentTypeDataImportPlugin | Imports a product shipment type relation. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductClassesProductConcreteExpanderPlugin | Expands `ProductConcreteTransfer` with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ProductClassProductConcreteAfterUpdatePlugin | Updates product classes for an existing product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ProductClassProductConcretePostCreatePlugin | Saves product classes for a newly created product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin | Maps shipment types from product concrete to product form data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassFormExpanderPlugin | Expands product concrete form with a product class field. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductConcreteFormEditDataProviderExpanderPlugin | Expands product concrete form data with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductConcreteTransferMapperPlugin | Maps product class data from form to `ProductConcreteTransfer`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ShipmentTypeProductConcreteFormExpanderPlugin | Expands the `ProductConcreteForm` with a choice field for shipment types. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ShipmentTypeProductFormTransferMapperExpanderPlugin | Maps shipment type form data to `ProductConcreteTransfer`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductAbstractMapExpanderPlugin | Adds product class names to product abstract search data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductPageDataExpanderPlugin | Expands the provided ProductPageSearchTransfer transfer object's data with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductPageDataLoaderPlugin | Expands `ProductPageLoadTransfer` object with product class data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductConcreteStorageCollectionExpanderPlugin | Expands `ProductConcreteStorage` transfers with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductStorage | +| ProductClassOrderExpanderPlugin | Expands order items with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ProductClassOrderItemsPostSavePlugin | Persists product classes information from `ItemTransfer.productClasses`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspProductClassSalesOrderItemCollectionPreDeletePlugin | Deletes related product class entries for given sales order items. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| CoordinatesServicePointSearchDataExpanderPlugin | Adds latitude and longitude coordinates to the service point search data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ServicePointSearch | +| ProductServiceAvailabilityStorageStrategyPlugin | Checks the availability of service products by verifying they have a service shipment type and at least one available product offer. | | SprykerFeature\Client\SelfServicePortal\Plugin\AvailabilityStorage | +| ShipmentTypeServicePointProductOfferStorageFilterPlugin | Filters product offers by shipment type and service point UUIDs from criteria to return matching offers. | | SprykerFeature\Client\SelfServicePortal\Plugin\ProductOfferStorage | +| SspServiceReschedulableOrderExpanderPlugin | Expands the order items with "reschedulable" flag, that is used to show/hide reschedule button in storefront and back-office. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspServiceReschedulableOrderExpanderPlugin | Expands the order items with "reschedulable" flag, that is used to show/hide reschedule button in storefront and back-office. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ViewCompanySspServicePermissionPlugin | Allows customer to view services within the same company. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspServicePermissionPlugin | Allows customer to view services within the same company business unit. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php + + */ + protected function getFacetConfigTransferBuilderPlugins(): array + { + return [ + new ProductClassFacetConfigTransferBuilderPlugin(), + ]; + } + + /** + * @return array> + */ + protected function getFacetConfigTransferBuilderPluginVariants(): array + { + return [ + SearchHttpConfig::TYPE_SEARCH_HTTP => [ + new ProductClassFacetConfigTransferBuilderPlugin(), + ], + ]; + } +} +``` + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + /** @var array<\Spryker\Client\ProductStorage\Dependency\Plugin\ProductViewExpanderPluginInterface> $plugins */ + $plugins = [ + new ShipmentTypeProductViewExpanderPlugin(), + ]; + + return $plugins; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new ProductOfferPreAddToCartPlugin(), + new ServicePointPreAddToCartPlugin(), + new ShipmentTypePreAddToCartPlugin(), + new ServiceDateTimePreAddToCartPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new SspShipmentTypeItemExpanderPlugin(), + new ProductClassItemExpanderPlugin(), + new ServicePointItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new SspServiceShipmentTypePreReloadItemsPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Product/ProductDependencyProvider.php + +```php + + */ + protected function getProductConcreteAfterCreatePlugins(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new ShipmentTypeProductConcretePostCreatePlugin(), + new ProductClassProductConcretePostCreatePlugin(), + ]; + } + + /** + * @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(), + new ProductClassProductConcreteAfterUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface> + */ + protected function getProductConcreteExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteExpanderPlugin(), + new ProductClassesProductConcreteExpanderPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + */ + protected function getProductConcreteFormEditDataProviderExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin(), + new ProductClassProductConcreteFormEditDataProviderExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductFormTransferMapperExpanderPluginInterface> + */ + protected function getProductFormTransferMapperExpanderPlugins(): array + { + return [ + new ShipmentTypeProductFormTransferMapperExpanderPlugin(), + new ProductClassProductConcreteTransferMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormExpanderPluginInterface> + */ + protected function getProductConcreteFormExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteFormExpanderPlugin(), + new ProductClassFormExpanderPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php +|array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataExpanderPluginInterface> + */ + protected function getDataExpanderPlugins(): array + { + $dataExpanderPlugins = []; + $dataExpanderPlugins[SelfServicePortalConfig::PLUGIN_PRODUCT_ABSTRACT_CLASS_DATA] = new ProductClassProductPageDataExpanderPlugin(); + + return $dataExpanderPlugins; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface> + */ + protected function getDataLoaderPlugins(): array + { + return [ + new ProductClassProductPageDataLoaderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface> + */ + protected function getProductAbstractMapExpanderPlugins(): array + { + return [ + new ProductClassProductAbstractMapExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductConcreteStorageCollectionExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteStorageCollectionExpanderPlugin(), + new ProductClassProductConcreteStorageCollectionExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new SspShipmentTypeQuoteExpanderPlugin(), + new ServicePointQuoteExpanderPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPreSavePlugins(): array + { + return [ + new ScheduleTimeOrderItemExpanderPreSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPluginInterface> + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new SspServiceCancellableOrderItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new ProductClassOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new ProductClassOrderExpanderPlugin(), + new SspServiceReschedulableOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPreDeletePluginInterface> + */ + protected function getSalesOrderItemCollectionPreDeletePlugins(): array + { + return [ + new SspProductClassSalesOrderItemCollectionPreDeletePlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new ServiceSspAssetManagementExpanderPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + protected function getProductOfferTableExpanderPlugins(): array + { + return [ + new EditOfferProductOfferTableActionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ServicePointSearch/ServicePointSearchDependencyProvider.php** + +```php + + */ + protected function getServicePointSearchDataExpanderPlugins(): array + { + return [ + new CoordinatesServicePointSearchDataExpanderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutMultiShippingAddressesFormExpanderPlugins(): array + { + return [ + new SingleAddressPerShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/AvailabilityStorage/AvailabilityStorageDependencyProvider.php** + +```php + + */ + protected function getAvailabilityStorageStrategyPlugins(): array + { + return [ + new ProductServiceAvailabilityStorageStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageFilterPlugins(): array + { + return [ + new ShipmentTypeServicePointProductOfferStorageFilterPlugin(), + ]; + } +} +``` + +2. Enable the project override to enable the checkout form to handle single addresses per shipment type: + + +
    + src/Pyz/Yves/CustomerPage/Form/CheckoutAddressCollectionForm.php + +```php +add( + static::FIELD_BILLING_SAME_AS_SHIPPING, + CheckboxType::class, + [ + 'required' => false, + 'constraints' => [], + 'validation_groups' => function (FormInterface $form) { + $shippingAddressForm = $form->getParent() + ? $form->getParent()->get(static::FIELD_SHIPPING_ADDRESS) + : null; + + if (!$shippingAddressForm) { + return false; + } + + if (!$this->isDeliverToMultipleAddressesEnabled($shippingAddressForm)) { + return false; + } + + return [static::GROUP_BILLING_SAME_AS_SHIPPING]; + }, + ], + ); + + return $this; + } + + /** + * @param \Symfony\Component\Form\FormEvent $event + * @param \SprykerShop\Yves\CustomerPage\Dependency\Service\CustomerPageToShipmentServiceInterface $shipmentService + * + * @return void + */ + protected function hydrateShippingAddressSubFormDataFromItemLevelShippingAddresses( + FormEvent $event, + CustomerPageToShipmentServiceInterface $shipmentService, + ): void { + $quoteTransfer = $event->getData(); + + if (!($quoteTransfer instanceof QuoteTransfer)) { + return; + } + + $quoteTransfer = $this->executeCheckoutAddressStepPreGroupItemsByShipmentPlugins($quoteTransfer); + + $shipmentGroupCollection = $this->mergeShipmentGroupsByShipmentHash( + $shipmentService->groupItemsByShipment($quoteTransfer->getItems()), + $shipmentService->groupItemsByShipment($quoteTransfer->getBundleItems()), + ); + + $shippingAddressForm = $event->getForm()->get(static::FIELD_SHIPPING_ADDRESS); + + if ($quoteTransfer->getItems()->count() || $quoteTransfer->getBundleItems()->count()) { + $this->setDeliverToMultipleAddressesEnabled($shippingAddressForm); + } + + if ($this->isDeliverToMultipleAddressesEnabled($shippingAddressForm) || $shipmentGroupCollection->count() < 1) { + return; + } + + $shipmentGroupTransfer = $shipmentGroupCollection->getIterator()->current(); + + if (!$shipmentGroupTransfer->getShipment() || !$shipmentGroupTransfer->getShipment()->getShippingAddress()) { + return; + } + + $shippingAddressForm->setData(clone $shipmentGroupTransfer->getShipment()->getShippingAddress()); + } +} +``` + +
    + +**src/Pyz/Yves/CustomerPage/Form/DataProvider/CheckoutAddressFormDataProvider.php** + +```php +productBundleClient->getGroupedBundleItems( + $quoteTransfer->getItems(), + $quoteTransfer->getBundleItems(), + ); + + return count($items) >= 1 + && $this->shipmentClient->isMultiShipmentSelectionEnabled() + && !$this->hasQuoteGiftCardItems($quoteTransfer); + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Client\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewCompanySspServicePermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspServicePermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspServicePermissionPlugin(), + new ViewBusinessUnitSspServicePermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +## Demo data for EU region / DE store + +### Add service demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/shipment.csv** + +```csv +shipment_method_key,name,carrier,taxSetName +in-center-service,Service Center Appointment,Service,Tax Exempt +``` + +**data/import/common/common/shipment_type.csv** + +```csv +key,name,is_active +in-center-service,In-Center Service,1 +``` + +**data/import/common/common/service.csv** + +```csv +key,service_point_key,service_type_key,is_active +s3,sp1,in-center-service,1 +``` + +**data/import/common/common/service_type.csv** + +```csv +name,key +Service Visit,in-center-service +``` + +**data/import/common/common/shipment_method_shipment_type.csv** + +```csv +shipment_method_key,shipment_type_key +in-center-service,in-center-service +``` + +**data/import/common/common/shipment_type_service_type.csv** + +```csv +shipment_type_key,service_type_key +in-center-service,in-center-service +``` + +**data/import/common/DE/shipment_method_store.csv** + +```csv +shipment_method_key,store +in-center-service,DE +``` + +**data/import/common/common/product_to_product_class.csv** + +```csv +sku,product_class_key +service-001-1,service +service-001-1,scheduled +``` + +**data/import/common/common/product_class.csv** + +```csv +key,name +service,Service +scheduled,Scheduled +spare-parts,Spare parts +``` + +**data/import/common/DE/shipment_type_store.csv** + +```csv +shipment_type_key,store_name +in-center-service,DE +delivery,DE +``` + +**data/import/common/DE/shipment_price.csv** + +```csv +shipment_method_key,store,currency,value_net,value_gross +in-center-service,DE,EUR,,0 +in-center-service,DE,CHF,,0 +``` + +**data/import/common/common/product_shipment_type.csv** + +```csv +concrete_sku,shipment_type_key +service-001-1,in-center-service +``` + +### Import product labels for the service products + +Prepare your data according to your requirements using our demo data: + +**data/import/common/DE/product_label_store.csv** + +```csv +name,store_name +Service,DE +Scheduled,DE +Spare parts,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------|----------|-----------|--------------|------------------------------------------------------------| +| name | ✓ | string | Service | Product label name (for example, Service, Scheduled, Spare parts). | +| store_name | ✓ | string | DE | Store to which the label is assigned (for example, AT, DE, US). | + + +**data/import/common/common/product_label.csv** + +```csv +name,is_active,is_dynamic,is_exclusive,front_end_reference,valid_from,valid_to,name.en_US,name.de_DE,product_abstract_skus,priority +Service,1,0,0,service,,,Service,Service,"service-001,service-002,service-003,service-004",4 +Scheduled,1,0,0,scheduled,,,Scheduled,Geplant,"service-001,service-002,service-003,service-004",5 +Spare parts,1,0,0,spare-parts,,,Spare parts,Ersatzteile,"service-001,service-002,service-003,service-004",6 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DESCRIPTION | +|-----------------------|----------|------------------------|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| name | ✓ | string | Service | Base (default) label name. Must be unique across labels; used to reference the label in other import files (for example, product_label_store). | +| is_active | ✓ | int (0 or 1) | 1 | Activation flag. 1 = label is active and visible; 0 = inactive (kept for future use). | +| is_dynamic | ✗ | int (0 or 1) | 0 | Marks label as dynamic (rule-driven) when 1. Keep 0 for manually assigned/static labels. | +| is_exclusive | ✗ | int (0 or 1) | 0 | When 1, this label suppresses display of other non-exclusive labels on the same product. | +| front_end_reference | ✗ | string (slug) | service | Front-end identifier/slug usable for CSS hooks, theming, or routing. Should be URL/identifier friendly (lowercase, dashes). | +| valid_from | ✗ | datetime (Y-m-d H:i:s) | 2025-01-01 00:00:00 | Start of validity window. Leave empty for immediate/no start restriction. | +| valid_to | ✗ | datetime (Y-m-d H:i:s) | 2025-12-31 23:59:59 | End of validity window. Leave empty for no expiry. | +| name.en_US | ✓ | string | Service | Localized label name for en_US. Required if the locale is part of the project storefront locales. | +| name.de_DE | ✗ | string | Ersatzteile | Localized label name for de_DE. Add one column per supported locale (pattern: name.{locale}). | +| product_abstract_skus | ✗ | comma-separated list | "service-001,service-002" | List of abstract product SKUs assigned to this label. Empty when using dynamic rules or assigning later. | +| priority | ✗ | int | 4 | Sorting / display priority. Lower or higher precedence depends on project logic (by default lower number = higher priority in many setups). | + + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: shipment-type + source: data/import/common/common/shipment_type.csv +- data_entity: service-type + source: data/import/common/common/service_type.csv +- data_entity: service + source: data/import/common/common/service.csv +- data_entity: shipment-method-shipment-type + source: data/import/common/common/shipment_method_shipment_type.csv +- data_entity: shipment-type-service-type + source: data/import/common/common/shipment_type_service_type.csv +- data_entity: shipment-method-store + source: data/import/common/DE/shipment_method_store.csv +- data_entity: product-class + source: data/import/common/common/product_class.csv +- data_entity: product-to-product-class + source: data/import/common/common/product_to_product_class.csv +- data_entity: shipment-type-store + source: data/import/common/DE/shipment_type_store.csv +- data_entity: shipment-price + source: data/import/common/DE/shipment_price.csv +- data_entity: product-shipment-type + source: data/import/common/common/product_shipment_type.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------------------------------| +| ProductShipmentTypeDataImportPlugin | Imports product shipment type relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductClassDataImportPlugin | Imports product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductToProductClassDataImportPlugin | Imports product to product class relations. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductShipmentTypeDataImportPlugin(), + new ProductClassDataImportPlugin(), + new ProductToProductClassDataImportPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Console/ConsoleDependencyProvider.php + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_CLASS), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_TO_PRODUCT_CLASS), + ]; + } + +} +``` + +
    + +### Import the data + +{% info_block infoBox "Prerequisites" %} + +Before importing the data, make sure you have imported demo data for product concrete with sku **service-001-1**: +- [Import product data](/docs/dg/dev/data-import/latest/importing-product-data-with-a-single-file.html#single-csv-file-for-combined-product-data-import) + +Before importing the data, make sure you have imported demo data for service point with key **sp1**: +- [Import Service Points data](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html#import-service-points) + +{% endinfo_block %} + +```bash +console data:import product-class +console data:import shipment +console data:import product-shipment-type +console data:import shipment-price +console data:import shipment-type +console data:import shipment-type-store +console data:import shipment-method-store +console data:import service +console data:import shipment-type-service-type +console data:import shipment-method-shipment-type +console data:import service-type +console data:import:product-label +console data:import product-to-product-class +``` + +{% info_block warningBox "Verification" %} + +- Make sure the glossary keys have been added to `spy_glossary_key` and `spy_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` + - `spy_product_label` + - `spy_product_label_store` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Catalog** > **Products**. +2. Create an abstract product with a concrete product. +- Add **In-Center Service** and **Delivery** shipment types for the concrete product. +- Add **Service** and **Scheduled** product classes for the concrete product. + +5. Go to **Marketplace** > **Offers**. +6. 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 a sign point to the product offer +- The in-center service shipment type is available + +{% endinfo_block %} + +## Set up widgets + +Set up widgets as follows: + +1. Register the following plugins to enable widgets and plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspServiceMenuItemWidget | Adds a menu item for accessing SSP services in the navigation. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| ListCartItemsByShipmentTypeWidget | Lists items in the cart grouped by their shipment type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| ServiceListWidget | Display the list of the given service products. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAddressFormItemsByShipmentTypeWidget | Lists address from items grouped by their shipment type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspProductOfferPriceWidget | Displays the product offer price for the products with a service type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceCancelWidget | Renders a cancel button for the sales order item on the order details page. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceDetectorWidget | Provide a method to determine if the product is a service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointGeoCodeWidget | Displays the coordinates of the service point. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointNameForItemWidget | Displays the service point name for the cart items. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointSearchWidget | Displays the service point search modal window. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspShipmentTypeServicePointSelectorWidget | Displays the shipment type and service point selector. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SingleAddressPerShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin | Generates a cache key for the related widget. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| AddressFormItemsByShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin | Generates a cache key for the related widget. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceCancelWidgetCacheKeyGeneratorStrategyPlugin | Generates cache key for `SspServiceCancelWidget`. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceChangeScheduledTimeLinkWidgetCacheKeyGeneratorStrategyPlugin | Generates cache key for `SspServiceChangeScheduledTimeLinkWidget`. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspListMenuItemWidget | Provides a menu item widget for SSP lists in the customer account navigation. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +
    + src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php + + +```php + + */ + protected function getWidgetCacheKeyGeneratorStrategyPlugins(): array + { + return [ + new AddressFormItemsByShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin(), + new SingleAddressPerShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin(), + new SspServiceCancelWidgetCacheKeyGeneratorStrategyPlugin(), + new SspServiceChangeScheduledTimeLinkWidgetCacheKeyGeneratorStrategyPlugin(), + ]; + } +} +``` + +
    + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +console frontend:zed:install-dependencies +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Set customer permissions for inquiry management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **View company services** + - **View business unit services** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've created to the user. + + +1. On the Storefront, use the search to find the service product you've created. + Make sure the product is available in the catalog. + +2. Click the product to open its details page. Make sure the following applies on the product details page: + + - Delivery and In-Center-Service shipment types are available + - Select In-Center-Service shipment type + - A service point selector is displayed + - A service date and time selector is displayed + +3. Select a service point. +4. Select a service date and time. +5. Add the product to cart. +6. Add several other service and regular products to cart. +7. 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 date and time is displayed. + +9. Place the order. + Make sure the order is places successfully and the order summary includes service-specific details. + +10. 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 + +17. 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. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. 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 + +2. 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. +3. Make changes to a service order. + Make sure the changes are reflected in the customer profile on the Storefront. +4. In the Back Office, add a new service product. + Make sure that this product is displayed on the Storefront. +5. On the Storefront, go to the catalog page. + Make sure you can filter products by product class: scheduled or service. +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------|---------------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspServicesResourceRoutePlugin | Provides the GET endpoint for the service products (booked-services). | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspServicesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can see the `booked-services` resources for the company user in the request: + +0. As a company user, place an order with a service product. + +2. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +2. Use the access token to access the `booked-services` endpoint: + +`GET https://glue.mysprykershop.com/booked-services` + +```json +{ + "data": [ + { + "type": "booked-services", + "id": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "attributes": { + "uuid": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "productName": "Emergency Repair", + "scheduledAt": null, + "createdAt": "2025-09-23 11:05:30", + "stateDisplayName": "oms.state.new", + "stateName": "grace period started" + }, + "links": { + "self": "http://glue.eu.spryker.local/booked-services/120b7a51-69e4-54b9-96a6-3b5eab0dfe7a?page[offset]=0&page[limit]=1" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/booked-services?page[offset]=0&page[limit]=1" + } +} +``` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202410.0/install-the-uuid-generation-console-feature.md b/_includes/pbc/all/install-features/202410.0/install-the-uuid-generation-console-feature.md index a951f93f1b4..30c87f82ff3 100644 --- a/_includes/pbc/all/install-features/202410.0/install-the-uuid-generation-console-feature.md +++ b/_includes/pbc/all/install-features/202410.0/install-the-uuid-generation-console-feature.md @@ -6,7 +6,7 @@ Install the required features: | FEATURE | VERSION | INSTALLATION GUIDE | | - | - | - | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-customer-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-customer-feature.md index 54ca51335c9..326237a8cc8 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-customer-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-customer-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | ------ | -----------| -| Marketplace Shipment | {{page.version}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-feature.html) | -| Customer | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Customer | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-feature.md index f8efd6da066..c3e03b404df 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-marketplace-shipment-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Shipment | {{page.version}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | ### 1) Install the required modules @@ -19,7 +19,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-shipment:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-shipment:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -65,7 +65,7 @@ class ShipmentConfig extends SprykerShipmentConfig {% info_block warningBox "Verification" %} -Place an order and check that items are grouped by merchant shipment in Back Office. +Place an order and check that items are grouped by merchant shipment in the Back Office. {% endinfo_block %} @@ -137,6 +137,6 @@ class ShipmentGuiDependencyProvider extends SprykerShipmentGuiDependencyProvider | FEATURE | REQUIRED FOR THE CURRENT FEATURE| INSTALLATION GUIDE | |-|-|-| -| Marketplace Shipment + Cart | | [Install the Marketplace Shipment + Cart feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-the-marketplace-shipment-cart-feature.html) | -| Marketplace Shipment + Checkout | | [Install the Marketplace Shipment + Checkout feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.html) | -| Marketplace Shipment + Customer | | [Install the Marketplace Shipment + Customer feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-customer-feature.html) | +| Marketplace Shipment + Cart | | [Install the Marketplace Shipment + Cart feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-the-marketplace-shipment-cart-feature.html) | +| Marketplace Shipment + Checkout | | [Install the Marketplace Shipment + Checkout feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.html) | +| Marketplace Shipment + Customer | | [Install the Marketplace Shipment + Customer feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-customer-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-category-management-marketplace-merchant-commission.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-category-management-marketplace-merchant-commission.md index 2bff9dbb27c..b7cbd6f2d4d 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-category-management-marketplace-merchant-commission.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-category-management-marketplace-merchant-commission.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Category Management | {{page.version}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | -| Marketplace Merchant Commission | {{page.version}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-cart-feature.md index 0a4ddf0bdb2..bfa46ad3ef7 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-cart-feature.md @@ -10,16 +10,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | ----------- | ------- | ------------------| -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Order Threshold | {{page.version}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Threshold | {{page.release_tag}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-cart:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-cart:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -77,10 +77,10 @@ Install the required features: | NAME | VERSION | | -------------------- | ----------- | -| Order Threshold | {{page.version}} | -| Cart | {{page.version}} | -| Merchant Portal Core | {{page.version}} | -| Marketplace Order Management | {{page.version}} | +| Order Threshold | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +| Merchant Portal Core | {{page.release_tag}} | +| Marketplace Order Management | {{page.release_tag}} | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-feature.md index 15c752ca88a..e0f452a4ad6 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Marketplace Inventory Management](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/marketplace-inventory-management-feature-overview.html) feature. +This document describes how to install the [Marketplace Inventory Management](/docs/pbc/all/warehouse-management-system/latest/marketplace/marketplace-inventory-management-feature-overview.html) feature. ## Install feature core @@ -13,14 +13,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Inventory Management | {{page.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-inventory-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-inventory-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -408,7 +408,7 @@ Make sure that `AvailabilityFacade::findOrCreateProductConcreteAvailabilityBySku {% endinfo_block %} -### 6) Configure export to Redis +### 6) Configure export to the key-value store (Redis or Valkey) This step publishes tables on change (create, edit) to the `spy_product_offer_availability_storage` and synchronizes the data to the storage. @@ -525,7 +525,7 @@ class RabbitMqConfig extends SprykerRabbitMqConfig | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |-|-|-|-| -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all product offer availability messages to sync with the Redis storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all product offer availability messages to sync with the key-value store (Redis or Valkey) storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/ProductOfferAvailabilityStorage/ProductOfferAvailabilityStorageConfig.php** @@ -611,8 +611,8 @@ class SynchronizationDependencyProvider extends SprykerSynchronizationDependency {% info_block warningBox "Verification" %} Make sure the following actions take place as expected: -- The command `console sync:data merchant_profile` exports data from the `spy_product_offer_availability_storage` table to Redis. -- When a product offer availability entity gets created or updated through ORM, it's exported to Redis accordingly. +- The command `console sync:data merchant_profile` exports data from the `spy_product_offer_availability_storage` table to the key-value store (Redis or Valkey). +- When a product offer availability entity gets created or updated through ORM, it's exported to the key-value store (Redis or Valkey) accordingly. {% endinfo_block %} @@ -850,6 +850,6 @@ Make sure that the imported data is added to the `spy_merchant_stock` and `spy_p | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |-----------------------------------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Inventory Management + Order Management | | [Install the Marketplace Inventory Management + Order Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | -| Marketplace Inventory Management + Packaging Units | | [Install the Marketplace Inventory Management + Packaging Units feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | -| Marketplace Product + Inventory Management | | [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | +| Marketplace Inventory Management + Order Management | | [Install the Marketplace Inventory Management + Order Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | +| Marketplace Inventory Management + Packaging Units | | [Install the Marketplace Inventory Management + Packaging Units feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | +| Marketplace Product + Inventory Management | | [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-order-management-feature.md index d8ee4ab7826..799777f2b33 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-order-management-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Inventory Management | {{page.version}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md new file mode 100644 index 00000000000..4e911108507 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md @@ -0,0 +1,57 @@ +This document describes how to install the Marketplace Inventory Management + Packaging Units feature. + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management + Packaging Units feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Packaging Units | {{page.release_tag}} | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferPackagingUnitOmsReservationAggregationPlugin | Aggregates reservations for product offers packaging unit. | | Spryker\Zed\ProductOfferPackagingUnit\Communication\Plugin\Oms | + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getOmsReservationAggregationPlugins(): array + { + return [ + new ProductOfferPackagingUnitOmsReservationAggregationPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that availability is calculated properly for the product offers that belong to the product with packaging units. + +- Add such a product offer to the cart. +- Place an order. +- Make sure that `spy_oms_product_offer_reservation` contains a new row, which has reserved the quantity equal to the amount of the bought packaging unit. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md index 381a2488010..96c2848f5e5 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md @@ -7,13 +7,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Merchant B2B Contract Requests | {{page.version}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Merchant B2B Contract Requests | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | ## 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant-contract-requests: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md index a1904c78cd2..b3141d79657 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md @@ -6,13 +6,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Merchant B2B Contracts | {{page.version}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | ## 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant-contracts: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant-contracts: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-commission-feature.md index 251b288f9e0..bd9399ab62d 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-commission-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-commission-feature.md @@ -6,18 +6,18 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Merchant | {{site.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{site.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Acl | {{site.version}} | [Install the ACL feature](/docs/pbc/all/user-management/{{site.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html) | -| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Order Management | {{site.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Marketplace Order Management | {{site.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ## 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant-commission:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant-commission:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1081,18 +1081,18 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Merchant | {{site.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{site.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | -| Acl | {{site.version}} | [Install the ACL feature](/docs/pbc/all/user-management/{{site.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html) | -| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | -| Order Management | {{site.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| Marketplace Order Management | {{site.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{site.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ## 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant-commission:"{{site.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant-commission:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -2264,6 +2264,6 @@ In the Back Office, make sure the **Marketplace** > **Merchant Commissions** nav | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |---------------------------------------------------------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Install the Marketplace Merchant Commission + Category Management feature | {{page.version}} | [Install the Marketplace Merchant Commission + Category Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.html) | -| Install the Marketplace Merchant Commission + Prices feature | {{page.version}} | [Install the Marketplace Merchant Commission + Prices feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.html) | -| Install the Marketplace Merchant Commission + Product feature | {{page.version}} | [Install the Marketplace Merchant Commission + Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.html) | +| Install the Marketplace Merchant Commission + Category Management feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Category Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.html) | +| Install the Marketplace Merchant Commission + Prices feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Prices feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.html) | +| Install the Marketplace Merchant Commission + Product feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md new file mode 100644 index 00000000000..ec218ad3e69 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md @@ -0,0 +1,275 @@ + + +This document describes how to install the Marketplace Merchant Custom Prices feature. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant Custom Prices feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|-------------------| +| Merchant Custom Prices | {{page.release_tag}} | [Install the Merchant Custom Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html) | +| Marketplace Merchant Portal Product Management | {{page.release_tag}} | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-merchant-custom-prices:"{{page.release_tag}}" --with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|------------------| +| PriceProduct | vendor/spryker/price-product | +| PriceProductMerchantRelationship | vendor/spryker/price-product-merchant-relationship | +| PriceProductMerchantRelationshipMerchantPortalGui | vendor/spryker/price-product-merchant-relationship-merchant-portal-gui | +| ProductMerchantPortalGui | vendor/spryker/product-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------|----------|---------|------------------| +| PriceProductTableView.idMerchantRelationship | property | Created | src/Generated/Shared/Transfer/PriceProductTableViewTransfer.php | +| PriceProductTableView.merchantRelationshipName | property | Created | src/Generated/Shared/Transfer/PriceProductTableViewTransfer.php | +| MerchantRelationshipFilter.merchantIds | property | Created | src/Generated/Shared/Transfer/MerchantRelationshipFilterTransfer.php | + +{% endinfo_block %} + +### 3) Add Zed translations + +Generate new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------|-----------------|---------------|------------------| +| MerchantRelationshipPreBuildPriceProductGroupKeyPlugin | Extends the logic for the Price Product group key generation. | | Spryker\Service\PriceProductMerchantRelationship\Plugin\PriceProduct | +| MerchantRelationshipVolumePriceProductValidatorPlugin | Validates volume prices. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\PriceProduct | +| MerchantRelationshipPriceProductCollectionDeletePlugin | Removes price product merchant relationships. | | Spryker\Zed\PriceProductMerchantRelationship\Communication\Plugin\PriceProduct | +| MerchantRelationshipPriceProductTableFilterPlugin | Filters price product transfers. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductAbstractTableConfigurationExpanderPlugin | Expands price product abstract table configuration. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductConcreteTableConfigurationExpanderPlugin | Expands price product concrete table configuration. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductMapperPlugin | Maps merchant relationship data. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | + +
    +src/Pyz/Zed/ProductMerchantPortalGui/ProductMerchantPortalGuiDependencyProvider.php + +```php + + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new MerchantRelationshipPriceProductTableFilterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductAbstractTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductAbstractTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductAbstractTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductConcreteTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductConcreteTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductConcreteTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductMapperPluginInterface> + */ + protected function getPriceProductMapperPlugins(): array + { + return [ + new MerchantRelationshipPriceProductMapperPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Log in to the Merchant Portal with a merchant that has at least one merchant relationship. + +Open any merchant product and make sure that the Prices table contains the "Customer" column for both: abstract and concrete products. + +Make sure that you can filter and sort the price table by Customer column. + +{% endinfo_block %} + +
    +src/Pyz/Service/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPreBuildPriceProductGroupKeyPlugins(): array + { + return [ + new MerchantRelationshipPreBuildPriceProductGroupKeyPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Open any merchant product with a regular price. + +Create a customer-specific price with the same combination of currency and country as the existing price. + +Make sure that there is no validation error. + +{% endinfo_block %} + +
    +src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPriceProductValidatorPlugins(): array + { + return [ + new MerchantRelationshipVolumePriceProductValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductExtension\Dependency\Plugin\PriceProductCollectionDeletePluginInterface> + */ + protected function getPriceProductCollectionDeletePlugins(): array + { + return [ + new MerchantRelationshipPriceProductCollectionDeletePlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that you see the validation error while attempting to set or create the customer price for the volume price. + +Make sure that you can delete the customer price. + +{% endinfo_block %} + + +### 5) Filter out product offer prices + +{% info_block warningBox %} + +This option is only available if you have the [Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) installed. + +{% endinfo_block %} + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | REQUIRED | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|-----------------------------------|---------------|--------------------------------------------------------------------------------| +| PriceProductOfferPriceProductTableFilterPlugin | Maps merchant relationship data. | | | Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui | + +```php +namespace Pyz\Zed\ProductMerchantPortalGui; + +use Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui\PriceProductOfferPriceProductTableFilterPlugin; +use Spryker\Zed\ProductMerchantPortalGui\ProductMerchantPortalGuiDependencyProvider as SprykerProductMerchantPortalGuiDependencyProvider; + +class ProductMerchantPortalGuiDependencyProvider extends SprykerProductMerchantPortalGuiDependencyProvider +{ + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductTableFilterPluginInterface> + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new PriceProductOfferPriceProductTableFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in to the Merchant Portal with a merchant that has at least one merchant relationship and product offer. +2. Open any product that has a product offer. +3. Make sure that the Prices table does not contain product offer prices for both abstract and concrete products. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-feature.md index 2381f4a7875..997b109c4f0 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-feature.md @@ -10,13 +10,13 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Merchant | {{page.version}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1107,12 +1107,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-merchant: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1154,6 +1154,8 @@ merchant_profile.privacy,Data Privacy,en_US merchant_profile.privacy,Datenschutz,de_DE merchant_profile.delivery_time,Delivery Time,en_US merchant_profile.delivery_time,Lieferzeit,de_DE +merchant_profile.shop_merchant_products,Shop Merchant Products,en_US +merchant_profile.shop_merchant_products,Händlerartikel kaufen,de_DE ``` 2. Import data: @@ -1210,7 +1212,7 @@ console frontend:yves:build To verify `SoldByMerchantWidget` has been registered, make sure the **Sold by merchant:** section is displayed on the Product Details pages. This also requires -the [Marketplace Product feature to be installed](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html). +the [Marketplace Product feature to be installed](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html). {% endinfo_block %} @@ -1262,4 +1264,4 @@ Make sure merchant profile data is displayed at `https://mysprykershop.com/de/me | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |--------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Merchant API | ✓ | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.html) | +| Marketplace Merchant API | ✓ | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md index ccf13180247..0d1522c3717 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md @@ -6,9 +6,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | -------------------- | ---------- | ---------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| CMS | {{page.version}} | [Install the Spryker CMS feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| CMS | {{page.release_tag}} | [Install the Spryker CMS feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | ## 1) Create merchant restore password email templates diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md index 6c3fbbc8927..1379e793b57 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | | -------------------- | ------- | -| Spryker Core | {{page.version}} | -| Marketplace Merchant Portal Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | +| Marketplace Merchant Portal Core | {{page.release_tag}} | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md index d771944819e..3e3f89b7e2a 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md @@ -13,17 +13,17 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Spryker Core BO | {{page.version}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Acl | {{page.version}} | [Install the ACL feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core BO | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-merchantportal-core:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchantportal-core:"{{page.release_tag}}" --update-with-dependencies composer require spryker/security-merchant-portal-gui-extension ``` @@ -1967,4 +1967,4 @@ console navigation:build-cache | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |-----------------|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| Merchant Portal | ✓ | [Install the Merchant Portal](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-the-merchant-portal.html) | +| Merchant Portal | ✓ | [Install the Merchant Portal](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-the-merchant-portal.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md new file mode 100644 index 00000000000..3d0a4cc51ad --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md @@ -0,0 +1,211 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Marketplace Merchant Data Import | {{page.release_tag}} | [Install the Marketplace Merchant Data Import feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-data-import:"^2.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|---------------------------------------------------| +| MerchantProductOfferDataImport | vendor/spryker/merchant-product-offer-data-import | + +{% endinfo_block %} + + +### Add file system configuration + +Add file system configuration for storing merchant files: + +**config/Shared/config_default.php** + +```php +$config[MerchantProductOfferDataImportConstants::FILE_SYSTEM_NAME] = 'merchant-product-offer-data-import-files'; +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'merchant-product-offer-data-import-files' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('S3_MERCHANT_FILES_KEY') ?: '', + 'bucket' => getenv('S3_MERCHANT_FILES_BUCKET') ?: '', + 'secret' => getenv('S3_MERCHANT_FILES_SECRET') ?: '', + 'path' => '/merchant-product-offer-data-import-files', + 'version' => 'latest', + 'region' => getenv('AWS_REGION') ?: 'eu-central-1', + ], +]; +``` + +For local development, you can use the following configuration: + +**config/Shared/config_default-docker.dev.php** + +```php +$config[FileSystemConstants::FILESYSTEM_SERVICE]['merchant-product-offer-data-import-files'] = [ + 'sprykerAdapterClass' => LocalFilesystemBuilderPlugin::class, + 'root' => '/data/data/merchant-product-offer-data-import-files', + 'path' => '', +]; +``` + +## Apply database changes and generate transfer objects + +```bash +vendor/bin/console propel:install +vendor/bin/console transfer:generate +``` + +## Add translations + +Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +## Add configuration + +Enable product offer data import by registering the plugins. + +| PLUGIN | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------|----------------------------------------------------------------------------------|------------------------------------------------------------------------------------| +| MerchantCombinedProductOfferDataImportPlugin | Adds a type of merchant product offer data import. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImport | +| MerchantCombinedProductOfferMerchantFileValidationPlugin | Validates required headers in merchant combined product offer data import files. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedMerchantProductOfferFileRequestExpanderPlugin | Expands a data import merchant file collection request. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + 'js/static/merchant-product-offer-data-import/data/files/combined_product_offer.csv', + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new MerchantReferenceDecisionRulePlugin(), + ]); + } + + /** + * @return list<\Spryker\Zed\DiscountExtension\Dependency\Plugin\DiscountableItemCollectorPluginInterface> + */ + protected function getCollectorPlugins(): array + { + return array_merge(parent::getCollectorPlugins(), [ + new MerchantReferenceDiscountableItemCollectorPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `merchant-reference` field. +2. Add a product sold by the merchant you've defined in the discount to cart. + Make sure the discount has been applied. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-feature.md index 1cde810484a..55af898d95e 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-feature.md @@ -8,18 +8,18 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | ------ | ---------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Order Management | {{page.version}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | -| State Machine | {{page.version}} | [State Machine](https://github.com/spryker-feature/state-machine) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Marketplace Shipment | {{page.version}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| State Machine | {{page.release_tag}} | [State Machine](https://github.com/spryker-feature/state-machine) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | ## 1) Install required modules Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-order-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-order-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1107,5 +1107,5 @@ Make sure the following applies: | FEATURE | REQUIRED FOR THE CURRENT FEATURE |INTEGRATION GUIDE | | --- | --- | --- | -| Marketplace Order Management + Order Threshold | |[Install the Marketplace Order Management + Order Threshold feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.html) | -| Marketplace Inventory Management + Order Management | | [Install the Marketplace Inventory Management + Marketplace Order Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | +| Marketplace Order Management + Order Threshold | |[Install the Marketplace Order Management + Order Threshold feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.html) | +| Marketplace Inventory Management + Order Management | | [Install the Marketplace Inventory Management + Marketplace Order Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md index 48e262f8620..ee3954e5063 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | -------------- | --------- | -------------| -| Order Threshold | {{page.version}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Order Threshold | {{page.release_tag}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | ### Install the required modules using Composer diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-approval-process-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-approval-process-feature.md index c3709415687..62ea3822528 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-approval-process-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-approval-process-feature.md @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------------------|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | -| Product Approval Process | {{page.version}} | [Install the Product Approval Process feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Product Approval Process | {{page.release_tag}} | [Install the Product Approval Process feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html) | ### 1) Install the required modules using Сomposer @@ -22,7 +22,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-product-approval-process:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-product-approval-process:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-cart-feature.md index 5d7db78a0de..b49d2ec70e4 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-cart-feature.md @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### 1) Set up transfer objects diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-feature.md index 11473161b9e..caa954b9909 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/marketplace-product-feature-overview.html). +This document describes how to install the [Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/marketplace-product-feature-overview.html). ## Install feature core @@ -12,14 +12,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | -------- | ------------------ | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-product:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-product:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -114,7 +114,7 @@ Generate a new translation cache for Zed: console translator:generate-cache ``` -### 4) Configure export to Redis and Elasticsearch +### 4) Configure export to key-value storage and Elasticsearch Install the following plugins: @@ -123,8 +123,8 @@ Install the following plugins: | Merchant\MerchantProductSearchWritePublisherPlugin | Publishes the product by merchant IDs to ES. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | | MerchantProduct\MerchantProductSearchWritePublisherPlugin | Publishes the product by merchant product abstract IDs to ES. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | | MerchantProductSearchPublisherTriggerPlugin | Allows publishing or republishing merchant product search data manually. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | -| MerchantUpdatePublisherPlugin | Publishes the product by merchant IDs to Redis. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\Merchant | -| MerchantProductWritePublisherPlugin | Publishes the product by merchant product abstract IDs to Redis. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\MerchantProduct | +| MerchantUpdatePublisherPlugin | Publishes the product by merchant IDs to key-value storage. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\Merchant | +| MerchantProductWritePublisherPlugin | Publishes the product by merchant product abstract IDs to key-value storage. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\MerchantProduct | | MerchantProductPublisherTriggerPlugin | Allows publishing or republishing merchant product storage data manually. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher |
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php @@ -604,6 +604,41 @@ Make sure that the imported data is added to the `spy_merchant_product` table. {% endinfo_block %} +### 7) Set up the Back Office products filter by merchants + +Overwrite `ProductManagementConfig::PRODUCT_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES` at the project level and add an `id-merchant` to the array: + +**src/Pyz/Zed/ProductManagement/ProductManagementConfig.php** + +```php + + */ + protected const PRODUCT_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES = ['id-merchant']; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the filter by merchants is available on the `/product-management` page. + +{% endinfo_block %} + ## Install feature frontend Follow the steps below to install the Marketplace Product feature frontend. @@ -818,8 +853,8 @@ Make sure you can filter concrete products by merchant reference while searching | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | - | -| Marketplace Product API | | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | -| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | -| Marketplace Product + Inventory Management | | [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | -| Marketplace Product + Cart | | [Install the Marketplace Product + Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.html) | -| Marketplace Product + Quick Add to Cart | | [Install the Marketplace Product + Quick Add to Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html) | +| Marketplace Product API | | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | +| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | +| Marketplace Product + Inventory Management | | [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | +| Marketplace Product + Cart | | [Install the Marketplace Product + Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.html) | +| Marketplace Product + Quick Add to Cart | | [Install the Marketplace Product + Quick Add to Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md index 7696095db23..0e4d6e23250 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md @@ -10,9 +10,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Inventory Management | {{page.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | ### Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md index 36e1bcd9ccf..0bc320b766c 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | ### Set up behavior @@ -73,8 +73,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | ### Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-cart-feature.md index c6948b641c4..95403307f8f 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-cart-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | -------- | ------------------| -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### Set up behavior @@ -98,8 +98,8 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | ----------- | ---------- | ------------------| -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### Set up behavior @@ -143,4 +143,4 @@ Make sure that the product offer reference (and sold by merchant) is added to th | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | - | -| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | +| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md index 7bee4eeb1fb..16f5346a732 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Checkout | {{page.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-feature.md index a26cf1ffa8a..103cab71faf 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Marketplace Product Offer](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html). +This document describes how to install the [Marketplace Product Offer](/docs/pbc/all/offer-management/latest/marketplace/marketplace-product-offer-feature-overview.html). ## Install feature core @@ -12,14 +12,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-product-offer:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-product-offer:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -136,9 +136,9 @@ Generate a new translation cache for Zed: console translator:generate-cache ``` -### 4) Configure export to Redis and Elasticsearch +### 4) Configure export to key-value storage and Elasticsearch -To configure export to Redis and Elasticsearch, take the following steps: +To configure export to key-value storage and Elasticsearch, take the following steps: #### Set up publisher plugins @@ -316,7 +316,7 @@ class RabbitMqConfig extends SprykerRabbitMqConfig | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |---------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant product offers to sync with Redis storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant product offers to sync with key-value storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/Queue/QueueDependencyProvider.php** @@ -476,10 +476,10 @@ class ProductDependencyProvider extends SprykerProductDependencyProvider Make sure that after setting up the event listeners, the following commands do the following: -- `console sync:data product_concrete_product_offers` exports data from the `spy_product_concrete_product_offers_storage` table to Redis. -- `console sync:data product_offer` exports data from the `spy_product_offer_storage` table to Redis. +- `console sync:data product_concrete_product_offers` exports data from the `spy_product_concrete_product_offers_storage` table to key-value storage. +- `console sync:data product_offer` exports data from the `spy_product_offer_storage` table to key-value storage. -Make sure that when the following entities get updated through the ORM, the corresponding Redis keys have the correct values. +Make sure that when the following entities get updated through the ORM, the corresponding key-value storage keys have the correct values. | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | EXAMPLE EXPECTED DATA FRAGMENT | |---------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------| @@ -1621,6 +1621,42 @@ In the Back Office, make sure that, in Marketplace, the **Offers** menu item is {% endinfo_block %} +### 8) Set up the Back Office products filter by merchants + +Overwrite `ProductOfferGuiConfig::PRODUCT_OFFER_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES` at the project level and add `id-merchant` to the array: + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiConfig.php** + +```php + + */ + protected const PRODUCT_OFFER_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES = [ + 'id-merchant', + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the filter by merchants is available on the `/product-offer-gui/list` page. + +{% endinfo_block %} ## Install feature frontend @@ -1632,8 +1668,8 @@ To start feature integration, integrate the following features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules @@ -1812,10 +1848,10 @@ class ProductSearchWidgetDependencyProvider extends SprykerProductSearchWidgetDe |------------------------------------------------------|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Combined Product Offer Import | | [Combined Product Offer Import integration](/docs/dg/dev/integrate-and-configure/integrate-combined-product-offer-import.html) | | Marketplace Product Offer Prices | | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | -| Marketplace Merchant Portal Product Offer Management | | [Install the Marketplace Product Offer Management feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | -| Marketplace Product Offer API | | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | -| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | -| Marketplace Product Offer + Cart | | [Install the Marketplace Product Offer + Cart feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html) | -| Marketplace Product Offer + Checkout | | [Install the Marketplace Product Offer + Checkout feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.html) | -| Marketplace Product Offer + Prices | | [Install the Marketplace Product Offer + Prices feature](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | -| Marketplace Product Offer + Quick Add to Cart | | [Install the Marketplace Product Offer + Quick Add to Cart feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html) | +| Marketplace Merchant Portal Product Offer Management | | [Install the Marketplace Product Offer Management feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Marketplace Product Offer API | | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | +| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | +| Marketplace Product Offer + Cart | | [Install the Marketplace Product Offer + Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html) | +| Marketplace Product Offer + Checkout | | [Install the Marketplace Product Offer + Checkout feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.html) | +| Marketplace Product Offer + Prices | | [Install the Marketplace Product Offer + Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Product Offer + Quick Add to Cart | | [Install the Marketplace Product Offer + Quick Add to Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-prices-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-prices-feature.md index d37469e8f5b..81e5d6a323e 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-prices-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-prices-feature.md @@ -1,6 +1,6 @@ -This document describes how to install the [Marketplace Product Offer Prices](/docs/pbc/all/price-management/{{page.version}}/marketplace/marketplace-product-offer-prices-feature-overview.html) feature. +This document describes how to install the [Marketplace Product Offer Prices](/docs/pbc/all/price-management/latest/marketplace/marketplace-product-offer-prices-feature-overview.html) feature. ## Install feature core @@ -12,15 +12,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---|---|---| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Prices | {{page.version}} |[Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Prices | {{page.release_tag}} |[Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-product-offer-prices:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-product-offer-prices:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -107,9 +107,9 @@ Generate a new translation cache for Zed: console translator:generate-cache ``` -### 4) Configure export to Redis +### 4) Configure export to the key-value store (Redis or Valkey) -To configure export to Redis, take the steps in the following section: +To configure export to the key-value store (Redis or Valkey), take the steps in the following section: #### Set up event listeners @@ -175,7 +175,7 @@ Configure message processors: | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | |-|-|-|-| -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant product offers to sync with Redis storage, and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant product offers to sync with key-value store (Redis or Valkey), and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/Queue/QueueDependencyProvider.php** @@ -313,9 +313,9 @@ class PriceProductOfferStorageConfig extends SprykerPriceProductOfferStorageConf {% info_block warningBox "Verification" %} -Make sure that after setting up the event listeners, `console sync:data product_concrete_product_offer_price` exports data from the `spy_product_concrete_product_offer_price_storage` table to Redis. +Make sure that after setting up the event listeners, `console sync:data product_concrete_product_offer_price` exports data from the `spy_product_concrete_product_offer_price_storage` table to the key-value store (Redis or Valkey). -Make sure that when the following entities get updated through the ORM, the corresponding Redis keys have the correct values. +Make sure that when the following entities get updated through the ORM, the corresponding the key-value store (Redis or Valkey) keys have the correct values. | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | |-|-| @@ -1179,4 +1179,4 @@ Make sure the following: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | -------------- | -------------------------------- | ----------------- | -| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | +| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..75fa229173a --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md @@ -0,0 +1,81 @@ +This document describes how to install the Marketplace Product Offer + Promotions & Discounts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-discount-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|-----------------------------------------| +| ProductOfferDiscountConnector | vendor/product-offer-discount-connector | + +{% endinfo_block %} + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|--------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------| +| ProductOfferReferenceDecisionRulePlugin | Checks if an item's product offer reference matches the discount's condition. | | Spryker\Zed\ProductOfferDiscountConnector\Communication\Plugin\Discount | +| ProductOfferReferenceDiscountableItemCollectorPlugin | Collects discountable items from the given quote by items' product offer references. | | Spryker\Zed\ProductOfferDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new ProductOfferReferenceDecisionRulePlugin(), + ]); + } + + /** + * @return list<\Spryker\Zed\DiscountExtension\Dependency\Plugin\DiscountableItemCollectorPluginInterface> + */ + protected function getCollectorPlugins(): array + { + return array_merge(parent::getCollectorPlugins(), [ + new ProductOfferReferenceDiscountableItemCollectorPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `product-offer` field. +2. Add a product offer defined in the discount you've created to cart. + Make sure that the discount has been applied to the cart. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md index 0168e6870e9..7792cfba5f9 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Quick Add to Cart | {{page.version}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Quick Add to Cart | {{page.release_tag}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | ### Add translations diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md index 3c658a08884..21ac940e9a0 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Product Offer + Service Points | {{page.version}} | [Install the Product Offer + Service Points feature](/docs/pbc/all/offer-management/{{page.version}}/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Product Offer + Service Points | {{page.release_tag}} | [Install the Product Offer + Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | ### 1) Set up behavior @@ -49,6 +49,6 @@ class ProductOfferServicePointStorageDependencyProvider extends SprykerProductOf {% info_block warningBox "Verification" %} -Make sure that the only product offer service with active and approved merchant are published into Redis. +Make sure that the only product offer service with active and approved merchant are published into the key-value store (Redis or Valkey). {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-cart-feature.md index 5ca12521899..beb9be3005c 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-cart-feature.md @@ -13,8 +13,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Marketplace Product Options| {{page.version}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-checkout-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-checkout-feature.md index b4952eca5ca..70a8cc6fb47 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-checkout-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-checkout-feature.md @@ -13,8 +13,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Marketplace Product Options| {{page.version}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | -| Checkout | {{page.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-feature.md index fd660a3afac..e882d00af3a 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-options-feature.md @@ -1,4 +1,4 @@ -This document describes how to install the [Marketplace Product Options feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/marketplace-product-options-feature-overview.html). +This document describes how to install the [Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/marketplace-product-options-feature-overview.html). ## Install feature core @@ -10,15 +10,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Product Options | {{page.version}} | [Install the Product Options feature](https://spryker.atlassian.net/wiki/spaces/DOCS/pages/903151851/EMPTY+Product+Options+Feature+Integration+-+ongoing) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product Options | {{page.release_tag}} | [Install the Product Options feature](https://spryker.atlassian.net/wiki/spaces/DOCS/pages/903151851/EMPTY+Product+Options+Feature+Integration+-+ongoing) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-product-options:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-product-options:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -384,5 +384,5 @@ Make sure the following is true: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | -------------- | -------------------------------- | ----------------- | -| Marketplace Product Options + Cart | | [Install the Marketplace Product Options + Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.html) | -| Marketplace Product Options + Checkout | | [Install the Marketplace Product Options + Checkout feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.html) | +| Marketplace Product Options + Cart | | [Install the Marketplace Product Options + Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.html) | +| Marketplace Product Options + Checkout | | [Install the Marketplace Product Options + Checkout feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md index d334ad9dc14..596cc973497 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-------------------|-----------------|----------------| -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| -| Quick Add to Cart | {{page.version}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| +| Quick Add to Cart | {{page.release_tag}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | ### Add translations diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md index 508bc22c78a..6d8ac50d5f0 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md @@ -12,16 +12,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | - | - | - | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | -| Promotions & Discounts | {{page.version}} | [Install the Promotions & Discounts feature](https://github.com/spryker-feature/promotions-discounts) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](https://github.com/spryker-feature/promotions-discounts) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-promotions-discounts:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-promotions-discounts:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-return-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-return-management-feature.md index 18c9e848ad5..62467ca98d8 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-return-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-return-management-feature.md @@ -1,7 +1,7 @@ -This document describes how to install the [Marketplace Return Management](/docs/pbc/all/return-management/{{page.version}}/marketplace/marketplace-return-management-feature-overview.html) feature. +This document describes how to install the [Marketplace Return Management](/docs/pbc/all/return-management/latest/marketplace/marketplace-return-management-feature-overview.html) feature. ## Install feature core @@ -13,14 +13,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Return Management | {{page.version}} | [Install the Return Management feature](/docs/pbc/all/return-management/{{page.version}}/base-shop/install-and-upgrade/install-the-return-management-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Return Management | {{page.release_tag}} | [Install the Return Management feature](/docs/pbc/all/return-management/latest/base-shop/install-and-upgrade/install-the-return-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | ### 1) Install required modules using Composer ```bash -composer require spryker-feature/marketplace-return-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-return-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -958,7 +958,7 @@ Follow the steps below to install the Marketplace return management feature fron ### 1) Install required modules using Сomposer ```bash -composer require spryker-feature/marketplace-return-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-return-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -1030,4 +1030,4 @@ console frontend:yves:build | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | - | -| Marketplace Return Management API | | [Install the Marketplace Return Management Glue API](/docs/pbc/all/return-management/{{page.version}}/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.html) | +| Marketplace Return Management API | | [Install the Marketplace Return Management Glue API](/docs/pbc/all/return-management/latest/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-cart-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-cart-feature.md index 1825e73c304..2f6c66e5ae7 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-cart-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-cart-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Shipment | {{page.version}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-feature.html) | -| Cart | {{page.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-checkout-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-checkout-feature.md index d446853dc0b..c978de3a84e 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-checkout-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shipment-checkout-feature.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | ------ | -----------| -| Marketplace Shipment | {{page.version}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-feature.html) | -| Checkout | {{page.version}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shopping-lists-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shopping-lists-feature.md index ae1203059c6..a967a5e5ba1 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shopping-lists-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-shopping-lists-feature.md @@ -10,15 +10,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | -| Shopping Lists | {{page.version}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Shopping Lists | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-shopping-lists:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-shopping-lists:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -119,7 +119,7 @@ Make sure that, in the database, the configured data has been added to the `spy_ {% endinfo_block %} -### 4) Configure export to Redis +### 4) Configure export to the key-value store (Redis or Valkey) Make changes to the `PublisherDependencyProvider`: @@ -507,5 +507,5 @@ Make sure that the following plugins were registered: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | -| -| Shopping Lists | {{page.version}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | -| Install the Marketplace Shopping Lists Glue API | {{page.version}} | | +| Shopping Lists | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | +| Install the Marketplace Shopping Lists Glue API | {{page.release_tag}} | | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-wishlist-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-wishlist-feature.md index 848a5a55814..56e6117645d 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-wishlist-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-marketplace-wishlist-feature.md @@ -11,9 +11,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Marketplace Product + Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Product + Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | ### 1) Install the required modules @@ -21,7 +21,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-wishlist:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-wishlist:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-category-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-category-feature.md index a891859c466..59905b34173 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-category-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-category-feature.md @@ -12,15 +12,15 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | ----- | ---------- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/merchant-category:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/merchant-category:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -312,8 +312,8 @@ Integrate the required features before beginning the integration step. | NAME | VERSION | INSTALLATION GUIDE | | -------- | ------ | -------------- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Merchant | {{page.version}} | [[DEPRECATED\] Merchant Feature Integration](https://github.com/spryker-feature/merchant) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [[DEPRECATED\] Merchant Feature Integration](https://github.com/spryker-feature/merchant) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-opening-hours-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-opening-hours-feature.md index 22fb4a8204d..b47d5c73d11 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-opening-hours-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-opening-hours-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | - | - | - | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules @@ -115,7 +115,7 @@ Generate a new translation cache for Zed: console translator:generate-cache ``` -### 4) Configure export to Redis +### 4) Configure export to the key-value store (Redis or Valkey) This step publishes change events to `spy_merchant_opening_hours_storage` and synchronizes the data to the storage. @@ -159,7 +159,7 @@ class PublisherDependencyProvider extends SprykerPublisherDependencyProvider | PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | | --------------- | --------------- | ------------ | ----------------- | -| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant profile and merchant opening hours messages to sync with Redis storage, and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant profile and merchant opening hours messages to sync with key-value store (Redis or Valkey), and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | **src/Pyz/Zed/Queue/QueueDependencyProvider.php** @@ -272,9 +272,9 @@ class MerchantOpeningHoursStorageConfig extends SprykerMerchantOpeningHoursStora {% info_block warningBox "Verification" %} -1. Make sure that after step 1 the command `console sync:data merchant_opening_hours` exports data from the `spy_merchant_opening_hours_storage` table to Redis. +1. Make sure that after step 1 the command `console sync:data merchant_opening_hours` exports data from the `spy_merchant_opening_hours_storage` table to the key-value store (Redis or Valkey). -2. Make sure that when merchant opening hours entities get created or updated through ORM, it's exported to Redis accordingly. +2. Make sure that when merchant opening hours entities get created or updated through ORM, it's exported to the key-value store (Redis or Valkey) accordingly. | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | | ---------------- | ----------------- | @@ -550,7 +550,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | - | - | - | -| Spryker Core | {{page.version}} | [Spryker Core](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Spryker Core](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | @@ -691,4 +691,4 @@ Make sure that the following widget was registered: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | - | -| Merchant Opening Hours API | | [Install the Merchant Opening Hours Glue API](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.html) | +| Merchant Opening Hours API | | [Install the Merchant Opening Hours Glue API](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-agent-assist-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-agent-assist-feature.md index ce811e49139..e87cb839578 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-agent-assist-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-agent-assist-feature.md @@ -7,12 +7,12 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------| ------- | ------------------ | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | ### 1) Install the required modules ```bash -composer require spryker-feature/marketplace-agent-assist:"{{page.version}}" spryker/agent-dashboard-merchant-portal-gui:"1.0.0" spryker/agent-security-blocker-merchant-portal-gui:"1.1.0" spryker/agent-security-merchant-portal-gui:"1.1.0" --update-with-dependencies +composer require spryker-feature/marketplace-agent-assist:"{{page.release_tag}}" spryker/agent-dashboard-merchant-portal-gui:"1.0.0" spryker/agent-security-blocker-merchant-portal-gui:"1.1.0" spryker/agent-security-merchant-portal-gui:"1.1.0" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -626,27 +626,7 @@ Log in as an agent to the Merchant Portal. Make sure there is the **Merchant Use ## Install feature frontend -1. For installing frontend dependencies, follow [Set up the Merchant Portal](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/set-up-the-merchant-portal.html). - -2. Update glossary keys: - -```csv -agent_security_blocker_merchant_portal_gui.error.account_blocked,"Too many log in attempts from your address. Please wait %minutes% minutes before trying again.",en_US -agent_security_blocker_merchant_portal_gui.error.account_blocked,"Warten Sie bitte %minutes% Minuten, bevor Sie es erneut versuchen.",de_DE -``` - -3. In `tsconfig.mp.json`, add agent related paths to `compilerOptions.paths`: - -```json -"compilerOptions": { - "paths": { - "@mp/agent-dashboard-merchant-portal-gui": [ - "vendor/spryker/spryker/Bundles/AgentDashboardMerchantPortalGui/mp.public-api.ts" - ], - "@mp/agent-security-merchant-portal-gui": [ - "vendor/spryker/spryker/Bundles/AgentSecurityMerchantPortalGui/mp.public-api.ts" - ],... -``` +For installing frontend dependencies, follow [Set up the Merchant Portal](/docs/dg/dev/frontend-development/latest/marketplace/set-up-the-merchant-portal.html). Once everything has been installed, you can access the UI of Merchant Portal Agent Assist at `$[local_domain]/agent-security-merchant-portal-gui/login`. diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-data-import-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-data-import-feature.md new file mode 100644 index 00000000000..644e40f8a35 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-data-import-feature.md @@ -0,0 +1,403 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant Portal Data Import feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-portal-data-import:"dev-master" spryker/user:"^3.29.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|------------------------------------------------| +| DataImportMerchant | vendor/spryker/data-import-merchant | +| DataImportMerchantExtension | vendor/spryker/data-import-merchant-extension | +| DataImportMerchantPortalGui | vendor/spryker/data-import-merchant-portal-gui | +| User | vendor/spryker/user | + +{% endinfo_block %} + +### Generate transfer objects and database changes + +```bash +vendor/bin/console transfer:generate +vendor/bin/console propel:install +``` + +### Add translations + +1. Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +data_import_merchant.validation.importer_type_not_supported,Importer type is not supported.,en_US +data_import_merchant.validation.importer_type_not_supported,Der Importertyp wird nicht unterstützt.,de_DE +data_import_merchant.validation.merchant_not_found,Merchant not found.,en_US +data_import_merchant.validation.merchant_not_found,Handelspartner nicht gefunden.,de_DE +data_import_merchant.validation.user_not_found,User not found.,en_US +data_import_merchant.validation.user_not_found,Benutzer nicht gefunden.,de_DE +data_import_merchant.validation.invalid_file_content_type,Invalid file content type.,en_US +data_import_merchant.validation.invalid_file_content_type,Ungültiger Dateityp.,de_DE +merchant_product_data_import.validation.missing_required_header,The required field %header% is missing.,en_US +merchant_product_data_import.validation.missing_required_header,Das erforderliche Feld %header% fehlt.,de_DE +``` + +2. Import data: + +```yaml +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### Configure navigation + +1. Update Merchant Portal navigation: + + **config/Zed/navigation-main-merchant-portal.xml** + +```xml + + + Data Import + data-import + data-import-merchant-portal-gui + files + index + +``` + +2. Build navigation cache: + +```bash +vendor/bin/console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Merchant Portal, the **Data Import** navigation item is displayed. + +{% endinfo_block %} + +### Add plugins + +Add the following plugins to the dependency providers: + +| PLUGIN | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------| +| DataImportMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds access rules to the Data Import page in Merchant Portal. | Spryker\Zed\DataImportMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| DataImportMerchantFileAclEntityConfigurationExpanderPlugin | Expands provided `AclEntityMetadataConfig` transfer object with data import merchant file composite data. | Spryker\Zed\DataImportMerchant\Communication\Plugin\AclMerchantPortal | +| DataImportMerchantImportConsole | Reads data import merchant files for data import and runs data imports. Updates import status. | Spryker\Zed\DataImportMerchant\Communication\Console | +| UserDataImportMerchantFileExpanderPlugin | Expands `DataImportMerchantFile` transfers with `User` data. | Spryker\Zed\User\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getMerchantAclRuleExpanderPlugins(): array + { + return [ + new DataImportMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new DataImportMerchantFileAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportMerchantImportConsole(), + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchant/DataImportMerchantDependencyProvider.php** + +```php + + */ + protected function getDataImportMerchantFileExpanderPlugins(): array + { + return [ + new UserDataImportMerchantFileExpanderPlugin(), + ]; + } +} +``` + +### Sync ACL entity rules + +1. Add new modules to installer rules: + +**src/Pyz/Zed/Acl/AclConfig.php** + +```php +> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'data-import-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $array = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + + return $installerRules; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Run `console setup:init-db`. +2. Verify that the `data-import-merchant-portal-gui` rule has been added to the `spy_acl_rule` table. + +{% endinfo_block %} + +2. Sync ACL entity rules: + +```bash +vendor/bin/console acl-entity:synchronize +``` + + +3. To integrate the feature without a destructive deployment, add the following command to your normal deployment, such as `config/install/production.yml`: + +```yaml +acl: + acl-entity-synchronize: + command: 'vendor/bin/console acl-entity:synchronize -vvv --no-ansi' + stores: true +``` + +### Add Jenkins configuration + + +Add a job to check if there're new files uploaded for data import by merchants. You can change the schedule according to your project needs. + +**config/Zed/cronjobs/jenkins.php** + +```php +$jobs[] = [ + 'name' => 'data-import-merchant-import', + 'command' => '$PHP_BIN vendor/bin/console data-import-merchant:import', + 'schedule' => '* * * * *', + 'enable' => true, +]; +``` + +### Configure behavior + +1. Define file types to allow uploading and importing in the Merchant Portal: + +**src/Pyz/Zed/DataImportMerchant/DataImportMerchantConfig.php** + +```php + + */ + public function getSupportedContentTypes(): array + { + return [ + 'text/csv', + 'application/csv', + 'text/plain', + ]; + } +} +``` + +2. Define import templates for CSV files: + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + */ + public function getDataImportTemplates(): array + { + return [ + 'CSV template Product' => 'js/static/merchant-product-data-import/data/files/combined_product.csv', + ]; + } +} +``` + +## Install feature frontend + +1. In `tsconfig.mp.json`, update `paths`: + +```json +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "paths": { + "@mp/data-import-merchant-portal-gui": ["vendor/spryker/data-import-merchant-portal-gui/mp.public-api.ts"] + } + } +} +``` + +2. In `project.json`, add the new rule to `assets`, that will copy CSV template files into `public/MerchantPortal/assets/js/static/` folder: + +```json +{ + "targets": { + "build": { + "executor": "@angular-builders/custom-webpack:browser", + "options": { + "assets": [ + { + "glob": "*/data/files/**/*", + "input": "vendor/spryker", + "output": "/static/", + "ignore": ["**/.gitkeep"] + } + ] + } + } + } +} +``` + +This example will copy all files from spryker vendor folders where `data/files/` folder is located. + +3. Build the frontend: + +```bash +npm ci +npm run mp:build +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal go to **Data Import**. Make sure the data import table is displayed and you can initiate a new import. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-feature.md index 1c59418c2d8..da41ffda3e1 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-feature.md @@ -8,7 +8,7 @@ Environment requirements: - Spryker supported PHP version 8.0 - Host for Zed application -Application requirement: [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html). +Application requirement: [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html). ## Install frontend dependencies @@ -35,8 +35,8 @@ Install the needed packages for the Merchant Portal with dependencies. For avail | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | ### Create and connect Merchant Portal users @@ -79,7 +79,7 @@ merchant_key,merchant_reference,merchant_name,registration_number,status,email,i sony-experts,MER000006,Sony Experts,HYY 134306,approved,michele@sony-experts.com,1,/de/merchant/sony-experts,/en/merchant/sony-experts ``` -3. To integrate merchant user data import, follow [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html). +3. To integrate merchant user data import, follow [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html). 4. Import merchant user data using the following example: @@ -381,10 +381,10 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |-----------------------------------------------------------------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Merchant Portal - Marketplace Merchant | | [Install the Merchant Portal - Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.html) | -| Merchant Portal - Marketplace Product | | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | -| Merchant Portal - Marketplace Order Management | | [Install the Merchant Portal - Marketplace Order Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | -| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | | [Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | -| Merchant Portal - Marketplace Product + Inventory Management | | [Merchant Portal - Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.html) | -| Merchant Portal - Marketplace Product Options Management | | [Merchant Portal - Marketplace Product Options Management integration](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.html) | -| Merchant Portal - Marketplace Product + Tax | | [Install the Merchant Portal - Marketplace Product + Tax feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.html) | +| Merchant Portal - Marketplace Merchant | | [Install the Merchant Portal - Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.html) | +| Merchant Portal - Marketplace Product | | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | +| Merchant Portal - Marketplace Order Management | | [Install the Merchant Portal - Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | +| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | | [Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | +| Merchant Portal - Marketplace Product + Inventory Management | | [Merchant Portal - Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.html) | +| Merchant Portal - Marketplace Product Options Management | | [Merchant Portal - Marketplace Product Options Management integration](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.html) | +| Merchant Portal - Marketplace Product + Tax | | [Install the Merchant Portal - Marketplace Product + Tax feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md index fbec51b348b..8b1c5e43ee5 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md @@ -11,8 +11,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | -------------------- | ------- | ------------------ | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md index f92d4f62dfe..f67b15101e7 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md @@ -8,8 +8,8 @@ To start feature integration, install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | --------- | ------------| -| Marketplace Merchant Portal Product Offer Management | {{page.version}} | [Install the Marketplace Merchant Portal Product Offer Management feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | -| Merchant Portal - Marketplace Order Management | {{page.version}} | [Install the Marketplace Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | +| Marketplace Merchant Portal Product Offer Management | {{page.release_tag}} | [Install the Marketplace Merchant Portal Product Offer Management feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Merchant Portal - Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md index 12e4b82018c..c76c0e32494 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md @@ -7,8 +7,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | --------- | ------------| -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Marketplace Order Management | {{page.version}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | ### 1) Install the required modules @@ -103,4 +103,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE |INTEGRATION GUIDE | | --- | --- | --- | -| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | |[Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Marketplace Order Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | +| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | |[Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-feature.md index aa27c5417a3..83cd82d43d0 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-feature.md @@ -12,9 +12,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Marketplace Inventory Management | {{page.version}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | ### 1) Install the required modules @@ -22,7 +22,7 @@ Install the required features: Install the required modules using Composer: ```bash -composer require spryker-feature/marketplace-merchant-portal-product-management:"{{page.version}}" --update-with-dependencies +composer require spryker-feature/marketplace-merchant-portal-product-management:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} @@ -75,7 +75,43 @@ Make sure that you can create a new product in the Merchant Portal and, after cr {% endinfo_block %} -### 4) Configure navigation +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------|---------------|--------------|----------| +| ProductsMerchantDashboardCardPlugin | Adds the products card to the merchant dashboard. | | Spryker\Zed\ProductMerchantPortalGui\Communication\Plugin\DashboardMerchantPortalGui | + +**src/Pyz/Zed/DashboardMerchantPortalGui/DashboardMerchantPortalGuiDependencyProvider.php** + +```php +namespace Pyz\Zed\DashboardMerchantPortalGui; + +use Spryker\Zed\DashboardMerchantPortalGui\DashboardMerchantPortalGuiDependencyProvider as SprykerDashboardMerchantPortalGuiDependencyProvider; +use Spryker\Zed\ProductMerchantPortalGui\Communication\Plugin\DashboardMerchantPortalGui\ProductsMerchantDashboardCardPlugin; + +class DashboardMerchantPortalGuiDependencyProvider extends SprykerDashboardMerchantPortalGuiDependencyProvider +{ + /** + * @return array<\Spryker\Zed\DashboardMerchantPortalGuiExtension\Dependency\Plugin\MerchantDashboardCardPluginInterface> + */ + protected function getDashboardCardPlugins(): array + { + return [ + new ProductsMerchantDashboardCardPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you log in to the Merchant Portal, you can see the Products card on the Dashboard page. + +{% endinfo_block %} + +### 5) Configure navigation 1. Add a marketplace section to `navigation-main-merchant-portal.xml`: diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md index 5699a814054..ba33b2a8fa9 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md @@ -11,8 +11,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Merchant Portal Marketplace Product | master | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | -| Marketplace Inventory Management | master | [Install the Marketplace Inventory Management feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | +| Merchant Portal Marketplace Product | {{page.release_tag}} | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md index ca557c31225..14dbd535033 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md @@ -12,8 +12,8 @@ To start integration, integrate the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product Options| {{page.version}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | -| Merchant Portal Marketplace Order Management | {{page.version}} | [Install the Merchant Portal Marketplace Order Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Merchant Portal Marketplace Order Management | {{page.release_tag}} | [Install the Merchant Portal Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md index 43beb9d0ee4..0cada26921d 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md @@ -11,16 +11,16 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | -| Marketplace Merchant Portal Core | {{page.version}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | -| Tax | {{page.version}} | [Install the Tax feature](https://github.com/spryker-feature/tax) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Tax | {{page.release_tag}} | [Install the Tax feature](https://github.com/spryker-feature/tax) | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker/tax-merchant-portal-gui:"{{page.version}}" --update-with-dependencies +composer require spryker/tax-merchant-portal-gui:"{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-product-data-import-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-product-data-import-feature.md new file mode 100644 index 00000000000..8d693e04a6e --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-portal-product-data-import-feature.md @@ -0,0 +1,295 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Merchant Data Import | {{page.release_tag}} | [Install the Marketplace Merchant Data Import feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-data-import:"^0.5.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|----------------------------------------------| +| MerchantProductDataImport | vendor/spryker/merchant-product-data-import | + +{% endinfo_block %} + + +### Add file system configuration + +Add file system configuration for storing merchant files: + +**config/Shared/config_default.php** + +```php +$config[MerchantProductDataImportConstants::FILE_SYSTEM_NAME] = 'merchant-product-data-import-files'; +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'merchant-product-data-import-files' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('S3_MERCHANT_FILES_KEY') ?: '', + 'bucket' => getenv('S3_MERCHANT_FILES_BUCKET') ?: '', + 'secret' => getenv('S3_MERCHANT_FILES_SECRET') ?: '', + 'path' => '/merchant-product-data-import-files', + 'version' => 'latest', + 'region' => getenv('AWS_REGION') ?: 'eu-central-1', + ], +]; +``` + +For local development, you can use the following configuration: + +**config/Shared/config_default-docker.dev.php** + +```php +$config[FileSystemConstants::FILESYSTEM_SERVICE]['merchant-product-data-import-files'] = [ + 'sprykerAdapterClass' => LocalFilesystemBuilderPlugin::class, + 'root' => '/data/data/merchant-product-data-import-files', + 'path' => '', +]; +``` + +## Generate required transfer objects and database changes + +```bash +vendor/bin/console transfer:generate +vendor/bin/console propel:install +``` + +## Add translations + +Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +## Add configuration + +Enable product data import by registering the plugin. + +| PLUGIN | SPECIFICATION | NAMESPACE | +|----------------------------------------------------------|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| MerchantCombinedProductDataImportPlugin | Adds a type of merchant product data import. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImport | +| MerchantCombinedProductMerchantFileValidationPlugin | Validates required headers in merchant combined product data import files. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedProductMerchantFileRequestExpanderPlugin | Expands a data import merchant file collection request. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedProductPossibleCsvHeaderExpanderPlugin | Expands the CSV headers defined in configuration for merchant combined product data import files. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + 'js/static/merchant-product-data-import/data/files/combined_product.csv', + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + src/Pyz/Zed/MerchantProductDataImport/MerchantProductDataImportConfig.php + + +```php + + +{% info_block warningBox "Verification" %} + +In the Merchant Portal go to **Data Import**. Make sure the following applies: +- **Product** import type is displayed in import types +- You can download a product data import template labeled as **CSV template Product** + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md index ed61ab4ed0d..60633479257 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | ------------------ | ----------- | ----------| -| Merchant Switcher | {{page.version}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| -| Customer Account Management | {{page.version}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Merchant Switcher | {{page.release_tag}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | ### 1) Set up the transfer objects diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-feature.md index 56fddb4c02b..b97b0780322 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ---------- | --------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Product Offer | {{page.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | ### 1) Install the required modules @@ -61,7 +61,7 @@ To start feature integration, overview, and install the necessary features: | NAME | VERSION | | ------------ | -------- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules @@ -296,5 +296,5 @@ Make sure the following widgets were registered: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |--------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Merchant Switcher + Customer Account Management | | [Install the Merchant Switcher + Customer Account Management feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.html) | -| Merchant Switcher + Wishlist | | [Install the Merchant Switcher + Wishlist feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.html) | +| Merchant Switcher + Customer Account Management | | [Install the Merchant Switcher + Customer Account Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.html) | +| Merchant Switcher + Wishlist | | [Install the Merchant Switcher + Wishlist feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.html) | diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-wishlist-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-wishlist-feature.md index cace1159351..039e1597254 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-wishlist-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-merchant-switcher-wishlist-feature.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Merchant Switcher | {{page.version}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| -| Marketplace Wishlist | {{page.version}} | [Install the Marketplace Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Merchant Switcher | {{page.release_tag}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| +| Marketplace Wishlist | {{page.release_tag}} | [Install the Marketplace Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md index b01d68376fb..b2446b36de1 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md @@ -7,8 +7,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Merchant Commission | {{page.version}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | -| Prices | {{site.version}} | [Install the Prices feature](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md index bf8f7542156..f7ea99d347f 100644 --- a/_includes/pbc/all/install-features/202410.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md +++ b/_includes/pbc/all/install-features/202410.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md @@ -6,8 +6,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Marketplace Merchant Commission | {{page.version}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | -| Product | {{page.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | ## 1) Install the required modules diff --git a/_includes/pbc/all/install-features/202410.0/ssp-frontend-templates.md b/_includes/pbc/all/install-features/202410.0/ssp-frontend-templates.md new file mode 100644 index 00000000000..fb4c187cc15 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/ssp-frontend-templates.md @@ -0,0 +1,40 @@ +## Set up frontend templates + +To prevent conflicts with your existing project templates, change or create the following files for SSP features: + + +[`src/Pyz/Yves/CartPage/Theme/default/components/molecules/product-cart-items-list/product-cart-items-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-be7757d682368ef8b6306546d54d41d0eb650dc865fabeddc366a6914bccd74d) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/address-item-form-field-list.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-76f4cad1ff0a953fe0174ace4f4e70e20d2b87a56a8253a224ac3db85517b3c7) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/address-item-form-field-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-be8e8fd1ddf324181d112e1480536cd0516659681bb0b907297b6edbfd733385) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a22a2c2c9e1b24255a3a643095d55019cbccc6d7381f0f6c47e422868423a07c) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form/address-item-form.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e651452fd8b180e34d66c39a6bee497a657a6b9ee82ddd5e242b6fd06be01234) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/validate-next-checkout-step/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-685de07f32e0d3a6e3a25546edb5f95e73bad8a92cc319c068844bbe33fc44aaasf) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/validate-next-checkout-step/validate-next-checkout-step.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e58763a612811b122109b1a3afcccc039fb08d2057a88ec70404fa3c76e09fd3) +[`src/Pyz/Yves/CheckoutPage/Theme/default/templates/page-layout-checkout/page-layout-checkout.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e7f2dca47c3ea2b3193d2d15870dc265f81774ba7df603fc466247a3a16b06a6) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/address/address.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a4f02c98bc8e983f629cc3e532c61a7db7ba9806206b13ce470b24b78b752ba8) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-ec7eac5ee6a918e5d3f7eded3424177bb700eecdb1ca6eadbe73e305c638dead) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/shipment/shipment.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-3c2cef7d110113aaf077cd014832b1949179177f549c04cdee6519b59044ad1c) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/summary/summary.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-df1420128913cf96b8668a5ad8afbd663c3c2625cfe5ac75ee78437c2f331fc1) +[`src/Pyz/Yves/ClickAndCollectPageExample/Theme/default/components/molecules/service-point-selector/service-point-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a8dafd3dc7efd5d6ceb4f3ada6faad73709bd544a6de09249a3debccc68107b0) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/address-form-toggler.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-5b5b794ecebc1b7dd0fdae72c51e33f16377adf7ba174fc082770a925b4a3b93) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/address-form-toggler.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-99ab0c750610723968334b5c15b54181b07137be68aee1ec55f740e294e17fa1) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-11ddabbf6c1635aca0c11e787e9c334dc4e7b6208a036957fc7dad68df6526c1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/service-point-shipment-types/service-point-shipment-types.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a121877cb09b3adf2f9468311f6828f14655d2db035b790b9b818989a46963e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/address-form-items-by-shipment-type/address-form-items-by-shipment-type.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-f37874eccdd9fc18c19ee7888df362c0965e38903474a9b507b2125da341adbe) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/single-address-per-shipment-type/single-address-per-shipment-type.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-d205e0d0f2fe84c935ea96f00e2409f28fd756bd0ae294fa52503c3eb907e9a9) +[`src/Pyz/Yves/ShipmentTypeWidget/Theme/default/components/molecules/shipment-type-toggler/shipment-type-toggler.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-96e8b175f1d8d39479c965bf9211ff0b6f340378dec85ab09e990d13ec897264) +[`src/Pyz/Yves/ServicePointWidget/Theme/default/components/molecules/service-point/service-point.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-9495167856d12408a1da414d94b4987a62bdd6103a54a35f3e31d3f92eeaf01d) + + +[`src/Pyz/Yves/CatalogPage/Theme/default/components/molecules/sort/sort.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-b82014b258cd751113519031eec426902dc873d89a95c80e5027dd99914a8353) +[`src/Pyz/Yves/CatalogPage/Theme/default/components/organisms/filter-section/filter-section.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-fca7e1df593bbf7891861d2a1c43015eff5fbb46a09ec04903d08bd53310cf21) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-finder/asset-finder.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-b37bfae7fc611bc18bfddb693dfd1e57cdc9ffb7cdf83decde931ac3de332c9c) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-finder/asset-finder.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-de4a3705133b93463c213ec2f4b3d482d4dcc4d4b49247631b37ea728fc072e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-list/asset-list.scss`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-052282c197c07f15fb6d729df046f2673c16f6fd0d67c6cff93c4da32dea8ba7) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-list/asset-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-7bf406253ca401be2e5a6754c3a01335f3b02ce10a18edc36ce28fc05a9ff9c8) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-selector/asset-selector.scss`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-4d9a709cd47475a2895e45718177e61dd2ce231dc14ad071c9ab1410e5de3f18) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-selector/asset-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-5205fa69d2249f1eb17be5597c177327dd64232d69def1d9af031b01cad894da) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/service-point-shipment-types/service-point-shipment-types.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a121877cb09b3adf2f9468311f6828f14655d2db035b790b9b818989a46963e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/asset-filter/asset-filter.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-1b433d8e0608a26e14b6127ece330851365d965798eec52e45af9b39f0d38b34) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/item-asset-selector/item-asset-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-6c9d43b28bcafa509a0e6733627587aa4f29e3f6ae34f311f7b7bac780412694) + diff --git a/_includes/pbc/all/install-features/202410.0/ssp-glossary-data-import.md b/_includes/pbc/all/install-features/202410.0/ssp-glossary-data-import.md new file mode 100644 index 00000000000..c79adcc73f5 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/ssp-glossary-data-import.md @@ -0,0 +1,1850 @@ +This document contains glossaries for Self-Service Portal features. + +**data/import/common/common/glossary.csv** + +```csv +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +service_point_cart.checkout.validation.error,Selected service point "%uuid%" is not available for the store "%store_name%",en_US +service_point_cart.checkout.validation.error,Der ausgewählte Servicepunkt "%uuid%" ist für den Shop "%store_name%" nicht verfügbar,de_DE +service_point_widget.validation.error.service_point_not_selected,Please select service point.,en_US +service_point_widget.validation.error.service_point_not_selected,Bitte Servicestelle auswählen.,de_DE +service_point_widget.validation.error.billing_address_not_provided,Please add billing address manually.,en_US +service_point_widget.validation.error.billing_address_not_provided,Bitte fügen Sie die Rechnungsadresse manuell hinzu.,de_DE +service_point_widget.select_location_action,Select a service shop,en_US +service_point_widget.select_location_action,Wählen Sie eine Servicestelle,de_DE +service_point_widget.change_action,Change,en_US +service_point_widget.change_action,Ändern,de_DE +service_point_widget.select_your_store_title,Select your store,en_US +service_point_widget.select_your_store_title,Wählen Sie Ihren Store,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +shipment_type.name.shipment_type_delivery,Delivery,en_US +shipment_type.name.shipment_type_delivery,Lieferung,de_DE +shipment_type.name.shipment_type_pickup,Pickup,en_US +shipment_type.name.shipment_type_pickup,Abholung,de_DE +shipment_type.validation.shipment_type_entity_not_found,A delivery type entity was not found.,en_US +shipment_type.validation.shipment_type_entity_not_found,Lieferart wurde nicht gefunden.,de_DE +shipment_type.validation.shipment_type_key_exists,A delivery type with the same key already exists.,en_US +shipment_type.validation.shipment_type_key_exists,Es existiert bereits eine Lieferart mit dem gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_is_not_unique,At least two delivery types in this request have the same key.,en_US +shipment_type.validation.shipment_type_key_is_not_unique,Mindestens zwei Lieferarten in dieser Anfrage haben den gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_invalid_length,A delivery type key must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_key_invalid_length,Der Lieferart-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.shipment_type_name_invalid_length,A delivery type name must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_name_invalid_length,Der Lieferart-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +shipment_type.validation.store_does_not_exist,Store mit dem Namen ‘%name%’ existiert nicht.,de_DE +shipment_types_rest_api.error.shipment_type_not_available,Selected delivery type "%name%" is not available.,en_US +shipment_types_rest_api.error.shipment_type_not_available,Die ausgewählte Lieferart "%name%" ist nicht verfügbar.,de_DE +merchant_product_offer.view_seller,View Seller,en_US +merchant_product_offer.view_seller,Händler ansehen,de_DE +merchant_product_offer.sold_by,Sold by,en_US +merchant_product_offer.sold_by,Verkauft durch,de_DE +product-offer.info.product-offer-inactive.removed,Inactive item %sku% was removed from your shopping cart.,en_US +product-offer.info.product-offer-inactive.removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +product-offer.info.reference.invalid,Product offer reference not found for product with SKU '%sku%'.,en_US +product-offer.info.reference.invalid,Produktangebotsreferenz für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +product-offer.message.not-active-or-approved,"Product offer not active for product with SKU '%sku%'.",en_US +product-offer.message.not-active-or-approved,"Produktangebot ist inaktiv für Produkt mit SKU '%sku%'.",de_DE +merchant_product_offer_widget.merchant_name,Merchant,en_US +merchant_product_offer_widget.merchant_name,Händler,de_DE +self_service_portal.asset.selector.label,Assign this item to an asset,en_US +self_service_portal.asset.selector.label,Weise dieses Element einem Vermögenswert zu,de_DE +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.selector.search_placeholder,"Search by name, reference or serial number",en_US +self_service_portal.asset.selector.search_placeholder,"Nach Name, Referenz oder Seriennummer suchen",de_DE +self_service_portal.asset.selector.no_assets_available,No assets available,en_US +self_service_portal.asset.selector.no_assets_available,Keine Assets verfügbar,de_DE +self_service_portal.asset.selector.change,Change,en_US +self_service_portal.asset.selector.change,Ändern,de_DE +self_service_portal.asset.compatibility.compatible,Compatible,en_US +self_service_portal.asset.compatibility.compatible,Kompatibel,de_DE +self_service_portal.asset.compatibility.not_compatible,Not Compatible,en_US +self_service_portal.asset.compatibility.not_compatible,Nicht kompatibel,de_DE +cart.shipping,Versand,de_DE +cart.shipping,Shipping,en_US +self_service_portal.asset.assigned_asset,Zugewiesenes Asset,de_DE +self_service_portal.asset.assigned_asset,Assigned Asset,en_US +self_service_portal.asset.name,Asset Name,de_DE +self_service_portal.asset.name,Asset Name,en_US +self_service_portal.asset.serial_number,Asset Seriennummer,de_DE +self_service_portal.asset.serial_number,Asset Serial number,en_US +self_service_portal.asset.compatibility,Asset Kompatibilität,de_DE +self_service_portal.asset.compatibility,Asset Compatibility,en_US +self_service_portal.service.cancellation.error.no_items,No order items provided.,en_US +self_service_portal.service.cancellation.error.no_items,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.cancel_service,Cancel Service,en_US +self_service_portal.service.cancel_service,Dienstleistung stornieren,de_DE +self_service_portal.service.cancellation.success,Service has been successfully cancelled.,en_US +self_service_portal.service.cancellation.success,Die Dienstleistung wurde erfolgreich storniert.,de_DE +self_service_portal.service.cancellation.error,Failed to cancel the service.,en_US +self_service_portal.service.cancellation.error,Die Stornierung der Dienstleistung ist fehlgeschlagen.,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.validation.status_change_failed,The status change failed.,en_US +self_service_portal.service.validation.status_change_failed,Die Statusänderung ist fehlgeschlagen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View Company Files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View Files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View Business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit Dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der Firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der Geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View Dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum Anzeigen des Dashboards,de_DE +self_service_portal.inquiry.success.created,Inquiry has been submitted successfully,en_US +self_service_portal.inquiry.success.created,Anfrage wurde erfolgreich übermittelt,de_DE +self_service_portal.inquiry.type.label,Type,en_US +self_service_portal.inquiry.type.label,Typ,de_DE +self_service_portal.inquiry.access.denied,Access denied.,en_US +self_service_portal.inquiry.access.denied,Zugriff verweigert.,de_DE +self_service_portal.inquiry.success.canceled,Inquiry has been canceled.,en_US +self_service_portal.inquiry.success.canceled,Die Anfrage wurde storniert.,de_DE +self_service_portal.inquiry.cancel,Cancel inquiry,en_US +self_service_portal.inquiry.cancel,Anfrage stornieren,de_DE +self_service_portal.inquiry.create.select_type,Select type,en_US +self_service_portal.inquiry.create.select_type,Typ auswählen,de_DE +self_service_portal.inquiry.status.pending,Pending,en_US +self_service_portal.inquiry.status.pending,Ausstehend,de_DE +self_service_portal.inquiry.status.in_review,In Review,en_US +self_service_portal.inquiry.status.in_review,In Bearbeitung,de_DE +self_service_portal.inquiry.status.approved,Approved,en_US +self_service_portal.inquiry.status.approved,Genehmigt,de_DE +self_service_portal.inquiry.status.rejected,Rejected,en_US +self_service_portal.inquiry.status.rejected,Abgelehnt,de_DE +self_service_portal.inquiry.status.canceled,Canceled,en_US +self_service_portal.inquiry.status.canceled,Storniert,de_DE +self_service_portal.inquiry.subject.label,Subject,en_US +self_service_portal.inquiry.subject.label,Betreff,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Your inquiry %reference% was rejected.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Ihre Anfrage %reference% wurde abgelehnt.,de_DE +self_service_portal.inquiry.description.label,Description,en_US +self_service_portal.inquiry.description.label,Beschreibung,de_DE +self_service_portal.inquiry.files.label,File Upload,en_US +self_service_portal.inquiry.files.label,Datei-Upload,de_DE +self_service_portal.inquiry.type.general,General,en_US +self_service_portal.inquiry.type.general,Allgemein,de_DE +self_service_portal.inquiry.type.order,Order Claim,en_US +self_service_portal.inquiry.type.order,Bestellreklamation,de_DE +customer.account.ssp_inquiries,Inquiries,en_US +customer.account.ssp_inquiries,Anfragen,de_DE +customer.ssp_inquiries.access_level.placeholder,Select access level,en_US +customer.ssp_inquiries.access_level.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or description",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Beschreibung",de_DE +customer.ssp_inquiries.access_level.company_inquiries,Company inquiries,en_US +customer.ssp_inquiries.access_level.company_inquiries,Firmenanfragen,de_DE +customer.ssp_inquiries.search.label,"Search",en_US +customer.ssp_inquiries.search.label,"Suche",de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or subject",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Betreff",de_DE +customer.ssp_inquiries.access_level.label,Access Level,en_US +customer.ssp_inquiries.access_level.label,Zugriffsebene,de_DE +customer.ssp_inquiries.access_level.my_inquiries,My inquiries,en_US +customer.ssp_inquiries.access_level.my_inquiries,Meine anfragen,de_DE +customer.self_service_portal.inquiry.create_ssp_inquiry,Create inquiry,en_US +customer.self_service_portal.inquiry.create_ssp_inquiry,Anfrage stellen,de_DE +self_service_portal.inquiry.validation.type.invalid,Invalid inquiry type.,en_US +self_service_portal.inquiry.validation.type.invalid,Ungültiger Anfragetyp.,de_DE +self_service_portal.inquiry.list.widget.title,Inquiries,en_US +self_service_portal.inquiry.list.widget.title,Anfragen,de_DE +customer.self_service_portal.inquiry.list,Inquiries,en_US +customer.self_service_portal.inquiry.list,Anfragen,de_DE +self_service_portal.inquiry.file.file_not_found,File not found,en_US +self_service_portal.inquiry.file.file_not_found,Datei wurde nicht gefunden,de_DE +self_service_portal.inquiry.file.mime_type.error,Invalid file format.,en_US +self_service_portal.inquiry.file.mime_type.error,Ungültiger Dateiformat.,de_DE +self_service_portal.inquiry.validation.company_user.not_set,Company user is missing.,en_US +self_service_portal.inquiry.validation.company_user.not_set,Firmenbenutzer fehlt.,de_DE +self_service_portal.inquiry.validation.type.not_set,Inquiry type is missing.,en_US +self_service_portal.inquiry.validation.type.not_set,Anfragetyp fehlt.,de_DE +self_service_portal.inquiry.validation.subject.not_set,Inquiry subject is missing.,en_US +self_service_portal.inquiry.validation.subject.not_set,Betreff der Anfrage fehlt.,de_DE +self_service_portal.inquiry.validation.description.not_set,Inquiry description is missing.,en_US +self_service_portal.inquiry.validation.description.not_set,Anfragebeschreibung fehlt.,de_DE +self_service_portal.inquiry.error.file.format.invalid,An array of files is expected.,en_US +self_service_portal.inquiry.error.file.format.invalid,Ein Array von Dateien wurde erwartet.,de_DE +self_service_portal.inquiry.error.file.count.invalid,Invalid number of files. Maximum number of files: {{ limit }},en_US +self_service_portal.inquiry.error.file.count.invalid,Ungültige Dateianzahl. Maximale Anzahl von Dateien: {{ limit }},de_DE +self_service_portal.inquiry.error.file.size.invalid,"Invalid total file size. The maximum allowed size for all files is %maxSize%, but %size% was uploaded.",en_US +self_service_portal.inquiry.error.file.size.invalid,"Ungültige Gesamtdateigröße. Die maximal zulässige Größe für alle Dateien beträgt %maxSize%, aber es wurde %size% hochgeladen.",de_DE +self_service_portal.inquiry.error.status_change,The status change failed.,en_US +self_service_portal.inquiry.error.status_change,Die Statusänderung ist fehlgeschlagen.,de_DE +self_service_portal.inquiry.submit.button,Submit inquiry,en_US +self_service_portal.inquiry.submit.button,Anfrage senden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +customer.self_service_portal.inquiry.all_ssp_inquiries,Inquiries,en_US +customer.self_service_portal.inquiry.all_ssp_inquiries,Anfragen,de_DE +customer.self_service_portal.inquiry.list.reference,Reference,en_US +customer.self_service_portal.inquiry.list.reference,Referenz,de_DE +customer.self_service_portal.inquiry.list.type,Type,en_US +customer.self_service_portal.inquiry.list.type,Typ,de_DE +customer.self_service_portal.inquiry.list.subject,Subject,en_US +customer.self_service_portal.inquiry.list.subject,Betreff,de_DE +customer.self_service_portal.inquiry.list.owner,Owner,en_US +customer.self_service_portal.inquiry.list.owner,Eingentümer,de_DE +customer.self_service_portal.inquiry.list.date_created,Date,en_US +customer.self_service_portal.inquiry.list.date_created,Datum,de_DE +customer.self_service_portal.inquiry.list.status,Status,en_US +customer.self_service_portal.inquiry.list.status,Status,de_DE +self_service_portal.inquiry.list.filter.type.placeholder,Select type,en_US +self_service_portal.inquiry.list.filter.type.placeholder,Typ auswählen,de_DE +self_service_portal.inquiry.list.filter.type.label,Type,en_US +self_service_portal.inquiry.list.filter.type.label,Typ,de_DE +self_service_portal.inquiry.list.filter.status.placeholder,Select status,en_US +self_service_portal.inquiry.list.filter.status.placeholder,Status auswählen,de_DE +self_service_portal.inquiry.list.filter.status.label,Status,en_US +self_service_portal.inquiry.list.filter.status.label,Status,de_DE +customer.account.no_ssp_inquiries,You do not have inquiries yet.,en_US +customer.account.no_ssp_inquiries,Sie haben noch keine Anfragen.,de_DE +customer.self_service_portal.inquiry.view_ssp_inquiry,View,en_US +customer.self_service_portal.inquiry.view_ssp_inquiry,Ansehen,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen angegeben.,de_DE +self_service_portal.service.validation.order_not_found,Order with ID %id% not found.,en_US +self_service_portal.service.validation.order_not_found,Bestellung mit ID %id% nicht gefunden.,de_DE +self_service_portal.service.validation.no_payment_methods_found,No payment methods found for this order.,en_US +self_service_portal.service.validation.no_payment_methods_found,Keine Zahlungsmethoden für diese Bestellung gefunden.,de_DE +self_service_portal.service.list.search_placeholder,Search,en_US +self_service_portal.service.list.search_placeholder,Search,de_DE +self_service_portal.service.list.search_button,Search,en_US +self_service_portal.service.list.search_button,Suchen,de_DE +self_service_portal.service.list.title,Services,en_US +self_service_portal.service.list.title,Services,de_DE +self_service_portal.service.list.order_reference,Order Reference,en_US +self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +self_service_portal.service.list.product_name,Service Name,en_US +self_service_portal.service.list.product_name,Servicename,de_DE +self_service_portal.service.list.service_sku,SKU,en_US +self_service_portal.service.list.service_sku,SKU,de_DE +self_service_portal.service.list.scheduled_at,Time and Date,en_US +self_service_portal.service.list.scheduled_at,Zeit und Datum,de_DE +self_service_portal.service.list.created_at,Created At,en_US +self_service_portal.service.list.created_at,Erstellt am,de_DE +self_service_portal.service.list.empty,You don't have any services yet.,en_US +self_service_portal.service.list.empty,Sie haben noch keine Services.,de_DE +self_service_portal.service.list.widget.title,Services,en_US +self_service_portal.service.list.widget.title,Services,de_DE +self_service_portal.service.list.state,State,en_US +self_service_portal.service.list.state,Status,de_DE +self_service_portal.service.list.reset_button,Reset,en_US +self_service_portal.service.list.reset_button,Zurücksetzen,de_DE +self_service_portal.service.list.my_services,My Services,en_US +self_service_portal.service.list.my_services,Meine Services,de_DE +self_service_portal.service.list.business_unit_services,Business Unit Services,en_US +self_service_portal.service.list.business_unit_services,Geschäftsbereich Services,de_DE +self_service_portal.service.list.company_services,Company Services,en_US +self_service_portal.service.list.company_services,Firmenservices,de_DE +self_service_portal.service.update_scheduled_time,Change scheduled time,en_US +self_service_portal.service.update_scheduled_time,Geplante Zeit ändern,de_DE +self_service_portal.service.update_scheduled_time.service.sku,SKU,en_US +self_service_portal.service.update_scheduled_time.service.sku,SKU,de_DE +self_service_portal.service.update_scheduled_time.service.name,Name,en_US +self_service_portal.service.update_scheduled_time.service.name,Name,de_DE +self_service_portal.service.update_scheduled_time.service.quantity,Quantity,en_US +self_service_portal.service.update_scheduled_time.service.quantity,Menge,de_DE +self_service_portal.service.update_scheduled_time.service.state,State,en_US +self_service_portal.service.update_scheduled_time.service.state,Status,de_DE +self_service_portal.service.update_scheduled_time.title,Update Service Scheduled Time,en_US +self_service_portal.service.update_scheduled_time.title,Geplante Servicezeit aktualisieren,de_DE +self_service_portal.service.update_scheduled_time.success,Order item rescheduled successfully.,en_US +self_service_portal.service.update_scheduled_time.success,Bestellposition erfolgreich neu geplant.,de_DE +self_service_portal.service.update_scheduled_time.order_item_details,Order Item Details,en_US +self_service_portal.service.update_scheduled_time.order_item_details,Bestellpositionsdetails,de_DE +self_service_portal.service.update_scheduled_time.button.save,Save,en_US +self_service_portal.service.update_scheduled_time.button.save,Speichern,de_DE +self_service_portal.service.update_scheduled_time.button.cancel,Cancel,en_US +self_service_portal.service.update_scheduled_time.button.cancel,Abbrechen,de_DE +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Order item with uuid %uuid% not found.,en_US +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Bestellposition mit UUID %uuid% nicht gefunden.,de_DE +self_service_portal.service.list.field.business_unit,Access Level,en_US +self_service_portal.service.list.field.business_unit,Zugriffsebene,de_DE +self_service_portal.service.list.button.view,View,en_US +self_service_portal.service.list.button.view,Ansehen,de_DE +self_service_portal.company_file.table.header.file_reference,Reference,en_US +self_service_portal.company_file.table.header.file_reference,Referenz,de_DE +self_service_portal.company_file.table.header.file_name,File Name,en_US +self_service_portal.company_file.table.header.file_name,Dateiname,de_DE +self_service_portal.company_file.table.header.file_type,File Format,en_US +self_service_portal.company_file.table.header.file_type,Dateiformat,de_DE +self_service_portal.company_file.table.header.file_created_at,Date Added,en_US +self_service_portal.company_file.table.header.file_created_at,Datum hinzugefügt,de_DE +self_service_portal.company_file.table.header.file_size,Size,en_US +self_service_portal.company_file.table.header.file_size,Größe,de_DE +self_service_portal.company_file.table.header.actions,Actions,en_US +self_service_portal.company_file.table.header.actions,Aktionen,de_DE +self_service_portal.company_file.table.actions.download,Download,en_US +self_service_portal.company_file.table.actions.download,Herunterladen,de_DE +self_service_portal.company_file,Files,en_US +self_service_portal.company_file,Dateien,de_DE +self_service_portal.company_file.view.empty,You do not have any files yet.,en_US +self_service_portal.company_file.view.empty,Sie haben noch keine Dateien.,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Select type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Typ auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.label,Type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.label,Typ,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Date From,en_US +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Datum von,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Date To,en_US +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Datum bis,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Select access level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Zugriffsebene auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.search.label,Search,en_US +self_service_portal.company_file.file_search_filter_form.field.search.label,Suche,de_DE +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Reset All,en_US +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +self_service_portal.company_file.file_search_filter_form.label.active_filters,Active Filters:,en_US +self_service_portal.company_file.file_search_filter_form.label.active_filters,Aktive Filter:,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.ssp_inquiries.date_from,Date from,en_US +customer.ssp_inquiries.date_from,Datum von,de_DE +customer.ssp_inquiries.date_to,Date to,en_US +customer.ssp_inquiries.date_to,Datum bis,de_DE +customer.account.ssp_inquiry.details,Inquiry,en_US +customer.account.ssp_inquiry.details,Anfrage,de_DE +customer.ssp_inquiry.details.reference,Reference,en_US +customer.ssp_inquiry.details.reference,Referenz,de_DE +customer.ssp_inquiry.details.date,Date,en_US +customer.ssp_inquiry.details.date,Datum,de_DE +customer.ssp_inquiry.details.status,Status,en_US +customer.ssp_inquiry.details.status,Status,de_DE +customer.ssp_inquiry.details,Inquiry Details,en_US +customer.ssp_inquiry.details,Anfragedetails,de_DE +customer.ssp_inquiry.details.type,Type,en_US +customer.ssp_inquiry.details.type,Typ,de_DE +customer.ssp_inquiry.details.subject,Subject,en_US +customer.ssp_inquiry.details.subject,Betreff,de_DE +customer.ssp_inquiry.details.description,Description,en_US +customer.ssp_inquiry.details.description,Beschreibung,de_DE +customer.ssp_inquiry.owner,Owner,en_US +customer.ssp_inquiry.owner,Eigentümer,de_DE +customer.ssp_inquiry.details.first_name,First Name,en_US +customer.ssp_inquiry.details.first_name,Vorname,de_DE +customer.ssp_inquiry.details.last_name,Last Name,en_US +customer.ssp_inquiry.details.last_name,Nachname,de_DE +customer.ssp_inquiry.details.email,E-mail,en_US +customer.ssp_inquiry.details.email,E-Mail,de_DE +customer.ssp_inquiry.details.company,Company / Business Unit,en_US +customer.ssp_inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.ssp_inquiry.details.file.name,File name,en_US +customer.ssp_inquiry.details.file.name,Dateiname,de_DE +customer.ssp_inquiry.details.file.size,Size,en_US +customer.ssp_inquiry.details.file.size,Größe,de_DE +customer.ssp_inquiry.details.file.extension,Type,en_US +customer.ssp_inquiry.details.file.extension,Typ,de_DE +customer.ssp_inquiry.details.file.download,Download,en_US +customer.ssp_inquiry.details.file.download,Herunterladen,de_DE +ssp_inquiry.file.unavailable,File is not available,en_US +ssp_inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.details.files,Files,en_US +customer.ssp_inquiry.details.files,Dateien,de_DE +ssp_inquiry.order.create_ssp_inquiry,Inquiry,en_US +ssp_inquiry.order.create_ssp_inquiry,Reklamation,de_DE +ssp_inquiry.order_reference.label,Order Reference,en_US +ssp_inquiry.order_reference.label,Bestellnummer,de_DE +customer.ssp_inquiry.details.order_reference,Order Reference,en_US +customer.ssp_inquiry.details.order_reference,Bestellnummer,de_DE +ssp_inquiry.error.company_user_not_found,Company user not found.,en_US +ssp_inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +ssp_inquiry.type.general-question,General Question,en_US +ssp_inquiry.type.general-question,Allgemeine Frage,de_DE +ssp_inquiry.type.general-ssp_inquiry,General Inquiry,en_US +ssp_inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +ssp_dashboard.index.widget.title,Dashboard,en_US +ssp_dashboard.index.widget.title,Dashboard,de_DE +ssp_dashboard.general.view_all,View All,en_US +ssp_dashboard.general.view_all,Alle anzeigen,de_DE +ssp_dashboard.general.welcome,"Welcome, %name%",en_US +ssp_dashboard.general.welcome,"Willkommen, %name%",de_DE +ssp_dashboard.overview.title,My Overview,en_US +ssp_dashboard.overview.title,Meine Übersicht,de_DE +ssp_dashboard.general.ssp_assets,Assets,en_US +ssp_dashboard.general.ssp_assets,Assets,de_DE +ssp_dashboard.general.inquiries,Pending Inquiries,en_US +ssp_dashboard.general.inquiries,Ausstehende Ansprüche,de_DE +ssp_dashboard.general.services,Planned Services,en_US +ssp_dashboard.general.services,Geplante Services,de_DE +ssp_dashboard.representatives.title,Service Representatives,en_US +ssp_dashboard.representatives.title,Mitarbeiter des Kundendienstes,de_DE +ssp_dashboard.general.no_data,There is no data yet,en_US +ssp_dashboard.general.no_data,Es gibt noch keine Daten,de_DE +ssp_dashboard.general.news,News & Events,en_US +ssp_dashboard.general.news,Nachrichten & Veranstaltungen,de_DE +dashboard.access.denied,Access denied.,en_US +dashboard.access.denied,Zugriff verweigert.,de_DE +customer.account.files,Files,en_US +customer.account.files,Dateien,de_DE +customer.account.no_files,No Files,en_US +customer.account.no_files,Keine Dateien,de_DE +customer.account.no_ssp_booked_services,You do not have booked services yet.,en_US +customer.account.no_ssp_booked_services,Sie haben noch keine gebuchten Services.,de_DE +dashboard.overview.not_applicable,n/a,en_US +dashboard.overview.not_applicable,n/a,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +product.filter.product-class-names,Product Class,en_US +product.filter.product-class-names,Produktklasse,de_DE +customer.account.ssp_services,Services,en_US +customer.account.ssp_services,Services,de_DE +customer.account.no_ssp_services,There are no services at the moment,en_US +customer.account.no_ssp_services,Es gibt derzeit keine Services,de_DE +customer.ssp_service.order.reference,Order Reference,en_US +customer.ssp_service.order.reference,Bestellreferenz,de_DE +customer.ssp_service.customer,Customer,en_US +customer.ssp_service.customer,Kunde,de_DE +customer.ssp_service.company,Company,en_US +customer.ssp_service.company,Unternehmen,de_DE +customer.ssp_service.service,Service,en_US +customer.ssp_service.service,Service,de_DE +customer.ssp_service.created_at,Date created,en_US +customer.ssp_service.created_at,Erstellt am,de_DE +customer.ssp_service.status,Status,en_US +customer.ssp_service.status,Status,de_DE +customer.ssp_service.scheduled_at,Time and Date,en_US +customer.ssp_service.scheduled_at,Zeit und Datum,de_DE +customer.ssp_service.actions,Actions,en_US +customer.ssp_service.actions,Aktionen,de_DE +customer.ssp_service.view_ssp_service,View,en_US +customer.ssp_service.view_ssp_service,Anzeigen,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +ssp_inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +ssp_asset.validation.cannot_delete_own_assignment,You cannot delete your own assignment.,en_US +ssp_asset.validation.cannot_delete_own_assignment,Sie können Ihre eigene Zuweisung nicht löschen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View company files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View my files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Meine dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum anzeigen des dashboards,de_DE +permission.name.ViewCompanySspAssetPermissionPlugin,View company assets,en_US +permission.name.ViewCompanySspAssetPermissionPlugin,Firmen-assets anzeigen,de_DE +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,View business unit assets,en_US +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +permission.name.CreateSspAssetPermissionPlugin,Create assets,en_US +permission.name.CreateSspAssetPermissionPlugin,Assets erstellen,de_DE +permission.name.UpdateSspAssetPermissionPlugin,Update assets,en_US +permission.name.UpdateSspAssetPermissionPlugin,Assets aktualisieren,de_DE +permission.name.UnassignSspAssetPermissionPlugin,Unassign business unit ssp assets,en_US +permission.name.UnassignSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +ssp_dashboard.overview.not_applicable,n/a,en_US +ssp_dashboard.overview.not_applicable,n/a,de_DE +self_service_portal.asset.form.image.description,"Max up to %size%. Allowed file formats %format%",en_US +self_service_portal.asset.form.image.description,"Maximal bis zu %size%. Erlaubte Dateiformate: %format%",de_DE +self_service_portal.asset.validation.name.not_set,Asset name must be provided,en_US +self_service_portal.asset.validation.name.not_set,Der Name des Assets muss angegeben werden,de_DE +self_service_portal.asset.validation.business_unit.not_set,Business unit must be provided,en_US +self_service_portal.asset.validation.business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.company_business_unit.not_set,Company business unit must be provided,en_US +self_service_portal.asset.validation.company_business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.assets_not_provided,No assets were provided,en_US +self_service_portal.asset.validation.assets_not_provided,Es wurden keine Assets bereitgestellt,de_DE +self_service_portal.asset.validation.id_not_provided,Asset ID was not provided,en_US +self_service_portal.asset.validation.id_not_provided,Asset-ID wurde nicht angegeben,de_DE +self_service_portal.asset.validation.not_found,Asset was not found,en_US +self_service_portal.asset.validation.not_found,Asset wurde nicht gefunden,de_DE +self_service_portal.asset.list.widget.title,Assets,en_US +self_service_portal.asset.list.widget.title,Assets,de_DE +self_service_portal.asset.create.title,Create Asset,en_US +self_service_portal.asset.create.title,Asset erstellen,de_DE +self_service_portal.asset.list.title,Assets,en_US +self_service_portal.asset.list.title,Assets,de_DE +self_service_portal.asset.submit.button,Save,en_US +self_service_portal.asset.submit.button,Speichern,de_DE +self_service_portal.asset.success.created,Asset has been successfully created,en_US +self_service_portal.asset.success.created,Asset wurde erfolgreich erstellt,de_DE +self_service_portal.asset.error.create,Asset creation failed,en_US +self_service_portal.asset.error.create,Fehler beim Erstellen des Assets,de_DE +self_service_portal.asset.form.name,Name,en_US +self_service_portal.asset.form.name,Name,de_DE +self_service_portal.asset.form.serial_number,Serial number,en_US +self_service_portal.asset.form.serial_number,Seriennummer,de_DE +self_service_portal.asset.form.note,Note,en_US +self_service_portal.asset.form.note,Notiz,de_DE +self_service_portal.asset.form.image,Image,en_US +self_service_portal.asset.form.image,Bild,de_DE +self_service_portal.asset.form.image.mime_type_error,Invalid file format. Allowed file formats: {{ types }},en_US +self_service_portal.asset.form.image.mime_type_error,Ungültiges Dateiformat. Erlaubte Dateiformate: {{ types }},de_DE +self_service_portal.asset.form.external_image_url,External Image URL,en_US +self_service_portal.asset.form.external_image_url,Externe Bild-URL,de_DE +self_service_portal.asset.form.external_image_url.note,"Note: If no image is uploaded locally, the asset will use the image from the provided URL.",en_US +self_service_portal.asset.form.external_image_url.note,"Hinweis: Wenn kein Bild lokal hochgeladen wird, verwendet das Asset standardmäßig das Bild von der angegebenen URL.",de_DE +self_service_portal.asset.update.title,Edit Asset,en_US +self_service_portal.asset.update.title,Asset bearbeiten,de_DE +self_service_portal.asset.details.reference,Asset Reference,en_US +self_service_portal.asset.details.reference,Asset-Referenz,de_DE +self_service_portal.asset.cancel.button,Cancel,en_US +self_service_portal.asset.cancel.button,Abbrechen,de_DE +self_service_portal.asset.details.created_date,Date added,en_US +self_service_portal.asset.details.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details.owner,Business unit owner,en_US +self_service_portal.asset.details.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details.confirm_delete_title,Confirm delete,en_US +self_service_portal.asset.details.confirm_delete_title,Löschen bestätigen,de_DE +self_service_portal.asset.details.confirm_delete_body,Are you sure you want to delete the image?,en_US +self_service_portal.asset.details.confirm_delete_body,"Sind Sie sicher, dass Sie das Bild löschen möchten?",de_DE +self_service_portal.asset.success.updated,Asset has been successfully updated,en_US +self_service_portal.asset.success.updated,Asset wurde erfolgreich aktualisiert,de_DE +self_service_portal.asset.image.requirements,Upload image requirements,en_US +self_service_portal.asset.image.requirements,Anforderungen für das Hochladen von Bildern,de_DE +self_service_portal.asset.image.upload,Upload Image,en_US +self_service_portal.asset.image.upload,Bild hochladen,de_DE +self_service_portal.asset.details_page.search_service,Search services,en_US +self_service_portal.asset.details_page.search_service,Services suchen,de_DE +self_service_portal.asset.details_page.name,Name,en_US +self_service_portal.asset.details_page.name,Name,de_DE +self_service_portal.asset.details_page.serial_number,Serial number,en_US +self_service_portal.asset.details_page.serial_number,Seriennummer,de_DE +self_service_portal.asset.details_page.note,Note,en_US +self_service_portal.asset.details_page.note,Notiz,de_DE +self_service_portal.asset.details_page.reference,Reference,en_US +self_service_portal.asset.details_page.reference,Referenz,de_DE +self_service_portal.asset.details_page.confirm_unassign_title,Confirm delete,en_US +self_service_portal.asset.details_page.confirm_unassign_title,Löschen bestätigen,de_DE +self_service_portal.asset.details_page.confirm_unassign_body,Unassign this asset from the business unit. Do you want to proceed?,en_US +self_service_portal.asset.details_page.confirm_unassign_body,Möchten Sie dieses Asset wirklich von der Geschäftseinheit entfernen?,de_DE +self_service_portal.asset.details_page.confirm_unassign_in_review,Asset is in Review. You can delete it after it is approved.,en_US +self_service_portal.asset.details_page.confirm_unassign_in_review,"Die Ressource wird überprüft. Du kannst sie löschen, nachdem sie genehmigt wurde.",de_DE +self_service_portal.asset.details_page.unassign,Unassign,en_US +self_service_portal.asset.details_page.unassign,Zuweisung aufheben,de_DE +self_service_portal.inquiry.type.ssp_asset,Asset,en_US +self_service_portal.inquiry.type.ssp_asset,Asset,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset Reference,en_US +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.ssp_asset.details,Asset Details,en_US +customer.self_service_portal.inquiry.ssp_asset.details,Asset-Details,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset not available,en_US +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset nicht verfügbar,de_DE +self_service_portal.asset.error.reference_not_found,Asset reference not found,en_US +self_service_portal.asset.error.reference_not_found,Asset-Referenz nicht gefunden,de_DE +self_service_portal.asset.error.company_user_not_found,Company user not found,en_US +self_service_portal.asset.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +self_service_portal.inquiry.ssp_asset_reference.label,Asset Reference,en_US +self_service_portal.inquiry.ssp_asset_reference.label,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset Name,en_US +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset-Name,de_DE +customer.account.ssp_assets,My Assets,en_US +customer.account.ssp_assets,Meine Assets,de_DE +customer.account.ssp_asset,Asset,en_US +customer.account.ssp_asset,Asset,de_DE +customer.ssp_asset.list.reference,Reference,en_US +customer.ssp_asset.list.reference,Referenz,de_DE +customer.ssp_asset.list.name,Asset Name,en_US +customer.ssp_asset.list.name,Asset-Name,de_DE +customer.ssp_asset.list.serial_number,Serial number,en_US +customer.ssp_asset.list.serial_number,Seriennummer,de_DE +customer.ssp_asset.list.date_added,Date added,en_US +customer.ssp_asset.list.date_added,Hinzugefügt am,de_DE +customer.ssp_asset.view_ssp_asset,View,en_US +customer.ssp_asset.view_ssp_asset,Anzeigen,de_DE +customer.ssp_asset.create.button,Create asset,en_US +customer.ssp_asset.create.button,Asset erstellen,de_DE +customer.account.no_ssp_assets,You do not have any assets yet.,en_US +customer.account.no_ssp_assets,Sie haben noch keine Assets.,de_DE +company.error.company_user_not_found,Company user not found,en_US +company.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.ssp_asset.list.business_unit,Business Unit,en_US +customer.ssp_asset.list.business_unit,Geschäftseinheit,de_DE +customer.ssp_asset.list.image,Image,en_US +customer.ssp_asset.list.image,Bild,de_DE +self_service_portal.asset.details_page.created_date,Date added,en_US +self_service_portal.asset.details_page.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details_page.owner,Business unit owner,en_US +self_service_portal.asset.details_page.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details_page.undefined,Undefined,en_US +self_service_portal.asset.details_page.undefined,Nicht definiert,de_DE +self_service_portal.asset.success.business_unit_relation_updated,Business unit has been successfully unassigned from the asset,en_US +self_service_portal.asset.success.business_unit_relation_updated,Die Zuordnung der Geschäftseinheit zum Asset wurde erfolgreich aufgehoben,de_DE +self_service_portal.asset.details_page.status,Status,en_US +self_service_portal.asset.details_page.status,Status,de_DE +self_service_portal.asset.details.status,Status,en_US +self_service_portal.asset.details.status,Status,de_DE +self_service_portal.asset.status.pending,Pending,en_US +self_service_portal.asset.status.pending,Ausstehend,de_DE +self_service_portal.asset.status.approved,Approved,en_US +self_service_portal.asset.status.approved,Genehmigt,de_DE +self_service_portal.asset.status.in_review,In Review,en_US +self_service_portal.asset.status.in_review,In Überprüfung,de_DE +self_service_portal.asset.status.declined,Declined,en_US +self_service_portal.asset.status.declined,Abgelehnt,de_DE +customer.ssp_asset.list.business_unit,Business Unit Owner,en_US +customer.ssp_asset.list.business_unit,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.information.assigned_bu,Assigned business units,en_US +self_service_portal.asset.information.assigned_bu,Zugewiesene Geschäftseinheiten,de_DE +customer.ssp_asset.filter.scope,Access level,en_US +customer.ssp_asset.filter.scope,Zugriffsebene,de_DE +customer.ssp_asset.filter.scope.placeholder,Select access level,en_US +customer.ssp_asset.filter.scope.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_asset.filter_by_business_unit,My business unit assets,en_US +customer.ssp_asset.filter_by_business_unit,Assets meiner Geschäftseinheit,de_DE +customer.ssp_asset.filter_by_company,Company Assets,en_US +customer.ssp_asset.filter_by_company,Firmenassets,de_DE +self_service_portal.asset.error.cannot_unassign_own_business_unit,You cannot unassign your own business unit from the asset,en_US +self_service_portal.asset.error.cannot_unassign_own_business_unit,Sie können Ihre eigene Geschäftseinheit nicht vom Asset trennen,de_DE +self_service_portal.search_filter_form.label.active_filters,Active filters:,en_US +self_service_portal.search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.search_filter_form.field.reset_all.label,Reset all,en_US +self_service_portal.search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +general.fileUpload.upload,Upload,en_US +general.fileUpload.upload,Hochladen,de_DE +self_service_portal.service.product.no_shipment_types_available,Keine Versandarten für dieses Produkt verfügbar.,de_DE +self_service_portal.service.product.no_shipment_types_available,No shipping types available for this product.,en_US +self_service_portal.service.product.shipment_types,Versandarten,de_DE +self_service_portal.service.product.shipment_types,Shipment Types,en_US +self_service_portal.service.product.select_service_point,Wählen Sie einen Servicepunkt,de_DE +self_service_portal.service.product.select_service_point,Select a service point,en_US +self_service_portal.service.product.service_point_required,Ein Servicepunkt ist für dieses Produkt erforderlich,de_DE +self_service_portal.service.product.service_point_required,A service point is required for this product,en_US +self_service_portal.service.cart_item.service_point.name,Service point,en_US +self_service_portal.service.cart_item.service_point.name,Servicepunkt,de_DE +self_service_portal.service.product.service_date_time,Choose your preferred date and time slot,en_US +self_service_portal.service.product.service_date_time,Wählen Sie Ihr bevorzugtes Datum und Ihre gewünschte Uhrzeit,de_DE +self_service_portal.service.product.label.service_date_time,Service date and time,en_US +self_service_portal.service.product.label.service_date_time,Service-Datum und -Uhrzeit,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +self_service_portal.service.cart_item.scheduled_at,Service Date and time,en_US +self_service_portal.service.cart_item.scheduled_at,Service Datum und Uhrzeit,de_DE +self_service_portal.customer_navigation.title,Self-Service,en_US +self_service_portal.customer_navigation.title,Self-Service,de_DE +customer.customer_navigation.title,Account & Shopping,en_US +customer.customer_navigation.title,Konto und Shopping,de_DE +forms.apply-btn,Apply,en_US +forms.apply-btn,Anwenden,de_DE +customer.account.button.filters,Filters,en_US +customer.account.button.filters,Filter,de_DE +general.fileUpload.description,Maximum of %amount% files (%format%) up to %size%,en_US +general.fileUpload.description,Maximal %amount% Dateien (%format%) bis %size%,de_DE +customer.account.self_service_portal.inquiry.details,Inquiry,en_US +customer.account.self_service_portal.inquiry.details,Anfrage,de_DE +customer.self_service_portal.inquiry.details.reference,Reference,en_US +customer.self_service_portal.inquiry.details.reference,Referenz,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.self_service_portal.inquiry.details.date,Date,en_US +customer.self_service_portal.inquiry.details.date,Datum,de_DE +customer.self_service_portal.inquiry.details.status,Status,en_US +customer.self_service_portal.inquiry.details.status,Status,de_DE +customer.self_service_portal.inquiry.details,Inquiry Details,en_US +customer.self_service_portal.inquiry.details,Anfragedetails,de_DE +customer.self_service_portal.inquiry.details.type,Type,en_US +customer.self_service_portal.inquiry.details.type,Typ,de_DE +customer.self_service_portal.inquiry.details.subject,Subject,en_US +customer.self_service_portal.inquiry.details.subject,Betreff,de_DE +customer.self_service_portal.inquiry.details.description,Description,en_US +customer.self_service_portal.inquiry.details.description,Beschreibung,de_DE +customer.self_service_portal.inquiry.owner,Owner,en_US +customer.self_service_portal.inquiry.owner,Eigentümer,de_DE +customer.self_service_portal.inquiry.details.first_name,First Name,en_US +customer.self_service_portal.inquiry.details.first_name,Vorname,de_DE +customer.self_service_portal.inquiry.details.last_name,Last Name,en_US +customer.self_service_portal.inquiry.details.last_name,Nachname,de_DE +customer.self_service_portal.inquiry.details.email,E-mail,en_US +customer.self_service_portal.inquiry.details.email,E-Mail,de_DE +customer.self_service_portal.inquiry.details.company,Company / Business Unit,en_US +customer.self_service_portal.inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.self_service_portal.inquiry.details.file.name,File name,en_US +customer.self_service_portal.inquiry.details.file.name,Dateiname,de_DE +customer.self_service_portal.inquiry.details.file.size,Size,en_US +customer.self_service_portal.inquiry.details.file.size,Größe,de_DE +customer.self_service_portal.inquiry.details.file.extension,Type,en_US +customer.self_service_portal.inquiry.details.file.extension,Typ,de_DE +customer.self_service_portal.inquiry.details.file.download,Download,en_US +customer.self_service_portal.inquiry.details.file.download,Herunterladen,de_DE +customer.self_service_portal.inquiry.details.files,Files,en_US +customer.self_service_portal.inquiry.details.files,Dateien,de_DE +customer.self_service_portal.inquiry.details.order_reference,Order Reference,en_US +customer.self_service_portal.inquiry.details.order_reference,Bestellnummer,de_DE +self_service_portal.inquiry.error.company_user_not_found,Company user not found.,en_US +self_service_portal.inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +self_service_portal.inquiry.type.general-question,General Question,en_US +self_service_portal.inquiry.type.general-question,Allgemeine Frage,de_DE +self_service_portal.inquiry.type.general-ssp_inquiry,General Inquiry,en_US +self_service_portal.inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +self_service_portal.inquiry.order.create_ssp_inquiry,Inquiry,en_US +self_service_portal.inquiry.order.create_ssp_inquiry,Anfrage,de_DE +self_service_portal.inquiry.order_reference.label,Order Reference,en_US +self_service_portal.inquiry.order_reference.label,Bestellnummer,de_DE +self_service_portal.inquiry.file.unavailable,File is not available,en_US +self_service_portal.inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.create.button,Create inquiry,en_US +customer.ssp_inquiry.create.button,Anfrage stellen,de_DE +ssp_asset.details_page.search_service,Search services,en_US +ssp_asset.details_page.search_service,Services suchen,de_DE +general.confirm.button,Confirm,en_US +general.confirm.button,Bestätigen,de_DE +product_offer_service_point_availability_widget.all_items_not_available,Not available.,en_US +product_offer_service_point_availability_widget.all_items_not_available,Keine der Produkte sind verfügbar.,de_DE +product_offer_service_point_availability_widget.all_items_available,All items are available.,en_US +product_offer_service_point_availability_widget.all_items_available,Alle Produkte sind verfügbar.,de_DE +shipment_type.name.shipment_type_in-center-service,In-Center Service,en_US +shipment_type.name.shipment_type_in-center-service,In-Center-Service,de_DE +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Active filters:,en_US +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.asset.business_unit_unassignment.denied,You cannot unassign business unit from asset.,en_US +self_service_portal.asset.business_unit_unassignment.denied,Sie können die Geschäftseinheit nicht vom Asset trennen.,de_DE +self_service_portal.asset.business_unit_assignment.denied,You cannot assign business unit to asset.,en_US +self_service_portal.asset.business_unit_assignment.denied,Sie können die Geschäftseinheit dem Asset nicht zuweisen.,de_DE +general.fileUpload.mb,MB,en_US +general.fileUpload.mb,MB,de_DE +customer.address.single_address_per_shipment_type,Set same address for all products,en_US +customer.address.single_address_per_shipment_type,Setze gleiche Adresse für alle Produkte,de_DE +service_point_widget.location_label,Location:,en_US +service_point_widget.location_label,Standort:,de_DE +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Filter by Asset,en_US +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Nach Asset filtern,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don’t show Business entity files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don’t show Asset entity files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Einheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_type.company_user,My Files,en_US +self_service_portal.company_file.file_attachment_type.company_user,Meine Dateien,de_DE +self_service_portal.company_file.file_attachment_type.company,Company Files,en_US +self_service_portal.company_file.file_attachment_type.company,Firmendateien,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don't show Asset files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Dateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don't show Business unit files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +customer.account.ssp_booked_services,Booked Services,en_US +customer.account.ssp_booked_services,Gebuchte Services,de_DE +customer.self_service_portal.service.list.product_name,Product Name,en_US +customer.self_service_portal.service.list.product_name,Produktname,de_DE +customer.self_service_portal.service.list.order_reference,Order Reference,en_US +customer.self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +customer.self_service_portal.service.list.scheduled_at,Date and Time,en_US +customer.self_service_portal.service.list.scheduled_at,Datum und Uhrzeit,de_DE +customer.self_service_portal.service.list.status,Status,en_US +customer.self_service_portal.service.list.status,Status,de_DE +ssp_dashboard.general.booked_services,Booked Services,en_US +ssp_dashboard.general.booked_services,Gebuchte Services,de_DE +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,en_US +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,de_DE +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,en_US +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,de_DE +self_service_portal.asset_filter.title,ASSET FILTER,en_US +self_service_portal.asset_filter.title,ASSET FILTER,de_DE +self_service_portal.asset_filter.description,Filter items based on your assets,en_US +self_service_portal.asset_filter.description,Artikel basierend auf Ihren Assets filtern,de_DE +self_service_portal.asset_filter.select_label,Select My Assets,en_US +self_service_portal.asset_filter.select_label,Meine Assets auswählen,de_DE +self_service_portal.asset_filter.serial_label,Serial:,en_US +self_service_portal.asset_filter.serial_label,Seriennummer:,de_DE +self_service_portal.asset_filter.change,Change Asset,en_US +self_service_portal.asset_filter.change,Asset ändern,de_DE +self_service_portal.asset_filter.clear,Clear,en_US +self_service_portal.asset_filter.clear,Löschen,de_DE +self_service_portal.ssp_asset.details_page.catalog,Shop Spare Parts,en_US +catalog.ssp.itemsFound,%num_found% artikel gefunden für %ssp_asset_name%,de_DE +catalog.ssp.itemsFound,%num_found% items found for %ssp_asset_name%,en_US +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.error.attach_to_cart_item,Asset cannot be added to cart.,en_US +self_service_portal.asset.error.attach_to_cart_item,Der Asset kann nicht zum Warenkorb hinzugefügt werden.,de_DE +self_service_portal.ssp_asset.success.attached_to_cart,Asset has been successfully updated for item %sku%.,en_US +self_service_portal.ssp_asset.success.attached_to_cart,Der Asset wurde erfolgreich für Artikel %sku% aktualisiert.,de_DE +global.search.results.no_query,Ergebnisse,de_DE +global.search.results.no_query,Search Results,en_US +self_service_portal.order.service.cancel.title,Cancel Service?,en_US +self_service_portal.order.service.cancel.title,Service stornieren?,de_DE +self_service_portal.order.service.cancel.description,You are about to cancel %name% (SKU: %sku%),en_US +self_service_portal.order.service.cancel.description,Sie sind dabei %name% (SKU: %sku%) zu stornieren,de_DE +self_service_portal.order.service.cancel.keep,Keep Service,en_US +self_service_portal.order.service.cancel.keep,Service behalten,de_DE +self_service_portal.asset.error.not-found,Asset nicht gefunden,de_DE +self_service_portal.asset.error.not-found,Asset not found,en_US +self_service_portal.asset.validation.unknown_error,An unexpected error occurred while processing your asset,en_US +self_service_portal.asset.validation.unknown_error,Beim Verarbeiten Ihres Assets ist ein unerwarteter Fehler aufgetreten.,de_DE +self_service_portal.inquiry.error.not-found,Anfrage nicht gefunden,de_DE +self_service_portal.inquiry.error.not-found,Inquiry not found,en_US +self_service_portal.inquiry.validation.unknown_error,Beim Verarbeiten Ihrer Anfrage ist ein unerwarteter Fehler aufgetreten,de_DE +self_service_portal.inquiry.validation.unknown_error,An unexpected error occurred while processing your inquiry,en_US +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +service_point_cart.checkout.validation.error,Selected service point "%uuid%" is not available for the store "%store_name%",en_US +service_point_cart.checkout.validation.error,Der ausgewählte Servicepunkt "%uuid%" ist für den Shop "%store_name%" nicht verfügbar,de_DE +service_point_widget.validation.error.service_point_not_selected,Please select service point.,en_US +service_point_widget.validation.error.service_point_not_selected,Bitte Servicestelle auswählen.,de_DE +service_point_widget.validation.error.billing_address_not_provided,Please add billing address manually.,en_US +service_point_widget.validation.error.billing_address_not_provided,Bitte fügen Sie die Rechnungsadresse manuell hinzu.,de_DE +service_point_widget.select_location_action,Select a service shop,en_US +service_point_widget.select_location_action,Wählen Sie eine Servicestelle,de_DE +service_point_widget.change_action,Change,en_US +service_point_widget.change_action,Ändern,de_DE +service_point_widget.select_your_store_title,Select your store,en_US +service_point_widget.select_your_store_title,Wählen Sie Ihren Store,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +shipment_type.name.shipment_type_delivery,Delivery,en_US +shipment_type.name.shipment_type_delivery,Lieferung,de_DE +shipment_type.name.shipment_type_pickup,Pickup,en_US +shipment_type.name.shipment_type_pickup,Abholung,de_DE +shipment_type.validation.shipment_type_entity_not_found,A delivery type entity was not found.,en_US +shipment_type.validation.shipment_type_entity_not_found,Lieferart wurde nicht gefunden.,de_DE +shipment_type.validation.shipment_type_key_exists,A delivery type with the same key already exists.,en_US +shipment_type.validation.shipment_type_key_exists,Es existiert bereits eine Lieferart mit dem gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_is_not_unique,At least two delivery types in this request have the same key.,en_US +shipment_type.validation.shipment_type_key_is_not_unique,Mindestens zwei Lieferarten in dieser Anfrage haben den gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_invalid_length,A delivery type key must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_key_invalid_length,Der Lieferart-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.shipment_type_name_invalid_length,A delivery type name must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_name_invalid_length,Der Lieferart-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +shipment_type.validation.store_does_not_exist,Store mit dem Namen ‘%name%’ existiert nicht.,de_DE +shipment_types_rest_api.error.shipment_type_not_available,Selected delivery type "%name%" is not available.,en_US +shipment_types_rest_api.error.shipment_type_not_available,Die ausgewählte Lieferart "%name%" ist nicht verfügbar.,de_DE +merchant_product_offer.view_seller,View Seller,en_US +merchant_product_offer.view_seller,Händler ansehen,de_DE +merchant_product_offer.sold_by,Sold by,en_US +merchant_product_offer.sold_by,Verkauft durch,de_DE +product-offer.info.product-offer-inactive.removed,Inactive item %sku% was removed from your shopping cart.,en_US +product-offer.info.product-offer-inactive.removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +product-offer.info.reference.invalid,Product offer reference not found for product with SKU '%sku%'.,en_US +product-offer.info.reference.invalid,Produktangebotsreferenz für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +product-offer.message.not-active-or-approved,"Product offer not active for product with SKU '%sku%'.",en_US +product-offer.message.not-active-or-approved,"Produktangebot ist inaktiv für Produkt mit SKU '%sku%'.",de_DE +merchant_product_offer_widget.merchant_name,Merchant,en_US +merchant_product_offer_widget.merchant_name,Händler,de_DE +self_service_portal.asset.selector.label,Assign this item to an asset,en_US +self_service_portal.asset.selector.label,Weise dieses Element einem Vermögenswert zu,de_DE +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.selector.search_placeholder,"Search by name, reference or serial number",en_US +self_service_portal.asset.selector.search_placeholder,"Nach Name, Referenz oder Seriennummer suchen",de_DE +self_service_portal.asset.selector.no_assets_available,No assets available,en_US +self_service_portal.asset.selector.no_assets_available,Keine Assets verfügbar,de_DE +self_service_portal.asset.selector.change,Change,en_US +self_service_portal.asset.selector.change,Ändern,de_DE +self_service_portal.asset.compatibility.compatible,Compatible,en_US +self_service_portal.asset.compatibility.compatible,Kompatibel,de_DE +self_service_portal.asset.compatibility.not_compatible,Not Compatible,en_US +self_service_portal.asset.compatibility.not_compatible,Nicht kompatibel,de_DE +cart.shipping,Versand,de_DE +cart.shipping,Shipping,en_US +self_service_portal.asset.assigned_asset,Zugewiesenes Asset,de_DE +self_service_portal.asset.assigned_asset,Assigned Asset,en_US +self_service_portal.asset.name,Asset Name,de_DE +self_service_portal.asset.name,Asset Name,en_US +self_service_portal.asset.serial_number,Asset Seriennummer,de_DE +self_service_portal.asset.serial_number,Asset Serial number,en_US +self_service_portal.asset.compatibility,Asset Kompatibilität,de_DE +self_service_portal.asset.compatibility,Asset Compatibility,en_US +self_service_portal.service.cancellation.error.no_items,No order items provided.,en_US +self_service_portal.service.cancellation.error.no_items,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.cancel_service,Cancel Service,en_US +self_service_portal.service.cancel_service,Dienstleistung stornieren,de_DE +self_service_portal.service.cancellation.success,Service has been successfully cancelled.,en_US +self_service_portal.service.cancellation.success,Die Dienstleistung wurde erfolgreich storniert.,de_DE +self_service_portal.service.cancellation.error,Failed to cancel the service.,en_US +self_service_portal.service.cancellation.error,Die Stornierung der Dienstleistung ist fehlgeschlagen.,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.validation.status_change_failed,The status change failed.,en_US +self_service_portal.service.validation.status_change_failed,Die Statusänderung ist fehlgeschlagen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View Company Files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View Files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View Business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit Dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der Firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der Geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View Dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum Anzeigen des Dashboards,de_DE +self_service_portal.inquiry.success.created,Inquiry has been submitted successfully,en_US +self_service_portal.inquiry.success.created,Anfrage wurde erfolgreich übermittelt,de_DE +self_service_portal.inquiry.type.label,Type,en_US +self_service_portal.inquiry.type.label,Typ,de_DE +self_service_portal.inquiry.access.denied,Access denied.,en_US +self_service_portal.inquiry.access.denied,Zugriff verweigert.,de_DE +self_service_portal.inquiry.success.canceled,Inquiry has been canceled.,en_US +self_service_portal.inquiry.success.canceled,Die Anfrage wurde storniert.,de_DE +self_service_portal.inquiry.cancel,Cancel inquiry,en_US +self_service_portal.inquiry.cancel,Anfrage stornieren,de_DE +self_service_portal.inquiry.create.select_type,Select type,en_US +self_service_portal.inquiry.create.select_type,Typ auswählen,de_DE +self_service_portal.inquiry.status.pending,Pending,en_US +self_service_portal.inquiry.status.pending,Ausstehend,de_DE +self_service_portal.inquiry.status.in_review,In Review,en_US +self_service_portal.inquiry.status.in_review,In Bearbeitung,de_DE +self_service_portal.inquiry.status.approved,Approved,en_US +self_service_portal.inquiry.status.approved,Genehmigt,de_DE +self_service_portal.inquiry.status.rejected,Rejected,en_US +self_service_portal.inquiry.status.rejected,Abgelehnt,de_DE +self_service_portal.inquiry.status.canceled,Canceled,en_US +self_service_portal.inquiry.status.canceled,Storniert,de_DE +self_service_portal.inquiry.subject.label,Subject,en_US +self_service_portal.inquiry.subject.label,Betreff,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Your inquiry %reference% was rejected.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Ihre Anfrage %reference% wurde abgelehnt.,de_DE +self_service_portal.inquiry.description.label,Description,en_US +self_service_portal.inquiry.description.label,Beschreibung,de_DE +self_service_portal.inquiry.files.label,File Upload,en_US +self_service_portal.inquiry.files.label,Datei-Upload,de_DE +self_service_portal.inquiry.type.general,General,en_US +self_service_portal.inquiry.type.general,Allgemein,de_DE +self_service_portal.inquiry.type.order,Order Claim,en_US +self_service_portal.inquiry.type.order,Bestellreklamation,de_DE +customer.account.ssp_inquiries,Inquiries,en_US +customer.account.ssp_inquiries,Anfragen,de_DE +customer.ssp_inquiries.access_level.placeholder,Select access level,en_US +customer.ssp_inquiries.access_level.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or description",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Beschreibung",de_DE +customer.ssp_inquiries.access_level.company_inquiries,Company inquiries,en_US +customer.ssp_inquiries.access_level.company_inquiries,Firmenanfragen,de_DE +customer.ssp_inquiries.search.label,"Search",en_US +customer.ssp_inquiries.search.label,"Suche",de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or subject",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Betreff",de_DE +customer.ssp_inquiries.access_level.label,Access Level,en_US +customer.ssp_inquiries.access_level.label,Zugriffsebene,de_DE +customer.ssp_inquiries.access_level.my_inquiries,My inquiries,en_US +customer.ssp_inquiries.access_level.my_inquiries,Meine anfragen,de_DE +customer.self_service_portal.inquiry.create_ssp_inquiry,Create inquiry,en_US +customer.self_service_portal.inquiry.create_ssp_inquiry,Anfrage stellen,de_DE +self_service_portal.inquiry.validation.type.invalid,Invalid inquiry type.,en_US +self_service_portal.inquiry.validation.type.invalid,Ungültiger Anfragetyp.,de_DE +self_service_portal.inquiry.list.widget.title,Inquiries,en_US +self_service_portal.inquiry.list.widget.title,Anfragen,de_DE +customer.self_service_portal.inquiry.list,Inquiries,en_US +customer.self_service_portal.inquiry.list,Anfragen,de_DE +self_service_portal.inquiry.file.file_not_found,File not found,en_US +self_service_portal.inquiry.file.file_not_found,Datei wurde nicht gefunden,de_DE +self_service_portal.inquiry.file.mime_type.error,Invalid file format.,en_US +self_service_portal.inquiry.file.mime_type.error,Ungültiger Dateiformat.,de_DE +self_service_portal.inquiry.validation.company_user.not_set,Company user is missing.,en_US +self_service_portal.inquiry.validation.company_user.not_set,Firmenbenutzer fehlt.,de_DE +self_service_portal.inquiry.validation.type.not_set,Inquiry type is missing.,en_US +self_service_portal.inquiry.validation.type.not_set,Anfragetyp fehlt.,de_DE +self_service_portal.inquiry.validation.subject.not_set,Inquiry subject is missing.,en_US +self_service_portal.inquiry.validation.subject.not_set,Betreff der Anfrage fehlt.,de_DE +self_service_portal.inquiry.validation.description.not_set,Inquiry description is missing.,en_US +self_service_portal.inquiry.validation.description.not_set,Anfragebeschreibung fehlt.,de_DE +self_service_portal.inquiry.error.file.format.invalid,An array of files is expected.,en_US +self_service_portal.inquiry.error.file.format.invalid,Ein Array von Dateien wurde erwartet.,de_DE +self_service_portal.inquiry.error.file.count.invalid,Invalid number of files. Maximum number of files: {{ limit }},en_US +self_service_portal.inquiry.error.file.count.invalid,Ungültige Dateianzahl. Maximale Anzahl von Dateien: {{ limit }},de_DE +self_service_portal.inquiry.error.file.size.invalid,"Invalid total file size. The maximum allowed size for all files is %maxSize%, but %size% was uploaded.",en_US +self_service_portal.inquiry.error.file.size.invalid,"Ungültige Gesamtdateigröße. Die maximal zulässige Größe für alle Dateien beträgt %maxSize%, aber es wurde %size% hochgeladen.",de_DE +self_service_portal.inquiry.error.status_change,The status change failed.,en_US +self_service_portal.inquiry.error.status_change,Die Statusänderung ist fehlgeschlagen.,de_DE +self_service_portal.inquiry.submit.button,Submit inquiry,en_US +self_service_portal.inquiry.submit.button,Anfrage senden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +customer.self_service_portal.inquiry.all_ssp_inquiries,Inquiries,en_US +customer.self_service_portal.inquiry.all_ssp_inquiries,Anfragen,de_DE +customer.self_service_portal.inquiry.list.reference,Reference,en_US +customer.self_service_portal.inquiry.list.reference,Referenz,de_DE +customer.self_service_portal.inquiry.list.type,Type,en_US +customer.self_service_portal.inquiry.list.type,Typ,de_DE +customer.self_service_portal.inquiry.list.subject,Subject,en_US +customer.self_service_portal.inquiry.list.subject,Betreff,de_DE +customer.self_service_portal.inquiry.list.owner,Owner,en_US +customer.self_service_portal.inquiry.list.owner,Eingentümer,de_DE +customer.self_service_portal.inquiry.list.date_created,Date,en_US +customer.self_service_portal.inquiry.list.date_created,Datum,de_DE +customer.self_service_portal.inquiry.list.status,Status,en_US +customer.self_service_portal.inquiry.list.status,Status,de_DE +self_service_portal.inquiry.list.filter.type.placeholder,Select type,en_US +self_service_portal.inquiry.list.filter.type.placeholder,Typ auswählen,de_DE +self_service_portal.inquiry.list.filter.type.label,Type,en_US +self_service_portal.inquiry.list.filter.type.label,Typ,de_DE +self_service_portal.inquiry.list.filter.status.placeholder,Select status,en_US +self_service_portal.inquiry.list.filter.status.placeholder,Status auswählen,de_DE +self_service_portal.inquiry.list.filter.status.label,Status,en_US +self_service_portal.inquiry.list.filter.status.label,Status,de_DE +customer.account.no_ssp_inquiries,You do not have inquiries yet.,en_US +customer.account.no_ssp_inquiries,Sie haben noch keine Anfragen.,de_DE +customer.self_service_portal.inquiry.view_ssp_inquiry,View,en_US +customer.self_service_portal.inquiry.view_ssp_inquiry,Ansehen,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen angegeben.,de_DE +self_service_portal.service.validation.order_not_found,Order with ID %id% not found.,en_US +self_service_portal.service.validation.order_not_found,Bestellung mit ID %id% nicht gefunden.,de_DE +self_service_portal.service.validation.no_payment_methods_found,No payment methods found for this order.,en_US +self_service_portal.service.validation.no_payment_methods_found,Keine Zahlungsmethoden für diese Bestellung gefunden.,de_DE +self_service_portal.service.list.search_placeholder,Search,en_US +self_service_portal.service.list.search_placeholder,Search,de_DE +self_service_portal.service.list.search_button,Search,en_US +self_service_portal.service.list.search_button,Suchen,de_DE +self_service_portal.service.list.title,Services,en_US +self_service_portal.service.list.title,Services,de_DE +self_service_portal.service.list.order_reference,Order Reference,en_US +self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +self_service_portal.service.list.product_name,Service Name,en_US +self_service_portal.service.list.product_name,Servicename,de_DE +self_service_portal.service.list.service_sku,SKU,en_US +self_service_portal.service.list.service_sku,SKU,de_DE +self_service_portal.service.list.scheduled_at,Time and Date,en_US +self_service_portal.service.list.scheduled_at,Zeit und Datum,de_DE +self_service_portal.service.list.created_at,Created At,en_US +self_service_portal.service.list.created_at,Erstellt am,de_DE +self_service_portal.service.list.empty,You don't have any services yet.,en_US +self_service_portal.service.list.empty,Sie haben noch keine Services.,de_DE +self_service_portal.service.list.widget.title,Services,en_US +self_service_portal.service.list.widget.title,Services,de_DE +self_service_portal.service.list.state,State,en_US +self_service_portal.service.list.state,Status,de_DE +self_service_portal.service.list.reset_button,Reset,en_US +self_service_portal.service.list.reset_button,Zurücksetzen,de_DE +self_service_portal.service.list.my_services,My Services,en_US +self_service_portal.service.list.my_services,Meine Services,de_DE +self_service_portal.service.list.business_unit_services,Business Unit Services,en_US +self_service_portal.service.list.business_unit_services,Geschäftsbereich Services,de_DE +self_service_portal.service.list.company_services,Company Services,en_US +self_service_portal.service.list.company_services,Firmenservices,de_DE +self_service_portal.service.update_scheduled_time,Change scheduled time,en_US +self_service_portal.service.update_scheduled_time,Geplante Zeit ändern,de_DE +self_service_portal.service.update_scheduled_time.service.sku,SKU,en_US +self_service_portal.service.update_scheduled_time.service.sku,SKU,de_DE +self_service_portal.service.update_scheduled_time.service.name,Name,en_US +self_service_portal.service.update_scheduled_time.service.name,Name,de_DE +self_service_portal.service.update_scheduled_time.service.quantity,Quantity,en_US +self_service_portal.service.update_scheduled_time.service.quantity,Menge,de_DE +self_service_portal.service.update_scheduled_time.service.state,State,en_US +self_service_portal.service.update_scheduled_time.service.state,Status,de_DE +self_service_portal.service.update_scheduled_time.title,Update Service Scheduled Time,en_US +self_service_portal.service.update_scheduled_time.title,Geplante Servicezeit aktualisieren,de_DE +self_service_portal.service.update_scheduled_time.success,Order item rescheduled successfully.,en_US +self_service_portal.service.update_scheduled_time.success,Bestellposition erfolgreich neu geplant.,de_DE +self_service_portal.service.update_scheduled_time.order_item_details,Order Item Details,en_US +self_service_portal.service.update_scheduled_time.order_item_details,Bestellpositionsdetails,de_DE +self_service_portal.service.update_scheduled_time.button.save,Save,en_US +self_service_portal.service.update_scheduled_time.button.save,Speichern,de_DE +self_service_portal.service.update_scheduled_time.button.cancel,Cancel,en_US +self_service_portal.service.update_scheduled_time.button.cancel,Abbrechen,de_DE +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Order item with uuid %uuid% not found.,en_US +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Bestellposition mit UUID %uuid% nicht gefunden.,de_DE +self_service_portal.service.list.field.business_unit,Access Level,en_US +self_service_portal.service.list.field.business_unit,Zugriffsebene,de_DE +self_service_portal.service.list.button.view,View,en_US +self_service_portal.service.list.button.view,Ansehen,de_DE +self_service_portal.company_file.table.header.file_reference,Reference,en_US +self_service_portal.company_file.table.header.file_reference,Referenz,de_DE +self_service_portal.company_file.table.header.file_name,File Name,en_US +self_service_portal.company_file.table.header.file_name,Dateiname,de_DE +self_service_portal.company_file.table.header.file_type,File Format,en_US +self_service_portal.company_file.table.header.file_type,Dateiformat,de_DE +self_service_portal.company_file.table.header.file_created_at,Date Added,en_US +self_service_portal.company_file.table.header.file_created_at,Datum hinzugefügt,de_DE +self_service_portal.company_file.table.header.file_size,Size,en_US +self_service_portal.company_file.table.header.file_size,Größe,de_DE +self_service_portal.company_file.table.header.actions,Actions,en_US +self_service_portal.company_file.table.header.actions,Aktionen,de_DE +self_service_portal.company_file.table.actions.download,Download,en_US +self_service_portal.company_file.table.actions.download,Herunterladen,de_DE +self_service_portal.company_file,Files,en_US +self_service_portal.company_file,Dateien,de_DE +self_service_portal.company_file.view.empty,You do not have any files yet.,en_US +self_service_portal.company_file.view.empty,Sie haben noch keine Dateien.,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Select type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Typ auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.label,Type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.label,Typ,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Date From,en_US +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Datum von,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Date To,en_US +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Datum bis,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Select access level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Zugriffsebene auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.search.label,Search,en_US +self_service_portal.company_file.file_search_filter_form.field.search.label,Suche,de_DE +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Reset All,en_US +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +self_service_portal.company_file.file_search_filter_form.label.active_filters,Active Filters:,en_US +self_service_portal.company_file.file_search_filter_form.label.active_filters,Aktive Filter:,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.ssp_inquiries.date_from,Date from,en_US +customer.ssp_inquiries.date_from,Datum von,de_DE +customer.ssp_inquiries.date_to,Date to,en_US +customer.ssp_inquiries.date_to,Datum bis,de_DE +customer.account.ssp_inquiry.details,Inquiry,en_US +customer.account.ssp_inquiry.details,Anfrage,de_DE +customer.ssp_inquiry.details.reference,Reference,en_US +customer.ssp_inquiry.details.reference,Referenz,de_DE +customer.ssp_inquiry.details.date,Date,en_US +customer.ssp_inquiry.details.date,Datum,de_DE +customer.ssp_inquiry.details.status,Status,en_US +customer.ssp_inquiry.details.status,Status,de_DE +customer.ssp_inquiry.details,Inquiry Details,en_US +customer.ssp_inquiry.details,Anfragedetails,de_DE +customer.ssp_inquiry.details.type,Type,en_US +customer.ssp_inquiry.details.type,Typ,de_DE +customer.ssp_inquiry.details.subject,Subject,en_US +customer.ssp_inquiry.details.subject,Betreff,de_DE +customer.ssp_inquiry.details.description,Description,en_US +customer.ssp_inquiry.details.description,Beschreibung,de_DE +customer.ssp_inquiry.owner,Owner,en_US +customer.ssp_inquiry.owner,Eigentümer,de_DE +customer.ssp_inquiry.details.first_name,First Name,en_US +customer.ssp_inquiry.details.first_name,Vorname,de_DE +customer.ssp_inquiry.details.last_name,Last Name,en_US +customer.ssp_inquiry.details.last_name,Nachname,de_DE +customer.ssp_inquiry.details.email,E-mail,en_US +customer.ssp_inquiry.details.email,E-Mail,de_DE +customer.ssp_inquiry.details.company,Company / Business Unit,en_US +customer.ssp_inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.ssp_inquiry.details.file.name,File name,en_US +customer.ssp_inquiry.details.file.name,Dateiname,de_DE +customer.ssp_inquiry.details.file.size,Size,en_US +customer.ssp_inquiry.details.file.size,Größe,de_DE +customer.ssp_inquiry.details.file.extension,Type,en_US +customer.ssp_inquiry.details.file.extension,Typ,de_DE +customer.ssp_inquiry.details.file.download,Download,en_US +customer.ssp_inquiry.details.file.download,Herunterladen,de_DE +ssp_inquiry.file.unavailable,File is not available,en_US +ssp_inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.details.files,Files,en_US +customer.ssp_inquiry.details.files,Dateien,de_DE +ssp_inquiry.order.create_ssp_inquiry,Inquiry,en_US +ssp_inquiry.order.create_ssp_inquiry,Reklamation,de_DE +ssp_inquiry.order_reference.label,Order Reference,en_US +ssp_inquiry.order_reference.label,Bestellnummer,de_DE +customer.ssp_inquiry.details.order_reference,Order Reference,en_US +customer.ssp_inquiry.details.order_reference,Bestellnummer,de_DE +ssp_inquiry.error.company_user_not_found,Company user not found.,en_US +ssp_inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +ssp_inquiry.type.general-question,General Question,en_US +ssp_inquiry.type.general-question,Allgemeine Frage,de_DE +ssp_inquiry.type.general-ssp_inquiry,General Inquiry,en_US +ssp_inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +ssp_dashboard.index.widget.title,Dashboard,en_US +ssp_dashboard.index.widget.title,Dashboard,de_DE +ssp_dashboard.general.view_all,View All,en_US +ssp_dashboard.general.view_all,Alle anzeigen,de_DE +ssp_dashboard.general.welcome,"Welcome, %name%",en_US +ssp_dashboard.general.welcome,"Willkommen, %name%",de_DE +ssp_dashboard.overview.title,My Overview,en_US +ssp_dashboard.overview.title,Meine Übersicht,de_DE +ssp_dashboard.general.ssp_assets,Assets,en_US +ssp_dashboard.general.ssp_assets,Assets,de_DE +ssp_dashboard.general.inquiries,Pending Inquiries,en_US +ssp_dashboard.general.inquiries,Ausstehende Ansprüche,de_DE +ssp_dashboard.general.services,Planned Services,en_US +ssp_dashboard.general.services,Geplante Services,de_DE +ssp_dashboard.representatives.title,Service Representatives,en_US +ssp_dashboard.representatives.title,Mitarbeiter des Kundendienstes,de_DE +ssp_dashboard.general.no_data,There is no data yet,en_US +ssp_dashboard.general.no_data,Es gibt noch keine Daten,de_DE +ssp_dashboard.general.news,News & Events,en_US +ssp_dashboard.general.news,Nachrichten & Veranstaltungen,de_DE +dashboard.access.denied,Access denied.,en_US +dashboard.access.denied,Zugriff verweigert.,de_DE +customer.account.files,Files,en_US +customer.account.files,Dateien,de_DE +customer.account.no_files,No Files,en_US +customer.account.no_files,Keine Dateien,de_DE +customer.account.no_ssp_booked_services,You do not have booked services yet.,en_US +customer.account.no_ssp_booked_services,Sie haben noch keine gebuchten Services.,de_DE +dashboard.overview.not_applicable,n/a,en_US +dashboard.overview.not_applicable,n/a,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +product.filter.product-class-names,Product Class,en_US +product.filter.product-class-names,Produktklasse,de_DE +customer.account.ssp_services,Services,en_US +customer.account.ssp_services,Services,de_DE +customer.account.no_ssp_services,There are no services at the moment,en_US +customer.account.no_ssp_services,Es gibt derzeit keine Services,de_DE +customer.ssp_service.order.reference,Order Reference,en_US +customer.ssp_service.order.reference,Bestellreferenz,de_DE +customer.ssp_service.customer,Customer,en_US +customer.ssp_service.customer,Kunde,de_DE +customer.ssp_service.company,Company,en_US +customer.ssp_service.company,Unternehmen,de_DE +customer.ssp_service.service,Service,en_US +customer.ssp_service.service,Service,de_DE +customer.ssp_service.created_at,Date created,en_US +customer.ssp_service.created_at,Erstellt am,de_DE +customer.ssp_service.status,Status,en_US +customer.ssp_service.status,Status,de_DE +customer.ssp_service.scheduled_at,Time and Date,en_US +customer.ssp_service.scheduled_at,Zeit und Datum,de_DE +customer.ssp_service.actions,Actions,en_US +customer.ssp_service.actions,Aktionen,de_DE +customer.ssp_service.view_ssp_service,View,en_US +customer.ssp_service.view_ssp_service,Anzeigen,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +ssp_inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +ssp_asset.validation.cannot_delete_own_assignment,You cannot delete your own assignment.,en_US +ssp_asset.validation.cannot_delete_own_assignment,Sie können Ihre eigene Zuweisung nicht löschen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View company files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View my files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Meine dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum anzeigen des dashboards,de_DE +permission.name.ViewCompanySspAssetPermissionPlugin,View company assets,en_US +permission.name.ViewCompanySspAssetPermissionPlugin,Firmen-assets anzeigen,de_DE +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,View business unit assets,en_US +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +permission.name.CreateSspAssetPermissionPlugin,Create assets,en_US +permission.name.CreateSspAssetPermissionPlugin,Assets erstellen,de_DE +permission.name.UpdateSspAssetPermissionPlugin,Update assets,en_US +permission.name.UpdateSspAssetPermissionPlugin,Assets aktualisieren,de_DE +permission.name.UnassignSspAssetPermissionPlugin,Unassign business unit ssp assets,en_US +permission.name.UnassignSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +ssp_dashboard.overview.not_applicable,n/a,en_US +ssp_dashboard.overview.not_applicable,n/a,de_DE +self_service_portal.asset.form.image.description,"Max up to %size%. Allowed file formats %format%",en_US +self_service_portal.asset.form.image.description,"Maximal bis zu %size%. Erlaubte Dateiformate: %format%",de_DE +self_service_portal.asset.validation.name.not_set,Asset name must be provided,en_US +self_service_portal.asset.validation.name.not_set,Der Name des Assets muss angegeben werden,de_DE +self_service_portal.asset.validation.business_unit.not_set,Business unit must be provided,en_US +self_service_portal.asset.validation.business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.company_business_unit.not_set,Company business unit must be provided,en_US +self_service_portal.asset.validation.company_business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.assets_not_provided,No assets were provided,en_US +self_service_portal.asset.validation.assets_not_provided,Es wurden keine Assets bereitgestellt,de_DE +self_service_portal.asset.validation.id_not_provided,Asset ID was not provided,en_US +self_service_portal.asset.validation.id_not_provided,Asset-ID wurde nicht angegeben,de_DE +self_service_portal.asset.validation.not_found,Asset was not found,en_US +self_service_portal.asset.validation.not_found,Asset wurde nicht gefunden,de_DE +self_service_portal.asset.list.widget.title,Assets,en_US +self_service_portal.asset.list.widget.title,Assets,de_DE +self_service_portal.asset.create.title,Create Asset,en_US +self_service_portal.asset.create.title,Asset erstellen,de_DE +self_service_portal.asset.list.title,Assets,en_US +self_service_portal.asset.list.title,Assets,de_DE +self_service_portal.asset.submit.button,Save,en_US +self_service_portal.asset.submit.button,Speichern,de_DE +self_service_portal.asset.success.created,Asset has been successfully created,en_US +self_service_portal.asset.success.created,Asset wurde erfolgreich erstellt,de_DE +self_service_portal.asset.error.create,Asset creation failed,en_US +self_service_portal.asset.error.create,Fehler beim Erstellen des Assets,de_DE +self_service_portal.asset.form.name,Name,en_US +self_service_portal.asset.form.name,Name,de_DE +self_service_portal.asset.form.serial_number,Serial number,en_US +self_service_portal.asset.form.serial_number,Seriennummer,de_DE +self_service_portal.asset.form.note,Note,en_US +self_service_portal.asset.form.note,Notiz,de_DE +self_service_portal.asset.form.image,Image,en_US +self_service_portal.asset.form.image,Bild,de_DE +self_service_portal.asset.form.image.mime_type_error,Invalid file format. Allowed file formats: {{ types }},en_US +self_service_portal.asset.form.image.mime_type_error,Ungültiges Dateiformat. Erlaubte Dateiformate: {{ types }},de_DE +self_service_portal.asset.form.external_image_url,External Image URL,en_US +self_service_portal.asset.form.external_image_url,Externe Bild-URL,de_DE +self_service_portal.asset.form.external_image_url.note,"Note: If no image is uploaded locally, the asset will use the image from the provided URL.",en_US +self_service_portal.asset.form.external_image_url.note,"Hinweis: Wenn kein Bild lokal hochgeladen wird, verwendet das Asset standardmäßig das Bild von der angegebenen URL.",de_DE +self_service_portal.asset.update.title,Edit Asset,en_US +self_service_portal.asset.update.title,Asset bearbeiten,de_DE +self_service_portal.asset.details.reference,Asset Reference,en_US +self_service_portal.asset.details.reference,Asset-Referenz,de_DE +self_service_portal.asset.cancel.button,Cancel,en_US +self_service_portal.asset.cancel.button,Abbrechen,de_DE +self_service_portal.asset.details.created_date,Date added,en_US +self_service_portal.asset.details.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details.owner,Business unit owner,en_US +self_service_portal.asset.details.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details.confirm_delete_title,Confirm delete,en_US +self_service_portal.asset.details.confirm_delete_title,Löschen bestätigen,de_DE +self_service_portal.asset.details.confirm_delete_body,Are you sure you want to delete the image?,en_US +self_service_portal.asset.details.confirm_delete_body,"Sind Sie sicher, dass Sie das Bild löschen möchten?",de_DE +self_service_portal.asset.success.updated,Asset has been successfully updated,en_US +self_service_portal.asset.success.updated,Asset wurde erfolgreich aktualisiert,de_DE +self_service_portal.asset.image.requirements,Upload image requirements,en_US +self_service_portal.asset.image.requirements,Anforderungen für das Hochladen von Bildern,de_DE +self_service_portal.asset.image.upload,Upload Image,en_US +self_service_portal.asset.image.upload,Bild hochladen,de_DE +self_service_portal.asset.details_page.search_service,Search services,en_US +self_service_portal.asset.details_page.search_service,Services suchen,de_DE +self_service_portal.asset.details_page.name,Name,en_US +self_service_portal.asset.details_page.name,Name,de_DE +self_service_portal.asset.details_page.serial_number,Serial number,en_US +self_service_portal.asset.details_page.serial_number,Seriennummer,de_DE +self_service_portal.asset.details_page.note,Note,en_US +self_service_portal.asset.details_page.note,Notiz,de_DE +self_service_portal.asset.details_page.reference,Reference,en_US +self_service_portal.asset.details_page.reference,Referenz,de_DE +self_service_portal.asset.details_page.confirm_unassign_title,Confirm delete,en_US +self_service_portal.asset.details_page.confirm_unassign_title,Löschen bestätigen,de_DE +self_service_portal.asset.details_page.confirm_unassign_body,Unassign this asset from the business unit. Do you want to proceed?,en_US +self_service_portal.asset.details_page.confirm_unassign_body,Möchten Sie dieses Asset wirklich von der Geschäftseinheit entfernen?,de_DE +self_service_portal.asset.details_page.confirm_unassign_in_review,Asset is in Review. You can delete it after it is approved.,en_US +self_service_portal.asset.details_page.confirm_unassign_in_review,"Die Ressource wird überprüft. Du kannst sie löschen, nachdem sie genehmigt wurde.",de_DE +self_service_portal.asset.details_page.unassign,Unassign,en_US +self_service_portal.asset.details_page.unassign,Zuweisung aufheben,de_DE +self_service_portal.inquiry.type.ssp_asset,Asset,en_US +self_service_portal.inquiry.type.ssp_asset,Asset,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset Reference,en_US +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.ssp_asset.details,Asset Details,en_US +customer.self_service_portal.inquiry.ssp_asset.details,Asset-Details,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset not available,en_US +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset nicht verfügbar,de_DE +self_service_portal.asset.error.reference_not_found,Asset reference not found,en_US +self_service_portal.asset.error.reference_not_found,Asset-Referenz nicht gefunden,de_DE +self_service_portal.asset.error.company_user_not_found,Company user not found,en_US +self_service_portal.asset.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +self_service_portal.inquiry.ssp_asset_reference.label,Asset Reference,en_US +self_service_portal.inquiry.ssp_asset_reference.label,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset Name,en_US +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset-Name,de_DE +customer.account.ssp_assets,My Assets,en_US +customer.account.ssp_assets,Meine Assets,de_DE +customer.account.ssp_asset,Asset,en_US +customer.account.ssp_asset,Asset,de_DE +customer.ssp_asset.list.reference,Reference,en_US +customer.ssp_asset.list.reference,Referenz,de_DE +customer.ssp_asset.list.name,Asset Name,en_US +customer.ssp_asset.list.name,Asset-Name,de_DE +customer.ssp_asset.list.serial_number,Serial number,en_US +customer.ssp_asset.list.serial_number,Seriennummer,de_DE +customer.ssp_asset.list.date_added,Date added,en_US +customer.ssp_asset.list.date_added,Hinzugefügt am,de_DE +customer.ssp_asset.view_ssp_asset,View,en_US +customer.ssp_asset.view_ssp_asset,Anzeigen,de_DE +customer.ssp_asset.create.button,Create asset,en_US +customer.ssp_asset.create.button,Asset erstellen,de_DE +customer.account.no_ssp_assets,You do not have any assets yet.,en_US +customer.account.no_ssp_assets,Sie haben noch keine Assets.,de_DE +company.error.company_user_not_found,Company user not found,en_US +company.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.ssp_asset.list.business_unit,Business Unit,en_US +customer.ssp_asset.list.business_unit,Geschäftseinheit,de_DE +customer.ssp_asset.list.image,Image,en_US +customer.ssp_asset.list.image,Bild,de_DE +self_service_portal.asset.details_page.created_date,Date added,en_US +self_service_portal.asset.details_page.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details_page.owner,Business unit owner,en_US +self_service_portal.asset.details_page.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details_page.undefined,Undefined,en_US +self_service_portal.asset.details_page.undefined,Nicht definiert,de_DE +self_service_portal.asset.success.business_unit_relation_updated,Business unit has been successfully unassigned from the asset,en_US +self_service_portal.asset.success.business_unit_relation_updated,Die Zuordnung der Geschäftseinheit zum Asset wurde erfolgreich aufgehoben,de_DE +self_service_portal.asset.details_page.status,Status,en_US +self_service_portal.asset.details_page.status,Status,de_DE +self_service_portal.asset.details.status,Status,en_US +self_service_portal.asset.details.status,Status,de_DE +self_service_portal.asset.status.pending,Pending,en_US +self_service_portal.asset.status.pending,Ausstehend,de_DE +self_service_portal.asset.status.approved,Approved,en_US +self_service_portal.asset.status.approved,Genehmigt,de_DE +self_service_portal.asset.status.in_review,In Review,en_US +self_service_portal.asset.status.in_review,In Überprüfung,de_DE +self_service_portal.asset.status.declined,Declined,en_US +self_service_portal.asset.status.declined,Abgelehnt,de_DE +customer.ssp_asset.list.business_unit,Business Unit Owner,en_US +customer.ssp_asset.list.business_unit,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.information.assigned_bu,Assigned business units,en_US +self_service_portal.asset.information.assigned_bu,Zugewiesene Geschäftseinheiten,de_DE +customer.ssp_asset.filter.scope,Access level,en_US +customer.ssp_asset.filter.scope,Zugriffsebene,de_DE +customer.ssp_asset.filter.scope.placeholder,Select access level,en_US +customer.ssp_asset.filter.scope.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_asset.filter_by_business_unit,My business unit assets,en_US +customer.ssp_asset.filter_by_business_unit,Assets meiner Geschäftseinheit,de_DE +customer.ssp_asset.filter_by_company,Company Assets,en_US +customer.ssp_asset.filter_by_company,Firmenassets,de_DE +self_service_portal.asset.error.cannot_unassign_own_business_unit,You cannot unassign your own business unit from the asset,en_US +self_service_portal.asset.error.cannot_unassign_own_business_unit,Sie können Ihre eigene Geschäftseinheit nicht vom Asset trennen,de_DE +self_service_portal.search_filter_form.label.active_filters,Active filters:,en_US +self_service_portal.search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.search_filter_form.field.reset_all.label,Reset all,en_US +self_service_portal.search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +general.fileUpload.upload,Upload,en_US +general.fileUpload.upload,Hochladen,de_DE +self_service_portal.service.product.no_shipment_types_available,Keine Versandarten für dieses Produkt verfügbar.,de_DE +self_service_portal.service.product.no_shipment_types_available,No shipping types available for this product.,en_US +self_service_portal.service.product.shipment_types,Versandarten,de_DE +self_service_portal.service.product.shipment_types,Shipment Types,en_US +self_service_portal.service.product.select_service_point,Wählen Sie einen Servicepunkt,de_DE +self_service_portal.service.product.select_service_point,Select a service point,en_US +self_service_portal.service.product.service_point_required,Ein Servicepunkt ist für dieses Produkt erforderlich,de_DE +self_service_portal.service.product.service_point_required,A service point is required for this product,en_US +self_service_portal.service.cart_item.service_point.name,Service point,en_US +self_service_portal.service.cart_item.service_point.name,Servicepunkt,de_DE +self_service_portal.service.product.service_date_time,Choose your preferred date and time slot,en_US +self_service_portal.service.product.service_date_time,Wählen Sie Ihr bevorzugtes Datum und Ihre gewünschte Uhrzeit,de_DE +self_service_portal.service.product.label.service_date_time,Service date and time,en_US +self_service_portal.service.product.label.service_date_time,Service-Datum und -Uhrzeit,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +self_service_portal.service.cart_item.scheduled_at,Service Date and time,en_US +self_service_portal.service.cart_item.scheduled_at,Service Datum und Uhrzeit,de_DE +self_service_portal.customer_navigation.title,Self-Service,en_US +self_service_portal.customer_navigation.title,Self-Service,de_DE +customer.customer_navigation.title,Account & Shopping,en_US +customer.customer_navigation.title,Konto und Shopping,de_DE +forms.apply-btn,Apply,en_US +forms.apply-btn,Anwenden,de_DE +customer.account.button.filters,Filters,en_US +customer.account.button.filters,Filter,de_DE +general.fileUpload.description,Maximum of %amount% files (%format%) up to %size%,en_US +general.fileUpload.description,Maximal %amount% Dateien (%format%) bis %size%,de_DE +customer.account.self_service_portal.inquiry.details,Inquiry,en_US +customer.account.self_service_portal.inquiry.details,Anfrage,de_DE +customer.self_service_portal.inquiry.details.reference,Reference,en_US +customer.self_service_portal.inquiry.details.reference,Referenz,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.self_service_portal.inquiry.details.date,Date,en_US +customer.self_service_portal.inquiry.details.date,Datum,de_DE +customer.self_service_portal.inquiry.details.status,Status,en_US +customer.self_service_portal.inquiry.details.status,Status,de_DE +customer.self_service_portal.inquiry.details,Inquiry Details,en_US +customer.self_service_portal.inquiry.details,Anfragedetails,de_DE +customer.self_service_portal.inquiry.details.type,Type,en_US +customer.self_service_portal.inquiry.details.type,Typ,de_DE +customer.self_service_portal.inquiry.details.subject,Subject,en_US +customer.self_service_portal.inquiry.details.subject,Betreff,de_DE +customer.self_service_portal.inquiry.details.description,Description,en_US +customer.self_service_portal.inquiry.details.description,Beschreibung,de_DE +customer.self_service_portal.inquiry.owner,Owner,en_US +customer.self_service_portal.inquiry.owner,Eigentümer,de_DE +customer.self_service_portal.inquiry.details.first_name,First Name,en_US +customer.self_service_portal.inquiry.details.first_name,Vorname,de_DE +customer.self_service_portal.inquiry.details.last_name,Last Name,en_US +customer.self_service_portal.inquiry.details.last_name,Nachname,de_DE +customer.self_service_portal.inquiry.details.email,E-mail,en_US +customer.self_service_portal.inquiry.details.email,E-Mail,de_DE +customer.self_service_portal.inquiry.details.company,Company / Business Unit,en_US +customer.self_service_portal.inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.self_service_portal.inquiry.details.file.name,File name,en_US +customer.self_service_portal.inquiry.details.file.name,Dateiname,de_DE +customer.self_service_portal.inquiry.details.file.size,Size,en_US +customer.self_service_portal.inquiry.details.file.size,Größe,de_DE +customer.self_service_portal.inquiry.details.file.extension,Type,en_US +customer.self_service_portal.inquiry.details.file.extension,Typ,de_DE +customer.self_service_portal.inquiry.details.file.download,Download,en_US +customer.self_service_portal.inquiry.details.file.download,Herunterladen,de_DE +customer.self_service_portal.inquiry.details.files,Files,en_US +customer.self_service_portal.inquiry.details.files,Dateien,de_DE +customer.self_service_portal.inquiry.details.order_reference,Order Reference,en_US +customer.self_service_portal.inquiry.details.order_reference,Bestellnummer,de_DE +self_service_portal.inquiry.error.company_user_not_found,Company user not found.,en_US +self_service_portal.inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +self_service_portal.inquiry.type.general-question,General Question,en_US +self_service_portal.inquiry.type.general-question,Allgemeine Frage,de_DE +self_service_portal.inquiry.type.general-ssp_inquiry,General Inquiry,en_US +self_service_portal.inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +self_service_portal.inquiry.order.create_ssp_inquiry,Inquiry,en_US +self_service_portal.inquiry.order.create_ssp_inquiry,Anfrage,de_DE +self_service_portal.inquiry.order_reference.label,Order Reference,en_US +self_service_portal.inquiry.order_reference.label,Bestellnummer,de_DE +self_service_portal.inquiry.file.unavailable,File is not available,en_US +self_service_portal.inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.create.button,Create inquiry,en_US +customer.ssp_inquiry.create.button,Anfrage stellen,de_DE +ssp_asset.details_page.search_service,Search services,en_US +ssp_asset.details_page.search_service,Services suchen,de_DE +general.confirm.button,Confirm,en_US +general.confirm.button,Bestätigen,de_DE +product_offer_service_point_availability_widget.all_items_not_available,Not available.,en_US +product_offer_service_point_availability_widget.all_items_not_available,Keine der Produkte sind verfügbar.,de_DE +product_offer_service_point_availability_widget.all_items_available,All items are available.,en_US +product_offer_service_point_availability_widget.all_items_available,Alle Produkte sind verfügbar.,de_DE +shipment_type.name.shipment_type_in-center-service,In-Center Service,en_US +shipment_type.name.shipment_type_in-center-service,In-Center-Service,de_DE +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Active filters:,en_US +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.asset.business_unit_unassignment.denied,You cannot unassign business unit from asset.,en_US +self_service_portal.asset.business_unit_unassignment.denied,Sie können die Geschäftseinheit nicht vom Asset trennen.,de_DE +self_service_portal.asset.business_unit_assignment.denied,You cannot assign business unit to asset.,en_US +self_service_portal.asset.business_unit_assignment.denied,Sie können die Geschäftseinheit dem Asset nicht zuweisen.,de_DE +general.fileUpload.mb,MB,en_US +general.fileUpload.mb,MB,de_DE +customer.address.single_address_per_shipment_type,Set same address for all products,en_US +customer.address.single_address_per_shipment_type,Setze gleiche Adresse für alle Produkte,de_DE +service_point_widget.location_label,Location:,en_US +service_point_widget.location_label,Standort:,de_DE +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Filter by Asset,en_US +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Nach Asset filtern,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don’t show Business entity files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don’t show Asset entity files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Einheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_type.company_user,My Files,en_US +self_service_portal.company_file.file_attachment_type.company_user,Meine Dateien,de_DE +self_service_portal.company_file.file_attachment_type.company,Company Files,en_US +self_service_portal.company_file.file_attachment_type.company,Firmendateien,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don't show Asset files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Dateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don't show Business unit files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +customer.account.ssp_booked_services,Booked Services,en_US +customer.account.ssp_booked_services,Gebuchte Services,de_DE +customer.self_service_portal.service.list.product_name,Product Name,en_US +customer.self_service_portal.service.list.product_name,Produktname,de_DE +customer.self_service_portal.service.list.order_reference,Order Reference,en_US +customer.self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +customer.self_service_portal.service.list.scheduled_at,Date and Time,en_US +customer.self_service_portal.service.list.scheduled_at,Datum und Uhrzeit,de_DE +customer.self_service_portal.service.list.status,Status,en_US +customer.self_service_portal.service.list.status,Status,de_DE +ssp_dashboard.general.booked_services,Booked Services,en_US +ssp_dashboard.general.booked_services,Gebuchte Services,de_DE +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,en_US +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,de_DE +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,en_US +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,de_DE +self_service_portal.asset_filter.title,ASSET FILTER,en_US +self_service_portal.asset_filter.title,ASSET FILTER,de_DE +self_service_portal.asset_filter.description,Filter items based on your assets,en_US +self_service_portal.asset_filter.description,Artikel basierend auf Ihren Assets filtern,de_DE +self_service_portal.asset_filter.select_label,Select My Assets,en_US +self_service_portal.asset_filter.select_label,Meine Assets auswählen,de_DE +self_service_portal.asset_filter.serial_label,Serial:,en_US +self_service_portal.asset_filter.serial_label,Seriennummer:,de_DE +self_service_portal.asset_filter.change,Change Asset,en_US +self_service_portal.asset_filter.change,Asset ändern,de_DE +self_service_portal.asset_filter.clear,Clear,en_US +self_service_portal.asset_filter.clear,Löschen,de_DE +self_service_portal.ssp_asset.details_page.catalog,Shop Spare Parts,en_US +catalog.ssp.itemsFound,%num_found% artikel gefunden für %ssp_asset_name%,de_DE +catalog.ssp.itemsFound,%num_found% items found for %ssp_asset_name%,en_US +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.error.attach_to_cart_item,Asset cannot be added to cart.,en_US +self_service_portal.asset.error.attach_to_cart_item,Der Asset kann nicht zum Warenkorb hinzugefügt werden.,de_DE +self_service_portal.ssp_asset.success.attached_to_cart,Asset has been successfully updated for item %sku%.,en_US +self_service_portal.ssp_asset.success.attached_to_cart,Der Asset wurde erfolgreich für Artikel %sku% aktualisiert.,de_DE +global.search.results.no_query,Ergebnisse,de_DE +global.search.results.no_query,Search Results,en_US +self_service_portal.order.service.cancel.title,Cancel Service?,en_US +self_service_portal.order.service.cancel.title,Service stornieren?,de_DE +self_service_portal.order.service.cancel.description,You are about to cancel %name% (SKU: %sku%),en_US +self_service_portal.order.service.cancel.description,Sie sind dabei %name% (SKU: %sku%) zu stornieren,de_DE +self_service_portal.order.service.cancel.keep,Keep Service,en_US +self_service_portal.order.service.cancel.keep,Service behalten,de_DE +self_service_portal.asset.error.not-found,Asset nicht gefunden,de_DE +self_service_portal.asset.error.not-found,Asset not found,en_US +self_service_portal.asset.validation.unknown_error,An unexpected error occurred while processing your asset,en_US +self_service_portal.asset.validation.unknown_error,Beim Verarbeiten Ihres Assets ist ein unerwarteter Fehler aufgetreten.,de_DE +self_service_portal.inquiry.error.not-found,Anfrage nicht gefunden,de_DE +self_service_portal.inquiry.error.not-found,Inquiry not found,en_US +self_service_portal.inquiry.validation.unknown_error,Beim Verarbeiten Ihrer Anfrage ist ein unerwarteter Fehler aufgetreten,de_DE +self_service_portal.inquiry.validation.unknown_error,An unexpected error occurred while processing your inquiry,en_US +self_service_portal.asset.validation.status.not_valid,Status is not valid.,en_US +self_service_portal.asset.validation.status.not_valid,Status ist nicht gültig.,de_DE +self_service_portal.asset.business_unit.not_found,Business unit not found.,en_US +self_service_portal.asset.business_unit.not_found,Geschäftseinheit nicht gefunden.,de_DE +self_service_portal.inquiry.validation.ssp_asset_reference_required,Asset reference is required.,en_US +self_service_portal.inquiry.validation.ssp_asset_reference_required,Asset-Referenz ist erforderlich.,de_DE +self_service_portal.inquiry.validation.ssp_asset_reference_not_allowed,Asset reference is not allowed.,en_US +self_service_portal.inquiry.validation.ssp_asset_reference_not_allowed,Asset-Referenz ist nicht erlaubt.,de_DE +self_service_portal.inquiry.validation.order_reference_required,Order reference is required.,en_US +self_service_portal.inquiry.validation.order_reference_required,Bestellreferenz ist erforderlich.,de_DE +self_service_portal.inquiry.validation.order_reference_not_allowed,Order reference is not allowed.,en_US +self_service_portal.inquiry.validation.order_reference_not_allowed,Bestellreferenz ist nicht erlaubt.,de_DE +self_service_portal.inquiry.validation.type_required,Type is required.,en_US +self_service_portal.inquiry.validation.type_required,Typ ist erforderlich.,de_DE +self_service_portal.inquiry.validation.subject_required,Subject is required.,en_US +self_service_portal.inquiry.validation.subject_required,Betreff ist erforderlich.,de_DE +self_service_portal.inquiry.validation.description_required,Description is required.,en_US +self_service_portal.inquiry.validation.description_required,Beschreibung ist erforderlich.,de_DE +``` \ No newline at end of file diff --git a/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-feature.md b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-feature.md new file mode 100644 index 00000000000..8434387aa5c --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-feature.md @@ -0,0 +1,930 @@ + + + +This document describes how to install the Warehouse picking feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Warehouse User Management | {{page.release_tag}} | [Install the Warehouse User Management feature](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Push Notification | {{page.release_tag}} | [Install the Push Notification feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-push-notification-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + +## 1) Install the required modules + +1. Install the required modules using Composer: + +```bash +composer require spryker-feature/warehouse-picking: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------|-----------------------------------------------------| +| PickingList | vendor/spryker/picking-list | +| PickingListExtension | vendor/spryker/picking-list-extension | +| PickingListPushNotification | vendor/spryker/picking-list-push-notification | +| PickingListsBackendApi | vendor/spryker/picking-lists-backend-api | +| PickingListsBackendApiExtension | vendor/spryker/picking-lists-backend-api-extension | +| PickingListsUsersBackendApi | vendor/spryker/picking-lists-users-backend-api | +| PickingListsWarehousesBackendApi | vendor/spryker/picking-lists-warehouses-backend-api | + + +{% endinfo_block %} + + +2. Optional: To install the [demo multi-shipment picking strategy](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/warehouse-picking-feature-overview.html#example-of-a-picklist-generation-strategy), install the module: + +```bash +composer require spryker/picking-list-multi-shipment-picking-strategy-example: "^0.2.1" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------------|---------------------------------------------------------------------| +| PickingListMultiShipmentPickingStrategyExample | vendor/spryker/picking-list-multi-shipment-picking-strategy-example | + + +{% endinfo_block %} + + +3. Optional: To install early access [OAuth authorization](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/warehouse-picking-feature-overview.html#fulfillment-app-oauth), install the module: + +```bash +composer require spryker-eco/authorization-picking-app-backend-api: "^0.2.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|----------------------------------------------------------| +| AuthorizationPickingAppBackendApi | vendor/spryker-eco/authorization-picking-app-backend-api | +| OauthCodeFlow | vendor/spryker/oauth-code-flow | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------|--------|---------| +| spy_picking_list | table | created | +| spy_picking_list_item | table | created | +| spy_sales_order_item.uuid | column | created | +| spy_stock.picking_list_strategy | column | created | + +Make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------|----------|---------|-------------------------------------------------------------------------------| +| PickingListCriteria | class | created | src/Generated/Shared/Transfer/PickingListCriteriaTransfer | +| PickingListConditions | class | created | src/Generated/Shared/Transfer/PickingListConditionsTransfer | +| PickingListCollection | class | created | src/Generated/Shared/Transfer/PickingListCollectionTransfer | +| PickingList | class | created | src/Generated/Shared/Transfer/PickingListTransfer | +| PickingListItemCriteria | class | created | src/Generated/Shared/Transfer/PickingListItemCriteriaTransfer | +| PickingListItemConditions | class | created | src/Generated/Shared/Transfer/PickingListItemConditionsTransfer | +| PickingListItemCollection | class | created | src/Generated/Shared/Transfer/PickingListItemCollectionTransfer | +| PickingListItem | class | created | src/Generated/Shared/Transfer/PickingListItemTransfer | +| PickingListCollectionRequest | class | created | src/Generated/Shared/Transfer/PickingListCollectionRequestTransfer | +| PickingListCollectionResponse | class | created | src/Generated/Shared/Transfer/PickingListCollectionResponseTransfer | +| GeneratePickingListsRequest | class | created | src/Generated/Shared/Transfer/GeneratePickingListsRequestTransfer | +| PickingListOrderItemGroup | class | created | src/Generated/Shared/Transfer/PickingListOrderItemGroupTransfer | +| PickingListGenerationFinishedRequest | class | created | src/Generated/Shared/Transfer/PickingListGenerationFinishedRequestTransfer | +| PickingListGenerationFinishedResponse | class | created | src/Generated/Shared/Transfer/PickingListGenerationFinishedResponseTransfer | +| PickingStartedRequest | class | created | src/Generated/Shared/Transfer/PickingStartedRequestTransfer | +| PickingStartedResponse | class | created | src/Generated/Shared/Transfer/PickingStartedResponseTransfer | +| PickingFinishedRequest | class | created | src/Generated/Shared/Transfer/PickingFinishedRequestTransfer | +| PickingFinishedResponse | class | created | src/Generated/Shared/Transfer/PickingFinishedResponseTransfer | +| StockCollection | class | created | src/Generated/Shared/Transfer/StockCollectionTransferTransfer | +| StockConditions | class | created | src/Generated/Shared/Transfer/StockConditionsTransferTransfer | +| PickingListsRequestBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListsRequestBackendApiAttributesTransfer | +| PickingListsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListsBackendApiAttributesTransfer | +| PickingListItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListItemsBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| UsersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/UsersBackendApiAttributesTransfer | +| UserResourceCollection | class | created | src/Generated/Shared/Transfer/UserResourceCollectionTransfer | +| WarehousesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/WarehousesBackendApiAttributesTransfer | +| WarehouseResourceCollection | class | created | src/Generated/Shared/Transfer/WarehouseResourceCollectionTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| User.uuid | property | created | src/Generated/Shared/Transfer/UserTransfer | +| Stock.pickingListStrategy | property | created | src/Generated/Shared/Transfer/StockTransfer | +| PushNotificationCollectionRequest.pickingLists | property | created | src/Generated/Shared/Transfer/PushNotificationCollectionRequestTransfer | + + + +Optional: If you've installed the early access OAuth authorization, make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------|-------|---------| +| spy_oauth_code_flow_auth_code | table | created | + + +Optional: If you've installed the early access OAuth authorization, make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------|----------|---------|----------------------------------------------------------| +| OauthRequest.responseType | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.redirectUri | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.state | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.code | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.codeChallenge | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| OauthRequest.codeChallengeMethod | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.codeVerifier | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthResponse.state | property | created | src/Generated/Shared/Transfer/OauthResponseTransfer | +| OauthResponse.code | property | created | src/Generated/Shared/Transfer/OauthResponseTransfer | +| ApiTokenAttributes.code | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.clientId | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.redirectUri | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.codeVerifier | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| AuthCodeAttributes.username | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.password | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.responseType | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.clientId | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.scope | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.redirectUri | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.state | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.codeChallenge | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.codeChallengeMethod | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCode.identifier | property | created | src/Generated/Shared/Transfer/AuthCodeTransfer | +| AuthCode.expiresAt | property | created | src/Generated/Shared/Transfer/AuthCodeTransfer | + +{% endinfo_block %} + + +## 3) Set up configuration + +Set up the following configuration. + +### Configure Glue API resources + +To make the `picking-lists` and `picking-list-items` resources protected, adjust the protected paths' configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + '/\/picking-lists.*/' => [ + 'isRegularExpression' => true, + 'methods' => [ + 'patch', + ], + ], + ]; + } +} +``` + +### Configure OMS + +1. Add the `DummyPicking` subprocess that describes the warehouse picking in the system. + +**config/Zed/oms/DummySubprocess/DummyPicking.xml** + +```xml + + + + + + + + + + + + + + + picking list generation scheduled + picking list generation started + generate picking lists + + + + picking list generation started + ready for picking + prepare for picking + + + + ready for picking + picking started + start picking + + + + picking started + picking finished + finish picking + + + + + + + + + + + + +``` + +2. Add the `DummyPicking` subprocess to the `DummyPayment01` process as an example. Consider OMS configuration using the `DummyPayment01` process as an example. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyPicking + + + + + + + + + + + + + waiting + picking list generation scheduled + picking list generation schedule + + + + picking finished + exported + finish picking + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. +2. Click the `DummyPayment01` process. +3. Make sure the OMS transition diagram shows the transition from `waiting` to `picking list generation scheduled` and from `picking finished` to `exported`. + +{% endinfo_block %} + +### Configure the push notification provider + +Add the configuration: + +**src/Pyz/Zed/PickingListPushNotification/PickingListPushNotificationConfig.php** + +```php +src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new GeneratePickingListsCommandByOrderPlugin(), 'PickingList/GeneratePickingLists'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @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 IsPickingListGenerationFinishedConditionPlugin(), 'PickingList/isPickingListGenerationFinished'); + $conditionCollection->add(new IsPickingStartedConditionPlugin(), 'PickingList/isPickingStarted'); + $conditionCollection->add(new IsPickingFinishedConditionPlugin(), 'PickingList/isPickingFinished'); + + return $conditionCollection; + }); + + return $container; + } +} +``` + +
    + +**src/Pyz/Zed/PickingList/PickingListDependencyProvider.php** + +```php + + */ + protected function getPickingListPostCreatePlugins(): array + { + return [ + new PushNotificationPickingListPostCreatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PickingListExtension\Dependency\Plugin\PickingListPostUpdatePluginInterface> + */ + protected function getPickingListPostUpdatePlugins(): array + { + return [ + new PushNotificationPickingListPostUpdatePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PushNotification/PushNotificationDependencyProvider.php** + +```php + + */ + protected function getPushNotificationSubscriptionValidatorPlugins(): array + { + return [ + new WarehouseUserPushNotificationSubscriptionValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php + + */ + protected function getPostSavePlugins(): array + { + return [ + new UnassignPickingListUserPostSavePlugin(), + ]; + } +} +``` + +### Optional: Set up the multi-shipment picking strategy + +If you've installed the demo picking strategy, enable the demo multi-shipment picking strategy plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|----------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------| +| MultiShipmentPickingListGeneratorStrategyPlugin | Generates picking lists based on a warehouse strategy. | | Spryker\Zed\PickingListMultiShipmentPickingStrategyExample\Communication\Plugin\PickingList | + +**src/Pyz/Zed/PickingList/PickingListDependencyProvider.php** + +```php + + */ + protected function getPickingListGeneratorStrategyPlugins(): array + { + return [ + new MultiShipmentPickingListGeneratorStrategyPlugin(), + ]; + } +} +``` + +### Optional: Set up the OAuth authorization + +If you've installed the OAuth authorization, enable the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| AuthorizeResource | Registers the OAuth `authorize` resource. | | SprykerEco\Glue\AuthorizationPickingAppBackendApi\Plugin\GlueApplication | +| UserAuthCodeOauthRequestGrantTypeConfigurationProviderPlugin | Builds `OauthGrantTypeConfigurationTransfer` from the configuration of `AuthorizationCode` grant type data. | | Spryker\Zed\OauthCodeFlow\Communication\Plugin\Oauth | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new AuthorizeResource(), + ]; + } +} +``` + +**src/Pyz/Zed/Oauth/OauthDependencyProvider.php** + +```php + + */ + protected function getOauthRequestGrantTypeConfigurationProviderPlugins(): array + { + return [ + new UserAuthCodeOauthRequestGrantTypeConfigurationProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Authenticate as a Back Office user with the the OAuth server: + +```http +POST /authorize/ HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 210 + +username={username}&password={password}&response_type=code&client_id={client_id}&state={state}&code_challenge={code_challenge}&code_challenge_method=S256&redirect_uri={redirect_uri} +``` + +| PARAMETER | TYPE | EXAMPLE | DESCRIPTION | +|-----------------------|--------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| username | string | some@user.com | The username of the Back Office user. | +| password | string | some-password | The password of the Back Office user. | +| response_type | string | code | Defines how the authorization server should respond to the client after the resource owner grants the access to the external application. | +| client_id | string | the-client-identifier-can-be-any-string | Public identifier for the client application that is requesting access to a user's resources. | +| state | string | some-random-string | Used to mitigate the risk of cross-site request forgery attacks. | +| code_challenge | string | some-random-string | Used in the Authorization Code Grant flow with a Proof Key for Code Exchange (PKCE) to enhance the security of the authorization process. PKCE is designed to protect against certain types of attacks, especially when the authorization code is exchanged for an access token. | +| code_challenge_method | string | S256 | Used in the Authorization Code Grant flow with PKCE. Defines the method used to transform the `code_verifier` into the `code_challenge` before initiating the authorization request. | +| redirect_uri | string | `https://some-redirect-url` | Used in the authorization request to specify where the authorization server should redirect the user after the user grants or denies permission. | + +For more detailed information about the Authorization (Code Grant flow) Request with PKCE, see to [Authorization Request](https://www.oauth.com/oauth2-servers/pkce/authorization-request/). + + Check that the response contains the 201 response with a code. + +2. Using the code you've retrieved in the previous step, authenticate as a Back Office user: + +```http +POST /token/ HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 1051 + +grant_type=authorization_code&code={code}&client_id={client_id}&code_verifier={code_verifier} +``` + +| Parameter name | Type | Example | Description | +|----------------|--------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| grant_type | string | authorization_code | Specifies the type of grant requested by the client. In this case, it's the Authorization Code Grant flow. | +| code | string | some-code | The authorization code provided by the OAuth server. | +| client_id | string | the-client-identifier-can-be-any-string | Public identifier for the client application that is requesting access to a user's resources. | +| code_verifier | string | some-random-string | A random string generated by the client in the Authorization Code Grant flow with PKCE. It's used to verify the identity of the client when exchanging the authorization code for an access token. | + +Check that the response contains the 201 response with an auth token. Check that you can send requests to protected resources using the auth token. + +{% endinfo_block %} + +### Set up the backend API + +To enable the Backend API, register these plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------|------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------| +| PickingListsBackendResourcePlugin | Registers the `picking-lists` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListStartPickingBackendResourcePlugin | Registers the `picking-lists` and `start-picking` resources. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListItemsBackendResourcePlugin | Registers the `picking-list-items` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListItemsByPickingListsBackendResourceRelationshipPlugin | Adds the `picking-list-items` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| UsersByPickingListsBackendResourceRelationshipPlugin | Adds the `users` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsUsersBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| WarehousesByPickingListsBackendResourceRelationshipPlugin | Adds the `warehouses` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsWarehousesBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new PickingListsBackendResourcePlugin(), + new PickingListStartPickingBackendResourcePlugin(), + new PickingListItemsBackendResourcePlugin() + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new PickingListItemsByPickingListsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new UsersByPickingListsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new WarehousesByPickingListsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +As a prerequisite, do the following: + +1. [Assign a warehouse to a warhouse user](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.html). +2. Place an order with a product that has the highest stock in the warehouse you've assigned the user to. +3. Obtain the access token of the warehouse user. +4. Use the warehouse user access token as the request header: `Authorization: Bearer {{YOUR_ACCESS_TOKEN}}`. + +Make sure that you can send the following requests: + +- Retrieve picklists: `GET https://glue-backend.mysprykershop.com/picking-lists`. + +- Retrieve picklists with picking list items included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=picking-list-items`. + +- Retrieve picklists with the users information included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=users`. + +- Retrieve picklists with warehouse information included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=warehouses`. + +- Retrieve a picking list: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}`. + +- Start picking: `PATCH https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/start-picking` + +- Retrieve items from a picklist: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items`. + +- Retrieve an item from a picklist: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items/{% raw %}{{{% endraw %}picking-list-item-uuid{% raw %}{{{% endraw %}`. + +- Pick one or more items from a picklist: + +`PATCH https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items/{% raw %}{{{% endraw %}picking-list-item-uuid{% raw %}{{{% endraw %}` + +```json +{ + "data": [ + { + "id": "{{picking-list-item-uuid1}}", + "type": "picking-list-items", + "attributes": { + "numberOfPicked": "{{number of picked}}", + "numberOfNotPicked": "{{number of not picked}}" + } + }, + { + "id": "{{picking-list-item-uuid2}}", + "type": "picking-list-items", + "attributes": { + "numberOfPicked": "{{number of picked}}", + "numberOfNotPicked": "{{number of not picked}}" + } + } + ] +} +``` + +Make sure push notification generation works: + +1. Place an order with a product from the warehouse with the `multi-shipment` picking strategy. +2. In the Back Office, go to **Sales**>**Orders**. +3. On the **Orders** page, next the order you've placed, click **View**. +4. To make the order ready for picking, manually change the state of the order. For instructions, see [Change the state of order items](/docs/pbc/all/order-management-system/latest/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html). + The order state should be **ready for picking**. + +5. Check the `spy_push_notification` database table to ensure that a push notification has been created. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-product-feature.md b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-product-feature.md new file mode 100644 index 00000000000..4d735c0d934 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-picking-product-feature.md @@ -0,0 +1,384 @@ + + + +This document describes how to install the Warehouse picking + [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Warehouse Picking | {{page.release_tag}} | [Install the Warehouse Picking feature](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +## 1) Set up behavior + +Enable the following plugins. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------| +| ConcreteProductsByPickingListItemsBackendResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `picking-list-items` resource. | | Spryker\Glue\ProductsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ConcreteProductImageSetsByProductsBackendResourceRelationshipPlugin | Adds the `concrete-product-image-sets` resource as a relationship to the `concrete-products` resource. | | Spryker\Glue\ProductImageSetsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + + + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new ConcreteProductsByPickingListItemsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ProductsBackendApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductImageSetsByProductsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} + + +``` + +{% info_block warningBox "Verification" %} + +Make sure the `concrete-products` and `concrete-product-image-sets` resources are returned as relationships to `picking-list-items` resource. + +`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,concrete-products,concrete-product-image-sets` +
    + Response sample +```json +{ + "data": [ + { + "id": "910a4d20-59a3-5c49-808e-aa7038a59313", + "type": "picking-lists", + "attributes": { + "status": "ready-for-picking", + "createdAt": "2023-10-27 13:00:32.000000", + "updatedAt": "2023-10-27 13:00:32.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "9ac9fd06-f491-506e-b302-0b166786d91c", + "type": "picking-list-items" + }, + { + "id": "54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/910a4d20-59a3-5c49-808e-aa7038a59313?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + } + ], + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists?include=picking-list-items,concrete-products,concrete-product-image-sets" + }, + "included": [ + { + "id": "091_25873091", + "type": "concrete-product-image-sets", + "attributes": { + "imageSets": [ + { + "name": "default", + "locale": "de_DE", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25873091-2214.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25873091-2214.jpg" + } + ] + }, + { + "name": "default", + "locale": "en_US", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25873091-2214.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25873091-2214.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-product-image-sets/091_25873091?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "091_25873091", + "type": "concrete-products", + "attributes": { + "sku": "091_25873091", + "isQuantitySplittable": true, + "isActive": true, + "localizedAttributes": [ + { + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "name": "Sony SmartWatch 3", + "description": "Gear S2 X Atelier Mendini In einer wunderbaren Partnerschaft bringt Alessandro Mendini seinen Geschmack, Humor und Farbsinn in die Gestaltung der Gear S2 ein. Das Ergebnis ist eine Reihe von Zifferblättern und Armbändern, die Ihren persönlichen Stil zum Ausdruck bringen. Die wesentlichen Smartphone-Funktionen sind mit einer einfachen Drehung an der Gear S2 verfügbar. Drehen Sie leicht an der Blende, um lange E-Mails zu durchblättern, eine Karte zu vergrössern oder bei der Musikwiedergabe ein Stück zu überspringen. Mit jeder Drehung wird das Leben noch interessanter und bunter. Mit der Gear S2 können Sie sich sehr leicht um Ihre Gesundheit kümmern. Verfolgen Sie Ihre täglichen Aktivitäten, Ihren Puls und Ihren Wasserkonsum verglichen mit Ihrem Koffeinkonsum. Bleiben Sie fit mit zeitgerechten motivierenden Botschaften. Bleiben Sie auf dem Laufenden und fit. Und wenn es Zeit'st, die Smartwatch wieder aufzuladen, stellen Sie sie einfach auf eine drahtlose Ladestation.", + "isSearchable": true, + "attributes": { + "color": "Weiß" + } + }, + { + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "isSearchable": true, + "attributes": { + "color": "White" + } + } + ], + "imageSets": [ + { + "name": "default", + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "images": [] + }, + { + "name": "default", + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "images": [] + } + ] + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "id": "091_25873091", + "type": "concrete-product-image-sets" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-products/091_25873091?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "9ac9fd06-f491-506e-b302-0b166786d91c", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 0, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "sku": "091_25873091", + "quantity": 1, + "name": "Sony SmartWatch 3", + "amountSalesUnit": null, + "amount": null + } + }, + "relationships": { + "concrete-products": { + "data": [ + { + "id": "091_25873091", + "type": "concrete-products" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/9ac9fd06-f491-506e-b302-0b166786d91c?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "066_23294028", + "type": "concrete-product-image-sets", + "attributes": { + "imageSets": [ + { + "name": "default", + "locale": "de_DE", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/gallery/23294028_3275.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + } + ] + }, + { + "name": "default", + "locale": "en_US", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/gallery/23294028_3275.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-product-image-sets/066_23294028?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "066_23294028", + "type": "concrete-products", + "attributes": { + "sku": "066_23294028", + "isQuantitySplittable": true, + "isActive": true, + "localizedAttributes": [ + { + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "name": "Samsung Galaxy S5 mini", + "description": "Ein Kunstwerk Das 5-Zoll-Display des Liquid Jade ist ein ansprechender Anblick. Die HD-Auflösung in Kombination mit der IPS1-Technologie verleiht Videos, Bildern und Web-Inhalten noch mehr Leben. Außerdem lässt das Zero Air Gap-Design alle Bilder gut aussehen – auch bei Sonnenlicht. Der Name sagt alles: ein Smartphone, das ist so schön ist wie Jade. Dank der 7,5 mm flachen und geschwungenen, ergonomischen Oberflächen liegt das Liquid Jade angenehm in der Hand. Die geschwungene Corning® Gorilla® Glass-Display unterstreicht die robuste und doch ansprechende Bauweise des Liquid Jade.", + "isSearchable": true, + "attributes": { + "color": "Blau" + } + }, + { + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices. The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "isSearchable": true, + "attributes": { + "color": "Blue" + } + } + ], + "imageSets": [ + { + "name": "default", + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "images": [] + }, + { + "name": "default", + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "images": [] + } + ] + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "id": "066_23294028", + "type": "concrete-product-image-sets" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-products/066_23294028?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 0, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "14d86bb2-ea23-57ed-904c-eecc63ef10ac", + "sku": "066_23294028", + "quantity": 1, + "name": "Samsung Galaxy S5 mini", + "amountSalesUnit": null, + "amount": null + } + }, + "relationships": { + "concrete-products": { + "data": [ + { + "id": "066_23294028", + "type": "concrete-products" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + } + ] +} +``` +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-user-management-feature.md b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-user-management-feature.md index 6b0e56c5cea..a77c0a34a76 100644 --- a/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-user-management-feature.md +++ b/_includes/pbc/all/install-features/202410.0/unified-commerce/install-the-warehouse-user-management-feature.md @@ -8,14 +8,14 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |--------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Spryker Core Back Office | {{page.version}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Inventory Management | {{page.version}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | ## 1) Install the required modules ```bash -composer require spryker-feature/warehouse-user-management: "{{page.version}}" --update-with-dependencies +composer require spryker-feature/warehouse-user-management: "{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api-inventory-management-feature.md b/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api-inventory-management-feature.md index 30581c12e39..a073c51820f 100644 --- a/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api-inventory-management-feature.md +++ b/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api-inventory-management-feature.md @@ -71,7 +71,7 @@ COMMIT; Do the following: -1. Obtain an access token. Follow [How to send a request in Data Exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) for details on how to do that. +1. Obtain an access token. Follow [How to send a request in Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) for details on how to do that. 2. Send a `PATCH` request. This request needs to include the necessary headers, such as Content-Type, Accept, and Authorization, with the access token provided: diff --git a/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api.md b/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api.md index 642f3461fb5..9f6b24f2ee2 100644 --- a/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api.md +++ b/_includes/pbc/all/install-features/202512.0/install-the-data-exchange-api.md @@ -360,8 +360,8 @@ Structure: | tableAlias | spy_dynamic_entity_configuration.table_alias | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | | isActive | spy_dynamic_entity_configuration.is_active | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | | definition | spy_dynamic_entity_configuration.definition | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | -| childRelations | spy_dynamic_entity_configuration_relation | Relation between two Data Exchange API configurations. Allows to execute complex requests to retrieve or save data together with relations. See details [How to send request in data exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) | -| childRelations.name | spy_dynamic_entity_configuration_relation.name | Name of the relation, used to include relations as part of Data Exchange API requests, see details [How to send request in data exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) | +| childRelations | spy_dynamic_entity_configuration_relation | Relation between two Data Exchange API configurations. Allows to execute complex requests to retrieve or save data together with relations. See details [How to send request in data exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) | +| childRelations.name | spy_dynamic_entity_configuration_relation.name | Name of the relation, used to include relations as part of Data Exchange API requests, see details [How to send request in data exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) | | childRelations.isEditable | spy_dynamic_entity_configuration_relation.is_editable | If set to `false` limits relation functionality to only GET requests, POST/PATCH/PUT requests are restricted. | | childRelations.childDynamicEntityConfiguration.tableAlias | spy_dynamic_entity_configuration_relation.fk_child_dynamic_entity_configuration | The alias of the child Data Exchange API configuration for the relation, parent configuration details are determined based on the configuration where the child relations added. | | childRelations.relationFieldMapping | spy_dynamic_entity_configuration_relation_field_mapping | Details about how child and parent configuration of the relations are connected. | @@ -739,7 +739,7 @@ class GlueBackendApiApplicationDependencyProvider extends SprykerGlueBackendApiA {% info_block warningBox "Verification" %} -Make sure you can operate data. For instructions, see [Requesting data using the Data Exchange API](/docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html) +Make sure you can operate data. For instructions, see [Requesting data using the Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/enable-gift-cards.md b/_includes/pbc/all/install-features/202602.0/enable-gift-cards.md new file mode 100644 index 00000000000..bcc88031578 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/enable-gift-cards.md @@ -0,0 +1,53 @@ + + +The Gift Cards feature is shipped with the following modules: + +- GiftCard: implements the basic functionality of the Gift Cards feature as well as the Replacement value-checking strategy. + +- GiftCardBalance: implements gift card Balance value-checking strategy<. + +- GiftCardMailConnector: responsible for sending e-mails on gift cards usage (balance change) as well as gift cards codes delivery. + +- Nopayment: implements payment methods if the price to pay is fully covered by a gift card. + +To enable the gift cards in your project, do the following: + +1. Make sure you have the correct versions of the required modules. To automatically update to the latest non-BC breaking versions, run `composer update "spryker/*"` +2. Require the modules in your `composer.json` by running: + +```bash +composer require spryker/gift-card:"^1.0.0" spryker/gift-card-balance:"^1.0.0" +spryker/gift-card-mail-connector:"^1.0.0" spryker/nopayment:"^4.0.0" +spryker/product-management:"^0.12.0" +``` + +3. Enable necessary plugins. See the table below for information on available plugins, where to install them and value checking strategies they are used for. + + +| PLUGIN | DESCRIPTION | WHERE TO INSTALL | STRATEGY | +| --- | --- | --- | --- | +| `GiftCardCalculatorPlugin` | Splits applicable and non-applicable Gift Cards. Creates payment methods for applicable Gift Cards. |`CalculationDependencyProvider::getQuoteCalculatorPluginStack` | - | +| `GiftCardCurrencyMatchDecisionRulePlugin` |Doesn't allow using a Gift Card with a different currency rather than the one the customer has used while performing the payment. | `GiftCardDependencyProvider::getDecisionRulePlugins` | - | +| `GiftCardIsActiveDecisionRulePlugin` | Doesn't allow using inactive Gift Cards. |`GiftCardDependencyProvider::getDecisionRulePlugins` | - | +| `GiftCardDiscountableItemFilterPlugin` |Restricts using a Gift Card for another Gift Cards in a cart. The plugin filters out Gift Cards from discountable items. |`DiscountDependencyProvider::getDiscountableItemFilterPlugins` | - | +| `GiftCardIsUsedDecisionRulePlugin` | As a part of the replacement strategy, this plugin does not allow using a Gift Card twice. |`GiftCardDependencyProvider::getDecisionRulePlugins` | Replacement | +| `GiftCardMetadataExpanderPlugin` | Populates Gift Card information when it's in the cart. | `CartDependencyProvider::getExpanderPlugins` | - | +| `GiftCardCheckoutDoSaveOrderPlugin` | Saves a Gift Card with populated data when an order is placed. Keeps Gift Card as an order payment method. | `CheckoutDependencyProvider::getCheckoutOrderSavers` | - | +| `GiftCardPaymentMethodFilterPlugin` | Now, every payment method is compatible with a Gift Card in the cart. The plugin filters out all incompatible payment methods from available ones during checkout payment methods step. | `PaymentDependencyProvider::getPaymentMethodFilterPlugins` | - | +| `GiftCardCheckoutPreConditionPlugin` | Confirms that a Gift Card is not used at the moment and that payment method amount assigned to the Gift Card is no more than the Gift Card amount itself.. | `CheckoutDependencyProvider::getCheckoutPreConditions` | - | +| `GiftCardRecreateValueProviderPlugin` |For replacement: defines a Gift Card leftover. It's simply a Gift Card amount for this strategy. | `GiftCardDependencyProvider::getValueProviderPlugin` | Replacement | +| `CreateGiftCardCommandPlugin` | It is an order management system command to create a Gift Card based on a paid order item (a Gift Card item). | `OmsDependencyProvider::extendCommandPlugins` | - | +| `ReplaceGiftCardsCommandPlugin` | For placement strategy: creates a new Gift Card based on leftover from the previous one. | `OmsDependencyProvider::extendCommandPlugins` | Replacement | +| `IsGiftCardConditionPlugin` | This plugin is used to define an order management system state machine process routing. | `OmsDependencyProvider::extendConditionPlugins` | - | +| `OnlyGiftCardShipmentMethodFilterPlugin` | Filters out shipment methods that are incompatible with Gift Cards. | `ShipmentDependencyProvider::getMethodFilterPlugins` | - | +| `BalanceCheckerApplicabilityPlugin` | For balance strategy: checks positive balance on a Gift Card. | `GiftCardDependencyProvider::getDecisionRulePlugins` | Balance | +| `BalanceTransactionLogPaymentSaverPlugin` | For balance strategy: persists a Gift Card during a payment processing. | `GiftCardDependencyProvider::getPaymentSaverPlugins` | Balance | +| `GiftCardBalanceValueProviderPlugin` | For balance strategy: provides available Gift Card amount. Gift Card amount equals to logged transactions. | `GiftCardDependencyProvider::getValueProviderPlugin` | Balance | +| `GiftCardDeliveryMailTypePlugin` | Sends an e-mail about a successfully issued Gift Card to a buyer. | `MailDependencyProvider::MAIL_TYPE_COLLECTION` | - | +| `GiftCardUsageMailTypePlugin` | Sends an e-mail on Gift Card usage to its user. | `MailDependencyProvider::MAIL_TYPE_COLLECTION` | - | +| `ShipGiftCardByEmailCommandPlugin` | An order management system command which triggers Gift Card electronic shipment. |`OmsDependencyProvider::extendCommandPlugins` | - | +| `NopaymentHandlerPlugin` | A payment method placeholder that is used when an order is paid by only a Gift Card without a real payment method. | `CheckoutDependencyProvider::extendPaymentMethodHandler` | - | +| `NopaymentCheckoutPreConditionPlugin` | Doesn't allow placing an order with a price to pay more than 0 with a NoPayment payment method. | `CheckoutDependencyProvider::getCheckoutPreConditions` | - | +| `PriceToPayPaymentMethodFilterPlugin` | Filters payment methods based on cart totals. | `PaymentDependencyProvider::getPaymentMethodFilterPlugins` | - | +| `PaymentFormFilterPlugin` | Each payment method provides its subforms. The plugin filters them out based on an available payment method list. | `CheckoutDependencyProvider::getPaymentFormFilterPlugins` | - | +| `PaymentCalculatorPlugin` | Distributes total prices to payment methods. Calculates price to pay to quote totals. | `CalculationDependencyProvider::getQuoteCalculatorPluginStack` | - | diff --git a/_includes/pbc/all/install-features/202602.0/enable-the-content-widget.md b/_includes/pbc/all/install-features/202602.0/enable-the-content-widget.md new file mode 100644 index 00000000000..98791943f5d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/enable-the-content-widget.md @@ -0,0 +1,243 @@ + + +CMS content widgets is a CMS feature for adding dynamic content to CMS pages/blocks. + +For example, you can list a single product, product lists, product groups or product sets. + +## Integration + +First of all you need to install the `cms-content-widget` module with Composer (update composer.json with `"cms-content-widget": "^1.0.0"` or use Composer require). + +To enable the feature, configure it in your project. + +Integration of CMS widget consists of three main parts: + +1. Registering twig function in Yves. +2. Providing configuration in module shared directory so that Yves and Zed can read it. +3. (Optionally) Providing CMS content function parameter mapper plugins. + +### 1. Registering twig function in Yves + +The CMS content widget is a twig function. Therefore, twig syntax rules apply and must be followed when including the inside content. +For example, `{% raw %}{{{% endraw %} product(['012', '013', '321']) {% raw %}}}{% endraw %}` will include carousel component with three products. + +To register a new function, you need to create a plugin which implements the `\Spryker\Yves\CmsContentWidget\Dependency\CmsContentWidgetPluginInterface` interface and place it in Yves application. Plugins are registered in `\Pyz\Yves\CmsContentWidget\CmsContentWidgetependencyProvider::getCmsContentWidgetPlugins` which is an array stored as key => value pairs, +where **key** is the function name you want to use in a template and **value** is a specific plugin instance. This plugin needs configuration which is explained in the next paragraph. + +To enable the feature for CMS blocks, you have to configure twig rendering plugin `\Spryker\Yves\CmsContentWidget\Plugin\CmsTwigContentRendererPlugin` and add it to `\Pyz\Yves\CmsBlock\CmsBlockDependencyProvider::getCmsBlockTwigContentRendererPlugin`. This will enable twig function rendering in CMS blocks. + +### 2. Providing CMS content widget configuration + +Some information needs to be shared between Yves and Zed. Therefore, the configuration plugin must be placed in a shared namespace. + +**The new plugin must implement:** `\Spryker\Shared\CmsContentWidget\Depedency\CmsContentWidgetConfigurationProviderInterface` which is used by Yves and Zed. + +When used in Yves, inject this plugin directly to your plugin and use configuration when building twig callable. When used in Zed, it should be added to the `\Pyz\Zed\CmsContentWidget\CmsContentWidgetConfig::getCmsContentWidgetConfigurationProviders` plugin array where key is the function name and value is the plugin instance. Providing it to Zed allows rendering usage information below the content editor. + +The configuration provider requires implementation of the following methods: + +- `getFunctionName` is the name of function when used in CMS content. +- `getAvailableTemplates` is the list of supported templates, it's a key value pair where key is the template identifier which is passed to function and value is a path to twig template. +- `getUsageInformation` is a plain text usage information, displayed when rendering help pane below the content editor. + +### 3. Function mapping plugins - optional + +When defining functions, you may want to accept "natural identifiers", such as "sku" for products or "set_key" for product sets. It is preferable that the content manager provides the identifiers instead of relying on surrogate keys. The problem arises when you need to read data from the Yves data store as the Yves data store uses "surrogate key/primary keys". Therefore, to read data, convert/map those natural identifiers to surrogate keys. + +We provide mappers to help map the identifiers. Each mapper must implement: `\Spryker\Zed\CmsContentWidget\Dependency\Plugin\CmsContentWidgetParameterMapperPluginInterface` and be added to `\Pyz\Zed\Cms\CmsDependencyProvider::getCmsContentWidgetParameterMapperPlugins` where **key** is the function name and **value** is a specific mapper. + +The mapper receives unmapped values where your plugin is responsible for mapping and returning it as an array. Mapper plugins are invoked by CMS and block collectors. To export this data, you must register two plugins one for CMS pages and one for CMS blocks. + +For `CmsBlockCollector`, add plugin `\Spryker\Zed\CmsContentWidget\Communication\Plugin\CmsBlockCollector\CmsBlockCollectorParameterMapExpanderPlugin` to `\Pyz\Zed\CmsBlockCollector\CmsBlockCollectorDependencyProvider::getCollectorDataExpanderPlugins`. + +For `CmsCollector`, add plugin `\Spryker\Zed\CmsContentWidget\Communication\Plugin\CmsPageCollector\CmsPageCollectorParameterMapExpanderPlugin` to `\Pyz\Zed\CmsCollector\CmsCollectorDependencyProvider::getCollectorDataExpanderPlugins`. + +Make sure to update the `CmsBlockCollector` and `CmsCollector` modules as expander plugins were added during this feature release. It's exported to `\Spryker\Shared\CmsContentWidget\CmsContentWidgetConstants::CMS_CONTENT_WIDGET_PARAMETER_MAP`. You can access parameter mapping inside the `$contex` variable when implementing the CMS content function plugin in Yves. + +The `$context` is a special twig function variable that uses twig to pass the data you normally send to the template. This variable has a `cmsContent` key. This key has data from the Yves store. This can be either a CMS page or block data. + +The parameter mapping can be read from: + +```bash +$context['cmsContent'][CmsContentWidgetConstants::CMS_CONTENT_WIDGET_PARAMETER_MAP][$this->widgetConfiguration->getFunctionName()]; +``` + +For example, you can use this method as a basis when implementing `\Spryker\Yves\CmsContentWidget\Dependency\CmsContentWidgetPluginInterface`. + +```php +namespace Spryker\Yves\Module\Plugin; + +class CmsWidgetPlugin extends AbstractPlugin implements CmsContentWidgetPluginInterface +{ + /** + * @return \Callable + */ + public function getContentWidgetFunction() + { + return function (Twig_Environment $twig, array $context, $parameters, $templateIdentifier = null) { + return $twig->render( + $this->resolveTemplatePath($templateIdentifier), + $this->getContent($context, $parameters) + ); + }; + } + + /** + * @param null|string $templateIdentifier + * + * @return string + */ + protected function resolveTemplatePath($templateIdentifier = null) + { + return '@Module/partials/function_template.twig' + } + + /** + * @param array $context + * @param array|string $parameters + * + * @return array + */ + protected function getContent(array $context, $parameters) + { + return []; //return data to be inserted into template + } + + } +``` + +## Provided Plugins + +We provide three CMS content widget plugins . All are currently implemented in the demoshop so you can take them from our repository and integrate in your project. + +Plugin configuration is described below. + +### Zed Plugins + +```php +namespace Pyz\Zed\CmsContentWidget; +class CmsContentWidgetConfig extends SprykerCmsContentConfig +{ + /** + * {@inheritdoc} + * + * @return array|\Spryker\Shared\CmsContentWidget\CmsContentWidget\CmsContentWidgetConfigurationProviderInterface[] + */ + public function getCmsContentWidgetConfigurationProviders() + { + return [ + \Spryker\Shared\CmsContentWidgetProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider(), + \Spryker\Shared\CmsContentWidgetProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider(), + \Spryker\Shared\CmsContentWidgetProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider(), + ]; + } +} +``` + +### Zed CMS Configuration Providers + +```php +namespace Pyz\Zed\CmsContentWidget; +class CmsContentWidgetConfig extends SprykerCmsContentConfig +{ + /** + * {@inheritdoc} + * + * @return array|\Spryker\Shared\CmsContentWidget\CmsContentWidget\CmsContentWidgetConfigurationProviderInterface[] + */ + public function getCmsContentWidgetConfigurationProviders() + { + return [ + \Spryker\Shared\CmsContentWidgetProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider(), + \Spryker\Shared\CmsContentWidgetProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider(), + \Spryker\Shared\CmsContentWidgetProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Shared\CmsProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider(), + ]; + } +} +``` + +### Zed CMS Collector Parameter Mapper Plugins + +```php +namespace Pyz\Zed\CmsContentWidget; + +class CmsContentWidgetDependencyProvider extends SprykerCmsContentWidgetDependencyProvider +{ + + /** + * {@inheritdoc} + * + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array|\Spryker\Zed\CmsContentWidget\Dependency\Plugin\CmsContentWidgetParameterMapperPluginInterface[] + */ + protected function getCmsContentWidgetParameterMapperPlugins(Container $container) + { + return [ + \Spryker\Shared\CmsProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Zed\CmsProductConnector\Communication\Plugin\Cms\CmsProductSkuMapperPlugin(), + \Spryker\Shared\CmsProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Zed\CmsProductSetConnector\Communication\Plugin\Cms\CmsProductSetKeyMapperPlugin(), + \Spryker\Shared\CmsProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider::FUNCTION_NAME => new \Spryker\Zed\CmsProductConnector\Communication\Plugin\Cms\CmsProductSkuMapperPlugin(), + ]; + } + +} +``` + +### Yves Plugin Dependencies + +```php +namespace Pyz\Zed\CmsContentWidget; + +use Spryker\Shared\CmsContentWidgetProductConnector\ContentWidgetConfigurationProvider\CmsProductContentWidgetConfigurationProvider; +use Spryker\Shared\CmsContentWidgetProductGroupConnector\ContentWidgetConfigurationProvider\CmsProductGroupContentWidgetConfigurationProvider; +use Spryker\Shared\CmsContentWidgetProductSetConnector\ContentWidgetConfigurationProvider\CmsProductSetContentWidgetConfigurationProvider; +use Spryker\Zed\CmsContentWidget\CmsContentWidgetConfig as SprykerCmsContentConfig; + +class CmsContentWidgetConfig extends SprykerCmsContentConfig +{ + /** + * {@inheritdoc} + * + * @return array|\Spryker\Shared\CmsContentWidget\Dependency\CmsContentWidgetConfigurationProviderInterface[] + */ + public function getCmsContentWidgetConfigurationProviders() + { + return [ + CmsProductContentWidgetConfigurationProvider::FUNCTION_NAME => new CmsProductContentWidgetConfigurationProvider(), + CmsProductSetContentWidgetConfigurationProvider::FUNCTION_NAME => new CmsProductSetContentWidgetConfigurationProvider(), + CmsProductGroupContentWidgetConfigurationProvider::FUNCTION_NAME => new CmsProductGroupContentWidgetConfigurationProvider(), + ]; + } +} +``` + + + +### Version check when using the widget for CMS blocks + +If you use this widget for CMS Blocks, then check that you have proper versions of your modules as follows: `cms-block >= 1.2.0, cms-block-collector >= 1.1.0, cms-block-gui >= 1.1.0`. diff --git a/_includes/pbc/all/install-features/202602.0/feature-integration-guides.md b/_includes/pbc/all/install-features/202602.0/feature-integration-guides.md new file mode 100644 index 00000000000..129c3b1b6d3 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/feature-integration-guides.md @@ -0,0 +1,9 @@ + + +The integration guides provide step-by-step instructions on how to enable individual Spryker features for your project. + +Because Spryker Commerce OS is a highly modular system, you have total freedom in choosing what features to add to your project. When making a decision to install new features, we recommend not to bloat your project by installing everything, but opt for the features that are really justified in terms of your business needs. + +If you have spotted an issue with either of the guides, feel free to [create an issue](https://github.com/spryker/spryker-docs/issues) or pull request by using the Edit on GitHub option. + +Not found an integration guide you are looking for? Let us know about it by [creating an issue on Github](https://github.com/spryker/spryker-docs/issues) or dropping an email to [documentation@spryker.com](mailto:documentation@spryker.com). diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-availability-notification-feature.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-availability-notification-feature.md new file mode 100644 index 00000000000..c8ac3130759 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-availability-notification-feature.md @@ -0,0 +1,47 @@ +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Availability Notification](/docs/pbc/all/warehouse-management-system/latest/base-shop/availability-notification-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Availability Notification | {{page.release_tag}} | + + +## Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | COMMENTS | +| --- | --- | --- | --- | +| AvailabilityNotificationConstants::REGION_TO_YVES_HOST_MAPPING | Defines regions to Yves host mapping. | Spryker\Shared\AvailabilityNotification | See in `config/Shared/config_default.php` that follows. | + + +**config/Shared/config_default.php** + +```php + getenv('SPRYKER_YVES_HOST_EU'), + 'US' => getenv('SPRYKER_YVES_HOST_US'), +]; +``` + +{% info_block warningBox "Verification" %} + +To verify the email links are correct, make sure that the following configuration is correct: + +1. Add a new product and make it unavailable. +2. As a customer, subscribe to the product's availability notifications on the Storefront. +3. Make the product available. +4. In your mailbox, open the email about the product's availability. +5. Check if the link to the product opens the correct Product Details page. + The link should have the correct hostname. + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cart-feature.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cart-feature.md new file mode 100644 index 00000000000..0b45a8d6d50 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cart-feature.md @@ -0,0 +1,55 @@ +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Cart | {{page.release_tag}} | + +## Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|--------------------|----------------------------------------------------------| +| QuoteSyncDatabaseStrategyReaderPlugin | If persistent strategy is used and `QuoteTransfer.id` is empty, sets the quote retrieved from Persistence in session storage. | None | Spryker\Zed\PriceCartConnector\Communication\Plugin | + + +**src/Pyz/Client/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getDatabaseStrategyReaderPlugins(): array + { + return [ + ... + new QuoteSyncDatabaseStrategyReaderPlugin(), + ... + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When a persistent strategy is used and `QuoteTransfer.id` is empty, make sure the following happens: + +1. A Zed request is made. +2. Using the provided customer, a quote is retrieved from Persistence. +3. The quote retrieved from Persistence is set in session storage. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cms-feature.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cms-feature.md new file mode 100644 index 00000000000..7cddd496626 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-cms-feature.md @@ -0,0 +1,23 @@ +This document describes how to install the [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [CMS](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/cms-feature-overview.html) feature, install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| CMS | {{page.release_tag}} | + +## Troubleshooting + +If you are using the `renderCmsBlockAsTwig()` Twig function in Twig templates, make sure to provide `storeName` name as a parameter. Otherwise, the function throws an exception. + +Example: + +```twig + {% raw %} +{{ renderCmsBlockAsTwig( + 'template-name', + mail.storeName, + mail.locale.localeName, + {mail: mail} +) }} +{% endraw %} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-customer-account-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-customer-account-management-feature.md new file mode 100644 index 00000000000..a1ecc63896e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-customer-account-management-feature.md @@ -0,0 +1,51 @@ +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | + + +## Set up configuration + +Provide a prefix used during customer reference generation. If no prefix is provided, it will use the current store name, which can lead to issues in Dynamic Store setup. + +Add the following configuration in `Pyz\Zed\Customer\CustomerConfig::getCustomerSequenceNumberPrefix()`. + + +**src/Pyz/Zed/Customer/CustomerConfig.php** + +```php + + + + + + + +
    + +
    + +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------------|--------|---------| +| spy_store.fk_currency | column | added | +| spy_currency_store | table | added | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CurrencyCriteria | class | created | src/Generated/Shared/Transfer/CurrencyCriteriaTransfer | +| Store.defaultCurrencyIsoCode | property | added | src/Generated/Shared/Transfer/CustomerTransfer | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure you can add a currency to a store when editing a product in the Back Office. + +{% endinfo_block %} + +## 3) Configure export to the key-value store + +1. Set up publisher plugins: + +| PLUGIN | SPECIFICATION | PRERQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CurrencyStoreWritePublisherPlugin | Publishes store's currencies to the storage table. | None | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher\CurrencyStore | + + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +getStoreStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getStoreStoragePlugins(): array + { + return [ + ... + new CurrencyStoreWritePublisherPlugin(), + ... + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Using the following data, make sure that when you add, update, or delete a store currency, it's exported to or removed from Storage. + +Storage type: Redis or Valkey +Target entity: Store + +Example expected data identifier: `kv:store:de` + +Example expected data fragment: + +```json +{ + "id_store": 1, + "name": "DE", + ... + "default_currency_iso_code": "EUR", + "available_currency_iso_codes": [ + "CHF", + "EUR" + ], + ... +} +``` + +{% endinfo_block %} + + + +## 4) Import data + +Import locale, store, and country data: + +1. Prepare your data according to your requirements using the demo data: + +Example for the DE store currency-store configurations: +**data/import/common/DE/currency_store.csv** + +```csv +currency_code,store_name,is_default +EUR,DE,1 +CHF,DE,0 +``` + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +| --- | --- | --- | --- | --- | +| currency_code | ✓ | string | EUR | Define currency code. | +|store_name |mandatory |string | DE | Defines the store name. | +|is_default |mandatory |bool | 1 | Defines if the currency is default. | + +{% info_block infoBox "Default currency" %} + +There can only be one default currency per store. + +{% endinfo_block %} + +{% info_block warningBox "Import requirements" %} + +- The `.csv` files must have an empty line in the end. +- For each `currency_code` entry in the CSV files, there must be a respective `code` entry in the `spy_currency` database table. + +{% endinfo_block %} + +2. Update the following import action files with the following action: + - `data/import/common/commerce_setup_import_config_{REGION\_STORE}.yml` + - `data/import/local/full\_{REGION\_STORE}.yml` + - `data/import/production/full\_{SPRYKER\_STORE}.yml` + +```yaml +data_import: + - data_entity: currency-store + source: data/import/common/{REGION}/currency_store.csv +``` + +3. To enable data import, register the following plugin: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CurrencyStoreDataImportPlugin | Imports currency-store relations. | None | \Spryker\Zed\CurrencyDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +namespace Pyz\Zed\DataImport; + +use Spryker\Zed\DataImport\DataImportDependencyProvider as SprykerDataImportDependencyProvider; +use Spryker\Zed\CurrencyDataImport\Communication\Plugin\DataImport\CurrencyStoreDataImportPlugin; + +class DataImportDependencyProvider extends SprykerDataImportDependencyProvider +{ + protected function getDataImporterPlugins(): array + { + return [ + ... + new CurrencyStoreDataImportPlugin(), + ... + ]; + } +} +``` + +4. Enable behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . CurrencyDataImportConfig::IMPORT_TYPE_CURRENCY_STORE), + ... + ]; + } + +} +``` + + +5. Import data: + +```bash +vendor/bin/console data:import:currency-store +``` + +{% info_block warningBox "Verification" %} + +Make sure that the currency store data has been added to the `spy_currency_store` table. + +{% endinfo_block %} + + +## 5) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- |----| --- | +| CurrencyBackendGatewayApplicationPlugin | Provides a currency service for the gateway request by getting it from the meta data. | Spryker\Zed\Currency\Communication\Plugin\Application | +| DefaultCurrencyStorePreCreateValidationPlugin | Validates default currency before store is created. | Spryker\Zed\Currency\Communication\Plugin\Store | +| DefaultCurrencyStorePreUpdateValidationPlugin | Validates default currency before store is updated. | Spryker\Zed\Currency\Communication\Plugin\Store | +| CurrencyStorePostUpdatePlugin | Update currency store data after store is updated. | Spryker\Zed\Currency\Communication\Plugin\Store | +| CurrencyStoreCollectionExpanderPlugin | Expands currency store collection. | Spryker\Zed\Currency\Communication\Plugin\Store | +| CurrencyStoreFormExpanderPlugin | Adds currency selection fields to the Store form. | Spryker\Zed\CurrencyGui\Communication\Plugin\StoreGui | +| CurrencyStoreFormViewExpanderPlugin | Adds rendered currency tabs and tables as variables in template. | Spryker\Zed\CurrencyGui\Communication\Plugin\StoreGui | +| CurrencyStoreFormTabExpanderPlugin | Expands Store form with Currencies tab. | Spryker\Zed\CurrencyGui\Communication\Plugin\StoreGui | +| AssignedCurrenciesStoreViewExpanderPlugin | Returns table with assigned currencies. | Spryker\Zed\CurrencyGui\Communication\Plugin\StoreGui | +| CurrencyStoreTableExpanderPlugin | Expands table data rows of store table with currency codes. | Spryker\Zed\CurrencyGui\Communication\Plugin\StoreGui | + + + +**src/Pyz/Zed/Application/ApplicationDependencyProvider.php** + +```php + + */ + protected function getBackendGatewayApplicationPlugins(): array + { + return [ + ... + new CurrencyBackendGatewayApplicationPlugin(), + ... + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the service container has the `currency` service. + +{% endinfo_block %} + +**src/Pyz/Zed/Store/StoreDependencyProvider.php** + +```php + + */ + protected function getStorePreCreateValidationPlugins(): array + { + return [ + ... + new DefaultCurrencyStorePreCreateValidationPlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePreUpdateValidationPluginInterface> + */ + protected function getStorePreUpdateValidationPlugins(): array + { + return [ + ... + new DefaultCurrencyStorePreUpdateValidationPlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePostCreatePluginInterface> + */ + protected function getStorePostCreatePlugins(): array + { + return [ + ... + new CurrencyStorePostCreatePlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePostUpdatePluginInterface> + */ + protected function getStorePostUpdatePlugins(): array + { + return [ + ... + new CurrencyStorePostUpdatePlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StoreCollectionExpanderPluginInterface> + */ + protected function getStoreCollectionExpanderPlugins(): array + { + return [ + ... + new CurrencyStoreCollectionExpanderPlugin(), + ... + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + + +- Create or update a store with a default currency that is not assigned to the store. + This should give you an error message. +- Create or update a store. + This should update the `spy_currency_store` database table with the default currency. Also, this should expand store transfers with currency codes. + +{% endinfo_block %} + + + +
    + src/Pyz/Zed/StoreGui/StoreGuiDependencyProvider.php + +```php + + */ + protected function getStoreFormExpanderPlugins(): array + { + return [ + ... + new CurrencyStoreFormExpanderPlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreFormViewExpanderPluginInterface> + */ + protected function getStoreFormViewExpanderPlugins(): array + { + return [ + ... + new CurrencyStoreFormViewExpanderPlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreFormTabExpanderPluginInterface> + */ + protected function getStoreFormTabsExpanderPlugins(): array + { + return [ + ... + new CurrencyStoreFormTabExpanderPlugin(), + ... + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreViewExpanderPluginInterface> + */ + protected function getStoreViewExpanderPlugins(): array + { + return [ + ... + new AssignedCurrenciesStoreViewExpanderPlugin(), + ... + + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreTableExpanderPluginInterface> + */ + protected function getStoreTableExpanderPlugins(): array + { + return [ + ... + new CurrencyStoreTableExpanderPlugin(), + ... + ]; + } +} + +``` + + + +{% info_block warningBox "Verification" %} + +- Make sure that you can see the currency selection fields on the Store form. +- Make sure that you can see the currency tabs and tables on the Store form. +- Make sure that you can see the Currencies tab on the Store form. +- Make sure that you can see the table with assigned currencies on the Store form. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-product-feature.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-product-feature.md new file mode 100644 index 00000000000..1b997e918c0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore-the-product-feature.md @@ -0,0 +1,53 @@ +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html) + the [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Product | {{page.release_tag}} | + +## Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| StoreProductCategoryListActionViewDataExpanderPlugin | Expands **Overview of Category Filters** page with infromation about stores.| Spryker\Zed\StoreGui\Communication\Plugin\ProductCategoryFilterGui | + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductCategoryListActionViewDataExpanderPlugins(): array + { + return [ + ... + new StoreProductCategoryListActionViewDataExpanderPlugin(), + ... + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following data is displayed on the **Product Category Filter** page: + +- Store +- Category + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore.md new file mode 100644 index 00000000000..4e7d7e185c8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-dynamic-multistore.md @@ -0,0 +1,1688 @@ +This document describes how to install [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/dynamic-multistore-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Dynamic Multistore feature core. + +### Prerequisites for projects below version 202307.0 + +{% info_block warningBox "Project version" %} + +If your project is of version 202307.0 or later, go to [Enable the dynamic store feature](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.html#enable-the-dynamic-store-feature). + +{% endinfo_block %} + +1. Upgrade the following modules: + +| NAME | VERSION | UPGRADE GUIDE | +|----------|---------|---| +| Country | ^4.0.0 | [Upgrade the Country module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.html) | +| Locale | ^4.0.0 | [Upgrade the Locale module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.html) | +| Currency | ^4.0.0 | [Upgrade the Currency module](/docs/pbc/all/dynamic-multistore/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html) | + + +2. Install the following features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +|Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +3. Install the required modules: + +Install the required modules using Composer: + +```bash +composer require "spryker-feature/spryker-core":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CountryDataImport | vendor/spryker/country-data-import | +| СountryGui | vendor/spryker/country-gui | +| LocaleDataImport | vendor/spryker/locale-data-import | +| LocaleGui | vendor/spryker/locale-gui | +| SecurityBlockerStorefrontCustomer |spryker/security-blocker-storefront-customer | +| StoreDataImport | vendor/spryker/store-data-import | +| StoreGui | vendor/spryker/store-gui | +| StoreContext | vendor/spryker/store-context | +| StoreContextGui | vendor/spryker/store-context-gui | +| StoreContextStorage | vendor/spryker/store-context-storage | +| StoreContextDataImport | vendor/spryker/store-context-data-import | + +{% endinfo_block %} + +{% info_block warningBox "Dependencies issues" %} + +You might need to update or install related dependencies. For more details on how to update modules, see [Updating Spryker](/docs/dg/dev/updating-spryker/updating-spryker.html#spryker-product-structure). + +{% endinfo_block %} + + +### 1) Enable the dynamic store feature + +To use the new region configuration, create a new deployment file, like `deploy.dynamic-store.yml` or `deploy.dev.dynamic-store.yml`. Example of file with region configuration: + +
    +deploy.dev.dynamic-store.yml + +```yml +version: '0.1' + +namespace: spryker-dynamic-store +tag: 'dev' + +environment: docker.dev +image: + # ... + environment: + # ... + SPRYKER_DYNAMIC_STORE_MODE: true # This will enable dynamic store be default and will be used by the application to define its behaviour + SPRYKER_YVES_HOST_EU: yves.eu.mysprykershop.com # See the guide for installing dynamic store availability notification feature + node: + version: 16 + npm: 8 + +regions: + EU: + # Services for EU region. Use one of the following services: mail, database, broker, key_value_store, search for all stores in EU region. + # Stores MUST not be defined in the deploy file as it was before because of their dynamic nature + services: + mail: + sender: + name: Spryker No-Reply + email: no-reply@mysprykershop.com + database: + database: eu-docker + username: spryker + password: secret + + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search + # ... + +groups: + EU: + region: EU + applications: + merchant_portal_eu: + application: merchant-portal + endpoints: + mp.eu.mysprykershop.com: # Changed Merchant portal endpoint for EU region. Use new domain name for EU region. + region: EU + entry-point: MerchantPortal + primal: true + services: + session: + namespace: 7 + # Changed Yves endpoint for EU region. Use new domain name for all stores in EU region. + yves_eu: + application: yves + endpoints: + yves.eu.mysprykershop.com: + region: EU # Use region instead store name for all stores in EU region + services: + session: + namespace: 2 + # Same for other endpoints + glue_eu: + application: glue + endpoints: + glue.eu.mysprykershop.com: + region: EU + glue_storefront_eu: + application: glue-storefront + endpoints: + glue-storefront.eu.mysprykershop.com: + region: EU + glue_backend_eu: + application: glue-backend + endpoints: + glue-backend.eu.mysprykershop.com: + region: EU + backoffice_eu: + application: backoffice + endpoints: + backoffice.eu.mysprykershop.com: + region: EU + primal: true + services: + session: + namespace: 3 + backend_gateway_eu: + application: backend-gateway + endpoints: + backend-gateway.eu.mysprykershop.com: + region: EU + primal: true + backend_api_eu: + application: zed + endpoints: + backend-api.eu.mysprykershop.com: + region: EU + entry-point: BackendApi + + US: + # ... + +# ... +docker: + # ... + testing: + region: EU # Use EU region for testing instead store. + +``` + +
    + +In this configuration, region is used for entities like services, endpoints, or applications. The `SPRYKER_DYNAMIC_STORE_MODE` variable enables the dynamic multistore feature. Make sure stores are not used in the new configuration to avoid deployment failures. + + +#### Configure deployment recipe files + + +If you have deployment hooks in the deployment file, you need to remove stores from the recipe files. + +Here's how a deployment files with hooks looks like: + +```yml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +``` + +And here's a recipe file with stores: + +```yml +env: + NEW_RELIC_ENABLED: 0 + +stores: + - DE + - AT + +sections: + ..... +``` + +Remove the stores section and add a region to environment variables: + +```yml +env: + NEW_RELIC_ENABLED: 0 + SPRYKER_CURRENT_REGION: EU + +sections: + ..... +``` + +### 2) Set up configuration + +Before the introduction of dynamic multistore, configuration was managed in `config/Shared/stores.php`. With dynamic multistore, configuration is managed in the database. `config/Shared/stores.php` and `config/Shared/default_store.php` are now obsolete. + +The default configuration is imported using data import modules, such as StoreDataImport, LocaleDataImport, CountryDataImport, and other feature-related imports, like CurrencyDataImport. + +Take the following steps to set up configuration. + +#### Define the region stores context by domain + +With dynamic multistore, you can define region or store using domains or headers. We recommend defining region using domains. + +{% info_block infoBox "Changing the domain name" %} + +To preserve the availability of old links in search engines, we recommend making `de.mysprykershop.com` a mirror of `eu.mysprykershop.com`. + +{% endinfo_block %} + + +#### Configure the application + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------|---------------| --- | +| Default RabbitMQ connection configuration: `config/Shared/config_default.php`. | Enables the connection for queues to be set dynamically. Use the `SPRYKER_CURRENT_REGION` environment variable to set the configuration for queues. | | +| RabbitMqConfig::getQueuePools() | Configures queue pools for regions. | Pyz\Client\RabbitMq | +| RabbitMqConfig::getDefaultLocaleCode() | Returns the default locale code. | Pyz\Client\RabbitMq | +| RabbitMqConfig::getSynchronizationQueueConfiguration() | Adds `1StoreStorageConfig::STORE_SYNC_STORAGE_QUEUE1` to configure the sync queue. | Pyz\Client\RabbitMq | +| StoreStorageConfig::STORE_SYNC_STORAGE_QUEUE | Configures the sync queue name to be used for processing store messages. | Pyz\Zed\StoreStorage | + + +2. Update the configuration: +**config/Shared/config_default.php** + +Original configuration: + +```php + $connection) { + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key] = $defaultConnection; + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_CONNECTION_NAME] = $key . '-connection'; + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_STORE_NAMES] = [$key]; + foreach ($connection as $constant => $value) { + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][constant(RabbitMqEnv::class . '::' . $constant)] = $value; + } + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_DEFAULT_CONNECTION] = $key === APPLICATION_STORE; +} +``` + +Updated configuration: + +```php +$config[RabbitMqEnv::RABBITMQ_CONNECTIONS] = []; +$connectionKeys = array_keys($rabbitConnections); +$defaultKey = reset($connectionKeys); + +if (getenv('SPRYKER_CURRENT_REGION')) { + $defaultKey = getenv('SPRYKER_CURRENT_REGION'); +} + +if (getenv('APPLICATION_STORE') && (bool)getenv('SPRYKER_DYNAMIC_STORE_MODE') === false) { + $defaultKey = getenv('APPLICATION_STORE'); +} + +foreach ($rabbitConnections as $key => $connection) { + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key] = $defaultConnection; + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_CONNECTION_NAME] = $key . '-connection'; + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_STORE_NAMES] = [$key]; + + foreach ($connection as $constant => $value) { + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][constant(RabbitMqEnv::class . '::' . $constant)] = $value; + } + + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_DEFAULT_CONNECTION] = $key === $defaultKey; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can run `vendor/bin/console queue:setup` with a successful result. + +{% endinfo_block %} + +
    +src/Pyz/Client/RabbitMq/RabbitMqConfig.php + +```php +> + */ + public function getQueuePools(): array + { + return [ + 'synchronizationPool' => $this->getQueueConnectionNames(), + ]; + } + + /** + * @return string|null + */ + public function getDefaultLocaleCode(): ?string + { + return 'en_US'; + } + + + /** + * @return array + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ... + StoreStorageConfig::STORE_SYNC_STORAGE_QUEUE, + ... + ]; + } + + /** + * @return array + */ + protected function getQueueConnectionNames(): array + { + return array_map( + function (array $connection): string { + return $connection[RabbitMqEnv::RABBITMQ_CONNECTION_NAME]; + }, + $this->get(RabbitMqEnv::RABBITMQ_CONNECTIONS), + ); + } +} + +``` + +
    + +{% info_block warningBox "Verification" %} + +Run `vendor/bin/console queue:worker:start` and make sure RabbitMQ connection errors are not returned. + +{% endinfo_block %} + +#### Configure Jenkins + +With the dynamic store setup, commands for Jenkins are executed per region instead of per store. The command for Jenkins uses the `SPRYKER_CURRENT_REGION` variable instead of `APPLICATION_STORE`. + +1. In `config/Zed/cronjobs/jenkins.php`, remove the `$allStores` variable and its usage in the configuration of the jobs through the `stores` parameter. Example of updated job configuration: + +```php +$jobs[] = [ + 'name' => 'job-name', + 'command' => '$PHP_BIN vendor/bin/console product:check-validity', + 'schedule' => '0 6 * * *', + 'enable' => true, +]; +``` + +2. Remove the following configuration if exists: + + +```php +$stores = require(APPLICATION_ROOT_DIR . '/config/Shared/stores.php'); + +$allStores = array_keys($stores); + +``` + + +3. Add the following to the end of the jobs configuration file: + +```php + +if (getenv('SPRYKER_CURRENT_REGION')) { + foreach ($jobs as $job) { + $job['region'] = getenv('SPRYKER_CURRENT_REGION'); + } +} +``` + +For an example of an updated file, see [jenkins.php in the Spryker Suite repository](https://github.com/spryker-shop/suite/blob/master/config/Zed/cronjobs/jenkins.php). + +{% info_block warningBox "Verification" %} + +1. Remove Jenkins jobs per store: + +```bash +vendor/bin/console scheduler:clean +``` + +If any jobs have not been automatically removed, remove them manually. + +2. Set up Jenkins jobs: + +```bash +vendor/bin/console scheduler:setup +``` + +Make sure jobs with region configuration have been created. + +{% endinfo_block %} + + +4. Enable the queue to publish `Store` data to the `Storage`. + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + StoreStorageConfig::STORE_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + + +5. Set up the queue infrastructure: + +```bash +vendor/bin/console queue:setup +``` + +{% info_block warningBox "Verification" %} + +Make sure the `sync.storage.store` queue exists in RabbitMQ. + +{% endinfo_block %} + + + +### 3) Set up the database schema and transfer objects + +1. Adjust the schema definition so entity change triggers events: + +**src/Pyz/Zed/Country/Persistence/Propel/Schema/spy_country.schema.xml** + +```xml + + + + + + + + +
    + +
    + +``` + +**src/Pyz/Zed/Locale/Persistence/Propel/Schema/spy_locale.schema.xml** + +```xml + + + + + + + +
    + +
    + +``` + +**src/Pyz/Zed/Store/Persistence/Propel/Schema/spy_store.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/StoreContext/Persistence/Propel/Schema/spy_store_context.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------------|--------|---------| +| spy_store.fk_locale | column | added | +| spy_country_store | table | added | +| spy_locale_store | table | added | +| spy_store_context | table | added | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + + +1. Stop the scheduler: + +```bash +vendor/bin/console scheduler:suspend +``` + +2. In the Back Office, set up a store with a country and locale. + Make sure the store is created successfully. + +3. Restart the scheduler: + +```bash +vendor/bin/console scheduler:resume +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| LocaleConditions | class | created | src/Generated/Shared/Transfer/LocaleConditionsTransfer | +| StoreApplicationContext | class | created | src/Generated/Shared/Transfer/StoreApplicationContextTransfer | +| StoreApplicationContextCollection | class | created | src/Generated/Shared/Transfer/StoreApplicationContextCollectionTransfer | +| SearchContext.storeName | property | added | src/Generated/Shared/Transfer/SearchContextTransfer | +| SchedulerJob.region | property | added | src/Generated/Shared/Transfer/SchedulerJobTransfer | +| ProductConcrete.stores | property | added | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| Customer.storeName | property | added | src/Generated/Shared/Transfer/CustomerTransfer | +| Store.applicationContextCollection | property | added | src/Generated/Shared/Transfer/StoreTransfer | +| StoreStorage.applicationContextCollection | property | added | src/Generated/Shared/Transfer/StoreStorageTransfer | + + +{% endinfo_block %} + + +### 4) Configure export to Storage + +1. Set up publisher plugins and trigger plugins: + +| PLUGIN | SPECIFICATION | PRERQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| StoreWritePublisherPlugin | Publishes store data to storage table. | | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher\Store | +| StoreSynchronizationTriggeringPublisherPlugin | Publishes store data to a synchronization queue. | | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher\Store | +| LocaleStoreWritePublisherPlugin | Publishes locale store data to a storage table. | | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher\LocaleStore | +| CountryStoreWritePublisherPlugin | Publishes country store data to a storage table. | | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher\CountryStore | +| ContextStoreWritePublisherPlugin | Publishes store context data to a storage table. | | Spryker\Zed\StoreContextStorage\Communication\Plugin\Publisher\ContextStoreWritePublisherPlugin| +| StorePublisherTriggerPlugin | Retrieves store data based on the provided limit and offset. | | Spryker\Zed\StoreStorage\Communication\Plugin\Publisher | + + +
    +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + + +```php +getStoreStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getStoreStoragePlugins(): array + { + return [ + new StoreWritePublisherPlugin(), + new StoreSynchronizationTriggeringPublisherPlugin(), + new CountryStoreWritePublisherPlugin(), + new LocaleStoreWritePublisherPlugin(), + new ContextStoreWritePublisherPlugin(), + + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new StorePublisherTriggerPlugin(), + ]; + } +} +``` + +
    + + +{% info_block warningBox "Verification" %} + +When a store's data is created, updated, or deleted, including local and country information, make sure it's correctly exported to or removed from the key-value store, such as Redis or Valkey. + +Storage type: Redis or Valkey +Target entity: Store + +Example expected data identifier: `kv:store:de` + +Example expected data fragment: + +```json +{ + "id_store": 1, + "name": "DE", + "default_locale_iso_code": "en_US", + "default_currency_iso_code": "EUR", + "available_currency_iso_codes": [ + "EUR", + "CHF" + ], + "available_locale_iso_codes": [ + "en_US", + "de_DE" + ], + "stores_with_shared_persistence": [], + "countries": [ + "DE", + "CH" + ], + "country_names": [ + "Germany", + "Switzerland" + ], + "application_context_collection": { + "application_contexts": [ + { + "application": null, + "timezone": "Europe/Berlin" + } + ] + }, + "_timestamp": 100000000.000000 +} +``` + +{% endinfo_block %} + +### 5) Import data + +Import locale, store, and country data: + +1. Prepare your data according to your requirements using our demo data: + +Example of locales configuration for the DE store: + +| COLUMN | REQUIRED | Data Type | Data Example | Data Explanation | +|------------| --- | --- | --- | --- | +|name | ✓ | string | DE | Define store name. | + +**data/import/common/{REGION}/store.csv** + +```csv +name +DE +AT + +``` + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +|------------| --- | --- | --- | --- | +|name | ✓ |string | DE | Define store name. | + +**data/import/common/DE/locale_store.csv** + +```csv +locale_name,store_name +en_US,DE +de_DE,DE + +``` + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +| --- | --- | --- | --- | --- | +| locale_name | ✓ | string | en_US | Locale name. | + |store_name | ✓ |string | DE | Store name. | + + +Example of the default locale configuration for the DE store: + +**data/import/common/DE/default_locale_store.csv** + +```csv +locale_name,store_name +en_US,DE + +``` + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +| --- | --- | --- | --- | --- | +| locale_name | ✓ | string | en_US | Locale name. | +| store_name |✓ |string | DE | Store name. | + + +Example of country-store configuration for the DE store: + +**data/import/common/DE/country_store.csv** + +```csv +store_name,country +DE,DE +DE,FR + +``` + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +| --- | --- | --- | --- | --- | +| country | ✓ | string | DE | Country code. | +| store_name |✓ |string | DE | Store name. | + +**data/import/common/DE/store_context.csv** + +```csv +store_name,application_context_collection +DE,"[{""application"": null, ""timezone"": ""Europe/Berlin""}]" +``` + + +| Column | REQUIRED | Data Type | Data Example | Data Explanation | +| --- | --- | --- | --- | --- | +| store_name |mandatory |string | DE | Define store name. | +| application_context_collection | ✓ | string | `[{""application"": null, ""timezone"": ""Europe/Berlin""}]` | Defines a store context collection in JSON. | + + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- For each `store_name` entry in the imported CSV files, a respective `name` entry has been added to the `spy_store` database table. +- For each `locale_name` entry in the imported CSV files, a respective `locale_name` entry has been added to the `spy_locale` database table. + +{% endinfo_block %} + + +2. Update the following import action files with the following action: + - `data/import/common/commerce_setup_import_config_{REGION\STORE}.yml` + - `data/import/local/full\_{REGION\STORE}.yml` + - `data/import/production/full\_{SPRYKER\STORE}.yml` + +```yaml +data_import: + - data_entity: store + source: data/import/common/{REGION}/store.csv + - data_entity: country-store + source: data/import/common/{REGION}/country_store.csv + - data_entity: locale-store + source: data/import/common/{REGION}/locale_store.csv + - data_entity: default-locale-store + source: data/import/common/{REGION}/default_locale_store.csv + - data_entity: context-store + source: data/import/common/{REGION}/store_context.csv +``` + + +3. Adjust `src/Pyz/Zed/DataImport/DataImportConfig.php` to set up data file paths: + +```php +namespace Pyz\Zed\DataImport; + + +use Spryker\Zed\DataImport\DataImportConfig as SprykerDataImportConfig; + +class DataImportConfig extends SprykerDataImportConfig +{ + public function getDefaultYamlConfigPath(): ?string + { + $regionDir = defined('APPLICATION_REGION') ? APPLICATION_REGION : 'EU'; + + return APPLICATION_ROOT_DIR . DIRECTORY_SEPARATOR . 'data/import/local/full_' . $regionDir . '.yml'; + } +} +``` + +3. Register the following plugins to enable data import: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- |----------------------------------------------------------| --- | --- | +| StoreDataImportPlugin | Imports stores. | | \Spryker\Zed\StoreDataImport\Communication\Plugin\DataImport | +| CountryStoreDataImportPlugin | Imports country to store relations. | | \Spryker\Zed\CountryDataImport\Communication\Plugin\DataImport | +| LocaleStoreDataImportPlugin | Imports locale to store relations. | | \Spryker\Zed\LocaleDataImport\Communication\Plugin\DataImport | +| DefaultLocaleStoreDataImportPlugin | Imports default locale to store relations. | | \Spryker\Zed\LocaleDataImport\Communication\Plugin\DataImport | +| StoreContextDataImportPlugin | Imports store application contexts like timezone. | | \Spryker\Zed\StoreContextDataImport\Communication\Plugin\DataImport | + + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +namespace Pyz\Zed\DataImport; + +use Spryker\Zed\Kernel\Container; +use Spryker\Zed\DataImport\DataImportDependencyProvider as SprykerDataImportDependencyProvider; +use Spryker\Zed\StoreDataImport\Communication\Plugin\DataImport\StoreDataImportPlugin; +use Spryker\Zed\LocaleDataImport\Communication\Plugin\DataImport\DefaultLocaleStoreDataImportPlugin; +use Spryker\Zed\LocaleDataImport\Communication\Plugin\DataImport\LocaleStoreDataImportPlugin; +use Spryker\Zed\CountryDataImport\Communication\Plugin\DataImport\CountryStoreDataImportPlugin; +use Spryker\Zed\StoreContextDataImport\Communication\Plugin\DataImport\StoreContextDataImportPlugin; + +class DataImportDependencyProvider extends SprykerDataImportDependencyProvider +{ + protected function getDataImporterPlugins(): array + { + return [ + new StoreDataImportPlugin(), + new CountryStoreDataImportPlugin(), + new LocaleStoreDataImportPlugin(), + new DefaultLocaleStoreDataImportPlugin(), + new StoreContextDataImportPlugin(), + ]; + } +} +``` + +4. Enable behaviors by registering the console commands: + +
    + src/Pyz/Zed/Console/ConsoleDependencyProvider.php + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . CountryDataImportConfig::IMPORT_TYPE_COUNTRY_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . LocaleDataImportConfig::IMPORT_TYPE_LOCALE_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . LocaleDataImportConfig::IMPORT_TYPE_DEFAULT_LOCALE_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . StoreContextDataImportConfig::IMPORT_TYPE_STORE_CONTEXT), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . StoreDataImportConfig::IMPORT_TYPE_STORE), + ]; + } + +} +``` + +
    + + +5. Import data: + +```bash +vendor/bin/console data:import:locale-store +vendor/bin/console data:import:default-locale-store +vendor/bin/console data:import:country-store +vendor/bin/console data:import:context-store +``` + +{% info_block warningBox "Verification" %} + +Make sure the data for locale-store and country-store relationships have been added to the `spy_locale_store` and `spy_country_store` tables. + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| StoreStorageStoreExpanderPlugin | Expands store on store getting. | | Spryker\Client\StoreStorage\Plugin\Store | +| TimezoneStoreStorageStoreExpanderPlugin | Expands store with a timezone. | | Spryker\Client\StoreContextStorage\Plugin\Store | +| StoreMetaDataProviderPlugin | Provides store metadata. | | Spryker\Client\Store\Plugin\ZedRequest | +| LocaleMetaDataProviderPlugin | Provides locale metadata. | | Spryker\Client\Locale\Plugin\ZedRequest | +| ConsoleLocaleApplicationPlugin |Provides a locale service. | | Spryker\Zed\Locale\Communication\Plugin\Application | +| BackofficeStoreApplicationPlugin | Provides a store service. | | Spryker\Zed\Store\Communication\Plugin\Application | +| RequestBackendGatewayApplicationPlugin | Provides a zed request service. | | Spryker\Zed\ZedRequest\Communication\Plugin\Application | +| StoreBackendGatewayApplicationPlugin | Provides a store service. | | Spryker\Zed\Store\Communication\Plugin\Application | +| LocaleBackendGatewayApplicationPlugin | Provides a locale service. | | Spryker\Zed\Locale\Communication\Plugin\Application | +| DefaultLocaleStorePreCreateValidationPlugin | Validates the default locale before a store is created. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| DefaultLocaleStorePreUpdateValidationPlugin | Validates the default locale before a store is updated. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| ContextStorePreCreateValidationPlugin | Validates store application context before a store is created. | | Spryker\Zed\StoreContext\Communication\Plugin\Store | +| ContextStorePreUpdateValidationPlugin | Validates store application context before a store is updated. | | Spryker\Zed\StoreContext\Communication\Plugin\Store | +| CountryStorePostCreatePlugin | Updates country store data after a store is created. | | Spryker\Zed\Country\Communication\Plugin\Store | +| DefaultLocaleStorePostCreatePlugin | Updates default locale data after a store is created. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| LocaleStorePostCreatePlugin | Updates locale store data after a store is created. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| SearchSetupSourcesStorePostCreatePlugin | Updates search setup after a store is created. | | Spryker\Zed\Search\Communication\Plugin\Store | +| ContextStorePostCreatePlugin | Updates store context after a store is created. | | Spryker\Zed\StoreContext\Communication\Plugin\Store | +| CountryStorePostUpdatePlugin | Updates country store data after a store is updated. | | Spryker\Zed\Country\Communication\Plugin\Store | +| DefaultLocaleStorePostUpdatePlugin | Updates default locale data after a store is updated. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| ContextStorePostUpdatePlugin | Updates store context after the store is updated. | | Spryker\Zed\StoreContext\Communication\Plugin\Store | +| LocaleStorePostUpdatePlugin | Updates locale store data after a store is updated. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| CountryStoreCollectionExpanderPlugin | Expands a country store collection. | | Spryker\Zed\Country\Communication\Plugin\Store | +| LocaleStoreCollectionExpanderPlugin | Expands a locale store collection. | | Spryker\Zed\Locale\Communication\Plugin\Store | +| LocaleStoreFormExpanderPlugin | Adds locale selection fields to the Store form. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| CountryStoreFormExpanderPlugin | Adds country selection fields to the Store form. | | Spryker\Zed\CountryGui\Communication\Plugin\StoreGui | +| LocaleStoreFormViewExpanderPlugin | Adds rendered locale tabs and tables as variables in a template. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| CountryStoreFormViewExpanderPlugin | Adds rendered country tabs and tables as variables in a template. | | Spryker\Zed\CountryGui\Communication\Plugin\StoreGui | +| ContextStoreFormExpanderPlugin | Expands the store form with application and timezone dropdowns. | | Spryker\Zed\StoreContextGui\Communication\Plugin\StoreGui | +| LocaleStoreFormTabExpanderPlugin | Expands the Store form with the Locales tab. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| CountryStoreFormTabExpanderPlugin | Expands the Store form with the Countries tab. | | Spryker\Zed\CountryGui\Communication\Plugin\StoreGui | +| ContextStoreFormTabExpanderPlugin | Expands Store form with the application context tab. | | Spryker\Zed\StoreContextGui\Communication\Plugin\StoreGui | +| DefaultLocaleStoreViewExpanderPlugin | Returns a template path for the default locale and default locale ISO code. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| AssignedLocalesStoreViewExpanderPlugin | Returns a table with assigned locales. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| AssignedCountriesStoreViewExpanderPlugin | Returns a table with assigned countries. | | Spryker\Zed\CountryGui\Communication\Plugin\StoreGui | +| LocaleStoreTableExpanderPlugin | Expands the locale table with a store column. | | Spryker\Zed\LocaleGui\Communication\Plugin\StoreGui | +| CountryStoreTableExpanderPlugin | Expands table data rows of the store table with country codes. | | Spryker\Zed\CountryGui\Communication\Plugin\StoreGui | +| ContextStoreCollectionExpanderPlugin | Expands a store collection with application contexts. | | Spryker\Zed\StoreContext\Communication\Plugin\Store | + + +**src/Pyz/Client/Store/StoreDependencyProvider.php** + +```php + + */ + protected function getStoreExpanderPlugins(): array + { + return [ + new StoreStorageStoreExpanderPlugin(), + new TimezoneStoreStorageStoreExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure `StoreTransfer` has been expanded with store data, like countries or currency ISO codes, from the database. + +{% endinfo_block %} + + +**src/Pyz/Client/ZedRequest/ZedRequestDependencyProvider.php** + +```php + + */ + protected function getMetaDataProviderPlugins(): array + { + return [ + 'store' => new StoreMetaDataProviderPlugin(), + 'locale' => new LocaleMetaDataProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure `store` and `locale` metadata is provided with Zed requests. + +{% endinfo_block %} + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + public function getApplicationPlugins(Container $container): array + { + $applicationPlugins = parent::getApplicationPlugins($container); + + $applicationPlugins[] = new ConsoleLocaleApplicationPlugin(); + + return $applicationPlugins; + } + +} +``` + +**src/Pyz/Zed/Application/ApplicationDependencyProvider.php** + +```php + + */ + protected function getBackofficeApplicationPlugins(): array + { + return [ + new BackofficeStoreApplicationPlugin(), + ]; + } + + + /** + * @return array<\Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface> + */ + protected function getBackendGatewayApplicationPlugins(): array + { + return [ + new RequestBackendGatewayApplicationPlugin(), + new StoreBackendGatewayApplicationPlugin(), + new LocaleBackendGatewayApplicationPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/Store/StoreDependencyProvider.php + +```php + + */ + protected function getStorePreCreateValidationPlugins(): array + { + return [ + new DefaultLocaleStorePreCreateValidationPlugin(), + new ContextStorePreCreateValidationPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePreUpdateValidationPluginInterface> + */ + protected function getStorePreUpdateValidationPlugins(): array + { + return [ + new DefaultLocaleStorePreUpdateValidationPlugin(), + new ContextStorePreUpdateValidationPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePostCreatePluginInterface> + */ + protected function getStorePostCreatePlugins(): array + { + return [ + new CountryStorePostCreatePlugin(), + new DefaultLocaleStorePostCreatePlugin(), + new LocaleStorePostCreatePlugin(), + new SearchSetupSourcesStorePostCreatePlugin(), + new ContextStorePostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StorePostUpdatePluginInterface> + */ + protected function getStorePostUpdatePlugins(): array + { + return [ + new CountryStorePostUpdatePlugin(), + new DefaultLocaleStorePostUpdatePlugin(), + new LocaleStorePostUpdatePlugin(), + new ContextStorePostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreExtension\Dependency\Plugin\StoreCollectionExpanderPluginInterface> + */ + protected function getStoreCollectionExpanderPlugins(): array + { + return [ + new CountryStoreCollectionExpanderPlugin(), + new LocaleStoreCollectionExpanderPlugin(), + new ContextStoreCollectionExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- When you try to create a store with a default locale that is not assigned to the store, an error message is returned. +- When you try to update a store with a default locale that is not assigned to the store, an error message is returned. +- You can create a store with countries assigned to it. +- You can update a store with a default locale assigned to it. +- You can create a store with locales assigned to it. +- You can update a store with countries assigned to it. +- You can update a store with a default locale assigned to it. +- You can update a store with locales assigned to it. +- You can create a store with a store context assigned to it. +- You can update a store with a store context assigned to it. + +{% endinfo_block %} + +
    +src/Pyz/Zed/StoreGui/StoreGuiDependencyProvider.php + +```php + + */ + protected function getStoreFormExpanderPlugins(): array + { + return [ + new LocaleStoreFormExpanderPlugin(), + new CountryStoreFormExpanderPlugin(), + new ContextStoreFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreFormViewExpanderPluginInterface> + */ + protected function getStoreFormViewExpanderPlugins(): array + { + return [ + new LocaleStoreFormViewExpanderPlugin(), + new CountryStoreFormViewExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreFormTabExpanderPluginInterface> + */ + protected function getStoreFormTabsExpanderPlugins(): array + { + return [ + new LocaleStoreFormTabExpanderPlugin(), + new CountryStoreFormTabExpanderPlugin(), + new ContextStoreFormTabExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreViewExpanderPluginInterface> + */ + protected function getStoreViewExpanderPlugins(): array + { + return [ + new DefaultLocaleStoreViewExpanderPlugin(), + new AssignedLocalesStoreViewExpanderPlugin(), + new AssignedCountriesStoreViewExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StoreGuiExtension\Dependency\Plugin\StoreTableExpanderPluginInterface> + */ + protected function getStoreTableExpanderPlugins(): array + { + return [ + new LocaleStoreTableExpanderPlugin(), + new CountryStoreTableExpanderPlugin(), + ]; + } +} + +``` + +
    + +{% info_block warningBox "Verification" %} + +- Make sure the locale selection fields are displayed on the Store form. +- Make sure the country selection fields are displayed on the Store form. +- Make sure the rendered locale tabs and tables are displayed on the Store form. +- Make sure the rendered country tabs and tables are displayed on the Store form. +- Make sure the **Locales** tab is displayed on the Store form. +- Make sure the **Countries** tab is displayed on the Store form. +- Make sure the **Settings** tab is displayed on the Store form. +- Make sure the default locale ISO code is displayed on the Store view page. +- Make sure the table with assigned locales is displayed on the Store view page. +- Make sure the table with assigned countries is displayed on the Store view page. +- Make sure the locale codes are displayed in the store table. +- Make sure the countries are displayed in the store table. + +{% endinfo_block %} + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +|Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require "spryker-feature/spryker-core":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| StoreWidget | vendor/spryker-shop/store-widget | + +{% endinfo_block %} + + +### 2) Add translations + +1. Append the glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +store_widget.switcher.store,Store:,en_US +store_widget.switcher.store,Shop:,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + + +### 3) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------| --- | --- | +| RouterConfig::getAllowedLanguages() | Returns a list of supported languages for Route manipulation. Used to strip a route of language information before it's matched. | Spryker\Yves\Router | +| RouterConfig::getAllowedStores() | Returns a list of supported stores for Route manipulation. Used to strip a route of store information before it's matched. | Spryker\Yves\Router | + + +**src/Pyz/Yves/Router/RouterConfig.php** + +```php + + */ + public function getAllowedLanguages(): array + { + return (new Container())->getLocator()->locale()->client()->getAllowedLanguages(); + } + + /** + * @return array + */ + public function getAllowedStores(): array + { + return (new Container())->getLocator()->storeStorage()->client()->getStoreNames(); + } +} +``` + +### 4) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| StoreSwitcherWidget | Displays a store dropdown. | | SprykerShop\Yves\StoreWidget\Widget | + + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new StoreApplicationPlugin(), + ]; + } +} +``` + + +## Launch and set up environment locally + +{% info_block warningBox "" %} + +To enable Dynamic Multistore in a production environment, see [Enable Dynamic Multistore](/docs/pbc/all/dynamic-multistore/latest/base-shop/enable-dynamic-multistore.html). + +{% endinfo_block %} + +Rebuild the application with assets and activate new endpoints: + +```bash +docker/sdk boot && docker/sdk up --assets +``` + +{% info_block warningBox "Verification" %} + +- Make sure your store is accessible at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. +- Make sure the store switcher is displayed on the Storefront. + +{% endinfo_block %} + +## Add store name to Storefront URLs + +If you want a store name as part of the URL path, follow the steps below. + +{% info_block warningBox "Verification" %} + +If you're using internal URLs in Twig templates, now they must be wrapped using the `generatePath()` Twig function provided by the `GeneratePathTwigPlugin` plugin. This ensures the URLs contain the necessary context, such as a store name, based on the current request. + +{% endinfo_block %} + +1. Configure store name in URLs: + +**config/Shared/config_default.php** + +```php + + */ + protected function getRouterEnhancerPlugins(): array + { + return [ + new StorePrefixRouterEnhancerPlugin(), + new LanguagePrefixRouterEnhancerPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/StorageRouter/StorageRouterDependencyProvider.php** + +```php + + */ + protected function getStorageRouterEnhancerPlugins(): array + { + return [ + new StorePrefixStorageRouterEnhancerPlugin(), + ]; + } +} +``` + +{% info_block infoBox "" %} + +`LanguagePrefixRouterEnhancerPlugin` isn't needed for `StorageRouter` because the language is already part of the URL for `StorageRouter`. + +{% endinfo_block %} + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new GeneratePathTwigPlugin(), + ]; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-backend-api-glue-json-api-convention.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-backend-api-glue-json-api-convention.md new file mode 100644 index 00000000000..6d94b80100b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-backend-api-glue-json-api-convention.md @@ -0,0 +1,140 @@ + + + +This document describes how to install the Glue JSON:API convention for Backend API application. + +## Install feature core + +Follow the steps below to install the Glue JSON:API convention core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker/glue-backend-api-application-glue-json-api-convention-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +| MODULE | EXPECTED DIRECTORY | +|---------------------------------------------------------|--------------------------------------------------------------------------------| +| GlueBackendApiApplicationGlueJsonApiConventionConnector | vendor/spryker/glue-backend-api-application-glue-json-api-convention-connector | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfers: + +```bash +vendor/bin/console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------|-------|---------|-----------------------------------------------------------------------| +| GlueRequest | class | created | src/Generated/Shared/Transfer/GlueRequestTransfer.php | +| ApiApplicationSchemaContext | class | created | src/Generated/Shared/Transfer/ApiApplicationSchemaContextTransfer.php | +| RelationshipPluginsContext | class | created | src/Generated/Shared/Transfer/RelationshipPluginsContextTransfer.php | +| ResourceContext | class | created | src/Generated/Shared/Transfer/ResourceContextTransfer.php | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +|-------------------------------------------|----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------| +| RelationshipPluginsContextExpanderPlugin | Adds resource relationships to the documentation generation context. | Spryker\\Glue\\GlueBackendApiApplicationGlueJsonApiConventionConnector\\Plugin\\DocumentationGeneratorApi | +| BackendApiRelationshipProviderPlugin | Provides a collection of resource relationships for the backend API application. | Spryker\\Glue\\GlueBackendApiApplicationGlueJsonApiConventionConnector\\Plugin\\GlueBackendApiApplication | + +**Glue/DocumentationGeneratorApi/DocumentationGeneratorApiDependencyProvider.php** + +```php +getApiApplicationProviderPlugins() as $apiApplicationProviderPlugin) { + $apiApplications[] = $apiApplicationProviderPlugin->getName(); + } + $contextExpanderCollection->addApplications($apiApplications); + + $contextExpanderCollection->addExpander(new BackendRelationshipPluginsContextExpanderPlugin(), [static::GLUE_BACKEND_API_APPLICATION_NAME]); + + return $contextExpanderCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +To make sure that `RelationshipPluginsContextExpanderPlugin` is setup correctly, generate the documentation for `backend` by passing the optional `--application` parameter: + +```bash +vendor/bin/glue api:generate:documentation --application backend +``` + +Make sure only the backend application documentation has been generated with related relationships. + +{% endinfo_block %} + +**src/Pyz/Glue/GlueJsonApiConvention/GlueJsonApiConventionDependencyProvider.php** + +```php + + */ + public function getRelationshipProviderPlugins(): array + { + return [ + new BackendApiRelationshipProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify that everything is set up correctly and that you can access the endpoint, see [Create backend resources](/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.html). + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-glue-api.md new file mode 100644 index 00000000000..a37d4d05267 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-glue-api.md @@ -0,0 +1,367 @@ + + +Functionally, Spryker API can be split into 2 parts: API infrastructure (GLUE) and feature modules. The infrastructure provides the general functionality of the API layer, while each feature module implements a specific resource or resource relation. + +To integrate GLUE API in your project, you need to: + +- [1. Installing GLUE](#1-installing-glue) +- [2. Enabling GLUE](#enabling-glue) +- [Integrate REST API resources](#integrate-rest-api-resources) + +## 1. Installing GLUE + +GLUE infrastructure is shipped with the following modules: + +| MODULE | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| [GlueApplication](https://github.com/spryker/glue-application) | v |Provides API infrastructure for Spryker features.| +| [GlueApplicationExtension](https://github.com/spryker/glue-application-extension) | v |Provides extension point/plugin interfaces for the Glue Application module. | +| [AuthRestApi](https://github.com/spryker/auth-rest-api) | | Provides API endpoints to obtain an authentication token to use for subsequent requests. | + +To install it, you need to do the following: + +{% info_block warningBox "Note" %} + +Spryker Shop Suite contains GLUE out of the box. If your project has the latest Shop Suite master merged, you can proceed directly to step 2. Enable GLUE. + +{% endinfo_block %} + +1. Install the required modules using Composer: + + ```bash + composer update "spryker/*" "spryker-shop/*" --update-with-dependencies + composer require spryker/glue-application --update-with-dependencies + ``` + +2. Add a Front Controller for GLUE: + - In the directory where your code is installed, locate a directory public and create a subdirectory Glue in it. + - Create a file index.php in the Glue directory with the following content: + +```php +initialize(); + +$bootstrap = new GlueBootstrap(); +$bootstrap + ->boot() + ->run(); +``` + +3. Create GLUE application bootstrap: + - In the `src/Pyz` directory of your Spryker code installation, create a folder Glue, then create a subfolder `GlueApplication/Bootstrap` in it. + - In the GlueApplication/Bootstrap folder, create file GlueBootstrap.php with the following content: + +```php +'; +$config[GlueApplicationConstants::GLUE_APPLICATION_REST_DEBUG] = false; +``` + +where **** is the URL domain you want to use for GLUE. If you want to use the default domain of the Spryker shop, you can leave it empty. + +{% info_block infoBox "Tip" %} + +If you want to enable GLUE application debugging, set the `GLUE_APPLICATION_REST_DEBUG` variable to true. + +{% endinfo_block %} + +6. Optional: Enable customer authentication via OAuth tokens: + +GLUE provides the possibility to authenticate customer users with the help of OAuth tokens. If you are going to use customer authentication, you will also need to perform the following additional steps: + +- Install the `AuthRestApi` and `OauthCustomerConnector` modules: + +```yaml +composer require spryker/auth-rest-api spryker/oauth-customer-connector --update-with-dependencies +``` + +- Add OAuth plugins to the GLUE dependency provider. To do this, open file `src/Pyz/GlueApplication/GlueApplicationDependencyProvider.php` and make the following changes: +Add use statements for the required OAuth plugins: + +```php +... +namespace Pyz\Glue\GlueApplication; + +use Spryker\Glue\AuthRestApi\Plugin\AccessTokensResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\FormatAuthenticationErrorResponseHeadersPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\AccessTokenRestRequestValidatorPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\SimultaneousAuthenticationRestRequestValidatorPlugin; +use Spryker\Glue\AuthRestApi\Plugin\GlueApplication\TokenResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\RefreshTokensResourceRoutePlugin; +use Spryker\Glue\AuthRestApi\Plugin\RestUserFinderByAccessTokenPlugin.;.. +``` + +Add OAuth resource plugins: + +```php +protected function getResourceRoutePlugins(): array +{ + return [ + new AccessTokensResourceRoutePlugin(), + new RefreshTokensResourceRoutePlugin(), + new TokenResourceRoutePlugin() + ]; +} +``` + +Add token validation plugins: + +```php +protected function getRestRequestValidatorPlugins(): array +{ + return [ + new AccessTokenRestRequestValidatorPlugin(), + new SimultaneousAuthenticationRestRequestValidatorPlugin(), + ]; +} +``` + +Add error response plugin: + +```php +protected function getFormatResponseHeadersPlugins(): array +{ + return [ + new FormatAuthenticationErrorResponseHeadersPlugin(), + ]; +} +``` + +Add Oauth user finder plugin: + +```php +protected function getRestUserFinderPlugins(): array +{ + return [ + new RestUserFinderByAccessTokenPlugin(), + ]; +} +``` + +- Add OAuth dependency provider. To do this, create file `Pyz/Zed/Oauth/OauthDependencyProvider.php` as follows: + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Ensure that: + +- Invalid agent access tokens passed in the `X-Agent-Authorization` header are rejected with the 401 error code. + +- The `X-Agent-Authorization` header is required for `/agent-customer-impersonation-access-tokens` and `/agent-customer-search` resources. Requests without the header return the 401 error code. + +- When a valid agent access token is provided via the `X-Agent-Authorization`, the `RestRequest` object in Glue controllers populates `restUser.idAgent` with the current agent identifier. + +- The following resources are available: + +| RESOURCE | REQUEST TO CHECK | +| --- | --- | +| `/agent-access-tokens` | `POST https://glue.mysprykershop.com/agent-access-tokens` | +| `/agent-customer-impersonation-access-tokens` | `POST https://glue.mysprykershop.com/agent-customer-impersonation-access-tokens` | +| `/agent-customer-search` | `GET https://glue.mysprykershop.com/agent-customer-search` | + + +{% endinfo_block %} + + +**src/Pyz/Glue/AuthRestApi/AuthRestApiDependencyProvider.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CartsRestApiConfig::RESOURCE_CART_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Ensure that the `https://glue.mysprykershop.com/carts` endpoint is available: + +1. [Create one or more carts](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart). +2. Send the request: `GET https://glue.mysprykershop.com/carts/`. +3. Check that the response contains the list of carts of the customer you are [authenticated](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-customer.html) with. + +Ensure that the `https://glue.mysprykershop.com/guest-carts` endpoint is available: + +1. [Create a guest cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). +2. Send the request: `GET https://glue.mysprykershop.com/carts/`. +3. Check that the response contains the cart you have created. + +Ensure that the `items` resource relationships are registered as a relationship of the `carts` resource: + +1. [Add one or more items to the cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html#add-an-item-to-a-registered-users-cart). +2. Send the request: `GET https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}/?include=items`. +3. Check that the response contains the relationships to the `items` resource. + +Ensure that the `guest-cart-items` resource relationship is registered as a relationship of the `guest-carts` resource: + +1. [Add one or more items to the cart](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html#add-items-to-a-guest-cart). +2 Send the request: `GET https://glue.mysprykershop.com/guest-carts/{% raw %}{{{% endraw %}guest_cart_uuid{% raw %}}}{% endraw %}/?include=guest-cart-items`. +1. Check that the response contains the relationships to the `guest-cart-items` resource. + +Make sure that the `https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customerId{% raw %}}}{% endraw %}/carts` endpoint is available. + +**src/Pz/Glue/CustomersRestApi/CustomersRestApiDependencyProvider.php** + +```php +addRelationship( + CatalogSearchRestApiConfig::RESOURCE_CATALOG_SEARCH, + new CatalogSearchAbstractProductsResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CatalogSearchRestApiConfig::RESOURCE_CATALOG_SEARCH_SUGGESTIONS, + new CatalogSearchSuggestionsAbstractProductsResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +If `CatalogSearchResourceRoutePlugin` and `CatalogSearchSuggestionsResourceRoutePlugin` are installed correctly, the following endpoints should now be available: +`https://glue.mysprykershop.com/catalog-search?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}` +`https://glue.mysprykershop.com/catalog-search-suggestions?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To make sure that `CatalogSearchAbstractProductsResourceRelationshipPlugin` and `CatalogSearchSuggestionsAbstractProductsResourceRelationshipPlugin` are functioning correctly, do the following: +Send a request to `https://glue.mysprykershop.com/catalog-search?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}&include=abstract-products` and verify that the response includes relationships to `abstract-products` resources. +Send a request to `https://glue.mysprykershop.com/catalog-search-suggestions?q={% raw %}{{{% endraw %}q_term{% raw %}}}{% endraw %}&include=abstract-products` and verify that the response includes relationships to `abstract-products` resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md new file mode 100644 index 00000000000..b6bb988e7e8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-catalog-merchant-product-restrictions.md @@ -0,0 +1,120 @@ +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Merchant Product Restrictions | {{page.release_tag}} | [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-relationship-product-lists-rest-api:"^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------|-------------------------------------------------------------| +| MerchantRelationshipProductListsRestApi | vendor/spryker/merchant-relationship-product-lists-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------|--------|----------|-------------------------------------------------------------------------| +| Customer | class | created | src/Generated/Shared/Transfer/RestCatalogSearchAttributesTransfer | +| RestUser | class | created | src/Generated/Shared/Transfer/RestCatalogSearchSortTransfer | +| CustomerProductListCollection | class | created | src/Generated/Shared/Transfer/RestCatalogSearchPaginationTransfer | +| CustomerIdentifier | class | created | src/Generated/Shared/Transfer/RestCatalogSearchAbstractProductsTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------|------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------| +| CustomerProductListOauthCustomerIdentifierExpanderPlugin | Expands `CustomerIdentifierTransfer` with customers product list collection. | None | Spryker\Zed\MerchantRelationshipProductListsRestApi\Communication\Plugin\OauthCustomerConnector | +| CustomerProductListCustomerExpanderPlugin | Expands `CustomerTransfer` with customer's product list collection. | None | Spryker\Glue\MerchantRelationshipProductListsRestApi\Plugin\CustomersRestApi | + + +**src/Pyz/Zed/OauthCustomerConnector/OauthCustomerConnectorDependencyProvider.php** + +```php + + */ + protected function getOauthCustomerIdentifierExpanderPlugins(): array + { + return [ + new CustomerProductListOauthCustomerIdentifierExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send request `POST https://glue.mysprykershop.com/access-tokens` and make sure that `sub` property includes related `customer_product_list_collection`. + +{% endinfo_block %} + +**src/Pyz/Glue/CustomersRestApi/CustomersRestApiDependencyProvider.php** + +```php + + */ + protected function getCustomerExpanderPlugins(): array + { + return array_merge(parent::getCustomerExpanderPlugins(), [ + new CustomerProductListCustomerExpanderPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Send request `GET https://glue.mysprykershop.com/catalog-search` and make sure that response is considering the customers black- and whitelists. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-category-management-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-category-management-glue-api.md new file mode 100644 index 00000000000..b68bc517b86 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-category-management-glue-api.md @@ -0,0 +1,155 @@ + + + +This document describes how to install the Category Management Glue API feature. + +## Prerequisites + +Install the required features: + +|FEATURE |VERSION |REQUIRED SUB-FEATURE | +|--- |--- |--- | +| Spryker Core | {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Category Management | {{page.release_tag}} | | + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/categories-rest-api:"^1.1.3" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE |EXPECTED DIRECTORY | +| --- | --- | +|CategoriesRestApi |vendor/spryker/categories-rest-api| + +{% endinfo_block %} + +## 2) Set up configuration + +Set up the following configuration + +**src/Pyz/Glue/NavigationsRestApi/NavigationsRestApiConfig.php** + +```php + 'fkResourceCategorynode', + 'cms\_page' => 'fkResourcePage', + \]; + } +} +``` + + +## 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +|TRANSFER |TYPE |EVENT |PATH | +|--- |--- |--- |--- | +|RestCategoryTreesTransfer |class |created |src/Generated/Shared/Transfer/RestCategoryTreesTransfer | +|RestCategoryTreesAttributesTransfer |class |created |src/Generated/Shared/Transfer/RestCategoryTreesAttributesTransfer | +|RestCategoryNodesAttributesTransfer |class |created |src/Generated/Shared/Transfer/RestCategoryNodesAttributesTransfer| + +{% endinfo_block %} + +## 4) Enable resources and relationships + +Activate the following plugins: + +|PLUGIN| SPECIFICATION| PREREQUISITES| NAMESPACE| +|--- |--- |--- |--- | +|CategoriesResourceRoutePlugin| Registers the `category-tree` resource.| | Spryker\Glue\CategoriesRestApi\Plugin| +|CategoryResourceRoutePlugin| Registers the `category-nodes` resource.| | Spryker\Glue\CategoriesRestApi\Plugin | +|CategoryNodeRestUrlResolverAttributesTransferProviderPlugin| Maps the data for `RestUrlResolverAttributesTransfer` from `UrlStorageTransfer`.| | Spryker\Glue\CategoriesRestApi\Plugin\UrlsRestApi| + + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + public function getRequiredCustomerRequestDataForGuestCheckout(): array + { + return array_merge(parent::getRequiredCustomerRequestDataForGuestCheckout(), [ + RestCustomerTransfer::FIRST_NAME, + RestCustomerTransfer::LAST_NAME, + ]); + } +} +``` + + + +2. Add all the payment methods available in the shop to `CheckoutRestApiConfig`—for example: + +
    +src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiConfig.php + +```php + ['dummyPaymentInvoice.dateOfBirth'], + 'dummyPaymentCreditCard' => [ + 'dummyPaymentCreditCard.cardType', + 'dummyPaymentCreditCard.cardNumber', + 'dummyPaymentCreditCard.nameOnCard', + 'dummyPaymentCreditCard.cardExpiresMonth', + 'dummyPaymentCreditCard.cardExpiresYear', + 'dummyPaymentCreditCard.cardSecurityCode', + ], + ]; + + /** + * @uses \Spryker\Shared\DummyPayment\DummyPaymentConfig::PROVIDER_NAME + */ + protected const DUMMY_PAYMENT_PROVIDER_NAME = 'DummyPayment'; + + /** + * @uses \Spryker\Shared\DummyPayment\DummyPaymentConfig::PAYMENT_METHOD_NAME_INVOICE + */ + protected const DUMMY_PAYMENT_PAYMENT_METHOD_NAME_INVOICE = 'Invoice'; + + /** + * @uses \Spryker\Shared\DummyPayment\DummyPaymentConfig::PAYMENT_METHOD_NAME_CREDIT_CARD + */ + protected const DUMMY_PAYMENT_PAYMENT_METHOD_NAME_CREDIT_CARD = 'Credit Card'; + + /** + * @uses \Spryker\Shared\DummyPayment\DummyPaymentConfig::PAYMENT_METHOD_INVOICE + */ + protected const PAYMENT_METHOD_INVOICE = 'dummyPaymentInvoice'; + + /** + * @uses \Spryker\Shared\DummyPayment\DummyPaymentConfig::PAYMENT_METHOD_CREDIT_CARD + */ + protected const PAYMENT_METHOD_CREDIT_CARD = 'dummyPaymentCreditCard'; + + protected const IS_PAYMENT_PROVIDER_METHOD_TO_STATE_MACHINE_MAPPING_ENABLED = false; + + /** + * @return array + */ + public function getPaymentProviderMethodToStateMachineMapping(): array + { + return [ + static::DUMMY_PAYMENT_PROVIDER_NAME => [ + static::DUMMY_PAYMENT_PAYMENT_METHOD_NAME_CREDIT_CARD => static::PAYMENT_METHOD_CREDIT_CARD, + static::DUMMY_PAYMENT_PAYMENT_METHOD_NAME_INVOICE => static::PAYMENT_METHOD_INVOICE, + ], + ]; + } + + /** + * @return bool + */ + public function isShipmentMethodsMappedToAttributes(): bool + { + return false; + } + + /** + * @return bool + */ + public function isPaymentProvidersMappedToAttributes(): bool + { + return false; + } + + /** + * @return bool + */ + public function isAddressesMappedToAttributes(): bool + { + return false; + } +} +``` + +
    + +{% info_block infoBox "" %} + +- If `CheckoutRestApiConfig::IS_PAYMENT_PROVIDER_METHOD_TO_STATE_MACHINE_MAPPING_ENABLED` is true, make sure that the payment methods and providers of your shop are configured in `CheckoutRestApiConfig::getPaymentProviderMethodToStateMachineMapping()`. + +- Setting `CheckoutRestApiConfig::IS_PAYMENT_PROVIDER_METHOD_TO_STATE_MACHINE_MAPPING_ENABLED` to false ignores the Glue API level configuration. Subsequently, the `checkout-data` endpoint returns all the payment methods. + +- For the `checkout-data` endpoint to keep returning shipment methods, keep `Pyz\Glue\CheckoutRestApi\CheckoutRestApiConfig::isShipmentMethodsMappedToAttributes()` set to true. + + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +If `Pyz\Glue\CheckoutRestApi\CheckoutRestApiConfig::isShipmentMethodsMappedToAttributes()` is true, make sure the `checkout-data` endpoint returns shipping methods in the `shipmentMethods` attribute. + +
    +Response sample + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "shipmentMethods": [ + { + "id": 4, + "name": "Air Sonic", + "carrierName": "Spryker Drone Shipment", + "price": 1000, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + }, + { + "id": 5, + "name": "Air Light", + "carrierName": "Spryker Drone Shipment", + "price": 1500, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + }, + { + "id": 2, + "name": "Express", + "carrierName": "Spryker Dummy Shipment", + "price": 590, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + }, + { + "id": 3, + "name": "Air Standard", + "carrierName": "Spryker Drone Shipment", + "price": 500, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + }, + { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + ], + ... +} +``` + +
    + +{% endinfo_block %} + +{% info_block infoBox "" %} + +For the `checkout-data` endpoint to keep returning payment methods, keep `CheckoutRestApiConfig::isPaymentProvidersMappedToAttributes()` set to true. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +If `Pyz\Glue\CheckoutRestApi\CheckoutRestApiConfig::isPaymentProvidersMappedToAttributes()` is true, make sure the `checkout-data` endpoint returns payment methods in the `paymentProviders` attribute. + +
    +Response sample + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [ + { + "paymentProviderName": "DummyPayment", + "paymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": null, + "requiredRequestData": [ + "paymentMethod", + "paymentProvider", + "dummyPaymentInvoice.dateOfBirth" + ] + }, + { + "paymentMethodName": "Credit Card", + "paymentProviderName": null, + "requiredRequestData": [ + "paymentMethod", + "paymentProvider", + "dummyPaymentCreditCard.cardType", + "dummyPaymentCreditCard.cardNumber", + "dummyPaymentCreditCard.nameOnCard", + "dummyPaymentCreditCard.cardExpiresMonth", + "dummyPaymentCreditCard.cardExpiresYear", + "dummyPaymentCreditCard.cardSecurityCode" + ] + } + ] + } + ], + ... +} +``` + +
    + +{% endinfo_block %} + +## 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------------|----------|-------------|------------------------------------------------------------------------------| +| RestCheckoutDataTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataTransfer.php | +| RestCheckoutErrorTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutErrorTransfer.php | +| RestCheckoutDataResponseTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataResponseTransfer.php | +| RestCheckoutRequestAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutRequestAttributesTransfer.php | +| RestCustomerTransfer | class | created | src/Generated/Shared/Transfer/RestCustomerTransfer.php | +| RestAddressTransfer | class | created | src/Generated/Shared/Transfer/RestAddressTransfer.php | +| RestShipmentTransfer | class | created | src/Generated/Shared/Transfer/RestShipmentTransfer.php | +| RestPaymentTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentTransfer.php | +| RestCheckoutDataResponseAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataResponseAttributesTransfer.php | +| RestPaymentProviderTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentProviderTransfer.php | +| RestPaymentMethodTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentMethodTransfer.php | +| RestShipmentMethodTransfer | class | created | src/Generated/Shared/Transfer/RestShipmentMethodTransfer.php | +| RestCheckoutResponseAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutResponseAttributesTransfer.php | +| CheckoutResponseTransfer | class | created | src/Generated/Shared/Transfer/CheckoutResponseTransfer.php | +| SaveOrderTransfer | class | created | src/Generated/Shared/Transfer/SaveOrderTransfer.php | +| CheckoutErrorTransfer | class | created | src/Generated/Shared/Transfer/CheckoutErrorTransfer.php | +| AddressesTransfer | class | created | src/Generated/Shared/Transfer/AddressesTransfer.php | +| AddressTransfer | class | created | src/Generated/Shared/Transfer/AddressTransfer.php | +| ShipmentMethodTransfer | class | created | src/Generated/Shared/Transfer/ShipmentMethodTransfer.php | +| ShipmentMethodsCollectionTransfer | class | created | src/Generated/Shared/Transfer/ShipmentMethodsCollectionTransfer.php | +| PaymentProviderCollectionTransfer | class | created | src/Generated/Shared/Transfer/PaymentProviderCollectionTransfer.php | +| PaymentProviderTransfer | class | created | src/Generated/Shared/Transfer/PaymentProviderTransfer.php | +| PaymentMethodsTransfer | class | created | src/Generated/Shared/Transfer/PaymentMethodsTransfer.php | +| PaymentMethodTransfer | class | created | src/Generated/Shared/Transfer/PaymentMethodTransfer.php | +| QuoteTransfer | class | created | src/Generated/Shared/Transfer/QuoteTransfer.php | +| StoreTransfer | class | created | src/Generated/Shared/Transfer/StoreTransfer.php | +| MoneyValueTransfer | class | created | src/Generated/Shared/Transfer/MoneyValueTransfer.php | +| CurrencyTransfer | class | created | src/Generated/Shared/Transfer/CurrencyTransfer.php | +| QuoteResponseTransfer | class | created | src/Generated/Shared/Transfer/QuoteResponseTransfer.php | +| QuoteErrorTransfer | class | created | src/Generated/Shared/Transfer/QuoteErrorTransfer.php | +| ShipmentTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTransfer.php | +| RestErrorCollectionTransfer | class | created | src/Generated/Shared/Transfer/RestErrorCollectionTransfer.php | +| CheckoutDataTransfer | class | created | src/Generated/Shared/Transfer/CheckoutDataTransfer.php | +| ItemTransfer | class | created | src/Generated/Shared/Transfer/ItemTransfer.php | +| RestCheckoutResponseTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutResponseTransfer.php | +| RestErrorMessageTransfer | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer.php | +| RestCheckoutDataTransfer.quote | property | added | src/Generated/Shared/Transfer/RestCheckoutDataTransfer.php | +| RestCheckoutResponseTransfer.checkoutData | property | added | src/Generated/Shared/Transfer/RestCheckoutResponseTransfer.php | +| CheckoutDataTransfer.quote | property | added | src/Generated/Shared/Transfer/CheckoutDataTransfer.php | +| RestCheckoutDataResponseAttributesTransfer.addresses | property | deprecated | src/Generated/Shared/Transfer/RestCheckoutDataResponseAttributesTransfer.php | +| QuoteTransfer.salesOrderThresholdValues | property | added | src/Generated/Shared/Transfer/QuoteTransfer.php | +| RestCartsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCartsAttributesTransfer.php | +| SalesOrderThresholdTypeTransfer | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdTypeTransfer.php | +| SalesOrderThresholdValueTransfer | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdValueTransfer.php | +| RestCartsThresholdsTransfer | class | created | src/Generated/Shared/Transfer/RestCartsThresholdsTransfer.php | + +{% endinfo_block %} + +## 4) Set up behavior + +Set up the following behaviors. + +### Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------| +| CheckoutDataResourcePlugin | Registers the `checkout-data` resource. | None | Spryker\Glue\CheckoutRestApi\Plugin\GlueApplication | +| CheckoutResourcePlugin | Registers the `checkout` resource. | None | Spryker\Glue\CheckoutRestApi\Plugin\GlueApplication | +| OrderRelationshipByOrderReferencePlugin | Adds a relationship to the `order` entity by order reference. | None | Spryker\Glue\OrdersRestApi\Plugin | +| OrderPaymentsResourceRoutePlugin | Registers the `order-payments` resource. | None | Spryker\Glue\OrderPaymentsRestApi\Plugin | +| CartByRestCheckoutDataResourceRelationshipPlugin | Adds `carts` resource as a relationship by `RestCheckoutDataTransfer.quote`. Applies only to registered customers. | None | Spryker\Glue\CartsRestApi\Plugin\GlueApplication | +| GuestCartByRestCheckoutDataResourceRelationshipPlugin | Adds `guest-carts` resource as the relationship by `RestCheckoutDataTransfer.quote`. Applies only to guest customers. | None | Spryker\Glue\CartsRestApi\Plugin\GlueApplication | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT, + new OrderRelationshipByOrderReferencePlugin() + ); + $resourceRelationshipCollection->addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new CartByRestCheckoutDataResourceRelationshipPlugin(), + ); + $resourceRelationshipCollection->addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new GuestCartByRestCheckoutDataResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the following plugins have been activated: + +| PLUGIN | TEST | +|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CheckoutDataResourcePlugin | Check if you get a valid response by sending the `POST https://glue.mysprykershop.com/checkout-data` request. | +| CheckoutResourcePlugin | Check if you get a valid response by sending the `POST https://glue.mysprykershop.com/checkout` request. | +| OrderRelationshipByOrderReferencePlugin | Check if you get order information from the `orders` resource by sending the `POST https://glue.mysprykershop.com/checkout?include=orders` request. | +| CartByRestCheckoutDataResourceRelationshipPlugin | Check if you get cart data as a relationship from the `checkout-data` resource by sending the `POST https://glue.mysprykershop.com/checkout-data?include=carts` request. | +| GuestCartByRestCheckoutDataResourceRelationshipPlugin | Check if you get guest cart data as a relationship from the `checkout-data` resource by sending the `POST https://glue.mysprykershop.com/checkout?include=guest-carts` request. | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To make sure that `OrderPaymentsResourceRoutePlugin` has been activated, check if you get a valid response by sending the following request: + +`POST https://glue.mysprykershop.com/order-payments` + +```json +{ + "data": { + "type": "order-payments", + "attributes": { + "paymentIdentifier": {% raw %}{{{% endraw %}paymentIdentifier{% raw %}}}{% endraw %}, + "dataPayload": {% raw %}{{{% endraw %}dataPayload{% raw %}}}{% endraw %} + } + } +} +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure `CartByRestCheckoutDataResourceRelationshipPlugin` has been activated: + +1. Send the request: + +`POST https://glue.mysprykershop.com/checkout-data?include=carts` + +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "_cart_id", + "shipment": { + "idShipmentMethod": 1 + } + } + } +} +``` + +2. Check that the cart data is returned as a relationship and contains `shipmentTotal` in cart totals: + +```json +{ + "data": { + "type": "checkout-data", + ... + }, + ... + "relationships": { + "carts": { + "data": [ + { + "type": "carts", + "id": "_cart_id" + } + ] + } + } + }, + "included": [ + { + "type": "carts", + "id": "_cart_id", + "attributes": { + ... + "totals": { + ... + "shipmentTotal": ... + } + } + } + ] +} +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure `GuestCartByRestCheckoutDataResourceRelationshipPlugin` has been activated: + +1. Send the following request with an anonymous customer ID: + +`POST https://glue.mysprykershop.com/checkout-data?include=guest-carts` + +```json +{"data": + {"type": "checkout-data", + "attributes": + { + "idCart": "_cart_id", + "shipment": { + "idShipmentMethod": 1 + } + } + } +} +``` + +2. Check that the guest cart data is returned as a relationship and contains `shipmentTotal` in cart totals: + +```json +{ + "data": { + "type": "checkout-data", + ... + }, + ... + "relationships": { + "guest-carts": { + "data": [ + { + "type": "guest-carts", + "id": "_cart_id" + } + ] + } + } + }, + "included": [ + { + "type": "guest-carts", + "id": "_cart_id", + "attributes": { + ... + "totals": { + ... + "shipmentTotal": ... + } + } + } + ] +} +``` + +{% endinfo_block %} + +For more details, see [Interact with third party payment providers using Glue API](/docs/pbc/all/payment-service-provider/latest/base-shop/interact-with-third-party-payment-providers-using-glue-api.html). + +### Configure mapping + +On the project level, configure the following mappers to map the data from the request to `QuoteTransfer`: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------|--------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------| +| CustomerQuoteMapperPlugin | Adds a mapper that maps customer information to `QuoteTransfer`. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\CheckoutRestApi | +| AddressQuoteMapperPlugin | Adds a mapper that maps billing and shipping address information to `QuoteTransfer`. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\CheckoutRestApi | + + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getRestCartAttributesMapperPlugins(): array + { + return [ + new SalesOrderThresholdRestCartAttributesMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getTerminationPlugins(Container $container): array + { + return [ + new SalesOrderThresholdCartTerminationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new SalesOrderThresholdQuoteExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getReadCheckoutDataValidatorPlugins(): array + { + return [ + new SalesOrderThresholdReadCheckoutDataValidatorPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Ensure that the plugins work correctly: + +1. [Set up a minimum hard threshold](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-minimum-hard-threshold). +2. Add a product to cart with a price lower than the threshold you've set. +3. Send the request: `GET https://glue.mysprykershop.com/carts/{cart-uuid}` + Make sure the message about threshold conditions not being met is returned. Example: +
    + Response sample with threshold conditions not met + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4151, + "subtotal": 26000, + "grandTotal": 26000, + "priceToPay": 26000 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-minimum-threshold", + "threshold": 200000, + "fee": null, + "deltaWithSubtotal": 174000, + "message": "You need to add items for €2,000.00 to pass a recommended threshold, but if you want can proceed to checkout." + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
    + +4. Send the `POST https://glue.mysprykershop.com/checkout-data` request and check that the following error is returned. + +```json +{ + "errors": [ + { + "code": "1101", + "status": 422, + "detail": "You need to add items for €2,000.00 to pass a recommended threshold, but if you want can proceed to checkout." + } + ] +} +``` + +5. Add more products to cart to satisfy the minimum threshold you've set. +6. To check that the cart meets the threshold conditions, send the following request: `GET https://glue.mysprykershop.com/carts/{cart-uuid}`. + The threshold message shouldn't be displayed in the response: + +
    + Response sample with threshold conditions met +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 45664, + "subtotal": 286000, + "grandTotal": 286000, + "priceToPay": 286000 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +7. To check that the cart meets threshold conditions, send the following request: `POST https://glue.mysprykershop.com/checkout-data`. + You should get a regular response without any errors: + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data" + } + } +} +``` + +{% endinfo_block %} + +### Enable validations + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|---------------------------------------------------------|---------------|----------------------------------------------------------| +| CountriesCheckoutDataValidatorPlugin | Verifies if countries can be found by countryIso2Codes. | | Spryker\Zed\Country\Communication\Plugin\CheckoutRestApi | + +{% info_block warningBox "Verification" %} + +- Send the `POST https://glue.mysprykershop.com/checkout-data` request with an invalid billing address country code. Make sure the following error is returned: + +```json +{ + "errors": [ + { + "status": 422, + "code": "1102", + "detail": "Billing address country not found for country code: %code%." + } + ] +} +``` + +- Send the `POST https://glue.mysprykershop.com/checkout-data` request with an invalid shipping address country code. Make sure the following error is returned: + +```json +{ + "errors": [ + { + "status": 422, + "code": "1102", + "detail": "Shipping address country not found for country code: %code%." + } + ] +} +``` + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Glue API: Shipment | ✓ | [Install the Shipment Glue API](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-the-shipment-glue-api.html) | +| Glue API: Payments | ✓ | [Install the Payments Glue API](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-cms-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-cms-glue-api.md new file mode 100644 index 00000000000..4b70a018278 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-cms-glue-api.md @@ -0,0 +1,202 @@ + + +This document describes how to install the CMS feature API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | REQUIRED SUB-FEATURE | +| --------- | ------ | ------------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| CMS | {{page.release_tag}} | [Install the CMS feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/cms-pages-rest-api spryker/content-product-abstract-lists-rest-api spryker/cms-pages-content-banners-resource-relationship --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --------------------- | ------------------- | +| CmsPagesRestApi | vendor/spryker/cms-pages-rest-api | +| ContentProductAbstractListsRestApi | vendor/spryker/content-product-abstract-lists-rest-api | +| CmsPagesContentBannersResourceRelationship | vendor/spryker/cms-pages-content-banners-resource-relationship | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTRY | TYPE | EVENT | +| -------------- | ---- | ------ | +| spy_cms_page.uuid | field | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ------------- | ------ | ------ | ----------------------- | +| RestCmsPagesAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCmsPagesAttributesTransfer | +| LocaleCmsPageDataTransfer | property | created | src/Generated/Shared/Transfer/LocaleCmsPageDataTransfer | +| CmsPageStorageTransfer | class | created | src/Generated/Shared/Transfer/CmsPageStorageTransfer | +| StoreTransfer | property | created | src/Generated/Shared/Transfer/StoreTransfer | +| RestErrorMessageTransfer | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | +| RestUrlResolverAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestUrlResolverAttributesTransfer | +| UrlStorageTransfer | class | created | src/Generated/Shared/Transfer/UrlStorageTransfer | + +{% endinfo_block %} + +2. Update the UUID for the CMS pages that had existed before you've added the column: + +```bash +console uuid:generate Cms spy_cms_page +``` + +{% info_block warningBox "Verification" %} + +Make sure that all the records in the `spy_cms_page` have the `uuid` field populated with auto-generated values. + +{% endinfo_block %} + +## 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ----------------------------- | --------------------- | ----------- | ------------------------ | +| ContentProductAbstractListAbstractProductsResourceRoutePlugin | Adds the `abstract-products` resource route with the `content-product-abstract-lists` resource as a parent. | None | Spryker\Glue\ContentProductAbstractListsRestApi\Plugin\GlueApplication | +| CmsPagesResourceRoutePlugin | Adds the `cms-pages` resource route. | None | Spryker\Glue\CmsPagesRestApi\Plugin\GlueApplication | +| ContentProductAbstractListsResourceRoutePlugin | Adds `the content-product-abstract-lists` resource route. | None | Spryker\Glue\ContentProductAbstractListsRestApi\Plugin\GlueApplication | +| ContentBannerByCmsPageResourceRelationshipPlugin | Adds the `content-banner` resource as a relationship for the `cms-pages` resource. | None | Spryker\Glue\CmsPagesContentBannersResourceRelationship\Plugin\GlueApplication | +| ContentProductAbstractListByCmsPageResourceRelationshipPlugin | Adds the `content-product-abstract-lists` resource as a relationship for the `cms-pages` resource. | None | Spryker\Glue\CmsPagesContentProductAbstractListsResourceRelationship\Plugin\GlueApplication | +| ProductAbstractByContentProductAbstractListResourceRelationshipPlugin | Adds the `abstract-products` resource as a relatonship to the `content-product-abstract-lists` resource. | None | Spryker\Glue\ContentProductAbstractListsRestApi\Plugin\GlueApplication | +| CmsPageRestUrlResolverAttributesTransferProviderPlugin | Looks up the CMS page in the key-value storage by id given in `UrlStorageTransfer`. Returns the `RestUrlResolverAttributesTransfer` with type "cms-pages" and CMS page UUID as entity ID. | None | Spryker\Glue\CmsPagesRestApi\Plugin\UrlsRestApi; | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + CmsPagesRestApiConfig::RESOURCE_CMS_PAGES, + new ContentBannerByCmsPageResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CmsPagesRestApiConfig::RESOURCE_CMS_PAGES, + new ContentProductAbstractListByCmsPageResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ContentProductAbstractListsRestApiConfig::RESOURCE_CONTENT_PRODUCT_ABSTRACT_LISTS, + new ProductAbstractByContentProductAbstractListResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +**src/Pyz/Glue/UrlsRestApi/UrlsRestApiDependencyProvider.php** + +```php + + */ + public function getBillingAddressFieldsToSkipValidation(): array + { + return array_merge(parent::getBillingAddressFieldsToSkipValidation(), [ + RestAddressTransfer::ID_COMPANY_BUSINESS_UNIT_ADDRESS, + ]); + } +} +``` + + +## 3) Set up database schema and transfer objects + +Generate transfer changes: + +```bash +console propel:install +console transfer:generate +``` + + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| +| RestCompanyAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyAttributesTransfer.php | +| RestCompanyBusinessUnitAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyBusinessUnitAttributesTransfer.php | +| RestCompanyBusinessUnitAddressesAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyBusinessUnitAddressesAttributesTransfer.php | +| RestCompanyRoleAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyRoleAttributesTransfer.php | +| RestCompanyUserAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyUserAttributesTransfer.php | +| CompanyUserAccessTokenRequestTransfer | class | created | src/Generated/Shared/Transfer/CompanyUserAccessTokenRequestTransfer.php | +| CompanyUserIdentifierTransfer | class | created | src/Generated/Shared/Transfer/CompanyUserIdentifierTransfer.php | +| RestCompanyUserAccessTokensAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyUserAccessTokensAttributesTransfer.php | +| RestCompanyUserAccessTokenResponseAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCompanyUserAccessTokenResponseAttributesTransfer.php | +| CustomerIdentifierTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/CustomerIdentifierTransfer.php | +| CustomerIdentifierTransfer.permissions | property | added | src/Generated/Shared/Transfer/CustomerIdentifierTransfer.php | +| OauthUserTransfer.customerReference | property | added | src/Generated/Shared/Transfer/OauthUserTransfer.php | +| OauthUserTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/OauthUserTransfer.php | +| OauthRequestTransfer.customerReference | property | added | src/Generated/Shared/Transfer/OauthRequestTransfer.php | +| OauthRequestTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/OauthRequestTransfer.php | +| RestUserTransfer.idCompany | property | added | src/Generated/Shared/Transfer/RestUserTransfer.php | +| RestUserTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/RestUserTransfer.php | +| RestUserTransfer.uuidCompanyUser | property | added | src/Generated/Shared/Transfer/RestUserTransfer.php | +| OauthResponseTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/OauthResponseTransfer.php | +| RestTokenResponseAttributesTransfer.idCompanyUser | property | added | src/Generated/Shared/Transfer/RestTokenResponseAttributesTransfer.php | +| CompanyUserCriteriaFilterTransfer.companyBusinessUnitUuids | property | added | src/Generated/Shared/Transfer/CompanyUserCriteriaFilterTransfer.php | +| CompanyUserCriteriaFilterTransfer.companyRolesUuids | property | added | src/Generated/Shared/Transfer/CompanyUserCriteriaFilterTransfer.php | +| CompanyUserCollectionTransfer.filter | property | added | src/Generated/Shared/Transfer/CompanyUserCollectionTransfer.php | +| CompanyUserCollectionTransfer.total | property | added | src/Generated/Shared/Transfer/CompanyUserCollectionTransfer.php | +| CustomerCollectionTransfer.customer | property | added | src/Generated/Shared/Transfer/CustomerCollectionTransfer.php | +| CompanyTransfer.uuid | property | added | src/Generated/Shared/Transfer/CompanyTransfer.php | +| CompanyBusinessUnitTransfer.uuid | property | added | src/Generated/Shared/Transfer/CompanyBusinessUnitTransfer.php | +| CompanyUnitAddressTransfer.uuid | property | added | src/Generated/Shared/Transfer/CompanyUnitAddressTransfer.php | +| CompanyRoleTransfer.uuid | property | added | src/Generated/Shared/Transfer/CompanyRoleTransfer.php | +| CompanyUserTransfer.uuid | property | added | src/Generated/Shared/Transfer/CompanyUserTransfer.php | +| RestCustomerTransfer | class | added | src/Generated/Shared/Transfer/RestCustomerTransfer.php | +| RestCheckoutRequestAttributesTransfer | class | added | src/Generated/Shared/Transfer/RestCustomerTransfer.php | +| RestCheckoutDataTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataTransfer.php | +| RestAddressTransfer | class | created | src/Generated/Shared/Transfer/RestAddressTransfer.php | +| QuoteTransfer | class | created | src/Generated/Shared/Transfer/QuoteTransfer.php | +| AddressTransfer | class | created | src/Generated/Shared/Transfer/AddressTransfer.php | +| ItemTransfer | class | created | src/Generated/Shared/Transfer/ItemTransfer.php | +| ShipmentTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTransfer.php | +| CustomerTransfer | class | created | src/Generated/Shared/Transfer/CustomerTransfer.php | +| CompanyUserTransfer | class | created | src/Generated/Shared/Transfer/CompanyUserTransfer.php | +| CheckoutResponseTransfer | class | created | src/Generated/Shared/Transfer/CheckoutResponseTransfer.php | +| CheckoutDataTransfer | class | created | src/Generated/Shared/Transfer/CheckoutDataTransfer.php | +| CheckoutErrorTransfer | class | created | src/Generated/Shared/Transfer/CheckoutErrorTransfer.php | +| RestShipmentsTransfer | class | created | src/Generated/Shared/Transfer/RestShipmentsTransfer.php | +| RestErrorCollection | class | created | src/Generated/Shared/Transfer/RestErrorCollectionTransfer.php | +| AddressTransfer.companyBusinessUnitAddressUuid | property | added | src/Generated/Shared/Transfer/AddressTransfer.php | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify that the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| ------------------------------ | ------ | ----- | +| spy_company_unit_address.uuid | column | added | +| spy_company.uuid | column | added | +| spy_company_business_unit.uuid | column | added | +| spy_company_role.uuid | column | added | +| spy_company_user.uuid | column | added | + +{% endinfo_block %} + +## 4) Add translations + +1. Append glossary according to your configuration: + +```csv +checkout.validation.company_address.not_found,Company address with ID %id% not found.,en_US +checkout.validation.company_address.not_found, Firmenanschrift mit ID %id% wurde nicht gefunden.,de_DE +checkout.validation.company_address.not_applicable,Company addresses are applicable only for company users.,en_US +checkout.validation.company_address.not_applicable,Firmenanschriften sind nur für die Firmennutzer anzuwenden.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +## 5) Set up behavior + +Set up the following behaviors. + +### Generate UUIDs company records + +Generate the `UUID` column values in the `spy_company` database table: + +```bash +console uuid:generate Company spy_company +``` + + +{% info_block warningBox "Verification" %} + +To verify that the `UUID` field in the `spy_company` table, has been populated for all the records, run the following SQL query: + +```sql +select count(*) from spy_company where uuid is NULL; +``` + +The result should contain 0 records. + +{% endinfo_block %} + +### Generate UUIDs company business unit records + +Generate UUIDs for the existing company business unit records without UUID: + +```bash +console uuid:generate CompanyBusinessUnit spy_company_business_unit +``` + + +{% info_block warningBox "Verification" %} + +To verify that the `UUID` field in the `spy_company_business_unit` table has been populated for all the records, run the following SQL query: + +```sql +select count(*) from spy_company_business_unit where uuid is NULL; +``` + +The result should contain 0 records. + +{% endinfo_block %} + +### Generate UUIDs company role records + +Generate UUIDs for the existing company role records without UUID: + +```bash +console uuid:generate CompanyRole spy_company_role +``` + + +{% info_block warningBox "Verification" %} + +To verify that the `UUID` field in the `spy_company_role` table has been populated for all the records, run the following SQL query: + +```sql +select count(*) from spy_company_role where uuid is NULL; +``` + +The result should be 0 records. + +{% endinfo_block %} + +### Generate UUIDs company business unit address records + +Generate UUIDs for the existing company business unit address records without UUID: + +```bash +console uuid:generate CompanyUnitAddress spy_company_unit_address +``` + +{% info_block warningBox "Verification" %} + +To verify that the `UUID` field in the `spy_company_unit_address` table has been populated for all the records, run the following SQL query: + +```sql +select count(*) from spy_company_unit_address where uuid is NULL; +``` + +The result should be 0 records. + + +{% endinfo_block %} + +### Generate UUIDs for company user records + +Generate UUIDs for the existing company user records without UUID: + +```bash +console uuid:generate CompanyUser spy_company_user +``` + + +{% info_block warningBox "Verification" %} + +To verify that the `UUID` field in the `spy_company_user table` has been populated for all the records, run the following SQL query: + +```sql +select count(*) from spy_company_user where uuid is NULL; +``` + +The result should be 0 records. + + +{% endinfo_block %} + +### Enable resources and relationships + +Activate the following plugins: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------| +| CompaniesResourcePlugin | Registers the `companies` resource. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication\CompaniesResourcePlugin | +| CompanyBusinessUnitsResourcePlugin | Registers the `company-business-units` resource. | | Spryker\Glue\CompanyBusinessUnitsRestApi\Plugin\GlueApplication\CompanyBusinessUnitsResourcePlugin | +| CompanyBusinessUnitAddressesResourcePlugin | Registers the `company-business-unit-address` resource. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\GlueApplication\CompanyBusinessUnitAddressesResourcePlugin | +| CompanyBusinessUnitCustomerExpanderPlugin | Expands the customer session transfer with the company business unit transfer. | | Spryker\Glue\CompanyBusinessUnitsRestApi\Plugin\CustomersRestApi | +| CompanyRolesResourcePlugin | Registers the `company-roles` resource. | | Spryker\Glue\CompanyRolesRestApi\Plugin\GlueApplication\CompanyRolesResourcePlugin | +| CompanyUserCustomerExpanderPlugin | Expands the customer transfer with the company user transfer. | | Spryker\Glue\CompanyUsersRestApi\Plugin\CustomersRestApi | +| CompanyUsersResourceRoutePlugin | Registers the `company-users` resource. | | Spryker\Glue\CompanyUsersRestApi\Plugin\GlueApplication\CompanyUsersResourceRoutePlugin | +| CompanyUserRestUserValidatorPlugin | Checks that a REST user is a company user. | | Spryker\Glue\CompanyUsersRestApi\Plugin\GlueApplication | +| CompanyByCompanyRoleResourceRelationshipPlugin | Adds the `companies` resource as a relationship to the resource that provides `CompanyRoleTransfer` as a payload. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication\CompanyByCompanyRoleResourceRelationshipPlugin | +| CompanyByCompanyBusinessUnitResourceRelationshipPlugin | Adds the `companies` resource as a relationship to the resource that provides `CompanyBusinessUnitTransfer` as a payload. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication\CompanyByCompanyBusinessUnitResourceRelationshipPlugin | +| CompanyByCompanyUserResourceRelationshipPlugin | Adds the `companies` resource as a relationship to the resource that provides `CompanyUserTransfer` as a payload. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication\CompanyByCompanyUserResourceRelationshipPlugin | +| CompanyBusinessUnitAddressesByCompanyBusinessUnitResourceRelationshipPlugin | Adds the `company-business-unit-addresses` resource as a relationship to the `company-business-units` resource. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\GlueApplication\CompanyBusinessUnitAddressesByCompanyBusinessUnitResourceRelationshipPlugin | +| CompanyBusinessUnitByCompanyUserResourceRelationshipPlugin | Adds the `company-business-units` resource as a relationship to the resource that provides `CompanyUserTransfer` as a payload. | | Spryker\Glue\CompanyBusinessUnitsRestApi\Plugin\GlueApplication | +| CompanyRoleByCompanyUserResourceRelationshipPlugin | Adds the `companies` resource as a relationship to the resource that provides `CompanyUserTransfer` as a payload. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication | +| CustomerByCompanyUserResourceRelationshipPlugin | Adds the `customers` resource as a relationship to the resource that provides `CompanyUserTransfer` as a payload. | | Spryker\Glue\CustomersRestApi\Plugin\GlueApplication | +| CompanyUserOauthCustomerIdentifierExpanderPlugin | If a company user UUID is set up in `CustomerTransfer`, expands `CustomerIdentifierTransfer` with the UUID. | | Spryker\Zed\CompanyUsersRestApi\Communication\Plugin\OauthCustomerConnector | +| CompanyUserRestUserMapperPlugin | Maps company user data to a REST user identifier. | | Spryker\Glue\CompanyUserAuthRestApi\Plugin\AuthRestApi | +| OauthUserIdentifierFilterPermissionPlugin | Filters the user identifier array to remove configured keys before persisting. | | Spryker\Zed\OauthPermission\Communication\Plugin\Filter | +| RefreshTokenPermissionOauthUserIdentifierFilterPlugin | Filters the user identifier array to remove configured keys before persisting. | | Spryker\Zed\OauthPermission\Communication\Plugin\OauthRevoke | +| PermissionOauthCompanyUserIdentifierExpanderPlugin | If `idCompanyUser` is set in `CompanyUserTransfer`, expands `CompanyUserIdentifierTransfer` with a collection of permissions. | | Spryker\Zed\OauthPermission\Communication\Plugin\OauthCompanyUser | +| PermissionOauthCustomerIdentifierExpanderPlugin | If `idCompanyUser` is set in `CustomerIdentifierTransfer`, expands `CustomerIdentifierTransfer` with a collection of permissions. | | Spryker\Zed\OauthPermission\Communication\Plugin\OauthCustomerConnector | +| CompanyUserAccessTokensResourceRoutePlugin | Registers the `company-user-access-tokens` resource. | | Spryker\Glue\CompanyUserAuthRestApi\Plugin\GlueApplication | +| CustomerCompanyUserQuoteExpanderPlugin | Expands `QuoteTransfer.customer.companyUserTransfer` with full information. | | Spryker\Zed\CompanyUsersRestApi\Communication\Plugin\CartsRestApi | +| CompanyUserCheckoutRequestExpanderPlugin | Expands the checkout request transfer with company user information from a REST request. | | Spryker\Glue\CompanyUsersRestApi\Plugin\CheckoutRestApi | +| CompanyUserQuoteMapperPlugin | Maps the company account information from `RestCheckoutRequestAttributesTransfer` to `QuoteTransfer`. | | Spryker\Zed\CompanyUsersRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressByCheckoutDataResourceRelationshipPlugin | Adds `company-business-unit-addresses` resource as relationship. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\GlueApplication | +| CompanyBusinessUnitAddressSourceCheckerPlugin | Checks if a company business unit address ID is provided in the address attributes. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\ShipmentsRestApi | +| CompanyBusinessUnitAddressCheckoutDataExpanderPlugin | Expands `RestCheckoutDataTransfer` with `CompanyBusinessUnitAddresses`. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressCheckoutDataValidatorPlugin | Collects shipping address UUIDs from `checkoutDataTransfer.shipments`. If a company address UUID is provided for a non-company user, returns `CheckoutResponseTransfer`. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressQuoteMapperPlugin | Maps the REST request billing company business unit address information to quote. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressProviderStrategyPlugin | Based on the UUID provided in`RestAddressTransfer.idCompanyBusinessUnitAddress`, finds a company business unit address. If found, returns `AddressTransfer` filled with company business unit address information. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\ShipmentsRestApi | +| CompanyBusinessUnitUuidRestAddressResponseMapperPlugin | Maps `AddressTransfer.companyBusinessUnitUuid` to `RestAddressTransfer.idCompanyBusinessUnitAddress` if exists. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\ShipmentsRestApi | +| OauthPermissionStoragePlugin | Reads the permission collection from the authorization header. | | Spryker\Client\OauthPermission\Plugin\Permission | +| DefaultBillingAddressMapperPlugin | Maps and replaces the ID of `defaultBillingAddress` with a UUID in `RestCompanyBusinessUnitAttributesTransfer`. | | Spryker\Glue\CompanyBusinessUnitAddressesRestApi\Plugin\CompanyBusinessUnitsRestApi | +| PermissionStoragePlugin | Reads the permissions collection from a customer. | | Spryker\Client\CompanyRole\Plugin | +| CompanyRoleCreatePlugin | Creates company role permission relations. | | Spryker\Zed\CompanyRole\Communication\Plugin | +| PermissionCustomerExpanderPlugin | Collects the permissions related to a company user from all assigned roles and sets it for the customer. | | Spryker\Zed\CompanyRole\Communication\Plugin | +| PermissionStoragePlugin | Collects the permissions related to a company user from all assigned roles. | | Spryker\Zed\CompanyRole\Communication\Plugin | +| AssignDefaultCompanyUserRolePlugin | After a company user is created, assigns the default role to it. | | Spryker\Zed\CompanyRole\Communication\Plugin\CompanyUser | +| AssignRolesCompanyUserPostCreatePlugin | Saves a company user if one or more company roles are assigned to it. | | Spryker\Zed\CompanyRole\Communication\Plugin\CompanyUser | +| AssignRolesCompanyUserPostSavePlugin | Saves a company user it has at least one assigned company role. | | Spryker\Zed\CompanyRole\Communication\Plugin\CompanyUser | +| CompanyRoleCollectionHydratePlugin | Hydrates a company user transfer with its assigned company roles. | | Spryker\Zed\CompanyRole\Communication\Plugin\CompanyUser | + + + +**src/Pyz/Zed/OauthCustomerConnector/OauthCustomerConnectorDependencyProvider.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CompanyUsersRestApiConfig::RESOURCE_COMPANY_USERS, + new CompanyByCompanyUserResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyUsersRestApiConfig::RESOURCE_COMPANY_USERS, + new CompanyBusinessUnitByCompanyUserResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyUsersRestApiConfig::RESOURCE_COMPANY_USERS, + new CompanyRoleByCompanyUserResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyRolesRestApiConfig::RESOURCE_COMPANY_ROLES, + new CompanyByCompanyRoleResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyBusinessUnitsRestApiConfig::RESOURCE_COMPANY_BUSINESS_UNITS, + new CompanyByCompanyBusinessUnitResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyBusinessUnitsRestApiConfig::RESOURCE_COMPANY_BUSINESS_UNITS, + new CompanyBusinessUnitAddressesByCompanyBusinessUnitResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CompanyUsersRestApiConfig::RESOURCE_COMPANY_USERS, + new CustomerByCompanyUserResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new CompanyBusinessUnitAddressByCheckoutDataResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + + +**src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + +src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php + +```php + + + +**src/Pyz/Glue/ShipmentsRestApi/ShipmentsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestAddressResponseMapperPlugins(): array + { + return [ + new CompanyBusinessUnitUuidRestAddressResponseMapperPlugin(), + ]; + } +} + +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionStoragePlugins(): array + { + return [ + new OauthPermissionStoragePlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/CompanyBusinessUnitsRestApi/CompanyBusinessUnitsRestApiDependencyProvider.php** + +```php + + */ + protected function getCompanyBusinessUnitMapperPlugins(): array + { + return [ + new DefaultBillingAddressMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionStoragePlugins(): array + { + return [ + new PermissionStoragePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Company/CompanyDependencyProvider.php** + +```php + + */ + protected function getCompanyPostCreatePlugins(): array + { + return [ + new CompanyRoleCreatePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Customer/CustomerDependencyProvider.php** + +```php + + */ + protected function getCustomerTransferExpanderPlugins(): array + { + return [ + new PermissionCustomerExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionStoragePlugins(): array + { + return [ + new PermissionStoragePlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/CompanyUser/CompanyUserDependencyProvider.php + + +```php + + */ + protected function getCompanyUserHydrationPlugins(): array + { + return [ + new CompanyRoleCollectionHydratePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CompanyUserExtension\Dependency\Plugin\CompanyUserPostCreatePluginInterface> + */ + protected function getCompanyUserPostCreatePlugins(): array + { + return [ + new AssignRolesCompanyUserPostCreatePlugin(), + new AssignDefaultCompanyUserRolePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CompanyUserExtension\Dependency\Plugin\CompanyUserPostSavePluginInterface> + */ + protected function getCompanyUserPostSavePlugins(): array + { + return [ + new AssignRolesCompanyUserPostSavePlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Verify the feature is set up correctly: + +1. [Authenticate as a customer](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). + +2. [Retrieve available company users](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html#retrieve-available-company-users). + +3. Using the company user ID you've retrieved in the previous step, [authenticate as a company user](/docs/pbc/all/identity-access-management/latest/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). +Check that the response contains all the necessary data. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that all the required data is provided in the access token, decode the token at `jwt.io`. The `sub` property of the payload data should contain the following: +- `customer_reference` +- `id_customer` +- `id_company_user` +- Permissions + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To verify that the permission data is filtered out based on the record in the `spy_oauth_access_token` table, run the following SQL query: + +```sql +SELECT * FROM spy_oauth_access_token WHERE user_identifier LIKE '%{"id_company_user":"8da78283-e629-5667-9f84-e13207a7aef9"%'; +``` + +The result shouldn't have any permissions-related data from the `user_identifier` column. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that the permission data is filtered out based on the record in the `spy_oauth_refresh_token` table, run the following SQL query: + +```sql +SELECT * FROM spy_oauth_refresh_token WHERE user_identifier LIKE '%{"id_company_user":"8da78283-e629-5667-9f84-e13207a7aef9"%'; +``` + +The result shouldn't have any permissions-related data from the `user_identifier` column. + +{% endinfo_block %} + + + +{% info_block warningBox "Verification" %} + +To verify that `CompanyUserRestUserValidatorPlugin` is set up correctly, try to access a resource listed in `CompanyUsersRestApiConfig::COMPANY_USER_RESOURCES` as a non-company user. The following error should be returned: + +```json +{ + "errors": [ + { + "detail": "Rest user is not a company user.", + "code": "1401", + "status": 400 + } + ] +} +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Send the `GET https://glue.mysprykershop.com/companies/mine` request. Make sure that the response contains a collection of resources with the companies your current company user belongs to. + +- Send the `GET https://glue.mysprykershop.com/companies/{% raw %}{{{% endraw %}company_uuid{% raw %}}}{% endraw %}` request. Make sure that the response contains only the company resource your current company user belongs to. + +- Send the `GET https://glue.mysprykershop.com/company-business-units/mine?include=companies,company-business-unit-addresses request`. Make sure that the response contains the following: + - The collection of resources with the company business units your current company user belongs to. + - `companies` and `addresses` relationships. + +- Send the `GET https://glue.mysprykershop.com/company-business-units/{% raw %}{{{% endraw %}company_business_unit_uuid{% raw %}}}{% endraw %}?include=companies,company-business-unit-addresses` request. Make sure that the response contains: + - Only the company business unit resource that your current company user belongs to. + - `companies` and `addresses` relationships. + +- Send the `GET https://glue.mysprykershop.com/company-business-unit-addresses/{% raw %}{{{% endraw %}company_business_unit_address_uuid{% raw %}}}{% endraw %}` request. Make sure that response contains only the company business unit address of the business unit your current company user belongs to. + +- Send the `GET https://glue.mysprykershop.com/company-roles/mine?include=companies` request. Make sure that the response contains the following: + - All the company roles assigned to your current company user. + - The `companies` relationship. + +- Send the `GET https://glue.mysprykershop.com/company-roles/{% raw %}{{{% endraw %}company_role_uuid{% raw %}}}{% endraw %}?include=companies` request. Make sure that the response contains the following: + - Only the company role resource assigned to your current company user. + - The `companies` relationship. + +- Send the `GET https://glue.mysprykershop.com/company-users?include=company-roles,companies,company-business-units,customers` request. Make sure that the response contains the following: + - All the company users of the company your current company user belong to. + - Relationships: + - `company-roles` + - `companies` + - `company-business-units` + - `customers` + +- Send the `GET https://glue.mysprykershop.com/company-users/mine?include=company-roles,companies,company-business-units,customers` request. Make sure that the response contains the following: + - A collection of resources with all the company users that the current user can impersonate as. + - Relationships: + - `company-roles` + - `companies` + - `company-business-units` + - `customers` + +- Send the `GET https://glue.mysprykershop.com/company-users/{% raw %}{{{% endraw %}company_user_uuid{% raw %}}}{% endraw %}?include=company-roles,companies,company-business-units,customers` request. Make sure that the response contains the following: + - One company user + - Relationships: + - `company-roles` + - `companies` + - `company-business-units` + - `customers` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the following using merchant prices and merchant threshold: + +- To verify that the company account information is saved during order placement, send the `POST https://glue.mysprykershop.com/checkout` request with a company user access token. Make sure company-related restrictions are applied to the order. +- To verify that the company account information is used during cart operations, send the `POST https://glue.mysprykershop.com/carts/:uuid/items` request with a company user access token. Make sure company-related restrictions are applied to the cart. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + + +To verify that `CompanyBusinessUnitAddressByCheckoutDataResourceRelationshipPlugin` is activated, send the `POST https://glue.mysprykershop.com/checkout-data?include=company-business-unit-addresses` request. Make sure the response contains the `company-business-unit-addresses` resource. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md new file mode 100644 index 00000000000..f6e9143e305 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-configurable-bundle-cart-glue-api.md @@ -0,0 +1,198 @@ + + + + +This document describes how to install the Glue API: Configurable Bundle + Cart feature. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + + +| FEATURE | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Configurable Bundle | {{page.release_tag}} | [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) | +|Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/configurable-bundle-carts-rest-api:"^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ConfigurableBundleCartsRestApi | vendor/spryker/configurable-bundle-carts-rest-api | + +{% endinfo_block %} + +## 2) Set up configuration + +Enable validation of the `X-Anonymous-Customer-Unique-Id` guest header for the new resource: `guest-configured-bundles`. + +**src/Pyz/Glue/CartsRestApi/CartsRestApiConfig.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ConfigurableBundlesRestApiConfig::RESOURCE_CONFIGURABLE_BUNDLE_TEMPLATES, + new ConfigurableBundleTemplateSlotByConfigurableBundleTemplateResourceRelationshipPlugin() + ); + + $resourceRelationshipCollection->addRelationship( + ConfigurableBundlesRestApiConfig::RESOURCE_CONFIGURABLE_BUNDLE_TEMPLATES, + new ConfigurableBundleTemplateImageSetByConfigurableBundleTemplateResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that: + +- The `/configurable-bundle-templates` resource is available by sending the request: `GET https://glue.mysprykershop.com/configurable-bundle-templates`. +- Each `configurable-bundle-template` resource has a relationship to `configurable-bundle-template-slots` by sending the request:  `GET https://glue.mysprykershop.com/configurable-bundle-templates?include=configurable-bundle-template-slots`. +- Each `configurable-bundle-template` resource has a relationship to `configurable-bundle-template-image-sets` by sending the request:`GET https://glue.mysprykershop.com/configurable-bundle-templates?include=configurable-bundle-template-image-sets`. + + +**src/Pyz/Glue/OrdersRestApi/OrdersRestApiDependencyProvider.php** + +```php +addRelationship( + ConfigurableBundlesProductsResourceRelationshipConfig::RESOURCE_CONFIGURABLE_BUNDLE_TEMPLATE_SLOTS, + new ProductConcreteByConfigurableBundleTemplateSlotResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send the following request and make sure that each `configurable-bundle-template-slot` resource has a relationship to the `concrete-products` resource: `GET https://glue.mysprykershop.com/configurable-bundle-templates?include=configurable-bundle-template-slots,concrete-products`. + +{% endinfo_block %} + + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| --- | --- | --- | +| Glue API: Configurable Bundle | ✓ | [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | +| GLUE: Configurable Bundle + Cart | ✓ | [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-content-items-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-content-items-glue-api.md new file mode 100644 index 00000000000..c233582f841 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-content-items-glue-api.md @@ -0,0 +1,110 @@ + + +## Install Feature API + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Content Item | {{page.release_tag}} | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/content-banners-rest-api:"^2.1.0" spryker/content-product-abstract-lists-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following modules have been installed in `vendor/spryker`: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ContentBannersRestApi | vendor/spryker/content-banners-rest-api | +| ContentProductAbstractListsRestApi | vendor/spryker/content-product-abstract-lists-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + + +Make sure that the following changes have been applied in transfer objects, see `src/Generated/Shared/Transfer/` folder: + +| TRANSFER | TYPE | EVENT | +| --- | --- | --- | +| RestErrorMessage | class | created | +| RestContentBannerAttributes | class | created | +| ContentProductAbstractListType | class | created | +| ContentBannerType | class | created | +| AbstractProductsRestAttributes | class | created | + +{% endinfo_block %} + + +### 3) Set up Behavior + +#### Enable resources and relationships + +{% info_block infoBox %} + +`ContentBannerResourceRoutePlugin` GET, `ContentProductAbstractListRoutePlugin` GET verbs are protected resources. Refer to the Configure section of the *Configure documentation*. + +{% endinfo_block %} + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ContentBannerResourceRoutePlugin | Registers a `/content-banners/{CONTENT-KEY}` resource route. | None | Spryker\Glue\ContentBannersRestApi\Plugin | +| ContentProductAbstractListRoutePlugin | Registers a `/content-product-abstract-lists/{CONTENT-KEY}/content-product-abstract` resource route. | None | Spryker\Glue\ContentProductAbstractListsRestApi\Plugin | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + [ + ProductPricesRestApiConfig::RESOURCE_ABSTRACT_PRODUCT_PRICES, + ProductPricesRestApiConfig::RESOURCE_CONCRETE_PRODUCT_PRICES, + ], + CustomerAccessConfig::CONTENT_TYPE_ORDER_PLACE_SUBMIT => [ + CheckoutRestApiConfig::RESOURCE_CHECKOUT, + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + ], + CustomerAccessConfig::CONTENT_TYPE_ADD_TO_CART => [ + CartsRestApiConfig::RESOURCE_GUEST_CARTS_ITEMS, + ], + CustomerAccessConfig::CONTENT_TYPE_WISHLIST => [ + WishlistsRestApiConfig::RESOURCE_WISHLISTS, + WishlistsRestApiConfig::RESOURCE_WISHLIST_ITEMS, + ], + ]; +} +``` + +### 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestCustomerAccessAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCustomerAccessAttributesTransfer | + +{% endinfo_block %} + +### 4) Set up behavior + +#### Enable resources + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CustomerAccessResourceRoutePlugin | Registers the `customer-access` resource. | None | Spryker\Glue\CustomerAccessRestApi\Plugin\GlueApplication | +| CustomerAccessFormatRequestPlugin | Checks whether the current resource is restricted by the `spryker/customer-access` module. | None | Spryker\Glue\CustomerAccessRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + 'remove-expired-refresh-tokens', + 'command' => '$PHP_BIN vendor/bin/console oauth:refresh-token:remove-expired', + 'schedule' => '*/5 * * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +### Enable resources and relationships + +{% info_block infoBox %} + +For information on how to protect resources, see [Authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html). + +{% endinfo_block %} + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|--------------------------------------------------------------------| +| SetCustomerBeforeActionPlugin | Adds customer data to the session. | Expects the user field to be set in REST requests. | Spryker\Glue\CustomersRestApi\Plugin | +| CustomersResourceRoutePlugin | Registers the `customers` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| AddressesResourceRoutePlugin | Registers the `addresses` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| CustomerForgottenPasswordResourceRoutePlugin | Registers the `customer-forgotten-password` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| CustomerRestorePasswordResourceRoutePlugin | Registers the `customer-restore-password` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| CustomerPasswordResourceRoutePlugin | Registers the `customer-password` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| CustomersToAddressesRelationshipPlugin | Adds the `addresses` resource as a relationship to the `customers` resource. | | Spryker\Glue\CustomersRestApi\Plugin | +| AccessTokensResourceRoutePlugin | Registers the `access-token` resource. | | Spryker\Glue\AuthRestApi\Plugin | +| RefreshTokensResourceRoutePlugin | Registers the `refresh-tokens` resource. | | Spryker\Glue\AuthRestApi\Plugin | +| TokenResourceRoutePlugin | Registers the `token` resource. | | Spryker\Glue\AuthRestApi\Plugin\GlueApplication | +| CustomerConfirmationResourceRoutePlugin | Registers the `customer-confirmation` resource. | | Spryker\Glue\CustomersRestApi\Plugin\GlueApplication | +| AccessTokenRestRequestValidatorPlugin | Validates authentication tokens in the requests to protected resources. | | Spryker\Glue\AuthRestApi\Plugin | +| FormatAuthenticationErrorResponseHeadersPlugin | Adds an authentication error to the header of requests with an invalid authentication token. | | Spryker\Glue\AuthRestApi\Plugin | +| RestUserFinderByAccessTokenPlugin | Finds a REST user based on the provided REST request data. | | Spryker\Glue\AuthRestApi\Plugin | +| OauthClientInstallerPlugin | Populates the database with OAuth client data. | | Spryker\Zed\Oauth\Communication\Plugin\Installer | +| OauthCustomerScopeInstallerPlugin | Installs OAuth customer scope data. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Installer | +| CustomerOauthUserProviderPlugin | Provides a customer OAuth user. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin | +| CustomerOauthScopeProviderPlugin | Provides a list of customer scopes. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin | +| OauthExpiredRefreshTokenRemoverPlugin | Removes expired refresh tokens based on the provided criteria transfer. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenCheckerPlugin | Checks if a refresh token is revoked. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenReaderPlugin | Finds a refresh token by the provided criteria transfer. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenRevokerPlugin | Revokes a refresh token. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenPersistencePlugin | Saves a refresh token. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokensReaderPlugin | Gets refresh tokens by the provided criteria. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokensRevokerPlugin | Revokes all refresh tokens. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| AddressByCheckoutDataResourceRelationshipPlugin | Adds the `addresses` resource as a relationship. | | Spryker\Glue\CustomersRestApi\Plugin\GlueApplication | +| CustomerAddressSourceCheckerPlugin | Checks if a customer address ID is provided in the address attributes. | | Spryker\Glue\CustomersRestApi\Plugin\ShipmentsRestApi | +| CustomerAddressCheckoutDataValidatorPlugin | Collects shipping address UUIDs from `checkoutDataTransfer.shipments`. If the authenticated customer does not own the provided customer address, returns `CheckoutResponseTransfer` with an error. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\CheckoutRestApi | +| CustomerAddressProviderStrategyPlugin | Finds a customer address based on the UUID provided in `RestAddressTransfer.id`. If the address is found, returns it. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\ShipmentsRestApi | +| BillingAddressCheckoutRequestAttributesValidatorPlugin | Validates `RestCheckoutRequestAttributesTransfer.billingAddress` mandatory fields. | | Spryker\Glue\CustomersRestApi\Plugin\CheckoutRestApi | +| OauthTokenConsole | Remove expired refresh tokens from the database. | | Spryker\Zed\Oauth\Communication\Console | +| ScopeCacheCollectorConsole | Creates a cache file for collecting all existing scopes. | | Spryker\Zed\Oauth\Communication\Console | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CustomersRestApiConfig::RESOURCE_CUSTOMERS, + new CustomersToAddressesRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new AddressByCheckoutDataResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } + + /** + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\RestUserFinderPluginInterface[] + */ + protected function getRestUserFinderPlugins(): array + { + return [ + new RestUserFinderByAccessTokenPlugin(), + ]; + } +} +``` + +
    + + +
    +src/Pyz/Zed/Oauth/OauthDependencyProvider.php + +```php + + + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + protected function getCheckoutRequestAttributesValidatorPlugins(): array + { + return [ + new BillingAddressCheckoutRequestAttributesValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new OauthTokenConsole(), + new ScopeCacheCollectorConsole(), + ]; + + return $commands; + } +} +``` + + +2. Set up the OAuth client: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +To verify that the OAuth client has been added to the `spy_oauth_client table`, run the SQL query: + +```sql +SELECT * FROM spy_oauth_client WHERE identifier = 'some-client-identifier'; +``` + +The output should contain one record. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure the following endpoints are available: + +- `https://glue.mysprykershop.com/customers` +- `https://glue.mysprykershop.com/addresses` +- `https://glue.mysprykershop.com/customer-password` +- `https://glue.mysprykershop.com/customer-forgotten-password` +- `https://glue.mysprykershop.com/customer-restore-password` +- `https://glue.mysprykershop.com/access-tokens` +- `https://glue.mysprykershop.com/refresh-tokens` +- `https://glue.mysprykershop.com/token` +- `https://glue.mysprykershop.com/customer-confirmation` + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify that the `addresses` resource relationship is registered correctly: + +1. [Add a customer address](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html#add-an-address). + +2. Send the request: `GET https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}?include=addresses`. + +Make sure the response contains the relationships to the `addresses` resource. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that `AccessTokenRestRequestValidatorPlugin` is set up correctly, send the `POST https://glue.mysprykershop.com/refresh-tokens` request without the `Authorization` header or with an outdated or incorrect authentication token. + +Make sure one of the following errors is returned: + + ```json + { + "errors": [ + { + "detail": "Invalid access token.", + "status": 401, + "code": "001" + } + ] + } + ``` + + + + ```json + { + "errors": [ + { + "detail": "Missing access token.", + "status": 403, + "code": "002" + } + ] + } + ``` + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify that `FormatAuthenticationErrorResponseHeadersPlugin` is set up: + +1. Retrieve an authentication token for a user. + +2. Check that you can access an endpoint that requires this token only when you add it to the request. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify that `RestUserFinderByAccessTokenPlugin` is set up: + +1. Retrieve an authentication token for a user. + +2. Send a request to an endpoint that requires the data of the current customer, like `/carts` or `/customer/{% raw %}{{{% endraw %}customerReference{% raw %}}}{% endraw %}`. + +3. Check that the system detects the current customer correctly: you should be able to retrieve all the data you can see on the Storefront, like cart items or prices. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that `OauthRefreshTokenSaverPlugin` is set up, send the request: `POST https://glue.mysprykershop.com/access-tokens`. + +Make sure the following applies: + +- The response contains `access-token` and `refresh-token` sections. + +- A new record has been added to the `spy_oauth_refresh_token` table. To check it, run the SQL query: + + ```sql + SELECT * FROM spy_oauth_refresh_token WHERE customer_reference = 'authenticated-customer-reference'; + ``` + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify that `OauthRefreshTokenReaderPlugin` and `OauthRefreshTokenRevokerPlugin` are set up: + +1. Send the request: `DELETE https://glue.mysprykershop.com/refresh-tokens/{% raw %}{{{% endraw %}refresh_token}`. +2. To check that the refresh token has been revoked, run the following SQL query: + +```sql +SELECT * FROM spy_oauth_refresh_token WHERE revoked_at IS NOT NULL; +``` + +Make sure the `spy_oauth_refresh_token::revoked_at` database field is not empty. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify that `OauthRefreshTokensReaderPlugin` and `OauthRefreshTokensRevokerPlugin` are set up: + +1. Prepare several refresh tokens. + +2. Send the request: `DELETE https://glue.mysprykershop.com/refresh-tokens/mine`. + +3. Run the following SQL query: + + ```sql + SELECT * FROM spy_oauth_refresh_token WHERE customer_reference = 'authenticated-customer-reference'; + ``` + +Check that the `spy_oauth_refresh_token::revoked_at` values of all the records related to the authenticated customer are not empty. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that `OauthRefreshTokenCheckerPlugin` is set up, send the following request with a revoked refresh token: + +`POST https://glue.mysprykershop.com/refresh-tokens` + +```json +{ + "data": { + "type": "refresh-tokens", + "attributes": { + "refreshToken": "{% raw %}{{{% endraw %}revoked_refresh_token{% raw %}}}{% endraw %}" + } + } +} +``` + +Make sure you get the following response: + +```json +{ + "errors": [ + { + "code": "004", + "status": 401, + "detail": "Failed to refresh token." + } + ] +} +``` + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify `OauthRefreshTokenRemoverPlugin` is set up, delete expired refresh tokens: + +```shell +console oauth:refresh-token:remove-expired +``` + +Make sure all the expired refresh tokens older than defined by the removal interval you've configured in `Spryker\Shared\Oauth\OauthConfig::getRefreshTokenRetentionInterval()` have been deleted. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify `AddressByCheckoutDataResourceRelationshipPlugin` is set up, send the `POST https://glue.mysprykershop.com/checkout-data?include=addresses` request. Make sure the response contains the information from the `addresses` resource. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure the following console commands are available: + +- Create a cache file for all existing scopes: + +```bash +console oauth:scope-collection-file:generate +``` + +- Remove expired refresh tokens from the database: + +```bash +console oauth:refresh-token:remove-expired +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-inventory-management-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-inventory-management-glue-api.md new file mode 100644 index 00000000000..a66dd9370f5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-inventory-management-glue-api.md @@ -0,0 +1,130 @@ + + +This document describes how to install the Inventory Management feature API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core| {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +|Inventory Management| {{page.release_tag}} | | + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-availabilities-rest-api:"^2.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductAvailabilitiesRestApi| vendor/spryker/product-availabilities-rest-api| +| ProductsRestApi| vendor/spryker/products-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestAbstractProductAvailabilityAttributesTransfer| class| created| src/Generated/Shared/Transfer/RestAbstractProductAvailabilityAttributesTransfer| +| RestConcreteProductAvailabilityAttributesTransfer| class| created| src/Generated/Shared/Transfer/RestConcreteProductAvailabilityAttributesTransfer| + +{% endinfo_block %} + +## 3) Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|AbstractProductAvailabilitiesRoutePlugin | Registers the abstract product availabilities resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin | +| ConcreteProductAvailabilitiesRoutePlugin | Registers the concrete product availabilities resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin | +| AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin | Adds the abstract product availability resource as a relationship to the abstract product resource. | None | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication | +| ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin | Adds the concrete product availability resource as a relationship to the concrete product resource. | None |Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\GlueApplication | + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductAvailabilitiesByResourceIdResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductAvailabilitiesByResourceIdResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: + +- `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-availabilities` +- `http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-availabilities` + +Send the `GET http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-availabilities` and make sure that the response includes relationships to the `abstract-product-availabilities` resource. + +Send the `GET http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=concrete-product-availabilities` and make sure that the response includes relationships to the `concrete-product-availabilities` resource. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-measurement-units-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-measurement-units-glue-api.md new file mode 100644 index 00000000000..fa51e6ee0b8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-measurement-units-glue-api.md @@ -0,0 +1,667 @@ + + +Follow the steps below to install Measurement units feature API. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | LINK | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Measurement Units | {{page.release_tag}} | [Install the Product Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | + +## 1) Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker/product-measurement-units-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductMeasurementUnitsRestApi | vendor/spryker/product-measurement-units-rest-api | + +{% endinfo_block %} + + +## 2) Set up database schema and transfer objects + +Generate the transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that `SpyProductMeasurementUnitStorage` and `SpyProductConcreteStorage` have been extended with synchronization behavior, namely with the methods: + +| ENTITY | TYPE | EVENT | PATH | METHODS | +| --- | --- | --- | --- | --- | +| SpyProductMeasurementUnitStorage | class | extended | src/Orm/Zed/ProductMeasurementUnitStorage/Persistence/Base/SpyProductMeasurementUnitStorage | syncPublishedMessageForMappings(), syncUnpublishedMessageForMappings() | +| SpyProductConcreteStorage | class | extended | src/Orm/Zed/ProductStorage/Persistence/Base/SpyProductConcreteStorage | syncPublishedMessageForMappings(), syncUnpublishedMessageForMappings() | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestProductMeasurementUnitsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestProductMeasurementUnitsAttributesTransfer | +| RestSalesUnitsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestSalesUnitsAttributesTransfer | +| RestCartItemsSalesUnitAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCartItemsSalesUnitAttributesTransfer | +| RestOrdersProductMeasurementUnitsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrdersProductMeasurementUnitsAttributesTransfer | +| RestOrdersSalesUnitAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrdersSalesUnitAttributesTransfer | +| RestCartItemsAttributesTransfer.salesUnit | property | added | src/Generated/Shared/Transfer/RestCartItemsAttributesTransfer | +| RestItemsAttributesTransfer.salesUnit | property | added | src/Generated/Shared/Transfer/RestItemsAttributesTransfer | +| RestItemsAttributesTransfer.sku | property | added | src/Generated/Shared/Transfer/RestItemsAttributesTransfer | +| RestOrderItemsAttributesTransfer.salesUnit | property | added | src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer | + +{% endinfo_block %} + + +## 3) Set up behavior + +Set up the following behaviors. + +### Re-export data to storage + +Run the following commands to reload abstract and concrete product data to the Storage: + +```bash +console event:trigger -r product_measurement_unit +console event:trigger -r product_concrete +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following key-value store keys exist and there is data in them: + +- `kv:product_measurement_unit:code:{% raw %}{{{% endraw %}product_measurement_unit_code{% raw %}}}{% endraw %}` +- `kv:product_concrete:{% raw %}{{{% endraw %}locale_name{% raw %}}}{% endraw %}:sku:{% raw %}{{{% endraw %}sku_product_concrete{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +### Enable resources and relationships + +Activate the following plugins: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitsResourceRoutePlugin | Registers the `product-measurement-units` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin | +| SalesUnitsResourceRoutePlugin | Registers the `sales-units` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin | +| ProductMeasurementUnitsByProductConcreteResourceRelationshipPlugin | Adds the `product-measurement-units` resource as a relationship of the `product-concrete` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\GlueApplication | +| SalesUnitsByProductConcreteResourceRelationshipPlugin | Adds the `sales-units` resource as a relationship of the `product-concrete` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\GlueApplication | +| ProductMeasurementUnitsBySalesUnitResourceRelationshipPlugin | Adds the `product-measurement-units` resource as a relationship of the `sales-units` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\GlueApplication | +| SalesUnitsByCartItemResourceRelationshipPlugin | Adds the `sales-units` resource as relationship of the `item` resource. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\GlueApplication | + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductMeasurementUnitsByProductConcreteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new SalesUnitsByProductConcreteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductMeasurementUnitsRestApiConfig::RESOURCE_SALES_UNITS, + new ProductMeasurementUnitsBySalesUnitResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CART_ITEMS, + new SalesUnitsByCartItemResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS_ITEMS, + new SalesUnitsByCartItemResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductMeasurementUnitsResourceRoutePlugin` plugin is set up: +1. Send the request `GET https://glue.mysprykershop.com/product-measurement-units/{% raw %}{{{% endraw %}product_measurement_unit_code{% raw %}}}{% endraw %}`. + +2. You should get a valid response, similar to the following: + +```json +{ + "data": { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + } +} +``` + +{% endinfo_block %} + + + +{% info_block warningBox "Verification" %} + +Make sure that the `SalesUnitsResourceRoutePlugin` and `ProductMeasurementUnitsBySalesUnitResourceRelationshipPlugin` plugins are set up: +1. Send the request `GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}/sales-units?include=product-measurement-units`. + +2. You should get a valid response, similar to the following: + +
    +Response sample + +```json +{ + "data": [ + { + "type": "sales-units", + "id": "5", + "attributes": { + "conversion": 0.30480000000000002, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "FOOT" + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/concrete-products/215_124/sales-units/5" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "FOOT" + } + ] + } + } + } + ], + "links": { + "self": "http://glue.de.suite-nonsplit.local/concrete-products/215_124/sales-units?include=product-measurement-units&XDEBUG_SESSION_START=PHPHSTORM" + }, + "included": [ + { + "type": "product-measurement-units", + "id": "FOOT", + "attributes": { + "name": "Foot", + "defaultPrecision": 100 + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-measurement-units/FOOT" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductMeasurementUnitsByProductConcreteResourceRelationshipPlugin` and `SalesUnitsByProductConcreteResourceRelationshipPlugin` relationship plugins are set up: +1. Send the request `GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}?include=product-measurement-units,sales-units`. + +2. You should get a valid response, similar to the following: + +
    +Response sample + +```json +{ + "data": { + "type": "concrete-products", + "id": "215_123", + "attributes": { + "sku": "215_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "ASUS HDMI-HDMI Black", + "description": "HDMI to HDMI High Speed Cable", + "attributes": { + "brand": "ASUS", + "color": "Black", + "packaging_unit": "Item" + }, + "superAttributesDefinition": [ + "color", + "packaging_unit" + ], + "metaTitle": "Asus HDMI - HDMI", + "metaKeywords": "Asus, Cable, HDMI", + "metaDescription": "The perfect cable for your home", + "attributeNames": { + "brand": "Brand", + "color": "Color", + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/215_123?include=product-measurement-units,sales-units" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + }, + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "1" + }, + { + "type": "sales-units", + "id": "2" + } + ] + } + } + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "1", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/215_123/sales-units/1" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + }, + { + "type": "product-measurement-units", + "id": "CMET", + "attributes": { + "name": "Centimeter", + "defaultPrecision": 10 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/CMET" + } + }, + { + "type": "sales-units", + "id": "2", + "attributes": { + "conversion": 0.01, + "precision": 10, + "isDisplayed": true, + "isDefault": false, + "productMeasurementUnitCode": "CMET" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/215_123/sales-units/2" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "CMET" + } + ] + } + } + } + ] +} +``` + +
    + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that the `SalesUnitsByCartItemResourceRelationshipPlugin` relationship plugin is set up: +1. Send the request `GET https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}?include=items,sales-units`. + +2. You should get a valid response, similar to the following: + +
    +Response sample + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 798, + "subtotal": 5000, + "grandTotal": 5000 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=items,sales-units" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "215_124_quantity_sales_unit_id_4_amount_5_sales_unit_id_4" + } + ] + } + } + }, + "included": [ + { + "type": "sales-units", + "id": "4", + "attributes": { + "conversion": 0.01, + "precision": 1, + "isDisplayed": true, + "isDefault": false, + "productMeasurementUnitCode": "CMET" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/215_124/sales-units/4" + } + }, + { + "type": "items", + "id": "215_124_quantity_sales_unit_id_4_amount_5_sales_unit_id_4", + "attributes": { + "sku": "215_124", + "quantity": 4, + "groupKey": "215_124_quantity_sales_unit_id_4_amount_5_sales_unit_id_4", + "abstractSku": "215", + "amount": "20", + "calculations": { + "unitPrice": 1250, + "sumPrice": 5000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1250, + "sumGrossPrice": 5000, + "unitTaxAmountFullAggregation": 200, + "sumTaxAmountFullAggregation": 798, + "sumSubtotalAggregation": 5000, + "unitSubtotalAggregation": 1250, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1250, + "sumPriceToPayAggregation": 5000 + }, + "salesUnit": { + "id": 4, + "amount": "20" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/215_124_quantity_sales_unit_id_4_amount_5_sales_unit_id_4" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "4" + } + ] + } + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +### Provide dependencies for the CartsRestApi module + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SalesUnitsRestCartItemsAttributesMapperPlugin | Maps `ItemTransfer::$amountSalesUnit` to `RestItemsAttributesTransfer::$salesUnit`. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\CartsRestApi | +| SalesUnitCartItemExpanderPlugin | Expands `CartItemRequestTransfer` with `amount` and `idProductMeasurementSalesUnit`. | None | Spryker\Glue\ProductMeasurementUnitsApi\Plugin\CartsRestApi | +| SalesUnitCartItemMapperPlugin | Maps `CartItemRequestTransfer::$idProductMeasurementSalesUnit`, `CartItemRequestTransfer::$amount` to `PersistentCartChangeTransfer::$items`. | None | Spryker\Zed\ProductMeasurementUnitsRestApi\Communication\Plugin\CartsRestApi | + + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + +src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: +- `https://glue.mysprykershop.com/carts` +- `https://glue.mysprykershop.com/guest-carts` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that it's possible to create more than one cart. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that after creating several carts, a response from the `GET https://glue.mysprykershop.com/carts` request contains data about all created carts. +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-navigation-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-navigation-glue-api.md new file mode 100644 index 00000000000..6d308940515 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-navigation-glue-api.md @@ -0,0 +1,451 @@ +--- + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. The current feature integration guide only adds the **Navigation REST API** functionality. + +{% endinfo_block %} + +## Install Feature API + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Navigation | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/navigations-rest-api:"^2.0.0" spryker/navigations-category-nodes-resource-relationship:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| NavigationsRestApi | vendor/spryker/navigations-rest-api | +| NavigationsCategoryNodesResourceRelationship | vendor/spryker/navigations-category-nodes-resource-relationship | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestNavigationAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestNavigationAttributesTransfer | +| RestNavigationNodeTransfer | class | created | src/Generated/Shared/Transfer/RestNavigationNodeTransfer | + +{% endinfo_block %} + + +### 3) Set up configuration + +#### Configure navigation mapping + +{% info_block infoBox %} + +Specify mapping for the source field from which the resourceId field should be filled (depends on a navigation node type). + +{% endinfo_block %} + +**src/Pyz/Glue/NavigationsRestApi/NavigationsRestApiConfig.php** + +```php + 'fkResourceCategorynode', + 'cms_page' => 'fkResourcePage', + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +The verification for this step can be provided once the resource is provided in the *Set up Behavior* section below. + +{% endinfo_block %} + +### 4) Set up behavior + +#### Enable resources and relationships + +Activate the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| NavigationsResourceRoutePlugin | Registers the `navigations` resource. | None | Spryker\Glue\NavigationsRestApi\Plugin\ResourceRoute | +| CategoryNodeByResourceIdResourceRelationshipPlugin | Adds the `category node` resource as a relationship. | None | \Spryker\Glue\NavigationsCategoryNodesResourceRelationship\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + NavigationsRestApiConfig::RESOURCE_NAVIGATIONS, + new CategoryNodeByResourceIdResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +`NavigationsResourceRoutePlugin` is set up correctly if the following endpoint is available: `https://glue.mysprykershop.com/navigations/{navigationId}` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Now, it's possible to verify that the configuration of NavigationsRestApiConfig is done correctly. Perform the `https://glue.mysprykershop.com/navigations/{navigationId}` request and check that each node of the type you set up in the configuration (category and CMS pages in the example "resourceId" is filled with the valid foreign key.) + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Send a request to `https://glue.mysprykershop.com/navigations/MAIN_NAVIGATION?include=category-nodes`. + +Make sure that the response contains `category-nodes` as a relationship and `category-nodes` data included. + +
    +https://glue.mysprykershop.com/navigations/MAIN_NAVIGATION?include=category-nodes + +```json +{ + "data": { + "type": "navigations", + "id": "MAIN_NAVIGATION", + "attributes": { + "nodes": [ + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": 6, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Notebooks", + "url": "/de/computer/notebooks", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 8, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Tablets", + "url": "/de/computer/tablets", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 12, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartphones", + "url": "/de/telekommunikation-&-navigation/smartphones", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 10, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartwatches", + "url": "/de/intelligente-tragbare-geräte/smartwatches", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Top Kategorien", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "name": "Top Navigation", + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/navigations/MAIN_NAVIGATION?include=category-nodes" + }, + "relationships": { + "category-nodes": { + "data": [ + { + "type": "category-nodes", + "id": "10" + }, + { + "type": "category-nodes", + "id": "12" + }, + { + "type": "category-nodes", + "id": "6" + }, + { + "type": "category-nodes", + "id": "8" + } + ] + } + } + }, + "included": [ + { + "type": "category-nodes", + "id": "10", + "attributes": { + "nodeId": 10, + "name": "Smartwatches", + "metaTitle": "Smartwatches", + "metaKeywords": "Smartwatches", + "metaDescription": "Smartwatches", + "isActive": true, + "url": "/de/intelligente-tragbare-geräte/smartwatches", + "children": [], + "parents": [ + { + "nodeId": 9, + "name": "Intelligente tragbare Geräte", + "metaTitle": "Intelligente tragbare Geräte", + "metaKeywords": "Intelligente tragbare Geräte", + "metaDescription": "Intelligente tragbare Geräte", + "isActive": true, + "url": "/de/intelligente-tragbare-geräte", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "Deutsche Version des Demoshop", + "metaDescription": "Deutsche Version des Demoshop", + "isActive": true, + "url": "/de", + "children": [], + "parents": [], + "order": null + } + ], + "order": 70 + } + ], + "order": 70 + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/10" + } + }, + { + "type": "category-nodes", + "id": "12", + "attributes": { + "nodeId": 12, + "name": "Smartphones", + "metaTitle": "Smartphones", + "metaKeywords": "Smartphones", + "metaDescription": "Smartphones", + "isActive": true, + "url": "/de/telekommunikation-&-navigation/smartphones", + "children": [], + "parents": [ + { + "nodeId": 11, + "name": "Telekommunikation & Navigation", + "metaTitle": "Telekommunikation & Navigation", + "metaKeywords": "Telekommunikation & Navigation", + "metaDescription": "Telekommunikation & Navigation", + "isActive": true, + "url": "/de/telekommunikation-&-navigation", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "Deutsche Version des Demoshop", + "metaDescription": "Deutsche Version des Demoshop", + "isActive": true, + "url": "/de", + "children": [], + "parents": [], + "order": null + } + ], + "order": 80 + } + ], + "order": 80 + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/12" + } + }, + { + "type": "category-nodes", + "id": "6", + "attributes": { + "nodeId": 6, + "name": "Notebooks", + "metaTitle": "Notebooks", + "metaKeywords": "Notebooks", + "metaDescription": "Notebooks", + "isActive": true, + "url": "/de/computer/notebooks", + "children": [], + "parents": [ + { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "url": "/de/computer", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "Deutsche Version des Demoshop", + "metaDescription": "Deutsche Version des Demoshop", + "isActive": true, + "url": "/de", + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + } + ], + "order": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/6" + } + }, + { + "type": "category-nodes", + "id": "8", + "attributes": { + "nodeId": 8, + "name": "Tablets", + "metaTitle": "Tablets", + "metaKeywords": "Tablets", + "metaDescription": "Tablets", + "isActive": true, + "url": "/de/computer/tablets", + "children": [], + "parents": [ + { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "url": "/de/computer", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "Deutsche Version des Demoshop", + "metaDescription": "Deutsche Version des Demoshop", + "isActive": true, + "url": "/de", + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + } + ], + "order": 80 + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/8" + } + } + ] +} +``` + +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-order-management-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-order-management-glue-api.md new file mode 100644 index 00000000000..83caa67ba45 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-order-management-glue-api.md @@ -0,0 +1,326 @@ + + +Follow the steps below to install the Glue API: Order Management feature. + + +## Prerequisites + +To start feature integration, overview and install the following features and Glue APIs: + +| NAME | VERSION | INSTALLATION GUIDE | +| ---------------- | ------- | --------------------------- | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/orders-rest-api:"^4.7.0" --update-with-dependencies +``` + + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------ | ------------------ | +| OrdersRestApi | vendor/spryker/orders-rest-api | + +{% endinfo_block %} + + + +## 2) Set up transfer objects + +Generate the transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +| --------------- | ---- | ------ | ------------------ | +| RestOrdersAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrdersAttributesTransfer | +| RestOrderDetailsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrderDetailsAttributesTransfer | +| RestOrderItemsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer | +| RestOrderTotalsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrderTotalsAttributesTransfer | +| RestOrderExpensesAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestOrderExpensesAttributesTransfer | +| RestOrderAddressTransfer | class | created | src/Generated/Shared/Transfer/RestOrderAddressTransfer | +| RestOrderPaymentTransfer | class | created | src/Generated/Shared/Transfer/RestOrderPaymentTransfer | +| RestOrderItemMetadataTransfer | class | created | src/Generated/Shared/Transfer/RestOrderItemMetadataTransfer | +| RestCalculatedDiscountTransfer | class | created | src/Generated/Shared/Transfer/RestCalculatedDiscountTransfer | +| RestOrderShipmentTransfer | class | created | src/Generated/Shared/Transfer/RestOrderShipmentTransfer | +| ShipmentMethodTransfer | class | created | src/Generated/Shared/Transfer/ShipmentMethodTransfer | +| ExpenseTransfer | class | created | src/Generated/Shared/Transfer/ExpenseTransfer | +| RestUserTransfer | class | created | src/Generated/Shared/Transfer/RestUserTransfer | + +{% endinfo_block %} + +## 3) Set up behavior: Enable resources + +Activate the following plugins: + +{% info_block infoBox %} + +`OrdersResourceRoutePlugin` GET verb is a protected resource. For more details, see the `configure` function [Resource routing](/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.html). + +{% endinfo_block %} + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | --------------------- | ------------ | --------------- | +| OrdersResourceRoutePlugin | Registers the `orders` resource. | None | Spryker\Glue\OrdersRestApi\Plugin | +| OrderRelationshipByOrderReferencePlugin | Adds the `orders` resource as a relationship by order reference. | None | Spryker\Glue\OrdersRestApi\Plugin | +| CustomerOrdersResourceRoutePlugin | Adds the configuration for resource routing, mapping of HTTP methods to controller actions and defines if actions are protected. | None | Spryker\Glue\OrdersRestApi\Plugin | + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT, + new OrderRelationshipByOrderReferencePlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + + + +{% info_block warningBox "Verification" %} + +To verify that `OrdersResourceRoutePlugin` is set up correctly, make sure that the following endpoints are available: + +- `https://glue.mysprykershop.comm/orders` +- `https://glue.mysprykershop.comm/orders/{% raw %}{{{% endraw %}order_reference{% raw %}}}{% endraw %}` + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify that `CustomerOrdersResourceRoutePlugin` is set up correctly, make sure that the `https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customerId{% raw %}}}{% endraw %}/orders` endpoint is available. + +{% endinfo_block %} + + + +{% info_block warningBox "Verification" %} + +To verify that `OrderRelationshipByOrderReferencePlugin` is set up correctly, make sure that the `orders` relationship is returned after sending the following request: + +
    +POST https://glue.mysprykershop.comm/checkout?include=orders + +```json +{ + "data": { + "type": "checkout", + "id": null, + "attributes": { + "orderReference": "DE--2", + "redirectUrl": null, + "isExternalRedirect": null + }, + "links": { + "self": "https://glue.mysprykershop.comm/checkout?include=orders" + }, + "relationships": { + "orders": { + "data": [ + { + "type": "orders", + "id": "DE--2" + } + ] + } + } + }, + "included": [ + { + "type": "orders", + "id": "DE--2", + "attributes": { + "createdAt": "2020-03-30 05:07:22.442535", + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE", + "totals": { + "expenseTotal": 490, + "discountTotal": 0, + "taxTotal": 1675, + "subtotal": 9999, + "grandTotal": 10489, + "canceledTotal": 0 + }, + "billingAddress": { + "salutation": "Mr", + "firstName": "spencor", + "middleName": null, + "lastName": "hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "company": "Spryker", + "city": "Berlin", + "zipCode": "61000", + "poBox": null, + "phone": "+380669455897", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "shippingAddress": { + "salutation": "Mr", + "firstName": "spencor", + "middleName": null, + "lastName": "hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "company": "Spryker", + "city": "Berlin", + "zipCode": "61000", + "poBox": null, + "phone": "+380669455897", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "items": [ + { + "name": "Canon IXUS 285", + "sku": "009_30692991", + "sumPrice": 9999, + "quantity": 1, + "unitGrossPrice": 9999, + "sumGrossPrice": 9999, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 9999, + "unitTaxAmountFullAggregation": 1596, + "sumTaxAmountFullAggregation": 1596, + "refundableAmount": 9999, + "canceledAmount": 0, + "sumSubtotalAggregation": 9999, + "unitSubtotalAggregation": 9999, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 9999, + "sumPriceToPayAggregation": 9999, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "metadata": { + "superAttributes": [], + "image": "https://images.icecat.biz/img/gallery_lows/30692991_6058401644.jpg" + }, + "calculatedDiscounts": [], + "productOptions": [] + } + ], + "expenses": [ + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Standard", + "sumPrice": 490, + "unitGrossPrice": 490, + "sumGrossPrice": 490, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 79, + "sumTaxAmount": 79, + "unitPriceToPayAggregation": 490, + "sumPriceToPayAggregation": 490, + "taxAmountAfterCancellation": null + } + ], + "payments": [ + { + "amount": 10489, + "paymentProvider": "DummyPayment", + "paymentMethod": "Credit Card" + } + ], + "shipments": [ + { + "shipmentMethodName": "Standard", + "carrierName": "Spryker Dummy Shipment", + "deliveryTime": null, + "defaultGrossPrice": 490, + "defaultNetPrice": 0, + "currencyIsoCode": "EUR" + } + ], + "calculatedDiscounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.comm/orders/DE--2" + } + } + ] +} +``` + +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-payments-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-payments-glue-api.md new file mode 100644 index 00000000000..ee5fa7b1895 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-payments-glue-api.md @@ -0,0 +1,362 @@ + + +{% info_block errorBox %} + +The following feature integration Guide expects the basic feature to be in place. The current guide only adds the Payment Management API functionality. + +{% endinfo_block %} + + +Follow the steps below to install Payments feature API. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Payments | {{page.release_tag}} | [Install the Payments feature](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-feature.html) | + +## 1) Install the required modules using Composer + +Install the required modules: + +```bash +composer require spryker/payments-rest-api:"1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| PaymentsRestApi | vendor/spryker/payments-rest-api | + +{% endinfo_block %} + +## 2) Set up configuration + +Put all the payment methods available in the shop to `CheckoutRestApiConfig`, for example: + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiConfig.php** + +```php + 1, + DummyPaymentConfig::PAYMENT_METHOD_CREDIT_CARD => 2, + ]; + + protected const PAYMENT_METHOD_REQUIRED_FIELDS = [ + DummyPaymentConfig::PROVIDER_NAME => [ + DummyPaymentConfig::PAYMENT_METHOD_INVOICE => [ + 'dummyPaymentInvoice.dateOfBirth', + ], + DummyPaymentConfig::PAYMENT_METHOD_CREDIT_CARD => [ + 'dummyPaymentCreditCard.cardType', + 'dummyPaymentCreditCard.cardNumber', + 'dummyPaymentCreditCard.nameOnCard', + 'dummyPaymentCreditCard.cardExpiresMonth', + 'dummyPaymentCreditCard.cardExpiresYear', + 'dummyPaymentCreditCard.cardSecurityCode', + ], + ], + ]; +} +``` + + +## 3) Set up transfer objects + +### Install payment methods + +To have payment methods available for the checkout, extend `RestPaymentTransfer` with project-specific payment method transfers: + +**src/Pyz/Shared/CheckoutRestApi/Transfer/checkout_rest_api.transfer.xml** + +```xml + + + + + + + + + + +``` + + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestCheckoutRequestAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutRequestAttributesTransfer.php | +| QuoteTransfer | class | created | src/Generated/Shared/Transfer/QuoteTransfer.php | +| PaymentTransfer | class | created | src/Generated/Shared/Transfer/PaymentTransfer.php | +| RestPaymentTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentTransfer.php | +| RestPaymentMethodsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentMethodsAttributesTransfer.php | +| RestCheckoutTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutTransfer.php | +| PaymentMethodTransfer | class | created | src/Generated/Shared/Transfer/PaymentMethodTransfer.php | +| PaymentProviderTransfer | class | created | src/Generated/Shared/Transfer/PaymentProviderTransfer.php | +| PaymentMethodsTransfer | class | created | src/Generated/Shared/Transfer/PaymentMethodsTransfer.php | +| RestCheckoutDataTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataTransfer.php | +| PaymentProviderCollectionTransfer | class | created | src/Generated/Shared/Transfer/PaymentProviderCollectionTransfer.php | +| RestCheckoutDataResponseAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestCheckoutDataResponseAttributesTransfer.php | +| RestPaymentMethodTransfer | class | created | src/Generated/Shared/Transfer/RestPaymentMethodTransfer.php | +| RestPaymentTransfer.DummyPayment | property | created | src/Generated/Shared/Transfer/RestPaymentTransfer.php | +| RestPaymentTransfer.DummyPaymentInvoice | property | created | src/Generated/Shared/Transfer/RestPaymentTransfer.php | +| RestPaymentTransfer.DummyPaymentCreditCard | property | created | src/Generated/Shared/Transfer/RestPaymentTransfer.php | + +{% endinfo_block %} + + +## 4) Set up behavior + +### Enable resources and relationships + +Activate the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------| +| PaymentMethodsByCheckoutDataResourceRelationshipPlugin | Adds the `payment-methods` resource as relationship in case `RestCheckoutDataTransfer` is provided as payload. | | Spryker\Glue\PaymentsRestApi\Plugin\GlueApplication | +| PaymentCustomersResourceRoutePlugin | Returns customer data to use on the Storefront address page. | | Spryker\Glue\PaymentsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new PaymentMethodsByCheckoutDataResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } + + /** + * {@inheritDoc} + * + * @return array<\Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRoutePluginInterface> + */ + protected function getResourceRoutePlugins(): array + { + return [ + new PaymentCustomersResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +- To verify `PaymentMethodsByCheckoutDataResourceRelationshipPlugin` is activated, send a `POST https://glue.mysprykershop.com/checkout-data?include=payment-methods` and request and make sure that `checkout-data` resource has a relationship to the `payment-methods` resources. +- To verify `PaymentCustomersResourceRoutePlugin` is activated, send a `POST https://glue.mysprykershop.com/payment-customers` request and make sure that customer data is returned. + +Here is an example request for the PayOne PayPal Express payment method used by a guest or authorized customer to retrieve user data such as addresses from the PSP: + +`POST https://glue.mysprykershop.com/payment-customers` + +```json +{ + "data": { + "type": "payment-customers", + "attributes": { + "payment": { + "paymentMethodName": "paypal-express", + "paymentProviderName": "payone" + }, + "customerPaymentServiceProviderData": { + "orderId": "order-id", + "workorderid": "workorder-id", + "transactionId": "transaction-id", + "token": "token", + "currency": "EUR", + "idCart": "d79a9c31-ed3d-57f5-958b-498e6b862ab3" + } + } + } +} +``` + +The response can be different depending on the payment method. + +
    + Response example + +```json +{ + "type": "payment-customers", + "id": null, + "attributes": { + "customer": { + "salutation": "n/a", + "firstName": "Spryker", + "lastName": "Systems", + "email": "eco-test+1@spryker.com", + "phone": "7886914965", + "company": null, + "billingAddress": { + "salutation": "n/a", + "firstName": "Eco", + "lastName": "Test", + "address1": "Julie-Wolfthorn-Strasse", + "address2": "1", + "address3": null, + "zipCode": "10115", + "city": "Berlin", + "country": "DE", + "iso2Code": "DE", + "company": null, + "phone": "7886914965", + "isDefaultShipping": null, + "isDefaultBilling": null + }, + "shippingAddress": { + "salutation": "n/a", + "firstName": "Eco", + "lastName": "Test", + "address1": "Julie-Wolfthorn-Strasse", + "address2": "1", + "address3": null, + "zipCode": "10115", + "city": "Berlin", + "country": "DE", + "iso2Code": "DE", + "company": null, + "phone": "7886914965", + "isDefaultShipping": null, + "isDefaultBilling": null + } + } + }, + "links": { + "self": "https://glue.de.aop-suite-testing.demo-spryker.com/payment-customers" + } +} +``` + +
    + +{% endinfo_block %} + +### Configure mapping + +Mappers should be configured on a project level to map the data from the request into `QuoteTransfer`: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- |--- | +| PaymentsQuoteMapperPlugin | Adds a mapper that maps Payments information to `QuoteTransfer`. | | `Spryker\Zed\PaymentsRestApi\Communication\Plugin\CheckoutRestApi` | + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new BundleItemByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS, + new GuestBundleItemByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductBundleCartsRestApiConfig::RESOURCE_BUNDLE_ITEMS, + new BundledItemByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductBundleCartsRestApiConfig::RESOURCE_BUNDLE_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductBundleCartsRestApiConfig::RESOURCE_BUNDLED_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS, + new GuestCartItemsByQuoteResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + + +{% info_block warningBox "Verification" %} + +Ensure that you have activated the plugins: + +| REQUEST | TEST | +| --- | --- | +| `GET https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items`
    `GET https://glue.mysprykershop.com/guest-carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items` | The `bundle-items` resource is returned as a relationship. | +| `GET https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items,bundled-items`
    `GET https://glue.mysprykershop.com/guest-carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items,bundled-items`| The `bundle-items` resource has a relationship of the `bundled-items` resource.| +| `GET https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items,bundled-items,concrete-products`
    `GET https://glue.mysprykershop.com/guest-carts/{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}?include=bundle-items,bundled-items,concrete-products` |Concrete products are returned as relationships for bundle items and bundled items.| + +{% endinfo_block %} + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteMergePersistentCartChangeExpanderPlugins(): array + { + return [ + new BundleItemQuoteMergePersistentCartChangeExpanderPlugin(), + ]; + } +} +``` + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| --- | --- | --- | +| Products | ✓ | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Product Bundles |✓ |[Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html)| diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-bundles-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-bundles-glue-api.md new file mode 100644 index 00000000000..4e6ed9cda56 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-bundles-glue-api.md @@ -0,0 +1,183 @@ + + +Follow the steps below to integrate the Glue API: Product Bundles feature. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Bundles| {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Order Management| {{page.release_tag}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html)| + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-bundles-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductBundlesRestApi | vendor/spryker/product-bundles-rest-api | + +{% endinfo_block %} + + +## 2) Set up transfer objects + +Set up transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestBundledProductsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestBundledProductsAttributesTransfer | +| RestErrorMessageTransfer| class |created |src/Generated/Shared/Transfer/RestErrorMessageTransfer| +| ProductBundleStorageTransfer| class| created| src/Generated/Shared/Transfer/ProductBundleStorageTransfer| +| ProductForProductBundleStorageTransfer| class| created |src/Generated/Shared/Transfer/ProductForProductBundleStorageTransfer| +| OrderTransfer| class |created |src/Generated/Shared/Transfer/OrderTransfer| +| ItemTransfer| class| created| src/Generated/Shared/Transfer/ItemTransfer| +| RestOrderDetailsAttributesTransfer| class| created |src/Generated/Shared/Transfer/RestOrderDetailsAttributesTransfer| +| RestOrderItemsAttributesTransfer| class| created| src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer| +| RestOrderItemMetadataTransfer| class |created| src/Generated/Shared/Transfer/RestOrderItemMetadataTransfer| +| ProductBundleStorageCriteriaTransfer |class |created |src/Generated/Shared/Transfer/ProductBundleStorageCriteriaTransfer| + +{% endinfo_block %} + +## 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| BundledProductByProductConcreteSkuResourceRelationshipPlugin | Adds the `bundled-products` resource as a relationship to the `concrete-products` resource by product concrete `sku`. | None | Spryker\Glue\ProductBundlesRestApi\Plugin\GlueApplication | +|ConcreteProductsBundledProductsResourceRoutePlugin| Provides the `bundled-products` resource route with `concrete-products` as a parent resource. |None |Spryker\Glue\ProductBundlesRestApi\Plugin\GlueApplication| +| BundleItemRestOrderDetailsAttributesMapperPlugin |Maps the additional information from`OrderTransfer` to `RestOrderDetailsAttributesTransfer`. |None |Spryker\Glue\ProductBundlesRestApi\Plugin\OrdersRestApi| + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductBundlesRestApiConfig::RESOURCE_BUNDLED_PRODUCTS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new BundledProductByProductConcreteSkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Ensure that you have activated the plugins: + +| REQUEST | TEST | +| --- | --- | +| `GET https://glue.mysprykershop.com/bundled-products` | Returns the list of bundled products. | +| `GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}sku{% raw %}}}{% endraw %}/bundled-products?include=concrete-products` |In the response body, the `bundled-products` resource has a relationship to the `concrete-products` resource.| +|`GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}sku{% raw %}}}{% endraw %}?include=bundled-products`  |In the response body, the `concrete-products` resource has a relationship to its `bundled-products` resource.| + +{% endinfo_block %} + +**src/Pyz/Glue/OrdersRestApi/OrdersRestApiDependencyProvider.php** + +```php + + */ + protected function getConcreteProductsResourceExpanderPlugins(): array + { + return [ + new ProductConfigurationConcreteProductsResourceExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}` endpoint is available. + +Make sure that the `concrete-products` resource is expanded with the product configuration properties. For an example, see the following response to the `GET https://glue.mysprykershop.com/concrete-products/093_24495843` request. + +
    +Response sample + +```json +{ + "data": { + "type": "concrete-products", + "id": "093\_24495843", + "attributes": { + "sku": "093\_24495843", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.2999999999999998, + "reviewCount": "4", + "productAbstractSku": "093", + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal\_ram": "512 MB", + "flash\_memory": "4 GB", + "weight": "45 g", + "protection\_feature": "Water resistent", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": \[ + "flash\_memory", + "color" + \], + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", + "attributeNames": { + "internal\_ram": "Internal RAM", + "flash\_memory": "Flash memory", + "weight": "Weight", + "protection\_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": { + "displayData": "{\\"Preferred time of the day\\": \\"Afternoon\\", \\"Date\\": \\"9.09.2020\\"}", + "configuration": "{\\"time\_of\_day\\": \\"2\\"}", + "configuratorKey": "DATE\_TIME\_CONFIGURATOR", + "isComplete": false + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/093\_24495843" + } + } +} +``` + +
    + +{% endinfo_block %} + +### Enable items resource expanding plugin + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------| +| ProductConfigurationRestCartItemsAttributesMapperPlugin | Maps `ItemTransfer` product configuration to `RestItemsAttributesTransfer`. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\CartsRestApi | +| ProductConfigurationCartItemExpanderPlugin | Expands cart item data with product configuration data. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\CartsRestApi | +| ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `ProductConfigurationInstanceTransfer`. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\ProductConfigurationsRestApi | +| ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `RestCartItemProductConfigurationInstanceAttributesTransfer`. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\ProductConfigurationsRestApi | +| ProductConfigurationCartItemMapperPlugin | Maps `CartItemRequestTransfer.productConfigurationInstance` to according `PersistentCartChangeTransfer.item`. | None | Spryker\Zed\ProductConfigurationsRestApi\Communication\Plugin\CartsRestApi | +| CartItemProductConfigurationRestRequestValidatorPlugin | Checks if resource with provided product configuration has default product configuration defined. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\GlueApplication | +| ProductConfigurationRestOrderItemsAttributesMapperPlugin | Maps `ItemTransfer.salesOrderItemConfiguration` to `RestOrderItemsAttributesTransfer.salesOrderItemConfiguration`. | None | Spryker\Glue\ProductConfigurationsRestApi\Plugin\OrdersRestApi | + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestCartItemsAttributesMapperPlugins(): array + { + return [ + new ProductConfigurationRestCartItemsAttributesMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\CartsRestApiExtension\Dependency\Plugin\CartItemExpanderPluginInterface> + */ + protected function getCartItemExpanderPlugins(): array + { + return [ + new ProductConfigurationCartItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/ProductConfigurationsRestApi/ProductConfigurationsRestApiDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\ProductConfigurationsRestApiExtension\Dependency\Plugin\RestProductConfigurationPriceMapperPluginInterface> + */ + protected function getRestProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getCartItemMapperPlugins(): array + { + return [ + new ProductConfigurationCartItemMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/OrdersRestApi/OrdersRestApiDependencyProvider.php** + +```php + + */ + protected function getRestOrderItemsAttributesMapperPlugins(): array + { + return [ + new ProductConfigurationRestOrderItemsAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `orders` resource is expanded with the product configuration properties. For an example, see the following response to the `GET https://glue.mysprykershop.com/orders/DE--2` request: + +
    +Response sample + +```json +{ + "data": { + "type": "orders", + "id": "DE--2", + "attributes": { + "merchantReferences": [], + "itemStates": [ + "payment pending" + ], + "createdAt": "2021-03-12 09:23:22.000000", + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE", + "totals": { + "expenseTotal": 980, + "discountTotal": 0, + "taxTotal": 7347, + "subtotal": 111110, + "grandTotal": 112090, + "canceledTotal": 0, + "remunerationTotal": 0 + }, + "billingAddress": { + "salutation": "Mr", + "firstName": "spencor", + "middleName": null, + "lastName": "hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "company": "Spryker", + "city": "Berlin", + "zipCode": "61000", + "poBox": null, + "phone": "+380669455897", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "shippingAddress": { + "salutation": "Mr", + "firstName": "spencor", + "middleName": null, + "lastName": "hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "company": "Spryker", + "city": "Berlin", + "zipCode": "61000", + "poBox": null, + "phone": "+380669455897", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "items": [ + { + "merchantReference": null, + "state": "payment pending", + "name": "Sony SmartWatch 3", + "sku": "093_24495843", + "sumPrice": 55555, + "quantity": 1, + "unitGrossPrice": 55555, + "sumGrossPrice": 55555, + "taxRate": "7.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 55555, + "unitTaxAmountFullAggregation": 3634, + "sumTaxAmountFullAggregation": 3634, + "refundableAmount": 55555, + "canceledAmount": 0, + "sumSubtotalAggregation": 55555, + "unitSubtotalAggregation": 55555, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 55555, + "sumPriceToPayAggregation": 55555, + "taxRateAverageAggregation": "7.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "3b0d7d32-c519-5eea-92f1-408c54113c25", + "isReturnable": false, + "idShipment": 2, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "Silver" + }, + "image": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg" + }, + "salesOrderItemConfiguration": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2020\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Sony SmartWatch 3", + "sku": "093_24495843", + "sumPrice": 55555, + "quantity": 1, + "unitGrossPrice": 55555, + "sumGrossPrice": 55555, + "taxRate": "7.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 55555, + "unitTaxAmountFullAggregation": 3635, + "sumTaxAmountFullAggregation": 3635, + "refundableAmount": 55555, + "canceledAmount": 0, + "sumSubtotalAggregation": 55555, + "unitSubtotalAggregation": 55555, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 55555, + "sumPriceToPayAggregation": 55555, + "taxRateAverageAggregation": "7.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "b39c7e1c-12ba-53d3-8d81-5c363d5307e9", + "isReturnable": false, + "idShipment": 2, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "Silver" + }, + "image": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg" + }, + "salesOrderItemConfiguration": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2020\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + } + ], + "expenses": [ + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Standard", + "sumPrice": 490, + "unitGrossPrice": 490, + "sumGrossPrice": 490, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 78, + "sumTaxAmount": 78, + "unitPriceToPayAggregation": 490, + "sumPriceToPayAggregation": 490, + "taxAmountAfterCancellation": null, + "idShipment": 2, + "idSalesExpense": 2 + } + ], + "payments": [ + { + "amount": 112090, + "paymentProvider": "DummyPayment", + "paymentMethod": "invoice" + } + ], + "shipments": [ + { + "shipmentMethodName": "Standard", + "carrierName": "Spryker Dummy Shipment", + "deliveryTime": null, + "defaultGrossPrice": 490, + "defaultNetPrice": 0, + "currencyIsoCode": "EUR" + } + ], + "calculatedDiscounts": [], + "bundleItems": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/orders/DE--2" + } + } +} +``` + +
    + +{% endinfo_block %} + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getRestRequestValidatorPlugins(): array + { + return [ + new CartItemProductConfigurationRestRequestValidatorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `items` resource is expanded with the product configuration properties. For an example, see the following response to the `POST https://glue.mysprykershop.com/carts/2f0a0b59-b988-5829-8fd3-6d636fc8ea33/items?include=items` request: + +
    +Request sample + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "093_24495843", + "quantity": 10, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2020\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "installation_appointment", + "isComplete": false, + "quantity": 5, + "availableQuantity": 100, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 555, + "grossAmount": 556, + "quantity": 5 + }, + { + "netAmount": 666, + "grossAmount": 667, + "quantity": 10 + }, + { + "netAmount": 777, + "grossAmount": 778, + "quantity": 20 + } + ] + } + ] + } + } + } +} +``` + +
    + +
    +Response sample + +```json +{ + "data": { + "type": "carts", + "id": "2f0a0b59-b988-5829-8fd3-6d636fc8ea33", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Test 1", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 490, + "subtotal": 7495, + "grandTotal": 7495, + "priceToPay": 7495 + }, + "discounts": [] + }, + "links": { + "self": "http://glue.de.spryker.local/carts/2f0a0b59-b988-5829-8fd3-6d636fc8ea33" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "093_24495843-e312a2dbb6b3828719daba16a9e34658" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "093_24495843-e312a2dbb6b3828719daba16a9e34658", + "attributes": { + "sku": "093_24495843", + "quantity": 10, + "groupKey": "093_24495843-e312a2dbb6b3828719daba16a9e34658", + "abstractSku": "093", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 667, + "sumPrice": 6670, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 667, + "sumGrossPrice": 6670, + "unitTaxAmountFullAggregation": 44, + "sumTaxAmountFullAggregation": 436, + "sumSubtotalAggregation": 6670, + "unitSubtotalAggregation": 667, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 667, + "sumPriceToPayAggregation": 6670 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2020\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "installation_appointment", + "isComplete": false, + "quantity": 5, + "availableQuantity": 100, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "volumeQuantity": null, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 42502, + "netAmount": 23434, + "quantity": 5 + }, + { + "grossAmount": 42502, + "netAmount": 23434, + "quantity": 10 + }, + { + "grossAmount": 42502, + "netAmount": 23434, + "quantity": 20 + } + ] + } + ] + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2f0a0b59-b988-5829-8fd3-6d636fc8ea33/items/093_24495843-e312a2dbb6b3828719daba16a9e34658" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +Set up wishlist plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|----------------------------------------------------------------------------------------------------------| +| ProductConfigurationRestWishlistItemsAttributesMapperPlugin | Concatenates product sku with product configuration instance hash, sets created reference to `RestWishlistItemsAttributesTransfer::id` and maps `WishlistItemTransfer::productConfigurationInstance` to the `RestWishlistItemsAttributes::productConfigurationInstance` transfer object. | None | Spryker\Glue\ProductConfigurationWishlistsRestApi\Plugin\WishlistsRestApi | +| ProductConfigurationWishlistItemRequestMapperPlugin | Maps `RestWishlistItemsAttributesTransfer::productConfigurationInstance` to `WishlistItemRequestTransfer::productConfigurationInstance`. | None | Spryker\Glue\ProductConfigurationWishlistsRestApi\Plugin\WishlistsRestApi | +| ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `ProductConfigurationInstanceTransfer`. | None | Spryker\Glue\ProductConfigurationsPriceProductVolumesRestApi\Plugin\ProductConfigurationWishlistsRestApi | +| ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `RestProductConfigurationPriceAttributesTransfer[]`. | None | Spryker\Glue\ProductConfigurationsPriceProductVolumesRestApi\Plugin\ProductConfigurationWishlistsRestApi | +| ProductConfigurationRestWishlistItemsAttributesDeleteStrategyPlugin | Finds an item by product sku + product configuration instance hash in the collection of the `WishlistItem` transfer objects and deletes the found wishlist item. | None | Spryker\Zed\ProductConfigurationWishlistsRestApi\Communication\Plugin\WishlistsRestApi | +| ProductConfigurationRestWishlistItemsAttributesUpdateStrategyPlugin | Finds an item by product sku + product configuration instance hash the in the collection of the `WishlistItem` transfer objects and updates the found wishlist item. | None | Spryker\Zed\ProductConfigurationWishlistsRestApi\Communication\Plugin\WishlistsRestApi | + +**src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductConfigurationRestWishlistItemsAttributesMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\WishlistsRestApiExtension\Dependency\Plugin\WishlistItemRequestMapperPluginInterface> + */ + protected function getWishlistItemRequestMapperPlugins(): array + { + return [ + new ProductConfigurationWishlistItemRequestMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/ProductConfigurationWishlistsRestApi/ProductConfigurationWishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\ProductConfigurationWishlistsRestApiExtension\Dependency\Plugin\RestProductConfigurationPriceMapperPluginInterface> + */ + protected function getRestProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/WishlistsRestApi/WishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestWishlistItemsAttributesDeleteStrategyPlugins(): array + { + return [ + new ProductConfigurationRestWishlistItemsAttributesDeleteStrategyPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistsRestApiExtension\Dependency\Plugin\RestWishlistItemsAttributesUpdateStrategyPluginInterface> + */ + protected function getRestWishlistItemsAttributesUpdateStrategyPlugins(): array + { + return [ + new ProductConfigurationRestWishlistItemsAttributesUpdateStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that wishlist item CRUD operations support configurable products. +For an example, see the following response to the `POST https://glue.mysprykershop.com/wishlists/63b14493-021f-59c2-ae70-94041beb5c06/wishlist-items` request: + +**Request sample** + +```json +{ + "data": { + "type": "wishlist-items", + "attributes": { + "sku": "093_24495843", + "productConfigurationInstance": { + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\", \"Test1\": \"9.10.2021\", \"Test2\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "availableQuantity": 1 + } + } + } +} +``` + + +**Response sample** + +```json +{ + "data": { + "type": "wishlist-items", + "id": "093_24495843_08be76ee04918735abd0202456cc8e15", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "093_24495843_08be76ee04918735abd0202456cc8e15", + "sku": "093_24495843", + "availability": null, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\", \"Test1\": \"9.10.2021\", \"Test2\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "quantity": null, + "availableQuantity": 1, + "prices": [] + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/63b14493-021f-59c2-ae70-94041beb5c06/wishlist-items/093_24495843_08be76ee04918735abd0202456cc8e15" + } + } +} +``` + +{% endinfo_block %} + +Set up the following shopping list plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------| --- | --- | +| ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `ProductConfigurationInstanceTransfer`. | None | Spryker\Glue\ProductConfigurationsPriceProductVolumesRestApi\Plugin\ProductConfigurationsRestApi | +| ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin | Maps product configuration volume price data to `RestProductConfigurationPriceAttributesTransfer[]`. | None | Spryker\Glue\ProductConfigurationsPriceProductVolumesRestApi\Plugin\ProductConfigurationShoppingListsRestApi | +| ProductConfigurationRestShoppingListItemsAttributesMapperPlugin | Maps the `ShoppingListItemTransfer` product configuration to `RestShoppingListItemsAttributesTransfer`. | None | Spryker\Glue\ProductConfigurationShoppingListsRestApi\Plugin\ShoppingListsRestApi | +| ProductConfigurationShoppingListItemRequestMapperPlugin | Maps product configuration from rest attributes to shopping list item. | None | Spryker\Glue\ProductConfigurationShoppingListsRestApi\Plugin\ShoppingListsRestApi | + +**src/Pyz/Glue/ProductConfigurationShoppingListsRestApi/ProductConfigurationShoppingListsRestApiDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceProductConfigurationPriceMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\ProductConfigurationShoppingListsRestApiExtension\Dependency\Plugin\RestProductConfigurationPriceMapperPluginInterface> + */ + protected function getRestProductConfigurationPriceMapperPlugins(): array + { + return [ + new ProductConfigurationVolumePriceRestProductConfigurationPriceMapperPlugin(), + ]; + } +} + +``` + +**src/Pyz/Glue/ShoppingListsRestApi/ShoppingListsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestShoppingListItemsAttributesMapperPlugins(): array + { + return [ + new ProductConfigurationRestShoppingListItemsAttributesMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\ShoppingListsRestApiExtension\Dependency\Plugin\ShoppingListItemRequestMapperPluginInterface> + */ + protected function getShoppingListItemRequestMapperPlugins(): array + { + return [ + new ProductConfigurationShoppingListItemRequestMapperPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Ensure that shopping list item CRUD operations support configurable products. +For an example, see the following response to the `POST https://glue.mysprykershop.com/shopping-lists/63b14493-021f-59c2-ae70-94041beb5c06/shopping-list-items` request: + +**Request sample** + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "sku": "093_24495843", + "quantity": 1, + "productConfigurationInstance": { + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\", \"Test1\": \"9.10.2021\", \"Test2\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "availableQuantity": 1 + } + } + } +} +``` + +**Response sample** + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "63b14493-021f-59c2-ae70-94041beb5c04", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "sku": "093_24495843", + "quantity": 1, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\", \"Test1\": \"9.10.2021\", \"Test2\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "quantity": null, + "availableQuantity": 1, + "prices": [] + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/63b14493-021f-59c2-ae70-94041beb5c06/shopping-list-items/63b14493-021f-59c2-ae70-94041beb5c04" + } + } +} +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-glue-api.md new file mode 100644 index 00000000000..bf6badbc9be --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-glue-api.md @@ -0,0 +1,597 @@ + + +This document describes how to install the Products Glue API. + + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | | +| Price | {{page.release_tag}} | | + + +## 1) Install the required modules + +Install the required modules using composer: + +```bash +composer require spryker/products-rest-api:"^2.11.0" spryker/product-image-sets-rest-api:"^1.0.3" spryker/product-prices-rest-api:"^1.1.0" spryker/product-tax-sets-rest-api:"^2.1.2" spryker/products-categories-resource-relationship:"^1.0.0" spryker/product-attributes-rest-api:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductsRestApi | vendor/spryker/products-rest-api | +| ProductImageSetsRestApi | vendor/spryker/product-image-sets-rest-api | +| ProductPricesRestApi | vendor/spryker/product-prices-rest-api | +| ProductTaxSetsRestApi | vendor/spryker/product-tax-sets-rest-api | +| ProductsCategoriesResourceRelationship | vendor/spryker/products-categories-resource-relationship | +| ProductAttributesRestApi |vendor/spryker/product-attributes-rest-api| + +{% endinfo_block %} + +## 2) Set up configuration + +{% info_block infoBox %} + +You can control whether the `abstract-products` get the `concrete-products` as a relationship by default with the `ProductsRestApiConfig::ALLOW_PRODUCT_CONCRETE_EAGER_RELATIONSHIP` config setting. + +{% endinfo_block %} + +**src/Pyz/Glue/ProductsRestApi/ProductsRestApiConfig.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new AbstractProductsResourceRoutePlugin(), + new ConcreteProductsResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following endpoints are available: + +- `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}` + +- `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +### Enable relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConcreteProductsByProductConcreteIdsResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `abstract-products` resource. | | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | +|ProductAbstractByProductAbstractSkuResourceRelationshipPlugin |Adds the `abstract-products` resource as a relationship to the `concrete-products` resource. || Spryker\Glue\ProductsRestApi\Plugin\GlueApplication| + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ConcreteProductsByProductConcreteIdsResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductAbstractByProductAbstractSkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The following endpoints are available: + - `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}` + - `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}` + +- When the `concrete-products` resource is included as a query string, the `abstract-products` resource returns it as a relationship: `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=concrete-products`. +- When the `abstract-products` resource is included as a query string, the `concrete-products` resource returns it as a relationship: `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=abstract-products`. + +{% endinfo_block %} + +### Enable resources and relationships of image sets + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AbstractProductImageSetsRoutePlugin | Registers the `abstract-product-image-sets` resource. | | Spryker\Glue\ProductImageSetsRestApi\Plugin | +|ConcreteProductImageSetsRoutePlugin |Registers the `concrete-product-image-sets` resource. || Spryker\Glue\ProductImageSetsRestApi\Plugin | +| AbstractProductsProductImageSetsResourceRelationshipPlugin |Adds the `abstract-product-image-sets` resource as a relationship to the `abstract-products` resource. | | Spryker\Glue\ProductImageSetsRestApi\Plugin\Relationship| +|ConcreteProductsProductImageSetsResourceRelationshipPlugin |Adds the `concrete-product-image-sets` resource as a relationship to the `concrete-products` resource. | |Spryker\Glue\ProductImageSetsRestApi\Plugin\Relationship| + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new AbstractProductImageSetsRoutePlugin(), + new ConcreteProductImageSetsRoutePlugin(), + ]; + } + + /** +    * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection +    * +    * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface +    */ +    protected function getResourceRelationshipPlugins( +        ResourceRelationshipCollectionInterface $resourceRelationshipCollection +    ): ResourceRelationshipCollectionInterface { +        $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductsProductImageSetsResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductsProductImageSetsResourceRelationshipPlugin() + ); + +        return $resourceRelationshipCollection; +    } +} +``` + +
    + + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The following endpoints are available: + - `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-image-sets` + + - `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-image-sets` + +- When the `abstract-product-image-sets` resource is included as a query string, the `abstract-products` resource returns it as a relationship: `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-image-sets` + +- When the `concrete-product-image-sets` resource is included as a query string, the `concrete-products` resource returns it as a relationship: `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=concrete-product-image-sets` + +{% endinfo_block %} + +### Enable resources and relationships of prices + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AbstractProductPricesRoutePlugin | Registers the `abstract-product-prices` resource. | | Spryker\Glue\ProductPricesRestApi\Plugin | +| ConcreteProductPricesRoutePlugin | Registers the `concrete-product-prices` resource. || Spryker\Glue\ProductPricesRestApi\Plugin | +| AbstractProductPricesByResourceIdResourceRelationshipPlugin |Adds the `abstract-product-prices-resource` as a relationship to the `abstract-products` resource. | | Spryker\Glue\ProductPricesRestApi\Plugin\GlueApplication | +| ConcreteProductPricesByResourceIdResourceRelationshipPlugin |Adds the `concrete-product-prices-resource` as a relationship to the `concrete-products` resource. | | Spryker\Glue\ProductPricesRestApi\Plugin\GlueApplication| + + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```json + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new AbstractProductPricesRoutePlugin(), + new ConcreteProductPricesRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductPricesByResourceIdResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductPricesByResourceIdResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The following endpoints are available: + - `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-prices` + - `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-prices` + +- When the `abstract-product-prices` resource is included as a query string, the `abstract-products` resource returns it as a relationship: `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-prices` + +- When the `concrete-product-prices` resource is included as a query string, the `concrete-products` resource returns it as a relationship: `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=concrete-product-prices` + +{% endinfo_block %} + +### Enable resources and relationships of category + +Activate the following plugin: + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AbstractProductsCategoriesResourceRelationshipPlugin | Adds the `categories` resource as a relationship to the `abstract-products` resource. | | Spryker\Glue\ProductsCategoriesResourceRelationship\Plugin | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductsCategoriesResourceRelationshipPlugin() + ); + +        return $resourceRelationshipCollection; +    } +} +``` + +{% info_block warningBox "Verification" %} + +Send a request to `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=category-nodes`. + +The response should contain the `category-nodes` resource as a relationship: + +
    +Response sample + +```json +{   +   "data":{   +      "type":"abstract-products", +      "id":"001", +      "attributes":{   +         ... +      }, +      "links":{   +         "self":"https://glue.mysprykershop.com/abstract-products/001" +      }, +      "relationships":{   +         "category-nodes":{   +            "data":[   +               {   +                  "type":"category-nodes", +                  "id":"4" +               }, +               {   +                  "type":"category-nodes", +                  "id":"2" +               } +            ] +         } +      } +   }, +   "included":[   +      {   +         "type":"category-nodes", +         "id":"4", +         "attributes":{   +            ... +         }, +         "links":{   +            "self":"https://glue.mysprykershop.com/category-nodes/4" +         } +      }, +      {   +         "type":"category-nodes", +         "id":"2", +         "attributes":{   +            ... +         }, +         "links":{   +            "self":"https://glue.mysprykershop.com/category-nodes/2" +         } +      } +   ] +} +``` + +
    + +{% endinfo_block %} + +### Enable resources and relationships of product management attributes + +Activate the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductManagementAttributesResourceRoutePlugin | Registers the `product-management-attributes` resource. | | Spryker\Glue\ProductAttributesRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductManagementAttributesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoint is available: `https://glue.mysprykershop.com/product-management-attributes/{% raw %}{{{% endraw %}attribute_key{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +### Enable multiselect product attributes + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- |------------------------------------------------------------------------| --- | --- | +| MultiSelectAttributeConcreteProductsResourceExpanderPlugin | Formats the "multiselect" attributes of the `concrete-products` resource to string. | | Spryker\Glue\ProductAttributesRestApi\Plugin\ProductsRestApi | +| MultiSelectAttributeAbstractProductsResourceExpanderPlugin | Formats the "multiselect" attributes of the `abstract-products` resource to string. | | Spryker\Glue\ProductAttributesRestApi\Plugin\ProductsRestApi | + +**src/Pyz/Glue/ProductsRestApi/ProductsRestApiDependencyProvider.php** + +```php + + */ + protected function getConcreteProductsResourceExpanderPlugins(): array + { + return [ + new MultiSelectAttributeConcreteProductsResourceExpanderPlugin(), // remove if the project is accept product attribute values as array of strings + ]; + } + + /** + * @return array<\Spryker\Glue\ProductsRestApiExtension\Dependency\Plugin\AbstractProductsResourceExpanderPluginInterface> + */ + protected function getAbstractProductsResourceExpanderPlugins(): array + { + return [ + new MultiSelectAttributeAbstractProductsResourceExpanderPlugin(), // remove if the project is accept product attribute values as array of strings + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that `abstract-products` and `concrete-products` resources return "multiselect" product attributes as strings. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-image-sets-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-image-sets-glue-api.md new file mode 100644 index 00000000000..b23ff616fd0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-image-sets-glue-api.md @@ -0,0 +1,133 @@ + + +## Install Feature API + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | +| ProductImage | {{page.release_tag}} | +| ProductsRestApi | {{page.release_tag}} | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-image-sets-rest-api:"^1.0.3" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module is installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductImageSetsRestApi | vendor/spryker/product-image-sets-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are present in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestProductImageSetsAttributesTransfer | column | created | src/Generated/Shared/Transfer/RestProductImageSetsAttributesTransfers | +| RestProductImageSetTransfer | class | created | src/Generated/Shared/Transfer/RestProductImageSetTransfer | +| RestImagesAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestImagesAttributesTransfer | + +{% endinfo_block %} + +## 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AbstractProductImageSetsRoutePlugin | Registers an abstract product image sets resource. | None | Spryker\Glue\ProductImageSetsRestApi\Plugin | +| ConcreteProductImageSetsRoutePlugin | Registers a concrete product image sets resource. | None | Spryker\Glue\ProductImageSetsRestApi\Plugin | +| AbstractProductsProductImageSetsResourceRelationshipPlugin | Adds an abstract product image sets resource as a relationship to an abstract product resource. | None | Spryker\Glue\ProductImageSetsRestApi\Plugin | +| ConcreteProductsProductImageSetsResourceRelationshipPlugin | Adds a concrete product image sets resource as a relationship to a concrete product resource. | None | Spryker\Glue\ProductImageSetsRestApi\Plugin | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductsProductImageSetsResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductsProductImageSetsResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: + +- `http://mysprykershop.com//abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-image-sets` +- `http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-image-sets` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make the request to `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-image-sets`. The abstract product with the given SKU should have at least one image set. Make sure that the response includes relationships to the `abstract-product-image-sets` resources. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make the request to `http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=abstract-product-image-sets`. The concrete product with the given SKU should have at least one image set. Make sure that the response includes relationships to the `concrete-product-image-sets` resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-labels-feature-integration.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-labels-feature-integration.md new file mode 100644 index 00000000000..021a0c1ec49 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-labels-feature-integration.md @@ -0,0 +1,117 @@ + + +Follow the steps below to install Product Labels Feature API. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | REQUIRED SUB-FEATURE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product Management | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Product Label | {{page.release_tag}} | | + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-labels-rest-api:"^1.0.1" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module is installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductLabelsRestApi | vendor/spryker/product-labels-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are present in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestProductLabelsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestProductLabelsAttributesTransfer | + +{% endinfo_block %} + +## 3) Set up behavior + +Set up the following behaviors. + +### Enable resources and relationships + +Activate the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductLabelsRelationshipByResourceIdPlugin | Adds the product labels resource as a relationship to the abstract product resource. | None | Spryker\Glue\ProductLabelsRestApi\Plugin\GlueApplication\ProductLabelsRelationshipByResourceIdPlugin | +| ProductLabelsResourceRoutePlugin |Registers the product labels resource. | None | Spryker\Glue\ProductLabelsRestApi\Plugin\GlueApplication\ProductLabelsResourceRoutePlugin | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductLabelsRelationshipByResourceIdPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    +
    + +{% info_block warningBox "Verification" %} + +Make sure the following endpoint is available: `https://glue.mysprykershop.com/product-labels/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}` + +Send a request to `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}sku{% raw %}}}{% endraw %}?include=product-labels`and verify if the abstract product with the given SKU has at least one assigned product label and the response includes relationships to the product-labels resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-options-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-options-glue-api.md new file mode 100644 index 00000000000..b3b8349c569 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-options-glue-api.md @@ -0,0 +1,245 @@ + + +## Install Feature API + +### Prerequisites + +To start feature integration, overview, and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Product Options | {{page.release_tag}} | Feature | +| Spryker Core | {{page.release_tag}} | [Feature API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-options-rest-api"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductOptionsRestApi | vendor/spryker/product-options-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Apply transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CartItemRequest.productOptions | property | created | src/Generated/Shared/Transfer/CartItemRequestTransfer | +| RestCartItemsAttributes.productOptions | property | created | src/Generated/Shared/Transfer/RestCartItemsAttributesTransfer | +| RestCartItemsProductOption | class | created | src/Generated/Shared/Transfer/RestCartItemsProductOptionTransfer | +| RestItemsAttributes.selectedOptions | property | created | src/Generated/Shared/Transfer/RestItemsAttributesTransfer | +| RestItemProductOptions | class | created |src/Generated/Shared/Transfer/RestItemProductOptionsTransfer | +| RestOrderItemProductOptions | class | created |src/Generated/Shared/Transfer/RestOrderItemProductOptionsTransfer | +| RestOrderItemsAttributes.productOptions | property | created |src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer | +| RestProductOptionsAttributes | class | created | src/Generated/Shared/Transfer/RestProductOptionsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +#### Enable relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductOptionsByProductAbstractSkuResourceRelationshipPlugin | Adds product-options resource as relationship by product abstract sku. | None | Spryker\Glue\ProductOptionsRestApi\Plugin\GlueApplication | +| ProductOptionsByProductConcreteSkuResourceRelationshipPlugin | Adds product-options resource as relationship by product concrete sku. | None | Spryker\Glue\ProductOptionsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductOptionsByProductAbstractSkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductOptionsByProductConcreteSkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make a GET request to `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}product_abstract_sku{% raw %}}}{% endraw %}/?include=product-options`. Abstract product with a given SKU should have at least one related product option. Make sure that the response includes relationships to product options resources. + +Make a GET request to `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}product_concrete_sku{% raw %}}}{% endraw %}/?include=product-options`. Abstract product to which concrete product with a given SKU belongs should have at least one related product option. Make sure that the response includes relationships to product options resources. + +{% endinfo_block %} + +#### Provide dependencies for the CartsRestApi module + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductOptionRestCartItemsAttributesMapperPlugin | Maps selected product options to the cart item response. | None | Spryker\Glue\ProductOptionsRestApi\Plugin\CartsRestApi | +| ProductOptionCartItemMapperPlugin | Maps specified selected product options to the cart change transfer object. | None | Spryker\Zed\ProductOptionsRestApi\Communication\Plugin\CartsRestApi | +| ProductOptionCartItemExpanderPlugin | Looks up the product option by SKU and expands the request for adding an item with it. | None | Spryker\Glue\ProductOptionsRestApi\Plugin\CartsRestApi | + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new AbstractProductsProductPricesResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductsProductPricesResourceRelationshipPlugin() + ); + +        return $resourceRelationshipCollection; +    } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +- Make sure that the following endpoints are available: + + - `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/abstract-product-prices` + + - `http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}/concrete-product-prices` + +- Send the `GET http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=abstract-product-prices` request. Make sure that the response contains relationships to the `abstract-product-prices` resources. + +- Send the `GET http://mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=concrete-product-prices` request. Make sure that the response contains relationships to the `concrete-product-prices` resources. + +{% endinfo_block %} + + +**src/Pyz/Glue/ProductPricesRestApi/ProductPricesRestApiDependencyProvider.php** + +```php + +Example + +```json +{ + "data": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/26" + } + } + ], + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5", + "last": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5", + "first": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5" + } +} +``` + +
    + +- `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-reviews/{% raw %}{{{% endraw %}review_id{% raw %}}}{% endraw %}` + +
    +Example + +```json +{ + "data": { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/21" + } + } +} +``` + +
    + +{% endinfo_block %} + +### 5) Enable relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductReviewsRelationshipByProductAbstractSkuPlugin | Adds product-reviews relationship by abstract product sku. | None |\Spryker\Glue\ProductReviewsRestApi\Plugin\GlueApplication | +| ProductReviewsRelationshipByProductConcreteSkuPlugin | Adds product-reviews relationship by concrete product sku. | None | \Spryker\Glue\ProductReviewsRestApi\Plugin\GlueApplication | +| ProductReviewsAbstractProductsResourceExpanderPlugin | Expands abstract-products resource with reviews data. | None | Spryker\Glue\ProductReviewsRestApi\Plugin\ProductsRestApi | +| ProductReviewsConcreteProductsResourceExpanderPlugin | Expands concrete-products resource with reviews data. | None | Spryker\Glue\ProductReviewsRestApi\Plugin\ProductsRestApi | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductReviewsRelationshipByProductAbstractSkuPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductReviewsRelationshipByProductConcreteSkuPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +**src/Pyz/Glue/ProductsRestApi/ProductsRestApiDependencyProvider.php** + +```php + +Example + +```json +{ + "data": { + "type": "abstract-products", + "id": "139", + "attributes": { + "sku": "139", + "averageRating": 4, + "reviewCount": 5, + "name": "Asus Transformer Book T200TA", + "description": "As light as you like Transformer Book T200 is sleek, slim and oh so light—just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach the 11.6-inch tablet for 11.95mm slenderness and a mere 750g weight! With up to 10.4 hours of battery life that lasts all day long, you're free to work or play from dawn to dusk. And ASUS Instant On technology ensures that Transformer Book T200 is always responsive and ready for action! Experience outstanding performance from the latest Intel® quad-core processor. You'll multitask seamlessly and get more done in less time. Transformer Book T200 also delivers exceptional graphics performance—with Intel HD graphics that are up to 30% faster than ever before! Transformer Book T200 is equipped with USB 3.0 connectivity for data transfers that never leave you waiting. Just attach your USB 3.0 devices to enjoy speeds that are up to 10X faster than USB 2.0!", + "attributes": { + "product_type": "Hybrid (2-in-1)", + "form_factor": "clamshell", + "processor_cache_type": "2", + "processor_frequency": "1.59 GHz", + "brand": "Asus", + "color": "Black" + }, + "superAttributesDefinition": [ + "form_factor", + "processor_frequency", + "color" + ], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "139_24699831" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Asus Transformer Book T200TA", + "metaKeywords": "Asus,Entertainment Electronics", + "metaDescription": "As light as you like Transformer Book T200 is sleek, slim and oh so light—just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach t", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_cache_type": "Processor cache", + "processor_frequency": "Processor frequency", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/asus-transformer-book-t200ta-139" + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "21" + }, + { + "type": "product-reviews", + "id": "22" + }, + { + "type": "product-reviews", + "id": "23" + }, + { + "type": "product-reviews", + "id": "25" + }, + { + "type": "product-reviews", + "id": "26" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/26" + } + } + ] +} +``` + +
    + + +4. Make a request to `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=product-reviews`. + +5. Make sure that the response contains `product-reviews` as a relationship and `product-reviews` data included. + +
    +Example + +```json +{ + "data": { + "type": "concrete-products", + "id": "139_24699831", + "attributes": { + "sku": "139_24699831", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4, + "reviewCount": 5, + "name": "Asus Transformer Book T200TA", + "description": "As light as you like Transformer Book T200 is sleek, slim and oh so light—just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach the 11.6-inch tablet for 11.95mm slenderness and a mere 750g weight! With up to 10.4 hours of battery life that lasts all day long, you're free to work or play from dawn to dusk. And ASUS Instant On technology ensures that Transformer Book T200 is always responsive and ready for action! Experience outstanding performance from the latest Intel® quad-core processor. You'll multitask seamlessly and get more done in less time. Transformer Book T200 also delivers exceptional graphics performance—with Intel HD graphics that are up to 30% faster than ever before! Transformer Book T200 is equipped with USB 3.0 connectivity for data transfers that never leave you waiting. Just attach your USB 3.0 devices to enjoy speeds that are up to 10X faster than USB 2.0!", + "attributes": { + "product_type": "Hybrid (2-in-1)", + "form_factor": "clamshell", + "processor_cache_type": "2", + "processor_frequency": "1.59 GHz", + "brand": "Asus", + "color": "Black" + }, + "superAttributesDefinition": [ + "form_factor", + "processor_frequency", + "color" + ], + "metaTitle": "Asus Transformer Book T200TA", + "metaKeywords": "Asus,Entertainment Electronics", + "metaDescription": "As light as you like Transformer Book T200 is sleek, slim and oh so light—just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach t", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_cache_type": "Processor cache", + "processor_frequency": "Processor frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/concrete-products/139_24699831?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "21" + }, + { + "type": "product-reviews", + "id": "22" + }, + { + "type": "product-reviews", + "id": "23" + }, + { + "type": "product-reviews", + "id": "25" + }, + { + "type": "product-reviews", + "id": "26" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/26" + } + } + ] +} +``` + +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-relations-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-relations-glue-api.md new file mode 100644 index 00000000000..855f88d888d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-product-relations-glue-api.md @@ -0,0 +1,89 @@ + + +## Install Feature API + +Follow the steps to install the Product Relations feature API. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | REQUIRED SUB-FEATURE| +|---|---|---| +|Spryker Core| {{page.release_tag}} |[Glue Application](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +|Product Relation| {{page.release_tag}} | [Install the Product Relations feature](/docs/pbc/all/product-relationship-management/latest/install-and-upgrade/install-the-product-relations-feature.html)| +|Cart| {{page.release_tag}} | [Cart API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Product| {{page.release_tag}} |[Products API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html)| + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/related-products-rest-api:"^1.0.0" spryker/up-selling-products-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---|---| +|RelatedProductsRestApi|vendor/spryker/related-products-rest-api| +|UpSellingProductsRestApi|vendor/spryker/up-selling-products-rest-api| + +{% endinfo_block %} + + +### 2) Set up behavior + +Set up the following behavior. + +#### Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|RelatedProductsResourceRoutePlugin|Retrieves the related products collection.|None|Spryker\Glue\RelatedProductsRestApi\Plugin\GlueApplication| +|CartUpSellingProductsResourceRoutePlugin|Retrieves the up-selling products collection for the cart.|None|`Spryker\Glue\UpSellingProductsRestApi\Plugin\GlueApplication| +|GuestCartUpSellingProductsResourceRoutePlugin|Retrieves the up-selling products collection for the guest cart.|None|Spryker\Glue\UpSellingProductsRestApi\Plugin\GlueApplication| + + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +
    +Make sure that the following modules have been installed: + +| Module | Expected Directory | +| --- | --- | +| `ProductTaxSetsRestApi` | `vendor/spryker/product-tax-sets-rest-api` | +|`ProductsProductTaxSetsResourceRelationship` | `vendor/spryker/products-product-tax-sets-resource-relationship` | + +
    + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +
    +Make sure that the following changes have been applied by checking your database. + +| Database entity | Type | Event | +| --- | --- | --- | +| `spy_tax_set.uuid` | column |added | + +
    + +
    +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +| --- | --- | --- | --- | +|`RestProductTaxRateTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxRateTransfer` | +| `RestProductTaxSetsAttributesTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +|`TaxSetTransfer.uuid` |property| added | `src/Generated/Shared/Transfer/TaxSetTransfer` | + +
    + +### 3) Set up Behavior + +#### Generate UUIDs for existing records + +Generates UUIDs for all entries in the spy_tax_set table: + +```bash +console tax-sets:uuid:update +``` + +{% info_block warningBox "Verification" %} + +Make sure that the uuid field is filled out for all records in the `spy_tax_set` table. You can run the following SQL-query for it and make sure that the result is 0 records.
    `SELECT COUNT(* +{% endinfo_block %} FROM spy_tax_set WHERE uuid IS NULL;`) + +#### Enable resource and relationship + +Activate the following plugin: + +| Plugin | Specification | Prerequisites | Namespace | +| --- | --- | --- | --- | +| `ProductTaxSetsResourceRoutePlugin` | Registers product tax resource. | None | `Spryker\Glue\ProductTaxSetsRestApi\Plugin` | +| `ProductsProductTaxSetsResourceRelationshipPlugin` | Adds product tax sets resource as a relationship to abstract product resource. | None | `Spryker\Glue\ProductsProductTaxSetsResourceRelationship\Plugin` | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductsProductTaxSetsResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    +
    + +{% info_block warningBox "Verification" %} +Make sure that the following endpoint is available:
    • `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-tax-sets`

    +Send a request to `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=product-tax-sets`. Make sure that the response includes relationships to the `product-tax-sets` resources. +{% endinfo_block %} + + + +[//]: # (by Tihran Voitov, Yuliia Boiko) diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md new file mode 100644 index 00000000000..f4c9264645d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-promotions-and-discounts-glue-api.md @@ -0,0 +1,991 @@ + + +Follow the steps below to install Promotions & Discounts feature API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Product | {{page.release_tag}} | [Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-labels-rest-api:"^1.1.0" --update-with-dependencies +composer require spryker/cart-codes-rest-api:"^1.0.0" --update-with-dependencies +composer require spryker/discount-promotions-rest-api:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductLabelsRestApi | vendor/spryker/product-labels-rest-api | +| CartCodesRestApi | vendor/spryker/cart-codes-rest-api | +| DiscountPromotionsRestApi | vendor/spryker/discount-promotions-rest-api | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Generate transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_discount_promotion.uuid | column | added | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in the database: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestProductLabelsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestDiscountsAttributesTransfer | +| RestDiscountsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestProductLabelsAttributesTransfer | +| CartCodeRequestTransfer | class | created | src/Generated/Shared/Transfer/CartCodeRequestTransfer | +| CartCodeResponseTransfer | class | created | src/Generated/Shared/Transfer/CartCodeResponseTransfer | +| DiscountPromotionTransfer.uuid | property | added | src/Generated/Shared/Transfer/DiscountPromotionTransfer | +| PromotionItemTransfer.uuid | property | added | src/Generated/Shared/Transfer/PromotionItemTransfer | +| CartItemRequestTransfer.discountPromotionUuid | property | added | src/Generated/Shared/Transfer/CartItemRequestTransfer | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that `SpyProductAbstractStorage` and `SpyProductConcreteStorage` are extended with synchronization behavior using the following methods: + +| ENTITY | TYPE | EVENT | PATH | METHODS | +| --- | --- | --- | --- | --- | +| SpyProductAbstractStorage | class | extended | src/Orm/Zed/ProductStorage/Persistence/Base/SpyProductAbstractStorage | syncPublishedMessageForMappings(), syncUnpublishedMessageForMappings() | +| SpyProductConcreteStorage | class | extended | src/Orm/Zed/ProductStorage/Persistence/Base/SpyProductConcreteStorage | syncPublishedMessageForMappings(), syncUnpublishedMessageForMappings() | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that `SpyDiscountPromotion` is extended with UUID behavior using the following method: + +| ENTITY | TYPE | EVENT | PATH | METHODS | +| --- | --- | --- | --- | --- | +| SpyDiscountPromotion | class | extended | src/Orm/Zed/DiscountPromotion/Persistence/Base/SpyDiscountPromotion | setGeneratedUuid() | + +{% endinfo_block %} + +## 3) Set up behavior + +### Generate UUIDs for existing discount promotion records that do not have them + +Generate UUIDs: + +```bash +console uuid:generate DiscountPromotion spy_discount_promotion +``` + +{% info_block warningBox "Verification" %} + +Make sure that the UUID field is populated for all records in the spy_discount_promotion table. For this purpose, run the following SQL query and make sure that the result is **0** records: + +```sql +SELECT COUNT(*) FROM spy_discount_promotion WHERE uuid IS NULL; +``` + +{% endinfo_block %} + +### Enable the Quote field list to save + +Add the following fields into the *Quote Fields Allowed for Saving* list: + +| FIELD | SPECIFICATION | +| --- | --- | +| QuoteTransfer::VOUCHER_DISCOUNTS | Stores information about voucher discounts in the Quote transfer object. | +| QuoteTransfer::CART_RULE_DISCOUNTS | Stores information about cart rule discounts in the Quote transfer object. | +| QuoteTransfer::PROMOTION_ITEMS | Stores information about promotional items in the Quote transfer object. | + +To do so, modify the following file: + +**src/Pyz/Zed/Quote/QuoteConfig.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductLabelsRelationshipByResourceIdPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductLabelByProductConcreteSkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new VoucherByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS, + new VoucherByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new CartRuleByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS, + new CartRuleByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new PromotionItemByQuoteTransferResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS, + new PromotionItemByQuoteTransferResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + DiscountPromotionsRestApiConfig::RESOURCE_PROMOTIONAL_ITEMS, + new ProductAbstractBySkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + +Example response + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 95307, + "taxTotal": 75262, + "subtotal": 635381, + "grandTotal": 540074 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 31769, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 63538, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=cart-rules,vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerwu3d" + } + ] + }, + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykerwu3d", + "attributes": { + "amount": 31769, + "code": "sprykerwu3d", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/vouchers/sprykerwu3d" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 63538, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the cart-rules and vouchers relationships are also available for guest carts. The relationships are provided by `CartRuleByQuoteResourceRelationshipPlugin` and `VoucherByQuoteResourceRelationshipPlugin` plugins. To do so, send a request to the following endpoint: + +- `https://glue.mysprykershop.com/guest-carts/{% raw %}{{{% endraw %}guest-cart_uuid{% raw %}}}{% endraw %}?include=vouchers,cart-rules` + +
    +Example response + +```json +{ + "data": { + "type": "guest-carts", + "id": "9b07888e-623b-5ab1-83dd-c7af5e1d81ad", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 1853, + "taxTotal": 1676, + "subtotal": 12350, + "grandTotal": 10497 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 618, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 1235, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/9b07888e-623b-5ab1-83dd-c7af5e1d81ad?include=vouchers,cart-rules" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerpa8n" + } + ] + }, + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykerpa8n", + "attributes": { + "amount": 618, + "code": "sprykerpa8n", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/vouchers/sprykerpa8n" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 1235, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify that the `PromotionItemByQuoteTransferResourceRelationshipPlugin` and `ProductAbstractBySkuResourceRelationshipPlugin` plugins add the `promotional-items` and `abstract-products` relations. + +Prerequisites: + +- [Create a discount for the product](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). The discount application type should be promotional product. +- Create a cart. + +Add items to the cart to satisfy the conditions of the discount rule: + +- `POST https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}/items?include=promotional-items,abstract-product` + +**Example of Request** + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "173_26973306", + "quantity": 4 + } + } +} +``` + +Make sure that the following relations are available: + +- `promotional-items with abstract-products` + +
    +Example of Response + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + ... + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=promotional-items,abstract-products" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-products", + "id": "112", + "attributes": { + "sku": "112", + ... + "attributeMap": { + "product_concrete_ids": [ + "112_312526171", + "112_306918001", + "112_312526191", + "112_312526172", + "112_306918002", + "112_312526192", + "112_306918003", + "112_312526193" + ], + ... + "attribute_variants": { + "processor_frequency:3.3 GHz": { + "processor_cache:3 MB": { + "id_product_concrete": "112_312526193" + }, + "processor_cache:12 MB": { + "id_product_concrete": "112_312526191" + } + }, + "processor_cache:3 MB": { + "processor_frequency:3.3 GHz": { + "id_product_concrete": "112_312526193" + }, + "processor_frequency:3.2 GHz": { + "id_product_concrete": "112_306918002" + }, + "processor_frequency:3.7 GHz": { + "id_product_concrete": "112_312526171" + } + }, + "processor_frequency:3.2 GHz": { + "processor_cache:12 MB": { + "id_product_concrete": "112_306918003" + }, + "processor_cache:3 MB": { + "id_product_concrete": "112_306918002" + }, + "processor_cache:6 MB": { + "id_product_concrete": "112_306918001" + } + }, + "processor_cache:12 MB": { + "processor_frequency:3.2 GHz": { + "id_product_concrete": "112_306918003" + }, + "processor_frequency:3.7 GHz": { + "id_product_concrete": "112_312526192" + }, + "processor_frequency:3.3 GHz": { + "id_product_concrete": "112_312526191" + } + }, + "processor_frequency:3.7 GHz": { + "processor_cache:12 MB": { + "id_product_concrete": "112_312526192" + }, + "processor_cache:6 MB": { + "id_product_concrete": "112_312526172" + }, + "processor_cache:3 MB": { + "id_product_concrete": "112_312526171" + } + }, + "processor_cache:6 MB": { + "processor_frequency:3.7 GHz": { + "id_product_concrete": "112_312526172" + }, + "processor_frequency:3.2 GHz": { + "id_product_concrete": "112_306918001" + } + } + } + }, + ... + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/112" + } + }, + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "112" + } + ] + } + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `DiscountPromotionCartItemExpanderPlugin` and `DiscountPromotionCartItemMapperPlugin` plugin installation. + +Prerequisites: + +- [Create a discount])(/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). Discount application type should be promotional product. +- Create a cart with items that satisfy the conditions of the discount rule. +- Get a concrete promotional product SKU. + +Add the selected promotional product to the cart and check the cart in the response has the cart rule applied to match the promotional product price: + +- `POST https://glue.mysprykershop.com/carts/{% raw %}{{{% endraw %}cart-uuid{% raw %}}}{% endraw %}/items?include=items,cart-rules` + +**Example of Request to Add Selected Promotional Product Into The Cart** + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "112_312526171", + "quantity": 2, + "idPromotionalItem": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } +} +``` + +
    +Example of Response + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 32544, + "taxTotal": 19868, + "subtotal": 170808, + "grandTotal": 118396 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 32544, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=promotional-items,abstract-products,cart-rules" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "112_312526171-promotion-1" + } + ] + } + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "6" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "112_312526171-promotion-1", + "attributes": { + "sku": "112_312526171", + "quantity": "1", + "groupKey": "112_312526171-promotion-1", + "abstractSku": "112", + "amount": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 43723, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 43723, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 43723, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 43723, + "sumDiscountAmountAggregation": 43723, + "unitDiscountAmountFullAggregation": 43723, + "sumDiscountAmountFullAggregation": 43723, + "unitPriceToPayAggregation": 0, + "sumPriceToPayAggregation": 0 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/112_312526171-promotion-1" + } + }, + { + "type": "cart-rules", + "id": "6", + "attributes": { + "amount": 32544, + "code": null, + "discountType": "cart_rule", + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": 112, + "discountPromotionQuantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/6" + } + } + ] +} +``` + +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-quotation-process-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-quotation-process-glue-api.md new file mode 100644 index 00000000000..797a3896a75 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-quotation-process-glue-api.md @@ -0,0 +1,1362 @@ + + +## Install feature API + +Follow the steps below to install the Quotation Process feature API. + +### Prerequisites + +To start feature integration, integrate the required features and Glue APIs: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------|------------------|--------------------| +| Spryker Core API | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Company Account API | {{page.release_tag}} | [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html) | +| Agent Assist API | {{page.release_tag}} | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | +| Quotation Process | {{page.release_tag}} | [Install the Quotation Process feature](/docs/pbc/all/request-for-quote/latest/install-and-upgrade/install-features/install-the-quotation-process-feature.html) | + + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/quote-requests-rest-api:"^0.1.4" spryker/quote-request-agents-rest-api:"^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|--------------------------------------------------| +| QuoteRequestAgentsRestApi | vendor/spryker/quote-request-agents-rest-api | +| QuoteRequestsRestApi | vendor/spryker/quote-requests-rest-api | +| QuoteRequestsRestApiExtension | vendor/spryker/quote-requests-rest-api-extension | + +{% endinfo_block %} + +### 2) Set up the configuration + +Add following configuration to your project configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------|----------------------------------| +| CompanyUsersRestApiConfig::COMPANY_USER_RESOURCES | Specifies resources which are accessible only for company users. | Spryker\Glue\CompanyUsersRestApi | +| AgentAuthRestApiConfig::getAgentResources() | Specifies resources which are accessible only for agents. | Spryker\Glue\AgentAuthRestApi | + +**src/Pyz/Glue/CompanyUsersRestApi/CompanyUsersRestApiConfig.php** + +```php + + */ + protected const COMPANY_USER_RESOURCES = [ + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUEST_CANCEL, + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUEST_REVISE, + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUEST_SEND_TO_CUSTOMER, + ]; +} +``` + +**src/Pyz/Glue/AgentAuthRestApi/AgentAuthRestApiConfig.php** + +```php + + */ + public function getAgentResources(): array + { + return [ + QuoteRequestAgentsRestApiConfig::RESOURCE_AGENT_QUOTE_REQUESTS, + QuoteRequestAgentsRestApiConfig::RESOURCE_AGENT_QUOTE_REQUEST_SEND_TO_CUSTOMER, + QuoteRequestAgentsRestApiConfig::RESOURCE_AGENT_QUOTE_REQUEST_REVISE, + QuoteRequestAgentsRestApiConfig::RESOURCE_AGENT_QUOTE_REQUEST_CANCEL, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Check that resources specified in `CompanyUsersRestApiConfig::COMPANY_USER_RESOURCES` are only accessible if authenticated customer has company user assigned. + +Check that resources specified in `AgentAuthRestApiConfig::getAgentResources()` are only accessible with agent access token. + +{% endinfo_block %} + + +### 3) Set up transfer objects + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------|-------|---------|-------------------------------------------------------------------------------| +| RestAgentQuoteRequestsRequestAttributes | class | created | src/Generated/Shared/Transfer/RestAgentQuoteRequestsRequestAttributesTransfer | +| RestAgentQuoteRequestCancelAttributes | class | created | src/Generated/Shared/Transfer/RestAgentQuoteRequestCancelAttributesTransfer | +| RestAgentQuoteRequestReviseAttributes | class | created | src/Generated/Shared/Transfer/RestAgentQuoteRequestReviseAttributesTransfer | +| RestAgentQuoteRequestSendAttributes | class | created | src/Generated/Shared/Transfer/RestAgentQuoteRequestSendAttributesTransfer | +| RestQuoteRequestsAttributes | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsAttributesTransfer | +| RestQuoteRequestCancelAttributes | class | created | src/Generated/Shared/Transfer/RestQuoteRequestCancelAttributesTransfer | +| RestQuoteRequestReviseAttributes | class | created | src/Generated/Shared/Transfer/RestQuoteRequestReviseAttributesTransfer | +| RestQuoteRequestSendAttributes | class | created | src/Generated/Shared/Transfer/RestQuoteRequestSendAttributesTransfer | +| RestQuoteRequestVersion | class | created | src/Generated/Shared/Transfer/RestQuoteRequestVersionTransfer | +| RestQuoteRequestsRequestAttributes | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsRequestAttributesTransfer | +| RestQuoteRequestsCart | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsCartTransfer | +| RestQuoteRequestsTotals | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsTotalsTransfer | +| RestQuoteRequestsDiscounts | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsDiscountsTransfer | +| RestQuoteRequestsAddress | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsAddressTransfer | +| RestQuoteRequestItem | class | created | src/Generated/Shared/Transfer/RestQuoteRequestItemTransfer | +| RestQuoteRequestsCalculations | class | created | src/Generated/Shared/Transfer/RestQuoteRequestsCalculationsTransfer | + +{% endinfo_block %} + +### 4) Add translations + +Add translations as follows: + +1. Append glossary for the feature: + +```csv +quote_request.validation.error.is_not_applicable,Quote request is not applicable for the given quote.,en_US +quote_request.validation.error.is_not_applicable,Die Angebotsanfrage gilt nicht für das angegebene Angebot.,de_DE +quote_request.validation.error.cart_is_empty,The cart is empty.,en_US +quote_request.validation.error.cart_is_empty,Der Warenkorb ist leer.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------|--------------------|---------------|-------------------------------| +| QuoteRequestAgentCancelResourceRoutePlugin | Registers the `agent-quote-request-cancel` resource. | | Spryker\Glue\QuoteRequestAgentsRestApi\Plugin\GlueApplication | +| QuoteRequestAgentReviseResourceRoutePlugin | Registers the `agent-quote-request-revise` resource. | | Spryker\Glue\QuoteRequestAgentsRestApi\Plugin\GlueApplication | +| QuoteRequestAgentSendResourceRoutePlugin | Registers the `agent-quote-request-send-to-customer` resource. | | Spryker\Glue\QuoteRequestAgentsRestApi\Plugin\GlueApplication | +| QuoteRequestAgentsResourceRoutePlugin | Registers the `agent-quote-requests` resource. | | Spryker\Glue\QuoteRequestAgentsRestApi\Plugin\GlueApplication | +| QuoteRequestCancelResourceRoutePlugin | Registers the `quote-request-cancel` resource. | | Spryker\Glue\QuoteRequestsRestApi\Plugin\GlueApplication | +| QuoteRequestReviseResourceRoutePlugin | Registers the `quote-request-revise` resource. | | Spryker\Glue\QuoteRequestsRestApi\Plugin\GlueApplication | +| QuoteRequestSendResourceRoutePlugin | Registers the `quote-request-send-to-customer` resource. | | Spryker\Glue\QuoteRequestsRestApi\Plugin\GlueApplication | +| QuoteRequestsResourceRoutePlugin | Registers the `quote-requests` resource. | | Spryker\Glue\QuoteRequestsRestApi\Plugin\GlueApplication | +| CompanyUserByQuoteRequestResourceRelationshipPlugin | Adds the `company-users` resource as relationship to the `quote-request` resource. | | Spryker\Glue\CompanyUsersRestApi\Plugin\GlueApplication | +| CompanyByQuoteRequestResourceRelationshipPlugin | Adds the `companies` resource as relationship to the `quote-request` resource. | | Spryker\Glue\CompaniesRestApi\Plugin\GlueApplication | +| CompanyBusinessUnitByQuoteRequestResourceRelationshipPlugin | Adds the `company-business-units` resource as relationship to the `quote-request` resource. | | Spryker\Glue\CompanyBusinessUnitsRestApi\Plugin\GlueApplication | +| CustomerByQuoteRequestResourceRelationshipPlugin | Adds the `customer` resource as a relationship to the `quote-request` resource. | | Spryker\Glue\CustomersRestApi\Plugin\GlueApplication | +| ConcreteProductByQuoteRequestResourceRelationshipPlugin | Adds the `concrete-products` resource as relationship to the `quote-request` resource. | | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | +| ProductOptionsRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestItemTransfer` with product options data. | | Spryker\Glue\ProductOptionsRestApi\Plugin\QuoteRequestsRestApi | +| SalesUnitRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestItemTransfers` with sales unit data. | | Spryker\Glue\ProductMeasurementUnitsRestApi\Plugin\QuoteRequestsRestApi | +| ConfiguredBundleRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestItemTransfers` with configure bundle data and configure bundle items data. | | Spryker\Glue\ConfigurableBundlesRestApi\Plugin\QuoteRequestsRestApi | +| ShipmentsRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestItemTransfer` with shipments data. | | Spryker\Glue\ShipmentsRestApi\Plugin\QuoteRequestsRestApi | +| MerchantProductOffersRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestItemTransfer` with merchants data. | | Spryker\Glue\MerchantProductOffersRestApi\Plugin\QuoteRequestsRestApi | +| DiscountsRestQuoteRequestAttributesExpanderPlugin | Expands `RestQuoteRequestsAttributesTransfer` with discount data. | | Spryker\Glue\DiscountsRestApi\Plugin\QuoteRequestsRestApi | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new QuoteRequestsResourceRoutePlugin(), + new QuoteRequestAgentsResourceRoutePlugin(), + new QuoteRequestAgentCancelResourceRoutePlugin(), + new QuoteRequestAgentReviseResourceRoutePlugin(), + new QuoteRequestAgentSendResourceRoutePlugin(), + new QuoteRequestCancelResourceRoutePlugin(), + new QuoteRequestReviseResourceRoutePlugin(), + new QuoteRequestSendResourceRoutePlugin(), + ]; + } + + /** + * {@inheritDoc} + * + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + new CompanyUserByQuoteRequestResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + new CompanyByQuoteRequestResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + new CompanyBusinessUnitByQuoteRequestResourceRelationshipPlugin(), + ); + $resourceRelationshipCollection->addRelationship( + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + new CustomerByQuoteRequestResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + QuoteRequestsRestApiConfig::RESOURCE_QUOTE_REQUESTS, + new ConcreteProductByQuoteRequestResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +**src/Pyz/Glue/QuoteRequestsRestApi/QuoteRequestsRestApiDependencyProvider.php** + +```php + + Example + + ```json + { + "data": [ + { + "type": "quote-requests", + "id": "DE--21-1", + "attributes": { + "quoteRequestReference": "DE--21-1", + "status": "closed", + "isLatestVersionVisible": true, + "createdAt": "2021-12-03 23:45:50.000000", + "validUntil": null, + "versions": [], + "shownVersion": { + "version": 1, + "versionReference": "DE--21-1-1", + "createdAt": "2021-12-03 23:45:50.000000", + "metadata": { + "purchase_order_number": 228, + "delivery_date": null, + "note": "test" + }, + "cart": { + "priceMode": "GROSS_MODE", + "store": "DE", + "currency": "EUR", + "totals": { + "expenseTotal": 0, + "discountTotal": 14341, + "taxTotal": { + "tax_rate": null, + "amount": 0 + }, + "subtotal": 143412, + "grandTotal": 129071, + "priceToPay": 129071 + }, + "billingAddress": null, + "items": [ + { + "groupKey": "115_27295368", + "productOfferReference": null, + "merchantReference": null, + "sku": "115_27295368", + "quantity": 1, + "abstractSku": "115", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "118_29804739", + "productOfferReference": null, + "merchantReference": null, + "sku": "118_29804739", + "quantity": 1, + "abstractSku": "118", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "124_31623088", + "productOfferReference": null, + "merchantReference": null, + "sku": "124_31623088", + "quantity": 1, + "abstractSku": "124", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "126_26280142", + "productOfferReference": null, + "merchantReference": null, + "sku": "126_26280142", + "quantity": 1, + "abstractSku": "126", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "119_29804808", + "productOfferReference": null, + "merchantReference": null, + "sku": "119_29804808", + "quantity": 1, + "abstractSku": "119", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "128_29955336", + "productOfferReference": null, + "merchantReference": null, + "sku": "128_29955336", + "quantity": 1, + "abstractSku": "128", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "127_20723326", + "productOfferReference": null, + "merchantReference": null, + "sku": "127_20723326", + "quantity": 1, + "abstractSku": "127", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "122_22308524", + "productOfferReference": null, + "merchantReference": null, + "sku": "122_22308524", + "quantity": 1, + "abstractSku": "122", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "117_30585828", + "productOfferReference": null, + "merchantReference": null, + "sku": "117_30585828", + "quantity": 1, + "abstractSku": "117", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "129_30706500", + "productOfferReference": null, + "merchantReference": null, + "sku": "129_30706500", + "quantity": 1, + "abstractSku": "129", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "131_24872891", + "productOfferReference": null, + "merchantReference": null, + "sku": "131_24872891", + "quantity": 1, + "abstractSku": "131", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + } + ], + "discounts": [], + "shipments": [] + } + } + }, + "links": { + "self": "http://glue.de.spryker.local/quote-requests/DE--21-1" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "ebf4b55a-cab0-5ed0-8fb7-525a3eeedeac" + } + ] + }, + "companies": { + "data": [ + { + "type": "companies", + "id": "62de4ab6-b768-5c21-8835-455d9f341625" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + } + ] + }, + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "115_27295368" + }, + { + "type": "concrete-products", + "id": "118_29804739" + }, + { + "type": "concrete-products", + "id": "124_31623088" + }, + { + "type": "concrete-products", + "id": "126_26280142" + }, + { + "type": "concrete-products", + "id": "119_29804808" + }, + { + "type": "concrete-products", + "id": "128_29955336" + }, + { + "type": "concrete-products", + "id": "127_20723326" + }, + { + "type": "concrete-products", + "id": "122_22308524" + }, + { + "type": "concrete-products", + "id": "117_30585828" + }, + { + "type": "concrete-products", + "id": "129_30706500" + }, + { + "type": "concrete-products", + "id": "131_24872891" + } + ] + } + } + } + ], + "links": { + "self": "http://glue.de.spryker.local/quote-requests" + }, + "included": [ + { + "type": "companies", + "id": "62de4ab6-b768-5c21-8835-455d9f341625", + "attributes": { + "isActive": true, + "name": "Spryker Systems GmbH", + "status": "approved" + }, + "links": { + "self": "http://glue.de.spryker.local/companies/62de4ab6-b768-5c21-8835-455d9f341625" + } + }, + { + "type": "company-business-units", + "id": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2", + "attributes": { + "defaultBillingAddress": null, + "name": "Spryker Systems HR department", + "email": "HR@spryker.com", + "phone": "4902890031", + "externalUrl": "", + "bic": "", + "iban": "" + }, + "links": { + "self": "http://glue.de.spryker.local/company-business-units/5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + } + }, + { + "type": "company-users", + "id": "ebf4b55a-cab0-5ed0-8fb7-525a3eeedeac", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "http://glue.de.spryker.local/company-users/ebf4b55a-cab0-5ed0-8fb7-525a3eeedeac" + }, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "62de4ab6-b768-5c21-8835-455d9f341625" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "115_27295368", + "attributes": { + "sku": "115_27295368", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "115", + "name": "DELL OptiPlex 3020", + "description": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and easy serviceability. Stop advanced threats and zero-day attacks with Dell Data Protection | Protected Workspace — a proactive, real-time solution for malware protection. Ensure authorized access through multifactor, single sign-on (SSO) and preboot authentication with Dell Data Protection | Security Tools. Streamline administration with integration into Dell KACE appliances, Microsoft System Center and industry-standard tools. Deploy with flexibility through multiple chassis options. Select the small form factor chassis, optimized for constrained workspaces, or the expandable mini tower with support for up to four PCIe cards.", + "attributes": { + "processor_cache": "3 MB", + "bus_type": "DMI", + "processor_threads": "2", + "tcase": "72 °", + "brand": "DELL", + "processor_frequency": "3.2 GHz" + }, + "superAttributesDefinition": [ + "processor_cache", + "processor_frequency" + ], + "metaTitle": "DELL OptiPlex 3020", + "metaKeywords": "DELL,Tax Exempt", + "metaDescription": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and ", + "attributeNames": { + "processor_cache": "Processor cache type", + "bus_type": "Bus type", + "processor_threads": "Processor Threads", + "tcase": "Tcase", + "brand": "Brand", + "processor_frequency": "Processor frequency" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/115_27295368" + } + }, + { + "type": "concrete-products", + "id": "118_29804739", + "attributes": { + "sku": "118_29804739", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "118", + "name": "Fujitsu ESPRIMO E420", + "description": "Energy Efficiency As energy saving is one of the core components of Fujitsu' approach to the environment, we permanently try to improve the energy efficiency of our products. The Fujitsu ESPRIMO E420 features proven technology regarding Intel® chipset and processor and an 85% energy efficient power supply. Fujitsu is committed to eliminating the use of harmful and potentially harmful substances in its products and production processes in order to minimize risk to end users and to the environment. This strategy is captured in Environmental Guideline FTS03230 and forms the basis on which all Fujitsu's products are designed. Especially for Fujitsu ESPRIMO PCs this means that all used printed circuit boards are halogen free. Furthermore they are compliant with several certificates awarding environmental conscience such as ENERGY STAR® and EPEAT.", + "attributes": { + "processor_cache": "6 MB", + "bus_type": "DMI", + "processor_model": "i5-4590", + "product_type": "PC", + "brand": "Fujitsu", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_cache", + "color" + ], + "metaTitle": "Fujitsu ESPRIMO E420", + "metaKeywords": "Fujitsu,Tax Exempt", + "metaDescription": "Energy Efficiency As energy saving is one of the core components of Fujitsu' approach to the environment, we permanently try to improve the energy efficien", + "attributeNames": { + "processor_cache": "Processor cache type", + "bus_type": "Bus type", + "processor_model": "Processor model", + "product_type": "Product type", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/118_29804739" + } + }, + { + "type": "concrete-products", + "id": "124_31623088", + "attributes": { + "sku": "124_31623088", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "124", + "name": "HP ProDesk 400 G3", + "description": "New powerful processors Give your business the strong foundation it needs for growth with the affordable and reliable HP ProDesk 400 SFF. Designed with essential security and manageability features, the HP ProDesk 400 helps keep your business growing. New sixth Gen Intel® Core™ processors bring powerful processing with Intel® HD 530 Graphics. Available DDR4 memory helps meet the demands of today's businesses. HP ProDesks are rigorously tested to help ensure reliability. During the HP Total Test Process, PCs experience 120,000 hours of performance trials to help get you through your business day. The HP ProDesk 400 SFF helps affordably build a solid IT infrastructure for your growing business and fits in smaller workspaces for easy deployment.", + "attributes": { + "processor_codename": "Skylake", + "bus_type": "DMI3", + "processor_threads": "4", + "processor_cores": "2", + "brand": "HP", + "total_storage_capacity": "128 GB" + }, + "superAttributesDefinition": [ + "total_storage_capacity" + ], + "metaTitle": "HP ProDesk 400 G3", + "metaKeywords": "HP,Tax Exempt", + "metaDescription": "New powerful processors Give your business the strong foundation it needs for growth with the affordable and reliable HP ProDesk 400 SFF. Designed with ess", + "attributeNames": { + "processor_codename": "Processor codename", + "bus_type": "Bus type", + "processor_threads": "Processor Threads", + "processor_cores": "Processor cores", + "brand": "Brand", + "total_storage_capacity": "Total storage capacity" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/124_31623088" + } + }, + { + "type": "concrete-products", + "id": "126_26280142", + "attributes": { + "sku": "126_26280142", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "126", + "name": "HP Z 440", + "description": "Get the job done fast Cross items off your to-do list fast. Achieve massive computational performance with a single processor personal workstation delivering support for up to 8 cores of processing power. Add in powerful graphics and performance features like optional Thunderbolt™ 23, HP Z Turbo Drive4, and HP Remote Graphics Software, and you get a world-class workstation experience that never slows you down. Take your business to the next level of performance, expandability, and no compromise reliability in one complete package. Featuring a perfect mix of HP Z DNA in a performance workstation package with up to 8 discrete processor cores, up to 128 GB of RAM, and multiple storage and PCIe configuration options. Protect your investment and make downtime a thing of the past. Get no-compromise reliability and a standard 3/3/3 limited warranty from the HP Z440 Workstation.", + "attributes": { + "fsb_parity": "no", + "bus_type": "QPI", + "processor_cores": "8", + "processor_threads": "16", + "brand": "HP", + "processor_frequency": "2.8 GHz" + }, + "superAttributesDefinition": [ + "processor_frequency" + ], + "metaTitle": "HP Z 440", + "metaKeywords": "HP,Tax Exempt", + "metaDescription": "Get the job done fast Cross items off your to-do list fast. Achieve massive computational performance with a single processor personal workstation deliveri", + "attributeNames": { + "fsb_parity": "FSB Parity", + "bus_type": "Bus type", + "processor_cores": "Processor cores", + "processor_threads": "Processor Threads", + "brand": "Brand", + "processor_frequency": "Processor frequency" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/126_26280142" + } + }, + { + "type": "concrete-products", + "id": "119_29804808", + "attributes": { + "sku": "119_29804808", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "119", + "name": "Fujitsu ESPRIMO E920", + "description": "Green IT Fujitsu is committed to eliminating the use of harmful and potentially harmful substances in its products and production processes in order to minimize risk to end users and to the environment. This strategy is captured in Environmental Guideline FTS03230 and forms the basis on which all Fujitsu's products are designed. Especially for Fujitsu ESPRIMO PCs this means that all used printed circuit boards are halogen free. Furthermore they are compliant with several certificates awarding environmental conscience such as ENERGY STAR® and EPEAT. As energy saving is one of the core components of Fujitsu' approach to the environment, we permanently try to improve the energy efficiency of our products. The Fujitsu ESPRIMO E920 features latest technology regarding Intel® chipset and processor and optional an up to 94% energy efficient power supply. Furthermore it delivers enhanced power management settings and optional 0-Watt power consumption in off-mode.", + "attributes": { + "internal_memory": "32 GB", + "intel_smart_cache": "yes", + "product_type": "PC", + "processor_cache": "6 MB", + "brand": "Fujitsu", + "color": "Silver" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_cache", + "color" + ], + "metaTitle": "Fujitsu ESPRIMO E920", + "metaKeywords": "Fujitsu,Tax Exempt", + "metaDescription": "Green IT Fujitsu is committed to eliminating the use of harmful and potentially harmful substances in its products and production processes in order to min", + "attributeNames": { + "internal_memory": "Max internal memory", + "intel_smart_cache": "Intel Smart Cache", + "product_type": "Product type", + "processor_cache": "Processor cache type", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/119_29804808" + } + }, + { + "type": "concrete-products", + "id": "128_29955336", + "attributes": { + "sku": "128_29955336", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "128", + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.2 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDescription": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/128_29955336" + } + }, + { + "type": "concrete-products", + "id": "127_20723326", + "attributes": { + "sku": "127_20723326", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "127", + "name": "HP Z 620", + "description": "Big Possibilities. Compact Form Factor. More versatile than ever before. With up to 16 discrete processor cores, the HP Z620 Workstation packs a ton of computing and visualization power into a quiet, compact footprint. This dual-socket system helps you boost productivity with next-generation Intel® Xeon® processors and support for up to 8 displays. Get massive system performance with a small footprint. The HP Z620 features the next evolution in processor technology and system architecture, setting the standard for versatility with support for a single Intel E5-1600 Series Xeon® processor or dual Intel E5-2600 Series Xeon® processors. With 800W 90% efficient power supply and support for up to 8 displays, the HP Z620 gives you the freedom of doing and seeing more.", + "attributes": { + "processor_frequency": "2.1 GHz", + "processor_cache": "15 MB", + "processor_threads": "12", + "fsb_parity": "no", + "brand": "HP", + "total_storage_capacity": "1000 GB" + }, + "superAttributesDefinition": [ + "processor_frequency", + "processor_cache", + "total_storage_capacity" + ], + "metaTitle": "HP Z 620", + "metaKeywords": "HP,Tax Exempt", + "metaDescription": "Big Possibilities. Compact Form Factor. More versatile than ever before. With up to 16 discrete processor cores, the HP Z620 Workstation packs a ton of com", + "attributeNames": { + "processor_frequency": "Processor frequency", + "processor_cache": "Processor cache type", + "processor_threads": "Processor Threads", + "fsb_parity": "FSB Parity", + "brand": "Brand", + "total_storage_capacity": "Total storage capacity" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/127_20723326" + } + }, + { + "type": "concrete-products", + "id": "122_22308524", + "attributes": { + "sku": "122_22308524", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "122", + "name": "HP EliteDesk 800 G1 Mini", + "description": "Big power. Space saving design. Smaller than some desk phones, this Desktop Mini can fit almost anywhere vertically or horizontally. The clean, easily serviceable design with integrated wireless antenna allows flexible deployment options1 to help optimize the workspace. Keep productivity high and downtime low with HP BIOSphere firmware-level automation. Your PCs have extra protection thanks to automatic updates and security checks. Enjoy customization that allows your PC to evolve with your business.", + "attributes": { + "processor_cores": "2", + "processor_codename": "Haswell", + "processor_threads": "4", + "bus_type": "DMI", + "brand": "HP", + "processor_frequency": "2.9 GHz" + }, + "superAttributesDefinition": [ + "processor_frequency" + ], + "metaTitle": "HP EliteDesk 800 G1 Mini", + "metaKeywords": "HP,Tax Exempt", + "metaDescription": "Big power. Space saving design. Smaller than some desk phones, this Desktop Mini can fit almost anywhere vertically or horizontally. The clean, easily serv", + "attributeNames": { + "processor_cores": "Processor cores", + "processor_codename": "Processor codename", + "processor_threads": "Processor Threads", + "bus_type": "Bus type", + "brand": "Brand", + "processor_frequency": "Processor frequency" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/122_22308524" + } + }, + { + "type": "concrete-products", + "id": "117_30585828", + "attributes": { + "sku": "117_30585828", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "117", + "name": "Fujitsu ESPRIMO D556", + "description": "The FUJITSU ESPRIMO Desktop provides high-quality computing for your daily office tasks. It supports attractive price points and delivers the continuity needed for daily operations. Your valuable business data is protected by the latest TPM controller and the Erasedisk option. To meet your specific hardware needs it can be either individually configured or customized.", + "attributes": { + "processor_frequency": "3.7 GHz", + "processor_cores": "2", + "bus_type": "DMI3", + "tcase": "65 °", + "brand": "Fujitsu", + "internal_memory": "4 GB" + }, + "superAttributesDefinition": [ + "processor_frequency", + "internal_memory" + ], + "metaTitle": "Fujitsu ESPRIMO D556", + "metaKeywords": "Fujitsu,Tax Exempt", + "metaDescription": "The FUJITSU ESPRIMO Desktop provides high-quality computing for your daily office tasks. It supports attractive price points and delivers the continuity n", + "attributeNames": { + "processor_frequency": "Processor frequency", + "processor_cores": "Processor cores", + "bus_type": "Bus type", + "tcase": "Tcase", + "brand": "Brand", + "internal_memory": "Max internal memory" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/117_30585828" + } + }, + { + "type": "concrete-products", + "id": "129_30706500", + "attributes": { + "sku": "129_30706500", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "129", + "name": "Lenovo ThinkCenter E73", + "description": "Eco-friendly and Energy Efficient Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology. With 10% more processing power, fourth generation Intel® Core™ processors deliver the performance to increase business productivity for your business. They can also guard against identity theft and ensure safe access to your network with built-in security features.", + "attributes": { + "processor_threads": "8", + "processor_cores": "4", + "processor_codename": "Haswell", + "pci_express_slots_version": "3", + "brand": "Lenovo", + "processor_frequency": "3.2 GHz" + }, + "superAttributesDefinition": [ + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCenter E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDescription": "Eco-friendly and Energy Efficient Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is", + "attributeNames": { + "processor_threads": "Processor Threads", + "processor_cores": "Processor cores", + "processor_codename": "Processor codename", + "pci_express_slots_version": "PCI Express slots version", + "brand": "Brand", + "processor_frequency": "Processor frequency" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/129_30706500" + } + }, + { + "type": "concrete-products", + "id": "131_24872891", + "attributes": { + "sku": "131_24872891", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "131", + "name": "Lenovo ThinkStation P900", + "description": "Thermal Design: Elegant & Efficient. Patented tri-channel cooling with just 3 system fans – as opposed to 10 that other workstations typically rely on — and a direct cooling air baffle directs fresh air into the CPU and memory. ThinkStation P900 delivers new technologies and design to keep your workstation cool and quiet. The innovative Flex Module lets you customize I/O ports, so you add only what you need. Using the 5.25\" bays, you can mix and match components including an ultraslim ODD, 29-in-1 media card reader, Firewire, and eSATA. The Flex Connector is a mezzanine card that fits into the motherboard and allows for expanded storage and I/O, without sacrificing the use of rear PCI. It supports SATA/SAS/PCIe advanced RAID solution. ThinkStation P900 includes two available connectors (enabled with each CPU).", + "attributes": { + "processor_frequency": "2.4 GHz", + "processor_cores": "6", + "processor_threads": "12", + "stepping": "R2", + "brand": "Lenovo", + "color": "Silver" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Lenovo ThinkStation P900", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDescription": "Thermal Design: Elegant & Efficient. Patented tri-channel cooling with just 3 system fans – as opposed to 10 that other workstations typically rely on — an", + "attributeNames": { + "processor_frequency": "Processor frequency", + "processor_cores": "Processor cores", + "processor_threads": "Processor Threads", + "stepping": "Stepping", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "http://glue.de.spryker.local/concrete-products/131_24872891" + } + } + ] + } + ``` + +
    + + +- To verify that the `QuoteRequestCancelResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-requests/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-request-cancel` endpoint is available for an authenticated company user. + +- To verify that the `QuoteRequestReviseResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-requests/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-request-revise` endpoint is available for an authenticated company user. + +- To verify that the `QuoteRequestSendResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-requests/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-request-send-to-customer` endpoint is available for an authenticated company user. + +- To verify that the `QuoteRequestAgentsResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-request-agents` endpoint is available for authenticated agent. + +
    + Example + + ```json + { + "data": [ + { + "type": "quote-requests", + "id": "DE--21-1", + "attributes": { + "quoteRequestReference": "DE--21-1", + "status": "closed", + "isLatestVersionVisible": true, + "createdAt": "2021-12-03 23:45:50.000000", + "validUntil": null, + "versions": [ + "DE--21-1-1" + ], + "shownVersion": { + "version": 1, + "versionReference": "DE--21-1-1", + "createdAt": "2021-12-03 23:45:50.000000", + "metadata": { + "purchase_order_number": 228, + "delivery_date": null, + "note": "test" + }, + "cart": { + "priceMode": "GROSS_MODE", + "store": "DE", + "currency": "EUR", + "totals": { + "expenseTotal": 0, + "discountTotal": 14341, + "taxTotal": { + "tax_rate": null, + "amount": 0 + }, + "subtotal": 143412, + "grandTotal": 129071, + "priceToPay": 129071 + }, + "billingAddress": null, + "items": [ + { + "groupKey": "115_27295368", + "productOfferReference": null, + "merchantReference": null, + "sku": "115_27295368", + "quantity": 1, + "abstractSku": "115", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "118_29804739", + "productOfferReference": null, + "merchantReference": null, + "sku": "118_29804739", + "quantity": 1, + "abstractSku": "118", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "124_31623088", + "productOfferReference": null, + "merchantReference": null, + "sku": "124_31623088", + "quantity": 1, + "abstractSku": "124", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "126_26280142", + "productOfferReference": null, + "merchantReference": null, + "sku": "126_26280142", + "quantity": 1, + "abstractSku": "126", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "119_29804808", + "productOfferReference": null, + "merchantReference": null, + "sku": "119_29804808", + "quantity": 1, + "abstractSku": "119", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "128_29955336", + "productOfferReference": null, + "merchantReference": null, + "sku": "128_29955336", + "quantity": 1, + "abstractSku": "128", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "127_20723326", + "productOfferReference": null, + "merchantReference": null, + "sku": "127_20723326", + "quantity": 1, + "abstractSku": "127", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "122_22308524", + "productOfferReference": null, + "merchantReference": null, + "sku": "122_22308524", + "quantity": 1, + "abstractSku": "122", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "117_30585828", + "productOfferReference": null, + "merchantReference": null, + "sku": "117_30585828", + "quantity": 1, + "abstractSku": "117", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "129_30706500", + "productOfferReference": null, + "merchantReference": null, + "sku": "129_30706500", + "quantity": 1, + "abstractSku": "129", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + }, + { + "groupKey": "131_24872891", + "productOfferReference": null, + "merchantReference": null, + "sku": "131_24872891", + "quantity": 1, + "abstractSku": "131", + "amount": null, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "calculations": null, + "selectedProductOptions": [] + } + ], + "discounts": [], + "shipments": [] + } + } + }, + "links": { + "self": "http://glue.de.spryker.local/quote-requests/DE--21-1" + } + } + ], + "links": { + "self": "http://glue.de.spryker.local/agent-quote-requests" + } + } + ``` + +
    + +- To verify that the `QuoteRequestAgentCancelResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-request-agents/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-agent-request-cancel` endpoint is available for an authenticated agent. + +- To verify that the `QuoteRequestAgentReviseResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-request-agents/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-agent-request-cancel` endpoint is available for an authenticated agent. + +- To verify that the `QuoteRequestAgentSendResourceRoutePlugin` resource route plugin is set up correctly, make sure that the `https://glue.mysprykershop.com/quote-request-agents/{% raw %}{{{% endraw %}quote_request_id{% raw %}}}{% endraw %}/quote-agent-request-cancel` endpoint is available for an authenticated company user. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-rest-schema-validation-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-rest-schema-validation-glue-api.md new file mode 100644 index 00000000000..75f46421f87 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-rest-schema-validation-glue-api.md @@ -0,0 +1,198 @@ + + +Follow the steps below to install Rest schema validation feature API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | + + +## 1) Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker/rest-request-validator:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| RestRequestValidator | vendor/spryker/rest-request-validator | + +{% endinfo_block %} + + +## 2) Set up Behavior + +Set up the following behaviors. + +### Enable Console Command + +Activate the console command provided by the module: + +| CLASS | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| BuildValidationCacheConsole | Generates a validation cache that is required for request validation | None | Spryker\Zed\RestRequestValidator\Communication\Console | + + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + This value is not a valid email address." + }, + { + "code": "901", + "status": 422, + "detail": "password => This value should not be blank." + } + ] +} +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-return-management-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-return-management-glue-api.md new file mode 100644 index 00000000000..4cd4ef70df6 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-return-management-glue-api.md @@ -0,0 +1,124 @@ + + +## Install Feature API + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Feature API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Return Management | {{page.release_tag}} | [Install the Return Management feature](/docs/pbc/all/return-management/latest/base-shop/install-and-upgrade/install-the-return-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-returns-rest-api:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| SalesReturnsRestApi | vendor/spryker/sales-returns-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data are added to the `spy_glossary` table in the database. + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestReturnsAttributes | class | created | src/Generated/Shared/Transfer/RestReturnsAttributesTransfer | +| RestReturnReasonsAttributes | class | created | src/Generated/Shared/Transfer/RestReturnReasonsAttributesTransfer | +| RestReturnRequestAttributes | class | created | src/Generated/Shared/Transfer/RestReturnRequestAttributesTransfer | +| RestReturnItemRequestAttributes | class | created | src/Generated/Shared/Transfer/RestReturnItemRequestAttributesTransfer | +| RestReturnTotalsAttributes | class | created | src/Generated/Shared/Transfer/RestReturnTotalsAttributesTransfer | +| RestReturnItemsAttributes | class | created | src/Generated/Shared/Transfer/RestReturnItemsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable resources and relationships: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| OrderItemByResourceIdResourceRelationshipPlugin | Adds order-items resource as relationship by order item uuid. | None | Spryker\Glue\OrdersRestApi\Plugin | +| ReturnItemByReturnResourceRelationshipPlugin | Adds return-items resource as relationship by return. | None | `Spryker\Glue\SalesReturnsRestApi\Plugin | +| ReturnsResourceRoutePlugin | Registers `/returns` route. | None | Spryker\Glue\SalesReturnsRestApi\Plugin | +| ReturnReasonsResourceRoutePlugin | Registers `/return-reasons` route. | None | Spryker\Glue\SalesReturnsRestApi\Plugin | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + SalesReturnsRestApiConfig::RESOURCE_RETURNS, + new ReturnItemByReturnResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + SalesReturnsRestApiConfig::RESOURCE_RETURN_ITEMS, + new OrderItemByResourceIdResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that following endpoints are available now: + +- `https://glue.mysprykershop.com/returns` +- `https://glue.mysprykershop.com/return-reasons` + +Make sure that items from `https://glue.mysprykershop.com/orders` endpoint contain `isReturnable` and uuid properties. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shared-carts-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shared-carts-glue-api.md new file mode 100644 index 00000000000..f79b3c79765 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shared-carts-glue-api.md @@ -0,0 +1,410 @@ + + +This document describes how to install the Shared Carts Glue API. + + +## Prerequisites + +To start feature integration, overview and install the following features and Glue APIs: + +| NAME | VERSION | INTEGRATION GUIDE | +| - | - | - | +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Uuid generation console | {{page.release_tag}} | [Install the Uuid Generation Console feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/shared-carts-rest-api:"^1.2.0" spryker/cart-permission-groups-rest-api:"^1.2.0" --update-with-dependencies +``` + + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| - | - | +| SharedCartsRestApi | vendor/spryker/shared-carts-rest-api | +| CartPermissionGroupsRestApi | vendor/spryker/cart-permission-groups-rest-api | + +{% endinfo_block %} + + +## 2) Set up database schema and transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| - | - | - | - | +| ShareDetailCriteriaFilterTransfer | class | added | src/Generated/Shared/Transfer/ShareDetailCriteriaFilterTransfer.php | +| QuoteCompanyUserTransfer | class | added | src/Generated/Shared/Transfer/QuoteCompanyUserTransfer.php | +| QuotePermissionGroupResponseTransfer | class | added | src/Generated/Shared/Transfer/QuotePermissionGroupResponseTransfer.php | +| ShareCartResponseTransfer | class | added | src/Generated/Shared/Transfer/ShareCartResponseTransfer.php | +| RestCartPermissionGroupsAttributesTransfer | class | added | src/Generated/Shared/Transfer/RestCartPermissionGroupsAttributesTransfer.php | +| RestSharedCartsAttributesTransfer | class | added | src/Generated/Shared/Transfer/RestSharedCartsAttributesTransfer.php | +| ShareDetailTransfer.uuid | property | added | src/Generated/Shared/Transfer/ShareDetailTransfer.php | +| ShareCartRequestTransfer.quoteUuid | property | added | src/Generated/Shared/Transfer/ShareCartRequestTransfer.php | +| ShareCartRequestTransfer.customerReference | property | added | src/Generated/Shared/Transfer/ShareCartRequestTransfer.php | +| QuoteTransfer.quotePermissionGroup | property | added | src/Generated/Shared/Transfer/QuoteTransfer.php | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| - | - | - | +| spy_quote_company_user.uuid | column | added | + +{% endinfo_block %} + + +## 3) Set up behavior + +Set up the following behaviors. + +### Generate UUIDs for the existing company records without them + +Generate UUIDs for the existing company records without them: + +```bash +console uuid:generate SharedCart spy_quote_company_user +``` + +{% info_block warningBox "Verification" %} + +Verify that, in the `spy_quote_company_user` table, the `uuid` field is populated for all the records: + +```bash +select count(*) from spy_quote_company_user where uuid is NULL; +``` + + +The result should be 0 records. + +{% endinfo_block %} + +### Enable resources and relationships + +{% info_block infoBox "" %} + +- `SharedCartsResourceRoutePlugin` is a protected resource for the following requests: `POST`, `PATCH`, `DELETE`. + +- `CartPermissionGroupsResourceRoutePlugin` is a protected resource for the `GET` request. + +For more details, see the `configure` function in [Resource Routing](/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.html). + +{% endinfo_block %} + + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| - | - | - | - | +| SharedCartsResourceRoutePlugin | Registers the `/shared-carts` resource route. | | Spryker\Glue\SharedCartsRestApi\Plugin\GlueApplication\SharedCartsResourceRoutePlugin | +| CartPermissionGroupsResourceRoutePlugin | Registers the `/cart-permission-groups` resource route. | | Spryker\Glue\CartPermissionGroupsRestApi\Plugin\GlueApplication\CartPermissionGroupsResourceRoutePlugin | +| CartPermissionGroupByQuoteResourceRelationshipPlugin | Adds the `cart-permission-groups` resource as a relationship to the `cart` resource. | | Spryker\Glue\CartPermissionGroupsRestApi\Plugin\GlueApplication\CartPermissionGroupByQuoteResourceRelationshipPlugin | +| SharedCartByCartIdResourceRelationshipPlugin | Adds the `shared-carts` resource as a relationship to the `cart` resource. | | Spryker\Glue\SharedCartsRestApi\Plugin\GlueApplication\SharedCartByCartIdResourceRelationshipPlugin | +| CartPermissionGroupByShareDetailResourceRelationshipPlugin | Adds the `cart-permission-group` resource as a relationship to the `shared cart` resource. | | Spryker\Glue\CartPermissionGroupsRestApi\Plugin\GlueApplication\CartPermissionGroupByShareDetailResourceRelationshipPlugin | +| CompanyUserByShareDetailResourceRelationshipPlugin | Adds the `company-users` resource as a relationship to the `shared cart` resource. | | Spryker\Glue\CompanyUsersRestApi\Plugin\GlueApplication\CompanyUserByShareDetailResourceRelationshipPlugin | +| SharedCartQuoteCollectionExpanderPlugin | Expands the quote collection with the carts shared with a user. | | Spryker\Zed\SharedCart\Communication\Plugin\CartsRestApi\SharedCartQuoteCollectionExpanderPlugin | +| CompanyUserStorageProviderPlugin | Retrieves information about a company user from the key-value storage. | | Spryker\Glue\CompanyUserStorage\Communication\Plugin\SharedCartsRestApi\CompanyUserStorageProviderPlugin | +| CompanyUserCustomerExpanderPlugin | Expands the `customer` transfer with the company user transfer. | | Spryker\Glue\CompanyUsersRestApi\Plugin\CartsRestApi\CompanyUserCustomerExpanderPlugin | +| QuotePermissionGroupQuoteExpanderPlugin | Expands the `quote` transfer with a quote permission group. | | Spryker\Zed\SharedCartsRestApi\Communication\Plugin\CartsRestApi\QuotePermissionGroupQuoteExpanderPlugin | + + + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new CartPermissionGroupByQuoteResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CARTS, + new SharedCartByCartIdResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + SharedCartsRestApiConfig::RESOURCE_SHARED_CARTS, + new CartPermissionGroupByShareDetailResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + SharedCartsRestApiConfig::RESOURCE_SHARED_CARTS, + new CompanyUserByShareDetailResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +
    + src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php + +```php + + + + + + + +**src/Pyz/Glue/SharedCartsRestApi/SharedCartsRestApiDependencyProvider.php** + +```php + + POST http://glue.mysprykershop.com/carts/{{cart_uuid}}/shared-carts + +```json +{ + "data": { + "type": "shared-carts", + "attributes": { + "idCompanyUser": "88ac19e3-ca9c-539e-b1f1-9c3b7fd48718", + "idCartPermissionGroup": 1 + } + } +} +``` + +
    + +
    + PATCH http://glue.mysprykershop.com/shared-carts/{{shared_cart_uuid}} + +```json +{ + "data": { + "type": "shared-carts", + "attributes": { + "idCartPermissionGroup": 2 + } + } +} +``` + +
    + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To make sure that `SharedCartsResourceRoutePlugin` is installed correctly, check that you get a valid response from the following requests: + +
    + POST http://glue.mysprykershop.com/carts/{{cart_uuid}}/shared-carts + +```json +{ + "data": { + "type": "shared-carts", + "attributes": { + "idCompanyUser": "88ac19e3-ca9c-539e-b1f1-9c3b7fd48718", + "idCartPermissionGroup": 1 + } + } +} +``` + +
    + +
    + PATCH http://glue.mysprykershop.com/shared-carts/{{shared_cart_uuid}} + +```json +{ + "data": { + "type": "shared-carts", + "attributes": { + "idCartPermissionGroup": 2 + } + } +} +``` + +
    + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that you can remove cart sharing: + +1. Send the request: `DELETE https://glue.mysprykershop.com/shared-carts/{{shared_cart_uuid}}`. + +2. You should get the 204 status. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shipment-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shipment-glue-api.md new file mode 100644 index 00000000000..7f35c4dc83e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shipment-glue-api.md @@ -0,0 +1,484 @@ + + + +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) Glue API. + +## Prerequisites + +Install the required features: + +| FEATURE | VERSION | INSTALLATION GUIDE | +|----------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Glue API: Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Glue API: Checkout | {{page.release_tag}} | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | +| Glue API: Glue Application | {{page.release_tag}} | [Install the Glue Application Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Glue API: Order Management | {{page.release_tag}} | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/shipments-rest-api:"1.11.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|-----------------------------------| +| ShipmentsRestApi | vendor/spryker/shipments-rest-api | + +{% endinfo_block %} + +## 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|--------------------------| +| ShipmentsRestApiConfig::shouldExecuteShippingAddressValidationStrategyPlugins() | Defines if the stack of `ShippingAddressValidationStrategyPluginInterface` plugins should be executed during shipment checkout data validation. | Pyz\Zed\ShipmentsRestApi | + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiConfig.php** + +```php + +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new ShipmentMethodsByCheckoutDataResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + OrdersRestApiConfig::RESOURCE_ORDERS, + new OrderShipmentByOrderResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ShipmentsRestApiConfig::RESOURCE_SHIPMENTS, + new ShipmentMethodsByShipmentResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new ShipmentsByCheckoutDataResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +- To make sure that `ShipmentMethodsByCheckoutDataResourceRelationshipPlugin` is activated, check that the information from the `shipment-methods` resource is returned by sending the `POST https://glue.mysprykershop.com/checkout-data?include=shipment-methods` request. +- To make sure that `OrderShipmentByOrderResourceRelationshipPlugin` is activated, make sure that the information from the `order-shipments` resource is returned by sending the `GET https://glue.mysprykershop.com/orders?include=order-shipments` request. +- To make sure that `ShipmentMethodsByShipmentResourceRelationshipPlugin` is activated, make sure that the information from the `shipment-methods` resource is returned by sending the `GET https://glue.mysprykershop.com/shipments?include=shipment-methods` request. +- To make sure that `ShipmentsByCheckoutDataResourceRelationshipPlugin` is activated, make sure that the information from the `shipments` resource is returned by sending the `POST https://glue.mysprykershop.com/checkout-data?include=shipments` request. + +{% endinfo_block %} + +### Configure mapping + +To map the data from requests to `QuoteTransfer`, configure the following mappers on the project level: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|-------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------| +| ShipmentQuoteMapperPlugin | Maps shipment information to `QuoteTransfer`. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | +| ShipmentRestOrderDetailsAttributesMapperPlugin | Maps the shipments from `OrderTransfer` to `RestOrderDetailsAttributesTransfer`. | | Spryker\Glue\ShipmentsRestApi\Plugin\OrdersRestApi | +| ShipmentsQuoteMapperPlugin | Maps the shipments from `RestCheckoutRequestAttributesTransfer` to `QuoteTransfer`. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | + + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + +src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +To verify the plugins are activated, send the `POST https://glue.mysprykershop.com/checkout` request with invalid shipments and make sure errors are returned. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| Glue API: Checkout | ✓ | [Install the Checkout Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shopping-lists-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shopping-lists-glue-api.md new file mode 100644 index 00000000000..134080ccc49 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-shopping-lists-glue-api.md @@ -0,0 +1,328 @@ + + +{% info_block infoBox "Included features" %} + +The following feature integration guide expects the basic feature to be in place. +The current feature integration guide only adds the Shopping List Rest API functionality. + +{% endinfo_block %} + +Follow the steps below to install Shopping List feature API. + +## Prerequisites + +Install the required features: + +| FEATURE | VERSION | INSTALLATION GUIDE | +| --- | --- |--- | +| Spryker Core | {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Shopping Lists | {{page.release_tag}} |[Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/shopping-lists-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module is installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ShoppingListsRestApi | vendor/spryker/shopping-lists-rest-api | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Run the following commands to generate the transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_shopping_list.uuid | column | added | +| spy_shopping_list_item.uuid | column | added | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestShoppingListsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListsAttributesTransfer | +| RestShoppingListRequestAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListRequestAttributesTransfer | +| ShoppingListItemRequestTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListItemRequestTransfer | +| RestShoppingListItemsAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer | +| ShoppingListTransfer.uuid | property | added | src/Generated/Shared/Transfer/ShoppingListTransfer | +| ShoppingListItemTransfer.uuid | property | added | src/Generated/Shared/Transfer/ShoppingListItemTransfer | + +{% endinfo_block %} + + + +## 3) Set up behavior + +Set up the following behavior. + + +### Generate UUIDs for existing records that do not have IDs + +Run the following commands: + +```bash +console uuid:generate ShoppingList spy_shopping_list +console uuid:generate ShoppingList spy_shopping_list_item +``` + +{% info_block warningBox "Verification" %} + +Make sure that the uuid field is populated for all records in the spy_shopping_list table. To do so, run the following SQL query and make sure that the result is **0 records** : + +```php +SELECT COUNT(*) FROM spy_shopping_list WHERE uuid IS NULL; +``` + +Make sure that the uuid field is populated for all records in the spy_shopping_list_item table. To do so, run the following SQL query and make sure that the result is **0 records**. + +```php +SELECT COUNT(*) FROM spy_shopping_list_item WHERE uuid IS NULL; +``` + +{% endinfo_block %} + +### Enable resources + +{% info_block infoBox %} + +`ShoppingListsResourcePlugin` GET, POST, PATCH and DELETE, `ShoppingListItemsResourcePlugin` POST, PATCH and DELETE verbs are protected resources. For details, refer to the Configure section of [Glue Infrastructure documentation](/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.html). + +{% endinfo_block %} + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ShoppingListsResourcePlugin | Registers the shopping-lists resource. | None | Spryker\Glue\ShoppingListsRestApi\Plugin | +| ShoppingListItemsResourcePlugin | Registers the shopping-list-items resource. | None | Spryker\Glue\ShoppingListsRestApi\Plugin | +| ShoppingListItemByShoppingListResourceRelationshipPlugin | Adds the shopping-list-items resource as a relationship to shopping-lists. | None | Spryker\Glue\ShoppingListsRestApi\Plugin\GlueApplication | +| ConcreteProductBySkuResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `shopping-list-items` resource. | None | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new ConcreteProductBySkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LISTS, + new ShoppingListItemByShoppingListResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +To verify that the `ShoppingListsResourcePlugin` resource route plugin and the `ShoppingListItemByShoppingListResourceRelationshipPlugin`, `ConcreteProductBySkuResourceRelationshipPlugin` relationship plugins are set up correctly, make sure that following endpoint and relationships are available: + +- `https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}?include=shopping-list-items,concrete-products` + +Check the response: +
    +GET https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}?include=shopping-list-items,concrete-products + +```json +{ + "data": [ + { + "type": "shopping-lists", + "id": "adb17f85-953f-565a-a4ce-e5cb02405f83", + "attributes": { + "owner": "Sonia Wagner", + "name": "Workstations", + "numberOfItems": 1, + "updatedAt": "2020-03-16 13:07:38.286054", + "createdAt": "2020-03-16 13:07:38.286054" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/adb17f85-953f-565a-a4ce-e5cb02405f83?include=shopping-list-items,concrete-products" + }, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "0615fe0d-fdbe-576b-a220-3398b9965d73" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists?include=shopping-list-items,concrete-products" + }, + "included": [ + { + "type": "concrete-products", + "id": "115_27295368", + "attributes": { + "sku": "115_27295368", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "DELL OptiPlex 3020", + "description": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and easy serviceability. Stop advanced threats and zero-day attacks with Dell Data Protection | Protected Workspace — a proactive, real-time solution for malware protection. Ensure authorized access through multifactor, single sign-on (SSO) and preboot authentication with Dell Data Protection | Security Tools. Streamline administration with integration into Dell KACE appliances, Microsoft System Center and industry-standard tools. Deploy with flexibility through multiple chassis options. Select the small form factor chassis, optimized for constrained workspaces, or the expandable mini tower with support for up to four PCIe cards.", + "attributes": { + "processor_cache": "3 MB", + "bus_type": "DMI", + "processor_threads": "2", + "tcase": "72 °", + "brand": "DELL", + "processor_frequency": "3.2 GHz" + }, + "superAttributesDefinition": [ + "processor_cache", + "processor_frequency" + ], + "metaTitle": "DELL OptiPlex 3020", + "metaKeywords": "DELL,Tax Exempt", + "metaDescription": "Great performance. Outstanding value Get the job done with business-ready desktops offering superb value with strong performance, exceptional security and ", + "attributeNames": { + "processor_cache": "Processor cache type", + "bus_type": "Bus type", + "processor_threads": "Processor Threads", + "tcase": "Tcase", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/115_27295368" + } + }, + { + "type": "shopping-list-items", + "id": "0615fe0d-fdbe-576b-a220-3398b9965d73", + "attributes": { + "quantity": 1, + "sku": "115_27295368" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/adb17f85-953f-565a-a4ce-e5cb02405f83/shopping-list-items/0615fe0d-fdbe-576b-a220-3398b9965d73" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "115_27295368" + } + ] + } + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +To verify that the `ShoppingListItemsResourcePlugin` is set up correctly, make sure that the following endpoint is available: + +- `https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}/shopping-list-items` + +Post a request with the following body: + +**Body request** + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "sku": "218_1234", + "quantity": 1 + } + } +} +``` + +Check the response: + +`POST https://glue.mysprykershop.com/shopping-lists/{% raw %}{{{% endraw %}shopping_list_uuid{% raw %}}}{% endraw %}/shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 1, + "sku": "218_1234" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/d8c5539b-774e-509b-87a9-58cead6a1486/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + } + } +} +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-spryker-core-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-spryker-core-glue-api.md new file mode 100644 index 00000000000..efdcca2bc68 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-spryker-core-glue-api.md @@ -0,0 +1,566 @@ + + +This document describes how to install the Spryker Core Glue API. + +## Prerequisites + +Install the required features: + +| NAME | TYPE | VERSION | +| --- | --- | --- | +| Spryker Core | Feature | {{page.release_tag}} | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/glue-application:"^1.0.0" spryker/entity-tags-rest-api:"^1.0.0" spryker/stores-rest-api:"^1.0.0" spryker/urls-rest-api:"^1.0.0" spryker/security-blocker-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| GlueApplication | vendor/spryker/glue-application | +| EntityTagsRestApi | vendor/spryker/entity-tag-rest-api | +| StoresRestApi | vendor/spryker/stores-rest-api | +| UrlsRestApi | vendor/spryker/urls-rest-api | +| SecurityBlockerRestApi | vendor/spryker/security-blocker-rest-api | + +{% endinfo_block %} + +## 2) Set up configuration + +Set up the configuration in the following sections. + +### Configure CORS + +Based on the following examples, add `cors-allow-origin` to the needed deploy file: + +```yml +glue_eu: + application: glue + endpoints: + glue.de.mysprykershop.com: + store: DE + cors-allow-origin: 'http://cors-allow-origin1.domain' + cors-allow-headers: "accept,content-type,content-language,accept-language,authorization,User-Agent,newrelic,traceparent,tracestate" + glue.at.mysprykershop.com: + store: AT + cors-allow-origin: 'http://cors-allow-origin2.domain' + cors-allow-headers: "accept,content-type,content-language,accept-language,authorization,If-Match,Cache-Control,If-Modified-Since,User-Agent,newrelic,traceparent,tracestate,X-Device-Id" +``` + +- CORS is disabled. Example: + +```yml +glue_eu: + application: glue + endpoints: + glue.de.mysprykershop.com: + store: DE + glue.at.mysprykershop.com: + store: AT +``` + +- `*`: allow CORS requests from any domain. Example: + +```yml +glue_eu: + application: glue + endpoints: + glue.de.mysprykershop.com: + store: DE + cors-allow-origin: '*' + glue.at.mysprykershop.com: + store: AT + cors-allow-origin: '*' +``` + +- Allow CORS requests only from a specific origin. Example: + +```yml +glue_eu: + application: glue + endpoints: + glue.de.mysprykershop.com: + store: DE + cors-allow-origin: 'http://www.example1.com' + glue.at.mysprykershop.com: + store: AT + cors-allow-origin: 'http://www.example1.com' +``` + +{% info_block warningBox "Verification" %} + +To make sure that the CORS headers are set up correctly, follow the steps: + +1. In the deploy file, define a specific origin to accept requests from. In our example, it's `http://www.example1.com` + + +2. Send the OPTIONS request to any valid Glue API resource with the `Origin` header: + +```bash +curl -X OPTIONS -H "Origin: http://www.example1.com" -i http://glue.mysprykershop.com +``` + +3. Using the following example, verify the headers: + +- The `access-control-allow-origin` header is present and is the same as set in the deploy file. +- The `access-control-allow-methods` header is present and contains all available methods. + + +```bash +Content-Type: text/plain; charset=utf-8 +Content-Length: 0 +Connection: keep-alive +Access-Control-Http-Origin: http://www.example1.com +Access-Control-Allow-Origin: http://www.example1.com +Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS +Access-Control-Allow-Headers: accept,content-type,content-language,accept-language,authorization,X-Anonymous-Customer-Unique-Id,Merchant-Reference,If-Match,Cache-Control,If-Modified-Since,User-Agent,newrelic,traceparent,tracestate +Access-Control-Allow-Credentials: true +Access-Control-Expose-Headers: ETag +``` + +{% endinfo_block %} + +### Configure relationships + +Set the value of `GlueApplicationConfig::isEagerRelationshipsLoadingEnabled()` according to your requirements: + +|VALUE | DESCRIPTION | +|-|-| +| false | If the `include` query parameter is not passed, no resource relationships are returned. If particular relationships are requested thorough the `include` parameter, only those relationships are returned. For example: `/abstract-products?include=abstract-product-prices` | +| true | If the `include` query parameter is not passed, all resource relationships are returned. If an empty include query parameter is passed, no relationships are returned: `/abstract-products?include=`. If particular relationships are requested thorough the `include` parameter, only those relationships are returned. | + + +## 3) Set up transfer objects + +Generate transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| RestPageOffsetsTransfer | class | created | src/Generated/Shared/Transfer/RestPageOffsetsTransfer.php | +| RestErrorMessageTransfer | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer.php | +| RestErrorCollectionTransfer | class | created | src/Generated/Shared/Transfer/RestErrorCollectionTransfer.php | +| RestVersionTransfer | class | created | src/Generated/Shared/Transfer/RestVersionTransfer.php | +| RestUserTransfer | class | created | src/Generated/Shared/Transfer/RestUserTransfer.php | +| StoresRestAttributesTransfer | class | created | src/Generated/Shared/Transfer/StoresRestAttributesTransfer.php | +| StoreCountryRestAttributesTransfer| class | created | src/Generated/Shared/Transfer/StoreCountryRestAttributesTransfer.php | +| StoreRegionRestAttributesTransfer | class | created | src/Generated/Shared/Transfer/StoreRegionRestAttributesTransfer.php | +| StoreLocaleRestAttributesTransfer | class | created | src/Generated/Shared/Transfer/StoreLocaleRestAttributesTransfer.php | +| StoreCurrencyRestAttributesTransfer | class | created | src/Generated/Shared/Transfer/StoreCurrencyRestAttributesTransfer.php | +| RestUrlResolverAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestUrlResolverAttributesTransfer.php | +| SecurityCheckAuthContextTransfer | class | created | src/Generated/Shared/Transfer/SecurityCheckAuthContextTransfer.php | +| SecurityCheckAuthResponseTransfer | class | created | src/Generated/Shared/Transfer/SecurityCheckAuthResponseTransfer.php | +| RestAccessTokensAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestAccessTokensAttributesTransfer.php | +| RestAgentAccessTokensRequestAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestAgentAccessTokensRequestAttributesTransfer.php | + +{% endinfo_block %} + +## 4) Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| GlueApplicationApplicationPlugin | Registers the resource builder service and configures the debug mode in Glue Application. | | Spryker\Glue\GlueApplication\Plugin\Application | +| HttpApplicationPlugin | Sets trusted proxies and host. Adds `HttpKernel`, `RequestStack`, and `RequestContext` to the container. | | Spryker\Glue\Http\Plugin\Application | +| EventDispatcherApplicationPlugin | Extends `EventDispatcher` with plugins. | | Spryker\Glue\EventDispatcher\Plugin\Application | +| SessionApplicationPlugin | Registers the session in Glue Application. | | Spryker\Glue\Session\Plugin\Application | +| GlueRestControllerListenerEventDispatcherPlugin | Registers the `onKernelController` event listeners in Glue Application. | | Spryker\Glue\GlueApplication\Plugin\Rest | +| RouterApplicationPlugin | Registers the URL matcher and router services in Glue Application. | | Spryker\Glue\Router\Plugin\Application | +| SetStoreCurrentLocaleBeforeActionPlugin | Sets a locale for the whole current store. | | Spryker\Glue\GlueApplication\Plugin\Rest\ | +| EntityTagFormatResponseHeadersPlugin | Adds the `ETag` header to response if applicable. | | Spryker\Glue\EntityTagsRestApi\Plugin\GlueApplication\ | +| EntityTagRestRequestValidatorPlugin | Verifies that the `If-Match` header is equal to the entity tag. | | Spryker\Glue\EntityTagsRestApi\Plugin\GlueApplication\ | +| StoresResourceRoutePlugin | Registers the `stores` resource. | | Spryker\Glue\StoresRestApi\Plugin | +| UrlResolverResourceRoutePlugin | Registers the `url-resolver` resource. | | Spryker\Glue\UrlsRestApi\Plugin\GlueApplication\ | +| ProductAbstractRestUrlResolverAttributesTransferProviderPlugin | Provides the `abstract-products` resource from the `UrlStorageTransfer` object. | | Spryker\Glue\ProductsRestApi\Plugin\UrlsRestApi\ | +| CategoryNodeRestUrlResolverAttributesTransferProviderPlugin | Provides the `category-nodes` resource from the `UrlStorageTransfer` object. | | Spryker\Glue\CategoriesRestApi\Plugin\UrlsRestApi\ | +| SecurityBlockerCustomerRestRequestValidatorPlugin | Stops the customer accounts that are blocked by SecurityBlocker from being able to make access-tokens requests. | | Spryker\Glue\SecurityBlockerRestApi\Plugin\GlueApplication | +| SecurityBlockerAgentRestRequestValidatorPlugin | Stops the agent accounts that are blocked by SecurityBlocker from being able to make agent-access-tokens requests. | | Spryker\Glue\SecurityBlockerRestApi\Plugin\GlueApplication | +| SecurityBlockerCustomerControllerAfterActionPlugin | Counts failed customer login attempts. | | Spryker\Glue\SecurityBlockerRestApi\Plugin\GlueApplication | +| SecurityBlockerAgentControllerAfterActionPlugin | Counts failed agent login attempts. | | Spryker\Glue\SecurityBlockerRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +initialize(); + +$bootstrap = new GlueBootstrap(); +$bootstrap + ->boot() + ->run(); +``` + +3. Create the Nginx VHOST configuration: + +**/etc/nginx/sites-enabled/DE_development_glue** + +```php +server { + # Listener for production/staging - requires external LoadBalancer directing traffic to this port + listen 10001; + + # Listener for testing/development - one host only, doesn't require external LoadBalancer + listen 80; + + server_name ~^glue\\..+\\.com$; + + keepalive_timeout 0; + access_log /data/logs/development/glue-access.log extended; + + # entry point for Glue Application + root /data/shop/development/current/public/Glue; + + set $application_env development; + # Binding store + set $application_store DE; + include "spryker/zed.conf"; +} +``` + +4. Update the hosts configuration. Replace `{IP}` with your server's IP address: + +**/etc/hosts** + +```bash +{IP} glue.mysprykershop.com +``` + +{% info_block warningBox "Verification" %} + +Make sure you can access `https://glue.mysprykershop.com` and get the following JSON response: + +**Default JSON Response** + +```json +{ + "errors": [ + { + "status": 404, + "detail": "Not Found" + } + ] +} +``` + +{% endinfo_block %} + + +
    \Pyz\Glue\GlueApplication\GlueApplicationDependencyProvider.php + +```php + + +**\Pyz\Glue\UrlsRestApi\UrlsRestApiDependencyProvider.php** + +```php +
    + +Make sure that the following module has been installed: + +| Module | Expected Directory | +| --- | --- | +| `ProductTaxSetsRestApi` | `vendor/spryker/product-tax-sets-rest-api` | + +
    + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +
    +Make sure that the following changes have been applied by checking your database. + +| Database Entity | Type | Event | +| --- | --- | --- | +| `spy_tax_set.uuid` | column | added | + +
    + +
    +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +| --- | --- | --- | --- | +| `RestProductTaxRateTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxRateTransfer` | +| `RestProductTaxSetsAttributesTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `RestProductTaxSetsAttributesTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `RestProductTaxRateTransfer` | class | created | `src/Generated/Shared/Transfer/RestProductTaxSetsAttributesTransfer` | +| `TaxSetTransfer.uuid` | property | added | `src/Generated/Shared/Transfer/TaxSetTransfer` | + +
    + +### 3) Set up Behavior + +#### Generate UUIDs for existing records + +Generates new UUIDs for existing entries in the `spy_tax_set` table: + +```bash +console uuid:generate Tax spy_tax_set +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `uuid` field is populated for all records in the `spy_tax_set` table. You can run the following SQL query for it and make sure that the result is 0 records.
    `SELECT COUNT(* +{% endinfo_block %} FROM spy_tax_set WHERE uuid IS NULL;`) + +#### Enable resource and relationship + +Activate the following plugin: + +| Plugin | Specification | Prerequisites | Namespace | +| --- | --- | --- | --- | +| `ProductTaxSetsResourceRoutePlugin` | Registers the `product-tax` resource. | None | `Spryker\Glue\ProductTaxSetsRestApi\Plugin\GlueApplication` | +| `ProductTaxSetByProductAbstractSkuResourceRelationshipPlugin` | Adds the `product-tax-sets` resource as a relationship to the `abstract-product` resource. | None | `Spryker\Glue\ProductTaxSetsRestApi\Plugin\GlueApplication` | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductTaxSetByProductAbstractSkuResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    +
    + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoint is available:
    `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-tax-sets`
    Send a request to `http://mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=product-tax-sets`. Make sure that the response includes relationships to the `product-tax-sets` resources. +{% endinfo_block %} + +**See also:** + +- [Tax Management](/docs/pbc/all/tax-management/latest/base-shop/tax-feature-overview.html) + + +*Last review date: Mar 21, 2019* + + diff --git a/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-wishlist-glue-api.md b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-wishlist-glue-api.md new file mode 100644 index 00000000000..e6edc372f41 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-glue-api/install-the-wishlist-glue-api.md @@ -0,0 +1,153 @@ + + +Follow the steps below to install Wishlist feature API. + +### Prerequisites + +Install the required features: + +|NAME|VERSION|INTEGRATION GUIDE| +|---|---|---| +| Spryker Core| {{page.release_tag}} |[Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html)| +|Product| {{page.release_tag}} |[Install the Product Glue API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html)| +|Wishlist| {{page.release_tag}} | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/wishlists-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +|MODULE|EXPECTED DIRECTORY| +|---|---| +|WishlistsRestApi|vendor/spryker/wishlists-rest-apiWishlistItems| + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +Run the following commands to apply database changes, and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in the database: + +|DATABASE ENTITY|TYPE|EVENT| +|---|---|---| +|spy_wishlist.uuid|column|added| + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have occurred in transfer objects: + +|TRANSFER|TYPE|EVENT|PATH| +|---|---|---|---| +|RestWishlistItemsAttributesTransfer|class|created|src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer| +|RestWishlistsAttributesTransfer|class|created|src/Generated/Shared/Transfer/RestWishlistsAttributesTransfer| +|WishlistTransfer.uuid|property|added|src/Generated/Shared/Transfer/WishlistTransfer| + +{% endinfo_block %} + +### 3) Set up behavior + +#### Migrate data in the database + +{% info_block infoBox %} + +The following steps generate UUIDs for existing entities in the `spy_wishlist` table. + +{% endinfo_block %} + +Assign UUIDs to existing records in the `spy_wishlist` table and stores them in the corresponding `uuid` column: + +```bash +console uuid:update Wishlist spy_wishlist +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `uuid` field is populated for all records in the `spy_wishlist` table. +For this purpose, run the following SQL query and make sure that the result is 0 records: +`SELECT COUNT(*) FROM spy_wishlist WHERE uuid IS NULL;` + +{% endinfo_block %} + + +#### Enable resources and relationships + +Activate the following plugins: + +|PLUGIN|SPECIFICATION|PREREQUISITES|NAMESPACE| +|---|---|---|---| +|WishlistsResourceRoutePlugin|Registers the `wishlists` resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +|WishlistItemsResourceRoutePlugin|Registers the `wishlist-items` resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +|WishlistRelationshipByResourceIdPlugin|Adds the `wishlists` resource as a relationship to the customers resource.|None|Spryker\Glue\WishlistsRestApi\Plugin| +| ConcreteProductBySkuResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `wishlist-items` resource. | None | Spryker\Glue\ProductsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + CustomersRestApiConfig::RESOURCE_CUSTOMERS, + new WishlistRelationshipByResourceIdPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: +`http:///glue.mysprykershop.com/wishlists` +`http:///glue.mysprykershop.com/wishlists/{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}/wishlists-items` +Send a request to `https://glue.mysprykershop.com/customers/{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}?include=wishlists` and make sure that the given customer has at least one wishlist. Make sure that the response includes relationships to the `wishlists` resources. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-microsoft-azure-active-directory.md b/_includes/pbc/all/install-features/202602.0/install-microsoft-azure-active-directory.md new file mode 100644 index 00000000000..349f7c02feb --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-microsoft-azure-active-directory.md @@ -0,0 +1,158 @@ + + +This page describes the Microsoft Azure Active Directory and how to install it. + +Azure Active Directory is Microsoft's multi-tenant, cloud-based directory and identity management service. For an organization, Azure AD helps employees sign up to multiple services and access them anywhere over the cloud with a single set of login credentials. + +The [`SprykerEco.Oauth-Azure`](https://github.com/spryker-eco/oauth-azure) enables OAuth 2.0 authentication via Microsoft Azure Active Directory. + +Follow the steps below to integrate Azure Active Directory. + +## Prerequisites + +To start the feature integration: + +1. Overview and install the necessary features: + + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + + +2. [Register an application with the Microsoft identity platform](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app). + +## 1) Install the required modules + +Install the required modules: + +```bash +composer require spryker-eco/oauth-azure:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| OauthAzure | /vendor/spryker-eco/oauth-azure | + +{% endinfo_block %} + +## 2) Set up the configuration + +Using the data from your Microsoft Azure Active Directory account, configure OAuth Azure credentials: + +**config/Shared/config_default.php** + +```php +$config[KernelConstants::DOMAIN_WHITELIST][] = 'https://login.microsoftonline.com/'; + +// Oauth Azure +$config[OauthAzureConstants::CLIENT_ID] = 'YOUR CLIENT ID'; +$config[OauthAzureConstants::CLIENT_SECRET] = 'YOUR CLIENT SECRET'; +$config[OauthAzureConstants::REDIRECT_URI] = sprintf( + 'https://%s/security-oauth-user/login', + getenv('SPRYKER_BE_HOST') +); +$config[OauthAzureConstants::PATH_AUTHORIZE] = '/oauth2/v2.0/authorize'; +$config[OauthAzureConstants::PATH_TOKEN] = '/oauth2/v2.0/token'; +``` + +## 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| OauthAuthenticationLinkTransfer | class | created | src/Generated/Shared/Transfer/OauthAuthenticationLinkTransfer | +|ResourceOwnerTransfer| class| created| src/Generated/Shared/Transfer/ResourceOwner| +| ResourceOwnerRequestTransfer |class| created| src/Generated/Shared/Transfer/ResourceOwnerRequestTransfer| +| ResourceOwnerResponseTransfer |class| created| src/Generated/Shared/Transfer/ResourceOwnerResponseTransfer| + +{% endinfo_block %} + +## 4) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AzureOauthUserClientStrategyPlugin| Requests a resource owner using a specified option set. |None |SprykerEco\Zed\OauthAzure\Communication\Plugin\SecurityOauthUser| +| AzureAuthenticationLinkPlugin| Prepares an OAuth Azure authentication link. |None| SprykerEco\Zed\OauthAzure\Communication\Plugin\SecurityGui| + +**src/Pyz/Zed/SecurityGui/SecurityGuiDependencyProvider.php** + +```php +> Discount** and select **Create new discount**. +2. On the **Create new discount** page, in the **Discount calculation** tab, for **DISCOUNT APPLICATION TYPE**, select **PROMOTIONAL PRODUCT**. +3. Ensure that the **ABSTRACT PRODUCT SKU(S)** field appears and add to it a comma-separated list of abstract product SKUs. + +{% endinfo_block %} + +## 3) Add translations + +Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```yaml +cart.title.available_discounts,Verfügbare Rabatte,de_DE +cart.title.available_discounts,Available discounts,en_US +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Ensure that in the database the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +## 4) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +Ensure that all labels and help tooltips in the **Discount** form has English and German translation: + +1. In the Back Office, go to **Merchandising > Discount**. +2. **Create new discount** or **Edit** an existing one. +3. Check labels and help tooltips on the **Create new discount** or **Edit discount** page. + +{% endinfo_block %} + +## 5) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|----------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------------------------------| +| DiscountPromotionAddToCartFormWidgetParameterExpanderPlugin | Adds discount promotion form name postfix to the Add To Cart form. | None | SprykerShop\Yves\DiscountPromotionWidget\Plugin\CartPage\DiscountPromotionAddToCartFormWidgetParameterExpanderPlugin | + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getAddToCartFormWidgetParameterExpanderPlugins(): array + { + return [ + new DiscountPromotionAddToCartFormWidgetParameterExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that the plugin works correctly: + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html). +2. On the **Discount calculation** tab, for **DISCOUNT APPLICATION TYPE**, select **PROMOTIONAL PRODUCT**. +3. Add **ABSTRACT PRODUCT SKU**. +4. Create another discount with one or more identic promotional products. +5. To fulfill the discounts' requirements, add items to the cart. +6. Ensure that both discounts are displayed in the **Promotional Product** section on the **Cart** page. + +{% endinfo_block %} + +## 6) Build Zed UI frontend + +Enable Javascript and CSS changes: + +```bash +console frontend:zed:install-dependencies +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Ensure that you can create a discount with multiple promotional products: +1. In the Back Office, go to **Merchandising > Discount**. +2. Click **Create new discount** or **Edit** next to the existing discount. +3. Check that you can see the **Discount** form on the **Create new discount** or **Edit discount** page. +4. On the **Discount calculation** tab, for **DISCOUNT APPLICATION TYPE**, select **PROMOTIONAL PRODUCT**. +5. Ensure that the **ABSTRACT PRODUCT SKU(S)** field is displayed and that it accepts a comma-separated list. +6. Enter several abstract product SKUs and save the discount. +7. To fulfill the discount's requirements, add items to the cart. +8. Ensure that on the cart page, the **Promotional Product** section displays a carousel containing all products in the discount. +9. Ensure that you can add a product from the **Promotional Product** section to the cart and that the discount is applied. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-self-service-portal.md b/_includes/pbc/all/install-features/202602.0/install-self-service-portal.md new file mode 100644 index 00000000000..990383e5f68 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-self-service-portal.md @@ -0,0 +1,114 @@ + + + + + + + + + +This document describes how to install Self-Service Portal (SSP). + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|----------------------------------| ------- | ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +## Set up the configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------| +| KernelConstants::CORE_NAMESPACES | Adds the SprykerFeature namespace to the Core namespaces. | Spryker\Shared\Kernel\KernelConstants | + +**config/Shared/config_default.php** + +```php + +use Spryker\Shared\Kernel\KernelConstants; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ..., + 'SprykerFeature', +]; + +``` + +## Install feature frontend + +The entire project is now an *npm workspace*, meaning each submodule declares its dependencies. During the installation stage, npm installs all of those dependencies and stores them into the root of the project. + +### Prerequisites + +- [Node.js](https://nodejs.org/en/download/package-manager) 18 or higher +- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) 9 or higher + + +### Install dependencies and build Yves and Zed applications + +1. In `package.json`, add `spryker-feature` to the `workspaces` section: + +```json +{ + "workspaces": [ + "vendor/spryker-feature/*", + "vendor/spryker-feature/*/assets/Zed" + ], + "devDependencies": { + "@spryker/oryx-for-zed": "~3.4.5", + } +} +``` + +2. Adjust `frontend/settings.js` to resolve typescript files in the `vendor/spryker-features` directory: + +```javascript +const globalSettings = { + paths: { + + features: './vendor/spryker-feature', + } +} + +const getAppSettingsByTheme = (namespaceConfig, theme, pathToConfig) => { + const paths = { + + features: globalSettings.paths.features, + }; + + return { + find: { + componentEntryPoints: { + dirs: [ + join(globalSettings.context, paths.features), + ], + }, + componentStyles: { + dirs: [join(globalSettings.context, paths.features)], + }, + }, + }; +} +``` + +3. Build the project: + +```bash +vendor/bin/console frontend:project:install-dependencies +vendor/bin/console frontend:yves:build +vendor/bin/console frontend:zed:build +``` + +## Install the features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| Self-Service Portal (SSP) Asset Management | | [Self-Service Portal (SSP) Asset Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature) | +| Self-Service Portal (SSP) Dashboard Management | | [Self-Service Portal (SSP) Dashboard Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature) | +| Self-Service Portal (SSP) File Management | | [Self-Service Portal (SSP) File Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature) | +| Self-Service Portal (SSP) Inquiry Management | | [Self-Service Portal (SSP) Inquiry Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature) | +| Self-Service Portal (SSP) SSP Service Management | | [Self-Service Portal (SSP) SSP Inquiry Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature) | +| Self-Service Portal (SSP) SSP Model Management | | [Self-Service Portal (SSP) SSP Model Management](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-acl-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-acl-feature.md new file mode 100644 index 00000000000..eeb94fe51d2 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-acl-feature.md @@ -0,0 +1,459 @@ +This document describes how to install the ACL feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/acl:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | REQUIRED | EXPECTED DIRECTORY | +|-------------------|-------------|---------------------------------------| +| Acl | v | vendor/spryker/acl | +| AclDataImport | v | vendor/spryker/acl-data-import | +| AclEntity | v | vendor/spryker/acl-entity | +| AclEntityDataImport | v | vendor/spryker/acl-entity-data-import | +| AclEntityExtension | | vendor/spryker/acl-entity-extension | +| AclExtension | v | vendor/spryker/acl-extension | + +{% endinfo_block %} + +## 2) Set up the database schema + +Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied to the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------|-------|---------| +| spy_acl_role | table | created | +| spy_acl_rule | table | created | +| spy_acl_group | table | created | +| spy_acl_user_has_group | table | created | +| spy_acl_groups_has_roles | table | created | +| spy_acl_entity_segment | table | created | +| spy_acl_entity_rule | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------|--------|---------|-------------------------------------------------------------------------| +| Group | object | Created | src/Generated/Shared/Transfer/GroupTransfer | +| AclEntityRule | object | Created | src/Generated/Shared/Transfer/AclEntityRuleTransfer | +| AclEntitySegment | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentTransfer | +| AclEntitySegmentRequest | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentRequestTransfer | +| AclEntityRuleRequest | object | Created | src/Generated/Shared/Transfer/AclEntityRuleRequestTransfer | +| AclEntityRuleCollection | object | Created | src/Generated/Shared/Transfer/AclEntityRuleCollectionTransfer | +| AclEntitySegmentResponse | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentResponseTransfer | +| AclEntitySegmentCriteria | object | Created | src/Generated/Shared/Transfer/AclEntitySegmentCriteriaTransfer | +| AclEntityRuleCriteria | object | Created | src/Generated/Shared/Transfer/AclEntityRuleCriteriaTransfer | +| AclEntityRuleResponse | object | Created | src/Generated/Shared/Transfer/AclEntityRuleResponseTransfer | +| AclEntityMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataTransfer | +| AclEntityParentMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityParentMetadataTransfer | +| AclEntityParentConnectionMetadata | object | Created | src/Generated/Shared/Transfer/AclEntityParentConnectionMetadataTransfer | +| AclEntityMetadataCollection | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataCollectionTransfer | +| AclEntityMetadataConfig | object | Created | src/Generated/Shared/Transfer/AclEntityMetadataConfigTransfer | +| AclRoleCriteria | object | Created | src/Generated/Shared/Transfer/AclRoleCriteriaTransfer | +| GroupCriteria | object | Created | src/Generated/Shared/Transfer/GroupCriteriaTransfer | +| Groups | object | Created | src/Generated/Shared/Transfer/GroupsTransfer | +| Role | object | Created | src/Generated/Shared/Transfer/RoleTransfer | +| Roles | object | Created | src/Generated/Shared/Transfer/RolesTransfer | +| Rule | object | Created | src/Generated/Shared/Transfer/RuleTransfer | +| Rules | object | Created | src/Generated/Shared/Transfer/Transfer | +| User | object | Created | src/Generated/Shared/Transfer/UserTransfer | +| NavigationItem | object | Created | src/Generated/Shared/Transfer/NavigationItemTransfer | +| NavigationItemCollection | object | Created | src/Generated/Shared/Transfer/NavigationItemCollection | +| AclUserHasGroupCollection | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupCollection | +| AclUserHasGroup | object | Created | src/Generated/Shared/Transfer/AclUserHasGroup | +| AclUserHasGroupCriteria | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupCriteria | +| AclUserHasGroupConditions | object | Created | src/Generated/Shared/Transfer/AclUserHasGroupConditions | + +{% endinfo_block %} + +## 4) Import the ACL groups and roles + +1. Prepare your data according to your requirements using our demo data: + +**data/import/common/common/acl_group.csv** + +```csv +name,reference +root_group,root_group +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|--------------|----------------------------------------------------------------------| +| name | ✓ | string | root_group | The name of the ACL group. | +| reference | x | string | root_group | Key of the ACL group that is used as a reference in the data import. | + +**data/import/common/common/acl_role.csv** + +```csv +name,reference +root_role,root_role +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|--------------|---------------------------------------------------------------------| +| name | ✓ | string | root_role | The name of the ACL role. | +| reference | x | string | root_role | Key of the ACL role that is used as a reference in the data import. | + +**data/import/common/common/acl_group_role.csv** + +```csv +group_name,role_name +root_group,root_role +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------|----------|-----------|--------------|----------------------------| +| group_name | ✓ | string | root_group | The name of the ACL group. | +| role_name | ✓ | string | root_role | The name of the ACL role. | + +2. Extend the data import configuration: + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# Acl import +- data_entity: acl-role + source: data/import/common/common/acl_role.csv +- data_entity: acl-group + source: data/import/common/common/acl_group.csv +- data_entity: acl-group-role + source: data/import/common/common/acl_group_role.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------|--------------------------------------------------------------------------------|---------------|-------------------------------------------------| +| AclGroupDataImportPlugin | Imports ACL group data from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | +| AclRoleDataImportPlugin | Imports ACL role data from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | +| AclGroupRoleDataImportPlugin | Imports the connections between ACL roles and ACL groups from the specified file. | | \Spryker\Zed\AclDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new AclGroupDataImportPlugin(), + new AclRoleDataImportPlugin(), + new AclGroupRoleDataImportPlugin(), + ]; + } +} +``` + +4. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_ROLE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP_ROLE), + new AclEntitySynchronizeConsole(), + ]; + + return $commands; + } +} +``` + +4. Import the data: + +```bash +console data:import:data:import:acl-role +console data:import:data:import:acl-group +console data:import:data:import:acl-group-role +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: +- `spy_acl_group` +- `spy_acl_role` +- `spy_acl_groups_has_roles` + +{% endinfo_block %} + +5. Synchronize the ACL entities for the merchants and their users: + +```bash +console acl:entity:synchronize +``` + +{% info_block warningBox "Verification" %} + +Make sure the synchronized data has been added to the following database tables: +- `spy_acl_entity_rule` +- `spy_acl_entity_segment` +- `spy_acl_entity_segment_merchant` +- `spy_acl_entity_segment_merchant_user` +- `spy_acl_group` +- `spy_acl_groups_has_roles` +- `spy_acl_role` +- `spy_acl_rule` + +With a multi-merchant environment, make sure the ACL entities are synchronized for each merchant. +If the ACL entities have already been synchronized, the synchronization process doesn't create duplicate entries. + +{% endinfo_block %} + +## 5) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| AccessControlEventDispatcherPlugin | Adds a listener to `\Symfony\Component\HttpKernel\KernelEvents::REQUEST`, which checks if the user is allowed to access the current resource. | | Spryker\Zed\Acl\Communication\Plugin\EventDispatcher | +| AclNavigationItemCollectionFilterPlugin | Checks if the navigation item can be accessed by the current user. | | Spryker\Zed\Acl\Communication\Plugin\Navigation | +| AclInstallerPlugin | Fills the database with required ACL data. | | Spryker\Zed\Acl\Communication\Plugin | +| GroupPlugin | Provides ACL groups for user. | | Spryker\Zed\Acl\Communication\Plugin | +| AclEntityAclRolePostSavePlugin | Saves `RoleTransfer.aclEntityRules` to the database. | | Spryker\Zed\AclEntity\Communication\Plugin\Acl | +| AclRulesAclRolesExpanderPlugin | Expands the `Roles` transfer object with ACL rules. | | Spryker\Zed\AclEntity\Communication\Plugin\Acl | +| AclEntityApplicationPlugin | Enables ACL for the whole Application. | | Spryker\Zed\AclEntity\Communication\Plugin\Application | + +**src/Pyz/Zed/EventDispatcher/EventDispatcherDependencyProvider.php** + +```php + + */ + protected function getEventDispatcherPlugins(): array + { + return [ + new AccessControlEventDispatcherPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ZedNavigation/ZedNavigationDependencyProvider.php** + +```php + + */ + protected function getNavigationItemCollectionFilterPlugins(): array + { + return [ + new AclNavigationItemCollectionFilterPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins() + { + return [ + new AclInstallerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php +set(static::PLUGIN_GROUP, function (Container $container) { + return new GroupPlugin(); + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/Acl/AclDependencyProvider.php** + +```php + + */ + protected function getAclRolesExpanderPlugins(): array + { + return [ + new AclRulesAclRolesExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\AclExtension\Dependency\Plugin\AclRolePostSavePluginInterface> + */ + protected function getAclRolePostSavePlugins(): array + { + return [ + new AclEntityAclRolePostSavePlugin(), + ]; + } +} +``` + +2. To enable the ACL Entity feature for `MerchantPortalApplication`, register the `AclEntityApplicationPlugin` plugin. The ACL Entity feature lets you manage access to the entities of different merchants separately. + +**src/Pyz/Zed/MerchantPortalApplication/MerchantPortalApplicationDependencyProvider.php** + +```php + + */ + protected function getMerchantPortalApplicationPlugins(): array + { + return [ + new AclEntityApplicationPlugin(), + ]; + } +} +``` + +## 6) Install the database data for ACL + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure the following works correctly: + +- The request to access the Merchant Portal doesn't succeed for users without permissions. +- A marketplace user can see only the allowed Merchant Portal menu links. +- `spy_acl_role`, `spy_acl_group`, and `spy_acl_user_has_group` tables contain default data. +- You can edit a user's ACL groups when [editing users in the Back Office](/docs/pbc/all/user-management/latest/base-shop/manage-in-the-back-office/manage-users/edit-users.html). +- When a `RoleTransfer` is saved and contains `AclEntityRules`, `AclEntityRule` is created in `spy_acl_entity_rule`. +- `RolesTransfer` contains the needed `AclEntityRules`. +- Users without permissions to access an entity or endpoint can't access them. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-cart-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-cart-feature.md new file mode 100644 index 00000000000..34928d8667d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-cart-feature.md @@ -0,0 +1,114 @@ + + +This document describes how to install the Agent Assist + Cart + Order Management feature. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Agent Assist | {{page.release_tag}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + + +## 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|---------------------------------------|---------------------------------------------------|-----------------------------------------------| +| SanitizeCustomerQuoteImpersonationSessionFinisherPlugin | Sanitizes a customer quote. | None | Spryker\Client\Quote\Plugin\Agent | +| AgentQuoteTransferExpanderPlugin | Adds agent's user email to the Quote. | AgentConfig::isSalesOrderAgentEnabled() === true | Spryker\Client\Agent\Plugin\Quote | +| AgentOrderExpanderPreSavePlugin | Adds agent email to the sales order. | AgentConfig::isSalesOrderAgentEnabled() === true | Spryker\Zed\Agent\Communication\Plugin\Sales | + +**src/Pyz/Client/Agent/AgentDependencyProvider.php** + +```php +src/Pyz/Client/Quote/QuoteDependencyProvider.php + +```php +namespace Pyz\Client\Quote; + +use Spryker\Client\Agent\Plugin\Quote\AgentQuoteTransferExpanderPlugin; + +class QuoteDependencyProvider extends \Spryker\Client\Quote\QuoteDependencyProvider +{ + /** + * @return array<\Spryker\Client\QuoteExtension\Dependency\Plugin\QuoteTransferExpanderPluginInterface> + */ + protected function getQuoteTransferExpanderPlugins(): array + { + return [ + new AgentQuoteTransferExpanderPlugin(), + ]; + } +} +``` + +
    + +
    src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php +namespace Pyz\Zed\Sales; + +use Spryker\Zed\Agent\Communication\Plugin\Sales\AgentOrderExpanderPreSavePlugin; + +class SalesDependencyProvider extends \Spryker\Zed\Sales\SalesDependencyProvider +{ + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPreSavePluginInterface> + */ + protected function getOrderExpanderPreSavePlugins(): array + { + return [ + new AgentOrderExpanderPreSavePlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Ensure that, after finishing a customer impersonation, the session quote is empty. +Ensure that after placing an order by an agent, the order contains the agent's email in the `agentEmail` field, when an agent assists a customer. +Ensure that the agent email is visible in the placed order in the "Orders" section of the Back Office, when an agent assists a customer. + +{% endinfo_block %} + + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| ----------------- | ------------ | ----------------------- | +| Agent Assist + Shopping List | | [Install the Agent Assist + Shopping List feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-feature.md new file mode 100644 index 00000000000..a7c50e1d8b8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-feature.md @@ -0,0 +1,639 @@ + + +This document describes how to install the [Agent Assist](/docs/pbc/all/user-management/latest/base-shop/agent-assist-feature-overview.html) feature. + +## Install feature core + +Follow the steps below to install the Agent Assist feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Cart | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/agent-assist:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|--------------------------------------------------| +| Agent | vendor/spryker/agent | +| AgentGui | vendor/spryker/agent-gui | +| SecurityBlockerStorefrontAgent | vendor/spryker/security-blocker-storefront-agent | + +{% endinfo_block %} + +### 2) Set up the database schema + +Enabled feature configuration if you want to capture the agent email in the order data: + +
    src/Pyz/Shared/Agent/AgentConfig.php + +```php +namespace Pyz\Shared\Agent; + +use Spryker\Shared\Agent\AgentConfig as SprykerAgentConfig; + +class AgentConfig extends SprykerAgentConfig +{ + public function isSalesOrderAgentEnabled(): bool + { + return true; + } +} +``` + +
    + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------|--------|---------| +| spy_user.is_agent | column | created | +| spy_sales_order.agent_email | column | created | + +Make sure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------------|-------|---------|----------------------------------------------------------------------------| +| UserTransfer | class | created | src/Generated/Shared/Transfer/UserTransfer | +| SessionEntityRequestTransfer | class | created | src/Generated/Shared/Transfer/SessionEntityRequestTransfer | +| SessionEntityResponseTransfer | class | created | src/Generated/Shared/Transfer/SessionEntityResponseTransfer | +| SecurityBlockerConfigurationSettingsTransfer | class | created | src/Generated/Shared/Transfer/SecurityBlockerConfigurationSettingsTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Set up the following behaviors. + +#### Configure the user Zed UI for agent handling + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|----------------------------------------------------------|---------------------------------------------------------| +| UserAgentFormExpanderPlugin | In the Back Office, adds the **THIS USER IN AS AN AGENT** checkbox to the **Create new User** and **Edit User** pages. | | Spryker\Zed\AgentGui\Communication\Plugin | +| UserAgentTableConfigExpanderPlugin | In the Back Office, adds the **AGENT** column to the **USERS LIST** table. | | Spryker\Zed\AgentGui\Communication\Plugin | +| UserAgentTableDataExpanderPlugin | In the Back Office, in the **USERS LIST** table, fills the **AGENT** column. | Expects the **THIS USER IN AS AN AGENT** checkbox on the **Create new User** and **Edit User** pages of the Back Office. | Spryker\Zed\AgentGui\Communication\Plugin | + +
    src/Pyz/Zed/User/UserDependencyProvider.php + +```php + + */ + protected function getUserFormExpanderPlugins(): array + { + return [ + new UserAgentFormExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserTableConfigExpanderPluginInterface> + */ + protected function getUserTableConfigExpanderPlugins(): array + { + return [ + new UserAgentTableConfigExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserTableDataExpanderPluginInterface> + */ + protected function getUserTableDataExpanderPlugins(): array + { + return [ + new UserAgentTableDataExpanderPlugin(), + ]; + } +} +``` + +
    + +Update the Back Office translations: + +```bash +console translator:generate-cache +``` + + +{% info_block warningBox "Verification" %} + +Ensure that the following plugins have been registered: + +| MODULE | TEST | +|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| UserAgentFormExpanderPlugin | 1. In the Back Office, go to **Users > Users**.
    2. Next to a user, click **Edit**.
    3. Ensure that the **THIS USER IS AN AGENT** checkbox exists. | +| UserAgentTableConfigExpanderPlugin | 1. In the Back Office, go to **Users > Users**.
    2. Ensure that the **Agent** column exists. | +| UserAgentTableDataExpanderPlugin | 1. In the Back Office, go to **Users > Users**.
    2. Next to a non-agent user, select **Edit**.
    3. Select the **THIS USER IS AN AGENT** checkbox.
    4. Click **Update**. This opens the **USERS LIST** page with the message about the successful update displayed.
    5. Make sure that, in the **AGENT** column, next to the user you've updated, the **Agent** tag is displayed. | + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/agent-assist:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------|----------------------------------------------| +| AgentPage | vendor/spryker-shop/agent-page | +| AgentWidget | vendor/spryker-shop/agent-widget | +| SessionAgentValidation | vendor/spryker-shop/session-agent-validation | + +{% endinfo_block %} + +### 2) Set up configuration + +1. By default, posting a login form (where `SecurityBlocker` makes its check and blocks agents who made too many failed login attempts) is locale-independent. So, to see error messages translated into different languages, you need to configure the locale to be added to the agent login path. To do it, update the configuration: + +**src/Pyz/Yves/AgentPage/AgentPageConfig.php** + +```php +>> Security Blocker Storefront Agent +$config[SecurityBlockerStorefrontAgentConstants::AGENT_BLOCK_FOR_SECONDS] = 360; +$config[SecurityBlockerStorefrontAgentConstants::AGENT_BLOCKING_TTL] = 900; +$config[SecurityBlockerStorefrontAgentConstants::AGENT_BLOCKING_NUMBER_OF_ATTEMPTS] = 9; +``` + +### 3) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +agent.authentication.failed,Authentication failed,en_US +agent.authentication.failed,Authentifizierung fehlgeschlagen,de_DE +agent.login.title,Access your account,en_US +agent.login.title,Ich bin bereits Kunde,de_DE +agent.confirm_user_selection,Confirm,en_US +agent.confirm_user_selection,Bestätigen,de_DE +agent.login.email,Email,en_US +agent.login.email,E-Mail,de_DE +agent.login.password,Password,en_US +agent.login.password,Passwort,de_DE +agent.control_bar.username,Agent: %username%,en_US +agent.control_bar.username,Agent: %username%,de_DE +agent.control_bar.customer_name,Customer: %username%,en_US +agent.control_bar.customer_name,Kunde: %username%,de_DE +agent.control_bar.logout_as_customer,End Customer Assistance,en_US +agent.control_bar.logout_as_customer,Kunden-Assistenz beenden,de_DE +agent.control_bar.logout,Logout,en_US +agent.control_bar.logout,Abmelden,de_DE +agent.autocomplete.no_results,No results found,en_US +agent.autocomplete.no_results,Keine Ergebnisse gefunden,de_DE +autocomplete.placeholder,Search,en_US +autocomplete.placeholder,Suche,de_DE +``` + +2. Add the glossary keys: + +```bash +console data:import:glossary +``` + +### 4) Enable controllers + +1. Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|--------------------------------|--------------------------------------------| +| AgentPageRouteProviderPlugin | SprykerShop\Yves\AgentPage\Plugin\Router | +| AgentWidgetRouteProviderPlugin | SprykerShop\Yves\AgentWidget\Plugin\Router | + +2. Register the route provider plugins in the Yves application: + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new AgentPageRouteProviderPlugin(), + new AgentWidgetRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +| PROVIDER | TEST | +|--------------------------------|----------------------------------------------------------------------------------------------------| +| AgentPageRouteProviderPlugin | Make sure `https://mysprykershop.com/agent/login` is accessible. | +| AgentWidgetRouteProviderPlugin | 1. Log in as an agent.
    2. Make sure you can search by customers using the Agent control bar. | + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the following behaviors. + +#### Set up the agent page security + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| YvesAgentPageSecurityPlugin | Registers security firewalls, access rules, impersonate rules, login and logout handlers for agent users. | | SprykerShop\Yves\AgentPage\Plugin\Security | +| AgentSecurityBlockerConfigurationSettingsExpanderPlugin | Expands security blocker configuration settings with agent settings. | | Spryker\Client\SecurityBlockerStorefrontAgent\Plugin\SecurityBlocker | + +**src/Pyz/Yves/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new YvesAgentPageSecurityPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/SecurityBlocker/SecurityBlockerDependencyProvider.php** + +```php + + */ + protected function getSecurityBlockerConfigurationSettingsExpanderPlugins(): array + { + return [ + new AgentSecurityBlockerConfigurationSettingsExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Go to `https://mysprykershop.com/agent/login`. +2. Make sure the login form is displayed and that only a user with the agent role can log in. +3. Go to `https://mysprykershop.com/agent/overview`. +4. Ensure that only the user with the agent role can access the page. +5. Ensure that the agent can log out. + +{% endinfo_block %} + +#### Configure agent session validation + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|----------------------------------------------------------|---------------------------------------------------------| +| SaveAgentSessionSecurityPlugin | Extends security builder event dispatcher with save session agent listener. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | +| ValidateAgentSessionSecurityPlugin | Extends security service with agent session validator listener. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | +| SessionAgentValidationSecurityAuthenticationListenerFactoryTypeExpanderPlugin | Expands security authentication listener factory types list with the agent's session validator factory type. | | SprykerShop\Yves\SessionAgentValidation\Plugin\Security | +| SessionRedisSessionAgentSaverPlugin | Saves an agent's session data to the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | +| SessionRedisSessionAgentValidatorPlugin | Validates an agent's session data in the key-value store (Redis or Valkey). | Session data is stored in the key-value store (Redis or Valkey). | Spryker\Yves\SessionRedis\Plugin\SessionAgentValidation | +| SessionFileSessionAgentSaverPlugin | Saves an agent's session data to a file. | Session data is stored in a file. | Spryker\Yves\SessionFile\Plugin\SessionAgentValidation | +| SessionFileSessionAgentValidatorPlugin | Validates an agent's session data in a file. | Session data is store in a file. | Spryker\Yves\SessionFile\Plugin\SessionAgentValidation | + +**src/Pyz/Yves/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ValidateAgentSessionSecurityPlugin(), + new SaveAgentSessionSecurityPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\SecurityExtension\Dependency\Plugin\SecurityAuthenticationListenerFactoryTypeExpanderPluginInterface> + */ + protected function getSecurityAuthenticationListenerFactoryTypeExpanderPlugins(): array + { + return [ + new SessionAgentValidationSecurityAuthenticationListenerFactoryTypeExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "" %} + +Apply the following changes only if session data is stored in the key-value store (Redis or Valkey). + +{% endinfo_block %} + +**src/Pyz/Yves/SessionAgentValidation/SessionAgentValidationDependencyProvider.php** + +```php + + */ + protected function getAuditLogProcessorPlugins(): array + { + return [ + new AgentCurrentRequestProcessorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, during the user impersonation process, the agent's data is logged. + +{% endinfo_block %} + + +### 6) Set up widgets + +1. Register the following global widget: + +| WIDGET | SPECIFICATION | NAMESPACE | +|-----------------------|----------------------------------------------------|-------------------------------------| +| AgentControlBarWidget | Enables agents to select and impersonate customers. | SprykerShop\Yves\AgentWidget\Widget | + + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + AgentControlBarWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +3. If you have a custom layout template, place the Agent widget above the site header: + +```xml +{% raw %}{%{% endraw %} widget 'AgentControlBarWidget' only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|-----------------------|---------------------------------------------------------------------------| +| AgentControlBarWidget | Log in as an agent. The control bar widget is displayed above the site header. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-shopping-list-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-shopping-list-feature.md new file mode 100644 index 00000000000..af58f4766a9 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-agent-assist-shopping-list-feature.md @@ -0,0 +1,60 @@ + + +This document describes how to install the Agent Assist + Shopping List feature. + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ------------- | ------- | ------------------------------------------------------------ | +| Spryker Core | master | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Agent Assist | master | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Shopping List | master | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +## 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | ----------------- | ------------- | ------------------ | +| SanitizeCustomerShoppingListsImpersonationSessionFinisherPlugin | Removes a customer shopping list collection from the session. | None | Spryker\Client\ShoppingListSession\Plugin\Agent | + +**src/Pyz/Client/Agent/AgentDependencyProvider.php** + +```php +Entity.spy_product_alternative.update
    Entity.spy_product_alternative.delete | + +**src/Pyz/Zed/ProductAlternative/Persistence/Propel/Schema/spy_product_alternative.schema.xml** + +```xml + + + + + + + +
    +
    + ``` + +2. Set up synchronization queue pools so that non-multi-store entities (not store-specific entities) get synchronized among stores: + +**src/Pyz/Zed/ProductAlternativeStorage/Persistence/Propel/Schema/spy_product_alternative_storage.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +3. Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_alternative | table | created | +| spy_product_alternative_storage | table | created | +| spy_product_replacement_for_storage | table | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- |-----------------------------------------------------------------------------| +| SpyProductAlternativeEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductAlternativeEntityTransfer | +| SpyProductAlternativeStorageEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductAlternativeStorageEntityTransfer | +| SpyProductReplacementForStorageEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductReplacementForStorageEntityTransfer | +| ProductAlternative | class | created | src/Generated/Shared/Transfer/ProductAlternative | +| ProductAlternativeResponse | class | created | src/Generated/Shared/Transfer/ProductAlternativeResponse | +| ResponseMessage | class | created | src/Generated/Shared/Transfer/ResponseMessage | +| ProductAlternativeCollection | class | created | src/Generated/Shared/Transfer/ProductAlternativeCollection | +| ProductAlternativeCreateRequest | class | created | src/Generated/Shared/Transfer/ProductAlternativeCreateRequest | +| ProductAlternativeListItem | class | created | src/Generated/Shared/Transfer/ProductAlternativeListItem | +| ProductAlternativeList | class | created | src/Generated/Shared/Transfer/ProductAlternativeList | +| ProductAlternativeStorage | class | created | src/Generated/Shared/Transfer/ProductAlternativeStorage | +| ProductReplacementStorage | class | created | src/Generated/Shared/Transfer/ProductReplacementStorage | +| ProductAlternativeCriteria | class | created | src/Generated/Shared/Transfer/ProductAlternativeCriteriaTransfer | +| ProductAlternative | class | created | src/Generated/Shared/Transfer/ProductAlternativeTransfer | +| ProductAlternativeCollection | class | created | src/Generated/Shared/Transfer/ProductAlternativeCollectionTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | + +Make sure that the changes have been implemented successfully. For this purpose, trigger the following methods and make sure that the above events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductAlternative/Persistence/Base/SpyProductAlternative.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +{% info_block infoBox "Info" %} + +This step publishes tables on change—create, edit, and delete to the `spy_product_alternative_storage`, `spy_product_replacement_for_storage` and synchronize the data to Storage. + +{% endinfo_block %} + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| ProductAlternativeStorageEventSubscriber | Registers listeners that are responsible to publish alternative products storage entity changes when a related entity change event occurs. | None | Spryker\Zed\ProductAlternativeStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductAlternativeStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Set up publisher trigger plugins + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-----------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| ProductAlternativePublisherTriggerPlugin | Allows publishing or re-publishing product alternative data manually. | None | Spryker\Zed\ProductAlternativeStorage\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductAlternativePublisherTriggerPlugin(), + ]; + } +} +``` + +#### Set up, regenerate, and resync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| ProductAlternativeSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductAlternativeStorage\Communication\Plugin\Synchronization | +| ProductReplacementForSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductAlternativeStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/ProductAlternativeStorage/ProductAlternativeStorageConfig.php** + +```php +src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that when you edit any product variant in the Back Office, you have the **Product Alternatives** tab, and you can add some product SKUs as alternatives. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Alternative Products feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE| +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/alternative-products: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductAlternativeWidget | vendor/spryker-shop/product-alternative-widget | +| ProductReplacementForWidget | vendor/spryker-shop/product-replacement-for-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +replacement_for_widget.replacement_for,Replacement for,en_US +replacement_for_widget.replacement_for,Ersatz für,de_DE +product_alternative_widget.product_alternative,Alternative products,en_US +product_alternative_widget.product_alternative,Alternative Produkte,de_DE +product_alternative_widget.add_to_shopping_list,Add to shopping list,en_USproduct_alternative_widget.add_to_shopping_list,Auf die Merkliste,de_DE +product_alternative_widget.alternative_for,Alternative for name,en_US +product_alternative_widget.alternative_for,Alternative für name,de_DE +product_alternative_widget.show_all,Show all,en_US +product_alternative_widget.show_all,Zeige alles,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| ProductAlternativeWidget | Displays alternative product. | None | SprykerShop\Yves\ProductWidget\Widget | +| PdpProductReplacementForListWidget | Displays a list of products for replacement. | None | SprykerShop\Yves\ProductWidget\Widget | +| ProductReplacementForListWidget | Displays a product for replacement. | None | SprykerShop\Yves\ProductReplacementForWidget\Widget | +| ProductAlternativeListWidget | Display list of alternative products for the provided product. | None | SprykerShop\Yves\ProductAlternativeWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php +The plugin is called when the `ProductLabelRelationUpdaterConsole` command is executed.|None|Spryker\Zed\ProductAlternativeProductLabelConnector\Communication\Plugin| + +**src/Pyz/Zed/ProductAlternative/ProductAlternativeDependencyProvider.php** + +```php + + + + + Analytics + fa-chart-bar + analytics-gui + analytics + index + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure the **Analytics** navigation menu item is displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-approval-process-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-approval-process-feature.md new file mode 100644 index 00000000000..b60be7b2a10 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-approval-process-feature.md @@ -0,0 +1,646 @@ + + + +This document describes how to install the [Approval Process feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/approval-process-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Approval Proces feature core. + +### Prerequisites + +To start feature integration, review and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| -------------- | ----------------- | ----------------- | +| Company Account | {{page.release_tag}} |[Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html)| +| Shared Carts | {{page.release_tag}} |[Install the Shared Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html)| +| Checkout | {{page.release_tag}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html)| +| Spryker Core | {{page.release_tag}} |[Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html)| + +### 1) Install the required modules + +```bash +composer require spryker-feature/approval-process:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| QuoteApproval | vendor/spryker/quote-approval | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +**src/Pyz/Shared/QuoteApproval/QuoteApprovalConfig.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + ... + QuoteTransfer::QUOTE_APPROVALS, + ... + ]); + } +} +``` + +### 3) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_quote_approval | table | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| QuoteTransfer.quoteApprovals | column | created | src/Generated/Shared/Transfer/QuoteTransfer| +| QuoteActivationRequestTransfer | class | created | src/Generated/Shared/Transfer/QuoteApprovalTransfer | +| QuoteApprovalRequestTransfer | class | created | src/Generated/Shared/Transfer/QuoteApprovalRequestTransfer | +| QuoteApprovalResponseTransfer | class | created | src/Generated/Shared/Transfer/QuoteApprovalResponseTransfer | +| QuoteApprovalCollectionTransfer | class | created | src/Generated/Shared/Transfer/QuoteApprovalResponseTransfer | + +{% endinfo_block %} + +### 4) Add translations + +Append glossary for the Approval Process feature: + +**src/data/import/glossary.csv** + +```yaml +quote_approval.request.send,Send Request,en_US +quote_approval.request.send,Anfrage Senden,de_DE +quote_approval.remove,Cancel Request,en_US +quote_approval.remove,Anfrage Abbrechen,de_DE +quote_approval.cart.require_approval,"You can't place this order because of your purchasing limit, send your cart for approval or contact your manager.",en_US +quote_approval.cart.require_approval,"Sie können diese Bestellung aufgrund Ihres Einkaufslimits nicht aufgeben. Senden Sie Ihren Einkaufswagen zur Genehmigung oder wenden Sie sich an Ihren Kontakmanager.",de_DE +quote_approval.cart.waiting_approval,"You can't place this order because of pending approval request.",en_US +quote_approval.cart.waiting_approval,"Sie können diese Bestellung aufgrund einer ausstehenden Genehmigungsanfrage nicht aufgeben.",de_DE +quote_approval.create.approver_cant_approve_quote,"Selected approver cannot approve your request because of approver limit.",en_US +quote_approval.create.approver_cant_approve_quote,"Der ausgewählte Manager kann Ihre Anfrage aufgrund des Genehmigungslimits nicht genehmigen.",de_DE +quote_approval.create.you_cant_approve_quote,"You can't approve or decline this cart because it's amount higher that your Approver limit.",en_US +quote_approval.create.you_cant_approve_quote,"Sie können diesen Einkaufswagen nicht genehmigen oder ablehnen, weil dessen Betrag höher als ihr Genehmigungslimit ist.",de_DE +quote_approval.create.quote_already_approved,"This Cart was already approved.",en_US +quote_approval.create.quote_already_approved,"Dieser Einkaufswagen wurde schon zur Genehmigung gesendet.",de_DE +quote_approval.create.quote_already_declined,"This Cart was already declined.",en_US +quote_approval.create.quote_already_declined,"Dieser Einkaufswagen wurde schon abgelehnt.",de_DE +quote_approval.create.quote_already_cancelled,"You can't work with this Cart it was already sent to another approver.",en_US +quote_approval.create.quote_already_cancelled,"Sie können nicht mit diesem Einkaufswagen arbeiten, er wurde schon dem anderen Manager gesendet.",de_DE +quote_approval.create.quote_already_waiting_for_approval,"This Cart was already sent for approval.",en_US +quote_approval.create.quote_already_waiting_for_approval,"",de_DE +quote_approval.create.only_quote_owner_can_send_request,"You can't sent Cart for Approval, only Cart owner can do it.",en_US +quote_approval.create.only_quote_owner_can_send_request,"Sie können den Einkaufswagen zur Genehmigung nicht senden, das kann nur Inhaber des Einkaufswagens machen.",de_DE +quote_approval.cancel.do_not_have_permission,"You don't have permissions to cancel Approval request.",en_US +quote_approval.cancel.do_not_have_permission,"Sie haben nicht die notwendigen Rechte um die Genehmigungsanfrage zu abbrechen.",de_DE +quote_approval.request.approval_by,by,en_US +quote_approval.request.approval_by,von,de_DE +quote_approval.created,"Your request for Approval was send to %first_name% %last_name%.",en_US +quote_approval.created,"Ihre Anfrage zur Genehmigung wurde an %first_name% %last_name% gesendet.",de_DE +quote_approval.removed,"Your request for Approval was canceled.",en_US +quote_approval.removed,"Ihre Genehmigungsanfrage wurde abgebrochen.",de_DE +quote_approval.request.waiting_for_approval_from,Waiting for Approval from,en_US +quote_approval.request.waiting_for_approval_from,Wartet auf die Genehmigung von,de_DE +quote_approval.request.approved_by,Approved by,en_US +quote_approval.request.approved_by,Genehmigt von,de_DE +quote_approval.request.declined_by,Declined by,en_US +quote_approval.request.declined_by,Abgelehnt um,de_DE +``` + +Import the glossary data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table in the database. + +{% endinfo_block %} + +### 4) Set up permission integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ApproveQuotePermissionPlugin | Checks if the customer can approve the quote in the client layer. | None | Spryker\Client\QuoteApproval\Plugin\Permission | +| PlaceOrderPermissionPlugin | Checks if the customer can place an order in the client layer. | None | Spryker\Client\QuoteApproval\Plugin\Permission | +| RequestQuoteApprovalPermissionPlugin | Checks if the customer can request for approval in the client layer. | None | Spryker\Client\QuoteApproval\Plugin\Permission | +| ApproveQuotePermissionPlugin | Checks if the customer can approve quote approval in the Zed layer. | None | Spryker\Zed\QuoteApproval\Communication\Plugin\Permission | +| PlaceOrderPermissionPlugin | Checks if the customer can place an order in the Zed layer. | None | Spryker\Zed\QuoteApproval\Communication\Plugin\Permission | +| SanitizeQuoteApprovalQuoteLockPreResetPlugin | Allows complete removal of all the approval process-related data from the quote on cart lock reset. | None | Spryker\Zed\QuoteApproval\Communication\Plugin\Cart | + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +Open `https://mysprykershop.com/multi-cart/`. The table contains the quote approval status column. | +| QuoteApproveRequestWidget | Open `https://mysprykershop.com/checkout/summary/`. It contains the widget request for approval with list approvers. | +| QuoteApprovalWidget | Open the `https://mysprykershop.com/cart/`. It contains widget approver functionality with buttons to approve or decline. | + +{% endinfo_block %} + +### 4) Enable controllers + +Register the following plugin: + +| WIDGET | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuoteApprovalControllerProvider | Provides routes used in `QuoteApprovalWidget`.| None | SprykerShop\Yves\QuoteApprovalWidget\Plugin\Provider | + +**src/Pyz/Yves/ShopApplication/YvesBootstrap.php** + +```php +add(new AvailabilityNotificationSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationSubscriber` works: + +1. Add a new product and make it unavailable. +2. As a customer, subscribe to its availability notifications on the Storefront. +3. Make the product available. +4. Check your mailbox for the email about the product's availability. + +{% endinfo_block %} + +#### Configure email handling + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------|------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| AvailabilityNotificationSubscriptionMailTypePlugin | Handles the email sent after subscribing to product availability notification. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | +| AvailabilityNotificationUnsubscribedMailTypePlugin | Handles the email sent after unsubscribing from product availability notification. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | +| AvailabilityNotificationMailTypePlugin | Handles the email sent after the product's availability status change. | None | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Mail | + +
    src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ... + ->add(new AvailabilityNotificationUnsubscribedMailTypePlugin()) + ->add(new AvailabilityNotificationSubscriptionMailTypePlugin()) + ->add(new AvailabilityNotificationMailTypePlugin()) + ... + ; + + return $mailCollection; + }); + ... + + return $container; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationSubscriptionMailTypePlugin`, `AvailabilityNotificationUnsubscribedMailTypePlugin`, and `AvailabilityNotificationMailTypePlugin` work: +1. Add a new product. +2. On the Storefront, as a customer, subscribe to its availability notifications. +3. Switch the availability status of the product several times. +4. Check your mailbox for emails about the product's status being switched to available and unavailable. + +{% endinfo_block %} + +#### Configure customer behavior + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------|-------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| AvailabilityNotificationAnonymizerPlugin | Anonymizes customer data during customer anonymization. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\CustomerAnonymizer | +| AvailabilityNotificationSubscriptionCustomerTransferExpanderPlugin | Expands `CustomerTransfer` with availability notification subscriptions data. | | Spryker\Zed\AvailabilityNotification\Communication\Plugin\Customer | + +
    +src/Pyz/Zed/Customer/CustomerDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Verify that `AvailabilityNotificationAnonymizerPlugin` works: +1. Add a new product. +2. On the Storefront, as a company user, subscribe to its availability notifications. +3. Check that the corresponding line is added to the `spy_availability_notification_subscription` table. +4. Delete the company user that is subscribed to the product's availability. +5. Check that the line is deleted from the `spy_availability_notification_subscription` table. + +Verify that `AvailabilityNotificationSubscriptionCustomerTransferExpanderPlugin` works: +1. Add a new product. +2. On the Storefront, as a company user, subscribe to its availability notifications. +3. On the Storefront, go to account overview > **Newsletters**. +4. Check that you are subscribed to the product's availability notifications. + +{% endinfo_block %} + +### 4) Set up the configuration + +{% info_block infoBox %} + +You can define stores to Yves hosts mapping. This allows generating correct URLs—for example, unsubscription URL—for multi-store setup when product availability is shared between two or more stores. + +{% endinfo_block %} + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| AvailabilityNotificationConstants::BASE_URL_YVES_PORT | Defines base URL Yves port. | Spryker\Shared\AvailabilityNotification | +| AvailabilityNotificationConstants::STORE_TO_YVES_HOST_MAPPING | Defines stores to Yves host mapping. Example: the format of returned array is ['DE' => 'yves.de.mysprykershop.com', 'AT' => 'yves.at.mysprykershop.com'] | Spryker\Shared\AvailabilityNotification | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\AvailabilityNotification\AvailabilityNotificationConstants; + +// >>> Availability Notification +$config[AvailabilityNotificationConstants::BASE_URL_YVES_PORT] = $yvesPort; +$config[AvailabilityNotificationConstants::STORE_TO_YVES_HOST_MAPPING] = [ + 'DE' => getenv('SPRYKER_YVES_HOST_DE'), + 'AT' => getenv('SPRYKER_YVES_HOST_AT'), + 'US' => getenv('SPRYKER_YVES_HOST_US'), +]; +``` + +2. To set YVES host environment variables, adjust your deploy file: + +**deploy.*.yml** + +```yaml +version: "0.1" + +namespace: spryker_demo +tag: '1.0' + +environment: docker.dev +image: + environment: + SPRYKER_YVES_HOST_DE: yves.de.spryker.local + SPRYKER_YVES_HOST_AT: yves.at.spryker.local + SPRYKER_YVES_HOST_US: yves.us.spryker.local +... +``` + +{% info_block infoBox %} + +You can control whether `AvailabilityNotificationFacade::subscribe()` throws an exception `\Spryker\Zed\Product\Business\Exception\MissingProductException` (if SKU does not exist in the database) or not. You can do it through the `AvailabilityNotificationConfig::AVAILABILITY_NOTIFICATION_CHECK_PRODUCT_EXISTS` config setting. If set to `false` (by default), then the exception is thrown. If set to `true`, then the exception is not thrown, but `AvailabilityNotificationFacade::subscribe()` returns the instance of `AvailabilityNotificationSubscriptionResponseTransfer::$isSuccess = true`. + +{% endinfo_block %} + +**src/Pyz/Glue/AvailabilityNotification/AvailabilityNotificationConfig.php** + +```php +getIsSuccess()`. + +The config setting exists for BC reasons only. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Availability Notification feature frontend. + +### Prerequisites + +To start feature integration, integrate the required feature: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require "spryker-feature/availability-notification":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|------------------------------------------------------| +| AvailabilityNotificationPage | vendor/spryker-shop/availability-notification-page | +| AvailabilityNotificationPageWidget | vendor/spryker-shop/availability-notification-widget | + +{% endinfo_block %} + +### 2) Add translations + +Feature-specific glossary keys: + +
    +/data/import/glossary.csv + +```yaml +availability_notification.notify_me,Notify me when back in stock,en_US +availability_notification.notify_me,"Benachrichtigen Sie mich, wenn der Artikel wieder verfügbar ist",de_DE +availability_notification.do_not_notify_me,Do not notify me when back in stock,en_US +availability_notification.do_not_notify_me,"Benachrichtigen Sie mich nicht, wenn der Artikel wieder verfügbar ist",de_DE +availability_notification.subscribed,Successfully subscribed,en_US +availability_notification.subscribed,Erfolgreich abonniert,de_DE +availability_notification.unsubscribed,Successfully unsubscribed,en_US +availability_notification.unsubscribed,Erfolgreich abgemeldet,de_DE +availability_notification.successfully_unsubscribed,"Successfully unsubscribed",en_US +availability_notification.successfully_unsubscribed,"Erfolgreich abbestellt",de_DE +availability_notification.successfully_unsubscribed_text,"You have successfully unsubscribed from being notified when the product is available again",en_US +availability_notification.successfully_unsubscribed_text,"Sie haben erfolgreich eine Benachrichtigung erhalten, wenn das produkt wieder verfügbar ist",de_DE +availability_notification_subscription.mail.subscribed.head,"We just informed our purchase team about your subscription!",en_US +availability_notification_subscription.mail.subscribed.head,"Wir haben unser Einkaufsteam gerade über Ihr Abonnement informiert!",de_DE +availability_notification_subscription.mail.subscribed.body,"You will receive an email when the product will be available again",en_US +availability_notification_subscription.mail.subscribed.body,"Sie erhalten eine E-Mail, sobald das Produkt wieder verfügbar ist",de_DE +availability_notification_subscription.mail.subscribed.subject,"We just informed our purchase team about your subscription!",en_US +availability_notification_subscription.mail.subscribed.subject,"Abonnement für Produktverfügbarkeit",de_DE +availability_notification_subscription.mail.unsubscribed.subject,"You will not be notified when the product %name% will be available again.",en_US +availability_notification_subscription.mail.unsubscribed.subject,"Sie werden nicht benachrichtigt, wenn das Produkt %name% wieder verfügbar ist.",de_DE +availability_notification_subscription.mail.unsubscribed.body,"You will not be notified when the product %name% will be available again.",en_US +availability_notification_subscription.mail.unsubscribed.body,"Sie werden nicht benachrichtigt, wenn das Produkt %name% wieder verfügbar ist.",de_DE +availability_notification_subscription.mail.notification.buy_now,"Buy now",en_US +availability_notification_subscription.mail.notification.buy_now,"Kaufe jetzt",de_DE +availability_notification_subscription.mail.notification.subject,"%name% is available again!",en_US +availability_notification_subscription.mail.notification.subject,"%name% ist wieder verfügbar!",de_DE +availability_notification_subscription.mail.notification.head,"%name% is available again!",en_US +availability_notification_subscription.mail.notification.head,"%name% ist wieder verfügbar",de_DE +availability_notification_subscription.mail.notification.body,"The wait is over, you can not add this product inside your cart.",en_US +availability_notification_subscription.mail.notification.body,"Das Warten hat ein Ende, Sie können dieses Produkt nicht in Ihren Warenkorb legen.",de_DE +availability_notification_subscription.mail.copyright,"Copyright © current year company name, All rights reserved.

    ",en_US +availability_notification_subscription.mail.copyright,"Copyright © Name des aktuellen Jahres, Alle Rechte vorbehalten.

    ",de_DE +availability_notification_subscription.mail.unsubscribe,"Want to change how you receive these emails?
    You can unsubscribe from this list.",en_US +availability_notification_subscription.mail.unsubscribe,"Möchten Sie ändern, wie Sie diese E-Mails erhalten?
    Sie können aus dieser Liste austragen.",de_DE +availability_notification.email_address,"Email address",en_US +availability_notification.email_address,"E-Mail-Addresse",de_DE +``` + +
    + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following controller providers in the Yves application: + +| PROVIDER | NAMESPACE | ENABLE CONTROLLER | CONTROLLER SPECIFICATION | +|--------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------|--------------------------------------------------------------------------------------| +| AvailabilityNotificationPageControllerProvider | SprykerShop\Yves\AvailabilityNotificationPage\Plugin\Provider | AvailabilityNotificationPageController | Provides the functionality of subscription removal by a subscription key. | +| AvailabilityNotificationWidgetControllerProvider | SprykerShop\Yves\AvailabilityNotificationWidget\Plugin\Provider | AvailabilityNotificationSubscriptionController | Provides subscription management functionality for `AvailabilityNotificationWidget`. | + +**src/Pyz/Yves/ShopApplication/YvesBootstrap.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new CartPageRouteProviderPlugin(), + new CartPageAsyncRouteProviderPlugin(), + new CartNoteWidgetRouteProviderPlugin(), + new CartNoteWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + + +| PLUGIN | VERIFICATION | +| - | - | +| CartPageRouteProviderPlugin` | `https://mysprykershop.com/cart` page is accessible. | + +| CartPageAsyncRouteProviderPlugin | You can perform cart actions, like changing item quantity or removing an item, with AJAX mode enabled. | + +| CartNoteWidgetRouteProviderPlugin | You can add a cart note. | + +| CartNoteWidgetAsyncRouteProviderPlugin | You can add a cart item note with AJAX mode enabled. | + +{% endinfo_block %} + +### 4) Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|------------------------------------------------------------------|---------------|-------------------------------------------| +| CartBlockMiniCartViewExpanderPlugin | Expands the provided `MiniCartView.content` with a mini cart view. | | SprykerShop\Yves\CartPage\Plugin\CartPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new CartBlockMiniCartViewExpanderPlugin(), + ]; + } +} +``` + + +2. B2C Shop: Add the following configuration: + +**src/Pyz/Yves/CartPage/CartPageConfig.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new CartPageRouteProviderPlugin(), + new CartPageAsyncRouteProviderPlugin(), + new CartNoteWidgetRouteProviderPlugin(), + new CartNoteWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + + +| PLUGIN | VERIFICATION | +| - | - | +| CartPageRouteProviderPlugin` | `https://mysprykershop.com/cart` page is accessible | + +| CartPageAsyncRouteProviderPlugin | You can perform cart actions, like changing item quantity or removing an item, with AJAX mode enabled. | + +| CartNoteWidgetRouteProviderPlugin | You can add a cart note. | + +| CartNoteWidgetAsyncRouteProviderPlugin | You can add a cart item note with AJAX mode enabled. | + +{% endinfo_block %} + +### 4) Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|------------------------------------------------------------------|---------------|-------------------------------------------| +| CartBlockMiniCartViewExpanderPlugin | Expands the provided `MiniCartView.content` with a mini cart view. | | SprykerShop\Yves\CartPage\Plugin\CartPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new CartBlockMiniCartViewExpanderPlugin(), + ]; + } +} +``` + + +2. B2C Shop: Add the following configuration: + +**src/Pyz/Yves/CartPage/CartPageConfig.php** + +```php + + */ + protected function getOrdersBackendApiAttributesMapperPlugins(): array + { + return [ + new CartNoteOrdersBackendApiAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `sales-orders` resources from `SalesOrdersBackendApiResource::getOrderResourceCollection()` results contain cart note data: `OrderResourceCollectionTransfer.orderResources.attributes.cartNote` are set for the orders that have cart notes. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-cart-prices-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-cart-prices-feature.md new file mode 100644 index 00000000000..c70ceec36ac --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-cart-prices-feature.md @@ -0,0 +1,211 @@ + + + +## Install feature core + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. The current feature integration guide only adds the *Cart Prices functionality*. + +{% endinfo_block %} + +### Prerequisites + +Install the required features: + +| NAME | VERSION | REQUIRED | INSTALLATION GUIDE | +|---------------------------------------------|------------------|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------| +| Cart | {{page.release_tag}} | v |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Prices | {{page.release_tag}} | v |[Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Marketplace Product Offer Prices | {{page.release_tag}} | | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker/price-cart-connector:"^6.9.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------|--------------------------------------| +| PriceCartConnector | vendor/spryker/price-cart-connector | + +{% endinfo_block %} + +### 2) Set up configuration + +Set up the following configuration: + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorConfig.php** + +```php + + */ + public function getItemFieldsForIdentifier(): array + { + return array_merge(parent::getItemFieldsForIdentifier(), [ + ItemTransfer::SKU, + ItemTransfer::QUANTITY, + ... + ]); + } +} +``` + +If `IS_ZERO_PRICE_ENABLED_FOR_CART_ACTIONS=false` while attempting to add the product with zero price to the cart, you get the following message: "Price in selected currency not found for product with sku '%sku%'. Change the currency or remove product from order." + +The `PriceCartConnectorConfig::getItemFieldsForIdentifier()` lets you set up a list of fields that are used to build item identifiers. Based on generated identifiers, the system can recognize duplicate items and perform requests only for unique items. + +{% info_block warningBox "Warning" %} + +Apply the following changes only if you have the [Marketplace Product Offer Prices](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) feature installed. + +{% endinfo_block %} + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorConfig.php** + +```php + + */ + public function getItemFieldsForIdentifier(): array + { + return array_merge(parent::getItemFieldsForIdentifier(), [ + ItemTransfer::SKU, + ItemTransfer::QUANTITY, + ItemTransfer::MERCHANT_REFERENCE, + ItemTransfer::PRODUCT_OFFER_REFERENCE, + ]); + } +} +``` + +### 3) Generate transfer objects + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------|-------|---------|------------------------------------------------------------| +| Item | class | created | src/Generated/Shared/Transfer/ItemTransfer | +| Quote | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| PriceProductFilter | class | created | src/Generated/Shared/Transfer/PriceProductFilterTransfer | +| CartChange | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| CartPreCheckResponse | class | created | src/Generated/Shared/Transfer/CartPreCheckResponseTransfer | +| Message | class | created | src/Generated/Shared/Transfer/MessageTransfer | +| PriceProduct | class | created | src/Generated/Shared/Transfer/PriceProductTransfer | +| Currency | class | created | src/Generated/Shared/Transfer/CurrencyTransfer | +| MoneyValue | class | created | src/Generated/Shared/Transfer/MoneyValueTransfer | +| CartItemQuantity | class | created | src/Generated/Shared/Transfer/CartItemQuantityTransfer | + +{% endinfo_block %} + +### 4) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------| +| CartItemPricePlugin | Adds product prices to item, based on currency, price mode, and price type. | None | Spryker\Zed\PriceCartConnector\Communication\Plugin | +| CartItemPricePreCheckPlugin | Validates product prices, checks if prices are valid for current currency, price mode, and price type combination. | None | Spryker\Zed\PriceCartConnector\Communication\Plugin | +| FilterItemsWithoutPricePlugin | Removes quote items without price. | None | Spryker\Zed\PriceCartConnector\Communication\Plugin | +| SanitizeSourcePricesQuoteLockPreResetPlugin | Sanitizes source prices in quote items. | None | Spryker\Zed\PriceCartConnector\Communication\Plugin\Cart | + +
    src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new CartItemPricePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> + */ + protected function getCartPreCheckPlugins(Container $container): array + { + return [ + new CartItemPricePreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new FilterItemsWithoutPricePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\QuoteLockPreResetPluginInterface> + */ + protected function getQuoteLockPreResetPlugins(): array + { + return [ + new SanitizeSourcePricesQuoteLockPreResetPlugin(), + ]; + } +} +``` + +
    diff --git a/_includes/pbc/all/install-features/202602.0/install-the-cart.md b/_includes/pbc/all/install-features/202602.0/install-the-cart.md new file mode 100644 index 00000000000..6d81d7b3313 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-cart.md @@ -0,0 +1,177 @@ + + +{% info_block infoBox %} + +This document describes how to add product variants, product images, and price validation for a cart's items to an existing cart. + +{% endinfo_block %} + +## Prerequisites + +Read the concept of Spryker [super attributes](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html#super-attributes). + +## UI changes + +The cart now supports changing cart items by modifying their attributes. If you have the wrong t-shirt size in the cart, you can change it. + +The cart supports product images out of the box. + +![cart_product_images](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/feature-integration-guides/cart-integration.md/cart_product_images.png) + +Based on the super attributes, you can select the needed product variant in the cart. + +![product_super_attributes](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/feature-integration-guides/cart-integration.md/product_super_attributes.png) + +## Add item images + +To support images in a cart, install the optional module `ProductImageCartConnector`: + +```bash +composer require spryker/product-image-cart-connector +``` + +This module provides `ProductImageCartPlugin`, which you must register later in your shop's `CartDependencyProvider` as follows: + +```php +/** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Cart\Dependency\ItemExpanderPluginInterface[] + */ +protected function getExpanderPlugins(Container $container) +{ + return [ + // your existing plugins ... + new ProductImageCartPlugin(), + ]; +} +``` + +If your shop uses product bundles, register `ExpandBundleItemsWithImagesPlugin` in your shop's `CartDependencyProvider` as follows: + +```php +/** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Cart\Dependency\ItemExpanderPluginInterface[] + */ +protected function getExpanderPlugins(Container $container) +{ + return [ + //your existing plugins + new ExpandBundleItemsWithImagesPlugin(), + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure `ExpandBundleItemsWithImagesPlugin` is registered after the `ExpandBundleItemsPlugin` plugin. + +{% endinfo_block %} + +### Add price validation + +Spryker provides the `PriceCartConnector` module for this purpose. + +Install the `PriceCartConnector` module: + +```bash +composer require spryker/price-cart-connector +``` + +This module provides the `CartItemPricePreCheckPlugin`, which you must register later in your shop `CartDependencyProvider` as follows: + +```php +/** +* @param \Spryker\Zed\Kernel\Container $container +* +* @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> +*/ +protected function getCartPreCheckPlugins(Container $container): array +{ + return [ + // your existing plugins ... + new CartItemPricePreCheckPlugin(), + ]; +} +``` + +Adjust the configuration constant to allow or prevent adding products with zero price: + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorConfig.php** + +```php +select([ + SpyProductTableMap::COL_ID_PRODUCT, + SpyProductTableMap::COL_ATTRIBUTES, + SpyProductTableMap::COL_SKU, + ]) + ->withColumn(SpyProductLocalizedAttributesTableMap::COL_ATTRIBUTES, 'localized_attributes') + ->useSpyProductLocalizedAttributesQuery() + ->filterByFkLocale($this->locale->getIdLocale()) + ->endUse() + ->filterByFkProductAbstract($idProductAbstract) + ->filterByIsActive(true) + ->find() + ->toArray(null, false, TableMap::TYPE_CAMELNAME); +} +``` + +The `filterConcreteProductIds` function changes to the following: + +```php +/** + * @param array $concreteProducts + * + * @return array + */ +protected function filterConcreteProductIds(array $concreteProducts) +{ + $concreteProductIds = array_map(function ($product) { + return $product[SpyProductTableMap::COL_ID_PRODUCT]; + }, $concreteProducts); + foreach ($concreteProducts as $product) { + $concreteProductIds[$product[SpyProductTableMap::COL_SKU]] = $product[SpyProductTableMap::COL_ID_PRODUCT]; + } + asort($concreteProductIds); + return $concreteProductIds; +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-catalog-category-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-catalog-category-management-feature.md new file mode 100644 index 00000000000..cfdb9b7461d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-catalog-category-management-feature.md @@ -0,0 +1,93 @@ + + +This document describes how to install the Catalog + Category Management feature. + +## Install feature core + +Follow the steps below to install the Catalog + Category Management feature core. + +### Prerequisites + +To start feature integration, integrate the required features + +| NAME | VERSION | INSTALLATION GUIDE | +| ------------------- | ------- | ------------------------------------------------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Catalog | {{page.release_tag}} | | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------- | --------------- | ------------- | ---------------- | +| CategoryTreeFilterPageSearchResultFormatterPlugin | Populates the `categoryTreeFilter` aggregation with category nodes which have the `docCount` relevant for the result set. | | Spryker\Client\CategoryStorage\Plugin\Elasticsearch\ResultFormatter | +| SortedCategoryQueryExpanderPlugin | Adds category sorting to the base query. | | Spryker\Client\SearchElasticsearch\Plugin\QueryExpander | + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +/src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + + +**/src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new ProductPageProductAbstractRefreshConsole(), + ]; + + return $commands; + } +} +``` + + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php + 'page-product-abstract-refresh', + 'command' => '$PHP_BIN vendor/bin/console product-page-search:product-abstract-refresh', + 'schedule' => '0 6 * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +2. Optional: To apply the updated cron job configuration without redeploying, run the following command in CLI: + +```shell +vendor/bin/console scheduler:setup +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can sort products by popularity: +1. Place several orders. +2. Go to a Catalog page. +3. Try to sort products by popularity. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-category-filters-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-category-filters-feature.md new file mode 100644 index 00000000000..b45724f5e8c --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-category-filters-feature.md @@ -0,0 +1,225 @@ + + +## Prerequisites + +Prepare your project to work with Category Filters: + +1. Require the Category Filters modules in your composer by running the following commands: + - `composer require spryker/product-category-filter` + - `composer require spryker/product-category-filter-collector` + - `composer require spryker/product-category-filter-gui` + +2. Install the new database: + +```shell +vendor/bin/console propel:diff +``` + +Propel generates a migration file with the changes. + +3. Apply the database changes: + +```shell +vendor/bin/console propel:migrate +``` + +4. Generate ORM models: + +```shell +vendor/bin/console propel:model:build +``` + +This command generates some new classes in your project under the `\Orm\Zed\ProductCategoryFilter\Persistence namespace`. + +{% info_block warningBox "Verification" %} + +Make sure that they extend the base classes from the Spryker core—for example: + +- `\Orm\Zed\ProductCategoryFilter\Persistence\SpyProductCategoryFilter` extends `\Spryker\Zed\ProductCategoryFilter\Persistence\Propel\AbstractSpyProductCategoryFilter` +- `\Orm\Zed\ProductReview\Persistence\SpyProductCategoryFilterQuery` extends `\Spryker\Zed\ProductCategoryFilter\Persistence\Propel\AbstractSpyProductCategoryFilterQuery` + +{% endinfo_block %} + +5. Generate the new transfer objects: + +```shell +vendor/bin/console transfer:generate +``` + +6. Activate the product category filters collector. For this, add `ProductCategoryFilterCollectorPlugin` to the Storage Collector plugin stack. + +
    +Example: collector plugin list extension + +```php + new ProductCategoryFilterCollectorPlugin(), + ]; + }; + + + // ... + } + } +``` + +
    + +7. Make sure the new Zed user interface assets are built: + +```shell +npm run zed +``` + +8. Update Zed's navigation cache to show the new items for the Product Category Filter management user interface: + +```shell +vendor/bin/console application:build-navigation-cache +``` + +You can use the Zed UI of Category Filters to reorder, remove or add search filters to specific categories, and the collectors also can push those category settings to storage. + +For the frontend implementation example and general idea, see our [Demoshop implementation](https://github.com/spryker/demoshop) on GitHub. + +### Update filters for a category + +1. To use the setup category filter, `CatalogController::indexAction` needs to call `ProductCategoryFilterClient::updateFacetsByCategory`—for example, it might look like this: + +```php +query->get('q', ''); + + $parameters = $request->query->all(); + $parameters[PageIndexMap::CATEGORY] = $categoryNode['node_id']; + + $searchResults = $this + ->getClient() + ->catalogSearch($searchString, $parameters); + + $currentLocale = $this + ->getFactory() + ->getLocaleClient() + ->getCurrentLocale(); + + $productCategoryFilterClient = $this->getFactory()->getProductCategoryFilterClient(); + + $searchResults[FacetResultFormatterPlugin::NAME] = $productCategoryFilterClient + ->updateFacetsByCategory( + $searchResults[FacetResultFormatterPlugin::NAME], + $productCategoryFilterClient->getProductCategoryFiltersForCategoryByLocale($parameters[PageIndexMap::CATEGORY], $currentLocale) + ); //This line here is the one that updates the facets with the category filters. + + $pageTitle = ($categoryNode['meta_title']) ?: $categoryNode['name']; + $metaAttributes = [ + 'idCategory' => $parameters['category'], + 'category' => $categoryNode, + 'page_title' => $pageTitle, + 'page_description' => $categoryNode['meta_description'], + 'page_keywords' => $categoryNode['meta_keywords'], + 'searchString' => $searchString, + ]; + + $searchResults = array_merge($searchResults, $metaAttributes); + + return $this->envelopeResult($searchResults, $categoryNode['node_id']); + } +} +``` + +2. Add `ProductCategoryFilterClient` to `CatalogFactory`: + +```php +getProvidedDependency(CatalogDependencyProvider::CLIENT_PRODUCT_CATEGORY_FILTER); + } +} +``` + +3. Add an additional dependency to `CatalogDependencyProvider` to look like this: + +```php +addProductCategoryFilterClient($container); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function addProductCategoryFilterClient(Container $container) + { + $container[static::CLIENT_PRODUCT_CATEGORY_FILTER] = function (Container $container) { + return $container->getLocator()->productCategoryFilter()->client(); + }; + + return $container; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-category-image-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-category-image-feature.md new file mode 100644 index 00000000000..0cb1cba7c99 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-category-image-feature.md @@ -0,0 +1,502 @@ + + + +This document describes how to install the [Category Image feature](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/alternative-products-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Category Image feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE| +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/category-image:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CategoryImage | vendor/spryker/category-image | +| CategoryImageGui | vendor/spryker/category-image-gui | +| CategoryImageStorage | vendor/spryker/category-image-storage | +| CategoryExtension | vendor/spryker/category-extension | + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes can trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_category_image_set | Entity.spy_category_image_set.create
    Entity.spy_category_image_set.update
    Entity.spy_category_image_set.delete | +| spy_category_image | Entity.spy_category_image_set.create
    Entity.spy_category_image_set.update
    Entity.spy_category_image_set.delete | +| spy_category_image_set_to_category_image | Entity.spy_category_image_set_to_category_image.create
    Entity.spy_category_image_set_to_category_image.update
    Entity.spy_category_image_set_to_category_image.delete | + +**src/Pyz/Zed/CategoryImage/Persistence/Propel/Schema/spy_category_image.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    +
    +``` + +2. Set up synchronization queue pools so that non-multi-store entities (not store-specific entities) are synchronized among stores: + +**src/Pyz/Zed/CategoryImageStorage/Persistence/Propel/Schema/spy_category_image_storage.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +3. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database. + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_category_image_set | table | created | +| spy_category_image | table | created | +| spy_category_image_set_to_category_image | table | created | +| spy_category_image_storage | table | created | + +Make sure that propel entities have been generated successfully by checking their existence. Also, change the generated entity classes to extend from Spryker core classes. + +| CLASS PATH | EXTENDS | +| --- | --- | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImage.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImage | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageQuery.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImageQuery | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSet.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImageSet | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetQuery.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImageSetQuery | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetToCategoryImage.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImageSetToCategoryImage | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetToCategoryImageQuery.php | Spryker\\Zed\\CategoryImage\\Persistence\\Propel\\AbstractSpyCategoryImageSetToCategoryImageQuery | +| src/Orm/Zed/CategoryImageStorage/Persistence/Base/SpyCategoryImageStorage.php | Spryker\\Zed\\CategoryImageStorage\\Persistence\\Propel\\AbstractSpyCategoryImageStorage | +| src/Orm/Zed/CategoryImageStorage/Persistence/Base/SpyCategoryImageStorageQuery.php | Spryker\\Zed\\CategoryImageStorage\\Persistence\\Propel\\AbstractSpyCategoryImageStorageQuery | + +Make sure that the following changes have been implemented in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CategoryImageSet | class | created | src/Generated/Shared/Transfer/CategoryImageSetTransfer.php | +| CategoryImage | class | created | src/Generated/Shared/Transfer/CategoryImageTransfer.php | +| Category | class | created | src/Generated/Shared/Transfer/CategoryTransfer.php | +| CategoryCriteria | class | created | src/Generated/Shared/Transfer/CategoryCriteriaTransfer.php | +| CategoryCollection | class | created | src/Generated/Shared/Transfer/CategoryCollectionTransfer.php | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer.php | + +{% endinfo_block %} + + +### 3) Configure export to the key-value store (Redis or Valkey) + +To configure export to the key-value store (Redis or Valkey), follow steps in the subsections. + +#### Set up event listeners + +{% info_block infoBox %} + +In this step, you enable publishing of table changes—create, edit, delete to `spy_category_image_storage` and synchronization of data to Storage. + +{% endinfo_block %} + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CategoryImageStorageEventSubscriber | Registers listeners that are responsible for publishing category image information to storage when a related entity changes. | None | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new CategoryImageStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +**src/Pyz/Zed/CategoryImageStorage/CategoryImageStorageConfig.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new CategoryImagePublisherTriggerPlugin(), + ]; + } +} +``` + +#### Set up data synchronization + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CategoryImageSynchronizationDataPlugin | Synchronizes all category image entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php +src/Pyz/Zed/Category/CategoryDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that category image handling is integrated successfully by going to Zed and creating, editing, and deleting categories with images. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Alternative Products feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/category-image:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CategoryImageStorageWidget | vendor/spryker-shop/category-image-storage-widget | + +{% endinfo_block %} + +### 2) Set up widgets + +Register the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +| --- | --- | --- | +| CategoryImageStorageWidget | Finds the given category image set in Storage and displays its first image in a given size format. | SprykerShop\Yves\CategoryImageStorageWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + new SynchronizationStorageQueueMessageProcessorPlugin(), + CategoryPageSearchConstants::CATEGORY_SYNC_SEARCH_QUEUE => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +### 3) Set up database schema and transfer objects + +1. Adjust the schema definition so that entity changes trigger the events: + +**src/Pyz/Zed/Category/Persistence/Propel/Schema/spy_category.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + + +
    + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/CategoryImage/Persistence/Propel/Schema/spy_category_image.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    +
    +``` + +2. Set up synchronization queue pools, so entities without store relations are synchronized among stores: + +**src/Pyz/Zed/CategoryImageStorage/Persistence/Propel/Schema/spy_category_image_storage.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +3. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +- Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|------------------------------------------|-------|---------| +| spy_category | table | created | +| spy_category_attribute | table | created | +| spy_category_closure_table | table | created | +| spy_category_node | table | created | +| spy_category_store | table | created | +| spy_category_template | table | created | +| spy_category_node_storage | table | created | +| spy_category_node_page_search | table | created | +| spy_category_tree_storage | table | created | +| spy_category_image_set | table | created | +| spy_category_image | table | created | +| spy_category_image_set_to_category_image | table | created | +| spy_category_image_storage | table | created | + +- Make sure propel entities have been generated successfully by checking their existence. + +{% endinfo_block %} + +4. Change the generated entity classes to extend from the core classes. + +| CLASS PATH | EXTENDS | +|----------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| src/Orm/Zed/Category/Persistence/Base/SpyCategory.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategory | +| src/Orm/Zed/Category/Persistence/Base/SpyCategoryAttribute.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategoryAttribute | +| src/Orm/Zed/Category/Persistence/Base/SpyCategoryClosureTable.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategoryClosureTable | +| src/Orm/Zed/Category/Persistence/Base/SpyCategoryNode.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategoryNode | +| src/Orm/Zed/Category/Persistence/Base/SpyCategoryStore.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategoryStore | +| src/Orm/Zed/Category/Persistence/Base/SpyCategoryTemplate.php | Spryker\Zed\Category\Persistence\Propel\AbstractSpyCategoryTemplate | +| src/Orm/Zed/CategoryPageSearch/Persistence/Base/SpyCategoryNodePageSearch.php | Spryker\Zed\CategoryPageSearch\Persistence\Propel\AbstractSpyCategoryNodePageSearch | +| src/Orm/Zed/CategoryStorage/Persistence/Base/SpyCategoryNodeStorage.php | Spryker\Zed\CategoryStorage\Persistence\Propel\AbstractSpyCategoryNodeStorage | +| src/Orm/Zed/CategoryStorage/Persistence/Base/SpyCategoryTreeStorage.php | Spryker\Zed\CategoryStorage\Persistence\Propel\AbstractSpyCategoryTreeStorage | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImage.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImage | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageQuery.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImageQuery | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSet.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImageSet | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetQuery.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImageSetQuery | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetToCategoryImage.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImageSetToCategoryImage | +| src/Orm/Zed/CategoryImage/Persistence/Base/SpyCategoryImageSetToCategoryImageQuery.php | Spryker\Zed\CategoryImage\Persistence\Propel\AbstractSpyCategoryImageSetToCategoryImageQuery | +| src/Orm/Zed/CategoryImageStorage/Persistence/Base/SpyCategoryImageStorage.php | Spryker\Zed\CategoryImageStorage\Persistence\Propel\AbstractSpyCategoryImageStorage | +| src/Orm/Zed/CategoryImageStorage/Persistence/Base/SpyCategoryImageStorageQuery.php | Spryker\Zed\CategoryImageStorage\Persistence\Propel\AbstractSpyCategoryImageStorageQuery | + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been implemented in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------|-------|---------|------------------------------------------------------------------------------| +| CategoryCollectionTransfer | class | created | src/Generated/Shared/Transfer/CategoryCollectionTransfer.php | +| CategoryCriteriaTransfer | class | created | src/Generated/Shared/Transfer/CategoryCriteriaTransfer.php | +| CategoryDataFeedTransfer | class | created | src/Generated/Shared/Transfer/CategoryDataFeedTransfer.php | +| CategoryImageSetCollectionStorageTransfer | class | created | src/Generated/Shared/Transfer/CategoryImageSetCollectionStorageTransfer.php | +| CategoryImageSetStorageTransfer | class | created | src/Generated/Shared/Transfer/CategoryImageSetStorageTransfer.php | +| CategoryImageSetTransfer | class | created | src/Generated/Shared/Transfer/CategoryImageSetTransfer.php | +| CategoryImageStorageTransfer | class | created | src/Generated/Shared/Transfer/CategoryImageStorageTransfer.php | +| CategoryImageTransfer | class | created | src/Generated/Shared/Transfer/CategoryImageTransfer.php | +| CategoryLocalizedAttributesTransfer | class | created | src/Generated/Shared/Transfer/CategoryLocalizedAttributesTransfer.php | +| CategoryMapTransfer | class | created | src/Generated/Shared/Transfer/CategoryMapTransfer.php | +| CategoryNodeAggregationTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeAggregationTransfer.php | +| CategoryNodeCriteriaTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeCriteriaTransfer.php | +| CategoryNodeFilterTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeFilterTransfer.php | +| CategoryNodePageSearchTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodePageSearchTransfer.php | +| CategoryNodeSearchResultTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeSearchResultTransfer.php | +| CategoryNodeStorageTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeStorageTransfer.php | +| CategoryNodeUrlCriteriaTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeUrlCriteriaTransfer.php | +| CategoryNodeUrlPathCriteriaTransfer | class | created | src/Generated/Shared/Transfer/CategoryNodeUrlPathCriteriaTransfer.php | +| CategoryResponseTransfer | class | created | src/Generated/Shared/Transfer/CategoryResponseTransfer.php | +| CategoryTemplateTransfer | class | created | src/Generated/Shared/Transfer/CategoryTemplateTransfer.php | +| CategoryTransfer | class | created | src/Generated/Shared/Transfer/CategoryTransfer.php | +| CategoryTreeStorageTransfer | class | created | src/Generated/Shared/Transfer/CategoryTreeStorageTransfer.php | +| NodeCollectionTransfer | class | created | src/Generated/Shared/Transfer/NodeCollectionTransfer.php | +| NodeTransfer | class | created | src/Generated/Shared/Transfer/NodeTransfer.php | +| UpdateCategoryStoreRelationRequest | class | created | src/Generated/Shared/Transfer/UpdateCategoryStoreRelationRequestTransfer.php | +| CategoryNodeCollectionRequest | class | created | src/Generated/Shared/Transfer/CategoryNodeCollectionRequestTransfer.php | +| CategoryNodeCollectionResponse | class | created | src/Generated/Shared/Transfer/CategoryNodeCollectionResponseTransfer.php | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer.php | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer.php | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```csv +category.validation.category_node_entity_not_found,The category node ID '%category_node_id%' cannot be relocated because this category node no longer exists.,en_US +category.validation.category_node_entity_not_found,"Die Kategorieknoten-ID '%category_node_id%' kann nicht verschoben werden, da dieser Kategorieknoten nicht mehr existiert.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +3. Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that the Back Office navigation related to categories has been translated. + +{% endinfo_block %} + +### 5) Set up search + +Add the page map plugin for the *category node* entity. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------|---------------------------------------------------|---------------|------------------------------------------------------------| +| CategoryNodeDataPageMapBuilder | Builds the page map for the category node entity. | | Spryker\Zed\CategoryPageSearch\Communication\Plugin\Search | + + +**src/Pyz/Zed/Search/SearchDependencyProvider.php** + +```php + +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +getCategoryStoragePlugins(), + $this->getCategoryPageSearchPlugins(), + ); + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getCategoryStoragePlugins(): array + { + return [ + new CategoryStoreStorageWritePublisherPlugin(), + new CategoryStoreStorageWriteForPublishingPublisherPlugin(), + new CategoryTreeWriteForPublishingPublisherPlugin(), + new CategoryDeletePublisherPlugin(), + new CategoryStoreCategoryWritePublisherPlugin(), + new CategoryAttributeDeletePublisherPlugin(), + new CategoryAttributeWritePublisherPlugin(), + new CategoryNodeDeletePublisherPlugin(), + new CategoryNodeWritePublisherPlugin(), + new CategoryTemplateDeletePublisherPlugin(), + new CategoryTemplateWritePublisherPlugin(), + new CategoryTreeDeletePublisherPlugin(), + new ParentWritePublisherPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getCategoryPageSearchPlugins(): array + { + return [ + new CategoryStoreSearchWritePublisherPlugin(), + new CategoryStoreSearchWriteForPublishingPublisherPlugin(), + new CategoryPageSearchCategoryDeletePublisherPlugin(), + new CategoryPageSearchCategoryWritePublisherPlugin(), + new CategoryPageSearchCategoryAttributeDeletePublisherPlugin(), + new CategoryPageSearchCategoryAttributeWritePublisherPlugin(), + new CategoryPageSearchCategoryNodeDeletePublisherPlugin(), + new CategoryPageSearchCategoryNodeWritePublisherPlugin(), + new CategoryPageSearchCategoryTemplateDeletePublisherPlugin(), + new CategoryPageSearchCategoryTemplateWritePublisherPlugin(), + ]; + } +} +``` + +
    + +2. Set up event listeners: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| CategoryImageStorageEventSubscriber | Registers listeners that are responsible for publishing category image information to storage when a related entity changes. | | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new CategoryImageStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +3. Set up trigger plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------|------------------------------------------------------------------|---------------|---------------------------------------------------------------| +| CategoryNodePublisherTriggerPlugin | Retrieves category nodes based on the provided limit and offset. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Publisher | +| CategoryTreePublisherTriggerPlugin | Retrieves category trees based on the provided limit and offset. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Publisher | +| CategoryPagePublisherTriggerPlugin | Retrieves category nodes based on the provided limit and offset. | | Spryker\Zed\CategoryPageSearch\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +getPublisherTriggerPlugins(), + ); + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface[] + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new CategoryNodePublisherTriggerPlugin(), + new CategoryTreePublisherTriggerPlugin(), + new CategoryPagePublisherTriggerPlugin(), + ]; + } +} +``` + +4. Set up synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| CategoryNodeSynchronizationDataBulkRepositoryPlugin | Retrieves a category node storage collection based on the provided offset, limit, and IDs. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Synchronization | +| CategoryTreeSynchronizationDataBulkRepositoryPlugin | Retrieves a category tree storage collection based on the provided offset, limit, and `categoryTreeStorageId` values. | | Spryker\Zed\CategoryStorage\Communication\Plugin\Synchronization | +| CategoryPageSynchronizationDataBulkRepositoryPlugin | Retrieves a collection of synchronization data based on the provided offset, limit, and IDs. | | Spryker\Zed\CategoryPageSearch\Communication\Plugin\Synchronization | +| CategoryImageSynchronizationDataBulkPlugin | Synchronizes all category image entries from the database to the key-value store (Redis or Valkey). | | Spryker\Zed\CategoryImageStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php +EXAMPLE EXPECTED DATA FRAGMENT: category_node:de:de_de:5 + +```yaml +{ + "id_category": 5, + "node_id": 5, + "name": "Computer", + "url": "/de/computer", + "is_active": true, + "template_path": "@CatalogPage/views/simple-cms-block/simple-cms-block.twig", + "order": 100, + "meta_title": "Computer", + "meta_description": "Computer", + "meta_keywords": "Computer", + "parents": [ + { + "id_category": 1, + "node_id": 1, + "name": "Demoshop", + "url": "/de", + "is_active": true, + "template_path": "@CatalogPage/views/catalog/catalog.twig", + "meta_title": "Demoshop", + "meta_description": "Deutsche Version des Demoshop", + "meta_keywords": "Deutsche Version des Demoshop" + } + ], + "children": [ + { + "id_category": 6, + "node_id": 6, + "name": "Notebooks", + "url": "/de/computer/notebooks", + "is_active": true, + "template_path": "@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig", + "order": 100, + "meta_title": "Notebooks", + "meta_description": "Notebooks", + "meta_keywords": "Notebooks" + }, + { + "id_category": 7, + "node_id": 7, + "name": "Pc's/Workstations", + "url": "/de/computer/pc's/workstations", + "is_active": true, + "template_path": "@CatalogPage/views/catalog/catalog.twig", + "order": 90, + "meta_title": "Pc's/Workstations", + "meta_description": "Pc's/Workstations", + "meta_keywords": "Pc's/Workstations" + }, + { + "id_category": 8, + "node_id": 8, + "name": "Tablets", + "url": "/de/computer/tablets", + "is_active": true, + "template_path": "@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig", + "order": 80, + "meta_title": "Tablets", + "meta_description": "Tablets", + "meta_keywords": "Tablets" + } + ], + "_timestamp": 1621934332.368688 +} +``` + + + +
    + EXAMPLE EXPECTED DATA FRAGMENT: category_tree:de:en_us** + +```yaml +{ + "category_nodes_storage": [ + { + "id_category": 5, + "node_id": 5, + "name": "Computer", + "url": "/en/computer", + "is_active": true, + "template_path": "@CatalogPage/views/simple-cms-block/simple-cms-block.twig", + "order": 100, + "meta_title": "Computer", + "meta_description": "Computer", + "meta_keywords": "Computer", + "children": [ + { + "id_category": 6, + "node_id": 6, + "name": "Notebooks", + "url": "/en/computer/notebooks", + "is_active": true, + "template_path": "@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig", + "order": 100, + "meta_title": "Notebooks", + "meta_description": "Notebooks", + "meta_keywords": "Notebooks" + }, + ] + }, + { + "id_category": 2, + "node_id": 2, + "name": "Cameras & Camcorders", + "url": "/en/cameras-&-camcorders", + "is_active": true, + "template_path": "@CatalogPage/views/catalog/catalog.twig", + "order": 90, + "meta_title": "Cameras & Camcorders", + "meta_description": "Cameras & Camcorders", + "meta_keywords": "Cameras & Camcorders", + "children": [] + } + ], + "_timestamp": 1621934347.540677 +} +``` + +
    + +
    + EXAMPLE EXPECTED DATA FRAGMENT: category_image:de_de:15 + +```yaml +{ + "id_category": 15, + "image_sets": [ + { + "name": "default", + "images": [ + { + "id_category_image": 2, + "external_url_large": "https://images.icecat.biz/img/norm/high/1113777-8051.jpg", + "external_url_small": "https://images.icecat.biz/img/gallery_mediums/img_1113777_medium_1480988786_4473_5647.jpg" + } + ] + } + ], + "_timestamp": 1622025094.247298 +} +``` + +
    + +{% endinfo_block %} + +### 7) Import data + +1. Prepare your data according to your requirements using our demo data: + +**data/import/common/common/category.csv** + +```csv +category_key,parent_category_key,name.de_DE,name.en_US,meta_title.de_DE,meta_title.en_US,meta_description.de_DE,meta_description.en_US,meta_keywords.de_DE,meta_keywords.en_US,is_active,is_in_menu,is_searchable,is_root,is_main,node_order,template_name +cameras-and-camcorder,demoshop,Kameras & Camcorders,Cameras & Camcorders,Kameras & Camcorders,Cameras & Camcorders,Kameras & Camcorders,Cameras & Camcorders,Kameras & Camcorders,Cameras & Camcorders,1,1,1,0,1,90,Catalog (default) +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DESCRIPTION | +|------------------------|----------|-----------|-----------------------|------------------------------------------------------------------------------------------------------------------------------| +| category_key | ✓ | string | cameras-and-camcorder | Sluggable name of the category. | +| parent_category_key | | string | demoshop | Sluggable name of the parent category. | +| name.de_DE | ✓ | string | Kameras & Camcorders | Human-readable name of the category (de). | +| name.en_US | ✓ | string | Cameras & Camcorders | Human-readable name of the category (en). | +| meta_title.de_DE | ✓ | string | Kameras & Camcorders | Human-readable title for category (de). | +| meta_title.en_US | ✓ | string | Cameras & Camcorders | A Human-readable title for category (en). | +| meta_description.de_DE | ✓ | string | Kameras & Camcorders | A Human-readable description for category (de). | +| meta_description.en_US | ✓ | string | Cameras & Camcorders | A Human-readable description for category (en). | +| meta_keywords.de_DE | ✓ | string | Kameras & Camcorders | A Human-readable keywords for category (de). | +| meta_keywords.en_US | ✓ | string | Cameras & Camcorders | A Human-readable keywords for category (en). | +| is_active | | bool | 1 | Defines if the category is active. | +| is_in_menu | | bool | 1 | Defines if the category is displayed in the menu on the Storefront. | +| is_searchable | | bool | 1 | Defines if the category is displayed in the search. If the value is `0`, the category cannot be found in the catalog search. | +| is_root | | bool | 0 | Defines if the category. is a root category: `0` – non-root category, `1` – root category. | +| is_main | | bool | 1 | Defines if the category is main. | +| node_order | | int | 90 | When displayed with other categories, defines their order based on the comparison of this parameter's values. | +| template_name | | string | Catalog (default) | Human-readable name of the category template. | + +**data/import/common/DE/category_store.csv** + +```csv +category_key,included_store_names,excluded_store_names +demoshop,DE, +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DESCRIPTION | +|----------------------|----------|-----------|--------------|------------------------------------------------------| +| category_key | ✓ | string | demoshop | Sluggable name of the category. | +| included_store_names | | string | DE | List of the store names to link to the category. | +| excluded_store_names | | string | "US,AT" | List of the store names to unlink from the category. | + +**data/import/category_template.csv** + +```csv +template_name,template_path +"Sub Categories grid","@CatalogPage/views/sub-categories-grid/sub-categories-grid.twig" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DESCRIPTION | +|---------------|----------|-----------|--------------------------------------------|-----------------------------------------------------------------| +| template_name | ✓ | string | My category template | A human-readable name of the category template. | +| template_path | ✓ | string | @ModuleName/path/to/category/template.twig | Category template path that is used to display a category page. | + +2. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|----------------------------------|---------------|----------------------------------------------------------------| +| CategoryDataImportPlugin | Imports the category data. | | Spryker\Zed\CategoryDataImport\Communication\Plugin | +| CategoryStoreDataImportPlugin | Imports the category store data. | | Spryker\Zed\CategoryDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +src/Pyz/Zed/Category/CategoryDependencyProvider.php + +```php + + +**src/Pyz/Zed/CategoryGui/CategoryGuiDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CategoryDecisionRulePlugin(), + ]); + } + + /** + * @return array<\Spryker\Zed\DiscountExtension\Dependency\Plugin\DiscountableItemCollectorPluginInterface> + */ + protected function getCollectorPlugins(): array + { + return array_merge(parent::getCollectorPlugins(), [ + new CategoryDiscountableItemCollectorPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that the plugins work correctly: + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a *category* field. +2. Add a product assigned to the defined category to the cart. +3. The discount should be applied to the cart. + +{% endinfo_block %} + + +### 2) Build Zed UI frontend + +Enable Javascript and CSS changes for Zed: + +```bash +console frontend:zed:build +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-checkout-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-checkout-feature.md new file mode 100644 index 00000000000..6b9ceca454d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-checkout-feature.md @@ -0,0 +1,646 @@ + + +This document describes how to install the Checkout feature. + + +{% info_block warningBox %} + +This integration guide expects the basic feature to be in place. It only adds the [Order Threshold](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.html) functionality. + +{% endinfo_block %} + + +## Install feature core + +Follow the steps below to install the Checkout feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Cart | {{page.release_tag}} | +| Checkout | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Prices | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | +| Tax | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/order-threshold:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| SalesOrderThreshold | vendor/spryker/sales-order-threshold | +| SalesOrderThresholdExtension | vendor/spryker/sales-order-threshold-extension | +| SalesOrderThresholdDataImport | vendor/spryker/sales-threshold-data-import | +| SalesOrderThresholdGui | vendor/spryker/sales-order-threshold-gui | +| SalesOrderThresholdGuiExtension | vendor/spryker/sales-order-threshold-gui-extension | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure that you've triggered the following changes by checking the database: + +| DATABASE ENTITY | TYPE | +| --- | --- | +| spy_sales_order_threshold | table | +| spy_sales_order_threshold_tax_set | table | +| spy_sales_order_threshold_type | table | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Ensure that you've triggered the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| SalesOrderThresholdType | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdTypeTransfer | +| SalesOrderThresholdValue | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdValueTransfer | +| SalesOrderThreshold | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdTransfer | +| SalesOrderThresholdLocalizedMessage | class | created | src/Generated/Shared/Transfer/SalesOrderThresholdLocalizedMessageTransfer | +| SpySalesOrderThresholdEntity | class | created | src/Generated/Shared/SpySalesOrderThresholdEntityTransfer | +| SpySalesOrderThresholdTypeEntity | class | created | src/Generated/Shared/SpySalesOrderThresholdTypeEntityTransfer | +| SpySalesOrderThresholdTaxSetEntity | class | created | src/Generated/Shared/SpySalesOrderThresholdTaxSetEntityTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Using the demo data below, for each threshold message, configure the glossary keys per each configured locale and currency. + +1. Add infrastructural record's glossary keys: + +**src/data/import/glossary.csv** + +```yaml +sales-order-threshold.strategy.soft-minimum-threshold-fixed-fee,Zuschlag,de_DE +sales-order-threshold.strategy.soft-minimum-threshold-fixed-fee,Surcharge,en_US +sales-order-threshold.strategy.soft-minimum-threshold-flexible-fee,Zuschlag,de_DE +sales-order-threshold.strategy.soft-minimum-threshold-flexible-fee,Surcharge,en_US +``` + + +2. Add demo data glossary keys: + +**src/data/import/glossary.csv** + +```yaml +sales-order-threshold.hard-minimum-threshold.de.eur.message,"You should add items for {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} to pass a recommended threshold. You can't proceed with checkout",en_US +sales-order-threshold.hard-minimum-threshold.de.eur.message,"Sie sollten Waren im Wert von {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} dem Warenkorb hinzufügen um die empfohlene Schwelle zu erreichen. Sie können nicht mit der Bestellung fortfahren",de_DE +sales-order-threshold.hard-minimum-threshold.de.chf.message,"You should add items for {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} to pass a recommended threshold. You can't proceed with checkout",en_US +sales-order-threshold.hard-minimum-threshold.de.chf.message,"Sie sollten Waren im Wert von {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} dem Warenkorb hinzufügen um die empfohlene Schwelle zu erreichen. Sie können nicht mit der Bestellung fortfahren",de_DE +sales-order-threshold.hard-maximum-threshold.de.eur.message,The cart value cannot be higher than {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %}. Please remove some items to proceed with the order,en_US +sales-order-threshold.hard-maximum-threshold.de.eur.message,"Der Warenkorbwert darf nicht höher als {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} sein. Bitte entfernen Sie einige Artikel, um mit der Bestellung fortzufahren",de_DE +sales-order-threshold.hard-maximum-threshold.de.chf.message,The cart value cannot be higher than {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %}. Please remove some items to proceed with the order,en_US +sales-order-threshold.hard-maximum-threshold.de.chf.message,"Der Warenkorbwert darf nicht höher als {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} sein. Bitte entfernen Sie einige Artikel, um mit der Bestellung fortzufahren",de_DE +sales-order-threshold.soft-minimum-threshold.de.eur.message,"You need to add items for {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} to pass a recommended threshold, but if you want can proceed to checkout.",en_US +sales-order-threshold.soft-minimum-threshold.de.eur.message,"Sie sollten Waren im Wert von {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} dem Warenkorb hinzufügen um die empfohlene Schwelle zu erreichen. Sie können trotzdem weiter zur Kasse.",de_DE +sales-order-threshold.soft-minimum-threshold.de.chf.message,"You need to add items for {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} to pass a recommended threshold, but if you want can proceed to checkout.",en_US +sales-order-threshold.soft-minimum-threshold.de.chf.message,"Sie sollten Waren im Wert von {% raw %}{{{% endraw %}threshold{% raw %}}}{% endraw %} dem Warenkorb hinzufügen um die empfohlene Schwelle zu erreichen. Sie können trotzdem weiter zur Kasse.",de_DE +``` + +3. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Ensure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Import data + +Import the following data. + +#### Import infrastructural data + +Import infrastructural data as follows: + + +1. Install the plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SalesOrderThresholdTypeInstallerPlugin |Installs sales order threshold types. | None | Spryker\Zed\SalesOrderThreshold\Communication\Plugin\Installer | + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ProductQuantityRestrictionCheckoutPreConditionPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +1. Add any product to the cart with quantity ≥ 5 and begin the checkout process. +2. Add product quantity restrictions for this product via data import: Min Qty = 1, Max Qty = 4, Qty Interval = 1. +3. Proceed with checkout and go to the summary page. +On the summary page, make sure the error about the maximum product quantity being exceeded is displayed. And the `Place Order` button should be disabled. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-checkout-quotation-process-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-checkout-quotation-process-feature.md new file mode 100644 index 00000000000..7c4a12c74d5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-checkout-quotation-process-feature.md @@ -0,0 +1,126 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Checkout | {{page.release_tag}} | +| Quotation Process | {{page.release_tag}} | + +### 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuoteRequestPreCheckPlugin | Prevents the checkout for quote in the quotation process. | None | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | +| CloseQuoteRequestCheckoutPostSaveHookPlugin | Closes a quote request after the order has been placed from it. | None | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | + +**Pyz\Zed\Checkout\CheckoutDependencyProvider.php** + +```php +Make sure that after you placed an order form quote request, a quote request has a closed status. + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Checkout | {{page.release_tag}} | +| Quotation Process | {{page.release_tag}} | + +### Set up behavior + +#### Set up quote request workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuoteRequestAgentCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for agent RFQ edit workflow. | None | SprykerShop\Yves\QuoteRequestAgentPage\Plugin\CheckoutPage | +| QuoteWithCustomShipmentPriceCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for a quote with source shipment price workflow. | None | SprykerShop\Yves\QuoteRequestPage\Plugin\CheckoutPage | +| QuoteRequestCheckoutWorkflowStepResolverStrategyPlugin | Modifies checkout steps for buyer RFQ edit workflow. | None | SprykerShop\Yves\QuoteRequestPage\Plugin\CheckoutPage | + +**Pyz\Yves\CheckoutPage\CheckoutPageDependencyProvider.php** + +```php + (new CheckoutWorkflowPluginContainer( + $this->getCheckoutPreConditions($container), + $this->getCheckoutOrderSavers($container), + $this->getCheckoutPostHooks($container), + $this->getCheckoutPreSaveHooks($container) + )), + CheckoutConstants::KEY_WORKFLOW_ALTERNATIVE_CHECKOUT => (new CheckoutWorkflowPluginContainer( + [], + [ + new SalesOrderSaverPlugin(), + ], + [], + [] + )), + ]; +} +``` + +After this, pass workflow id as a second parameter in the `placeOrder()` call of `CheckoutFacade`. + +```bash +$this->getCheckoutFacade()->placeOrder($quoteTransfer, CheckoutConstants::KEY_WORKFLOW_ALTERNATIVE_CHECKOUT); +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-cms-catalog-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-cms-catalog-feature.md new file mode 100644 index 00000000000..3eaabf433a5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-cms-catalog-feature.md @@ -0,0 +1,382 @@ + + +## Install feature core + +Follow the steps below to install the CMS + Catalog feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Catalog | {{page.release_tag}} | +| Cms | {{page.release_tag}} | + +### 1) Set up behavior + +#### Configure the CMS page search query + +Add the following Query Expander Plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| StoreQueryExpanderPlugin | Extends a search query by filtering down results to the current Store. | None | \Spryker\Client\SearchElasticsearch\Plugin\QueryExpander\StoreQueryExpanderPlugin | +| LocalizedQueryExpanderPlugin | Extends a search query by filtering down results to the current Locale. | None | \Spryker\Client\SearchElasticsearch\Plugin\QueryExpander\LocalizedQueryExpanderPlugin | +| SortedCmsPageQueryExpanderPlugin | Extends a search query by sorting parameters. | None | \Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\QueryExpander\SortedCmsPageQueryExpanderPlugin | +| PaginatedCmsPageQueryExpanderPlugin | Extends a search query by pagination parameters. | None | \Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\QueryExpander\PaginatedCmsPageQueryExpanderPlugin | +| IsActiveQueryExpanderPlugin | Extends a search query by filtering down only active results. | None | \Spryker\Client\SearchElasticsearch\Plugin\QueryExpander\IsActiveQueryExpanderPlugin | +| IsActiveInDateRangeQueryExpanderPlugin | Extends a search query by filtering down results to be active by the current date time. | None | \Spryker\Client\SearchElasticsearch\Plugin\QueryExpander\IsActiveInDateRangeQueryExpanderPlugin | + +Add the following Result Formatter Plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SortedCmsPageSearchResultFormatterPlugin | Formats the sort-related raw search result data. | None | \Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter\SortedCmsPageSearchResultFormatterPlugin | +| PaginatedCmsPageResultFormatterPlugin | Formats the pagination-related raw search result data. | None | \Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter\PaginatedCmsPageResultFormatterPlugin | +| RawCmsPageSearchResultFormatterPlugin | Formats the CMS page hits related raw search result data. | None | \Spryker\Client\CmsPageSearch\Plugin\Elasticsearch\ResultFormatter\RawCmsPageSearchResultFormatterPlugin | + +**src/Pyz/Client/CmsPageSearch/CmsPageSearchDependencyProvider.php** + +```php +
  • Go to the full-text search page (by searching for something in the search bar and search for a term that matches some products and CMS pages as well.
  • Make sure that the tabs component displays the activated tab items properly at the top of the search results.
  • | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-cms-category-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-cms-category-management-feature.md new file mode 100644 index 00000000000..c4366cdbda5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-cms-category-management-feature.md @@ -0,0 +1,174 @@ + + +This document describes how to install the CMS + Category Management feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | CMS | +| --- | --- | --- | +| Category Management | {{page.release_tag}} | {{page.release_tag}} | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/cms-slot-block-category-connector:"^1.0.0" spryker/cms-slot-block-category-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +|MODULE | EXPECTED DIRECTORY | +|--- | --- | +|CmsSlotBlock | vendor/spryker/cms-slot-block | +|CmsSlotBlockCategoryConnector | vendor/spryker/cms-slot-block-category-connector | +|CmsSlotBlockCategoryGui | vendor/spryker/cms-slot-block-category-gui| + +{% endinfo_block %} + +## 2) Set up configuration + +1. Add a CMS slot template to the condition key relation: + +**Pyz\Zed\CmsSlotBlock\CmsSlotBlockConfig** + +```php + [ + CmsSlotBlockCategoryConnectorConfig::CONDITION_KEY, + ], + ]; + } +} +``` + +2. Expand the category template list in the project-level configuration: + +**\Pyz\Zed\Category\CategoryConfig** + +```php + '@CatalogPage/views/simple-cms-block/simple-cms-block.twig', + CmsBlockCategoryConnectorConfig::CATEGORY_TEMPLATE_WITH_CMS_BLOCK => '@CatalogPage/views/catalog-with-cms-block/catalog-with-cms-block.twig', + ]; + $templateList += parent::getTemplateList(); + + return $templateList; + } +} +``` + +## 3) Set up behavior + +1. Prepare the Zed UI form plugins: + +|PLUGIN |SPECIFICATION |NAMESPACE | +|--- | --- | --- | +|CategorySlotBlockConditionFormPlugin |Extends the CMS slot block form with a category condition form. |Spryker\Zed\CmsSlotBlockCategoryGui\Communication\Plugin| + + + +**Pyz\Zed\CmsSlotBlockGui\CmsSlotBlockGuiDependencyProvider** + +```php + **Slots**. + +2. In the *List of Templates* pane, select the template you've configured in [2) Set up configuration](#set-up-configuration). + +3. Make sure that you can see a *List of Blocks for "{selected slot name}" Slot* pane. + +{% endinfo_block %} + + +2. Add the visibility resolver plugin to the `CmsSlotBlock` client: + +|PLUGIN | SPECIFICATION | NAMESPACE | +|--- | --- | --- | +|CategoryCmsSlotBlockConditionResolverPlugin | Provides a visibility resolver for the `CmsSlotBlock` client. | Spryker\Client\CmsSlotBlockCategoryConnector\Plugin\CmsSlotBlock | + + + +**Pyz\Zed\CmsSlotBlockGui\CmsSlotBlockGuiDependencyProvider** + +```php + + + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/CmsBlock/Persistence/Propel/Schema/spy_cms_block.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/CmsSlot/Persistence/Propel/Schema/spy_cms_slot.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database. + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_cms_block | table | created | +| spy_cms_block_glossary_key_mapping | table | created | +| spy_cms_block_storage | table | created | +| spy_cms_block_store | table | created | +| spy_cms_block_template | table | created | +| spy_cms_glossary_key_mapping | table | created | +| spy_cms_page | table | created | +| spy_cms_page_localized_attributes | table | created | +| spy_cms_page_search | table | created | +| spy_cms_page_storage | table | created | +| spy_cms_page_store | table | created | +| spy_cms_slot | table | created | +| spy_cms_slot_block | table | created | +| spy_cms_slot_bloc_storage | table | created | +| spy_cms_slot_storage | table | created | +| spy_cms_slot_template | table | created | +| spy_cms_slot_to_cms_slot_template | table | created | +| spy_cms_template | table | created | +| spy_cms_version | table | created | + +Make sure that the following changes have been applied in transfer objects. + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| SpyCmsTemplateEntity | class | created | src/Generated/Shared/Transfer/SpyCmsTemplateEntityTransfer | +| SpyCmsPageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsPageEntityTransfer | +| SpyCmsPageStoreEntity | class | created | src/Generated/Shared/Transfer/SpyCmsPageStoreEntityTransfer | +| SpyCmsGlossaryKeyMappingEntity | class | created | src/Generated/Shared/Transfer/SpyCmsGlossaryKeyMappingEntityTransfer | +| SpyCmsVersionEntity | class | created | src/Generated/Shared/Transfer/SpyCmsVersionEntityTransfer | +| SpyCmsBlockTemplateEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockTemplateEntityTransfer | +| SpyCmsBlockGlossaryKeyMappingEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockGlossaryKeyMappingEntityTransfer | +| SpyCmsBlockEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockEntityTransfer | +| SpyCmsBlockStorageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockStorageEntityTransfer | +| SpyCmsBlockStoreEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockStoreEntityTransfer | +| SpyCmsPageStorageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsPageStorageEntityTransfer | +| SpyCmsBlockProductStorageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockProductStorageEntityTransfer | +| SpyCmsBlockCategoryStorageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsBlockCategoryStorageEntityTransfer | +| SpyCmsSlotEntity | class | created | src/Generated/Shared/Transfer/SpyCmsSlotEntityTransfer | +| SpyCmsSlotBlockEntity | class | created | src/Generated/Shared/Transfer/SpyCmsSlotBlockEntityTransfer | +| SpyCmsSlotStorageEntity | class | created | src/Generated/Shared/Transfer/SpyCmsSlotStorageEntityTransfer | +| SpyCmsSlotTemplateEntity | class | created | src/Generated/Shared/Transfer/SpyCmsSlotTemplateEntity | +| SpyCmsSlotToCmsSlotTemplateEntity | class | created | src/Generated/Shared/Transfer/SpyCmsSlotToCmsSlotTemplateEntity | +| CmsTemplate | class | created | src/Generated/Shared/Transfer/CmsTemplateTransfer | +| Page | class | created | src/Generated/Shared/Transfer/PageTransfer | +| CmsPageLocalizedAttributes | class | created | src/Generated/Shared/Transfer/CmsPageLocalizedAttributesTransfer | +| PageKeyMapping | class | created | src/Generated/Shared/Transfer/PageKeyMappingTransfer | +| CmsBlock | class | created | src/Generated/Shared/Transfer/CmsBlockTransfer | +| CmsPage | class | created | src/Generated/Shared/Transfer/CmsPageTransfer | +| CmsPageAttributes | class | created | src/Generated/Shared/Transfer/CmsPageAttributesTransfer | +| CmsGlossary | class | created | src/Generated/Shared/Transfer/CmsGlossaryTransfer | +| CmsGlossaryAttributes | class | created | src/Generated/Shared/Transfer/CmsGlossaryAttributesTransfer | +| CmsPlaceholderTranslation | class | created | src/Generated/Shared/Transfer/CmsPlaceholderTranslationTransfer | +| CmsVersion | class | created | src/Generated/Shared/Transfer/CmsVersionTransfer | +| CmsVersionData | class | created | src/Generated/Shared/Transfer/CmsVersionDataTransfer | +| LocaleCmsPageData | class | created | src/Generated/Shared/Transfer/LocaleCmsPageDataTransfer | +| FlattenedLocaleCmsPageDataRequest | class | created | src/Generated/Shared/Transfer/FlattenedLocaleCmsPageDataRequestTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| CmsBlockGlossary | class | created | src/Generated/Shared/Transfer/CmsBlockGlossaryTransfer | +| CmsBlockGlossaryPlaceholder | class | created | src/Generated/Shared/Transfer/CmsBlockGlossaryPlaceholderTransfer | +| CmsBlockGlossaryPlaceholderTranslation | class | created | src/Generated/Shared/Transfer/CmsBlockGlossaryPlaceholderTranslationTransfer | +| CmsBlockTemplate | class | created | src/Generated/Shared/Transfer/CmsBlockTemplateTransfer | +| Category | class | created | src/Generated/Shared/Transfer/CategoryTransfer | +| CmsBlockCategoryPosition | class | created | src/Generated/Shared/Transfer/CmsBlockCategoryPositionTransfer | +| CmsBlockProduct | class | created | src/Generated/Shared/Transfer/CmsBlockProductTransfer | +| CmsContentWidgetConfigurationList | class | created | src/Generated/Shared/Transfer/CmsContentWidgetConfigurationListTransfer | +| CmsContentWidgetConfiguration | class | created | src/Generated/Shared/Transfer/CmsContentWidgetConfigurationTransfer | +| CmsContentWidgetFunctions | class | created | src/Generated/Shared/Transfer/CmsContentWidgetFunctionsTransfer | +| CmsContentWidgetFunction | class | created | src/Generated/Shared/Transfer/CmsContentWidgetFunctionTransfer | +| CmsPageMetaAttributes | class | created | src/Generated/Shared/Transfer/CmsPageMetaAttributesTransfer | +| CmsSlot | class | created | src/Generated/Shared/Transfer/CmsSlotTransfer | +| CmsSlotBlock | class | created | src/Generated/Shared/Transfer/CmsSlotBlockTransfer | +| CmsSlotBlockCollection | class | created | src/Generated/Shared/Transfer/CmsSlotBlockCollectionTransfer | +| CmsSlotBlockCondition | class | created | src/Generated/Shared/Transfer/CmsSlotBlockConditionTransfer | +| CmsSlotBlockCriteria | class | created | src/Generated/Shared/Transfer/CmsSlotBlockCriteriaTransfer | +| CmsSlotBlockStorage | class | created | src/Generated/Shared/Transfer/CmsSlotBlockStorageTransfer | +| CmsSlotCriteria | class | created | src/Generated/Shared/Transfer/CmsSlotCriteriaTransfer | +| CmsSlotExternalData | class | created | src/Generated/Shared/Transfer/CmsSlotExternalDataTransfer | +| CmsSlotParams | class | created | src/Generated/Shared/Transfer/CmsSlotParamsTransfer | +| CmsSlotStorage | class | created | src/Generated/Shared/Transfer/CmsSlotStorageTransfer | +| CmsSlotTemplate | class | created | src/Generated/Shared/Transfer/CmsSlotTemplateTransfer | +| CmsSlotTemplateConfiguration | class | created | src/Generated/Shared/Transfer/CmsSlotTemplateConfigurationTransfer | +| ConstraintViolation | class | created | src/Generated/Shared/Transfer/ConstraintViolationTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| Message | class | created | src/Generated/Shared/Transfer/MessageTransfer | +| ValidationResponse | class | created | src/Generated/Shared/Transfer/ValidationResponseTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Update translations: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +You can switch the language in the **Back Office > User Control > User section > Edit > Interface language**. Make sure that the **Content Management** section is translatable. + +{% endinfo_block %} + +### 4) Configure export to the key-value store (Redis or Valkey) and Elasticsearch + +1. Set up event listeners. By doing this step, you enable tables to be published upon a change—create, edit, or delete. + +| PLUGIN | SPECIFICATION | REQUIRED | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | --- | +| CmsStorageEventSubscriber | Registers listeners that are responsible for publishing CMS pages to storage when a related entity changes. | v | | Spryker\Zed\CmsStorage\Communication\Plugin\Event\Subscriber | +| CmsBlockStorageEventSubscriber | Registers listeners that are responsible for publishing CMS blocks to storage when a related entity changes. | v | | Spryker\Zed\CmsBlockStorage\Communication\Plugin\Event\Subscriber | +| CmsPageSearchEventSubscriber | Registers listeners that are responsible for publishing CMS pages to Elasticsearch when a related entity changes. | v | | Spryker\Zed\CmsPageSearch\Communication\Plugin\Event\Subscriber | +| CmsSlotStorageEventSubscriber | Registers listeners that are responsible for publishing slots to storage when a related entity changes. | v | | Spryker\Zed\CmsSlotStorage\Communication\Plugin\Event\Subscriber | +| CmsSlotBlockStorageEventSubscriber | Registers listeners that are responsible for publishing slots to CMS block relations to storage when a related entity changes. | v | | Spryker\Zed\CmsSlotBlockStorage\Communication\Plugin\Event\Subscriber | +| ContentStorageEventSubscriber | Registers listeners that are responsible for publishing content items to storage when a related entity changes. | v | | Spryker\Zed\ContentStorage\Communication\Plugin\Event\Subscriber | +| CmsBlockCategoryStorageEventSubscriber | Registers listeners that are responsible for publishing category to CMS block relations to storage when a related entity changes | | | Spryker\Zed\CmsBlockCategoryStorage\Communication\Plugin\Event\Subscriber | +| CmsBlockProductStorageEventSubscriber | Registers listeners that are responsible for publishing product to CMS block relations to storage when a related entity changes | v | | Spryker\Zed\CmsBlockProductStorage\Communication\Plugin\Event\Subscriber | + +
    +Pyz\Zed\Event\EventDependencyProvider + +```php +add(new CmsStorageEventSubscriber()); + $eventSubscriberCollection->add(new CmsBlockStorageEventSubscriber()); + $eventSubscriberCollection->add(new CmsSlotBlockStorageEventSubscriber()); + $eventSubscriberCollection->add(new CmsSlotStorageEventSubscriber()); + $eventSubscriberCollection->add(new ContentStorageEventSubscriber()); + + // Optional subscribers, use only if you need CMS Block relationship with categories or products. + $eventSubscriberCollection->add(new CmsBlockCategoryStorageEventSubscriber()); + $eventSubscriberCollection->add(new CmsBlockProductStorageEventSubscriber()); + + + /** + * Search Events + */ + $eventSubscriberCollection->add(new CmsPageSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +
    + +1. Add Queue configuration. + +**Pyz\Zed\Queue\QueueDependencyProvider** + +```php + new SynchronizationStorageQueueMessageProcessorPlugin(), + CmsPageSearchConstants::CMS_SYNC_SEARCH_QUEUE => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +**Pyz\Client\RabbitMq\RabbitMqConfig** + +```php +append($this->createQueueOption(CmsStorageConstants::CMS_SYNC_STORAGE_QUEUE, CmsStorageConstants::CMS_SYNC_STORAGE_ERROR_QUEUE)); + $queueOptionCollection->append($this->createQueueOption(CmsPageSearchConstants::CMS_SYNC_SEARCH_QUEUE, CmsPageSearchConstants::CMS_SYNC_SEARCH_ERROR_QUEUE)); + + return $queueOptionCollection; + } +} +``` + +3. Set up re-generate and re-sync features. + +**src/Pyz/Zed/CmsSlotStorage/CmsSlotStorageConfig.php** + +```php + +Example Expected Data Fragment: Redis, CmsBlock + +```json +{ + "id_cms_block": 1, + "fk_template": 1, + "is_active": true, + "key": "blck-1", + "name": "Teaser for home page", + "valid_from": null, + "valid_to": null, + "CmsBlockTemplate": { + "id_cms_block_template": 1, + "template_name": "Title and description block", + "template_path": "@CmsBlock\/template\/title_and_description_block.twig" + }, + "SpyCmsBlockGlossaryKeyMappings": [ + { + "id_cms_block_glossary_key_mapping": 1, + "fk_cms_block": 1, + "fk_glossary_key": 1594, + "placeholder": "title", + "GlossaryKey": { + "id_glossary_key": 1594, + "is_active": true, + "key": "generated.cms.cms-block.Title-and-description-block.title.idCmsBlock.1.uniqueId.1" + } + }, + { + "id_cms_block_glossary_key_mapping": 2, + "fk_cms_block": 1, + "fk_glossary_key": 1595, + "placeholder": "description", + "GlossaryKey": { + "id_glossary_key": 1595, + "is_active": true, + "key": "generated.cms.cms-block.Title-and-description-block.description.idCmsBlock.1.uniqueId.1" + } + } + ], + "SpyCmsBlockStores": [ + { + "id_cms_block_store": 6, + "fk_cms_block": 1, + "fk_store": 3, + "SpyStore": { + "id_store": 3, + "name": "US" + } + }, + { + "id_cms_block_store": 5, + "fk_cms_block": 1, + "fk_store": 2, + "SpyStore": { + "id_store": 2, + "name": "AT" + } + }, + { + "id_cms_block_store": 4, + "fk_cms_block": 1, + "fk_store": 1, + "SpyStore": { + "id_store": 1, + "name": "DE" + } + } + ], + "content_widget_parameter_map": [], + "_timestamp": 1574922736.1419849 +} +``` + + + +**Example Expected Data Fragment: Redis, CmsBlockCategory** + +```json +{ + "id_category": 5, + "cms_block_categories": [ + { + "position": "top", + "block_names": [ + "CMS block for category Computers" + ], + "block_keys": [ + "blck-7" + ] + } + ], + "_timestamp": 1574922738.1811531 +} +``` + +**Example Expected Data Fragment: Redis, CmsBlockProduct** + +```json +{ + "id_product_abstract": 93, + "block_names": + [ + "Product SEO content" + ], + "block_keys": + [ + "blck-3" + ] +} +``` + +**Example Expected Data Fragment: Redis, CmsPage** + +```json +{ + "id_cms_page": 1, + "name": "Impressum", + "template_path": "@Cms\/templates\/placeholders-title-content\/placeholders-title-content.twig", + "placeholders": { + "title": "

    Impressum<\/h2>", + "content": "content page" + }, + "meta_title": "Impressum", + "meta_keywords": "Impressum", + "meta_description": "Impressum", + "url": "\/de\/impressum", + "valid_from": null, + "valid_to": null, + "is_active": true, + "is_searchable": null, + "store_name": null, + "content_widget_parameter_map": [], + "_timestamp": 1574922739.2661631 +} +``` + +**Example Expected Data Fragment: Redis, CmsSlot** + +```json +{ + "key": "slt-1", + "content_provider_type": "SprykerCmsSlotBlock", + "name": "Main", + "description": "As homepage is all content so it has one slot.", + "is_active": true, + "_timestamp": 1574922740.299572 +} +``` + +**Example Expected Data Fragment: Redis, CmsSlotBlock** + +```json +{ + "cmsSlotBlocks": [ + { + "cmsBlockKey": "blck-3", + "conditions": { + "productCategory": { + "all": false, + "productIds": [ + 35, + 66, + 78, + 86, + 93, + 139 + ], + "categoryIds": [] + } + } + } + ], + "_timestamp": 1574937317.705245 +} +``` + +**Example Expected Data Fragment: Elasticsearch, CmsPage** + +```json +{ + "store":"DE", + "locale":"de_DE", + "type":"cms_page", + "is-active":true, + "search-result-data": { + "id_cms_page":6, + "name":"Demo Landing Page", + "type":"cms_page", + "url":"/de/demo-landing-page", + }, + "full-text-boosted": [ + "Demo Landing Page", + ], + "full-text": [ + "Demo Landing Page", + "demo,cms page, landing page", + "This is a demo landing page with different content widgets.", + "

    DAS IST EINE GROßARTIGE LANDING PAGE

    ,

    {% raw %}{{{% endraw %} content_banner(\'a396f4cb-2318-5b33-8d85-413354ca5673\', \'top-title\'} {% raw %}}}{% endraw %}


    " + ], + "suggestion-terms": [ + "Demo Landing Page" + ], + "completion-terms": [ + "Demo Landing Page" + ], + "string-sort": { + "name":"Demo Landing Page" + } +} +``` + +### 5) Register XSS Protection Form plugin + +1. Enable the form plugin to add XSS protection options in Backoffice. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------|-----------------------------------------------------------------------------------------------------|---------------|-------------------------------------------| +| SanitizeXssTypeExtensionFormPlugin | Registers options `allowed_attributes`, `allowed_html_tags`, `sanitize_xss` in Backoffice CMS forms | None | Spryker\Zed\Gui\Communication\Plugin\Form | + +**src/Pyz/Zed/Form/FormDependencyProvider.php** + +```php + + */ + protected function getFormPlugins(): array + { + $plugins = [ + new SanitizeXssTypeExtensionFormPlugin(), + ]; + + return $plugins; + } +} +``` + +### 6) Import CMS pages + +1. Prepare your pages data according to your requirements using our demo data: + +
    +vendor/spryker/cms-page-data-import/data/import/cms_page.csv + +```yaml +page_key,template_name,is_searchable,is_active,publish,url.de_DE,url.en_US,name.de_DE,name.en_US,meta_title.de_DE,meta_title.en_US,meta_keywords.de_DE,meta_keywords.en_US,meta_description.de_DE,meta_description.en_US,placeholder.title.de_DE,placeholder.title.en_US,placeholder.content.de_DE,placeholder.content.en_US +cms-page--1,Placeholders Title & Content,1,1,1,/de/impressum,/en/imprint,Impressum,Imprint,Impressum,Imprint,Impressum,Imprint,Impressum,Imprint,

    Impressum

    ,

    About

    ,"

    Demoshop
    Julie-Wolfthornstraße 1
    10555 Berlin

    Telefon: 030 5678909
    E-Mail: info@spryker.com

    Vertreten durch:
    Spryker
    Geschäftsführer: Max Mustermann
    Registergericht: Hamburg
    Registernummer: 56789

    Registereintrag:
    Eingetragen im Handelsregister.
    Registergericht: Hamburg
    Registernummer: 34567888456789

    Umsatzsteuer-ID:
    Umsatzsteuer-Identifikationsnummer nach §27a Umsatzsteuergesetz:
    34567

    Quelle: Nachfolgend möchten wir Sie über unsere Datenschutzerklärung informieren. Sie finden hier Informationen über die Erhebung und Verwendung persönlicher Daten bei der Nutzung unserer Webseite. Wir beachten dabei das für Deutschland geltende Datenschutzrecht. Sie können diese Erklärung jederzeit auf unserer Webseite abrufen.

    Wir weisen ausdrücklich darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen und nicht lückenlos vor dem Zugriff durch Dritte geschützt werden kann.

    Die Verwendung der Kontaktdaten unseres Impressums zur gewerblichen Werbung ist ausdrücklich nicht erwünscht, es sei denn wir hatten zuvor unsere schriftliche Einwilligung erteilt oder es besteht bereits eine Geschäftsbeziehung. Der Anbieter und alle auf dieser Website genannten Personen widersprechen hiermit jeder kommerziellen Verwendung und Weitergabe ihrer Daten.

    Personenbezogene Daten
    Sie können unsere Webseite ohne Angabe personenbezogener Daten besuchen. Soweit auf unseren Seiten personenbezogene Daten (wie Name, Anschrift oder E-Mail Adresse) erhoben werden, erfolgt dies, soweit möglich, auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben. Sofern zwischen Ihnen und uns ein Vertragsverhältnis begründet, inhaltlich ausgestaltet oder geändert werden soll oder Sie an uns eine Anfrage stellen, erheben und verwenden wir personenbezogene Daten von Ihnen, soweit dies zu diesen Zwecken erforderlich ist (Bestandsdaten). Wir erheben, verarbeiten und nutzen personenbezogene Daten soweit dies erforderlich ist, um Ihnen die Inanspruchnahme des Webangebots zu ermöglichen (Nutzungsdaten). Sämtliche personenbezogenen Daten werden nur solange gespeichert wie dies für den geannten Zweck (Bearbeitung Ihrer Anfrage oder Abwicklung eines Vertrags) erforderlich ist. Hierbei werden steuer- und handelsrechtliche Aufbewahrungsfristen berücksichtigt. Auf Anordnung der zuständigen Stellen dürfen wir im Einzelfall Auskunft über diese Daten (Bestandsdaten) erteilen, soweit dies für Zwecke der Strafverfolgung, zur Gefahrenabwehr, zur Erfüllung der gesetzlichen Aufgaben der Verfassungsschutzbehörden oder des Militärischen Abschirmdienstes oder zur Durchsetzung der Rechte am geistigen Eigentum erforderlich ist.

    Auskunftsrecht
    Sie haben das jederzeitige Recht, sich unentgeltlich und unverzüglich über die zu Ihrer Person erhobenen Daten zu erkundigen. Sie haben das jederzeitige Recht, Ihre Zustimmung zur Verwendung Ihrer angegeben persönlichen Daten mit Wirkung für die Zukunft zu widerrufen. Zur Auskunftserteilung wenden Sie sich bitte an den Anbieter unter den Kontaktdaten im Impressum.

    ","

    Demoshop
    Julie-Wolfthornstraße 1
    10555 Berlin

    Telephone: 030 5678909
    E-Mail:
    info@spryker.com

    Represented by
    Spryker
    Managing Director: Max Mustermann
    Register Court: Hamburg
    Register Number: 56789

    Register Entry:
    Entry in Handelsregister.
    Register Court: Hamburg
    Register number: 34567888456789

    Source: Muster-Vorlagen.net – Impressum Generator



    Disclaimer:

    Accountability for content
    The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this context, note that we are accordingly not obliged to monitor merely the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).

    Accountability for links
    Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately.

    Copyright
    Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law (§ 44a et seq. of the copyright law), every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are allowed only for private use, so must not serve either directly or indirectly for earnings. Unauthorized utilization of copyrighted works is punishable (§ 106 of the copyright law).

    " +cms-page--2,Placeholders Title & Content,1,1,1,/de/agb,/en/gtc,AGB,GTC,AGB,GTC,AGB,GTC,AGB,GTC,

    Allgemeine Geschäftsbedingungen (AGB)

    ,

    General Terms and Conditions (GTC)

    ,"

    Allgemeine Geschäftsbedingungen (AGB)

    ]]> content

    § 1 Geltungsbereich & Abwehrklausel

    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.


    § 2 Zustandekommen des Vertrages

    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-E-Mail. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.


    § 3 Eigentumsvorbehalt

    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.


    § 4 Fälligkeit

    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.


    § 5 Gewährleistung

    (1) Die Gewährleistungsrechte des Kunden richten sich nach den allgemeinen gesetzlichen Vorschriften, soweit nachfolgend nichts anderes bestimmt ist. Für Schadensersatzansprüche des Kunden gegenüber dem Anbieter gilt die Regelung in § 6 dieser AGB.

    (2) Die Verjährungsfrist für Gewährleistungsansprüche des Kunden beträgt bei Verbrauchern bei neu hergestellten Sachen 2 Jahre, bei gebrauchten Sachen 1 Jahr. Gegenüber Unternehmern beträgt die Verjährungsfrist bei neu hergestellten Sachen und bei gebrauchten Sachen 1 Jahr. Die vorstehende Verkürzung der Verjährungsfristen gilt nicht für Schadensersatzansprüche des Kunden aufgrund einer Verletzung des Lebens, des Körpers, der Gesundheit sowie für Schadensersatzansprüche aufgrund einer Verletzung wesentlicher Vertragspflichten. Wesentliche Vertragspflichten sind solche, deren Erfüllung zur Erreichung des Ziels des Vertrags notwendig ist, z.B. hat der Anbieter dem Kunden die Sache frei von Sach- und Rechtsmängeln zu übergeben und das Eigentum an ihr zu verschaffen. Die vorstehende Verkürzung der Verjährungsfristen gilt ebenfalls nicht für Schadensersatzansprüche, die auf einer vorsätzlichen oder grob fahrlässigen Pflichtverletzung des Anbieters, seiner gesetzlichen Vertreter oder Erfüllungsgehilfen beruhen. Gegenüber Unternehmern ebenfalls ausgenommen von der Verkürzung der Verjährungsfristen ist der Rückgriffsanspruch nach § 478 BGB.

    (3) Eine Garantie wird von dem Anbieter nicht erklärt.


    § 6 Haftungsausschluss

    (1) Schadensersatzansprüche des Kunden sind ausgeschlossen, soweit nachfolgend nichts anderes bestimmt ist. Der vorstehende Haftungsausschluss gilt auch zugunsten der gesetzlichen Vertreter und Erfüllungsgehilfen des Anbieters, sofern der Kunde Ansprüche gegen diese geltend macht.

    (2) Von dem unter Ziffer 1 bestimmten Haftungsausschluss ausgenommen sind Schadensersatzansprüche aufgrund einer Verletzung des Lebens, des Körpers, der Gesundheit und Schadensersatzansprüche aus der Verletzung wesentlicher Vertragspflichten. Wesentliche Vertragspflichten sind solche, deren Erfüllung zur Erreichung des Ziels des Vertrags notwendig ist, z.B. hat der Anbieter dem Kunden die Sache frei von Sach- und Rechtsmängeln zu übergeben und das Eigentum an ihr zu verschaffen. Von dem Haftungsausschluss ebenfalls ausgenommen ist die Haftung für Schäden, die auf einer vorsätzlichen oder grob fahrlässigen Pflichtverletzung des Anbieters, seiner gesetzlichen Vertreter oder Erfüllungsgehilfen beruhen.

    (3) Vorschriften des Produkthaftungsgesetzes (ProdHaftG) bleiben unberührt.


    § 7 Abtretungs- und Verpfändungsverbot

    Die Abtretung oder Verpfändung von dem Kunden gegenüber dem Anbieter zustehenden Ansprüchen oder Rechten ist ohne Zustimmung des Anbieters ausgeschlossen, sofern der Kunde nicht ein berechtigtes Interesse an der Abtretung oder Verpfändung nachweist.


    § 8 Aufrechnung

    Ein Aufrechnungsrecht des Kunden besteht nur, wenn seine zur Aufrechnung gestellte Forderung rechtskräftig festgestellt wurde oder unbestritten ist.


    § 9 Rechtswahl & Gerichtsstand

    (1) Auf die vertraglichen Beziehungen zwischen dem Anbieter und dem Kunden findet das Recht der Bundesrepublik Deutschland Anwendung. Von dieser Rechtswahl ausgenommen sind die zwingenden Verbraucherschutzvorschriften des Landes, in dem der Kunde seinen gewöhnlichen Aufenthalt hat. Die Anwendung des UN-Kaufrechts ist ausgeschlossen.

    (2) Gerichtsstand für alle Streitigkeiten aus dem Vertragsverhältnis zwischen dem Kunden und dem Anbieter ist der Sitz des Anbieters, sofern es sich bei dem Kunden um einen Kaufmann, eine juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen handelt.


    § 10 Salvatorische Klausel
    Sollte eine Bestimmung dieser Allgemeinen Geschäftsbedingungen unwirksam sein, wird davon die Wirksamkeit der übrigen Bestimmungen nicht berührt.



    Quelle: General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.


    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.


    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.


    Cookies

    We do not use cookies for tracking purposes. You can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies. You do this through your browser (like Internet Explorer) settings. Each browser is a little different, so look at your browser's Help menu to learn the correct way to modify your cookies. If you disable cookies off, some features will be disabled that make your site experience more efficient and some of our services will not function properly.


    Google

    Google's advertising requirements can be summed up by Google's Advertising Principles. They are put in place to provide a positive experience for users. https://support.google.com/adwordspolicy/answer/1316548?hl=en We use Google AdSense Advertising on our website. Google, as a third-party vendor, uses cookies to serve ads on our site. Google's use of the DART cookie enables it to serve ads to our users based on previous visits to our site and other sites on the Internet. Users may opt-out of the use of the DART cookie by visiting the Google Ad and Content Network privacy policy.


    Implementation

    We along with third-party vendors, such as Google use first-party cookies (such as the Google Analytics cookies) and third-party cookies (such as the DoubleClick cookie) or other third-party identifiers together to compile data regarding user interactions with ad impressions and other ad service functions as they relate to our website. Users can set preferences for how Google advertises to you using the Google Ad Settings page. Alternatively, you can opt out by visiting the Network Advertising initiative opt out page or permanently using the Google Analytics Opt Out Browser add on.



    " +cms-page--3,Placeholders Title & Content,1,1,1,/de/datenschutz,/en/privacy,Datenschutzerklärung,Data Privacy,Datenschutzerklärung,Data Privacy,Datenschutzerklärung,Data Privacy,Datenschutzerklärung,Data Privacy,

    Datenschutzerklärung

    ,

    Data Privacy Policy

    ,"

    Die Nutzung unserer Seite ist ohne eine Angabe von personenbezogenen Daten möglich. Für die Nutzung einzelner Services unserer Seite können sich hierfür abweichende Regelungen ergeben, die in diesem Falle nachstehend gesondert erläutert werden. Ihre personenbezogenen Daten (z.B. Name, Anschrift, E-Mail, Telefonnummer, u.ä.) werden von uns nur gemäß den Bestimmungen des deutschen Datenschutzrechts verarbeitet. Daten sind dann personenbezogen, wenn sie eindeutig einer bestimmten natürlichen Person zugeordnet werden können. Die rechtlichen Grundlagen des Datenschutzes finden Sie im Bundesdatenschutzgesetz (BDSG) und dem Telemediengesetz (TMG). Nachstehende Regelungen informieren Sie insoweit über die Art, den Umfang und Zweck der Erhebung, die Nutzung und die Verarbeitung von personenbezogenen Daten durch den Anbieter

    Wir weisen darauf hin, dass die internetbasierte Datenübertragung Sicherheitslücken aufweist, ein lückenloser Schutz vor Zugriffen durch Dritte somit unmöglich ist.

    Auskunft/Widerruf/Löschung

    Sie können sich aufgrund des Bundesdatenschutzgesetzes bei Fragen zur Erhebung, Verarbeitung oder Nutzung Ihrer personenbezogenen Daten und deren Berichtigung, Sperrung, Löschung oder einem Widerruf einer erteilten Einwilligung unentgeltlich an uns wenden. Wir weisen darauf hin, dass Ihnen ein Recht auf Berichtigung falscher Daten oder Löschung personenbezogener Daten zusteht, sollte diesem Anspruch keine gesetzliche Aufbewahrungspflicht entgegenstehen.

    der Anwaltskanzlei Weiß & Partner

    ","

    Our website may be used without entering personal information. Different rules may apply to certain services on our site, however, and are explained separately below. We collect personal information from you (e.g. name, address, email address, telephone number, etc.) in accordance with the provisions of German data protection statutes. Information is considered personal if it can be associated exclusively to a specific natural person. The legal framework for data protection may be found in the German Federal Data Protection Act (BDSG) and the Telemedia Act (TMG). The provisions below serve to provide information as to the manner, extent and purpose for collecting, using and processing personal information by the provider.

    Please be aware that data transfer via the internet is subject to security risks and, therefore, complete protection against third-party access to transferred data cannot be ensured.

    Information/Cancellation/Deletion

    On the basis of the Federal Data Protection Act, you may contact us at no cost if you have questions relating to the collection, processing or use of your personal information, if you wish to request the correction, blocking or deletion of the same, or if you wish to cancel explicitly granted consent. Please note that you have the right to have incorrect data corrected or to have personal data deleted, where such claim is not barred by any legal obligation to retain this data.

    Sample Data Privacy Policy Statement provided by the Law Offices of Weiß & Partner

    " +cms-page--4,Placeholders Title & Content,1,0,1,/de/loremde,/en/lorem,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,Lorem ipsum,"{% raw %}{{{% endraw %} chart('testChart', 'testChart') {% raw %}}}{% endraw %}
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.","{% raw %}{{{% endraw %} chart('testChart', 'testChart') {% raw %}}}{% endraw %}
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem." +cms-page--5,Placeholders Title & Content,1,1,0,/de/dolorde,/en/dolor,Dolor sit amet,Dolor sit amet,Dolor sit amet,Dolor sit amet,Dolor sit amet,Dolor sit amet,Dolor sit amet,Dolor sit amet,Lorem ipsum,Lorem ipsum,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.","Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem." +cms-page--6,Placeholders Title & Content,1,1,1,/de/demo-landing-page,/en/demo-landing-page,Demo Landing Page,Demo Landing Page,Demo Landing Page,Demo Landing Page,"demo,cms page, landing page","demo,cms page, landing page",This is a demo landing page with different content widgets.,This is a demo landing page with different content widgets.,"

    DAS IST EINE GROßARTIGE LANDING PAGE

    ","

    THIS IS A GREAT LANDING PAGE

    ","

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non erat felis. Suspendisse nulla quam, dictum vitae malesuada a, ullamcorper eu urna. Sed diam tellus, feugiat iaculis consequat eu, commodo in dui. Integer ac ipsum urna. Aliquam rhoncus varius felis at dignissim. Nulla id justo id nunc lacinia efficitur. Etiam nec vehicula lorem. Phasellus ut lacus eu lorem luctus luctus. Quisque id vestibulum lectus, vel aliquam erat. Praesent ut erat quis magna varius tempor et sed sapien. Cras ac turpis id ligula gravida dignissim in sed nisl. Suspendisse scelerisque eros vel risus sagittis, in ultricies odio commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

    Duis nunc dolor, vestibulum eu cursus ut, facilisis eget justo. Ut quis placerat mauris. In cursus enim purus, a mollis felis cursus non. Mauris rutrum a ante a rutrum. Aliquam gravida tortor et cursus pharetra. Ut id sagittis arcu, eu convallis felis. Integer fermentum convallis lorem, eu posuere ex ultricies scelerisque. Suspendisse et consectetur mauris, vel rhoncus elit. Sed ultrices eget lacus quis rutrum. Aliquam erat volutpat. Aliquam varius mauris purus, non imperdiet turpis tempor vel. Donec vitae scelerisque mi.


    Dies ist eine Liste von Produkten auf einer CMS Seite:

    {% raw %}{{{% endraw %} product(['093', '066', '035', '083', '021','055']) {% raw %}}}{% endraw %}


    Sed volutpat felis non elit elementum fermentum. Sed sit amet nunc lacinia ligula malesuada pretium. Duis imperdiet sem id nibh tristique, non convallis nunc luctus. Fusce congue vestibulum purus in rhoncus. Suspendisse eu nisl non diam ornare convallis. Nullam cursus, magna vitae porttitor consectetur, leo justo volutpat augue, vitae gravida eros metus ac diam. Donec iaculis diam at massa posuere posuere. Ut molestie, mauris nec tempus aliquam, massa mauris pellentesque ligula, eu mattis quam diam nec magna. Nunc ante odio, pulvinar ac nisl quis, efficitur eleifend enim. Nam consectetur placerat ligula, nec aliquet eros feugiat quis.

    Sed eget imperdiet dolor. Nullam fringilla facilisis odio eu mattis. Morbi nibh erat, ornare et malesuada vel, commodo vel ligula. Donec maximus odio dolor, in aliquam mi tempus eu. Vivamus imperdiet imperdiet hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec quis dapibus libero, id sagittis dolor. Sed efficitur malesuada turpis sit amet efficitur. Etiam mattis ex elit, sit amet cursus sapien maximus id. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.


    Dies ist eine Liste von Produkt-Gruppen auf einer CMS Seite:

    {% raw %}{{{% endraw %} product_group(['095', '009', '052', '005', '188', '090', '084', '195']) {% raw %}}}{% endraw %}


    Curabitur ipsum nulla, mollis vel tellus a, tristique tempor sapien. Mauris ut urna molestie, cursus nunc eget, lacinia erat. Donec efficitur, nisl a porta dapibus, nisi ipsum efficitur ipsum, eu auctor turpis ipsum vel sapien. Maecenas molestie risus odio. Suspendisse lobortis dapibus nisi non accumsan. Ut mattis tincidunt odio eu convallis. Nulla leo neque, scelerisque eu sagittis vitae, consectetur vel lacus. Aliquam erat volutpat. Nam euismod aliquet urna eget congue.


    Dies ist ein Produkt-Set auf einer CMS Seite:

    {% raw %}{{{% endraw %} product_set(['2_sony_set']) {% raw %}}}{% endraw %}","

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non erat felis. Suspendisse nulla quam, dictum vitae malesuada a, ullamcorper eu urna. Sed diam tellus, feugiat iaculis consequat eu, commodo in dui. Integer ac ipsum urna. Aliquam rhoncus varius felis at dignissim. Nulla id justo id nunc lacinia efficitur. Etiam nec vehicula lorem. Phasellus ut lacus eu lorem luctus luctus. Quisque id vestibulum lectus, vel aliquam erat. Praesent ut erat quis magna varius tempor et sed sapien. Cras ac turpis id ligula gravida dignissim in sed nisl. Suspendisse scelerisque eros vel risus sagittis, in ultricies odio commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

    Duis nunc dolor, vestibulum eu cursus ut, facilisis eget justo. Ut quis placerat mauris. In cursus enim purus, a mollis felis cursus non. Mauris rutrum a ante a rutrum. Aliquam gravida tortor et cursus pharetra. Ut id sagittis arcu, eu convallis felis. Integer fermentum convallis lorem, eu posuere ex ultricies scelerisque. Suspendisse et consectetur mauris, vel rhoncus elit. Sed ultrices eget lacus quis rutrum. Aliquam erat volutpat. Aliquam varius mauris purus, non imperdiet turpis tempor vel. Donec vitae scelerisque mi.


    This is a list of products in a CMS page:

    {% raw %}{{{% endraw %} product(['093', '066', '035', '083', '021','055']) {% raw %}}}{% endraw %}


    Sed volutpat felis non elit elementum fermentum. Sed sit amet nunc lacinia ligula malesuada pretium. Duis imperdiet sem id nibh tristique, non convallis nunc luctus. Fusce congue vestibulum purus in rhoncus. Suspendisse eu nisl non diam ornare convallis. Nullam cursus, magna vitae porttitor consectetur, leo justo volutpat augue, vitae gravida eros metus ac diam. Donec iaculis diam at massa posuere posuere. Ut molestie, mauris nec tempus aliquam, massa mauris pellentesque ligula, eu mattis quam diam nec magna. Nunc ante odio, pulvinar ac nisl quis, efficitur eleifend enim. Nam consectetur placerat ligula, nec aliquet eros feugiat quis.

    Sed eget imperdiet dolor. Nullam fringilla facilisis odio eu mattis. Morbi nibh erat, ornare et malesuada vel, commodo vel ligula. Donec maximus odio dolor, in aliquam mi tempus eu. Vivamus imperdiet imperdiet hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec quis dapibus libero, id sagittis dolor. Sed efficitur malesuada turpis sit amet efficitur. Etiam mattis ex elit, sit amet cursus sapien maximus id. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.


    This is a list of product groups in a CMS page:

    {% raw %}{{{% endraw %} product_group(['095', '009', '052', '005', '188', '090', '084', '195']) {% raw %}}}{% endraw %}


    Curabitur ipsum nulla, mollis vel tellus a, tristique tempor sapien. Mauris ut urna molestie, cursus nunc eget, lacinia erat. Donec efficitur, nisl a porta dapibus, nisi ipsum efficitur ipsum, eu auctor turpis ipsum vel sapien. Maecenas molestie risus odio. Suspendisse lobortis dapibus nisi non accumsan. Ut mattis tincidunt odio eu convallis. Nulla leo neque, scelerisque eu sagittis vitae, consectetur vel lacus. Aliquam erat volutpat. Nam euismod aliquet urna eget congue.


    This a product set in a CMS page:

    {% raw %}{{{% endraw %} product_set(['2_sony_set']) {% raw %}}}{% endraw %}" +cms-page--7,Placeholders Title & Content,1,1,1,/de/ruecknahmegarantie,/en/return-policy,Rücknahmegarantie,Return policy,Rücknahmegarantie,Return policy,,,,,"

    Rücknahmegarantie

    ","

    Return policy

    ","

    Option zur Rücksendung von Waren bis 30 Tage nach Erhalt

    Unbeschadet Ihres gesetzlichen Widerrufsrechts bieten wir Ihnen die Möglichkeit, die Ware innerhalb von 30 Tagen nach Erhalt zurückzusenden. Mit dieser Rücksendeoption können Sie den Vertrag auch nach Ablauf der 14-tägigen Widerrufsfrist innerhalb von 30 Tagen nach Erhalt kündigen, indem Sie die Ware an uns zurücksenden (diese Frist beginnt mit dem Erhalt der Ware).

    Wenn Sie unsere Waren zurücksenden, können Sie das Ihrer Bestellung beigefügte Rücksendeetikett verwenden oder das Etikett selbst von Ihrer Kundenkontoseite ausdrucken. Bitte wenden Sie sich an den Kundendienst, wenn Sie Probleme beim Herunterladen des Rücksendeetiketts haben oder keinen Zugang zu einem Drucker haben.

    Ihre Ware gilt innerhalb von 30 Tagen als zurückgesandt, wenn Sie sie innerhalb dieser Zeit versenden. Ihre Ausübung dieser Rückgabeoption setzt jedoch voraus, dass die Ware vollständig im Originalzustand, intakt und unbeschädigt sowie in der Originalverpackung zurückgesandt wird. Bis zum Ablauf der Frist zur Ausübung des gesetzlichen Widerrufsrechts gelten ausschließlich die gesetzlichen Bestimmungen dieses Rechts. Die Möglichkeit, Waren zurückzusenden, schränkt Ihre gesetzlichen Gewährleistungsrechte, auf die Sie ohne Einschränkung Anspruch haben, nicht ein. Die Option zur Rücksendung von Waren gilt nicht für Geschenkgutscheine.

    Das freiwillige Rückgaberecht von 30 Tagen besteht nicht für Verträge mit versiegelten Waren, die nach Lieferung entsiegelt wurden und aus hygienischen Gründen nicht für die Rücksendung geeignet sind.

    Die gesetzlichen Gewährleistungsrechte bleiben vom freiwilligen 30-tägigen Rückgaberecht unberührt. Das freiwillige 30-tägige Rückgaberecht gilt nicht für den Kauf von Geschenkgutscheinen.

    ","

    Option to return merchandise up to 30 days after receipt

    Without prejudice to your statutory right of revocation, we offer you the option of returning the merchandise within 30 days of you receiving them. This return option allows you, even after the 14-day revocation period has expired, to cancel the contract by returning the merchandise to us, within 30 days of receiving them (this period commences upon your receipt of the merchandise).

    If you are returning our merchandise, you can use the return shipping label enclosed with your order, or you can print the label out yourself from your customer account page. Please contact Customer Care if you have any problems downloading the return shipping label or you do not have access to a printer.

    Your merchandise will be deemed returned within 30 days if you send it within such time. However, your exercise of this return option is preconditioned upon the merchandise being returned in full in its original condition, intact and undamaged, and in its original packaging. Until the period for exercising the statutory right of revocation expires, the statutory provisions governing this right shall apply exclusively. The option to return merchandise does not limit your statutory warranty rights, to which you remain entitled without qualification. The option to return merchandise does not apply to gift vouchers.

    The voluntary 30 days return right does not exist for contracts subject to sealed goods which have been unsealed after delivery and which are not suitable for return because of hygienic reasons.

    The statutory warranty rights remain unaffected from the voluntary 30 days return right. The voluntary 30 days right of return is not applicable to the purchase of gift vouchers.

    " +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +|template_name |yes |string |static full |Template name. | +|is_searchable |yes |bool |1 |Flag that defines if entity is searchable. | +|is_active |yes |bool | 0|Flag that defines if entity is active. | +|publish |yes | bool|1 | Flag that defines if entity is published.| +|page_key |yes |string |page_5 |Unique page identifier. | +|url.*(de_DE,en_US) |yes |string |/de/lorem |Page URL. | +|name.*(de_DE,en_US) |yes |string |Lorem ipsum |Page name. | +|meta_title.*(de_DE,en_US) |yes |string |Lorem ipsum | Meta title.| +| meta_keywords.*(de_DE,en_US)|yes |string |Lorem ipsum |Meta keywords. | +|meta_description.*(de_DE,en_US) | yes|string |Lorem ipsum |Meta description. | +| placeholder.title.*(de_DE,en_US)|yes |string |Lorem ipsum |Title content. | +| placeholder.content.*(de_DE,en_US)|yes |string | Lorem ipsum| Page content.| + + +**vendor/spryker/cms-page-data-import/data/import/cms_page_store.csv** + +```yaml +page_key,store_name +cms-page--1,DE +cms-page--1,AT +cms-page--1,US +cms-page--2,DE +cms-page--2,AT +cms-page--2,US +cms-page--3,DE +cms-page--3,AT +cms-page--3,US +cms-page--4,DE +cms-page--4,AT +cms-page--4,US +cms-page--5,DE +cms-page--5,AT +cms-page--5,US +cms-page--6,DE +cms-page--6,AT +cms-page--6,US +cms-page--7,DE +cms-page--7,AT +cms-page--7,US +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| page_key | ✓ | string | page_5 | Unique page identifier. | +| store_name | ✓ | string | DE | Unique store identifier. | + +
    +vendor/spryker/cms-slot-data-import/data/import/cms_block.csv + +```yaml +block_key,block_name,template_name,template_path,active,placeholder.title.de_DE,placeholder.title.en_US,placeholder.description.de_DE,placeholder.description.en_US,placeholder.link.de_DE,placeholder.link.en_US,placeholder.content.de_DE,placeholder.content.en_US +blck-1,Teaser for home page,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Static CMS Block,Static CMS Block,"

    Sed imperdiet non quam nec molestie. Integer eu ipsum non odio dignissim rutrum. Proin malesuada metus ac tempor convallis. Pellentesque finibus, urna et vestibulum egestas, metus purus porta ligula, sit amet tincidunt dui justo vel nulla. Nam sodales nisi vel augue consectetur malesuada. Nulla semper neque a nunc tristique ullamcorper. Mauris at nisi non elit fringilla commodo. Curabitur at libero sed nisl condimentum cursus eget nec ligula. Aenean nec elit ut lacus feugiat fermentum. Phasellus quis quam mi. Duis id arcu quis ipsum viverra egestas at at diam. Cras vel dui maximus, scelerisque dui ut, suscipit lectus.

    ","

    Ut cursus, ligula vel pretium porta, justo nulla consectetur mauris, in aliquet nisl sapien feugiat lectus. Pellentesque sit amet sagittis justo, congue fringilla lacus. Sed vel dui et nunc sodales feugiat non in erat. Aliquam nunc mi, dignissim id tempor bibendum, sodales a tellus. Aliquam vitae efficitur turpis, quis consequat neque. Suspendisse interdum semper mi. Cras tortor justo, pretium at convallis a, lobortis non lorem. Duis ullamcorper sagittis efficitur. In erat libero, suscipit ac metus in, varius laoreet neque. Morbi ligula arcu, rutrum facilisis varius non, viverra id dui. Curabitur accumsan ultricies mauris eget vestibulum. Mauris pellentesque molestie nibh eu finibus. Fusce ut gravida massa, et vehicula arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed convallis erat ut mi pretium dapibus. Ut orci leo, scelerisque vitae velit a, ultricies porta ligula.

    ",,,, +blck-2,Home Page,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Empfohlene Produkte,Featured Products,"

    {% raw %}{{{% endraw %} product_group(['035', '066', '078', '086', '093','139']) {% raw %}}}{% endraw %}

    ","

    {% raw %}{{{% endraw %} product_group(['035', '066', '078', '086', '093','139']) {% raw %}}}{% endraw %}

    ",,,, +blck-3,Product SEO content,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Product CMS Block,Product CMS Block,"

    Sed imperdiet non quam nec molestie. Integer eu ipsum non odio dignissim rutrum. Proin malesuada metus ac tempor convallis. Pellentesque finibus, urna et vestibulum egestas, metus purus porta ligula, sit amet tincidunt dui justo vel nulla. Nam sodales nisi vel augue consectetur malesuada. Nulla semper neque a nunc tristique ullamcorper. Mauris at nisi non elit fringilla commodo. Curabitur at libero sed nisl condimentum cursus eget nec ligula. Aenean nec elit ut lacus feugiat fermentum. Phasellus quis quam mi. Duis id arcu quis ipsum viverra egestas at at diam. Cras vel dui maximus, scelerisque dui ut, suscipit lectus.

    ","

    Ut cursus, ligula vel pretium porta, justo nulla consectetur mauris, in aliquet nisl sapien feugiat lectus. Pellentesque sit amet sagittis justo, congue fringilla lacus. Sed vel dui et nunc sodales feugiat non in erat. Aliquam nunc mi, dignissim id tempor bibendum, sodales a tellus. Aliquam vitae efficitur turpis, quis consequat neque. Suspendisse interdum semper mi. Cras tortor justo, pretium at convallis a, lobortis non lorem. Duis ullamcorper sagittis efficitur. In erat libero, suscipit ac metus in, varius laoreet neque. Morbi ligula arcu, rutrum facilisis varius non, viverra id dui. Curabitur accumsan ultricies mauris eget vestibulum. Mauris pellentesque molestie nibh eu finibus. Fusce ut gravida massa, et vehicula arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed convallis erat ut mi pretium dapibus. Ut orci leo, scelerisque vitae velit a, ultricies porta ligula.

    ",,,, +blck-4,Category CMS page showcase for Top position,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Category CMS page showcase for Top position,Category CMS page showcase for Top position,"

    Sed imperdiet non quam nec molestie. Integer eu ipsum non odio dignissim rutrum. Proin malesuada metus ac tempor convallis. Pellentesque finibus, urna et vestibulum egestas, metus purus porta ligula, sit amet tincidunt dui justo vel nulla. Nam sodales nisi vel augue consectetur malesuada. Nulla semper neque a nunc tristique ullamcorper. Mauris at nisi non elit fringilla commodo. Curabitur at libero sed nisl condimentum cursus eget nec ligula. Aenean nec elit ut lacus feugiat fermentum. Phasellus quis quam mi. Duis id arcu quis ipsum viverra egestas at at diam. Cras vel dui maximus, scelerisque dui ut, suscipit lectus.

    ","

    Ut cursus, ligula vel pretium porta, justo nulla consectetur mauris, in aliquet nisl sapien feugiat lectus. Pellentesque sit amet sagittis justo, congue fringilla lacus. Sed vel dui et nunc sodales feugiat non in erat. Aliquam nunc mi, dignissim id tempor bibendum, sodales a tellus. Aliquam vitae efficitur turpis, quis consequat neque. Suspendisse interdum semper mi. Cras tortor justo, pretium at convallis a, lobortis non lorem. Duis ullamcorper sagittis efficitur. In erat libero, suscipit ac metus in, varius laoreet neque. Morbi ligula arcu, rutrum facilisis varius non, viverra id dui. Curabitur accumsan ultricies mauris eget vestibulum. Mauris pellentesque molestie nibh eu finibus. Fusce ut gravida massa, et vehicula arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed convallis erat ut mi pretium dapibus. Ut orci leo, scelerisque vitae velit a, ultricies porta ligula.

    ",,,, +blck-5,Category CMS page showcase for Middle position,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Category CMS page showcase for Middle position,Category CMS page showcase for Middle position,

    Sed imperdiet non quam nec molestie. Integer eu ipsum non odio dignissim rutrum.

    ,"

    Ut cursus, ligula vel pretium porta, justo nulla consectetur mauris, in aliquet nisl sapien feugiat lectus.

    ",,,, +blck-6,Category CMS page showcase for Bottom position,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,Category CMS page showcase for Bottom position,Category CMS page showcase for Bottom position,"

    Sed imperdiet non quam nec molestie. Integer eu ipsum non odio dignissim rutrum. Proin malesuada metus ac tempor convallis. Pellentesque finibus, urna et vestibulum egestas, metus purus porta ligula, sit amet tincidunt dui justo vel nulla. Nam sodales nisi vel augue consectetur malesuada. Nulla semper neque a nunc tristique ullamcorper. Mauris at nisi non elit fringilla commodo. Curabitur at libero sed nisl condimentum cursus eget nec ligula. Aenean nec elit ut lacus feugiat fermentum. Phasellus quis quam mi. Duis id arcu quis ipsum viverra egestas at at diam. Cras vel dui maximus, scelerisque dui ut, suscipit lectus.

    ","

    Ut cursus, ligula vel pretium porta, justo nulla consectetur mauris, in aliquet nisl sapien feugiat lectus. Pellentesque sit amet sagittis justo, congue fringilla lacus. Sed vel dui et nunc sodales feugiat non in erat. Aliquam nunc mi, dignissim id tempor bibendum, sodales a tellus. Aliquam vitae efficitur turpis, quis consequat neque. Suspendisse interdum semper mi. Cras tortor justo, pretium at convallis a, lobortis non lorem. Duis ullamcorper sagittis efficitur. In erat libero, suscipit ac metus in, varius laoreet neque. Morbi ligula arcu, rutrum facilisis varius non, viverra id dui. Curabitur accumsan ultricies mauris eget vestibulum. Mauris pellentesque molestie nibh eu finibus. Fusce ut gravida massa, et vehicula arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed convallis erat ut mi pretium dapibus. Ut orci leo, scelerisque vitae velit a, ultricies porta ligula.

    ",,,, +blck-7,CMS block for category Computers,Title and description block,@CmsBlock/template/title_and_description_block.twig,1,"

    DAS IST EINE LANDING PAGE FÜR COMPUTERS

    ","

    THIS IS A LANDING PAGE FOR COMPUTERS

    ","


    Sed volutpat felis non elit elementum fermentum. Sed sit amet nunc lacinia ligula malesuada pretium. Duis imperdiet sem id nibh tristique, non convallis nunc luctus. Fusce congue vestibulum purus in rhoncus. Suspendisse eu nisl non diam ornare convallis. Nullam cursus, magna vitae porttitor consectetur, leo justo volutpat augue, vitae gravida eros metus ac diam. Donec iaculis diam at massa posuere posuere. Ut molestie, mauris nec tempus aliquam, massa mauris pellentesque ligula, eu mattis quam diam nec magna. Nunc ante odio, pulvinar ac nisl quis, efficitur eleifend enim. Nam consectetur placerat ligula, nec aliquet eros feugiat quis.

    Sed eget imperdiet dolor. Nullam fringilla facilisis odio eu mattis. Morbi nibh erat, ornare et malesuada vel, commodo vel ligula. Donec maximus odio dolor, in aliquam mi tempus eu. Vivamus imperdiet imperdiet hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec quis dapibus libero, id sagittis dolor. Sed efficitur malesuada turpis sit amet efficitur. Etiam mattis ex elit, sit amet cursus sapien maximus id. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.


    This is a list of product groups in a CMS page:

    {% raw %}{{{% endraw %} product_group(['139', '141', '152', '140', '143', '150', '132', '151']) {% raw %}}}{% endraw %}","


    Sed volutpat felis non elit elementum fermentum. Sed sit amet nunc lacinia ligula malesuada pretium. Duis imperdiet sem id nibh tristique, non convallis nunc luctus. Fusce congue vestibulum purus in rhoncus. Suspendisse eu nisl non diam ornare convallis. Nullam cursus, magna vitae porttitor consectetur, leo justo volutpat augue, vitae gravida eros metus ac diam. Donec iaculis diam at massa posuere posuere. Ut molestie, mauris nec tempus aliquam, massa mauris pellentesque ligula, eu mattis quam diam nec magna. Nunc ante odio, pulvinar ac nisl quis, efficitur eleifend enim. Nam consectetur placerat ligula, nec aliquet eros feugiat quis.

    Sed eget imperdiet dolor. Nullam fringilla facilisis odio eu mattis. Morbi nibh erat, ornare et malesuada vel, commodo vel ligula. Donec maximus odio dolor, in aliquam mi tempus eu. Vivamus imperdiet imperdiet hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec quis dapibus libero, id sagittis dolor. Sed efficitur malesuada turpis sit amet efficitur. Etiam mattis ex elit, sit amet cursus sapien maximus id. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.


    This is a list of product groups in a CMS page:

    {% raw %}{{{% endraw %} product_group(['139', '141', '152', '140', '143', '150', '132', '151']) {% raw %}}}{% endraw %}",,,, +blck-8,CMS block for the main navigation desktop,Navigation block,@CmsBlock/template/navigation_block.twig,1,,,"{% raw %}{{{% endraw %} content_navigation('navigation-main-desktop', 'tree-inline') {% raw %}}}{% endraw %}","{% raw %}{{{% endraw %} content_navigation('navigation-main-desktop', 'tree-inline') {% raw %}}}{% endraw %}",,,, +blck-9,CMS block for the main navigation mobile,Navigation block,@CmsBlock/template/navigation_block.twig,1,,,"{% raw %}{{{% endraw %} content_navigation('navigation-main-mobile', 'tree') {% raw %}}}{% endraw %}","{% raw %}{{{% endraw %} content_navigation('navigation-main-mobile', 'tree') {% raw %}}}{% endraw %}",,,, +blck-10,CMS block for the footer navigation,Navigation block,@CmsBlock/template/navigation_block.twig,1,,,"
    {% raw %}{{{% endraw %} content_navigation('navigation-footer', 'list') {% raw %}}}{% endraw %}
    • {% raw %}{{{% endraw %} 'global.get_in_touch' | trans {% raw %}}}{% endraw %}
    • +49 (0)30 2084983 50
    • info@spryker.com
    {% raw %}{{{% endraw %} 'global.social' | trans {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} content_navigation('navigation-social-links', 'list-inline') {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} 'global.social' | trans {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} content_navigation('navigation-social-links', 'list-inline') {% raw %}}}{% endraw %}
    ","
    {% raw %}{{{% endraw %} content_navigation('navigation-footer', 'list') {% raw %}}}{% endraw %}
    • {% raw %}{{{% endraw %} 'global.get_in_touch' | trans {% raw %}}}{% endraw %}
    • +49 (0)30 2084983 50
    • info@spryker.com
    {% raw %}{{{% endraw %} 'global.social' | trans {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} content_navigation('navigation-social-links', 'list-inline') {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} 'global.social' | trans {% raw %}}}{% endraw %}
    {% raw %}{{{% endraw %} content_navigation('navigation-social-links', 'list-inline') {% raw %}}}{% endraw %}
    ",,,, +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +|block_key |yes |string |blck-31 |Block key. | +| block_name| yes|string |10% Discount |Block name. | +|template_name | yes| string|static full |Template name. | +|template_path |no |string |@ShopUi/templates/page-layout-main/page-layout-main.twig |Path to the Twig template to which this CMS block to slot assignment belongs. | +|active |no |bool |1 |Flag that defines if block is active. | +|placeholder.title.*(de_DE,en_US) |no |string | Lorem ipsum| Title content.| +|placeholder.description.*(de_DE,en_US) | no| string|Lorem ipsum | Description content.| +|placeholder.link.*(de_DE,en_US) |no | string| Lorem ipsum|Link. | +| placeholder.content.*(de_DE,en_US)|no |string |Lorem ipsum |Page content. | + +**vendor/spryker/cms-slot-data-import/data/import/cms_block_store.csv** + +```yaml +block_key,store_name +blck-2,DE +blck-2,AT +blck-2,US +blck-1,DE +blck-1,AT +blck-1,US +blck-3,DE +blck-3,AT +blck-3,US +blck-4,DE +blck-4,AT +blck-4,US +blck-5,DE +blck-5,AT +blck-5,US +blck-6,DE +blck-6,AT +blck-6,US +blck-7,DE +blck-7,AT +blck-7,US +blck-8,DE +blck-8,AT +blck-8,US +blck-9,DE +blck-9,AT +blck-9,US +blck-10,DE +blck-10,AT +blck-10,US +blck-11,DE +blck-11,AT +blck-11,US +blck-12,DE +blck-12,AT +blck-12,US +blck-31,DE +blck-31,AT +blck-31,US +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +|block_key|yes|string|blck-31|Block key.| +|store_name|yes|string|DE|Store name.| + + +**vendor/spryker/cms-slot-data-import/data/import/cms_slot_template.csv** + +```yaml +name,description,template_path +Main Layout,The Slots layout in sections that are repeatable across the Store.,@ShopUi/templates/page-layout-main/page-layout-main.twig +Home Page,"The layout of Slots in the Home Page, always below Store Header including Navigation, and above Store Footer.",@HomePage/views/home/home.twig +Category + Slots,"The layout of Slots in Category Pages, always below Header including Navigation, and above Store Footer. This Templates is used for all Category Pages.",@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig +Product,"The layout of Slots in the Product Pages, always below Header including Navigation, and above Store Footer. This Templates is used for all Products Pages. And, Block Bottom Position.",@ProductDetailPage/views/pdp/pdp.twig +CMS Page: Placeholders Title and Content + Slot,A CMS Page that includes a Slot as well.,@Cms/templates/placeholders-title-content-slot/placeholders-title-content-slot.twig +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| template_path | yes | string | @HomePage/views/home/home.twig | Unique path to the corresponding Twig file. | +| name | yes | string | Home Page | Template name used in the Back Office. | +| description | no | string | text | Template description used in the Back Office. | + +**vendor/spryker/cms-slot-data-import/data/import/cms_slot.csv** + +```yaml +slot_key,name,description,content_provider,template_path,is_active +slt-1,Main,As homepage is all content so it has one slot.,SprykerCmsSlotBlock,@HomePage/views/home/home.twig,1 +slt-2,Top,"On Desktop it's below the Category Image above the Products Grid/List, right side to the Grid/List selector and width is same as the Products Grid/List. On Mobile it's below the Filters/Sorting, above Grid/List selector and width is same as the Products Grid/List.",SprykerCmsSlotBlock,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,1 +slt-3,Middle,On Desktop it's below the Filters/Sorting and width is same as the the Filters/Sorting. No Mobile.,SprykerCmsSlotBlock,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,1 +slt-4,Bottom,"On Desktop and on Mobile it's below the Pagination above the Store Footer, width is same as the Products Grid/List.",SprykerCmsSlotBlock,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,1 +slt-5,Bottom,Exists both on Desktop and Mobile below the Product Details and above Store Footer. Width is as the Product Details.,SprykerCmsSlotBlock,@ProductDetailPage/views/pdp/pdp.twig,1 +slt-6,Bottom,Exists both on Desktop and Mobile below the CMS Page Placeholders and above Store Footer.,SprykerCmsSlotBlock,@Cms/templates/placeholders-title-content-slot/placeholders-title-content-slot.twig,1 +slt-desktop-header,Header desktop view,"In the store Header section, On desktop, below the logo.",SprykerCmsSlotBlock,@ShopUi/templates/page-layout-main/page-layout-main.twig,1 +slt-footer,Footer,"In the store Footer section, On desktop, bottom of the page. On mobile, bottom of the page.",SprykerCmsSlotBlock,@ShopUi/templates/page-layout-main/page-layout-main.twig,1 +slt-mobile-header,Header mobile view,"In the store Header section. On mobile, under the hamburger menu.",SprykerCmsSlotBlock,@ShopUi/templates/page-layout-main/page-layout-main.twig,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| template_path | ✓ | string | @HomePage/views/home/home.twig | Path to the Twig template to which slot is assigned. | +| slot_key | ✓ | string | slt-4 |Unique slot identifier. | +| content_provider | ✓ | string | SprykerCmsSlotBlock | Unique content provider identifier. | +| name | ✓ | string | Home Page Main | Slot name used in the Back Office. | +| description | no | string | text | Slot description used in the Back Office. | +| is_active | ✓ | bool | 1 | Flag that defines if slot is active. | + +**vendor/spryker/cms-slot-block-data-import/data/import/cms_slot_block.csv** + +```yaml +slot_key,block_key,position,template_path,conditions.productCategory.all,conditions.productCategory.skus,conditions.productCategory.category_key,conditions.category.all,conditions.category.category_key,conditions.cms_page.all,conditions.cms_page.page_key +slt-1,blck-2,1,@HomePage/views/home/home.twig,,,,,,, +slt-1,blck-1,2,@HomePage/views/home/home.twig,,,,,,, +slt-2,blck-4,1,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,,,,0,"smartphones,smartwatches,tablets,notebooks",, +slt-3,blck-5,1,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,,,,0,"smartphones,smartwatches,tablets,notebooks",, +slt-4,blck-6,1,@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig,,,,0,"smartphones,smartwatches,tablets,notebooks",, +slt-5,blck-3,1,@ProductDetailPage/views/pdp/pdp.twig,0,"035,066,078,086,093,139",,,,, +slt-desktop-header,blck-8,1,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +slt-footer,blck-31,1,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +slt-footer,blck-10,4,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +slt-footer,blck-11,2,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +slt-footer,blck-12,3,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +slt-mobile-header,blck-9,1,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| template_path | ✓ | string | @HomePage/views/home/home.twig | Path to the Twig template to which this CMS block to slot assignment belongs. | +| slot_key | ✓ | string | slt-4 | Unique slot identifier. | +| block_key | ✓ | string | blck-2 | Unique CMS block identifier. | +| position | ✓ | integer | 1 | CMS Block position in the slot. | +| conditions | no | mixed | | Slot-CMS block conditions data. | + +2. Register the following plugin to enable data import: + +**Pyz\Zed\DataImport\DataImportDependencyProvider** + +```php + Pages > List of CMS pages**. + - In the Back Office, in **Content Management > Pages/Blocks** > *create* or *edit placeholder* pages. +- You can use the twig function `renderCmsBlockAsTwig` in the Back Office templates—for example, in email templates. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the CMS feature frontend. + +### 1) Install the required modules + +```bash +composer require spryker-feature/cms:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CmsBlockWidget | vendor/spryker-shop/cms-block-widget | +| CmsPage | vendor/spryker-shop/cms-page | +| CmsSearchPage | vendor/spryker-shop/cms-search-page | +| CmsSlotBlockWidget | vendor/spryker-shop/cms-slot-block-widget | +| ShopCmsSlot | vendor/spryker-shop/shop-cms-slot | +| ShopCmsSlotExtension | vendor/spryker-shop/shop-cms-slot-extension | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cms.preview.access_denied,You are not logged in or you do not have permission to access this page.,en_US +cms.preview.access_denied,Du bist nicht eingeloggt oder hast keine Berechtigung diese Seite zu betreten.,de_DE +cms.page.sort.relevance,Nach Relevanz sortieren,de_DE +cms.page.sort.relevance,Sort by relevance,en_US +cms.page.sort.name_asc,Nach Name aufsteigend sortieren,de_DE +cms.page.sort.name_asc,Sort by name ascending,en_US +cms.page.sort.name_desc,Nach Name absteigend sortieren,de_DE +cms.page.sort.name_desc,Sort by name descending,en_US +cms.page.itemsFound,Artikel gefunden,de_DE +cms.page.itemsFound,Items found,en_US +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that in the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register route providers in the Yves application: + +**Pyz\Yves\Router\RouterDependencyProvider** + +```php +
  • Config file contains `$config[CmsGuiConstants::CMS_PAGE_PREVIEW_URI] = '/en/cms/preview/%d'; .`
  • The `spryker/customer-user-connector` package is installed.
  • The `spryker/customer-user-connector-gui` package is installed.
  • The `\Spryker\Zed\CustomerUserConnectorGui\Communication\Plugin\UserTableActionExpanderPlugin` plugin is enabled in `\Pyz\Zed\User\UserDependencyProvider::getUserTableActionExpanderPlugins()`.
  • You assigned a customer to your Back Office user.
  • | + +{% info_block warningBox "Verification" %} + +1. Open the *search* page in `http://mysprykershop.com/search/cms?q=`. +2. Log in as the customer assigned to your Back Office user in Yves and open the *preview* page in `http://mysprykershop.com/en/cms/preview/{unpublished CMS page ID}`. + +{% endinfo_block %} + +### 4) Set up widgets + +Enable Twig plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| CmsBlockTwigPlugin | Provides the list of plugins for CMS block widget. See the [table](#plugin-table). | SprykerShop\Yves\CmsBlockWidget\Plugin | +| CmsTwigPlugin | Provides the `spyCms` function. | SprykerShop\Yves\CmsPage\Plugin\Twig | +| CmsContentWidgetTwigPlugin | Provides the list of plugins for enabling content widgets. You can use them inside CMS blocks and page content. However, we recommend using the [Content Items Widgets feature](/docs/pbc/all/content-management-system/latest/base-shop/navigation-feature-overview.html) instead. | Spryker\Yves\CmsContentWidget\Plugin\Twig | +| ShopCmsSlotTwigPlugin | Provides the `cms_slot` Twig tag. | SprykerShop\Yves\ShopCmsSlot\Plugin\Twig | + +**Pyz\Yves\Twig\TwigDependencyProvider** + +```php + + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| CmsBlockWidgetTwigPlugin | Provides the `spyCmsBlock` twig function for rendering block. |SprykerShop\Yves\CmsBlockWidget\Plugin\Twig | +| CmsBlockPlaceholderTwigPlugin | Provides the `spyCmsBlockPlaceholder` Twig function for placeholder. | Spryker\Yves\CmsBlock\Plugin\Twig | + +**Pyz\Yves\CmsBlockWidget\CmsBlockWidgetDependencyProvider** + +```php + new CmsSlotBlockWidgetCmsSlotContentPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the changes by adding a slot widget to a page. See [Templates & Slots Feature Overview](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/templates-and-slots-overview.html) for references. + +{% endinfo_block %} + +### Set up SprykerCmsBlocks content provider behavior + +{% info_block infoBox %} +Follow the further steps only if you are going to use the [visibility conidtions](/docs/pbc/all/content-management-system/latest/base-shop/cms-feature-overview/templates-and-slots-overview.html#visibility-conditions) functionality with `SprykerCmsBlocks` content provider for slots. +{% endinfo_block %} + +#### 1) Install the required modules + +```bash +composer require spryker/cms-slot-block-product-category-connector:"^1.0.0" sspryker/cms-slot-block-product-category-gui:"^1.0.0" spryker/cms-slot-block-category-connector:"^1.0.0" sspryker/cms-slot-block-category-gui:"^1.0.0" spryker/cms-slot-block-cms-connector:"^1.0.0" spryker/cms-slot-block-cms-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CmsSlotBlock | vendor/spryker/cms-slot-block | +| CmsSlotBlockProductCategoryConnector | vendor/spryker/cms-slot-block-product-category-connector | +| CmsSlotBlockProductCategoryGui | vendor/spryker/cms-slot-block-product-category-gui | +| CmsSlotBlockCategoryConnector | vendor/spryker/cms-slot-block-category-connector | +| CmsSlotBlockCategoryGui | vendor/spryker/cms-slot-block-category-gui | +| CmsSlotBlockCmsConnector | vendor/spryker/cms-slot-block-cms-connector | +| CmsSlotBlockCmsGui | vendor/spryker/cms-slot-block-cms-gui | + +{% endinfo_block %} + +#### 2) Set up configuration + +Add the relation of CMS slot template to condition key: + +**Pyz\Zed\CmsSlotBlock\CmsSlotBlockConfig** + +```php + [ + CmsSlotBlockProductCategoryConnectorConfig::CONDITION_KEY, + ], + '@CatalogPage/views/catalog-with-cms-slot/catalog-with-cms-slot.twig' => [ + CmsSlotBlockCategoryConnectorConfig::CONDITION_KEY, + ], + '@Cms/templates/placeholders-title-content-slot/placeholders-title-content-slot.twig' => [ + CmsSlotBlockCmsConnectorConfig::CONDITION_KEY, + ], + ]; + } +} +``` + +#### 3) Enable plugins + +1. Prepare the Back Office form plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| ProductCategorySlotBlockConditionFormPlugin | Extends `CmsSlotBlockForm` with a product category condition form. | Spryker\Zed\CmsSlotBlockProductCategoryGui\Communication\Plugin | +| CategorySlotBlockConditionFormPlugin | Extends `CmsSlotBlockForm` with a category condition form. | Spryker\Zed\CmsSlotBlockCategoryGui\Communication\Plugin | +| CmsSlotBlockConditionFormPlugin | Extends `CmsSlotBlockForm` by with a CMS condition form. | Spryker\Zed\CmsSlotBlockCmsGui\Communication\Plugin | + +**Pyz\Zed\CmsSlotBlockGui\CmsSlotBlockGuiDependencyProvider** + +```php + Slots**. +2. In **List of Templates**, choose the template for which you've created the visibility condition. +3. Choose a slot in the **List of Slots for [NAME] Template**. +4. Select or [assign](/docs/pbc/all/content-management-system/latest/base-shop/manage-in-the-back-office/manage-slots.html#assigning-cms-blocks-to-slots) a CMS block to a slot in the **List of Blocks for [NAME] Slot**. +5. Make sure that for each CMS block, there is an additional form allowing you to define the visibility condition you have created. + +{% endinfo_block %} + +2. Add a visibility resolver plugin to the `CmsSlotBlock` client: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| ProductCategoryCmsSlotBlockConditionResolverPlugin | Provides visibility resolver for products and product categories. | Spryker\Client\CmsSlotBlockProductCategoryConnector\Plugin\CmsSlotBlock | +| CategoryCmsSlotBlockConditionResolverPlugin | Provides a visibility resolver for categories. | Spryker\Client\CmsSlotBlockCategoryConnector\Plugin\CmsSlotBlock | +| CmsPageCmsSlotBlockConditionResolverPlugin | Provides a visibility resolver for CMS pages. | Spryker\Client\CmsSlotBlockCmsConnector\Plugin\CmsSlotBlock | + +**Pyz\Client\CmsSlotBlock\CmsSlotBlockDependencyProvider** + +```php + + */ + public function getAvailableCommentTags(): array + { + return [ + 'delivery', + 'important', + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the comment tags defined in the `getAvailableCommentTags()` method of the `CommentConfig` class are available on the **Cart** page. + +{% endinfo_block %} + +**config/Shared/config_default.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new CommentDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import comment +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_comment_thread` +- `spy_comment` +- `spy_comment_to_comment_tag` + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------------------------|---------------|--------------------------------------------------| +| CustomerCommentAuthorValidationStrategyPlugin | Validates if a customer with the provided ID exists and if the comment belongs to them. | | Spryker\Zed\Comment\Communication\Plugin\Comment | +| CommentThreadQuoteExpanderPlugin | Expands `QuoteTransfer` with a comment thread. | | Spryker\Zed\Comment\Communication\Plugin\Quote | + +**src/Pyz/Zed/Comment/CommentDependencyProvider.php** + +```php + + */ + protected function getCommentAuthorValidatorStrategyPlugins(): array + { + return [ + new CustomerCommentAuthorValidationStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new CommentThreadQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in as a customer. +2. Add a comment. +3. Reload the page. + Make sure that you can see customer's information under the added comment. + +{% endinfo_block %} + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|--| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/comments:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------|----------------------------------------------| +| CommentWidget | vendor/spryker-shop/comment-widget | +| CommentWidgetExtension | vendor/spryker-shop/comment-widget-extension | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +comment_widget.comments_to_cart,Comments to Cart,en_US +comment_widget.comments_to_cart,Kommentare zum Warenkorb,de_DE +comment_widget.form.add_comment,Add,en_US +comment_widget.form.add_comment,Hinzufügen,de_DE +comment_widget.form.update_comment,Update,en_US +comment_widget.form.update_comment,Aktualisieren,de_DE +comment_widget.form.remove_comment,Remove,en_US +comment_widget.form.remove_comment,Entfernen,de_DE +comment_widget.form.you,You,en_US +comment_widget.form.you,Sie,de_DE +comment_widget.form.attach,Attach,en_US +comment_widget.form.attach,Anhängen,de_DE +comment_widget.form.unattach,Unattach,en_US +comment_widget.form.unattach, Anhang entfernen,de_DE +comment_widget.form.all,All,en_US +comment_widget.form.all,Alles,de_DE +comment_widget.form.attached,Attached,en_US +comment_widget.form.attached,Angehängt,de_DE +comment_widget.form.button_default,Button,en_US +comment_widget.form.button_default,Schaltfläche,de_DE +comment_widget.form.edited,edited,en_US +comment_widget.form.edited,bearbeitet,de_DE +comment_widget.form.tags,Tags,en_US +comment_widget.form.tags,Tags,de_DE +comment_widget.form.placeholder.add_comment,Add a comment,en_US +comment_widget.form.placeholder.add_comment,Kommentar hinzufügen,de_DE +comment_widget.tags.all,All,en_US +comment_widget.tags.all,Alles,de_DE +comment_widget.tags.delivery,Delivery,en_US +comment_widget.tags.delivery,Lieferung,de_DE +comment_widget.tags.important,Important,en_US +comment_widget.tags.important,Wichtig,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|----------------------------------|----------------------------------------------| +| CommentWidgetRouteProviderPlugin | SprykerShop\Yves\CommentWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + CommentThreadWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| MODULE | TEST | VERIFICATION | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | +| CommentThreadWidget | `{% raw %}{%{% endraw %} widget 'CommentThreadWidget' args \[...\] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | Add a comment on the **Cart** page. Submit the order. Go to the order details page and make sure the comment you've added is displayed in the order. | + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contract-requests-feature.md new file mode 100644 index 00000000000..5962e250eb9 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contract-requests-feature.md @@ -0,0 +1,127 @@ +This document describes how to install the Comments + Merchant B2B Contract Requests feature. + +## Install feature core + +Follow the steps below to install the Comments + Merchant B2B Contract Requests feature core. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Comments | {{page.release_tag}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| Merchant B2B Contract Requests | {{page.release_tag}} | [Install the Merchant B2B Contract Requests feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/comment-merchant-relation-request-connector: "^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------|------------------------------------------------------------| +| CommentMerchantRelationRequestConnector | vendor/spryker/comment-merchant-relation-request-connector | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|---------------------------------------|----------|---------|---------------------------------------------------------------| +| MerchantRelationRequest.commentThread | property | created | src/Generated/Shared/Transfer/MerchantRelationRequestTransfer | +| MerchantRelationship.commentThread | property | created | src/Generated/Shared/Transfer/MerchantRelationshipTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|----------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------| +| CommentThreadMerchantRelationRequestExpanderPlugin | Populates `MerchantRelationRequestTransfer.commentThread` with a related comment thread. | | Spryker\Zed\CommentMerchantRelationRequestConnector\Communication\Plugin\MerchantRelationRequest | +| CopyCommentThreadToMerchantRelationshipPostCreatePlugin | Copies a comment thread from a merchant relation request to a merchant relationship. | | Spryker\Zed\CommentMerchantRelationRequestConnector\Communication\Plugin\MerchantRelationship | + +**src/Pyz/Zed/MerchantRelationRequest/MerchantRelationRequestDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationRequestExpanderPlugins(): array + { + return [ + new CommentThreadMerchantRelationRequestExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Merchant Portal, go to **B2B Contracts** > **Merchant Relation Requests** +2. Select a merchant relation request. + Make sure you can see, add, edit and delete comments. + +{% endinfo_block %} + +**src/Pyz/Zed/MerchantRelationship/MerchantRelationshipDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationshipPostCreatePlugins(): array + { + return [ + new CopyCommentThreadToMerchantRelationshipPostCreatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Merchant Portal, go to **B2B Contracts** > **Merchant Relation Requests**. +2. Select a pending merchant relation request. +3. Add some comments. +4. Approve the merchant relation request. +5. Go to **B2B Contracts** > **Merchant Relations** and select the merchant relation you've created. + Make sure you can see the comments copied from the merchant relation request. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..8ce96f31c00 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-comments-merchant-b2b-contracts-feature.md @@ -0,0 +1,90 @@ +This document describes how to install the Comments + Merchant B2B Contracts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Comments | {{page.release_tag}} | [Install the Comments feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/comment-merchant-relationship-connector: "^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------------|--------------------------------------------------------| +| CommentMerchantRelationshipConnector | vendor/spryker/comment-merchant-relationship-connector | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|------------------------------------|----------|---------|------------------------------------------------------------| +| MerchantRelationship.commentThread | property | created | src/Generated/Shared/Transfer/MerchantRelationshipTransfer | + +{% endinfo_block %} + +## 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|-------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------| +| CommentThreadMerchantRelationshipExpanderPlugin | Populates `MerchantRelationshipTransfer.commentThread` with a related comment thread. | | Spryker\Zed\CommentMerchantRelationshipConnector\Communication\Plugin\MerchantRelationship | + +**src/Pyz/Zed/MerchantRelationship/MerchantRelationshipDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationshipExpanderPlugins(): array + { + return [ + new CommentThreadMerchantRelationshipExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Marketplace** > **Merchant Relations** +2. Click **Edit** next to any merchant relation. + Make sure you can see, add, edit, and delete comments. + +1. In the Merchant Portal, go to **B2B Contracts** > **Merchant Relations** +2. Select a merchant relation. + Make sure you can see, add, edit, and delete comments. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-comments-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-comments-order-management-feature.md new file mode 100644 index 00000000000..39003e3fbd1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-comments-order-management-feature.md @@ -0,0 +1,158 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Comment | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/comment-sales-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CommentSalesConnector | vendor/spryker/comment-sales-connector | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIURATION | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| SalesConfig::getSalesDetailExternalBlocksUrls() | Used to display a block with comments related to the order. | Pyz\Zed\Sales | + +**Pyz\Zed\Sales\SalesConfig.php** + +```php + '/comment-sales-connector/sales/list', + ]; + + $externalBlocks = parent::getSalesDetailExternalBlocksUrls(); + + return array_merge($externalBlocks, $projectExternalBlocks); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the Order detail page in Zed contains a block with comments. + +{% endinfo_block %} + +### 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| Comment | class | created | src/Generated/Shared/Transfer/Comment | +| CommentThread | class | created | src/Generated/Shared/Transfer/CommentThread | +| CommentFilter | class | created | src/Generated/Shared/Transfer/CommentFilter | +| CommentRequest | class | created | src/Generated/Shared/Transfer/CommentRequest | + +{% endinfo_block %} + +### 4) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CommentThreadOrderExpanderPlugin | Expands `OrderTransfer` with `CommentThread`. | None | Spryker\Zed\CommentSalesConnector\Communication\Plugin\Sales | +| CommentThreadAttachedCommentOrderPostSavePlugin | Duplicates `commentThread` from Quote to a new order. | None | Spryker\Zed\CommentSalesConnector\Communication\Plugin\Sales | + +**Pyz\Zed\Sales\SalesDependencyProvider.php** + +```php + + */ + protected function getCommentAuthorValidatorStrategyPlugins(): array + { + return [ + new UserCommentAuthorValidationStrategyPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CommentExtension\Dependency\Plugin\CommentExpanderPluginInterface> + */ + protected function getCommentExpanderPlugins(): array + { + return [ + new UserCommentExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Marketplace** > **Merchant Relations**. +2. Click **Edit** next to a merchant relation. +3. Write a comment and click **Save**. + Make sure the user's information is displayed under the saved comment. + + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-company-account-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-company-account-feature.md new file mode 100644 index 00000000000..ed78efe7cf5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-company-account-feature.md @@ -0,0 +1,794 @@ + + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. The current feature integration guide only adds the *Business on Behalf*, *Company Account Storage*, and *Company Account OAuth functionality*. + +{% endinfo_block %} + +## Install feature core + +Follow the steps below to install feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/company-account:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| BusinessOnBehalf | vendor/spryker/business-on-behalf | +| BusinessOnBehalfDataImport | vendor/spryker/business-on-behalf-data-import | +| CompanyUserStorage | vendor/spryker/company-user-storage | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Adjust the schema definition so that entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_company | Entity.spy_company.update
    Entity.spy_company.delete | +| spy_company_user | Entity.spy_company_user.create
    Entity.spy_company_user.update
    Entity.spy_company_user.delete | + +**src/Pyz/Zed/CompanyUser/Persistence/Propel/Schema/spy_company_user.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/Company/Persistence/Propel/Schema/spy_company.schema.xml** + +```xml + + + + + + + + +
    + +
    +``` + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_company_user.is_default | column | created | + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CompanyUser.isDefault | property | created | src/Generated/Shared/Transfer/CompanyUserTransfer | +| Customer.isOnBehalf | property | created | src/Generated/Shared/Transfer/CustomerTransfer | +| CompanyUserAccessTokenRequestclass | class | created | src/Generated/Shared/Transfer/CompanyUserAccessTokenRequestTransfer | +| CompanyUserStorage | class | created | src/Generated/Shared/Transfer/CompanyUserStorageTransfer | + +Make sure that propel entities have been generated successfully by checking their existence. Also, change the generated entity classes to extend from Spryker core classes. + +| CLASS PATH | EXTENDS | +| --- | --- | +| src/Orm/Zed/CompanyUserStorage/Persistence/SpyCompanyUserStorage.php | Spryker\\Zed\\CompanyUserStorage\\Persistence\\Propel\\AbstractSpyCompanyUserStorage | +| src/Orm/Zed/CompanyUserStorage/Persistence/SpyCompanyUserStorageQuery.php | Spryker\\Zed\\CompanyUserStorage\\Persistence\\Propel\\AbstractSpyCompanyUserStorageQuery | + +Make sure that the changes have been implemented successfully. For this purpose, trigger the following methods and make sure that the preceding events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/CompanyUser/Persistence/Base/SpyCompanyUser.php | prepareSaveEventName(
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/Company/Persistence/Base/SpyCompany.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/CompanyUserStorage/Persistence/Base/SpyCompanyUserStorage.php | sendToQueue() | + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +Follow instructions in the following sections to configure export to the key-value store (Redis or Valkey). + +#### Set up event listeners + +With this step, you can publish tables on change (create, edit, delete) to the `spy_company`, `spy_company_user` and synchronize the data to Storage. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CompanyUserStorageEventSubscriber | Registers listeners that are responsible for publishing company user storage entity changes when a related entity change event occurs. | None | Spryker\Zed\CompanyUserStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new CompanyUserStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +Set up synchronization queue pools to synchronize non-multi-store entities (not store-specific entities) among stores: + +**src/Pyz/Zed/CompanyUserStorage/CompanyUserStorageConfig.php** + +```php +
  • Assumes that the customer keys exist in the database.
  • Assumes that the company keys exist in the database
  • Assumes that the Company Business Unit keys exist in the database.
  • | Spryker\Zed\BusinessOnBehalfDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getCompanyUserFormExpanderPlugins(): array + { + return [ + new CompanyFieldToCompanyUserFormExpanderPlugin(), + new CompanyBusinessUnitToCompanyUserFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CompanyUserGuiExtension\Dependency\Plugin\CompanyUserAttachCustomerFormExpanderPluginInterface> + */ + protected function getCompanyUserAttachCustomerFormExpanderPlugins(): array + { + return [ + new CompanyBusinessUnitToCompanyUserAttachCustomerFormExpanderPlugin(), + new CompanyToCompanyUserAttachCustomerFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CompanyUnitAddressGui/CompanyUnitAddressGuiDependencyProvider.php** + +```php + + */ + protected function getCompanyUnitAddressFormPlugins(): array + { + return [ + new CompanyToCompanyUnitAddressEditFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CompanyRoleGui/CompanyRoleGuiDependencyProvider.php** + +```php + + */ + protected function getCompanyRoleCreateFormExpanderPlugins(): array + { + return [ + new CompanyToCompanyRoleCreateFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/BusinessOnBehalfGui/BusinessOnBehalfGuiDependencyProvider.php** + +```php + + */ + protected function getCustomerBusinessUnitAttachFormExpanderPlugins(): array + { + return [ + new CompanyBusinessUnitToCustomerBusinessUnitAttachFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CompanyBusinessUnitGui/CompanyBusinessUnitGuiDependencyProvider.php** + +```php +namespace Pyz\Zed\CompanyBusinessUnitGui; + +use Spryker\Zed\CompanyBusinessUnitGui\CompanyBusinessUnitGuiDependencyProvider as SprykerCompanyBusinessUnitGuiDependencyProvider; +use Spryker\Zed\CompanyGui\Communication\Plugin\CompanyBusinessUnitGui\CompanyToCompanyBusinessUnitFormExpanderPlugin; + +class CompanyBusinessUnitGuiDependencyProvider extends SprykerCompanyBusinessUnitGuiDependencyProvider +{ + /** + * @return array<\Spryker\Zed\CompanyBusinessUnitGuiExtension\Communication\Plugin\CompanyBusinessUnitFormExpanderPluginInterface> + */ + protected function getCompanyBusinessUnitFormExpanderPlugins(): array + { + return [ + new CompanyToCompanyBusinessUnitFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Log in to a customer account which has multiple company users and a default one. In the session, check if the default company user is assigned to the customer and the `IsOnBehalf` property is set correctly for the customer. + +Make sure that token generation for a company user works. For more information, see [HowTo: Generate a Token for Login](/docs/pbc/all/customer-relationship-management/latest/base-shop/generate-login-tokens.html). + +To make sure the `CompanyBusinessUnitCompanyUserStorageExpanderPlugin` is set up correctly, check the data exported to the key-value storage key `kv:company_user:1` for the `id_company_business_unit:id`. `id_company_business_unit` must be set up to a correct foreign key of the business unit that the company user is assigned to. + +{% endinfo_block %} + +### 6) Generate Zed Translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 7) Build Zed UI frontend + +Enable Javascript and CSS changes for Zed: + +```bash +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +To make sure the transform dropdowns plugins (`CompanyFieldToCompanyUserFormExpanderPlugin`, `CompanyBusinessUnitToCompanyUserFormExpanderPlugin`, +`CompanyToCompanyUserAttachCustomerFormExpanderPlugin`, `CompanyBusinessUnitToCompanyUserAttachCustomerFormExpanderPlugin`, +`CompanyToCompanyUnitAddressEditFormExpanderPlugin`, `CompanyToCompanyRoleCreateFormExpanderPlugin`, `CompanyBusinessUnitToCustomerBusinessUnitAttachFormExpanderPlugin`, `CompanyToCompanyBusinessUnitFormExpanderPlugin`) are set up correctly, open the corresponding form and check that input boxes with search and suggestions are used for the company and business unit fields instead of default select dropdowns. + +Make sure that field labels (like `Company`) and hints (like `Select company`) are translated correctly for the dropdowns. + +{% endinfo_block %} + +## Install feature frontend + +Follow these steps to install feature frontend + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/company-account: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| BusinessOnBehalfWidget | vendor/spryker-shop/business-on-behalf-widget | + +{% endinfo_block %} + +### 2) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +business_on_behalf_widget.no_selected_company,No selected company,en_US +business_on_behalf_widget.no_selected_company,Kein Unternehmen ausgewählt,de_DE +business_on_behalf_widget.change_company_user,Change Company User,en_US +business_on_behalf_widget.change_company_user,Firmenbenutzer Profil ändern,de_DE +company_user.business_on_behalf.error.company_not_active,"You can not select this company user, company is not active.",en_US +company_user.business_on_behalf.error.company_not_active,"Sie können diesen Firmennutzer nicht auswählen da die Firma inaktiv ist",de_DE +company_user.business_on_behalf.error.company_user_invalid,"You can not select this company user, it's invalid.",en_US +company_user.business_on_behalf.error.company_user_invalid,"Sie können diesen Firmennutzer nicht auswählen da er ungültig ist",de_DE +customer_page.error.customer_already_logged_in,Customer already logged in.,en_US +customer_page.error.customer_already_logged_in,Der Kunde ist bereits eingeloggt.,de_DE +customer_page.error.invalid_access_token,Invalid access token.,en_US +customer_page.error.invalid_access_token,Ungültiges Zugriffstoken.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 3) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| BusinessOnBehalfStatusWidget | Displays the selected company users and allows Business on Behalf customers to change it through a link. | None | SprykerShop\Yves\BusinessOnBehalfWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationRequestExpanderPlugins(): array + { + return [ + new AssigneeCompanyBusinessUnitAddressMerchantRelationRequestExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + + +1. In the Merchant Portal, go to **B2B Contracts** > **Merchant Relation Requests**. +2. Select a merchant relation request. + Make sure that, in the **Company Details** section, business units with their names and addresses are displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-company-account-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-company-account-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..557a854565d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-company-account-merchant-b2b-contracts-feature.md @@ -0,0 +1,51 @@ +This document describes how to install the Company Account + Merchant B2B Contracts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | + +## 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|---------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| CompanyUnitAddressMerchantRelationshipExpanderPlugin | Expands `MerchantRelationshipTransfer` with assignee company business unit addresses. | | Spryker\Zed\CompanyUnitAddress\Communication\Plugin\MerchantRelationship | + +**src/Pyz/Zed/MerchantRelationship/MerchantRelationshipDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationshipExpanderPlugins(): array + { + return [ + new CompanyUnitAddressMerchantRelationshipExpanderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +1. In the Merchant Portal, go to **B2B Contracts** > **Merchant Relations**. +2. Select a merchant relation. + Make sure that, in the **Company Details** section, business units with their names and addresses are displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-company-account-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-company-account-order-management-feature.md new file mode 100644 index 00000000000..c36002885ad --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-company-account-order-management-feature.md @@ -0,0 +1,397 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Order Management | {{page.release_tag}} | +| Company Account | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/company-sales-connector: "^1.0.0" spryker/company-business-unit-sales-connector: "^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CompanySalesConnector | vendor/spryker/company-sales-connector | +| CompanyBuseinssUnitSalesConnector | vendor/spryker/company-business-unit-sales-connector | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +console uuid:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_company.uuid | column | created | +| spy_company_business_unit.uuid | column | created | +| spy_sales_order.company_uuid | column | created | +| spy_sales_order.company_business_unit_uuid | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| Company.uuid | property | Created | src/Generated/Shared/Transfer/CompanyTransfer | +| CompanyBusinessUnit.uuid | property | Created | src/Generated/Shared/Transfer/CompanyBusinessUnitTransfer | +| Order.companyUuid | property | Created | src/Generated/Shared/Transfer/OrderTransfer | +| Order.companyBusinessUnitUuid | property | Created | src/Generated/Shared/Transfer/OrderTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +permission.name.SeeCompanyOrdersPermissionPlugin,View Company orders,en_US +permission.name.SeeCompanyOrdersPermissionPlugin,Firmenbestellungen anzeigen,de_DE +permission.name.SeeBusinessUnitOrdersPermissionPlugin,View Business Unit orders,en_US +permission.name.SeeBusinessUnitOrdersPermissionPlugin,Bestellungen von Geschäftsbereichen anzeigen,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SaveCompanyBusinessUnitUuidOrderPostSavePlugin | Expands sales order with company business unit UUID and persists updated entity. | None | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Sales | +| SaveCompanyUuidOrderPostSavePlugin | Expands sales order with company UUID and persists updated entity. | None | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Sales | + +**Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php +?php + +namespace Pyz\Zed\Sales; + +use Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Sales\SaveCompanyBusinessUnitUuidOrderPostSavePlugin; +use Spryker\Zed\CompanySalesConnector\Communication\Plugin\Sales\SaveCompanyUuidOrderPostSavePlugin; +use Spryker\Zed\Sales\SalesDependencyProvider as SprykerSalesDependencyProvider; + +class SalesDependencyProvider extends SprykerSalesDependencyProvider +{ + /** + * @return \Spryker\Zed\SalesExtension\Dependency\Plugin\OrderPostSavePluginInterface[] + */ + protected function getOrderPostSavePlugins(): array + { + return [ + new SaveCompanyBusinessUnitUuidOrderPostSavePlugin(), + new SaveCompanyUuidOrderPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Log in as a company user and place an order. +Check `spy_sales_order` table and make sure that `company_uuid` and `company_business_unit_uuid` fields are filled with respective UUIDs for the recently placed order. + +{% endinfo_block %} + +Register permission plugins at Zed layer. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SeeCompanyOrdersPermissionPlugin | Checks if the customer is allowed to see orders from the same company. | None | Spryker\Zed\CompanySalesConnector\Plugin\Permission | +| SeeBusinessUnitOrdersPermissionPlugin | Checks if the customer is allowed to see orders from same company business unit. | None | Spryker\Zed\CompanyBusinessUnitSalesConnector\Plugin\Permission | + +**Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/ConfigurableBundleStorage/Persistence/Propel/Schema/spy_configurable_bundle_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/ConfigurableBundlePageSearch/Persistence/Propel/Schema/spy_configurable_bundle_template_page_search.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_configurable_bundle_template | table | created | +| spy_configurable_bundle_template_slot | table | created | +| spy_sales_order_configured_bundle | table | created | +| spy_sales_order_configured_bundle_item | table | created | +| spy_configurable_bundle_template_storage | table | created | +| spy_configurable_bundle_template_page_search | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| SpyConfigurableBundleTemplateEntity | class | created | src/Generated/Shared/Transfer/SpyConfigurableBundleTemplateEntityTransfer | +| SpyConfigurableBundleTemplateSlotEntity | class | created | src/Generated/Shared/Transfer/SpyConfigurableBundleTemplateSlotEntityTransfer | +| SpySalesOrderConfiguredBundleEntity | class | created | src/Generated/Shared/Transfer/SpySalesOrderConfiguredBundleEntityTransfer | +| SpySalesOrderConfiguredBundleItemEntity | class | created | src/Generated/Shared/Transfer/SpySalesOrderConfiguredBundleItemEntityTransfer | +| SpyConfigurableBundleTemplateStorageEntity | class | created | src/Generated/Shared/Transfer/SpyConfigurableBundleTemplateStorageEntityTransfer | +| UpdateConfiguredBundleRequest` | class | created | src/Generated/Shared/Transfer/UpdateConfiguredBundleRequestTransfer | +| SalesOrderConfiguredBundleTranslation | class | created | src/Generated/Shared/Transfer/SalesOrderConfiguredBundleTranslationTransfer | +| ConfiguredBundle | class | created | src/Generated/Shared/Transfer/ConfiguredBundleTransfer | +| ConfiguredBundleItem | class | created | src/Generated/Shared/Transfer/ConfiguredBundleItemTransfer | +| ConfigurableBundleTemplate | class | created |src/Generated/Shared/Transfer/ConfigurableBundleTemplateTransfer | +| ConfigurableBundleTemplateSlot | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotTransfer | +| ConfigurableBundleTemplateTranslation | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateTranslationTransfer | +| ConfigurableBundleTemplateSlotTranslation | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotTranslationTransfer | +| ConfigurableBundleTemplateFilter | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateFilterTransfer | +| ConfigurableBundleTemplateSlotFilter | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotFilterTransfer | +| ConfigurableBundleTemplateCollection | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateCollectionTransfer | +| ConfigurableBundleTemplateSlotCollection | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotCollectionTransfer | +| ConfigurableBundleTemplateResponse | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateResponseTransfer | +| ConfigurableBundleTemplateSlotResponse | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotResponseTransfer | +| ConfigurableBundleTemplateSlotEditForm | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotEditFormTransfer | +| ConfigurableBundleTemplateStorage | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateStorageTransfer | +| ConfigurableBundleTemplateSlotStorage | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplateSlotStorageTransfer | +| ConfigurableBundleTemplatePageSearch | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplatePageSearchTransfer | +| ConfigurableBundleTemplatePageSearchCollection | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplatePageSearchCollectionTransfer | +| ConfigurableBundleTemplatePageSearchFilter | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplatePageSearchFilterTransfer | +| ConfigurableBundleTemplatePageSearchRequest | class | created | src/Generated/Shared/Transfer/ConfigurableBundleTemplatePageSearchRequestTransfer | +| ProductListUsedByTable` | class | created | src/Generated/Shared/Transfer/ProductListUsedByTableTransfer | +| ProductListUsedByTableRow | class | created | src/Generated/Shared/Transfer/ProductListUsedByTableRowTransfer | +| ButtonCollection | class | created | src/Generated/Shared/Transfer/ButtonCollectionTransfer | +| SalesOrderConfiguredBundleFilter | class | created | src/Generated/Shared/Transfer/SalesOrderConfiguredBundleFilterTransfer | +| SalesOrderConfiguredBundleCollection | class | created | src/Generated/Shared/Transfer/SalesOrderConfiguredBundleCollectionTransfer | +| SalesOrderConfiguredBundle | class | created | src/Generated/Shared/Transfer/SalesOrderConfiguredBundleTransfer` | +| SalesOrderConfiguredBundleItem|class|created| src/Generated/Shared/Transfer/SalesOrderConfiguredBundleItemTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Add the following translations. + +#### Yves translations + +{% info_block infoBox %} + +Each configurable bundle template name needs to have Yves translations. Names are translated directly from `spy_configurable_bundle_template.name` field, for example—`configurable_bundle.templates.my-bundle.name`. + +The same applies to configurable bundle template slots: `spy_configurable_bundle_template_slot.name` is translated as `spy_configurable_bundle.template_slots.my-slot.name`. + +Name is represented by a slugified version of a name for the default locale. For example, the configurable bundle "All In" looks like `configurable-bundle-all-in`. + +{% endinfo_block %} + +1. Append the glossary according to your configuration: + +
    +src/data/import/glossary.csv + +```yaml +configured_bundle.quantity,Quantity:,en_US +configured_bundle.quantity,Anzahl:,de_DE +configured_bundle.price,Item price:,en_US +configured_bundle.price,Stückpreis:,de_DE +configured_bundle.bundle_total,Bundle total:,en_US +configured_bundle.bundle_total,Bündel Gesamt:,de_DE +configured_bundle.total,Item total:,en_US +configured_bundle.total,Artikel Gesamt:,de_DE +configured_bundle.remove,"× remove",en_US +configured_bundle.remove,"× entfernen",de_DE +configured_bundle.order.items,Items in the bundle:,en_US +configured_bundle.order.items,Produkte in diesem Bündel:,de_DE +configured_bundle.item_sku,SKU:,en_US +configured_bundle.item_sku,SKU:,de_DE +configurable_bundle.template.validation.error.not_exists,Configurable bundle template does not exist.,en_US +configurable_bundle.template.validation.error.not_exists,Vorlage des konfigurierbaren Bündels existiert nicht.,de_DE +configurable_bundle.slot.validation.error.not_exists,Configurable bundle template slot does not exist.,en_US +configurable_bundle.slot.validation.error.not_exists,Vorlagenslot des konfigurierbaren Bündels existiert nicht.,de_DE +configurable_bundle.template.validation.error.already_activated,Configurable bundle template is already activated.,en_US +configurable_bundle.template.validation.error.already_activated,Vorlage des konfigurierbaren Bündels wurde schon aktiviert.,de_DE +configurable_bundle.template.validation.error.already_deactivated,Configurable bundle template is already deactivated.,en_US +configurable_bundle.template.validation.error.already_deactivated,Vorlage des konfigurierbaren Bündels wurde schon deaktiviert.,de_DE +configured_bundle_cart.error.configured_bundle_cannot_be_added,Configured bundle cannot be added to cart.,en_US +configured_bundle_cart.error.configured_bundle_cannot_be_added,Configured bundle cannot be added to cart.,de_DE +configured_bundle_cart.error.configured_bundle_not_found,Configured bundle with provided sku not found in cart.,en_US +configured_bundle_cart.error.configured_bundle_not_found,Konfiguriertes Bundle mit mitgelieferter SKU nicht im Warenkorb gefunden.,de_DE +configured_bundle_cart.error.configured_bundle_cannot_be_removed,Configured bundle cannot be removed from cart.,en_US +configured_bundle_cart.error.configured_bundle_cannot_be_removed,Das konfigurierte Bundle kann nicht aus dem Warenkorb entfernt werden.,de_DE +configured_bundle_cart.error.configured_bundle_cannot_be_updated,Configured bundle cannot be updated.,en_US +configured_bundle_cart.error.configured_bundle_cannot_be_updated,Konfiguriertes Bundle kann nicht aktualisiert werden.,de_DE +configured_bundle_widget.configured_bundle.removed,Configured bundle removed successfully.,en_US +configured_bundle_widget.configured_bundle.removed,Konfiguriertes Bundle erfolgreich entfernt.,de_DE +configured_bundle_widget.configured_bundle.updated,Configured bundle updated successfully.,en_US +configured_bundle_widget.configured_bundle.updated,Konfiguriertes Bundle wurde erfolgreich aktualisiert.,de_DE +configurable_bundle_page.select,Select,en_US +configurable_bundle_page.select,Auswählen,de_DE +configurable_bundle_page.unselect,Unselect,en_US +configurable_bundle_page.unselect,Unselect,de_DE +configurable_bundle_page.edit,Edit,en_US +configurable_bundle_page.edit,Edit,de_DE +configurable_bundle_page.configurator,Configurator,en_US +configurable_bundle_page.configurator,Konfigurator,de_DE +configurable_bundle_page.configurable_bundle_list,Configurable Bundle List,en_US +configurable_bundle_page.configurable_bundle_list,Configurable Bundle List,de_DE +configurable_bundle_page.choose_bundle_to_configure,Choose Bundle to configure,en_US +configurable_bundle_page.choose_bundle_to_configure,Choose Bundle to configure,de_DE +configurable_bundle_page.configurator.templates_not_found,There are no templates available.,en_US +configurable_bundle_page.configurator.templates_not_found,There are no templates available.,de_DE +configurable_bundle_page.template_not_found,Configurable bundle template not found.,en_US +configurable_bundle_page.template_not_found,Configurable bundle template not found.,de_DE +configurable_bundle_page.invalid_template_slot_combination,Invalid template/slot combination.,en_US +configurable_bundle_page.invalid_template_slot_combination,Invalid template/slot combination.,de_DE +configurable_bundle_page.configurator.tip.header,Create your own bundle.,en_US +configurable_bundle_page.configurator.tip.header,Create your own bundle.,de_DE +configurable_bundle_page.configurator.tip.text,"To create the bundle, select the slot from the left side, and choose the product from the list.",en_US +configurable_bundle_page.configurator.tip.text,"To create the bundle, select the slot from the left side, and choose the product from the list.",de_DE +configurable_bundle_page.configurator.selected_product,Selected product,en_US +configurable_bundle_page.configurator.selected_product,Selected product,de_DE +configurable_bundle_page.configurator.summary,Summary,en_US +configurable_bundle_page.configurator.summary,Summary,de_DE +configurable_bundle_page.configurator.add_to_cart,Add to Cart,en_US +configurable_bundle_page.configurator.add_to_cart,Add to Cart,de_DE +configurable_bundle_page.configurator.summary_page_locked,Product for at least one slot should be configured to visit Summary page.,en_US +configurable_bundle_page.configurator.summary_page_locked,Product for at least one slot should be configured to visit Summary page.,de_DE +configurable_bundle_page.configurator.summary_page_total,Total,en_US +configurable_bundle_page.configurator.summary_page_total,Gesamt,de_DE +configurable_bundle_page.configurator.added_to_cart,Configured bundle successfully added to cart.,en_US +configurable_bundle_page.configurator.added_to_cart,Configured bundle successfully added to cart.,de_DE +configurable_bundle_page.configurator.slot_became_unavailable,Configured slot with ID '%id%' became unavailable.,en_US +configurable_bundle_page.configurator.slot_became_unavailable,Configured slot with ID '%id%' became unavailable.,de_DE +configurable_bundle_page.configurator.product_became_unavailable,Product with SKU '%sku%' configured for slot with ID '%id%' became unavailable.,en_US +configurable_bundle_page.configurator.product_became_unavailable,Product with SKU '%sku%' configured for slot with ID '%id%' became unavailable.,de_DE +``` + +
    + +2. Optional: If you have existing or imported configurable bundle entities, provide translations for templates and slots following the example: + +**src/data/import/glossary.csv** + +```yaml +configurable_bundle.templates.configurable-bundle-all-in.name,"Configurable Bundle ""All in""",en_US +configurable_bundle.templates.configurable-bundle-all-in.name,"Konfigurierbares Bündel ""All in""",de_DE +configurable_bundle.templates.smartstation.name,Smartstation Kit,en_US +configurable_bundle.templates.smartstation.name,Smartstation-Kit,de_DE +configurable_bundle.template_slots.slot-1.name,Slot 1,en_US +configurable_bundle.template_slots.slot-1.name,Slot 1,de_DE +configurable_bundle.template_slots.slot-2.name,Slot 2,en_US +configurable_bundle.template_slots.slot-2.name,Slot 2,de_DE +configurable_bundle.template_slots.slot-3.name,Slot 3,en_US +configurable_bundle.template_slots.slot-3.name,Slot 3,de_DE +configurable_bundle.template_slots.slot-4.name,Slot 4,en_US +configurable_bundle.template_slots.slot-4.name,Slot 4,de_DE +configurable_bundle.template_slots.slot-5.name,Slot 5,en_US +configurable_bundle.template_slots.slot-5.name,Slot 5,de_DE +configurable_bundle.template_slots.slot-6.name,Slot 6,en_US +configurable_bundle.template_slots.slot-6.name,Slot 6,de_DE +``` + +3. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +#### Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when you make an order from a cart with a configured bundles, the bundle name is translated on the order page in Zed. + +{% endinfo_block %} + +### 4) Set up search + +1. Add the page map plugin for the `configurable bundle template` entity. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplatePageMapPlugin | Builds the page map for the configurable bundle template entity. | | Spryker\Zed\ConfigurableBundlePageSearch\Communication\Plugin\Search | + +**src/Pyz/Zed/Search/SearchDependencyProvider.php** + +```php + + +Your text +
    + + +class EventDependencyProvider extends SprykerEventDependencyProvider +{ + public function getEventSubscriberCollection() + { + $eventSubscriberCollection = parent::getEventSubscriberCollection(); + $eventSubscriberCollection->add(new ConfigurableBundleStorageEventSubscriber()); + $eventSubscriberCollection->add(new ConfigurableBundleTemplatePageSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Register the synchronization and synchronization error queues + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php +append($this->createQueueOption(ConfigurableBundleStorageConfig::CONFIGURABLE_BUNDLE_SYNC_STORAGE_QUEUE, ConfigurableBundleStorageConfig::CONFIGURABLE_BUNDLE_SYNC_STORAGE_ERROR_QUEUE)); + $queueOptionCollection->append($this->createQueueOption(ConfigurableBundlePageSearchConfig::CONFIGURABLE_BUNDLE_SEARCH_QUEUE, ConfigurableBundlePageSearchConfig::CONFIGURABLE_BUNDLE_SEARCH_ERROR_QUEUE)); + + return $queueOptionCollection; + } +} +``` + +#### Configure message processors + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + new SynchronizationStorageQueueMessageProcessorPlugin(), + ConfigurableBundlePageSearchConfig::CONFIGURABLE_BUNDLE_SEARCH_QUEUE => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Set up regenerate and resync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateEventResourceBulkRepositoryPlugin | Allows populating empty storage tables with data. | | Spryker\Zed\ConfigurableBundleStorage\Communication\Plugin\Event | +| ConfigurableBundleTemplatePageSearchEventResourceBulkRepositoryPlugin | Allows populating empty search tables with data. | | Spryker\Zed\ConfigurableBundleStorage\Communication\Plugin\Event | +| ConfigurableBundleTemplateSynchronizationDataBulkPlugin | Allows synchronizing the entire storage table content into Storage. | | Spryker\Zed\ConfigurableBundleStorage\Communication\Plugin\Synchronization | +| ConfigurableBundleTemplatePageSynchronizationDataBulkPlugin | Allows synchronizing all of the content into Search. | | Spryker\Zed\ConfigurableBundlePageSearch\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Add a configurable bundle to cart. Delete or deactivate it. Make sure it's been removed from the cart. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Update configured bundle quantity on the cart page. Make sure the following applies: + +- The quantity of each item in the bundle has changed. +- The quantity of bundle has changed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. Add a configurable item to cart. +2. Make clean up for a configured bundle item in `session/database` storage: `$itemTransfer->getConfiguredBundleItem()->setQuantityPerSlot(null)`. +- Reload the cart page. +- Make sure that `ConfiguredBundleItem::quantityPerSlot` isn't `null`. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Set a wrong quantity to `ConfiguredBundle::quantity` for a configured bundle item. Make sure that, after updating the configured bundle quantity on cart page, an error flash message is displayed. + +{% endinfo_block %} + +#### Register delete precheck plugins for the ProductList module + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateSlotProductListDeletePreCheckPlugin | Finds configurable bundle template slots that use a given product list. If any slots that use the list are found, disallows deleting the list. | | Spryker\Zed\ConfigurableBundle\Communication\Plugin\ProductList | + +**src/Pyz/Zed/ProductList/ProductListDependencyProvider.php** + +```php + +src/Pyz/Zed/ConfigurableBundleGui/ConfigurableBundleGuiDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure the following tabs exist on the **Configurable Bundle Template Slot Edit** page: + +- **Assign Categories**. +- **Assign Products**. + +{% endinfo_block %} + +#### Register plugins for the ProductListGui module + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateListProductListTopButtonsExpanderPlugin | Adds a button that opens the **Configurable Bundle Template list** page. | | Spryker\Zed\ConfigurableBundleGui\Communication\Plugin\ProductListGui | +| ConfigurableBundleTemplateProductListUsedByTableExpanderPlugin | Expands table data with configurable bundle templates and slots which use product listeners. | | Spryker\Zed\ConfigurableBundleGui\Communication\Plugin\ProductListGui | + +**src/Pyz/Zed/ProductListGui/ProductListGuiDependencyProvider.php** + +```php +Entity.spy_content.update
    Entity.spy_content.delete
    | + + +**src/Pyz/Zed/Content/Persistence/Propel/Schema/spy_content.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +**src/Pyz/Zed/ContentStorage/Persistence/Propel/Schema/spy_content_storage.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +2. Apply database changes and generate changes for entities and transfers: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following changes have been applied to the database: + +| DATABASE ENTITY | TYPE | EVENT | +| -------------------- | ---- | ----- | +| spy_content | table | created | +| spy_content_localized | table | created | +| spy_content_storage | table | created | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + + +Make sure that the following changes have been applied in transfer objects by checking `src/Generated/Shared/Transfer/`: + +| TRANSFER | TYPE | EVENT | +| ------------------------------------- | ---- | ----- | +| ContentTransfer | class | created | +| ContentStorageTransfer | class | created | +| ContentTypeContextTransfer | class | created | +| ContentValidationResponseTransfer | class | created | +| ContentWidgetTemplateTransfer | class | created | +| ContentParameterMessageTransfer | class | created | +| ContentBannerTypeTransfer | class | created | +| ContentBannerTermTransfer | class | created | +| ContentProductAbstractListTermTransfer | class | created | +| ContentProductAbstractListTypeTransfer | class | created | +| ContentProductSetTermTransfer | class | created | +| ContentProductSetTypeTransfer | class | created | +| ContentFileListTermTransfer | class | created | +| ContentFileListTypeTransfer | class | created | + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +The following plugins are responsible for publishing the content item to storage. + +#### Set up event listeners + +Set up the following plugin + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------- | --------------- | ---------- | ------------------- | +| ContentStorageEventSubscriber | Registers the listeners that publish content items to the storage when a related entity changes. | | Spryker\Zed\ContentStorage\Communication\Plugin\Event\Subscriber | + + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ContentStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php +append($this->createQueueOption(ContentStorageConfig::CONTENT_SYNC_STORAGE_QUEUE, ContentStorageConfig::CONTENT_SYNC_STORAGE_ERROR_QUEUE)); + + return $queueOptionCollection; + } +} +``` + +#### Configure message processors + +Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ---------------- | ------------------- | ----------- | ---------------- | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all content messages to sync to the storage. If an error is returned, marks the messages as failed. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | + + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Add event plugins + +Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------- | -------------- | ----------- | -------- | +| ContentStorageEventResourceRepositoryPlugin | Triggers events for all the content entries from the database to be published to the `spy_content_storage` table. | | Spryker\Zed\ContentStorage\Communication\Plugin\Event | + + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php +EXAMPLE EXPECTED DATA FRAGMENT: content:en_us:br1 + +```json +{ + "term": "Banner", + "parameters": { + "title": "banner title 1", + "subtitle": "banner sub-title 1", + "image_url": "http:\/\/example.com\/b2c\/24699831-1991.jpg", + "click_url": "http:\/\/www.demo-spryker.local\/en\/asus-transformer-book-t200ta-139", + "alt_text": "banner image 1" + } +} +``` + + + +
    EXAMPLE EXPECTED DATA FRAGMENT: content:en_us:apl2 + +```json +{ + "term": "Abstract Product List", + "parameters": { + "id_product_abstracts": [ + 204, + 205 + ] + } +} +``` + +
    + +
    EXAMPLE EXPECTED DATA FRAGMENT: content:en_us:ps-1 + +```json +{ + "term": "Product Set", + "parameters": { + "id_product_set": 1 + } +} +``` + +
    + +
    EXAMPLE EXPECTED DATA FRAGMENT: content:en_us:0d9f4722-d076-5acc-9d8e-e9daff7cd61 + +```json +{ + "term": "File List", + "parameters": { + "file_ids": [ + 1, + 2 + ] + } +} +``` + +
    + + +#### Add widget mapper plugins + +To be able to get the information on content items in the storage, set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------- | ------------------ | ---------- | ------------------- | +| CmsContentItemKeyMapperPlugin | Maps given content item keys to corresponding persistent item keys. | | Spryker\Zed\CmsContentWidgetContentConnector\Communication\Plugin\Cms | + + +**src/Pyz/Zed/CmsContentWidget/CmsContentWidgetDependencyProvider.php** + +```php + new CmsContentItemKeyMapperPlugin(), + ContentProductConfig::TWIG_FUNCTION_NAME => new CmsContentItemKeyMapperPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Make sure the `cms_page` storage record contains the information on the added content banners and content product lists. + +{% endinfo_block %} + + +### 4) Import data + +1. Importing content items into Zed: + +Prepare your data according to your requirements using our demo data: + +**vendor/spryker/content-banner-data-import/data/import/content_banner.csv** + +```csv +key,name,description,title.default,title.en_US,title.de_DE,subtitle.default,subtitle.en_US,subtitle.de_DE,image_url.default,image_url.en_US,image_url.de_DE,click_url.default,click_url.en_US,click_url.de_DE,alt_text.default,alt_text.en_US,alt_text.de_DE +br1,Test Banner 1,Lorem Ipsum,banner title 1,,,banner sub-title 1,,,http://example.com/b2c/24699831-1991.jpg,,,http://www.demo-spryker.local/en/asus-transformer-book-t200ta-139,,,banner image 1,, +br2,Test Banner 2,Ipsum Ipsum,banner title 2,us banner title 2,,banner sub-title 2,us banner sub-title 2,,http://example.com/en/asus-zenpad-z170c-157,http://www.demo-spryker.local/en/asus-zenpad-z170c-157,,banner image 2,banner image 2, +br3,Test Banner 3,Lorem Lorem,banner title 3,,de banner title 3,banner sub-title 3,,banner sub-title 3de,http://example.com/en/canon-powershot-n-035,,http://www.demo-spryker.local/en/canon-powershot-n-035,banner image 3,,banner image 3 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXPLANATION | +| ------------------- | ----------- | ------------- | ---------------- | +| key | ✓ | string (unique) | A reference used for banner updates. | +| name | ✓ | string | Content Item name. | +| description | ✓ | string | Content Item description. | +| title.default, title.en_US, title.de_DE | At least one locale | string | Localized banner title. | +| subtitle.default, subtitle.en_US, subtitle.de_DE | At least one locale | string | Localized banner subtitle. | +| image_url.default, image_url.en_US, image_url.de_DE | At least one locale | string | Localized banner image URL. | +| click_url.default, click_url.en_US, click_url.de_DE | At least one locale | string | Localized banner click URL. | +| alt_text.default, alt_text.en_US, alt_text.de_DE | At least one locale | string | Localized banner alternative text for an image. | + + +**vendor/spryker/content-product-data-import/data/import/content_product_abstract_list.csv** + +```csv +key,name,description,skus.default,skus.en_US,skus.de_DE +apl1,APL Name 1,APL Description 1,"204,205","","" +apl2,APL Name 2,APL Description 2,"191,190","","156,154" +apl3,APL Name 3,APL Description 3,"180,171","152,151","" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXPLANATION | +| -------------- | ----------- | ------------- | ----------------------- | +| key | ✓ | string (unique) | A reference used for banner updates. | +| name | ✓ | string | Content Item name. | +| description | ✓ | string | Content Item description. | +| skus.default, skus.en_US, skus.de_DE | At least one locale | string | Localized abstract product list, one or more comma-separated product SKUs. | + + +**vendor/spryker/content-product-set-data-import/data/import/content_product_set.csv** + +```csv +key,name,description,product_set_key.default,product_set_key.en_US,product_set_key.de_DE +PS-1,PS Name 1,PS Description 1,1_hp_set,, +PS-2,PS Name 2,PS Description 2,2_sony_set,,1_hp_set +PS-3,PS Name 3,PS Description 3,3_tomtom_runner_set,2_sony_set, +``` + + +| COLUMN | REQUIRED | DATA TYPE | DATA EXPLANATION | +| -------------------------- | -------- | ------- | ----------- | +| key | ✓ | string (unique) | A reference used for banner updates. | +| name | ✓ | string | Content Item name. | +| description | ✓ | string | Content Item description. | +| product_set_key.default, product_set_key.en_US, product_set_key.de_DE | At least one locale | string | Localized product set key | + +2. Register the following plugin to enable the content items data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | ----------------- | ------------ | ----------------------- | +| ContentBannerDataImportPlugin | Imports content banners data into the database. | | Spryker\Zed\ContentBannerDataImport\Communication\Plugin | +| ContentProductAbstractListDataImportPlugin | Imports content abstract product lists data into the database. | | Spryker\Zed\ContentProductDataImport\Communication\Plugin | +| ContentProductSetDataImportPlugin | Imports content product sets data into the database. | | Spryker\Zed\ContentProductSetDataImport\Communication\Plugin | + + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +src/Pyz/Zed/ContentGui/ContentGuiDependencyProvider.php + +```php + + + +{% info_block warningBox "Verification" %} + +Make sure that in the Back Office > **Content** > **Content Items**, you can see the following: + +- **Add Content Item** drop-down menu button with the following items: + - **Banner** + - **Abstract Product List** + - **Product Set** + - **File List** +- **Edit** button next to all types of content items in the list. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that, when editing CMS pages and blocks in the WYSIWYG editor, in the toolbar, you can see a **Content Item** drop-down menu button with the following items: + +- **Banner** +- **Abstract Product List** +- **Product Set** +- **File List** + +{% endinfo_block %} + + +
    src/Pyz/Zed/CmsBlockGui/CmsBlockGuiDependencyProvider.php + +```php + + + +
    src/Pyz/Zed/CmsGui/CmsGuiDependencyProvider.php + +```php + + + + +{% info_block warningBox "Verification" %} + +Make sure that, when editing CMS pages and blocks in the WYSIWYG editor, you can add any content item using the **Content Item** drop-down menu. + +{% endinfo_block %} + + + +## Install feature front end + +Follow the steps below to install the Content Item feature front end. + +### Prerequisites + +To start the feature integration, review and install the necessary features: + +| NAME | VERSION | +| ---------- | -------- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +1composer require spryker-feature/content-item:"^dev-master" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Ensure the following modules have been installed in `vendor/spryker-shop`: + +| MODULE | EXPECTED DIRECTORY | +| --------------------- | ------------------------------------------ | +| ContentBannerWidget | vendor/spryker-shop/content-banner-widget | +| ContentProductWidget | vendor/spryker-shop/content-product-widget | +| ContentProductSetWidget | vendor/spryker-shop/content-product-set-widget | +| ContentFileWidget | vendor/spryker-shop/content-file-widget | + +{% endinfo_block %} + +### 2) Set up behavior: Set up additional functionality + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------- | --------------- | ----------- | -------- | +| ContentBannerTwigPlugin | Adds the `content_banner(id, template)` function to Yves and CMS blocks pages. | | SprykerShop\Yves\ContentBannerWidget\Plugin\Twig | +| ContentProductAbstractListTwigPlugin | Adds the `content_product_abstract_list(id, template)` function to Yves and CMS blocks pages. | | SprykerShop\Yves\ContentProductWidget\Plugin\Twig | +| ContentProductSetTwigPlugin | Adds the `content_product_set(id, template)` function to Yves and CMS blocks pages. | | SprykerShop\Yves\ContentProductSetWidget\Plugin\Twig | +| ContentFileListTwigPlugin | Adds the `content_file_list(id, template)` function to Yves and CMS blocks pages. | | SprykerShop\Yves\ContentFileWidget\Plugin\Twig | + + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + public function getContentTypes(): array + { + return [ + SprykerSharedCustomerAccessConfig::CONTENT_TYPE_PRICE, + SprykerSharedCustomerAccessConfig::CONTENT_TYPE_ORDER_PLACE_SUBMIT, + SprykerSharedCustomerAccessConfig::CONTENT_TYPE_ADD_TO_CART, + SprykerSharedCustomerAccessConfig::CONTENT_TYPE_WISHLIST, + SprykerSharedCustomerAccessConfig::CONTENT_TYPE_SHOPPING_LIST, + ]; + } +} +``` + +{% info_block infoBox "Info" %} + +The verification of this step happens when you import the infrastructural data related to this feature. + +{% endinfo_block %} + +### 3) Set up the database schema + +1. Adjust the schema definition so entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|-------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| spy_unauthenticated_customer_access | Entity.spy_unauthenticated_customer_access.create
    Entity.spy_unauthenticated_customer_access.update
    Entity.spy_unauthenticated_customer_access.delete | + +**src/Pyz/Zed/CustomerAccess/Persistence/Propel/Schema/spy_unauthenticated_customer_access.schema.xml** + + ```xml + + + + + + + +
    + +
    + + ``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------------------|-------|---------| +| spy_unauthenticated_customer_access | table | created | +| spy_unauthenticated_customer_access_storage | table | created | + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------|-------|---------|---------------------------------------------------------| +| CustomerAccess | class | created | src/Generated/Shared/Transfer/CustomerAccessTransfer | +| ContentTypeAccess | class | created | src/Generated/Shared/Transfer/ContentTypeAccessTransfer | + +Make sure that the changes were implemented successfully. To achieve this, trigger the following methods and make sure that the above events have been triggered: + +| PATH | METHOD NAME | +|-----------------------------------------------------------------------------|------------------------------------------------------------------------------| +| src/Orm/Zed/CustomerAccess/Persistence/SpyUnauthenticatedCustomerAccess.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +This step publishes tables on change (create, edit, delete) to the `spy_unauthenticated_customer_access_storage` and synchronizes the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|---------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------| +| CustomerAccessStorageEventSubscriber | Registers listeners that are responsible for publishing customer access data based on changes to customer access entities | | Spryker\Zed\CustomerAccessStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new CustomerAccessStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when a customer access rule is created, updated, or deleted, it's exported (or removed) to the key-value store (Redis or Valkey). + +| TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-------------------------------------|------------------------------------| +| spy_unauthenticated_customer_access | kv:unauthenticated_customer_access | + +**Example Expected Data Fragment** + +```json +{ + "content_type_access": [ + { + "id_unauthenticated_customer_access": 1, + "content_type": "price", + "is_restricted": true + }, + { + "id_unauthenticated_customer_access": 2, + "content_type": "order-place-submit", + "is_restricted": true + }, + { + "id_unauthenticated_customer_access": 3, + "content_type": "add-to-cart", + "is_restricted": true + }, + { + "id_unauthenticated_customer_access": 4, + "content_type": "wishlist", + "is_restricted": true + }, + { + "id_unauthenticated_customer_access": 5, + "content_type": "shopping-list", + "is_restricted": true + } + ], + "_timestamp": 1553177014.3275149 +} +``` + +{% endinfo_block %} + +#### Set up publisher trigger plugins + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|-----------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerAccessPublisherTriggerPlugin | Allows publishing or re-publishing unauthenticated customer access data manually. | | Spryker\Zed\CustomerAccessStorage\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new CustomerAccessPublisherTriggerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that a new publish message is added to the queue when you run the console command: + +```bash +console publish:trigger-events -r unauthenticated_customer_access +``` + +{% endinfo_block %} + +#### Set up resync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|--------------------------------------------------|---------------|------------------------------------------------------------------------| +| CustomerAccessSynchronizationDataBulkPlugin | Allows populating empty storage table with data. | | Spryker\Zed\CustomerAccessStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new CustomerAccessSynchronizationDataBulkPlugin(), + ]; + } +} +``` + +### 5) Add infrastructural data + +| PLUGIN SPECIFICATION | NAMESPACE | +|---|---|---| +| CustomerAccessInstallerPlugin | Installs configured content types | Spryker\Zed\CustomerAccess\Communication\Plugin | + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins(): array + { + return [ + new CustomerAccessInstallerPlugin(), + ]; + } +} +``` + +Execute registered installer plugins and install infrastructural data: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure that all configured content types above are saved in the `spy_unauthenticated_customer_access` database table with the configured content type access. + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|-------------------------------------------------------------------------|---------------|------------------------------------------------| +| SeePricePermissionPlugin | Provides the ability to see prices on all pages | | Spryker\Client\CustomerAccessPermission\Plugin | +| SeeOrderPlaceSubmitPermissionPlugin | Provides ability to place order after going through checkout process | | Spryker\Client\CustomerAccessPermission\Plugin | +| SeeAddToCartPermissionPlugin | Provides ability to add item to cart on product detail page | | Spryker\Client\CustomerAccessPermission\Plugin | +| SeeWishlistPermissionPlugin | Provides ability to add item to wish list on product detail page | | Spryker\Client\CustomerAccessPermission\Plugin | +| SeeShoppingListPermissionPlugin | Provides ability to add item to shopping list on product detail page | | Spryker\Client\CustomerAccessPermission\Plugin | +| CustomerAccessPermissionStoragePlugin | Provides ability to fetch customer access permissions on customer login | | Spryker\Client\CustomerAccessPermission\Plugin | + +
    +src/Pyz/Client/Permission/PermissionDependencyProvider.php + +```php + + */ + protected function getPermissionStoragePlugins(): array + { + return [ + new CustomerAccessPermissionStoragePlugin(), + ]; + } + + /** + * @return array<\Spryker\Shared\PermissionExtension\Dependency\Plugin\PermissionPluginInterface> + */ + protected function getPermissionPlugins(): array + { + return [ + new SeePricePermissionPlugin(), + new SeeOrderPlaceSubmitPermissionPlugin(), + new SeeAddToCartPermissionPlugin(), + new SeeWishlistPermissionPlugin(), + new SeeShoppingListPermissionPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that everything works—checks must be done for not logged-in customers: +- `SeePricePermissionPlugin` shows or hides prices at all pages depending on configuration value. +- `SeeOrderPlaceSubmitPermissionPlugin` allows or denies order submitting after going through the checkout process depending on configuration value. +- `SeeAddToCartPermissionPlugin` is responsible for the **Add to Cart** button on the product details page (PDP). It is available or not depending on the configuration value. +- `SeeWishlistPermissionPlugin` takes care about the **Add to Wishlist** button on PDP. It is shown or not depending on the configuration value. +- `SeeShoppingListPermissionPlugin` allows or denies adding a product to a shopping list from PDP depending on the configuration value. +- `CustomerAccessPermissionStoragePlugin` is responsible for customer permissions retrieving. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Customer Access feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE| +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +### 1) Add translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```html +customer.access.cannot_see_price,Please login to see the price,en_US +customer.access.cannot_see_price,Bitte melden Sie sich an um den Preis zu sehen,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-agent-assist-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-agent-assist-feature.md new file mode 100644 index 00000000000..a57e8b605b1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-agent-assist-feature.md @@ -0,0 +1,290 @@ + + +This document describes how to install the Customer Account Management + Agent Assist feature. + +## Install feature core + +Follow the steps below to install the Customer Account Management + Agent Assist feature core. + +### Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Customer Account ManagemenT | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Agent Assist | {{page.release_tag}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker/oauth-agent-connector:"^1.0.0" spryker/oauth-customer-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------|--------------------------------------| +| OauthAgentConnector | vendor/spryker/oauth-agent-connector | +| OauthCustomerConnector | vendor/spryker/oauth-customer-connector | + +{% endinfo_block %} + +### 2) Set up configuration + +Activate the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------|---------------------------------------|---------------|----------------------------------------------------------------| +| AgentOauthScopeInstallerPlugin | Installs agent-specific OAuth scopes. | None | Spryker\Zed\OauthAgentConnector\Communication\Plugin\Installer | + + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php +src/Pyz/Zed/Oauth/OauthDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Ensure that the agent can get the access token with valid credentials by sending the request: + +**Request sample** + +`POST https://glue.mysprykershop.com/agent-access-tokens` + +```json +{ + "data": { + "type": "agent-access-tokens", + "attributes": { + "username": "admin@spryker.com", + "password": "change123" + } + } +} +``` + +**Expected response** + +```json +{ + "data": { + "type": "agent-access-tokens", + "id": null, + "attributes": { + "tokenType": "Bearer", + "expiresIn": 28800, + "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOi...", + "refreshToken": "def50200d0f922e0c1e981add4..." + }, + "links": { + "self": "https://glue.mysprykershop.com/agent-access-tokens" + } + } +} +``` + +{% endinfo_block %} + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getAfterCustomerAuthenticationSuccessPlugins(): array + { + return [ + new UpdateAgentTokenAfterCustomerAuthenticationSuccessPlugin(), + new UpdateAgentSessionAfterCustomerAuthenticationSuccessPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in as an agent. +2. Log in as a customer. +3. Ensure that the agent's session data in storage is created or updated: + - If session data is stored in the key-value store (Redis or Valkey), ensure that the following key-value store (Redis or Valkey) key exists and contains data: + `{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}:agent:entity` + - If session data is stored in a file, ensure that a file in the following path exists and contains data: + `data/session/session:agent:{% raw %}{{{% endraw %}agent_id{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +**src/Pyz/Yves/AgentPage/AgentPageDependencyProvider.php** + +```php + + */ + protected function getSessionPostImpersonationPlugins(): array + { + return [ + new CustomerUpdateSessionPostImpersonationPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in as an agent. +2. Start impersonation session as a customer. +3. Ensure that the customer's session data in storage is created or updated: + - If session data is stored in the key-value store (Redis or Valkey), ensure that the following key-value store (Redis or Valkey) key exists and contains data: + `{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}:customer:entity` + - If session data is stored in a file, ensure that a file in the following path exists and contains data: + `data/session/session:customer:{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}` + +{% endinfo_block %} + +## Install related features + +Install the following related features: + +| FEATURE | INSTALLATION GUIDE | +|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Customer Account Management | [Customer Acount Management feature integration](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Agent Assist | [Install the Agent Assist feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Agent Assist API | [Install the Agent Assist Glue API](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-feature.md new file mode 100644 index 00000000000..3f63430c371 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-customer-account-management-feature.md @@ -0,0 +1,1279 @@ + + +This document describes how to install the [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. + +{% info_block errorBox "Included features" %} + +This guide expects the basic feature to be in place. This guide adds the following functionalities: +- Redirect support for Customer login functionality. +- Password set and reset console commands for customers. +- Double opt-in for customer registration. +- OAuth +- Improved password security +- Session validation +- Audit logging + +{% endinfo_block %} + +## Install feature core + +Follow the steps below to install the Customer Account Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/customer-account-management: "{{page.release_tag}}" spryker/oauth-customer-connector:"^1.8.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------|----------------------------------------------| +| Customer | vendor/spryker/customer | +| CustomerGroup | vendor/spryker/customer-group | +| CustomerNote | vendor/spryker/customer-note | +| CustomerNoteGui | vendor/spryker/customer-note-gui | +| CustomerStorage | vendor/spryker/customer-storage | +| Oauth | vendor/spryker/oauth | +| OauthCryptography | vendor/spryker/oauth-cryptography | +| OauthCustomerConnector | vendor/spryker/oauth-customer-connector | +| OauthCustomerValidation | vendor/spryker/oauth-customer-validation | +| OauthRevoke | vendor/spryker/oauth-revoke | + +{% endinfo_block %} + +### 2) Set up configuration + +1. Set the required OAuth config: + +{% info_block infoBox %} + +For more details about key generation, see [OAuth 2.0 Server Installation](https://oauth2.thephpleague.com/installation/). + +{% endinfo_block %} + +**config/Shared/config_default.php** + +```php +$config[OauthConstants::PRIVATE_KEY_PATH] = 'file://path/to/private.key'; +$config[OauthConstants::PUBLIC_KEY_PATH] = 'file://path/to/public.key'; +$config[OauthConstants::ENCRYPTION_KEY] = 'generated-encryption-key'; +$config[OauthConstants::OAUTH_CLIENT_CONFIGURATION] = '[{"identifier":"client-identifier","secret":"client-secret","isConfidential":true,"name":"Customer client","redirectUri":null,"isDefault":true}]'; +``` + +2. Adjust RabbitMq module configuration: + +```php + + */ + protected function getPublishQueueConfiguration(): array + { + return [ + CustomerStorageConfig::PUBLISH_CUSTOMER_INVALIDATED, + ]; + } + + /** + * @return list + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + CustomerStorageConfig::CUSTOMER_INVALIDATED_SYNC_STORAGE_QUEUE, + ]; + } +} +``` + +3. Optional: To enable the double opt-in for the customer registration, adjust the `CustomerConfig::isDoubleOptInEnabled()` to return `true`: + +```php + + src/Pyz/Zed/Customer/CustomerConfig.php + +```php + + */ + public function getCustomerPasswordAllowList(): array + { + return [ + 'change123', + ]; + } + + /** + * @return list + */ + public function getCustomerPasswordDenyList(): array + { + return [ + 'qwerty', + ]; + } + + /** + * @return string + */ + public function getCustomerPasswordCharacterSet(): string + { + return "/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*.!@#$%^&(){}:;\[\]<>,.?\/~_+\-=|])[a-zA-Z0-9*.!@#$%^& (){}:;\[\]<>,.?\/~_+\-=|]*$/"; + } + + /** + * @return int|null + */ + public function getCustomerPasswordSequenceLimit(): ?int + { + return 3; + } +} +``` + +
    + +{% include pbc/all/install-features/feature-configuration/customer-by-email-retrieval.md %} + +The following table describes the settings: + +| SETTING | MEANING | +|----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| CustomerConfig::getCustomerPasswordAllowList() | Provides a list of strings that will be accepted as a password for the customer bypassing any policy validations. These will be accepted despite breaking other policies. | +| CustomerConfig::getCustomerPasswordCharacterSet() | Provides regular expression for character set password validation. | +| CustomerConfig::getCustomerPasswordDenyList() | A common list of insecure, invalid passwords. These will be rejected immediately. | +| CustomerConfig::getCustomerPasswordSequenceLimit() | Provides a limit for character repeating if defined. Example: `Limit=4` forbids using "aaaa" in the password but allows "aaa". | +| CustomerConfig::MAX_LENGTH_CUSTOMER_PASSWORD | Defines password maximum length. | +| CustomerConfig::MIN_LENGTH_CUSTOMER_PASSWORD | Defines password minimum length. | + +### 3) Set up database schema and transfer objects + +**src/Pyz/Zed/Customer/Persistence/Propel/Schema/spy_customer.schema.xml** + +```xml + + + + + + + + +
    +
    +``` + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------------------|-------|---------|----------------------------------------------------------------------------------------| +| CustomerCollectionTransfer | class | created | src/Generated/Shared/Transfer/CustomerCollectionTransfer.php | +| CustomerCriteriaFilterTransfer | class | created | src/Generated/Shared/Transfer/CustomerCriteriaFilterTransfer.php | +| CustomerIdentifierTransfer | class | created | src/Generated/Shared/Transfer/CustomerIdentifierTransfer.php | +| CustomerResponseTransfer | class | created | src/Generated/Shared/Transfer/CustomerResponseTransfer.php | +| CustomerTransfer | class | created | src/Generated/Shared/Transfer/CustomerTransfer.php | +| ErrorTransfer | class | created | src/Generated/Shared/Transfer/ErrorTransfer.php | +| EventEntityTransfer | class | created | src/Generated/Shared/Transfer/EventEntityTransfer.php | +| GlueAuthenticationRequestContextTransfer | class | created | src/Generated/Shared/Transfer/GlueAuthenticationRequestContextTransfer.php | +| GlueAuthenticationRequestTransfer | class | created | src/Generated/Shared/Transfer/GlueAuthenticationRequestTransfer.php | +| InvalidatedCustomerCollectionDeleteCriteriaTransfer | class | created | src/Generated/Shared/Transfer/InvalidatedCustomerCollectionDeleteCriteriaTransfer.php | +| InvalidatedCustomerCollectionTransfer | class | created | src/Generated/Shared/Transfer/InvalidatedCustomerCollectionTransfer.php | +| InvalidatedCustomerConditionsTransfer | class | created | src/Generated/Shared/Transfer/InvalidatedCustomerConditionsTransfer.php | +| InvalidatedCustomerCriteriaTransfer | class | created | src/Generated/Shared/Transfer/InvalidatedCustomerCriteriaTransfer.php | +| InvalidatedCustomerTransfer | class | created | src/Generated/Shared/Transfer/InvalidatedCustomerTransfer.php | +| JwtTokenTransfer | class | created | src/Generated/Shared/Transfer/JwtTokenTransfer.php | +| OauthAccessTokenDataTransfer | class | created | src/Generated/Shared/Transfer/OauthAccessTokenDataTransfer.php | +| OauthAccessTokenValidationRequestTransfer | class | created | src/Generated/Shared/Transfer/OauthAccessTokenValidationRequestTransfer.php | +| OauthAccessTokenValidationResponseTransfer | class | created | src/Generated/Shared/Transfer/OauthAccessTokenValidationResponseTransfer.php | +| OauthClientTransfer | class | created | src/Generated/Shared/Transfer/OauthClientTransfer.php | +| OauthErrorTransfer | class | created | src/Generated/Shared/Transfer/OauthErrorTransfer.php | +| OauthGrantTypeConfigurationTransfer | class | created | src/Generated/Shared/Transfer/OauthGrantTypeConfigurationTransfer.php | +| OauthRefreshTokenCollectionTransfer | class | created | src/Generated/Shared/Transfer/OauthRefreshTokenCollectionTransfer.php | +| OauthRefreshTokenTransfer | class | created | src/Generated/Shared/Transfer/OauthRefreshTokenTransfer.php | +| OauthRequestTransfer | class | created | src/Generated/Shared/Transfer/OauthRequestTransfer.php | +| OauthResponseTransfer | class | created | src/Generated/Shared/Transfer/OauthResponseTransfer.php | +| OauthScopeFindRequestTransfer | class | created | src/Generated/Shared/Transfer/OauthScopeFindRequestTransfer.php | +| OauthScopeFindTransfer | class | created | src/Generated/Shared/Transfer/OauthScopeFindTransfer.php | +| OauthScopeRequestTransfer | class | created | src/Generated/Shared/Transfer/OauthScopeRequestTransfer.php | +| OauthScopeTransfer | class | created | src/Generated/Shared/Transfer/OauthScopeTransfer.php | +| OauthTokenCriteriaFilterTransfer | class | created | src/Generated/Shared/Transfer/OauthTokenCriteriaFilterTransfer.php | +| OauthUserTransfer | class | created | src/Generated/Shared/Transfer/OauthUserTransfer.php | +| PaginationTransfer | class | created | src/Generated/Shared/Transfer/PaginationTransfer.php | +| RevokeRefreshTokenRequestTransfer | class | created | src/Generated/Shared/Transfer/RevokeRefreshTokenRequestTransfer.php | +| RevokeRefreshTokenResponseTransfer | class | created | src/Generated/Shared/Transfer/RevokeRefreshTokenResponseTransfer.php | +| SynchronizationDataTransfer | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer.php | + +{% endinfo_block %} + +### 4) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------| +| CustomerOauthUserProviderPlugin | Provides a customer OAuth user. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin | +| CustomerOauthScopeProviderPlugin | Provides a list of customer scopes. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin | +| CustomerImpersonationOauthUserProviderPlugin | Authenticates a customer by a customer reference. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Oauth | +| CustomerImpersonationOauthScopeProviderPlugin | Returns the customer impersonation scopes. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Oauth | +| CustomerImpersonationOauthGrantTypeConfigurationProviderPlugin | Provides the configuration of the `customer_impersonation` grant type. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Oauth | +| OauthExpiredRefreshTokenRemoverPlugin | Removes expired refresh tokens by a provided criteria transfer. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenCheckerPlugin | Checks if the refresh token was revoked. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenReaderPlugin | Finds a refresh token by a provided criteria transfer. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenRevokerPlugin | Revokes a refresh token. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokenPersistencePlugin | Persists a refresh token. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokensReaderPlugin | Retrieves refresh tokens by a provided criteria. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| OauthRefreshTokensRevokerPlugin | Revokes all refresh tokens. | | Spryker\Zed\OauthRevoke\Communication\Plugin\Oauth | +| CustomerPasswordResetConsole | Generates password restoration keys and sends a password reset email to the customers without a password. Sends a password reset email to all the customers if the corresponding command option is provided. | | Spryker\Zed\Customer\Communication\Console | +| CustomerPasswordSetConsole | Sends the password reset email to all the customers with the empty password value in the database. | | Spryker\Zed\Customer\Communication\Console | +| CustomerRegistrationMailTypeBuilderPlugin | Prepares the data for customer registration mail. | | Spryker\Zed\Customer\Communication\Plugin\Mail | +| CustomerRegistrationConfirmationMailTypeBuilderPlugin | Prepares the data for customer registration confirmation mail. | | Spryker\Zed\Customer\Communication\Plugin\Mail | +| CustomerRestorePasswordMailTypeBuilderPlugin | Prepares the data for customer restore password mail. | | Spryker\Zed\Customer\Communication\Plugin\Mail | +| CustomerRestoredPasswordConfirmationMailTypeBuilderPlugin | Prepares the data for customer restored password confirmation mail. | | Spryker\Zed\Customer\Communication\Plugin\Mail | +| ValidateInvalidatedCustomerAccessTokenValidatorPlugin | Validates provided access token if the customer is not anonymized and the password hasn't been changed after a token creation. | | Spryker\Client\OauthCustomerValidation\Plugin\Oauth | +| CustomerInvalidatedWritePublisherPlugin | Used in case if customer was invalidated or customer's password was changed and publishes customer data to storage based on customer publish event. | | Spryker\Zed\CustomerStorage\Communication\Plugin\Publisher\Customer | +| EventQueueMessageProcessorPlugin | Used for processing invalidated customers within queue. | | Spryker\Zed\Event\Communication\Plugin\Queue | +| SynchronizationStorageQueueMessageProcessorPlugin | Registration of new queue message processor. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| CustomerInvalidatedStorageSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | | Spryker\Zed\CompanyUserStorage\Communication\Plugin\Synchronization | +| DeleteExpiredCustomerInvalidatedRecordsConsole | Deletes all expired customer invalidated storage records. | | Spryker\Zed\CustomerStorage\Communication\Console | +| CurrentCustomerDataRequestProcessorPlugin | Adds customer email and reference from the current request to the log data. | | Spryker\Yves\Customer\Plugin\Log | + + +
    +src/Pyz/Zed/Oauth/OauthDependencyProvider.php + +```php + + */ + protected function getUserProviderPlugins(): array + { + return [ + new CustomerOauthUserProviderPlugin(), + new CustomerImpersonationOauthUserProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthScopeProviderPluginInterface> + */ + protected function getScopeProviderPlugins(): array + { + return [ + new CustomerOauthScopeProviderPlugin(), + new CustomerImpersonationOauthScopeProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthGrantTypeConfigurationProviderPluginInterface> + */ + protected function getGrantTypeConfigurationProviderPlugins(): array + { + return array_merge(parent::getGrantTypeConfigurationProviderPlugins(), [ + new CustomerImpersonationOauthGrantTypeConfigurationProviderPlugin(), + ]); + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokenRevokerPluginInterface> + */ + protected function getOauthRefreshTokenRevokerPlugins(): array + { + return [ + new OauthRefreshTokenRevokerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokensRevokerPluginInterface> + */ + protected function getOauthRefreshTokensRevokerPlugins(): array + { + return [ + new OauthRefreshTokensRevokerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokenPersistencePluginInterface> + */ + protected function getOauthRefreshTokenPersistencePlugins(): array + { + return [ + new OauthRefreshTokenPersistencePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokenCheckerPluginInterface> + */ + protected function getOauthRefreshTokenCheckerPlugins(): array + { + return [ + new OauthRefreshTokenCheckerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthExpiredRefreshTokenRemoverPluginInterface> + */ + protected function getOauthExpiredRefreshTokenRemoverPlugins(): array + { + return [ + new OauthExpiredRefreshTokenRemoverPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokenReaderPluginInterface> + */ + protected function getOauthRefreshTokenReaderPlugins(): array + { + return [ + new OauthRefreshTokenReaderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRefreshTokensReaderPluginInterface> + */ + protected function getOauthRefreshTokensReaderPlugins(): array + { + return [ + new OauthRefreshTokensReaderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/Oauth/OauthDependencyProvider.php** + +```php + + */ + protected function getAccessTokenValidatorPlugins(): array + { + return [ + new ValidateInvalidatedCustomerAccessTokenValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new CustomerInvalidatedWritePublisherPlugin(), + ]; + } +} +``` + +2. Register a queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + CustomerStorageConfig::PUBLISH_CUSTOMER_INVALIDATED => new EventQueueMessageProcessorPlugin(), + CustomerStorageConfig::CUSTOMER_INVALIDATED_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new CustomerInvalidatedStorageSynchronizationDataPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new CustomerPasswordResetConsole(), + new CustomerPasswordSetConsole(), + new DeleteExpiredCustomerInvalidatedRecordsConsole(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the OAuth client has been added to the `spy_oauth_client` table by running the following SQL query: + +```sql +SELECT * FROM spy_oauth_client WHERE identifier = 'some-client-identifier'; +``` + + Make sure the result contains one record. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + + +Make sure you can obtain the customer OAuth access token with customer credentials or customer reference. For details, see [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-customer-account-management-glue-api.html). + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +To verify `OauthRefreshTokenRemoverPlugin`, remove expired refresh tokens: + +```bash +console oauth:refresh-token:remove-expired +``` + +Make sure all expired refresh tokens that are older than defined by the removal interval you've configured in `Spryker\Shared\Oauth\OauthConfig::getRefreshTokenRetentionInterval()` have been removed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + + +Send the password reset email to all the customers in the system: + +```bash +console customer:password:reset +``` + +In the `spy_customer.restore_password_key` table, make sure all customers have a password reset hash. + + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Send password reset emails to all the customers without passwords: + +```bash +console customer:password:set +``` + +In the `spy_customer.restore_password_key` database table, make sure all the customers without passwords have the password reset hash. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Send the password reset email to all the customers in the system: + +```bash +console customer:password:reset +``` + +In the `spy_customer.restore_password_key` table, make sure all the customers have the password reset hash. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Send password reset emails to all the customers without passwords: + +```bash +console customer:password:set +``` + +In the `spy_customer.restore_password_key` database table, make sure all the customers without passwords have the password reset hash. + +{% endinfo_block %} + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new CustomerRegistrationMailTypeBuilderPlugin(), + new CustomerRegistrationConfirmationMailTypeBuilderPlugin(), + new CustomerRestorePasswordMailTypeBuilderPlugin(), + new CustomerRestoredPasswordConfirmationMailTypeBuilderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +- Make sure that the customer confirmation email is sent to the newly registered customers upon registration. +- Make sure that the password restore email is sent to the customers who requested a password reset. + +{% endinfo_block %} + +3. Enable a Jenkins check for finding and deleting expired refresh tokens and invalidated customers: + +**config/Zed/cronjobs/jenkins.php** + +```php + 'remove-expired-refresh-tokens', + 'command' => '$PHP_BIN vendor/bin/console oauth:refresh-token:remove-expired', + 'schedule' => '*/5 * * * *', + 'enable' => true, + 'stores' => $allStores, +]; + +/* Customer */ +$jobs[] = [ + 'name' => 'delete-expired-customer-invalidated', + 'command' => '$PHP_BIN vendor/bin/console customer:delete-expired-customer-invalidated', + 'schedule' => '0 0 * * 0', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +**src/Pyz/Yves/Log/LogDependencyProvider.php** + +```php + + */ + protected function getYvesSecurityAuditLogProcessorPlugins(): array + { + return [ + new CurrentCustomerDataRequestProcessorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Find the logs under the configured log file paths and make sure the audit logs data is expanded with customer email and +customer reference from a current request. + +{% endinfo_block %} + +### 5) Import data + +Import the following data. + +#### Add infrastructural data + +1. Install the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|------------------------------------------------|---------------|-------------------------------------------------------------------| +| OauthClientInstallerPlugin | Populates the database with OAuth client data. | | Spryker\Zed\Oauth\Communication\Plugin\Installer | +| OauthCustomerScopeInstallerPlugin | Installs OAuth customer scope data. | | Spryker\Zed\OauthCustomerConnector\Communication\Plugin\Installer | + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins() + { + return [ + new OauthClientInstallerPlugin(), + new OauthCustomerScopeInstallerPlugin(), + ]; + } +} +``` + +2. Set up the OAuth client: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The `spy_oauth_client` table is populated with the OAuth client or clients you've configured in `\Spryker\Shared\Oauth\OauthConstants::OAUTH_CLIENT_CONFIGURATION` of environment config files. + +- The `spy_oauth_scope` tables are filled with customer scopes. + +{% endinfo_block %} + + +## Install feature frontend + +Follow the steps below to install the Customer Account Management feature frontend. + +### Prerequisites + +Install the following features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/customer-account-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|------------------------------------------------------| +| CustomerPage | vendor/spryker-shop/customer-page | +| CustomerValidationPage | vendor/spryker-shop/customer-validation-page | +| SessionCustomerValidationPage | vendor/spryker-shop/session-customer-validation-page | + + +{% endinfo_block %} + +### 2) Set up configuration + +Optional: To enable double opt-in for customer registration, adjust the `CustomerPageConfig::isDoubleOptInEnabled()` method to return `true`. + +```php + + */ + protected function getAfterLoginCustomerRedirectPlugins(): array + { + return [ + new RedirectUriCustomerRedirectStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when you open `https://mysprykershop.com/login?redirectUri=/cart`, you are redirected to the *Cart* page after login. + +{% endinfo_block %} + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new CustomerConfirmationUserCheckerApplicationPlugin(), + ]; + } + + /** + * @return list<\SprykerShop\Yves\ShopApplicationExtension\Dependency\Plugin\FilterControllerEventHandlerPluginInterface> + */ + protected function getFilterControllerEventSubscriberPlugins(): array + { + return [ + new LogoutInvalidatedCustomerFilterControllerEventHandlerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you try to access your account without confirming the registration, you get the error related to registration confirmation. + +{% endinfo_block %} + + +**src/Pyz/Yves/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ValidateCustomerSessionSecurityPlugin(), + new SaveCustomerSessionSecurityPlugin(), + ]; + } +} +``` + +{% info_block warningBox "" %} + +Apply the following changes only if session data is stored in the key-value store (Redis or Valkey). + +{% endinfo_block %} + +**src/Pyz/Yves/SessionCustomerValidationPage/SessionCustomerValidationPageDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CustomerReferenceDecisionRulePlugin(), + new CustomerMaximumOrderAmountDecisionRulePlugin(), + ]); + } +} +``` + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutOrderSavers(Container $container): array + { + return [ + new CustomerDiscountOrderSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-reference` field. +2. Add the `maximum-uses-per-customer` condition with value `1`. +3. Log in as a customer with a customer reference defined in the discount you've created. Make sure that the discount is applied to the cart automatically. +4. Place an order. Make sure a relationship between the customer and the discount is created in the `spy_customer_discount` database table. +5. Create a new cart and add some items. Make sure the same discount is not applied. + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-category-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-category-management-feature.md new file mode 100644 index 00000000000..bf2f6fd3852 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-category-management-feature.md @@ -0,0 +1,263 @@ +This document describes how to install the Data Exchange API + Category Management feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Data Exchange API | {{page.release_tag}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/latest/install-and-upgrade/install-the-data-exchange-api.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker/category-dynamic-entity-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|-------------------------------------------| +| CategoryDynamicEntityConnector | spryker/category-dynamic-entity-connector | + +{% endinfo_block %} + +## 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| CategoryClosureTableDynamicEntityPostCreatePlugin | Creates a category closure table entity based on the provided dynamic entity data. | | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | +| CategoryUrlDynamicEntityPostCreatePlugin | Creates category URLs based on the provided dynamic entity data. | Should be executed after the `CategoryClosureTableDynamicEntityPostCreatePlugin` plugin. | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | +| CategoryTreeDynamicEntityPostCreatePlugin | Triggers the category tree publish event. | | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | +| CategoryClosureTableDynamicEntityPostUpdatePlugin | Updates a category closure table entity based on the provided dynamic entity data. | | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | +| CategoryUrlDynamicEntityPostUpdatePlugin | Updates category URLs based on the provided dynamic entity data. | Should be executed after the `CategoryClosureTableDynamicEntityPostUpdatePlugin` plugin. | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | +| CategoryTreeDynamicEntityPostUpdatePlugin | Triggers the category tree publish event. | | Spryker\Zed\CategoryDynamicEntityConnector\Communication\Plugin\DynamicEntity | + +**src/Pyz/Zed/DynamicEntity/DynamicEntityDependencyProvider.php** + +```php + + */ + protected function getDynamicEntityPostUpdatePlugins(): array + { + return [ + new CategoryClosureTableDynamicEntityPostUpdatePlugin(), + new CategoryUrlDynamicEntityPostUpdatePlugin(), + new CategoryTreeDynamicEntityPostUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\DynamicEntityExtension\Dependency\Plugin\DynamicEntityPostCreatePluginInterface> + */ + protected function getDynamicEntityPostCreatePlugins(): array + { + return [ + new CategoryClosureTableDynamicEntityPostCreatePlugin(), + new CategoryUrlDynamicEntityPostCreatePlugin(), + new CategoryTreeDynamicEntityPostCreatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify that plugins are installed correctly, follow the steps: + +1. Create a category using dynamic entity API: + +```bash +POST /dynamic-entity/categories HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Accept: application/json +Authorization: Bearer {your_token} +Content-Length: 257 +{ + "data": [ + { + "fk_category_template": 1, + "category_key": "my-category", + "is_active": true, + "is_clickable": true, + "is_in_menu": true, + "is_searchable": true + } + ] +} +``` + +Take note of the `id_category` in the response. + +2. Create a category-store relation: + +```bash +POST /dynamic-entity/category-stores HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Authorization: Bearer {your_token} +Content-Length: 100 +{ + "data": [ + { + "fk_category": {ID_CATEGORY}, + "fk_store": 1 + } + ] +} +``` + +3. Create a category attribute: + +```bash +POST /dynamic-entity/category-attributes HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Accept: application/json +Authorization: Bearer {your_token} +Content-Length: 184 + +{ + "data": [ + { + "fk_category": {ID_CATEGORY}, + "meta_description": "My Category", + "fk_locale": 66, + "name": "My Category" + } + ] +} +``` + +4. Create a category node: + +```bash +POST /dynamic-entity/category-nodes HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Authorization: Bearer {your_token} +Content-Length: 203 +{ + "data": [ + { + "fk_category": {ID_CATEGORY}, + "fk_parent_category_node": 1, + "is_main": true, + "is_root": false, + "node_order": 0 + } + ] +} +``` + +Take note of the `id_category_node` in the response. + +5. Check that the category closure table entities have been created: + +```sql +SELECT * FROM spy_category_closure_table WHERE fk_category_node_descendant = {ID_CATEGORY_NODE}; +``` + +6. Check that the category URLs have been created: + +```sql +SELECT * FROM spy_url WHERE fk_resource_categorynode = {ID_CATEGORY_NODE}; +``` + +7. Check that the category tree has been published: + +```sql +SELECT spy_category_tree_storage.`data` +FROM spy_category_tree_storage + LEFT JOIN spy_locale ON spy_category_tree_storage.locale = spy_locale.locale_name + LEFT JOIN spy_store ON spy_category_tree_storage.store = spy_store.name +WHERE spy_locale.id_locale = 66 + AND spy_store.id_store = 1; +``` + +8. Check that newly created category is present in the category tree JSON. + +9. Update the category attribute: + +```bash +PATCH /dynamic-entity/category-attributes HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Authorization: Bearer {your_token} +Content-Length: 173 +{ + "data": [ + { + "id_category_attribute": {id_category_attribute}, + "meta_description": "My Category", + "name": "My Category Updated" + } + ] +} +``` + +10. Check that the category URL has been updated: + +```sql +SELECT * FROM spy_url WHERE fk_resource_categorynode = {ID_CATEGORY_NODE}; +``` + +11. Update the category node: + +```bash +PATCH /dynamic-entity/category-nodes HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Authorization: Bearer {your_token} +Content-Length: 120 +{ + "data": [ + { + "id_category_node": 20, + "fk_parent_category_node": 5 + } + ] +} +``` + +12. Check that category closure table entities have been updated: + +```sql +SELECT * FROM spy_category_closure_table WHERE fk_category_node_descendant = {ID_CATEGORY_NODE}; +``` + +13. Check that category tree has been updated: + +```sql +SELECT spy_category_tree_storage.`data` +FROM spy_category_tree_storage + LEFT JOIN spy_locale ON spy_category_tree_storage.locale = spy_locale.locale_name + LEFT JOIN spy_store ON spy_category_tree_storage.store = spy_store.name +WHERE spy_locale.id_locale = 66 + AND spy_store.id_store = 1; +``` + +14. Check that newly created category is present in the category tree JSON. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-inventory-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-inventory-management-feature.md new file mode 100644 index 00000000000..94ea8f9016f --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api-inventory-management-feature.md @@ -0,0 +1,101 @@ +This document describes how to install the Data Exchange API + Inventory Management feature. + +## Install feature core + +Follow the steps below to install the Data Exchange API + Inventory Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------|------------------|------------------| +| Data Exchange API | {{page.release_tag}} | [Install the Data Exchange API](/docs/pbc/all/data-exchange/latest/install-and-upgrade/install-the-data-exchange-api.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | + +### 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| AvailabilityDynamicEntityPostUpdatePlugin | Checks if `spy_stock_product` is updated and updates availability. | None | Spryker\Zed\Availability\Communication\Plugin\DynamicEntity | +| AvailabilityDynamicEntityPostCreatePlugin | Checks if `spy_stock_product` is updated and updates availability. | None | Spryker\Zed\Availability\Communication\Plugin\DynamicEntity | + +**src/Pyz/Zed/DynamicEntity/DynamicEntityDependencyProvider.php** + +```php + + */ + protected function getDynamicEntityPostUpdatePlugins(): array + { + return [ + new AvailabilityDynamicEntityPostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\DynamicEntityExtension\Dependency\Plugin\DynamicEntityPostCreatePluginInterface> + */ + protected function getDynamicEntityPostCreatePlugins(): array + { + return [ + new AvailabilityDynamicEntityPostCreatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Let's say you want to have a new endpoint `/dynamic-data/stock-products` to operate with data in `spy_stock_product` table in the database. + +Based on the provided information, the SQL transaction for interacting with the `spy_stock_product` table through the API request via `dynamic-entity/stock-products` would be as follows: + +```sql +BEGIN; +INSERT INTO `spy_dynamic_entity_configuration` VALUES (1,'stock-products','spy_stock_product',1,'{"identifier":"id_stock_product","isDeletable": false,"fields":[{"fieldName":"id_stock_product","fieldVisibleName":"id_stock_product","isCreatable":false,"isEditable":false,"validation":{"isRequired": false},"type":"integer"},{"fieldName":"fk_product","fieldVisibleName":"fk_product","isCreatable":true,"isEditable":true,"type":"integer","validation":{"isRequired": true}},{"fieldName":"fk_stock","fieldVisibleName":"fk_stock","isCreatable":true,"isEditable":true,"type":"integer","validation":{"isRequired": true}},{"fieldName":"is_never_out_of_stock","fieldVisibleName":"is_never_out_of_stock","isCreatable":true,"isEditable":true,"type":"boolean","validation":{"isRequired": false}},{"fieldName":"quantity","fieldVisibleName":"quantity","isCreatable":true,"isEditable":true,"type":"integer","validation":{"isRequired": true}}]}', '2023-07-29 12:15:13.0', '2023-07-29 12:15:15.0'); +COMMIT; +``` + +Do the following: + +1. Obtain an access token. Follow [How to send a request in Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) for details on how to do that. + +2. Send a `PATCH` request. This request needs to include the necessary headers, such as Content-Type, Accept, and Authorization, with the access token provided: + +```bash +PATCH /dynamic-entity/stock-products HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Accept: application/json +Authorization: Bearer {your_token} +Content-Length: 174 +{ + "data": [ + { + "idStockProduct": 1, + "quantity": 10 + } + ] +} +``` + +3. Make sure that after updating the stock data, the product availability is updated as well: + +```sql +SELECT * from spy_availability WHERE sku='PRODUCT_SKU'; +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api.md b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api.md new file mode 100644 index 00000000000..9cee4d0e8c1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-data-exchange-api.md @@ -0,0 +1,780 @@ +This document describes how to install the Data Exchange API. + +Data Exchange API is a powerful tool that enables seamless interaction with databases. You can easily access data by sending requests to a dedicated API endpoint. It lets you retrieve, create, update, and manage data in a flexible and efficient manner. + +## Install feature core + +Follow the steps below to install the Data Exchange API core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API Application](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Backend API Authentication | {{page.release_tag}} | [Backend API - Authentication integration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.html) | + +### Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/dynamic-entity-backend-api:"^1.12.0" spryker/dynamic-entity-gui:"^1.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| DynamicEntity | vendor/spryker/dynamic-entity | +| DynamicEntityBackendApi | vendor/spryker/dynamic-entity-backend-api | +| DynamicEntityGui | vendor/spryker/dynamic-entity-gui | + +{% endinfo_block %} + +### Set up the configuration + +1. Move the following commands into the `setup-glue` section after the `demodata` step: + +**config/install/docker.yml** + +```yaml +setup-glue: + controller-cache-warmup: + command: 'vendor/bin/glue glue-api:controller:cache:warm-up' + + api-generate-documentation: + command: 'vendor/bin/glue api:generate:documentation' +``` + +2. By default, requests are sent to `/dynamic-entity/{entity-alias}`. To replace the `dynamic-entity` part of the endpoint, adjust `DynamicEntityBackendApiConfig`: + +**src/Pyz/Glue/DynamicEntityBackendApi/DynamicEntityBackendApiConfig.php** + +```php + + +4. Optional: To exclude database schemas from configuring, define them as follows: + +**src/Pyz/Zed/DynamicEntityGui/DynamicEntityGuiConfig.php** + +```php + + */ + public function getDisallowedTables(): array + { + return [ + 'spy_dynamic_entity_configuration', + ]; + } +} +``` + +{% info_block infoBox "" %} + +Tables that aren't allowed for configuration are defined in `Spryker\Zed\DynamicEntity\Business\Reader\DisallowedTablesReader::getDefaultDisallowedTables()`. + +{% endinfo_block %} + + + +### Configure Dynamic Data installation + +1. Optional: To set the default configuration data, create a configuration file following the example: + +
    src/Pyz/Zed/DynamicEntity/data/installer/configuration.json + +#### Example + +```json +[ + { + "tableName": "spy_tax_rate", + "tableAlias": "taxRates", + "isActive": true, + "definition": { + "identifier": "id_tax_rate", + "isDeletable": false, + "fields": [ + { + "fieldName": "id_tax_rate", + "fieldVisibleName": "id_tax_rate", + "isCreatable": true, + "isEditable": true, + "type": "integer", + "validation": { "isRequired": false } + }, + { + "fieldName": "fk_country", + "fieldVisibleName": "fk_country", + "isCreatable": true, + "isEditable": true, + "type": "integer", + "validation": { "isRequired": false } + }, + { + "fieldName": "name", + "fieldVisibleName": "name", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": true } + }, + { + "fieldName": "rate", + "fieldVisibleName": "rate", + "isCreatable": true, + "isEditable": true, + "type": "float", + "validation": { "isRequired": true } + } + ] + } + }, + { + "tableName": "spy_country", + "tableAlias": "countries", + "isActive": true, + "definition": { + "identifier": "id_country", + "isDeletable": false, + "fields": [ + { + "fieldName": "id_country", + "fieldVisibleName": "id_country", + "isCreatable": true, + "isEditable": true, + "type": "integer", + "validation": { "isRequired": false } + }, + { + "fieldName": "iso2_code", + "fieldVisibleName": "iso2_code", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": true } + }, + { + "fieldName": "iso3_code", + "fieldVisibleName": "iso3_code", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": false } + }, + { + "fieldName": "name", + "fieldVisibleName": "name", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": false } + }, + { + "fieldName": "postal_code_mandatory", + "fieldVisibleName": "postal_code_mandatory", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": false } + }, + { + "fieldName": "postal_code_regex", + "fieldVisibleName": "postal_code_regex", + "isCreatable": true, + "isEditable": true, + "type": "string", + "validation": { "isRequired": false } + } + ] + }, + "childRelations": [ + { + "name": "countryTaxRates", + "isEditable": true, + "childDynamicEntityConfiguration": { + "tableAlias": "tax-rates" + }, + "relationFieldMappings": [ + { + "childFieldName": "fk_country", + "parentFieldName": "id_country" + } + ] + } + ] + } +] +``` + +
    + +
    + + +2. Import new configuration relations: + +```bash +vendor/bin/console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +To check the configuration in the database, send the following request: + +```bash +GET /dynamic-entity/countries?include=countryTaxRates HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/json +Accept: application/json +Authorization: Bearer {your_token} +``` + +Response sample: + +```json +{ + "data": [ + { + "id_country": 60, + "iso2_code": "DE", + "iso3_code": "DEU", + "name": "Germany", + "postal_code_mandatory": true, + "postal_code_regex": "\\d{5}", + "countryTaxRates": [ + { + "id_tax_rate": 7, + "fk_country": 60, + "name": "Germany Standard", + "rate": "19.00" + }, + { + "id_tax_rate": 16, + "fk_country": 60, + "name": "Germany Reduced", + "rate": "7.00" + } + ] + }, + // ... other countries with tax rates + ] +} +``` + +{% endinfo_block %} + + + + + +{% info_block infoBox "" %} +Structure: + +| Name | Imported to | Description | +|-----------------------------------------------------------|---------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| tableName | spy_dynamic_entity_configuration.table_name | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | +| tableAlias | spy_dynamic_entity_configuration.table_alias | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | +| isActive | spy_dynamic_entity_configuration.is_active | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | +| definition | spy_dynamic_entity_configuration.definition | For details see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html#create-and-configure-a-data-exchange-api-endpoint) | +| childRelations | spy_dynamic_entity_configuration_relation | Relation between two Data Exchange API configurations. Allows to execute complex requests to retrieve or save data together with relations. See details [How to send request in data exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) | +| childRelations.name | spy_dynamic_entity_configuration_relation.name | Name of the relation, used to include relations as part of Data Exchange API requests, see details [How to send request in data exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) | +| childRelations.isEditable | spy_dynamic_entity_configuration_relation.is_editable | If set to `false` limits relation functionality to only GET requests, POST/PATCH/PUT requests are restricted. | +| childRelations.childDynamicEntityConfiguration.tableAlias | spy_dynamic_entity_configuration_relation.fk_child_dynamic_entity_configuration | The alias of the child Data Exchange API configuration for the relation, parent configuration details are determined based on the configuration where the child relations added. | +| childRelations.relationFieldMapping | spy_dynamic_entity_configuration_relation_field_mapping | Details about how child and parent configuration of the relations are connected. | + +{% endinfo_block %} + +3. Add the path to the configuration file: + +**src/Pyz/Zed/DynamicEntity/DynamicEntityConfig.php** + +```php + + src/data/import/glossary.csv + +```yaml +dynamic_entity.validation.invalid_data_format,"Invalid or missing data format. Please ensure that the data is provided in the correct format. Example request body: {'data':[{...},{...},..]}",en_US +dynamic_entity.validation.invalid_data_format,"Ungültiges oder fehlendes Datenformat. Stellen Sie bitte sicher, dass die Daten im richtigen Format bereitgestellt werden. Beispiel Anforderungskörper: {'data':[{...},{...}]}",de_DE +dynamic_entity.validation.persistence_failed,"Failed to persist the data for `%errorPath%`. Please verify the provided data and try again.",en_US +dynamic_entity.validation.persistence_failed,"Das Speichern der Daten ist fehlgeschlagen für `%errorPath%`. Bitte überprüfen Sie die bereitgestellten Daten und versuchen Sie es erneut.",de_DE +dynamic_entity.validation.persistence_failed_duplicate_entry,"Failed to persist the data for `%errorPath%`. Please verify the provided data and try again. Entry is duplicated.",en_US +dynamic_entity.validation.persistence_failed_duplicate_entry,"Das Speichern der Daten ist fehlgeschlagen für `%errorPath%`. Bitte überprüfen Sie die bereitgestellten Daten und versuchen Sie es erneut. Eintrag is doppelt vorhanden.",de_DE +dynamic_entity.validation.persistence_failed_not_nullable_field,"Failed to persist the data for `%errorPath%`. Please verify the provided data and try again. Field must not be null.",en_US +dynamic_entity.validation.persistence_failed_not_nullable_field,"Das Speichern der Daten ist fehlgeschlagen für `%errorPath%`. Bitte überprüfen Sie die bereitgestellten Daten und versuchen Sie es erneut. Das Feld darf nicht null sein.",de_DE +dynamic_entity.validation.delete_foreign_key_constraint_fails,"Failed to delete the data for `%errorPath%`. The entity has a child entity and can not be deleted. Child entity: `%childEntity%`.",en_US +dynamic_entity.validation.delete_foreign_key_constraint_fails,"Die Daten für `%errorPath%` konnten nicht gelöscht werden. Die Entität hat eine untergeordnete Entität und kann nicht gelöscht werden. Untergeordnete Entität: `%childEntity%`.",de_DE +dynamic_entity.validation.entity_does_not_exist,"The entity `%errorPath%` could not be found in the database.",en_US +dynamic_entity.validation.entity_does_not_exist,"Die Entität `%errorPath%` konnte in der Datenbank nicht gefunden werden.",de_DE +dynamic_entity.validation.invalid_field_type,"Invalid data type `%errorPath%` for field `%fieldName%`",en_US +dynamic_entity.validation.invalid_field_type,"Ungültiger Datentyp `%errorPath%` für das Feld `%fieldName%`",de_DE +dynamic_entity.validation.invalid_field_value,"Invalid data value `%errorPath%` for field: `%fieldName%`. Field rules: %validationRules%",en_US +dynamic_entity.validation.invalid_field_value,"Ungültiger Datenwert `%errorPath%` für das Feld: `%fieldName%`. Feldregeln: %validationRules%",de_DE +dynamic_entity.validation.required_field_is_missing,"The required field must not be empty. Field: `%errorPath%.%fieldName%`",en_US +dynamic_entity.validation.required_field_is_missing,"Das erforderlich Feld darf nicht leer sein. Feld: `%errorPath%.%fieldName%`",de_DE +dynamic_entity.validation.entity_not_found_or_identifier_is_not_creatable,"Entity `%errorPath%.%identifier%` not found by identifier, and new identifier can not be persisted. Please update the request.",en_US +dynamic_entity.validation.entity_not_found_or_identifier_is_not_creatable,"Entität `%errorPath%.%identifier%` konnte anhand der ID nicht gefunden werden, und die neue ID kann nicht dauerhaft gespeichert werden. Bitte aktualisieren Sie die Anfrage.",de_DE +dynamic_entity.validation.modification_of_immutable_field_prohibited,"Modification of immutable field `%errorPath%.%fieldName%` is prohibited",en_US +dynamic_entity.validation.modification_of_immutable_field_prohibited,"Änderung des unveränderlichen Feldes `%errorPath%.%fieldName%` ist nicht zulässig.",de_DE +dynamic_entity.validation.missing_identifier,"Incomplete Request - missing identifier for `%errorPath%`",en_US +dynamic_entity.validation.missing_identifier,"Unvollständige Anforderung - fehlende ID für `%errorPath%`",de_DE +dynamic_entity.validation.provided_field_is_invalid,"The provided `%errorPath%.%fieldName%` is incorrect or invalid.",en_US +dynamic_entity.validation.provided_field_is_invalid,"Der angegebene `%errorPath%.%fieldName%` ist falsch oder ungültig.",de_DE +dynamic_entity.validation.relation_is_not_editable,"The relationship `%relationName%` is not editable by configuration.",en_US +dynamic_entity.validation.relation_is_not_editable,"Die Beziehung `%relationName%` kann nicht per Konfiguration bearbeitet werden.",de_DE +dynamic_entity.validation.relation_not_found,"Relation `%relationName%` not found. Please check the requested relation name and try again.",en_US +dynamic_entity.validation.relation_not_found,"Beziehung `%relationName%` nicht gefunden. Bitte überprüfen Sie den angeforderten Beziehungsnamen und versuchen Sie es erneut.",de_DE +dynamic_entity.validation.configuration_not_found,"Dynamic entity configuration for table alias `%aliasName%` not found.",en_US +dynamic_entity.validation.configuration_not_found,"Dynamische Entitätskonfiguration für Tabellenalias `%aliasName%` nicht gefunden.",de_DE +dynamic_entity.validation.filter_field_not_found,"Filter field `%filterField%` for table alias `%aliasName%` not found.",en_US +dynamic_entity.validation.filter_field_not_found,"Filterfeld `%filterField%` für Tabellen alias `%aliasName%` nicht gefunden.",de_DE +dynamic_entity.validation.invalid_url,"The URL is invalid. `%errorPath%` field `%fieldName%` must have a URL data format.",en_US +dynamic_entity.validation.invalid_url,"Die URL ist ungültig. `%errorPath%` Feld `%fieldName%` muss ein URL-Datenformat haben.",de_DE +dynamic_entity.validation.method_not_allowed,"Method not allowed for the entity `%aliasName%`.",en_US +dynamic_entity.validation.method_not_allowed,"Die Methode ist für die Entität nicht zulässig `%aliasName%`.",de_DE +``` + + + + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary` database table. + +{% endinfo_block %} + +### Configure navigation + +1. Add the Dynamic Exchange API section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Data Exchange API Configuration + fa-exchange-alt + dynamic-entity-gui + configuration-list + index + + + + Create new configuration + dynamic-entity-gui + configuration-create + index + 0 + + + + Edit configuration + dynamic-entity-gui + configuration-edit + index + 0 + + + + +``` + + +2. Update the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure the Data Exchange API section has been added to the Back Office navigation. + +{% endinfo_block %} + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| PropelApplicationPlugin | Initializes `PropelOrm`. | Spryker\Zed\Propel\Communication\Plugin\Application | +| DynamicEntityApiSchemaContextExpanderPlugin | Adds dynamic entities to the documentation generation context. | Spryker\Glue\DynamicEntityBackendApi\Plugin\DocumentationGeneratorApi | +| DynamicEntityDocumentationInvalidationVoterPlugin | Checks if the dynamic entity configuration was changed within the provided interval. | Spryker\Glue\DynamicEntityBackendApi\Plugin\DocumentationGeneratorApi | +| DynamicEntityOpenApiSchemaFormatterPlugin | Formats dynamic entities of the Open API 3 schema: info, components, paths, tags. | Spryker\Glue\DynamicEntityBackendApi\Plugin\DocumentationGeneratorOpenApi | +| DynamicEntityRouteProviderPlugin | Adds routes for the provided dynamic entity to the RouteCollection. | Spryker\Glue\DynamicEntityBackendApi\Plugin | +| DynamicEntityProtectedPathCollectionExpanderPlugin | Expands the list of protected endpoints with dynamic entity endpoints. | Spryker\Glue\DynamicEntityBackendApi\Plugin\GlueBackendApiApplicationAuthorizationConnector | + +
    +src/Pyz/Glue/Console/ConsoleDependencyProvider.php + +```php + + */ + public function getApplicationPlugins(Container $container): array + { + $applicationPlugins = parent::getApplicationPlugins($container); + + $applicationPlugins[] = new PropelApplicationPlugin(); + + return $applicationPlugins; + } +} +``` + +
    + +
    +src/Pyz/Glue/DocumentationGeneratorApi/DocumentationGeneratorApiDependencyProvider.php + +```php +addExpander(new DynamicEntityApiSchemaContextExpanderPlugin(), [static::GLUE_BACKEND_API_APPLICATION_NAME]); + } + + /** + * @return array<\Spryker\Glue\DocumentationGeneratorApiExtension\Dependency\Plugin\DocumentationInvalidationVoterPluginInterface> + */ + protected function getInvalidationVoterPlugins(): array + { + return [ + new DynamicEntityDocumentationInvalidationVoterPlugin(), + ]; + } +} +``` + +
    + +{% info_block infoBox "" %} + +The `DocumentationGeneratorApiDependencyProvider::getInvalidationVoterPlugins()` stack contains plugins that are used to invalidate the documentation cache. +If the documentation cache isn't invalidated, the documentation will not be updated. + +{% endinfo_block %} + +
    +src/Pyz/Glue/DocumentationGeneratorOpenApi/DocumentationGeneratorOpenApiDependencyProvider.php + +```php + + */ + protected function getOpenApiSchemaFormatterPlugins(): array + { + return [ + new DynamicEntityOpenApiSchemaFormatterPlugin(), + ]; + } +} +``` + +
    + +
    +src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php + +```php + + */ + protected function getRouteProviderPlugins(): array + { + return [ + new DynamicEntityRouteProviderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure you can operate data. For instructions, see [Requesting data using the Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.html) + +{% endinfo_block %} + +{% info_block infoBox %} + +The only ways to configure child relations for Data Exchange API is by updating the database or the import configuration in `src/Pyz/Zed/DynamicEntity/data/installer/configuration.json`. + +{% endinfo_block %} + +### Configure the scheduler + +1. Adjust the scheduler project configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +$jobs[] = [ + 'name' => 'glue-api-generate-documentation', + 'command' => '$PHP_BIN vendor/bin/glue api:generate:documentation --invalidated-after-interval 90sec', + 'schedule' => '*/1 * * * *', + 'enable' => true, +]; +``` + +2. Apply the scheduler configuration update: + +```bash +vendor/bin/console scheduler:suspend +vendor/bin/console scheduler:setup +vendor/bin/console scheduler:resume +``` + +{% info_block warningBox "Verification" %} + +1. Configure at least one entity in `spy_dynamic_entity_configuration`. For instructions, see [How to configure Data Exchange API](/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.html). +2. Make sure `src\Generated\GlueBackend\Specification\spryker_backend_api.schema.yml` has been generated and contains the corresponding endpoint with correct configurations. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-discontinued-products-product-labels-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-discontinued-products-product-labels-feature.md new file mode 100644 index 00000000000..d7cac796896 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-discontinued-products-product-labels-feature.md @@ -0,0 +1,85 @@ + + +## Install feature core + +Follow the steps below to install the feature core. + + +### Prerequisites + +To start feature integration, overview, and install the necessary features: + +| NAME | VERSION | +| --- | --- | +| Discontinued Products | {{page.release_tag}} | +| Product Labels | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Import data + +Follow the steps to import product label data: + +{% info_block infoBox %} + +The following imported entities will be used as a product label in Spryker OS. + +{% endinfo_block %} + +Prepare data according to your requirements using the following demo data: + +**data/import/product_label.csv** + +```yaml +name,is_active,is_dynamic,is_exclusive,front_end_reference,valid_from,valid_to,name.en_US,product_abstract_skus,priority +Discontinued,1,1,0,discontinued,,,Discontinued,Abgesetzt,,3 +``` + +2. Run the command to import data: + +```bash +console data:import product-label +``` + +{% info_block warningBox "Verification" %} + +Ensure that the configured data has been added to the spy_product_label table in the database. + +{% endinfo_block %} + +### 2) Set up behaviour + +Set up the following behavior: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductDiscontinuedLabelUpdaterPlugin | Returns the list of relations of product labels to abstract products to assign or deassign product labels for. The results are used to persist product label relation changes into the database. The plugin is called by the `ProductLabelRelationUpdaterConsole` command. | None | Spryker\Zed\ProductDiscontinuedProductLabelConnector\Communication\Plugin | + +**src/Pyz/Zed/ProductLabel/ProductLabelDependencyProvider.php** + +```php + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    +
    +``` + +**src/Pyz/Zed/FileManagerStorage/Persistence/Propel/Schema/spy_file_storage.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database:: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------------------|---------|---------| +| spy_file | table | created | +| spy_file_info | table | created | +| spy_file_localized_attributes | table | created | +| spy_file_directory | table | created | +| spy_file_directory_localized_attributes | table | created | +| spy_mime_type | table | created | +| spy_file_storage | table | created | + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------|-------|---------|------------------------------------------------------------------------| +| DataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReport | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| FileManagerData | class | created | src/Generated/Shared/Transfer/FileManagerDataTransfer | +| File | class | created | src/Generated/Shared/Transfer/FileTransfer | +| FileUpload | class | created | src/Generated/Shared/Transfer/FileUploadTransfer | +| FileInfo | class | created | src/Generated/Shared/Transfer/FileInfoTransfer | +| FileLocalizedAttributes | class | created | src/Generated/Shared/Transfer/FileLocalizedAttributesTransfer | +| FileDirectory | class | created | src/Generated/Shared/Transfer/FileDirectoryTransfer | +| FileDirectoryLocalizedAttributes | class | created | src/Generated/Shared/Transfer/FileDirectoryLocalizedAttributesTransfer | +| FileDirectoryTree | class | created | src/Generated/Shared/Transfer/FileDirectoryTreeTransfer | +| FileDirectoryTreeNode | class | created | src/Generated/Shared/Transfer/FileDirectoryTreeNodeTransfer | +| FileStorageData | class | created | src/Generated/Shared/Transfer/FileStorageDataTransfer | +| FileStorage | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FileSystemStreamTransfer | +| FileSystemStream | class | created | src/Generated/Shared/Transfer/FileSystemStreamTransfer | +| FileSystemQuery | class | created | src/Generated/Shared/Transfer/FileSystemQueryTransfer | +| FileSystemContent | class | created | src/Generated/Shared/Transfer/FileSystemContentTransfer | +| FileSystemDelete | class | created | src/Generated/Shared/Transfer/FileSystemDeleteTransfer | +| FileSystemDeleteDirectory | class | created | src/Generated/Shared/Transfer/FileSystemDeleteDirectoryTransfer | +| FileSystemRename | class | created | src/Generated/Shared/Transfer/FileSystemRenameTransfer | +| FileSystemCopy | class | created | src/Generated/Shared/Transfer/FileSystemCopyTransfer | +| FileSystemCreateDirectory | class | created | src/Generated/Shared/Transfer/FileSystemCreateDirectoryTransfer | +| FileSystemList | class | created | src/Generated/Shared/Transfer/FileSystemListTransfer | +| FileSystemVisibility | class | created | src/Generated/Shared/Transfer/FileSystemVisibilityTransfer | +| FileInfoLocalizedAttributes | class | created | src/Generated/Shared/Transfer/FileInfoLocalizedAttributesTransfer | +| Locale | class | created | src/Generated/Shared/Transfer/LocaleTransfer | +| MimeType | class | created | src/Generated/Shared/Transfer/MimeTypeTransfer | +| MimeTypeCollection | class | created | src/Generated/Shared/Transfer/MimeTypeCollectionTransfer | +| MimeTypeResponse | class | created | src/Generated/Shared/Transfer/MimeTypeResponseTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| TabsView | class | created | src/Generated/Shared/Transfer/TabsViewTransfer | +| TabItem | class | created | src/Generated/Shared/Transfer/TabItemTransfer | + +{% endinfo_block %} + +## 3) Set up the configuration + +Add the following configuration: + +{% info_block warningBox "Note" %} + +The web server's maximum file size configuration—`max-request-body-size`—has higher priority than the module configuration and can be adjusted using `deploy.*.yml`. +For additional details, refer to [Docker SDK configuration reference](/docs/dg/dev/sdks/the-docker-sdk/docker-sdk-configuration-reference.html) + +{% endinfo_block %} + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------|-----------------------|-------------------------------| +| FileManagerConstants::STORAGE_NAME | Storage name | Spryker\Shared\FileManager | +| FileManagerGuiConstants::DEFAULT_FILE_MAX_SIZE | Default max file size | Spryker\Shared\FileManagerGui | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\FileManager\FileManagerConstants; +use Spryker\Shared\FileManagerGui\FileManagerGuiConstants; + +$config[FileManagerConstants::STORAGE_NAME] = 'files'; +$config[FileManagerGuiConstants::DEFAULT_FILE_MAX_SIZE] = '10M'; +``` + +**src/Pyz/Zed/FileManagerGui/FileManagerGuiConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + return [ + FileManagerDataImportConfig::IMPORT_TYPE_MIME_TYPE, + ]; + } +} +``` + +#### Set up behavior + +Enable the following behavior: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|--------------------------|---------------|---------------------------------------------------------| +| FileManagerDataImportPlugin | Imports mime types data. | | Spryker\Zed\FileManagerDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new FileManagerDataImportPlugin(), + ]; + } +} +``` + +#### Run import + +```bash +console data:import mime-type +``` + +{% info_block warningBox "Verification" %} + +Make sure that the imported data has been added to the `spy_mime_type` table. + +{% endinfo_block %} + +### 5) Set up storage configuration + +**src/Pyz/Zed/FileManagerStorage/FileManagerStorageConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + FileManagerStorageConstants::FILE_SYNC_STORAGE_QUEUE, + ]; + } + +} +``` + +### 6) Set up behaviors + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| FileManagerStorageSubscriber | Registers listeners that are responsible for publishing file information to storage when a related entity changes. | | Spryker\Zed\FileManagerStorage\Communication\Plugin\Event\Subscriber | +| SynchronizationStorageQueueMessageProcessorPlugin | Reads messages from the synchronization queue and saves them to the storage. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| FileSynchronizationDataBulkPlugin | Allows synchronizing the entire storage table content into Storage. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | +| FileManagerPublisherTriggerPlugin | Allows publishing or re-publishing price product storage data manually. | | Spryker\Zed\FileManagerStorage\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new FileManagerStorageSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + FileManagerStorageConstants::FILE_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new FileSynchronizationDataBulkPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new FileManagerPublisherTriggerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When a file data is created, updated, or deleted, make sure it's exported or removed from the key-value store (Redis or Valkey) accordingly. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-gift-cards-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-gift-cards-feature.md new file mode 100644 index 00000000000..361acbb36a9 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-gift-cards-feature.md @@ -0,0 +1,1334 @@ + + +This document describes how to install the [Gift Cards feature](/docs/pbc/all/gift-cards/latest/gift-cards.html). + +## Install feature core + +Follow the steps below to install the Gift Cards feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +|Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| +|Payments | {{page.release_tag}} |[Install the Payments feature](/docs/pbc/all/payment-service-provider/latest/base-shop/install-and-upgrade/install-the-payments-feature.html)| +| Shipment | {{page.release_tag}} |[Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html)| +| Order Management | {{page.release_tag}} |[Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html)| +| Mailing & Notifications | {{page.release_tag}} |[Install the Mailing & Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html)| +| Promotions & Discounts | {{page.release_tag}} |[Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html)| + +### 1) Install the required modules + +```bash +composer require spryker-feature/gift-cards:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CartCode | vendor/spryker/cart-code | +| CartCodeExtension | vendor/spryker/cart-code-extension | +| GiftCard | vendor/spryker/gift-card | +| GiftCardBalance | vendor/spryker/gift-card-balance | +| Nopayment | vendor/spryker/nopayment | + +{% endinfo_block %} + +### 2) Set up the Gift Card purchase process + +Extend your project with the following configuration: + +**src/Pyz/Zed/GiftCard/GiftCardConfig.php** + +```php + [ + GiftCardConfig::PROVIDER_NAME, + ], +]; + +$config[NopaymentConstants::NO_PAYMENT_METHODS] = [ + NopaymentConfig::PAYMENT_PROVIDER_NAME, +]; +$config[NopaymentConstants::WHITELIST_PAYMENT_METHODS] = [ + GiftCardConfig::PROVIDER_NAME, +]; + +// ---------- State machine (OMS) +$config[OmsConstants::ACTIVE_PROCESSES] = [ + 'Nopayment01', +]; +$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + GiftCardConfig::PROVIDER_NAME => 'DummyPayment01', // Order State Machine name of your choice + NopaymentConfig::PAYMENT_PROVIDER_NAME => 'Nopayment01', +]; +``` + +**src/Pyz/Zed/GiftCard/GiftCardConfig.php** + +```php + '/gift-card/sales/list', // lists used gift cards for the order + ]; + + $externalBlocks = parent::getSalesDetailExternalBlocksUrls(); + + return array_merge($externalBlocks, $projectExternalBlocks); + } +} +``` + +{% info_block warningBox "Verification" %} +After you finish the [Setup Behavior](#install-the-required-modules) step, make sure the following applies: +- The `NoPayment01` state machine has been activated successfully. +- When using a gift card to pay for an entire order, the configured order state machine is used—for example, `Nopayment01`. +- You can't use denied payment methods when using a gift card. +- In the Back office, on the order details page, the gift cards used in an order are displayed. + +{% endinfo_block %} + +### 4) Set up the database schema + +Apply database changes and to generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_gift_card | table | created | +| spy_gift_card_product_abstract_configuration | table | created | +| spy_gift_card_product_abstract_configuration_link | table | created | +| spy_gift_card_product_configuration | table | created | +| spy_gift_card_product_configuration_link | table | created | +| spy_payment_gift_card | table | created | +| spy_gift_card_balance_log | table | created | +| spy_sales_order_item_gift_card | table | created | + +Make sure that propel entities have been generated successfully by checking their existence. Also, change the generated entity classes to extend from Spryker core classes. + +| CLASS PATH | EXTENDS | +| --- | --- | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCard.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCard | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardQuery | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductAbstractConfiguration.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductAbstractConfiguration | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductAbstractConfigurationQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductAbstractConfigurationQuery | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductAbstractConfigurationLink.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductAbstractConfigurationLink | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductAbstractConfigurationLinkQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductAbstractConfigurationLink | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductConfiguration.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductConfiguration | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductConfigurationQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductConfigurationQuery | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductConfigurationLink.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductConfigurationLink | +| src/Orm/Zed/GiftCard/Persistence/SpyGiftCardProductConfigurationLinkQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyGiftCardProductConfigurationLinkQuery | +| src/Orm/Zed/GiftCard/Persistence/SpyPaymentGiftCard.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyPaymentGiftCard | +| src/Orm/Zed/GiftCard/Persistence/SpyPaymentGiftCardQuery.php | Spryker\\Zed\\GiftCard\\Persistence\\Propel\\AbstractSpyPaymentGiftCardQuery | +| src/Orm/Zed/GiftCardBalance/Persistence/SpyGiftCardBalanceLog.php | Orm\\Zed\\GiftCardBalance\\Persistence\\Base\\SpyGiftCardBalanceLog | +| src/Orm/Zed/GiftCardBalance/Persistence/SpyGiftCardBalanceLogQuery.php | Orm\\Zed\\GiftCardBalance\\Persistence\\Base\\SpyGiftCardBalanceLogQuery | +| src/Orm/Zed/Sales/Persistence/SpySalesOrderItemGiftCard.php | Spryker\\Zed\\Sales\\Persistence\\Propel\\AbstractSpySalesOrderItemGiftCard | +| | Spryker\\Zed\\Sales\\Persistence\\Propel\\AbstractSpySalesOrderItemGiftCardQuery | + +{% endinfo_block %} + +### 5) Import the gift card configuration data + +{% info_block infoBox "" %} + +The following step imports abstract and concrete gift card configurations. Implementation for the data importer isn't provided by Spryker Core, so you need to implement it on the project level. You can find an example implementation in the [`suit` repository](https://github.com/spryker-shop/suite/commit/f38bc5264e9964d2d2da5a045c0305973b3cb556#diff-e854f9b396bdaa07ca6276f168aaa76a); only `Console` and `DataImport` module changes are relevant. The following data import examples are based on this implementation. + + {% endinfo_block %} + +1. Prepare your data according to your requirements using the demo data: + +**data/import/gift_card_abstract_configuration.csv** + +```yaml +abstract_sku,pattern +1234,{prefix}-{randomPart}-{suffix} +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| abstract_sku |mandatory | string | 1234 | SKU reference of an abstract gift card product. | +| pattern |mandatory | string | {prefix}-{randomPart}-{suffix} | A pattern that is used to generate codes for purchased gift cards. | + +**data/import/gift_card_concrete_configuration.csv** + +```yaml +sku,value +1234_1,1000 +1234_2,2000 +1234_3,5000 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| sku | ✓ | string| 1234 | An SKU reference of an abstract gift card product. | +| value | ✓ | string | {prefix}-{randomPart}-{suffix} | A pattern that is used to generate codes for purchased gift cards. | + +2. Import data: + +```bash +console data:import:gift-card-abstract-configuration +console data:import:gift-card-concrete-configuration +``` + +{% info_block warningBox "Verification" %} + +Make sure abstract and concrete gift card configuration has been imported to `spy_gift_card_product_abstract_configuration` and `spy_gift_card_product_configuration` database tables. + +{% endinfo_block %} + +### 6) Set up the shipment method data + +{% info_block infoBox "" %} + +In this step, you create a shipment method called `NoShipment`. The name of the shipment method must match the value of the `\Spryker\Shared\Shipment\ShipmentConfig::SHIPMENT_METHOD_NAME_NO_SHIPMENT` constant. + +{% endinfo_block %} + +1. Taking into account project customizations, extend the shipment method data importer as follows: + +**data/import/shipment.csv** + +```yaml +shipment_method_key,name,carrier,taxSetName +spryker_no_shipment,NoShipment,NoShipment,Tax Exempt +``` + +2. Taking into account project customizations, extend the shipment price data importer as follows: + +**data/import/shipment_price.csv** + +```yaml +shipment_method_key,store,currency,value_net,value_gross +spryker_no_shipment,DE,EUR,0,0 +``` + +3. Apply changes: + +```bash +console data:import:shipment +console data:import:shipment-price +``` + +{% info_block warningBox "Verification" %} + +Make sure that a shipment method with the `NoShipment` name exists in `spy_shipment_method` and `spy_shipment_method_price` database tables. + +{% endinfo_block %} + +### 7) Import additional and optional data + +{% info_block infoBox "" %} + +To represent and display gift cards as products in your shop, you need to import data into your database depending on your project configuration and needs. The following list contains the points that can be used to get an idea of what gift card-related data you might want to use: +- *Product Attribute Key* to create a gift card `value` super attribute that defines gift card variants. +- *Abstract Product* that represents gift cards in your catalog. +- *Abstract Product Store Relation* to manage store-specific gift cards. +- *Concrete Product* that represents gift cards with a specific price value. +- *Product Image* for abstract and concrete products to display gift cards. +- *Product Price* for concrete gift card products where the price value matches the "value" super attribute. +- *Product Stock* data for concrete gift card products. +- *Product Management Attribute* to define the previously created "value" product attribute for the PIM. +- *Category* that represents all gift cards. +- *Navigation item* to display the gift card category or gift card product details page directly. + +{% endinfo_block %} + +### 8) Prepare order state machines for the Gift Card purchase process + +{% info_block infoBox "" %} + +In this step, you can customize your order state machine to purchase gift cards. The process distinguishes gift card order items and ships them by emailing the customer. The following example shows how the `DummyPayment` state machine is defined. + +{% endinfo_block %} + +The `DummyPayment` order state machine example: + +
    +config/Zed/oms/DummyPayment01.xml + +```html + + + + + + DummyRefund + CreateGiftCard + + + + + + + exclude from customer + + + exclude from customer + + + + + + + + + + + + new + payment pending + authorize + + + + new + invalid + authorize + + + + payment pending + paid + pay + + + + payment pending + cancelled + pay + + + + paid + confirmed + confirm + + + + confirmed + exported + check giftcard purchase + + + + confirmed + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + ready for return + return + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + +``` + +![Dummy payment](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Feature+Integration+Guides/Gift+Cards+Feature+Integration/dummy-payment.svg) + +
    + + + +
    config/Zed/oms/GiftCardSubprocess/CreateGiftCard01.xml + +```html + + + + + + + + + + + + + gift card purchased + gift card created + create giftcard + + + + gift card created + gift card shipped + ship giftcard + + + + + + + + + + + + +``` + +
    + + +
    +config/Zed/oms/DummySubprocess/DummyRefund01.xml + +```html + + + + + + + + + + + + + + ready for return + returned + execute-return + + + + returned + refunded + refund + + + + + + + + + + +``` + +![Nopayment](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Feature+Integration+Guides/Gift+Cards+Feature+Integration/nopayment.svg) +
    + + +### 9) Prepare order state machines for the Gift Card usage process + +In this step, you customize your order state machine to place orders with zero prices to pay, by using gift cards. The process skips payment-related steps because there is nothing for a customer to pay. The following example shows how the `NoPayment` state machine is defined. + +The `NoPayment` order state machine example: + +
    config/Zed/oms/Nopayment01.xml + +```html + + + + + + DummyRefund + + + + + + + + + + + + + + new + paid + authorize + + + + paid + exported + export + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + ready for return + return + + + + delivered + closed + close + + + + + + + + + + + + + + + + + +``` + +![Nopayment](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Feature+Integration+Guides/Gift+Cards+Feature+Integration/nopayment.svg) + +
    + + +### 10) Enable the gift card purchase process + +To enable purchasing of gifts, add the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|GiftCardCalculatorPlugin | During quote recalculation, distinguishes applicable and non-applicable gift cards and creates payment methods for applicable gift cards. | | Spryker\Zed\GiftCard\Communication\Plugin | +| GiftCardMetadataExpanderPlugin | Extends gift card items with gift card configuration metadata to change cart items. | | Spryker\Zed\GiftCard\Communication\Plugin | +| `GiftCardCheckoutDoSaveOrderPlugin` | Saves gift cards items from the quote. Saves gift card payments from the quote. | | `Spryker\Zed\GiftCard\Communication\Plugin\Checkout` | +| `GiftCardCheckoutPreConditionPlugin` | Returns true if `QuoteTransfer.payments` don't have `GiftCard` payments. Returns true if gift card was in use before and the amount is valid. Returns false otherwise. | | `\Spryker\Zed\GiftCard\Communication\Plugin\Checkout` | +| `NopaymentCheckoutPreConditionPlugin` | Returns true if there is no `Nopayment` payment provider in `QuoteTransfer.payments`; otherwise, it does additional checks and logic. Returns true if `QuoteTransfer.totals.priceToPay` is greater than 0; otherwise, adds an error into `CheckoutResponseTransfer` and returns false. | | `\Spryker\Zed\Nopayment\Communication\Plugin\Checkout` | +| GiftCardDiscountableItemFilterPlugin | Filters gift card items from discountable items. | | Spryker\Zed\GiftCard\Communication\Plugin | +| GiftCardDeliveryMailTypePlugin | Provides a mail type for sending emails about successful gift card orders. | | Spryker\Zed\GiftCardMailConnector\Communication\Plugin\Mail | +| Command\ShipGiftCardByEmailCommandPlugin | Registers the `GiftCardMailConnector/ShipGiftCard` OMS command that is used to deliver a gift card by email. | Use the prior `GiftCardDeliveryMailTypePlugin` to register the necessary mail type. | Spryker\Zed\GiftCardMailConnector\Communication\Plugin\Oms | +|CreateGiftCardCommandPlugin | Registers the `GiftCard/CreateGiftCard` OMS command that is used to generate a new gift card based on a gift card order item configuration. | | Spryker\Zed\GiftCard\Communication\Plugin\Oms\Command | +| IsGiftCardConditionPlugin | Registers the `GiftCard/IsGiftCard` OMS command that is used to check if an order item is a gift card.| | Spryker\Zed\GiftCard\Communication\Plugin\Oms\Condition| +|OnlyGiftCardShipmentMethodFilterPlugin | Filters non-available shipment methods for gift card items to be purchased. | - | Spryker\Zed\GiftCard\Communication\Plugin | + +**src/Pyz/Zed/Calculation/CalculationDependencyProvider.php** + +```php +src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection->add(new GiftCardDeliveryMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +
    src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extendCommandPlugins($container); + $container = $this->extendConditionPlugins($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendCommandPlugins(Container $container): Container + { + $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new ShipGiftCardByEmailCommandPlugin(), 'GiftCardMailConnector/ShipGiftCard'); + $commandCollection->add(new CreateGiftCardCommandPlugin(), 'GiftCard/CreateGiftCard'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendConditionPlugins(Container $container): Container + { + $container->extend(OmsDependencyProvider::CONDITION_PLUGINS, function (ConditionCollectionInterface $conditionCollection) { + $conditionCollection + ->add(new IsGiftCardConditionPlugin(), 'GiftCard/IsGiftCard'); + + return $conditionCollection; + }); + + return $container; + } +} +``` + +
    + +**src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php** + +```php +src/Pyz/Zed/GiftCard/GiftCardDependencyProvider.php + +```php + + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection->add(new GiftCardUsageMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/Payment/PaymentDependencyProvider.php** + +```php + + */ + protected function getPaymentMapKeyBuilderStrategyPlugins(): array + { + return [ + new GiftCardPaymentMapKeyBuilderStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +After completing the [frontend integration](#install-feature-frontend), make sure the following applies: + +- You can activate a gift card using its generated code. +- You can activate more than one gift card simultaneously using the generated codes. +- You can't activate a gift card with a depleted balance. +- During the checkout process, payment method selection is skipped if the gift card covers the grand total. +- Having made a successful purchase with the help of a gift card, you receive a gift card balance notification email. + + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Gift Cards feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/gift-cards:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| CartCodeWidget | vendor/spryker-shop/cart-code-widget | +| GiftCardWidget | vendor/spryker-shop/gift-card-widget | + +{% endinfo_block %} + +### 2) Set up configuration + +Extend your project with the following configuration: + +**config/Shared/config_default.php** + +```php + [ + NopaymentConfig::PAYMENT_PROVIDER_NAME, + ], +]; +``` + +{% info_block warningBox "Verification" %} + +Make sure the `nopayment` payment method is selected when the grand total of an order is covered by a gift card. + +{% endinfo_block %} + +### 3) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.total.price_to_pay,Zu bezahlender Betrag,de_DE +cart.total.price_to_pay,Price to pay,en_US +cart.giftcard.label,Gift card,en_US +cart.giftcard.label,Geschenkgutschein,de_DE +cart.giftcard.apply.failed,The gift card is not applicable,en_US +cart.giftcard.apply.failed,Geschenkgutschein konnte nicht angewendet werden,de_DE +cart.giftcard.apply.successful,Your gift card code has been applied,en_US +cart.giftcard.apply.successful,Ihr Geschenkgutschein wurde angewendet,de_DE +cart.voucher.apply.successful,Your voucher code has been applied,en_US +cart.voucher.apply.successful,Ihr Gutscheincode wurde angewendet,de_DE +cart.code.apply.failed,Code could not be applied,en_US +cart.code.apply.failed,Gutscheincode konnte nicht angewendet werden,de_DE +general.next.button,Next,en_US +general.next.button,Weiter,de_DE +checkout.giftcard.label,Gift card,en_US +checkout.giftcard.label,Geschenkgutschein,de_DE +roduct.attribute.value,Value,en_US +product.attribute.value,Der Wert,de_DE +mail.giftCard.delivery.subject,Your Gift card!,en_US +mail.giftCard.delivery.subject,Deine Geschenkkarte!,de_DE +mail.giftCard.delivery.text,"Sehr geehrter Kunde, vielen Dank für den Kauf einer Geschenkgutschein in unserem Shop. Ihr Gutscheincode lautet: ",de_DE +mail.giftCard.delivery.text,"Dear customer, thank you for buying a gift card at our shop. Your gift card code is: ",en_US +mail.giftCard.usage.subject,Thank you for using a Gift Card!,en_US +mail.giftCard.usage.subject,Vielen Dank dass Sie ein Geschenkgutschein benutzt haben.,de_DE +cart.code.enter-code,Gutscheincode/Geschenkgutscheincode eingeben,de_DE +cart.code.enter-code,Enter voucher/gift card code,en_US +``` + +2. Apply glossary keys: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Enable controllers + +Register the following route provider plugin: + +| PROVIDER | NAMESPACE | +|----------------------------------------| --- | +| CartCodeWidgetRouteProviderPlugin | SprykerShop\Yves\CartCodeWidget\Plugin\Router | +| CartCodeAsyncWidgetRouteProviderPlugin | SprykerShop\Yves\CartCodeWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + + + + + + +
    + + + + + + + +
    + +
    +``` + +2. Configure the full import list: + +**Zed/DataImport/DataImportConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + $customImportTypes = [ + StockDataImportConfig::IMPORT_TYPE_STOCK, + StockDataImportConfig::IMPORT_TYPE_STOCK_STORE, + StockAddressDataImportConfig::IMPORT_TYPE_STOCK_ADDRESS, + ]; + + return array_merge(parent::getFullImportTypes(), $customImportTypes); + } +} +``` + +3. Generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------|-------|-------|----------------------------------------------------------------------| +| Item | class | added | src/Generated/Shared/Transfer/ItemTransfer | +| Order | class | added | src/Generated/Shared/Transfer/OrderTransfer | +| Stock | class | added | src/Generated/Shared/Transfer/StockTransfer | +| StockCriteriaFilter | class | added | src/Generated/Shared/Transfer/StockCriteriaFilterTransfer | +| StockResponse | class | added | src/Generated/Shared/Transfer/StockResponseTransfer | +| StockAddress | class | added | src/Generated/Shared/Transfer/StockAddressTransfer | +| WarehouseAllocation | class | added | src/Generated/Shared/Transfer/WarehouseAllocationTransfer | +| WarehouseAllocationCriteria | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCriteriaTransfer | +| WarehouseAllocationConditions | class | added | src/Generated/Shared/Transfer/WarehouseAllocationConditionsTransfer | +| WarehouseAllocationCollection | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCollectionTransfer | +| WarehouseResourceCollection | class | added | src/Generated/Shared/Transfer/WarehouseAllocationCollectionTransfer | +| WarehousesBackendApiAttributes | class | added | src/Generated/Shared/Transfer/WarehousesBackendApiAttributesTransfer | + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------|---------|----------| +| spy_stock_store | table | created | +| spy_stock_address | table | created | +| spy_warehouse_allocation | table | created | +| spy_stock.is_active | column | added | +| spy_stock.uuid | column | added | +| spy_stock_product.uuid | column | added | + +Make sure that propel entities have been generated: + +| FILE PATH | EXTENDS | +|----------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------| +| src/Orm/Zed/Stock/Persistence/Base/SpyStockStore.php | Spryker/Zed/Stock/Persistence/Propel/AbstractSpyStockStore.php | +| src/Orm/Zed/Stock/Persistence/Base/SpyStockStoreQuery.php | Spryker/Zed/Stock/Persistence/Propel/AbstractSpyStockStoreQuery.php | +| src/Orm/Zed/StockAddress/Persistence/Base/SpyStockAddress.php | Spryker/Zed/StockAddress/Persistence/Propel/AbstractSpyStockAddress.php | +| src/Orm/Zed/StockAddress/Persistence/Base/SpyStockAddressQuery.php | Spryker/Zed/StockAddress/Persistence/Propel/AbstractSpyStockAddressQuery.php | +| src/Orm/Zed/WarehouseAllocation/Persistence/Base/SpyWarehouseAllocation.php | Spryker/Zed/WarehouseAllocation/Persistence/Propel/AbstractSpyWarehouseAllocation.php | +| src/Orm/Zed/WarehouseAllocation/Persistence/Base/SpyWarehouseAllocationQuery.php | Spryker/Zed/WarehouseAllocation/Persistence/Propel/AbstractSpyWarehouseAllocationQuery.php | + +Make sure that `SpyAvailabilityTableMap::getBehaviors()` provides mapping for `spy_availability_is_never_out_of_stock`, `spy_availability_quantity`, and `spy_availability_sku`. + +{% endinfo_block %} + +### 3) Configure OMS + +1. Create the OMS subprocess file: + +**config/Zed/oms/WarehouseAllocationSubprocess/WarehouseAllocation01.xml** + +```xml + + + + + + + + + + + + + +``` + +2. Using the `DummyPayment01.xml` process as an example, adjust your OMS state machine configuration according to your project's requirements. + +**config/Zed/oms/DummyPayment01.xml** + +```xml + + + + + + + new + warehouse allocated + allocate warehouse + + + + + + WarehouseAllocation + + + + + + + +``` + +### 4) Configure export to Elasticsearch + +{% info_block errorBox %} + +This section is only related to the integration of the *Add to cart from catalog page* functionality. + +{% endinfo_block %} + +Install the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------|---------------|-----------------------------------------------------------------| +| AvailabilityProductAbstractAddToCartPlugin | Filters out the products that are not available. | | Spryker\Zed\Availability\Communication\Plugin\ProductPageSearch | + + +**src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php** + +```php +createDataImporterCollection(); + $dataImporterCollection->addDataImporterPlugins($this->getDataImporterPlugins()); + $dataImporterCollection->addDataImporter($this->createProductStockImporter()); + + return $dataImporterCollection; + } + +} +``` + +5. Enable behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + Removes an existing warehouse address if it's not attached to a warehouse update request. | | Spryker\Zed\StockAddress\Communication\Plugin\Stock | +| StockAddressStockCollectionExpanderPlugin | Expands a warehouse collection with related addresses. | | Spryker\Zed\StockAddress\Communication\Plugin\Stock | + +
    Zed/Stock/StockDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that the warehouse address management works: +1. In the Back Office, create a warehouse. +2. Import a warehouse address using a data import functionality. +3. Check if the imported warehouse address exists in the `spy_stock_address` database table. + +{% endinfo_block %} + +4. Register the following plugins for warehouse allocation: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|-------------------------------------------|---------------|----------------------------------------------------------| +| SalesOrderWarehouseAllocationCommandPlugin | Allocates warehouse for sales order item. | | Spryker\Zed\WarehouseAllocation\Communication\Plugin\Oms | + + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new SalesOrderWarehouseAllocationCommandPlugin(), 'WarehouseAllocation/WarehouseAllocate'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that after the order is created, order items gain the `warehouse allocated` status. + +{% endinfo_block %} + +## Implement and integrate the warehouse allocation process for product and product offer order items + +This section describes an example of how to implement and integrate the warehouse allocation process for product and product offer order items and how this process work. + +Follow the steps below to install an example for product and product offer warehouse allocations. + +### Prerequisites + +To start integration, integrate the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|-------------------------------------------------------------------| +| Inventory Management | {{page.release_tag}} | [Inventory Mamagement feature integration](#install-feature-core) | + +### 1) Install the required modules + +```bash +composer require spryker/product-warehouse-allocation-example:"^0.3.0" --update-with-dependencies +composer require spryker/product-offer-warehouse-allocation-example:"^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------|------------------------------------------------------------| +| ProductWarehouseAllocationExample | vendor/spryker/product-warehouse-allocation-example | +| ProductOfferWarehouseAllocationExample | vendor/spryker/product-offer-warehouse-allocation-example | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------|-------|-------|-------------------------------------------------------------------------| +| ProductOfferTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferTransfer.php | +| ProductOfferStockTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferStockTransfer.php | +| ProductOfferWarehouseCriteriaTransfer | class | added | src/Generated/Shared/Transfer/ProductOfferWarehouseCriteriaTransfer.php | +| ProductWarehouseCriteriaTransfer | class | added | src/Generated/Shared/Transfer/ProductWarehouseCriteriaTransfer.php | +| StockProductTransfer | class | added | src/Generated/Shared/Transfer/StockProductTransfer.php | +| StoreRelationTransfer | class | added | src/Generated/Shared/Transfer/StoreRelationTransfer.php | +| StoreTransfer | class | added | src/Generated/Shared/Transfer/StoreTransfer.php | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------| +| ProductSalesOrderWarehouseAllocationPlugin | Associates warehouses to a sales order product item. | | Spryker\Zed\ProductWarehouseAllocationExample\Communication\Plugin\WarehouseAllocation | +| ProductOfferSalesOrderWarehouseAllocationPlugin | Associates warehouses to a sales order product offer item. | | Spryker\Zed\ProductOfferWarehouseAllocationExample\Communication\Plugin\WarehouseAllocation | +| WarehouseOrderItemExpanderPlugin | Expands order item with warehouse. | | Spryker\Zed\WarehouseAllocation\Communication\Plugin\Sales | +| ProductConcreteAfterCreatePlugin | Persists product stock data after product is created. | | Spryker\Zed\Stock\Communication\Plugin | +| ProductConcreteAfterUpdatePlugin | Persists product stock data after product is updated. | | Spryker\Zed\Stock\Communication\Plugin | +| StockProductConcreteExpanderPlugin | Expands product concrete transfers with stock information from the database. | | Spryker\Zed\Stock\Communication\Plugin\Product | + +**src/Pyz/Zed/WarehouseAllocation/WarehouseAllocationDependencyProvider.php** + +```php + + */ + protected function getSalesOrderWarehouseAllocationPlugins(): array + { + return [ + new ProductOfferSalesOrderWarehouseAllocationPlugin(), + new ProductSalesOrderWarehouseAllocationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new WarehouseOrderItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductConcreteAfterCreatePlugins(Container $container): array + { + return [ + new StockProductConcreteAfterCreatePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Product\Dependency\Plugin\ProductConcretePluginUpdateInterface> + */ + protected function getProductConcreteAfterUpdatePlugins(Container $container): array + { + return [ + new StockProductConcreteAfterUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface> + */ + protected function getProductConcreteExpanderPlugins(): array + { + return [ + new StockProductConcreteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Make sure that after the order is created, the new row in the `warehouse_allocation` table is created with the appropriate `warehouseId` for the product and product offer in the order accordingly. +2. Make sure that when you retrieve an order each order item has warehouse property set. +3. Make sure that product stock data is persisted in `spy_stock_product` database table after creating/updating concrete product. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Inventory Management API | | [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | +| Alternative Products | | [Install the Alternative Products + Inventory Management feature - ongoing](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contract-requests-feature.md new file mode 100644 index 00000000000..29c32823d70 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contract-requests-feature.md @@ -0,0 +1,711 @@ +This document describes how to install the Merchant B2B Contract Requests feature. + +## Install feature core + +To install the Merchant B2B Contract Requests feature core, take the following steps. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------|----------------------------------------------------| +| MerchantRelationRequest | vendor/spryker/merchant-relation-request | +| MerchantRelationRequestExtension | vendor/spryker/merchant-relation-request-extension | +| MerchantRelationRequestGui | vendor/spryker/merchant-relation-request-gui | + +{% endinfo_block %} + +### 2) Set up the configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------------------------------|------------------------------------------------------|--------------------------------------| +| MerchantRelationshipConstants::BASE_URL_YVES | Defines the base URL for Yves including scheme and port. | Spryker\Shared\MerchantRelationship | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\MerchantRelationRequest\MerchantRelationRequestConstants; + +$yvesHost = getenv('SPRYKER_FE_HOST'); +$yvesPort = (int)(getenv('SPRYKER_FE_PORT')) ?: 443; + +$config[MerchantRelationRequestConstants::BASE_URL_YVES] = sprintf( + 'https://%s%s', + $yvesHost, + $yvesPort !== 443 ? ':' . $yvesPort : '', +); +``` + + +### 3) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------------------------|--------|---------| +| spy_merchant_relation_request | table | created | +| spy_merchant_relation_request_to_company_business_unit | table | created | +| spy_merchant_relationship.merchant_relation_request_uuid | column | created | +| spy_merchant.is_open_for_relation_request | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|-----------------------------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------| +| MerchantRelationRequest | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestTransfer | +| MerchantRelationRequestCollection | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestCollectionTransfer | +| MerchantRelationRequestCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestCriteriaTransfer | +| MerchantRelationRequestConditions | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestConditionsTransfer | +| MerchantRelationRequestSearchConditions | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestSearchConditionsTransfer | +| MerchantRelationRequestDeleteCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestDeleteCriteriaTransfer | +| MerchantRelationRequestToCompanyBusinessUnitDeleteCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestToCompanyBusinessUnitDeleteCriteriaTransfer | +| MerchantRelationRequestCollectionRequest | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestCollectionRequestTransfer | +| MerchantRelationRequestCollectionResponse | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestCollectionResponseTransfer | +| MerchantRelationship.merchantRelationRequestUuid | property | created | src/Generated/Shared/Transfer/MerchantRelationshipTransfer | +| Merchant.isOpenForRelationRequest | property | created | src/Generated/Shared/Transfer/MerchantTransfer | +| MerchantStorage.isOpenForRelationRequest | property | created | src/Generated/Shared/Transfer/MerchantStorageTransfer | +| MerchantSearch.isOpenForRelationRequest | property | created | src/Generated/Shared/Transfer/MerchantSearchTransfer | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +merchant_relation_request.mail.merchant_relation_request_status_change.subject,"The status of your merchant relation request has been changed.",en_US +merchant_relation_request.mail.merchant_relation_request_status_change.subject,Der Status Ihrer Händlerbeziehungsanfrage wurde geändert.,de_DE +merchant_relation_request.mail.trans.merchant_relation_request_status_change.salutation,"Hello %first_name% %last_name%,",en_US +merchant_relation_request.mail.trans.merchant_relation_request_status_change.salutation,"Hallo %first_name% %last_name%,",de_DE +merchant_relation_request.mail.trans.merchant_relation_request_status_change.main_text,"Merchant %merchant_name% changed the status of your merchant relation request to %status%. Please review it in your Company Account.",en_US +merchant_relation_request.mail.trans.merchant_relation_request_status_change.main_text,"Händler %merchant_name% hat den Status Ihrer Händlerbeziehungsanfrage in %status% geändert. Bitte überprüfen Sie es in Ihrem Firmenkonto.",de_DE +merchant_relation_request.mail.trans.merchant_relation_request_status_change.button,View merchant relation request,en_US +merchant_relation_request.mail.trans.merchant_relation_request_status_change.button,Händlerbeziehungsanfrage anzeigen,de_DE +merchant_relation_request.mail.trans.merchant_relation_request_status_change.decision_note_title,Comment from Merchant,en_US +merchant_relation_request.mail.trans.merchant_relation_request_status_change.decision_note_title,Anmerkung vom Händler,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 5) Import data + +1. Add the `is_open_for_relation_request` column to the `merchant.csv` file: + +**data/import/common/common/merchant.csv** + +```csv +merchant_reference,merchant_name,registration_number,status,email,is_active,url.de_DE,url.en_US,is_open_for_relation_request +MER000006,Sony Experts,HYY 134306,approved,michele@sony-experts.com,1,/de/merchant/sony-experts,/en/merchant/sony-experts,1 +MER000005,Budget Cameras,HXX 134305,approved,jason.weidmann@budgetcamerasonline.com,1,/de/merchant/budget-cameras,/en/merchant/budget-cameras,1 +MER000004,Impala Merchant,3,waiting-for-approval,impala.merchant@merchant.kudu,0,/en/merchant/impala-merchant-1,/de/merchant/impala-merchant-1,1 +MER000003,Sugar Monster,4,waiting-for-approval,sugar.monster@merchant.kudu,0,/de/merchant/sugar-monster,/en/merchant/sugar-monster,1 +MER000007,Restrictions Merchant,5,waiting-for-approval,restrictions.merchant@merchant.kudu,0,/de/merchant/restrictions-merchant,/en/merchant/restrictions-merchant,1 +MER000001,Spryker,HRB 134310,approved,harald@spryker.com,1,/de/merchant/spryker,/en/merchant/spryker,1 +MER000002,Video King,1234.4567,approved,martha@video-king.nl,1,/de/merchant/video-king,/en/merchant/video-king,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------------------------|----------|-----------|--------------|-------------------------------------------------| +| is_open_for_relation_request | | boolean | 1 | Defines a merchant relation request allowance. | + +2. Import data: + +```bash +console data:import stock +``` + +{% info_block warningBox "Verification" %} + +Make sure the defined picking list strategies have been imported to the `spy_stock` database table. + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| MerchantRelationRequestCompanyBusinessUnitPreDeletePlugin | When a company business unit is deleted, deletes merchant relation request entities and the related merchant relation request to company business unit entities. | | Spryker\Zed\MerchantRelationRequest\Communication\Plugin\CompanyBusinessUnit | +| MerchantRelationRequestCompanyUserPreDeletePlugin | When a company user is deleted, deletes merchant relation request entities and the related merchant relation request to company business unit entities. | | Spryker\Zed\MerchantRelationRequest\Communication\Plugin\CompanyUser | +| MerchantRelationRequestStatusChangeMailTypeBuilderPlugin | Builds `MailTransfer` with the data for the merchant relation request status change email. | | Spryker\Zed\MerchantRelationRequest\Communication\Plugin\Mail | +| StatusChangeCompanyUserNotificationMerchantRelationshipRequestPostUpdatePlugin | Sends a status change notification email to the company user who initiated the request to the merchant. | | Spryker\Zed\MerchantRelationRequest\Communication\Plugin\MerchantRelationRequest | +| CreateMerchantRelationRequestPermissionPlugin | Checks if a customer is allowed to create merchant relation requests. | | Spryker\Client\MerchantRelationRequest\Plugin\Permission | +| IsOpenForRelationRequestMerchantFormExpanderPlugin | Expands `MerchantCreateForm` with the field that defines the merchant relation request allowance. | | Spryker\Zed\MerchantRelationRequestGui\Communication\Plugin\MerchantGui | + +**src/Pyz/Zed/CompanyBusinessUnit/CompanyBusinessUnitDependencyProvider.php** + +```php + + */ + protected function getCompanyBusinessUnitPreDeletePlugins(): array + { + return [ + new MerchantRelationRequestCompanyBusinessUnitPreDeletePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when a company business unit is deleted, all related merchant relation requests are deleted too. + +{% endinfo_block %} + +**src/Pyz/Zed/CompanyUser/CompanyUserDependencyProvider.php** + +```php + + */ + protected function getCompanyUserPreDeletePlugins(): array + { + return [ + new MerchantRelationRequestCompanyUserPreDeletePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when a company user is deleted, all merchant relation requests initiated by the user are deleted too. + +{% endinfo_block %} + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new MerchantRelationRequestStatusChangeMailTypeBuilderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantRelationship/MerchantRelationshipDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationRequestPostUpdatePlugins(): array + { + return [ + new StatusChangeCompanyUserNotificationMerchantRelationshipRequestPostUpdatePlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when you change the status of a merchant relationship request, the notification email is sent to the email address of the company user who initiated the request. + +{% endinfo_block %} + +**Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new CreateMerchantRelationRequestPermissionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in as a company admin. +2. Go to `https://www.mysprykershop.com/en/company/company-role`. +3. Click **Edit** next to a role. + Make sure you can assign the **Send Merchant Relation Request** permission. + +{% endinfo_block %} + +**src/Pyz/Zed/MerchantGui/MerchantGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantFormExpanderPlugins(): array + { + return [ + new IsOpenForRelationRequestMerchantFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Marketplace** > **Merchants**. +2. Press **Edit** button for some merchant or press **Create Merchant** button and make sure that you see **Allow merchant relation requests** checkbox in the form. + +{% endinfo_block %} + +### 6) Configure navigation + +1. Add the `MerchantRelationshipGui` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Marketplace + fa-shopping-basket + + + + Merchant Relation Requests + merchant-relation-request-gui + list + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Log in to the Back Office. Make sure there is the **Merchant Relation Requests** navigation menu item under the **Marketplace** menu item. + +{% endinfo_block %} + +## Install feature frontend + +Follow these steps to install feature frontend + +### Prerequisites + +Overview and install the necessary features before beginning the integration step. + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules: + +```bash +composer require spryker-feature/merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules are installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|------------------------------------------------------| +| MerchantRelationRequestPage | vendor/spryker-shop/merchant-relation-request-page | +| MerchantRelationRequestWidget | vendor/spryker-shop/merchant-relation-request-widget | + +{% endinfo_block %} + +### 2) Add translations + +Append glossary according to your configuration: + +
    + src/data/import/glossary.csv + +```yaml +merchant_relation_request.validation.status_not_pending,New requests can only be made if the current status is pending.,en_US +merchant_relation_request.validation.status_not_pending,"Neue Anfragen können nur gestellt werden, wenn der aktuelle Status ausstehend ist.",de_DE +merchant_relation_request.validation.decision_note_empty,Please clear the decision note before submitting your request.,en_US +merchant_relation_request.validation.decision_note_empty,"Bitte leeren Sie die Entscheidungsnotiz, bevor Sie Ihre Anfrage einreichen.",de_DE +merchant_relation_request.validation.assignee_business_units_empty,Please specify at least one assignee business unit to proceed.,en_US +merchant_relation_request.validation.assignee_business_units_empty,"Bitte geben Sie mindestens eine zugewiesene Geschäftseinheit an, um fortzufahren.",de_DE +merchant_relation_request.validation.request_note_wrong_length,A merchant relation request note must have length from %min% to %max% characters.,en_US +merchant_relation_request.validation.request_note_wrong_length,Eine Händlerbeziehungsanfrage-Notiz muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_relation_request.validation.incompatible_company_account,Only company users from the same company can create requests for this list of business units.,en_US +merchant_relation_request.validation.incompatible_company_account,Nur Nutzer desselben Unternehmens können Anfragen für diese Liste von Geschäftseinheiten erstellen.,de_DE +merchant_relation_request.validation.decision_note_wrong_length,A merchant relation request decision note must have length from %min% to %max% characters.,en_US +merchant_relation_request.validation.decision_note_wrong_length,Eine Entscheidungsbemerkung zu einer Händlerbeziehungsanfrage muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_relation_request.validation.not_found,Merchant Relation Request not found.,en_US +merchant_relation_request.validation.not_found,Händlerbeziehungsanfrage nicht gefunden.,de_DE +merchant_relation_request.validation.cant_be_approved,"Merchant Relation Request can't be approved.",en_US +merchant_relation_request.validation.cant_be_approved,Händlerbeziehungsanfrage kann nicht genehmigt werden.,de_DE +merchant_relation_request.validation.cant_be_canceled,"Merchant Relation Request can't be canceled.",en_US +merchant_relation_request.validation.cant_be_canceled,Händlerbeziehungsanfrage kann nicht storniert werden.,de_DE +merchant_relation_request.validation.cant_be_rejected,"Merchant Relation Request can't be rejected.",en_US +merchant_relation_request.validation.cant_be_rejected,Händlerbeziehungsanfrage kann nicht abgelehnt werden.,de_DE +merchant_relation_request.validation.cant_become_pending,"Merchant Relation Request can't become pending.",en_US +merchant_relation_request.validation.cant_become_pending,Händlerbeziehungsanfrage kann nicht ausstehend werden.,de_DE +permission.name.CreateMerchantRelationRequestPermissionPlugin,Send Merchant Relation Request,en_US +permission.name.CreateMerchantRelationRequestPermissionPlugin,Händlerbeziehungsanfrage senden,de_DE +merchant_relation_request_widget.request_for_relation.link,Merchant Relation Request,en_US +merchant_relation_request_widget.request_for_relation.link,Händlerbeziehungsanfrage,de_DE +merchant_relation_request_widget.request_for_relation.button,Send Request,en_US +merchant_relation_request_widget.request_for_relation.button,Anfrage senden,de_DE +merchant_relation_request_widget.request_for_relation.details,Contact Details,en_US +merchant_relation_request_widget.request_for_relation.details,Kontaktdetails,de_DE +merchant_relation_request_widget.create_request.label,Create the merchant relation request,en_US +merchant_relation_request_widget.create_request.label,Händlerbeziehungsanfrage erstellen,de_DE +merchant_relation_page.merchant_relation.view.empty,You do not have any merchant relations yet.,en_US +merchant_relation_page.merchant_relation.view.empty,Sie haben noch keine Händlerbeziehungen.,de_DE +merchant_relation_request_widget.merchant_relation_request.list.title,Merchant Relation Requests,en_US +merchant_relation_request_widget.merchant_relation_request.list.title,Händlerbeziehungsanfragen,de_DE +merchant_relation_request_page.merchant_relation_request.view.empty,You do not have any merchant relation requests yet.,en_US +merchant_relation_request_page.merchant_relation_request.view.empty,Sie haben noch keine Händlerbeziehungsanfragen.,de_DE +merchant_relation_request_page.merchant_relation_request,Merchant Relation Requests,en_US +merchant_relation_request_page.merchant_relation_request,Händlerbeziehungsanfragen,de_DE +merchant_relation_request_page.merchant_relation_request.list.manage,Manage Merchant Relation Requests,en_US +merchant_relation_request_page.merchant_relation_request.list.manage,Verwalten Sie Händlerbeziehungsanfragen,de_DE +merchant_relation_request_page.merchant_relation_request.list.create_link,Create request,en_US +merchant_relation_request_page.merchant_relation_request.list.create_link,Anfrage erstellen,de_DE +merchant_relation_request_page.merchant_relation_request.breadcrumb.create,Create,en_US +merchant_relation_request_page.merchant_relation_request.breadcrumb.create,Erstellen,de_DE +merchant_relation_request_page.merchant_relation_request.title_create,Merchant Relation Request,en_US +merchant_relation_request_page.merchant_relation_request.title_create,Händlerbeziehung Anfrage,de_DE +merchant_relation_request_page.merchant_relation_request.actions.cancel,Cancel,en_US +merchant_relation_request_page.merchant_relation_request.actions.cancel,Stornieren,de_DE +merchant_relation_request_page.merchant_relation_request.actions.back,Back,en_US +merchant_relation_request_page.merchant_relation_request.actions.back,Zurück,de_DE +merchant_relation_request_page.merchant_relation_request.actions.send_request,Submit Request,en_US +merchant_relation_request_page.merchant_relation_request.actions.send_request,Anfrage einreichen,de_DE +merchant_relation_request_page.merchant_relation_request.submit,Submit Request,en_US +merchant_relation_request_page.merchant_relation_request.submit,Anfrage absenden,de_DE +merchant_relation_request_page.merchant_relation_request.request_note,Message to the Merchant,en_US +merchant_relation_request_page.merchant_relation_request.request_note,Nachricht an den Händler,de_DE +merchant_relation_request_page.merchant_relation_request.business_units,Business Units,en_US +merchant_relation_request_page.merchant_relation_request.business_units,Geschäftseinheiten,de_DE +merchant_relation_request_page.merchant_relation_request.business_unit_owner,Business Unit Owner,en_US +merchant_relation_request_page.merchant_relation_request.business_unit_owner,Inhaber der Geschäftseinheit,de_DE +merchant_relation_request_page.merchant_relation_request.business_unit_owner.placeholder,Select Business Unit Owner,en_US +merchant_relation_request_page.merchant_relation_request.business_unit_owner.placeholder,Inhaber der Geschäftseinheit auswählen,de_DE +merchant_relation_request_page.merchant_relation_request.merchant,Merchant,en_US +merchant_relation_request_page.merchant_relation_request.merchant,Händler,de_DE +merchant_relation_request_page.merchant_relation_request.merchant.placeholder,Select Merchant,en_US +merchant_relation_request_page.merchant_relation_request.merchant.placeholder,Händler auswählen,de_DE +merchant_relation_request_page.merchant_relation_request.created,Merchant relation request has been submitted successfully.,en_US +merchant_relation_request_page.merchant_relation_request.created,Die Anfrage zur Händlerbeziehung wurde erfolgreich übermittelt.,de_DE +merchant_relation_request_page.merchant_relation_request.created_at,Created,en_US +merchant_relation_request_page.merchant_relation_request.created_at,Erstellt,de_DE +merchant_relation_request_page.merchant_relation_request.company_user,Company User,en_US +merchant_relation_request_page.merchant_relation_request.company_user,Firmenbenutzer,de_DE +merchant_relation_request_page.merchant_relation_request.status,Status,en_US +merchant_relation_request_page.merchant_relation_request.status,Status,de_DE +merchant_relation_request_page.merchant_relation_request.actions,Actions,en_US +merchant_relation_request_page.merchant_relation_request.actions,Aktionen,de_DE +merchant_relation_request_page.merchant_relation_request.actions.view,View,en_US +merchant_relation_request_page.merchant_relation_request.actions.view,Sicht,de_DE +merchant_relation_request_page.merchant_relation_request.empty_business_units.error,At least one business unit must be assigned to a user,en_US +merchant_relation_request_page.merchant_relation_request.empty_business_units.error,Einem Benutzer muss mindestens eine Geschäftseinheit zugeordnet sein,de_DE +merchant_relation_request_page.merchant_relation_request.success.canceled,Merchant relation request canceled successfully.,en_US +merchant_relation_request_page.merchant_relation_request.success.canceled,Die Anfrage zur Händlerbeziehung wurde erfolgreich abgebrochen.,de_DE +merchant_relation_request.validation.company_user_access_denied,Access denied.,en_US +merchant_relation_request.validation.company_user_access_denied,Zugriff verweigert.,de_DE +merchant_relation_request.validation.merchant_not_found,Merchant not found.,en_US +merchant_relation_request.validation.merchant_not_found,Händler nicht gefunden.,de_DE +merchant_relation_request.merchant_notification.active_filters,Active Filters:,en_US +merchant_relation_request.merchant_notification.active_filters,Aktive Filter:,de_DE +merchant_relation_request.merchant_notification.reset_all,Reset All,en_US +merchant_relation_request.merchant_notification.reset_all,Alles zurücksetzen,de_DE +merchant_relation_request.merchant_notification.apply,Apply,en_US +merchant_relation_request.merchant_notification.apply,Anwenden,de_DE +merchant_relation_request_page.merchant_relation_request.status.placeholder,Select Status,en_US +merchant_relation_request_page.merchant_relation_request.status.placeholder,Status auswählen,de_DE +merchant_relation_request_page.merchant_relation_request.status.pending,Pending ,en_US +merchant_relation_request_page.merchant_relation_request.status.pending,Ausstehend,de_DE +merchant_relation_request_page.merchant_relation_request.status.canceled,Canceled ,en_US +merchant_relation_request_page.merchant_relation_request.status.canceled,Storniert,de_DE +merchant_relation_request_page.merchant_relation_request.status.rejected,Rejected ,en_US +merchant_relation_request_page.merchant_relation_request.status.rejected,Abgelehnt,de_DE +merchant_relation_request_page.merchant_relation_request.status.approved,Approved ,en_US +merchant_relation_request_page.merchant_relation_request.status.approved,Genehmigt,de_DE +merchant_relation_request_page.merchant_relation_request.request_note_label,Message from the user,en_US +merchant_relation_request_page.merchant_relation_request.request_note_label,Nachricht vom Benutzer,de_DE +merchant_relation_request_page.merchant_relation_request.decision_note_label,Message to the user,en_US +merchant_relation_request_page.merchant_relation_request.decision_note_label,Nachricht an den Benutzer,de_DE +merchant_relation_request_page.merchant_relation_request_detail.date_created,Created date,en_US +merchant_relation_request_page.merchant_relation_request_detail.date_created,Erstellt am,de_DE +merchant_relation_request_page.merchant_relation_request_detail.company_details,Company Details,en_US +merchant_relation_request_page.merchant_relation_request_detail.company_details,Firmendetails,de_DE +merchant_relation_request_page.merchant_relation_request_detail.company,Company,en_US +merchant_relation_request_page.merchant_relation_request_detail.company,Firma,de_DE +merchant_relation_request_page.merchant_relation_request_detail.business_unit_owner,Business Unit Owner,en_US +merchant_relation_request_page.merchant_relation_request_detail.business_unit_owner,Inhaber der Geschäftseinheit,de_DE +merchant_relation_request_page.merchant_relation_request_detail.business_units,Business Units,en_US +merchant_relation_request_page.merchant_relation_request_detail.business_units,Geschäftseinheiten,de_DE +merchant_relation_request_page.merchant_relation_request_detail.details,Contact Details,en_US +merchant_relation_request_page.merchant_relation_request_detail.details,Kontaktdetails,de_DE +merchant_relation_request_page.merchant_relation_request_detail.first_name,Vorname,de_DE +merchant_relation_request_page.merchant_relation_request_detail.first_name,First Name,en_US +merchant_relation_request_page.merchant_relation_request_detail.last_name,Nachname,de_DE +merchant_relation_request_page.merchant_relation_request_detail.last_name,Last Name,en_US +merchant_relation_request_page.merchant_relation_request_detail.email,E-mail-Adresse,de_DE +merchant_relation_request_page.merchant_relation_request_detail.email,E-mail,en_US +merchant_relation_request_page.merchant_relation_request_detail.additional_details,Zusätzliche Details,de_DE +merchant_relation_request_page.merchant_relation_request_detail.additional_details,Additional details,en_US +merchant_relation_request_page.merchant_relation_request_detail.comment_from_merchant,Kommentar vom Händler,de_DE +merchant_relation_request_page.merchant_relation_request_detail.comment_from_merchant,Comment from merchant,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.title.pending,Merchant relation request pending!,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.title.pending,Anfrage zur Händlerbeziehung ausstehend!,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.title.canceled,Merchant relation request canceled!,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.title.canceled,Anfrage zur Händlerbeziehung abgelehnt!,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.title.approved,Merchant relation request approved!,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.title.approved,Anfrage zur Händlerbeziehung genehmigt!,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.title.rejected,Merchant relation request rejected!,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.title.rejected,Anfrage zur Händlerbeziehung abgelehnt!,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.description.pending,Your merchant relation request is pending at the moment.,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.description.pending,Ihre Anfrage zur Händlerbeziehung wird derzeit bearbeitet.,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.description.canceled,Your merchant relation request was cancelled.,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.description.canceled,Ihre Anfrage zur Händlerbeziehung wurde abgelehnt.,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.description.approved,The following merchant relations were created.,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.description.approved,Die folgenden Händlerbeziehungen wurden erstellt.,de_DE +merchant_relation_request_page.merchant_relation_request_detail.notification.description.rejected,Your merchant relation request was rejected.,en_US +merchant_relation_request_page.merchant_relation_request_detail.notification.description.rejected,Ihre Anfrage zur Händlerbeziehung wurde abgelehnt.,de_DE +merchant_relation_request_page.merchant_relation_request_detail.labels.company,Company,en_US +merchant_relation_request_page.merchant_relation_request_detail.labels.company,Unternehmen,de_DE +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route providers on the Storefront: + +| PROVIDER | NAMESPACE | +|------------------------------------------------|------------------------------------------------------------| +| MerchantRelationRequestPageRouteProviderPlugin | SprykerShop\Yves\MerchantRelationRequestPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MerchantRelationRequestPageRouteProviderPlugin(), + ]; + } +} +``` + +### 4) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------|------------------------------------------------------------------------------------------|---------------|--------------------------------------------------| +| MerchantRelationRequestCreateButtonWidget | Adds the `Send Request` button to initiate the creation of a merchant relation request. | | SprykerShop\Yves\MerchantRelationshipPage\Widget | +| MerchantRelationRequestCreateLinkWidget | Adds the `Merchant Relation Request` link to initiate the creation of a merchant relation request. | | SprykerShop\Yves\MerchantRelationshipPage\Widget | +| MerchantRelationRequestMenuItemWidget | Adds the `Merchant Relation Requests` item to the company navigation menu. | | SprykerShop\Yves\MerchantRelationshipPage\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantRelationRequestCreateButtonWidget::class, + MerchantRelationRequestCreateLinkWidget::class, + MerchantRelationRequestMenuItemWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | CODE TO ADD | VERIFICATION | +|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | +| MerchantRelationRequestCreateButtonWidget | `{% raw %}{%{% endraw %} widget 'MerchantRelationRequestCreateButtonWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | The **Send Request** button is displayed. | +| MerchantRelationRequestCreateLinkWidget | `{% raw %}{%{% endraw %} widget 'MerchantRelationRequestCreateLinkWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | The `Merchant Relation Request` link is displayed. | +| MerchantRelationRequestMenuItemWidget | `{% raw %}{%{% endraw %} widget 'MerchantRelationRequestMenuItemWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | The `Merchant Relation Requests` menu item is displayed in the company navigation menu. | + + +{% endinfo_block %} + +### 5) Update breadcrumbs + +If `vendor/spryker-shop/company-page/src/SprykerShop/Yves/CompanyPage/Theme/default/templates/page-layout-company` is overridden on the project level, in the `page-layout-company` template, update the breadcrumbs as follows: + +```twig +{% raw %}{% block breadcrumbs %} + {% set breadcrumbs = [] %} + + {% block breadcrumbsContent %} + {% set breadcrumbBase = [{ + label: 'company.account.page-title' | trans, + url: url('company/overview'), + }] %} + + {% set breadcrumbsList = data.currentBreadcrumb ? breadcrumbBase | merge([{ + label: data.currentBreadcrumb | trans + }]) : breadcrumbBase | merge(breadcrumbs) %} + + {% include molecule('breadcrumb') with { + data: { + steps: breadcrumbsList, + } + } only %} + {% endblock %} +{% endblock %}{% endraw %} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..e597fd77fd1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-merchant-b2b-contracts-feature.md @@ -0,0 +1,566 @@ +This document describes how to install the [Merchant B2B Contracts](/docs/pbc/all/merchant-management/latest/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html) feature. + +## Install feature core + +Take the following steps to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-contracts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|--------------------------------------------------| +| MerchantRelationship | vendor/spryker/merchant-relationship | +| MerchantRelationshipExtension | vendor/spryker/merchant-relationship-extension | +| MerchantRelationshipDataImport | vendor/spryker/merchant-relationship-data-import | +| MerchantRelationshipGui | vendor/spryker/merchant-relationship-gui | + +{% endinfo_block %} + +### 2) Set up the configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------------------------------|------------------------------------------------------|--------------------------------------| +| MerchantRelationshipConstants::BASE_URL_YVES | Defines the base URL for Yves including scheme and port. | Spryker\Shared\MerchantRelationship | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\MerchantRelationship\MerchantRelationshipConstants; + +$yvesHost = getenv('SPRYKER_FE_HOST'); +$yvesPort = (int)(getenv('SPRYKER_FE_PORT')) ?: 443; + +$config[MerchantRelationshipConstants::BASE_URL_YVES] = sprintf( + 'https://%s%s', + $yvesHost, + $yvesPort !== 443 ? ':' . $yvesPort : '', +); +``` + +### 3) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | +|----------------------------------------------------|-------| +| spy_merchant_relationship | table | +| spy_merchant_relationship_to_company_business_unit | table | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|-----------------------------------------------|--------|---------|-------------------------------------------------------------------------------------| +| MerchantRelationship | class | created | src/Generated/Shared/Transfer/MerchantRelationshipTransfer | +| MerchantRelationshipRequest | class | created | src/Generated/Shared/Transfer/MerchantRelationshipRequestTransfer | +| MerchantRelationshipResponse | class | created | src/Generated/Shared/Transfer/MerchantRelationshipResponseTransfer | +| MerchantRelationshipCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationshipCriteriaTransfer | +| MerchantRelationshipConditions | class | created | src/Generated/Shared/Transfer/MerchantRelationshipConditionsTransfer | +| MerchantRelationshipError | class | created | src/Generated/Shared/Transfer/MerchantRelationshipErrorTransfer | +| MerchantRelationshipValidationErrorCollection | class | created | src/Generated/Shared/Transfer/MerchantRelationshipValidationErrorCollectionTransfer | +| MerchantRelationshipCollection | class | created | src/Generated/Shared/Transfer/MerchantRelationshipCollectionTransfer | +| MerchantRelationshipCollectionRequest | class | created | src/Generated/Shared/Transfer/MerchantRelationshipCollectionRequestTransfer | +| MerchantRelationshipCollectionResponse | class | created | src/Generated/Shared/Transfer/MerchantRelationshipCollectionResponseTransfer | +| MerchantRelationshipFilter | class | created | src/Generated/Shared/Transfer/MerchantRelationshipFilterTransfer | +| MerchantRelationshipSearchConditions | class | created | src/Generated/Shared/Transfer/MerchantRelationshipSearchConditionsTransfer | +| CompanyBusinessUnit.merchantRelationships | column | added | src/Generated/Shared/Transfer/CompanyBusinessUnitTransfer | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +merchant_relationship.mail.trans.merchant_relationship_delete.subject,Your merchant relation was terminated.,en_US +merchant_relationship.mail.trans.merchant_relationship_delete.subject,Ihre Händlerbeziehung wurde beendet.,de_DE +merchant_relationship.mail.trans.merchant_relationship_delete.salutation,"Hello,",en_US +merchant_relationship.mail.trans.merchant_relationship_delete.salutation,"Hallo,",de_DE +merchant_relationship.mail.trans.merchant_relationship_delete.main_text,"Merchant %merchant_name% terminated your merchant relation. Please get in touch with the merchant in case of questions.",en_US +merchant_relationship.mail.trans.merchant_relationship_delete.main_text,"Der Händler %merchant_name% hat Ihre Händlerbeziehung beendet. Bei Fragen wenden Sie sich bitte an den Händler.",de_DE +merchant_relationship.mail.trans.merchant_relationship_delete.link,Contact merchant,en_US +merchant_relationship.mail.trans.merchant_relationship_delete.link,Händler kontaktieren,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 5) Import data + +Import the following data. + +#### Import merchant relationships + +1. Prepare data according to your requirements using our demo data: + +**data/import/common/common/merchant_relationship.csv** + +```yaml +merchant_relation_key,merchant_key,company_business_unit_owner_key,company_business_unit_assignee_keys +mr-001,kudu-merchant-1,test-business-unit-1,"test-business-unit-2" +mr-002,oryx-merchant-1,test-business-unit-1,"test-business-unit-1;test-business-unit-2" +mr-003,oryx-merchant-1,test-business-unit-2,"test-business-unit-1" +mr-004,oryx-merchant-1,trial-bus-unit-1, +mr-005,oryx-merchant-1,trial-bus-unit-2,"trial-bus-unit-3;trial-bus-unit-1" +mr-006,oryx-merchant-1,proof-bus-unit-2,"proof-bus-unit-2" +mr-007,kudu-merchant-1,proof-bus-unit-1,"proof-bus-unit-1;proof-bus-unit-2;proof-bus-unit-3" +sugar-monster-spryker-hq-1,sugar-monster,spryker_systems_HQ,spryker_systems_HQ +sugar-monster-spryker-hq-2,sugar-monster,spryker_systems_HQ,spryker_systems_Barcelona +sugar-monster-spryker-hq-3,sugar-monster,spryker_systems_HQ,spryker_systems_Zurich +sugar-monster-spryker-hq-4,sugar-monster,spryker_systems_HQ,spryker_systems_Zurich_Sales +sugar-monster-spryker-hq-5,sugar-monster,spryker_systems_HQ,spryker_systems_Zurich_Support +sugar-monster-spryker-hq-6,sugar-monster,spryker_systems_HQ,spryker_systems_Berlin +sugar-monster-spryker-hq-7,sugar-monster,spryker_systems_HQ,spryker_systems_HR +sugar-monster-ottom-supplier-1,sugar-monster,Supplier_Department,Supplier_Department +sugar-monster-ottom-supplier-2,sugar-monster,Supplier_Department,Ottom_store_Berlin +sugar-monster-ottom-supplier-3,sugar-monster,Supplier_Department,Ottom_store_Oslo +sugar-monster-ottom-supplier-4,sugar-monster,Supplier_Department,Ottom_store_London +mr-008,restrictions-merchant,BU-IT-no-ASUS,BU-IT-no-tablets;BU-IT-no-ASUS +mr-009,restrictions-merchant,BU-IT-only-wearables,"BU-IT-only-wearables" +mr-010,restrictions-merchant,Sales-under-400,"Sales-under-400" +mr-011,restrictions-merchant,Sales,Sales;Sales-under-400 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------------------|----------|-----------|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------| +| merchant_relation_key | | String | mr-002 | A reference used for the merchant relationship data import. | +| merchant_key | ✓ | String | kudu-merchant-1 | A reference used to define the merchant of the contract (relationship) between him and the company business unit. | +| company_business_unit_owner_key | ✓ | String | test-business-unit-1 | A reference used to define the company business unit of the contract (relationship) between it and a merchant. | +| company_business_unit_assignee_keys | | String | test-business-unit-1;test-business-unit-2 | A reference to the assigned business units this contract is applied to. | + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|-------------------------------------------------------|---------------|-----------------------------------------------------------------| +| MerchantRelationshipDataImportPlugin | Imports merchant relationship data into the database. | | Spryker\Zed\MerchantRelationshipDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MerchantRelationshipDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import merchant-relationship +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_merchant_relationship` table. + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| +| MerchantRelationshipHydratePlugin | Expands that company user transfers that have a company business unit with the merchant relationship data. | Expects company users to have an assigned company business unit, which will be expanded with the merchant relationship data. | Spryker\Zed\MerchantRelationship\Communication\Plugin\CompanyUser | +| MerchantRelationshipDeleteMailTypeBuilderPlugin | Builds the `MailTransfer` with the data for the merchant relationship delete email. | | Spryker\Zed\MerchantRelationship\Communication\Plugin\Mail | +| CompanyBusinessUnitNotificationMerchantRelationshipPostDeletePlugin | Sends notification emails about deleted merchant relationships to company business units. | | Spryker\Zed\MerchantRelationship\Communication\Plugin\MerchantRelationship | + +**src/Pyz/Zed/CompanyUser/CompanyUserDependencyProvider.php** + +```php + + */ + protected function getCompanyUserHydrationPlugins(): array + { + return [ + new MerchantRelationshipHydratePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create a merchant relationship. +2. Log in as a company user who's a member of the business unit assigned to the relationship. +3. Use the following code snippet to verify that the merchant relationship data is available in the company user transfer: + +```php +$idCompanyUser = 1; // Replace with the ID of the company user you want to check. + +$companyUserTransfer = $this->companyUserFacade->findCompanyUserById($idCompanyUser); + +dd($companyUserTransfer->getCompanyBusinessUnit()->getMerchantRelationships()); + +``` + +4. Make sure the `CompanyBusinessUnit.merchantRelationships` property was updated with the merchant relationship data. + +{% endinfo_block %} + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new MerchantRelationshipDeleteMailTypeBuilderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Zed/MerchantRelationship/MerchantRelationshipDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationshipPostDeletePlugins(): array + { + return [ + new CompanyBusinessUnitNotificationMerchantRelationshipPostDeletePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when you delete a merchant relationship, a notification email is sent to the email address of the company business unit is owner. + +{% endinfo_block %} + +### 7) Configure navigation + +1. Add the `MerchantRelationshipGui` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Marketplace + fa-shopping-basket + + + + Merchant Relations + merchant-relationship-gui + list-merchant-relationship + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Log into the Back Office. Make sure there is a **Marketplace**>**Merchant Relations** navigation menu item. + +{% endinfo_block %} + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Company Account | {{page.release_tag}} | [Install the Company Account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-contracts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|--------------------------------------------------| +| MerchantRelationshipPage | vendor/spryker-shop/merchant-relationship-page | +| MerchantRelationshipWidget | vendor/spryker-shop/merchant-relationship-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +
    + src/data/import/glossary.csv + +```yaml +merchant_relationship_page.table.header.merchant,Merchant,en_US +merchant_relationship_page.table.header.merchant,Händler,de_DE +merchant_relationship_page.table.header.business_unit_owner,Business Unit Owner,en_US +merchant_relationship_page.table.header.business_unit_owner,Inhaber der Geschäftseinheit,de_DE +merchant_relationship_page.table.header.business_units,Business Units,en_US +merchant_relationship_page.table.header.business_units,Geschäftseinheiten,de_DE +merchant_relationship_page.table.header.created,Created,en_US +merchant_relationship_page.table.header.created,Erstellt,de_DE +merchant_relationship_page.table.header.actions,Actions,en_US +merchant_relationship_page.table.header.actions,Aktion,de_DE +merchant_relationship_page.table.action.view,View,en_US +merchant_relationship_page.table.action.view,Ansehen,de_DE +merchant_relationship_widget.merchant_relationship_links_list.view,View,en_US +merchant_relationship_widget.merchant_relationship_links_list.view,Anzeigen,de_DE +company.account.merchant_relations,Merchant Relations,en_US +company.account.merchant_relations,Händlerbeziehungen,de_DE +merchant_relationship_page.table.filter.apply,Apply,en_US +merchant_relationship_page.table.filter.apply,Anwenden,de_DE +merchant_relationship_page.merchant_relationsip_detail,Merchant Relation,en_US +merchant_relationship_page.merchant_relationsip_detail,Händlerbeziehung,de_DE +merchant_relationship_page.merchant_relationsip_detail.date_created,Created date,en_US +merchant_relationship_page.merchant_relationsip_detail.date_created,Erstellt am,de_DE +merchant_relationship_page.merchant_relationsip_detail.company_details,Company Details,en_US +merchant_relationship_page.merchant_relationsip_detail.company_details,Firmendetails,de_DE +merchant_relationship_page.merchant_relationsip_detail.company,Company,en_US +merchant_relationship_page.merchant_relationsip_detail.company,Firma,de_DE +merchant_relationship_page.merchant_relationsip_detail.business_unit_owner,Business Unit Owner,en_US +merchant_relationship_page.merchant_relationsip_detail.business_unit_owner,Inhaber der Geschäftseinheit,de_DE +merchant_relationship_page.merchant_relationsip_detail.business_units,Business Units,en_US +merchant_relationship_page.merchant_relationsip_detail.business_units,Geschäftseinheiten,de_DE +merchant_relationship_page.merchant_relationsip_detail.view,View,en_US +merchant_relationship_page.merchant_relationsip_detail.view,Ansehen,de_DE +merchant_relationship_page.merchant_relationship.business_unit_owner,Business Unit Owner,en_US +merchant_relationship_page.merchant_relationship.business_unit_owner,Inhaber der Geschäftseinheit,de_DE +merchant_relationship_page.merchant_relationship.business_unit_owner.placeholder,Select Business Unit Owner,en_US +merchant_relationship_page.merchant_relationship.business_unit_owner.placeholder,Inhaber der Geschäftseinheit auswählen,de_DE +merchant_relationship_page.merchant_relationship.merchant,Merchant,en_US +merchant_relationship_page.merchant_relationship.merchant,Händler,de_DE +merchant_relationship_page.merchant_relationship.merchant.placeholder,Select Merchant,en_US +merchant_relationship_page.merchant_relationship.merchant.placeholder,Händler auswählen,de_DE +merchant_relationship_page.merchant_relationship.active_filters,Active Filters:,en_US +merchant_relationship_page.merchant_relationship.active_filters,Aktive Filter:,de_DE +merchant_relationship_page.merchant_relationship.reset_all,Reset All,en_US +merchant_relationship_page.merchant_relationship.reset_all,Alles zurücksetzen,de_DE +``` + +
    + +2 Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route providers on the Storefront: + +| PROVIDER | NAMESPACE | +|---------------------------------------------|---------------------------------------------------------| +| MerchantRelationshipPageRouteProviderPlugin | SprykerShop\Yves\MerchantRelationshipPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MerchantRelationshipPageRouteProviderPlugin(), + ]; + } +} +``` + +### 4) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------|------------------------------------------------------------|---------------|----------------------------------------------------| +| MerchantRelationshipLinkListWidget | Adds links to `Merchant Relations` detail pages. | | SprykerShop\Yves\MerchantRelationshipWidget\Widget | +| MerchantRelationshipMenuItemWidget | Adds the `Merchant Relations` item to the company navigation menu. | | SprykerShop\Yves\MerchantRelationshipWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantRelationshipLinkListWidget::class, + MerchantRelationshipMenuItemWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | TEST | VERIFICATION | +|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | +| MerchantRelationshipLinkListWidget | `{% raw %}{%{% endraw %} widget 'MerchantRelationshipLinkListWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | The `Merchant Relations` menu item is displayed under the `My Company` section. | +| MerchantRelationshipMenuItemWidget | `{% raw %}{%{% endraw %} widget 'MerchantRelationshipMenuItemWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | Go to **Merchant Relation Requests** > **View**. Make sure that, under the **My Company** section, the links to the merchant relations detail pages are displayed. | + +{% endinfo_block %} + +### 5) Update breadcrumbs + +If `vendor/spryker-shop/company-page/src/SprykerShop/Yves/CompanyPage/Theme/default/templates/page-layout-company` is overridden on the project level, in the `page-layout-company` template, update the breadcrumbs as follows: + +```twig +{% raw %}{% block breadcrumbs %} + {% set breadcrumbs = [] %} + + {% block breadcrumbsContent %} + {% set breadcrumbBase = [{ + label: 'company.account.page-title' | trans, + url: url('company/overview'), + }] %} + + {% set breadcrumbsList = data.currentBreadcrumb ? breadcrumbBase | merge([{ + label: data.currentBreadcrumb | trans + }]) : breadcrumbBase | merge(breadcrumbs) %} + + {% include molecule('breadcrumb') with { + data: { + steps: breadcrumbsList, + } + } only %} + {% endblock %} +{% endblock %}{% endraw %} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-merchant-custom-prices-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-merchant-custom-prices-feature.md new file mode 100644 index 00000000000..a200d15cd73 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-merchant-custom-prices-feature.md @@ -0,0 +1,512 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Merchant | {{page.release_tag}} | +| Merchant Contracts | {{page.release_tag}} | +| Prices | {{page.release_tag}} | +| Product | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-custom-prices:"{{page.release_tag}}" spryker/price-product-merchant-relationship-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| PriceProductMerchantRelationship | vendor/spryker/price-product-merchant-relationship | +| PriceProductMerchantRelationshipDataImport | vendor/spryker/price-product-merchant-relationship-data-import | +| PriceProductMerchantRelationshipGui | vendor/spryker/price-product-merchant-relationship-gui | +| PriceProductMerchantRelationshipStorage | vendor/spryker/price-product-merchant-relationship-storage | + +{% endinfo_block %} + +### 2) Set up database schema + +Adjust the schema definition so that entity changes can trigger events: + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_price_product_merchant_relationship | Entity.spy_price_product_merchant_relationship.create
    Entity.spy_price_product_merchant_relationship.update
    Entity.spy_price_product_merchant_relationship.delete | + +**src/Pyz/Zed/PriceProductMerchantRelationship/Persistence/Propel/Schema/spy_price_product_merchant_relationship.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +Run the following commands: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects have been applied: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| PriceProductMerchantRelationshipStorageTransfer | class | created | src/Generated/Shared/Transfer/PriceProductMerchantRelationshipStorageTransfer.php | +| PriceProductDimensionTransfer.idMerchantRelationship | property | added | src/Generated/Shared/Transfer/PriceProductDimensionTransfer.php | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} +Make sure that the following changes have been applied by checking your database. + +| TRANSFER | TYPE | EVENT | +| --- | --- | --- | +| spy_price_product_merchant_relationship | table | created | +| spy_price_product_concrete_merchant_relationship_storage | table | created | +| spy_price_product_abstract_merchant_relationship_storage | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the changes were implemented successfully. For this purpose, trigger the following methods and check that the above events have been triggered as well: + +| CLASS PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/PriceProductMerchantRelationship/Persistence/Base/SpyPriceProductMerchantRelationship.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory()| + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +{% info_block infoBox %} +With this step, you will be able to publish prices on change (create, edit, delete to `spy_price_product_abstract_merchant_relationship_storage`, `spy_price_product_concrete_merchant_relationship_storage` and synchronize the data to Storage. + + {% endinfo_block %} + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| PriceProductMerchantRelationshipStorageEventSubscriber | Registers listeners that are responsible for publishing merchant prices to storage when a related entity changes. | None | Spryker\Zed\ProductListStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new PriceProductMerchantRelationshipStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure when prices are exported, created, updated, or deleted manually in Zed UI, they are exported (or removed to the key-value store (Redis or Valkey) accordingly. + +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Product Abstract Price | kv:price_product_abstract_merchant_relationship:de:1:1 | +| Key-value store (Redis or Valkey) | Product Concrete Price | kv:price_product_concrete_merchant_relationship:de:1:1 | + + {% endinfo_block %} + +**Example Expected Data Fragment: Product Abstract Price** + +```yaml +{ + "prices": { + "2": { + "EUR": { + "priceData": null, + "GROSS_MODE": { + "DEFAULT": 9922 + }, + "NET_MODE": { + "DEFAULT": 8922 + } + }, + "CHF": { + "priceData": null, + "GROSS_MODE": { + "DEFAULT": 11422 + }, + "NET_MODE": { + "DEFAULT": 10322 + } + } + } + } +} +``` + +**Example Expected Data Fragment: Product Concrete Price** + +```yaml +{ +"prices": { + "2": { + "EUR": { + "priceData": null, + "GROSS_MODE": { + "DEFAULT": 12322 + }, + "NET_MODE": { + "DEFAULT": 11222 + } + }, + "CHF": { + "priceData": null, + "GROSS_MODE": { + "DEFAULT": 10122 + }, + "NET_MODE": { + "DEFAULT": 12522 + } + } + } + } +} +``` + +#### Add synchronization plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| PriceProductAbstractMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_abstract_merchant_relationship` entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | +| PriceProductConcreteMerchantRelationSynchronizationDataPlugin | Can be executed to synchronize all `price_product_concrete_merchant_relationship` entries from the database to the key-value store (Redis or Valkey). | None | Spryker\Zed\PriceProductMerchantRelationshipStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php +Make sure that this user sees MIN price if their business unit is assigned to multiple Merchant Relationships with different prices for the same product. +{% endinfo_block %} + +### Ensure compatibility + +Check the following compatibility issues: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| PriceFacetConfigTransferBuilderPlugin | This plugin displays price-range filter on the catalog page. It should be removed from plugin stack to avoid wrong displaying product with merchant prices. | Spryker\Client\CatalogPriceProductConnector\Plugin\ConfigTransferBuilder | + +{% info_block warningBox "Verification" %} + +Make sure that the price range filter is not displayed on the catalog page. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-merchant-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-merchant-feature.md new file mode 100644 index 00000000000..96e8195c40e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-merchant-feature.md @@ -0,0 +1,895 @@ + + +This document describes how to install the Merchant feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------|------------------------------------------| +| Merchant | spryker/merchant | +| MerchantDataImport | spryker/merchant-data-import | +| MerchantGui | spryker/merchant-gui | +| MerchantSearch | spryker/merchant-search | +| MerchantSearchExtension | vendor/spryker/merchant-search-extension | +| MerchantStorage | spryker/merchant-storage | + + +{% endinfo_block %} + +## 2) Set up the database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events: + +**src/Pyz/Zed/MerchantSearch/Persistence/Propel/Schema/spy_merchant_search.schema.xml** + +```xml + + + + + + + +
    + +
    + +``` + +2. Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE SECURITY | TYPE | EVENT | +|----------------------|-|-| +| spy_merchant | table | created | +| spy_merchant_store | table | created | +| spy_merchant_storage | table | created | +| spy_merchant_search | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have occurred in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------|-----------|-|-----------------------------------------------------------------------| +| Merchant | class | Created | src/Generated/Shared/Transfer/Merchant | +| MerchantCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCriteria | +| MerchantResponse | class | Created | src/Generated/Shared/Transfer/MerchantResponse | +| MerchantCollection | class | Created | src/Generated/Shared/Transfer/MerchantCollection | +| MerchantError | class | Created | src/Generated/Shared/Transfer/MerchantError | +| MerchantSearch | class | Created | src/Generated/Shared/Transfer/MerchantSearchTransfer | +| MerchantSearchCollection | class | Created | src/Generated/Shared/Transfer/MerchantSearchCollection | +| MerchantSearchRequest | class | Created | src/Generated/Shared/Transfer/MerchantSearchRequest | +| MerchantStorage | class | Created | src/Generated/Shared/Transfer/MerchantStorage | +| MerchantStorageProfile | class | Created | src/Generated/Shared/Transfer/MerchantStorageProfile | +| MerchantStorageProfileAddress | class | Created | src/Generated/Shared/Transfer/MerchantStorageProfileAddress | +| MerchantStorageCriteria | class | Created | src/Generated/Shared/Transfer/MerchantStorageCriteria | +| MerchantStorageProfile | class | Created | src/Generated/Shared/Transfer/MerchantStorageProfile | +| DataImporterReaderConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterReaderConfigurationTransfer | +| SpyMerchantEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantEntityTransfer | +| SpyMerchantStoreEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantStoreEntityTransfer | +| SpyMerchantSearchEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantSearchEntityTransfer | +| SpyMerchantStorageEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantStorageEntityTransfer | + + +{% endinfo_block %} + +## 3) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +## 4) Import merchants data + +1. Prepare data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant.csv** + +```php +merchant_reference,merchant_name,registration_number,status,email,is_active,url.de_DE,url.en_US +MER000006,Sony Experts,HYY 134306,approved,michele@sony-experts.com,1,/de/merchant/sony-experts,/en/merchant/sony-experts +MER000005,Budget Cameras,HXX 134305,approved,jason.weidmann@budgetcamerasonline.com,1,/de/merchant/budget-cameras,/en/merchant/budget-cameras +MER000004,Impala Merchant,3,waiting-for-approval,impala.merchant@merchant.kudu,0,/en/merchant/impala-merchant-1,/de/merchant/impala-merchant-1 +MER000003,Sugar Monster,4,waiting-for-approval,sugar.monster@merchant.kudu,0,/de/merchant/sugar-monster,/en/merchant/sugar-monster +MER000007,Restrictions Merchant,5,waiting-for-approval,restrictions.merchant@merchant.kudu,0,/de/merchant/restrictions-merchant,/en/merchant/restrictions-merchant +MER000001,Spryker,HRB 134310,approved,harald@spryker.com,1,/de/merchant/spryker,/en/merchant/spryker +MER000002,Video King,1234.4567,approved,martha@video-king.nl,1,/de/merchant/video-king,/en/merchant/video-king +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA TYPE | DATA EXPLANATION | +|-|-|-|-|-| +| merchant_reference | ✓ | string | MER000006 | Non-database identifier for a merchant. | +| merchant_name | ✓ | string | Sony Experts | Merchant profile page URL for the de_DE locale. | +| registration_number | | string | HYY 134306 | Official registration number as a legal entity of the merchant. | +| status | ✓ | string | approved | Status of the merchant in the system. A status pseudo state machine can be configured to allow for transitions, but this is the initial status for a merchant while importing. | +| email | ✓ | string | michele@sony-experts.com | Email to contact the merchant. | +| is_active | | boolean | 1 | Defines if the merchant is active. | +| url | optional(per locale) | string | /de/merchant/sony-experts | Unique Storefront identifier for a merchant's page. | + +**data/import/common/common/marketplace/merchant_store.csv** + +```csv +merchant_reference,store_name +MER000001,DE +MER000002,DE +MER000006,DE +MER000005,DE +MER000004,DE +MER000003,DE +MER000007,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| merchant_reference | ✓ | string | MER000006 | Merchant identifier. | +| store_name | ✓ | string | DE | Store name to which the merchant will be assigned. | + +2. Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantDataImportPlugin | Imports merchant data into the database. | | Spryker\Zed\MerchantDataImport\Communication\Plugin\MerchantDataImportPlugin | +| MerchantStoreDataImportPlugin | Imports merchant store assignments into the database. | MerchantDataImportPlugin | Spryker\Zed\MerchantDataImport\Communication\Plugin\MerchantStoreDataImportPlugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new MerchantStoragePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new MerchantPublisherTriggerPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageExpanderPlugins(): array + { + return [ + new MerchantProductOfferStorageExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageFilterPlugins(): array + { + return [ + new MerchantProductOfferStorageFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when you retrieve a product offer from storage, you can see the merchant transfer property. + +{% endinfo_block %} + + +**src/Pyz/Client/UrlStorage/UrlStorageDependencyProvider.php** + +```php + + */ + protected function getUrlStorageResourceMapperPlugins() + { + return [ + new UrlStorageMerchantMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the merchant page is accessible at `https://mysprykershop/de/merchant/spryker`. + +{% endinfo_block %} + +2. Register synchronization and synchronization error queues: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + QueueNameFoo, (Queue and error queue will be created: QueueNameFoo and QueueNameFoo.error) + * QueueNameBar => [ + * RoutingKeyFoo => QueueNameBaz, // (Additional queues can be defined by several routing keys) + * ], + * + * @see https://www.rabbitmq.com/tutorials/amqp-concepts.html + * + * @return array + */ + protected function getQueueConfiguration(): array + { + return [ + MerchantStorageConfig::MERCHANT_SYNC_STORAGE_QUEUE, + ]; + } +} + +``` + +3. Configure message processors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant profile messages to synchronize with the key-value store (Redis or Valkey) and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | + +**src/Pyz/Zed/MerchantStorage/MerchantStorageConfig.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container) + { + return [ + MerchantStorageConfig::MERCHANT_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +4. Set up regenerate and resync features: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|---------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| MerchantSynchronizationDataPlugin | Enables the content of an entire storage table to be synchronized into Storage. | | Spryker\Zed\MerchantStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new MerchantSynchronizationDataPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when merchant profile entities are created or updated through ORM, they are exported to the key-value store (Redis or Valkey) accordingly. + +{% endinfo_block %} + + +#### Configure export to Elastica + +This step publishes tables on change (create, edit) to `spy_merchant_search` and synchronizes the data to Search. + +1. Set up event listeners and publishers by registering the plugins: + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new MerchantWritePublisherPlugin(), + new MerchantDeletePublisherPlugin(), + ]; + } +} +``` + +2. Register a synchronization queue: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container) + { + return [ + MerchantSearchConfig::SYNC_SEARCH_MERCHANT => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +4. Set up regenerate and resync features: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|-----------------------------------------------------------|---------------|-----------------------------------------------------------------| +| MerchantSynchronizationDataBulkRepositoryPlugin | Syncs the entire search table content into Search. | | Spryker\Zed\MerchantSearch\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new MerchantSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +5. Configure a synchronization pool name: + +**src/Pyz/Zed/MerchantSearch/MerchantSearchConfig.php** + +```php + + */ + protected function getMerchantSearchResultFormatterPlugins(): array + { + return [ + new MerchantSearchResultFormatterPlugin(), + ]; + } +} +``` + +7. Set up query expanders: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|-----------------------------------------------------------------------------------|---------------|----------------------------------------------------------| +| PaginatedMerchantSearchQueryExpanderPlugin | Allows using pagination for the merchant search. | | Spryker\Client\MerchantSearch\Plugin\Elasticsearch\Query | +| StoreQueryExpanderPlugin | Allows searching to filter out merchants that don't belong to the current store. | | Spryker\Client\SearchElasticsearch\Plugin\QueryExpander | + +**src/Pyz/Client/MerchantSearch/MerchantSearchDependencyProvider.php** + +```php + + */ + protected function getMerchantSearchQueryExpanderPlugins(): array + { + return [ + new PaginatedMerchantSearchQueryExpanderPlugin(), + new StoreQueryExpanderPlugin(), + ]; + } +} +``` + +8. Add the `merchant` source to the supported search sources: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + +Example of the expected data fragment + + ```json + + { + "idMerchant": 1, + "name": "Sony Experts", + "registrationNumber": "HYY 134306", + "email": "michele@sony-experts.com", + "status": "approved", + "isActive": true, + "merchantReference": "MER000006", + "fkStateMachineProcess": 1, + "storeRelation": { + "idEntity": 1, + "idStores": [ + 1 + ], + "stores": [ + { + "availableLocaleIsoCodes": [], + "queuePools": [], + "storesWithSharedPersistence": [], + "idStore": 1, + "name": "DE", + "defaultCurrencyIsoCode": null, + "availableCurrencyIsoCodes": [], + "selectedCurrencyIsoCode": null, + "timezone": null, + "countries": [] + } + ] + }, + "addressCollection": null, + "merchantProfile": null, + "urlCollection": [ + { + "url": "/de/merchant/sony-experts", + "resourceType": null, + "resourceId": null, + "fkLocale": 46, + "idUrl": 505, + "fkResourceCategorynode": null, + "fkRedirect": null, + "fkResourcePage": null, + "fkResourceRedirect": null, + "fkResourceMerchant": 1, + "urlPrefix": null, + "localeName": "de_DE", + "fkResourceProductAbstract": null, + "fkResourceProductSet": null, + "itemType": null, + "itemId": null, + "fkProductAbstract": null, + "fkCategorynode": null, + "fkPage": null + }, + { + "url": "/en/merchant/sony-experts", + "resourceType": null, + "resourceId": null, + "fkLocale": 66, + "idUrl": 506, + "fkResourceCategorynode": null, + "fkRedirect": null, + "fkResourcePage": null, + "fkResourceRedirect": null, + "fkResourceMerchant": 1, + "urlPrefix": null, + "localeName": "en_US", + "fkResourceProductAbstract": null, + "fkResourceProductSet": null, + "itemType": null, + "itemId": null, + "fkProductAbstract": null, + "fkCategorynode": null, + "fkPage": null + } + ], + "categories": [ + { + "idCategory": 2, + "categoryKey": "cameras-and-camcorder", + "isActive": true, + "isInMenu": true, + "isClickable": true, + "isSearchable": true, + "name": null, + "url": null, + "imageName": null, + "categoryImageName": null, + "metaTitle": null, + "metaDescription": null, + "metaKeywords": null, + "fkCategoryTemplate": 1, + "idCmsBlocks": [], + "categoryNode": null, + "nodeCollection": null, + "parentCategoryNode": null, + "localizedAttributes": [ + { + "name": "Kameras & Camcorders", + "url": null, + "metaTitle": "Kameras & Camcorders", + "metaDescription": "Kameras & Camcorders", + "metaKeywords": "Kameras & Camcorders", + "locale": { + "idLocale": 46, + "localeName": "de_DE", + "name": null, + "isActive": true + }, + "image": null + }, + { + "name": "Cameras & Camcordersshhhhjjj", + "url": null, + "metaTitle": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "locale": { + "idLocale": 66, + "localeName": "en_US", + "name": null, + "isActive": true + }, + "image": null + } + ], + "extraParents": [], + "imageSets": [] + } + ], + "stocks": [ + { + "idStock": 7, + "name": "Sony Experts MER000006 Warehouse 1", + "isActive": true, + "storeRelation": null + } + ] +} +``` + +
    diff --git a/_includes/pbc/all/install-features/202602.0/install-the-merchant-product-restrictions-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-merchant-product-restrictions-feature.md new file mode 100644 index 00000000000..afc69d04bc1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-merchant-product-restrictions-feature.md @@ -0,0 +1,327 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Product Lists | {{page.release_tag}} | +| Merchant | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-product-restrictions:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| MerchantRelationshipProductList | vendor/spryker/merchant-relationship-product-list | +| MerchantRelationshipProductListDataImport | `vendor/spryker/merchant-relationship-product-list-data-import | +| MerchantRelationshipProductListGui | vendor/spryker/merchant-relationship-product-list-gui | + +{% endinfo_block %} + +### 2) Set up database schema + +Run the following commands to apply database changes, as well as generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_list.fk_merchant_relationship | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | TYPE | +| --- | --- | --- | --- | +| MerchantRelationshipFilter | class | created | src/Generated/Shared/Transfer/MerchantRelationshipFilterTransfer | + +{% endinfo_block %} + + +### 3) Import data + +#### Import merchant relationship to product lists + +Prepare your data according to your requirements using our demo data: + +```yaml +merchant_relation_key,product_list_key +mr-008,pl-001 +mr-008,pl-002 +mr-008,pl-003 +mr-009,pl-004 +mr-010,pl-005 +mr-011,pl-006 +mr-011,pl-007 +mr-011,pl-008 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +|merchant_relation_key | ✓ | string | mr-008 | Identifier of merchant relations. The merchant relations must exist already. | +| product_list_key |mandatory | string | pl-001 | Identifier of product lists. The product lists must exist already. | + +Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| MerchantRelationshipProductListDataImportPlugin | Imports basic product list data into the database. | | Spryker\Zed\MerchantRelationshipProductListDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +
  • Expands the customer transfer object with their assigned product lists.
  • The product list information is based on the customer's merchant relationship.
  • | None | Spryker\Zed\MerchantRelationshipProductList\Communication\Plugin\Customer | + +**src/Pyz/Zed/Customer/CustomerDependencyProvider.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + QuoteTransfer::ID_QUOTE, + QuoteTransfer::ITEMS, + QuoteTransfer::BUNDLE_ITEMS, + QuoteTransfer::TOTALS, + QuoteTransfer::CURRENCY, + QuoteTransfer::PRICE_MODE, + QuoteTransfer::NAME, + QuoteTransfer::IS_DEFAULT, + QuoteTransfer::CUSTOMER_REFERENCE, + QuoteTransfer::CUSTOMER => [ + CustomerTransfer::CUSTOMER_REFERENCE, + ], + QuoteTransfer::IS_LOCKED, + QuoteTransfer::STORE => [ + StoreTransfer::ID_STORE, + StoreTransfer::NAME, + ], + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that only the fields you've defined are saved in a customer's session. + +{% endinfo_block %} + +2. Configure the cart name for the reorder cart. + +**src/Pyz/Zed/MultiCart/MultiCartConfig.php** + +```php + + vendor/spryker/spryker/multi-cart-data-import/data/import/multi_cart.csv + +```yaml +key,name,customer_reference,store,is_default,quote_data +quote-1,My Cart,DE--1,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-2,My Cart,DE--2,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-3,My Cart,DE--3,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-4,My Cart,DE--4,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-5,My Cart,DE--5,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-6,My Cart,DE--6,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-7,My Cart,DE--7,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-8,My Cart,DE--8,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-9,My Cart,DE--9,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-10,My Cart,DE--10,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-11,My Cart,DE--11,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-12,My Cart,DE--12,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-13,My Cart,DE--13,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-14,My Cart,DE--14,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-15,My Cart,DE--15,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-16,My Cart,DE--16,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-17,My Cart,DE--17,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-18,My Cart,DE--18,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-19,My Cart,DE--19,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-20,My Cart,DE--20,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-21,My Cart,DE--21,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +``` + + + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|-----------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| +| key | ✓ | string | quote-19 | Unique identifier used to refer to in other imports. | +| name | ✓ | string | >My Cart | The name of the quote. | +| customer_reference | ✓ | string | DE--21 | Customer reference of the quote owner. | +| store | ✓ | string | DE | The store name that the quote is related to. | +| is_default | ✓ | int | 1 | The flag to show that the quote is default for the customer. | +| quote_data | ✓ | string | {""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""} | Quote data params serialized as json. | + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------|----------------------------------------|----------------------------------------------|------------------------------------------------------| +| MultiCartDataImportPlugin | Imports a customer's quotes to database. | Customers are imported. | Spryker\Zed\MultiCartDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MultiCartDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import multi-cart +``` + +{% info_block warningBox "Verification" %} + +Make sure the data has been imported to the `spy_quote` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the behaviors in the following sections. + +#### Set up quote integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------| +| AddSuccessMessageAfterQuoteCreatedPlugin | Adds success message to messenger afterward. | | Spryker\Zed\MultiCart\Communication\Plugin | +| AddDefaultNameBeforeQuoteSavePlugin | Sets the default quote name if a quote doesn't have a name. | | Spryker\Zed\MultiCart\Communication\Plugin | +| ResolveQuoteNameBeforeQuoteCreatePlugin | Resolves a quote name to make it unique for the customer before it's saved. | If `AddDefaultNameBeforeQuoteSavePlugin` is used, it must be added afterwards. | Spryker\Zed\MultiCart\Communication\Plugin | +| DeactivateQuotesBeforeQuoteSavePlugin | Marks a quote as default. Makes an SQL request to mark all customers' quotes as not default. | | Spryker\Zed\MultiCart\Communication\Plugin | +| InitDefaultQuoteCustomerQuoteDeleteAfterPlugin | Activates any customer quote if an active customer quote was removed. | | Spryker\Zed\MultiCart\Communication\Plugin | +| NameQuoteTransferExpanderPlugin | Sets the default quote name if a quote doesn't have a name. Default guest quote name is used for guest customer quotes. | | Spryker\Client\MultiCart\Plugin | +| TotalItemCountDefaultCartQuoteExpanderPlugin | Calculates the number of items in the provided `QuoteTransfer` and sets the result to `QuoteTransfer.totalItemCount`. | | Spryker\Client\Cart\Plugin\MultiCart | + +
    src/Pyz/Zed/Quote/QuoteDependencyProvider.php + +```php + + */ + protected function getQuoteCreateAfterPlugins(): array + { + return [ + new AddSuccessMessageAfterQuoteCreatedPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteCreateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteUpdateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteDeleteAfterPluginInterface> + */ + protected function getQuoteDeleteAfterPlugins(): array + { + return [ + new InitDefaultQuoteCustomerQuoteDeleteAfterPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteTransferExpanderPlugins(Container $container): array + { + return [ + new NameQuoteTransferExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/MultiCart/MultiCartDependencyProvider.php** + +```php + + */ + protected function getDefaultCartQuoteExpanderPlugins(): array + { + return [ + new TotalItemCountDefaultCartQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that customer carts have unique names. If a customer creates a cart with a name that was already used for another cart of the same customer, the cart name is extended with an iterative suffix. + +Example: +1. A customer creates a cart named "Shopping cart". +2. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 1". +3. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 2". + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that a customer has only one active cart at a time. If a customer updates an inactive cart, it becomes active, while the previous active cart becomes inactive. + +{% endinfo_block %} + +#### Set up persistent cart integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| CustomerCartQuoteResponseExpanderPlugin | Adds a customer quote collection to the quote response transfer after cart operation handling. Replaces a quote with an active quote if it exists. | | Spryker\Zed\Spryker\Zed\MultiCart\Communication\Plugin | +| SaveCustomerQuotesQuoteUpdatePlugin | Extracts a customer quote collection from a quote response object and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| DefaultQuoteUpdatePlugin | Locates a customer default quote in a customer quote collection and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| QuoteSelectorPersistentCartChangeExpanderPlugin | Takes a quote ID form parameters and replaces it in a quote change request. | | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteUpdatePlugins(): array + { + return [ + new SaveCustomerQuotesQuoteUpdatePlugin(), + new DefaultQuoteUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface> + */ + protected function getChangeRequestExtendPlugins(): array + { + return [ + new QuoteSelectorPersistentCartChangeExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in as a customer. +2. Add products to cart. +3. Update quantity of products. + Open the mini-cart widget and make sure the updated quantity, prices and products are displayed correctly. + +{% endinfo_block %} + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteResponseExpanderPlugins(): array + { + return [ + new CustomerCartQuoteResponseExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in a multi-cart session, adding items to cart updates the customer's cart list. + +{% endinfo_block %} + +#### Set up the customer integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------|---------------------------------| +| GuestCartSaveCustomerSessionSetPlugin | Executed after a customer was added to the session. Saves a guest customer quote to the database if it's not empty. Takes an actual customer quote from the database if the guest cart is empty. | Must be added before `GuestCartUpdateCustomerSessionSetPlugin`. | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/Customer/CustomerDependencyProvider.php** + +```php + + */ + protected function getCustomerSessionSetPlugins() + { + return [ + new GuestCartSaveCustomerSessionSetPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When a customer logs in, make sure an empty guest cart isn't saved to the database. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Multiple Carts feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------|---------------------------------------| +| MultiCartPage | vendor/spryker-shop/multi-cart-page | +| MultiCartWidget | vendor/spryker-shop/multi-cart-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +
    src/data/import/glossary.csv + +```yaml +page.multi_cart.shopping_cart.list.title,Shopping cart,en_US +page.multi_cart.shopping_cart.list.title,Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.create_link,Create,en_US +page.multi_cart.shopping_cart.list.create_link,Erstellen,de_DE +page.multi_cart.shopping_cart.list.label.name,Name,en_US +page.multi_cart.shopping_cart.list.label.name,Name,de_DE +page.multi_cart.shopping_cart.list.label.num_of_products,Number of products,en_US +page.multi_cart.shopping_cart.list.label.num_of_products,Anzahl der Produkte,de_DE +page.multi_cart.shopping_cart.list.label.prices,Prices,en_US +page.multi_cart.shopping_cart.list.label.prices,Preise,de_DE +page.multi_cart.shopping_cart.list.label.total,Total,en_US +page.multi_cart.shopping_cart.list.label.total,Gesamt,de_DE +page.multi_cart.shopping_cart.list.label.actions,Actions,en_US +page.multi_cart.shopping_cart.list.label.actions,Aktionen,de_DE +page.multi_cart.shopping_cart.list.link.edit_name,Edit name,en_US +page.multi_cart.shopping_cart.list.link.edit_name,Namen bearbeiten,de_DE +page.multi_cart.shopping_cart.list.link.duplicate,Duplicate,en_US +page.multi_cart.shopping_cart.list.link.duplicate,Duplikat,de_DE +page.multi_cart.shopping_cart.list.link.delete,Delete,en_US +page.multi_cart.shopping_cart.list.link.delete,Löschen,de_DE +page.multi_cart.shopping_cart.list.label.item,"Item",en_US +page.multi_cart.shopping_cart.list.label.item,"Artikel",de_DE +page.multi_cart.shopping_cart.list.label.items,"Items",en_US +page.multi_cart.shopping_cart.list.label.items,"Artikel",de_DE +customer.account.shopping_cart.list.title,Manage Shopping carts,en_US +customer.account.shopping_cart.list.title,Verwalten Sie Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.label.access,Access,en_US +page.multi_cart.shopping_cart.list.label.access,Zugriff,de_DE +page.multi_cart.shopping_cart.update.title,Edit,en_US +page.multi_cart.shopping_cart.update.title,Bearbeiten,de_DE +page.multi_cart.shopping_cart.create.title,Create,en_US +page.multi_cart.shopping_cart.create.title,Erstellen,de_DE +multi_cart.form.create_cart,"Add new cart",en_US +multi_cart.form.create_cart,"Füge einen neuen Warenkorb hinzu",de_DE +multi_cart.form.quote.name,"Cart Name",en_US +multi_cart.form.quote.name,"Name des Einkaufswagens",de_DE +multi_cart.form.edit_cart,"Change Name",en_US +multi_cart.form.edit_cart,"Namen ändern",de_DE +multi_cart.form.edit_cart_information,"Edit Cart information",en_US +multi_cart.form.edit_cart_information,"Einkaufswageninformationen bearbeiten",de_DE +multi_cart.cart.set_default.success,"Cart '%quote%' was successfully set as active.",en_US +multi_cart.cart.set_default.success,"Warenkorb '%quote%' wurde erfolgreich auf aktiv gesetzt.",de_DE +multi_cart_page.cart_clear.success,"Cart was successfully cleared",en_US +multi_cart_page.cart_clear.success,"Einkaufswagen wurde erfolgreich gelöscht",de_DE +multi_cart_page.cart_delete_confirmation.warning,Warning,en_US +multi_cart_page.cart_delete_confirmation.warning,Warnung,de_DE +multi_cart_page.cart_delete_confirmation.trying_to_delete,You are trying to delete Cart,en_US +multi_cart_page.cart_delete_confirmation.trying_to_delete,Sie versuchen den Warenkorb zu löschen,de_DE +multi_cart_page.cart_delete_confirmation.shared_with,It is shared with the following users,en_US +multi_cart_page.cart_delete_confirmation.shared_with,Der Warenkorb ist mit den folgenden Personen geteilt,de_DE +multi_cart_page.cart_delete_confirmation.from_all_of_them,It will be deleted from all of them,en_US +multi_cart_page.cart_delete_confirmation.from_all_of_them,Der Warenkorb wird für alle Nutzer gelöscht,de_DE +multi_cart_page.cart_delete_confirmation.cancel,Cancel,en_US +multi_cart_page.cart_delete_confirmation.cancel,Abbrechen,de_DE +multi_cart_page.cart_delete_confirmation.delete,Delete,en_US +multi_cart_page.cart_delete_confirmation.delete,Löschen,de_DE +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Shopping carts,en_US +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Warenkörbe,de_DE +multi_cart_widget.cart.cart_name,"Cart Name",en_US +multi_cart_widget.cart.cart_name,"Name des Einkaufswagens",de_DE +multi_cart_widget.cart.add,"Create New Cart",en_US +multi_cart_widget.cart.add,"Neuen Warenkorb erstellen",de_DE +multi_cart_widget.cart.action.change_name,"Change Name",en_US +multi_cart_widget.cart.action.change_name,"Namen ändern",de_DE +multi_cart_widget.cart.action.duplicate,"Duplicate",en_US +multi_cart_widget.cart.action.duplicate,"Duplikat",de_DE +multi_cart_widget.cart.action.clear,"Clear cart",en_US +multi_cart_widget.cart.action.clear,"Leerer Warenkorb",de_DE +multi_cart_widget.cart.action.delete,"Delete cart",en_US +multi_cart_widget.cart.action.delete,"Warenkorb löschen",de_DE +multi_cart_widget.cart.action.view,"View details",en_US +multi_cart_widget.cart.action.view,"Warenkorb ansehen",de_DE +multi_cart_widget.cart.action.set_default,"Set active",en_US +multi_cart_widget.cart.action.set_default,"Aktiv setzen",de_DE +multi_cart_widget.cart.default,"Active",en_US +multi_cart_widget.cart.default,"Aktiv",de_DE +multi_cart_widget.cart.item,"Item",en_US +multi_cart_widget.cart.item,"Artikel",de_DE +multi_cart_widget.cart.items,"Items",en_US +multi_cart_widget.cart.items,"Artikel",de_DE +multi_cart_widget.cart.view_all,"View all carts",en_US +multi_cart_widget.cart.view_all,"Alle Warenkörbe anzeigen",de_DE +multi_cart_widget.cart.cart,"Cart",en_US +multi_cart_widget.cart.cart,"Warenkorb",de_DE +multi_cart_widget.cart.carts,"Carts",en_US +multi_cart_widget.cart.carts,"Warenkorb",de_DE +multi_cart_widget.cart.list,"Cart List",en_US +multi_cart_widget.cart.list,"Warenkorb-Liste",de_DE +multi_cart_widget.cart.status,"Status",en_US +multi_cart_widget.cart.status,"Status",de_DE +multi_cart_widget.cart.sub_total,"Sub Total",en_US +multi_cart_widget.cart.sub_total,"Zwischensumme",de_DE +multi_cart_widget.cart.actions,"Actions",en_US +multi_cart_widget.cart.actions,"Aktionen",de_DE +multi_cart_widget.cart.created.success,"Cart '%quoteName%' was created successfully",en_US +multi_cart_widget.cart.created.success,"Warenkorb '%quoteName%' wurde erfolgreich erstellt",de_DE +multi_cart_widget.cart.updated.success,"Cart updated successfully",en_US +multi_cart_widget.cart.updated.success,"Einkaufswagen wurde erfolgreich aktualisiert",de_DE +multi_cart_widget.cart.was-deleted-before,Dieser Warenkorb wurde bereits gelöscht,de_DE +multi_cart_widget.cart.was-deleted-before,This cart was already deleted,en_US +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Enable the following controllers + +#### Router list + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|----------------------------------|------------------------------------------------| +| MultiCartPageRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | +| MultiCartPageAsyncRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MultiCartPageRouteProviderPlugin(), + new MultiCartPageAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +| PLUGIN | VERIFICATION | +| - | - | +| MultiCartPageRouteProviderPlugin | The cart list page is available for a logged-in customer, for example — at `http://mysprykershop.com/multi-cart/`. | +| MultiCartPageAsyncRouteProviderPlugin | You can clear a cart with the cart actions AJAX mode enabled. | +| MultiCartPageRouteProviderPlugin | After performing a cart action with the cart actions AJAX mode enabled, the mini cart counter is updated. This can be verified after you complete the installation. | + +{% endinfo_block %} + +### 4) Set up widgets & plugins + +1. Register the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|-------------------------------------|-----------------------------------------------------------------------|--------------------------------------------------| +| AddToMultiCartWidget | Shows the cart list for adding items to cart. | SprykerShop\Yves\MultiCartWidget\Widget | +| CartOperationsWidget | Shows multi-cart functionalities on the cart page. | SprykerShop\Yves\MultiCartWidget\Widget | +| MiniCartWidget | Shows the mini cart in the header. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMenuItemWidget | Shows a cart list navigation menu item. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMiniCartViewExpanderPlugin | Expands the provided mini cart view template with a multi-cart view. | SprykerShop\Yves\MultiCartWidget\Plugin\CartPage | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + AddToMultiCartWidget::class, + CartOperationsWidget::class, + MiniCartWidget::class, + MultiCartMenuItemWidget::class, + ]; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new MultiCartMiniCartViewExpanderPlugin(), + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | VERIFICATION | +|-------------------------|------------------------------------------------------------------------------------------------------------| +| AddToMultiCartWidget | Go to the product details page. A shopping cart list is displayed in the cart form. | +| CartOperationsWidget | Go to the cart overview page. Make sure the cart title and the **Clear all** button are displayed. | +| MiniCartWidget | The minicart with all customer's carts is displayed the header. | +| MultiCartMenuItemWidget | Go to the customer account overview page. The carts list navigation menu item is displayed. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-feature0.md b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-feature0.md new file mode 100644 index 00000000000..e78963b8ebe --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-feature0.md @@ -0,0 +1,775 @@ + + + +This document describes how to install the [Multiple Carts feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/multiple-carts-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Multiple Carts feature core. + +### Prerequisites + +- Enable the database storage strategy in the Quote module. + +- Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + + +### 1) Install the required modules + +```bash +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------|---------------------------------------| +| MultiCart | vendor/spryker/multi-cart | +| MultiCartDataImport | vendor/spryker/multi-cart-data-import | + +{% endinfo_block %} + +### 2) Set up configuration + +Configure the quote fields that are allowed for saving in quote collection in the customer's session. You can specify nested fields. + +**src/Pyz/Client/MultiCart/MultiCartConfig.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + QuoteTransfer::ID_QUOTE, + QuoteTransfer::ITEMS, + QuoteTransfer::BUNDLE_ITEMS, + QuoteTransfer::TOTALS, + QuoteTransfer::CURRENCY, + QuoteTransfer::PRICE_MODE, + QuoteTransfer::NAME, + QuoteTransfer::IS_DEFAULT, + QuoteTransfer::CUSTOMER_REFERENCE, + QuoteTransfer::CUSTOMER => [ + CustomerTransfer::CUSTOMER_REFERENCE, + ], + QuoteTransfer::IS_LOCKED, + QuoteTransfer::STORE => [ + StoreTransfer::ID_STORE, + StoreTransfer::NAME, + ], + ]); + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that only configured fields are saved in a customer's session. + +{% endinfo_block %} + +### 3) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|------------------------------------------|--------|---------| +| spy_quote.name | column | created | +| spy_quote.is_default | column | created | +| spy_quote.key | column | created | +| spy_quote-unique-name-customer_reference | index | created | + +Make sure that the following changes in transfer objects have been applied: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------|--------|---------|--------------------------------------------------------------------| +| QuoteTransfer.name | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteTransfer.isDefault | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteTransfer.key | column | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteResponseTransfer.customQuotes | column | created | src/Generated/Shared/Transfer/QuoteResponseTransfer | +| QuoteUpdateRequestAttributesTransfer.name | column | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| QuoteUpdateRequestAttributesTransfer.totals | column | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| QuoteActivationRequestTransfer | class | created | src/Generated/Shared/Transfer/QuoteActivationRequestTransfer | + +{% endinfo_block %} + +### 4) Import multicarts + + +1. Prepare data according to your requirements using our demo data: + + +
    + vendor/spryker/spryker/multi-cart-data-import/data/import/multi_cart.csv + +```yaml +key,name,customer_reference,store,is_default,quote_data +quote-1,My Cart,DE--1,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-2,My Cart,DE--2,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-3,My Cart,DE--3,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-4,My Cart,DE--4,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-5,My Cart,DE--5,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-6,My Cart,DE--6,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-7,My Cart,DE--7,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-8,My Cart,DE--8,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-9,My Cart,DE--9,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-10,My Cart,DE--10,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-11,My Cart,DE--11,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-12,My Cart,DE--12,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-13,My Cart,DE--13,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-14,My Cart,DE--14,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-15,My Cart,DE--15,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-16,My Cart,DE--16,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-17,My Cart,DE--17,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-18,My Cart,DE--18,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-19,My Cart,DE--19,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-20,My Cart,DE--20,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +quote-21,My Cart,DE--21,DE,1,"{""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""}" +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|-----------|-----------|------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| +| key | ✓ | string | quote-19 | Unique identifier used to refer to in other imports. | +| name | ✓ | string | >My Cart | The name of the quote. | +| customer_reference | ✓ | string | DE--21 | Customer reference of the quote owner. | +| store | ✓ | string | DE | The store name that the quote is related to. | +| is_default | ✓ | int | 1 | Thelag to show that the quote is default for the customer. | +| quote_data | ✓ | string | {""currency"":{""code"":""EUR"",""name"":""Euro"",""symbol"":""\u20ac"",""isDefault"":true,""fractionDigits"":2},""priceMode"":""GROSS_MODE""} | Quote data params serialized as json. | + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------|----------------------------------------|----------------------------------------------|------------------------------------------------------| +| MultiCartDataImportPlugin | Imports a customer's quotes to database. | Customers are imported. | Spryker\Zed\MultiCartDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MultiCartDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import multi-cart +``` + +{% info_block warningBox "Verification" %} + +Make sure the data has been imported to the `spy_quote` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the baheviors in the following sections. + +#### Set up quote integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|--------------------------------------------| +| AddSuccessMessageAfterQuoteCreatedPlugin | Adds success message to messenger afterward. | | Spryker\Zed\MultiCart\Communication\Plugin | +| AddDefaultNameBeforeQuoteSavePlugin | Sets the default quote name if a quote doesn't have a name. | | Spryker\Zed\MultiCart\Communication\Plugin | +| ResolveQuoteNameBeforeQuoteCreatePlugin | Resolves a quote name to make it unique for the customer before it's saved. | If `AddDefaultNameBeforeQuoteSavePlugin` is used, it must be added afterwards. | Spryker\Zed\MultiCart\Communication\Plugin | +| DeactivateQuotesBeforeQuoteSavePlugin | Marks a quote as default. Makes an SQL request to mark all customers' quotes as not default. | | Spryker\Zed\MultiCart\Communication\Plugin | +| InitDefaultQuoteCustomerQuoteDeleteAfterPlugin | Activates any customer quote if an active customer quote was removed. | | Spryker\Zed\MultiCart\Communication\Plugin | +| NameQuoteTransferExpanderPlugin | Sets the default quote name if a quote doesn't have a name. Default guest quote name is used for guest customer quotes. | | Spryker\Client\MultiCart\Plugin | +| TotalItemCountDefaultCartQuoteExpanderPlugin | Calculates the number of items in the provided `QuoteTransfer` and sets the result to `QuoteTransfer.totalItemCount`. | | Spryker\Client\Cart\Plugin\MultiCart | + +
    src/Pyz/Zed/Quote/QuoteDependencyProvider.php + +```php + + */ + protected function getQuoteCreateAfterPlugins(): array + { + return [ + new AddSuccessMessageAfterQuoteCreatedPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteCreateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteWritePluginInterface> + */ + protected function getQuoteUpdateBeforePlugins(): array + { + return [ + new AddDefaultNameBeforeQuoteSavePlugin(), + new ResolveQuoteNameBeforeQuoteCreatePlugin(), + new DeactivateQuotesBeforeQuoteSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteDeleteAfterPluginInterface> + */ + protected function getQuoteDeleteAfterPlugins(): array + { + return [ + new InitDefaultQuoteCustomerQuoteDeleteAfterPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteTransferExpanderPlugins(Container $container): array + { + return [ + new NameQuoteTransferExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/MultiCart/MultiCartDependencyProvider.php** + +```php + + */ + protected function getDefaultCartQuoteExpanderPlugins(): array + { + return [ + new TotalItemCountDefaultCartQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that customer carts have unique names. If a customer creates a cart with a name that was already used for another cart of the same customer, the cart name is extended with an iterative suffix. + +Example: +1. A customer creates a cart named "Shopping cart". +2. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 1". +3. The customer creates a cart named "Shopping cart". It's automatically renamed to "Shopping cart 2". + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that a customer has only one active cart at a time. If a customer updates an inactive cart, it becomes active, while the previous active cart becomes inactive. + +{% endinfo_block %} + +#### Set up persistent cart integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| CustomerCartQuoteResponseExpanderPlugin | Adds a customer quote collection to the quote response transfer after cart operation handling. Replaces a quote with an active quote if it exist. | | Spryker\Zed\Spryker\Zed\MultiCart\Communication\Plugin | +| SaveCustomerQuotesQuoteUpdatePlugin | Extracts a customer quote collection from a quote response object and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| DefaultQuoteUpdatePlugin | Locates a customer default quote in a customer quote collection and saves it to the customer session. | | Spryker\Client\MultiCart\Plugin | +| QuoteSelectorPersistentCartChangeExpanderPlugin | Takes a quote ID form parameters and replaces it in a quote change request. | | Spryker\Client\MultiCart\Plugin | +| MultiCartMiniCartViewExpanderPlugin | Expands the provided mini cart view template with a multi-cart view. | | | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteUpdatePlugins(): array + { + return [ + new SaveCustomerQuotesQuoteUpdatePlugin(), + new DefaultQuoteUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface> + */ + protected function getChangeRequestExtendPlugins(): array + { + return [ + new QuoteSelectorPersistentCartChangeExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getMiniCartViewExpanderPlugins(): array + { + return [ + new MultiCartMiniCartViewExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in as a customer. +2. Add products to cart. +3. Update quantity of products. + Open the mini-cart widget and make sure the updated quantity, prices, and products are displayed correctly. + +{% endinfo_block %} + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuoteResponseExpanderPlugins(): array + { + return [ + new CustomerCartQuoteResponseExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in a multi-cart session, adding items to cart updates the customer's cart list. + +{% endinfo_block %} + +#### Set up the customer integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------|---------------------------------| +| GuestCartSaveCustomerSessionSetPlugin | Executed after a customer was added to the session. Saves a guest customer quote to the database if it's not empty. Takes an actual customer quote from the database if the guest cart is empty. | Must be added before `GuestCartUpdateCustomerSessionSetPlugin`. | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/Customer/CustomerDependencyProvider.php** + +```php + + */ + protected function getCustomerSessionSetPlugins() + { + return [ + new GuestCartSaveCustomerSessionSetPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When a customer logs in, make sure an empty guest cart isn't saved to the database. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Multiple Carts feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/multiple-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------|---------------------------------------| +| MultiCartPage | vendor/spryker-shop/multi-cart-page | +| MultiCartWidget | vendor/spryker-shop/multi-cart-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +
    src/data/import/glossary.csv + +```yaml +page.multi_cart.shopping_cart.list.title,Shopping cart,en_US +page.multi_cart.shopping_cart.list.title,Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.create_link,Create,en_US +page.multi_cart.shopping_cart.list.create_link,Erstellen,de_DE +page.multi_cart.shopping_cart.list.label.name,Name,en_US +page.multi_cart.shopping_cart.list.label.name,Name,de_DE +page.multi_cart.shopping_cart.list.label.num_of_products,Number of products,en_US +page.multi_cart.shopping_cart.list.label.num_of_products,Anzahl der Produkte,de_DE +page.multi_cart.shopping_cart.list.label.prices,Prices,en_US +page.multi_cart.shopping_cart.list.label.prices,Preise,de_DE +page.multi_cart.shopping_cart.list.label.total,Total,en_US +page.multi_cart.shopping_cart.list.label.total,Gesamt,de_DE +page.multi_cart.shopping_cart.list.label.actions,Actions,en_US +page.multi_cart.shopping_cart.list.label.actions,Aktionen,de_DE +page.multi_cart.shopping_cart.list.link.edit_name,Edit name,en_US +page.multi_cart.shopping_cart.list.link.edit_name,Namen bearbeiten,de_DE +page.multi_cart.shopping_cart.list.link.duplicate,Duplicate,en_US +page.multi_cart.shopping_cart.list.link.duplicate,Duplikat,de_DE +page.multi_cart.shopping_cart.list.link.delete,Delete,en_US +page.multi_cart.shopping_cart.list.link.delete,Löschen,de_DE +page.multi_cart.shopping_cart.list.label.item,"Item",en_US +page.multi_cart.shopping_cart.list.label.item,"Artikel",de_DE +page.multi_cart.shopping_cart.list.label.items,"Items",en_US +page.multi_cart.shopping_cart.list.label.items,"Artikel",de_DE +customer.account.shopping_cart.list.title,Manage Shopping carts,en_US +customer.account.shopping_cart.list.title,Verwalten Sie Einkaufswagen,de_DE +page.multi_cart.shopping_cart.list.label.access,Access,en_US +page.multi_cart.shopping_cart.list.label.access,Zugriff,de_DE +page.multi_cart.shopping_cart.update.title,Edit,en_US +page.multi_cart.shopping_cart.update.title,Bearbeiten,de_DE +page.multi_cart.shopping_cart.create.title,Create,en_US +page.multi_cart.shopping_cart.create.title,Erstellen,de_DE +multi_cart.form.create_cart,"Add new cart",en_US +multi_cart.form.create_cart,"Füge einen neuen Warenkorb hinzu",de_DE +multi_cart.form.quote.name,"Cart Name",en_US +multi_cart.form.quote.name,"Name des Einkaufswagens",de_DE +multi_cart.form.edit_cart,"Change Name",en_US +multi_cart.form.edit_cart,"Namen ändern",de_DE +multi_cart.form.edit_cart_information,"Edit Cart information",en_US +multi_cart.form.edit_cart_information,"Einkaufswageninformationen bearbeiten",de_DE +multi_cart.cart.set_default.success,"Cart '%quote%' was successfully set as active.",en_US +multi_cart.cart.set_default.success,"Warenkorb '%quote%' wurde erfolgreich auf aktiv gesetzt.",de_DE +multi_cart_page.cart_clear.success,"Cart was successfully cleared",en_US +multi_cart_page.cart_clear.success,"Einkaufswagen wurde erfolgreich gelöscht",de_DE +multi_cart_page.cart_delete_confirmation.warning,Warning,en_US +multi_cart_page.cart_delete_confirmation.warning,Warnung,de_DE +multi_cart_page.cart_delete_confirmation.trying_to_delete,You are trying to delete Cart,en_US +multi_cart_page.cart_delete_confirmation.trying_to_delete,Sie versuchen den Warenkorb zu löschen,de_DE +multi_cart_page.cart_delete_confirmation.shared_with,It is shared with the following users,en_US +multi_cart_page.cart_delete_confirmation.shared_with,Der Warenkorb ist mit den folgenden Personen geteilt,de_DE +multi_cart_page.cart_delete_confirmation.from_all_of_them,It will be deleted from all of them,en_US +multi_cart_page.cart_delete_confirmation.from_all_of_them,Der Warenkorb wird für alle Nutzer gelöscht,de_DE +multi_cart_page.cart_delete_confirmation.cancel,Cancel,en_US +multi_cart_page.cart_delete_confirmation.cancel,Abbrechen,de_DE +multi_cart_page.cart_delete_confirmation.delete,Delete,en_US +multi_cart_page.cart_delete_confirmation.delete,Löschen,de_DE +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Shopping carts,en_US +multi_cart_page.cart_delete_confirmation.breadcrumbs.shopping_carts,Warenkörbe,de_DE +multi_cart_widget.cart.cart_name,"Cart Name",en_US +multi_cart_widget.cart.cart_name,"Name des Einkaufswagens",de_DE +multi_cart_widget.cart.add,"Create New Cart",en_US +multi_cart_widget.cart.add,"Neuen Warenkorb erstellen",de_DE +multi_cart_widget.cart.action.change_name,"Change Name",en_US +multi_cart_widget.cart.action.change_name,"Namen ändern",de_DE +multi_cart_widget.cart.action.duplicate,"Duplicate",en_US +multi_cart_widget.cart.action.duplicate,"Duplikat",de_DE +multi_cart_widget.cart.action.clear,"Clear cart",en_US +multi_cart_widget.cart.action.clear,"Leerer Warenkorb",de_DE +multi_cart_widget.cart.action.delete,"Delete cart",en_US +multi_cart_widget.cart.action.delete,"Warenkorb löschen",de_DE +multi_cart_widget.cart.action.view,"View details",en_US +multi_cart_widget.cart.action.view,"Warenkorb ansehen",de_DE +multi_cart_widget.cart.action.set_default,"Set active",en_US +multi_cart_widget.cart.action.set_default,"Aktiv setzen",de_DE +multi_cart_widget.cart.default,"Active",en_US +multi_cart_widget.cart.default,"Aktiv",de_DE +multi_cart_widget.cart.item,"Item",en_US +multi_cart_widget.cart.item,"Artikel",de_DE +multi_cart_widget.cart.items,"Items",en_US +multi_cart_widget.cart.items,"Artikel",de_DE +multi_cart_widget.cart.view_all,"View all carts",en_US +multi_cart_widget.cart.view_all,"Alle Warenkörbe anzeigen",de_DE +multi_cart_widget.cart.cart,"Cart",en_US +multi_cart_widget.cart.cart,"Warenkorb",de_DE +multi_cart_widget.cart.carts,"Carts",en_US +multi_cart_widget.cart.carts,"Warenkorb",de_DE +multi_cart_widget.cart.list,"Cart List",en_US +multi_cart_widget.cart.list,"Warenkorb-Liste",de_DE +multi_cart_widget.cart.status,"Status",en_US +multi_cart_widget.cart.status,"Status",de_DE +multi_cart_widget.cart.sub_total,"Sub Total",en_US +multi_cart_widget.cart.sub_total,"Zwischensumme",de_DE +multi_cart_widget.cart.actions,"Actions",en_US +multi_cart_widget.cart.actions,"Aktionen",de_DE +multi_cart_widget.cart.created.success,"Cart '%quoteName%' was created successfully",en_US +multi_cart_widget.cart.created.success,"Warenkorb '%quoteName%' wurde erfolgreich erstellt",de_DE +multi_cart_widget.cart.updated.success,"Cart updated successfully",en_US +multi_cart_widget.cart.updated.success,"Einkaufswagen wurde erfolgreich aktualisiert",de_DE +multi_cart_widget.cart.was-deleted-before,Dieser Warenkorb wurde bereits gelöscht,de_DE +multi_cart_widget.cart.was-deleted-before,This cart was already deleted,en_US +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Enable the following controllers + +#### Router list + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +|----------------------------------|------------------------------------------------| +| MultiCartPageRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | +| MultiCartPageAsyncRouteProviderPlugin | SprykerShop\Yves\MultiCartPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MultiCartPageRouteProviderPlugin(), + new MultiCartPageAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +| PLUGIN | VERIFICATION | +| - | - | +| MultiCartPageRouteProviderPlugin | The cart list page is available for a logged-in customer, for example—at `http://mysprykershop.com/multi-cart/`. | +| MultiCartPageAsyncRouteProviderPlugin | You can clear a cart with the cart actions AJAX mode enabled. | +| MultiCartPageRouteProviderPlugin | After performing a cart action with the cart actions AJAX mode enabled, the mini cart counter is updated. This can be verified after you complete the installation. | + +{% endinfo_block %} + +### 4) Set up widgets + +1. Register the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|-------------------------|--------------------------------------------------------------|-----------------------------------------| +| AddToMultiCartWidget | Shows the cart list for adding items to cart. | SprykerShop\Yves\MultiCartWidget\Widget | +| CartOperationsWidget | Shows multi-cart functionalities on the cart page. | SprykerShop\Yves\MultiCartWidget\Widget | +| MiniCartWidget | Shows the mini cart in the header. | SprykerShop\Yves\MultiCartWidget\Widget | +| MultiCartMenuItemWidget | Shows a cart list navigation menu item. | SprykerShop\Yves\MultiCartWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + AddToMultiCartWidget::class, + CartOperationsWidget::class, + MiniCartWidget::class, + MultiCartMenuItemWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | VERIFICATION | +|-------------------------|------------------------------------------------------------------------------------------------------------| +| AddToMultiCartWidget | Go to the product details page. A shopping cart list is displayed in the cart form. | +| CartOperationsWidget | Go to the cart overview page. Make sure the cart title and the **Clear all** button are displayed. | +| MiniCartWidget | The minicart with all customer's carts is displayed the header. | +| MultiCartMenuItemWidget | Go to the customer account overview page. The carts list navigation menu item is displayed. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-quick-order-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-quick-order-feature.md new file mode 100644 index 00000000000..960ed9b67b4 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-quick-order-feature.md @@ -0,0 +1,111 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Multiple Carts | {{page.release_tag}} | +| Quick Add To Cart | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Set up behavior + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| QuickOrderQuoteNameExpanderPlugin | Adds a default quick order name and adds it to add item request. | | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new DefaultReorderQuoteNameCartPreReorderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in on the Storefront as a customer. +2. Go to the orders. +3. Select an existing order and click the reorder button. + +Make sure the following applies: +- On the Storefront: + - A new cart has been created + - The cart name follows the format: `Cart from order {Order reference}` + - All available items from the original order have been added to the cart +- In the `spy_quote` database table, the newly created quote record contains the `name` field in the format: `Cart from order {Original order reference}` + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-reorder-feature0.md b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-reorder-feature0.md new file mode 100644 index 00000000000..fd2354e19cd --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-multiple-carts-reorder-feature0.md @@ -0,0 +1,51 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Multiple Carts | {{page.release_tag}} | +| Reorder | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Set up behavior + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ReorderPersistentCartChangeExpanderPlugin | Adds a default reorder name and adds it to add item request. | 1 | Spryker\Client\MultiCart\Plugin | + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + Content > Content Items*, you can see **Create** and **Edit** buttons next to Navigation content items. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Ensure that, in the WYSIWYG editor toolbar on *Edit Block Glossary: {block id}* and *Edit Placeholders: {rst1}* pages, you can see the **Content Item** drop-down menu with the **Navigation** button. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Navigation feature front end. + +### Prerequisites + +To start the feature integration, review, and install the necessary features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Content Items | {{page.release_tag}} | +| CMS | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/navigation:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following modules have been installed in `vendor/spryker-shop`: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ContentNavigationWidget | vendor/spryker-shop/content-navigation-widget | + +{% endinfo_block %} + +### 2) Set up behavior + +Set up the following behaviors. + +#### Set up content navigation twig function + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ContentNavigationTwigPlugin | The twig function displays a content navigation item by the given content key and template. | None | SprykerShop\Yves\ContentNavigationWidget\Plugin\Twig | + +```php + + + {% raw %}{{{% endraw %} spyCmsBlockPlaceholder('title') | raw {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} spyCmsBlockPlaceholder('description') | raw {% raw %}}}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +3. Override `page-layout-main` on the core level by creating `src/Pyz/Yves/ShopUi/Theme/default/templates/page-layout-main/page-layout-main.twig`: + +```html +{% raw %}{%{% endraw %} extends template('page-layout-main', '@SprykerShop:ShopUi') {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} block sidebar {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} embed organism('side-drawer') with { + class: 'is-hidden-lg-xl', + attributes: { + 'container-selector': 'js-page-layout-main', + 'trigger-selector': 'js-page-layout-main__side-drawer-trigger', + }, + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block mobileNavigation {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} cms_slot 'slt-mobile-header' {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} block header {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} embed organism('header') only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block mainNavigation {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} cms_slot 'slt-desktop-header' {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} block mobile {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} include atom('icon') with { + modifiers: ['big'], + data: { + name: 'bars', + }, + } only {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} block footer {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} embed organism('footer') only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block footerNavigation {% raw %}%}{% endraw %} +
    + {% raw %}{%{% endraw %} cms_slot 'slt-footer' {% raw %}%}{% endraw %} +
    + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +{% info_block warningBox "Verification" %} + +Ensure that slots are enabled: + +1. Go to the *Back Office > Content > Slots*. +2. Deactivate the **Header desktop view** slot. +3. Run console `twig:cache:warmer`. +4. On the Storefront, the main navigation should not be displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-navigation-module.md b/_includes/pbc/all/install-features/202602.0/install-the-navigation-module.md new file mode 100644 index 00000000000..eabdcc60283 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-navigation-module.md @@ -0,0 +1,230 @@ + + +## Prerequisites + +To prepare your project to work with Navigation: + +1. Require the Navigation modules in your `composer.json`. +2. Install the new database tables By running `vendor/bin/console propel:diff`. Propel will generate a migration file with the changes. +3. Apply the database changes by running `vendor/bin/console propel:migrate`. +4. Generate ORM models by running `vendor/bin/console propel:model:build`. +5. After running this command you'll find some new classes in your project under `\Orm\Zed\Navigation\Persistence` namespace. + + It's important to make sure that they extend the base classes from the Spryker core, e.g.: + + - `\Orm\Zed\Navigation\Persistence\SpyNavigation` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigation` + - `\Orm\Zed\Navigation\Persistence\SpyNavigationNode` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigationNode` + - `\Orm\Zed\Navigation\Persistence\SpyNavigationNodeLocalizedAttributes` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigationNodeLocalizedAttributes` + - `\Orm\Zed\Navigation\Persistence\SpyNavigationQuery` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigationQuery` + - `\Orm\Zed\Navigation\Persistence\SpyNavigationNodeQuery` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigationNodeQuery` + - `\Orm\Zed\Navigation\Persistence\SpyNavigationNodeLocalizedAttributesQuery` extends `\Spryker\Zed\Navigation\Persistence\Propel\AbstractSpyNavigationNodeLocalizedAttributesQuery` + +6. To get the new transfer objects, run `vendor/bin/console transfer:generate`. +7. Make sure that the new Zed UI assets are also prepared for use by running the `npm run zed` command (or `antelope build zed` for older versions). +8. To make the navigation management UI available in Zed navigation, run the `vendor/bin/console application:build-navigation-cache` command. +9. Activate the navigation menu collector by adding the `NavigationMenuCollectorStoragePlugin` to the storage collector plugin stack. To do that, see the following example: + +```php + new NavigationMenuCollectorStoragePlugin(), + ]; + }; + + // ... + } +} +``` + +### Data setup + +You should now be able to manage navigation menus from Zed UI, and the collectors should also be able to export the navigation menus to the KV storage. This is a good time to implement an installer in your project to install a selection of frequently used navigation menus. + +### Usage in Yves + +The KV storage should by now have some navigation menus we can display in our frontend. + +The `Navigation` module ships with a twig extension that provides the `spyNavigation()` twig function which renders a navigation menu. + +`spyNavigation()` accepts two parameters: + +- `$navigationKey`: Reference of a navigation menu by its key field (for example, "MAIN_NAVIGATION"). +- `$template`: Template path used to render the navigation menu (for example, `"@application/layout/navigation/main.twig"`). + +To enable the navigation twig function, register `\Spryker\Yves\Navigation\Plugin\Provider\NavigationTwigServiceProvider` in your application's bootstrap. + +```php +application->register(new NavigationTwigServiceProvider()); + } +} +``` + +Example of rendering navigation in an Yves twig template: + +```twig +{% raw %}{{{% endraw %} spyNavigation('MAIN_NAVIGATION', '@application/layout/navigation/main.twig') {% raw %}}}{% endraw %} +``` + +### Rendering Navigation Templates + +The templates used to render a navigation menu use the `navigationTree` template variable to traverse the navigation tree. The variable contains an instance of `\Generated\Shared\Transfer\NavigationTreeTransfer` with only one localized attribute per node for the current locale. + +The following code examples show the Demoshop implementation of how to render `MAIN_NAVIGATION` which is a multi-level navigation menu. For styling we used the [Menu](https://foundation.zurb.com/sites/docs/menu.html) and [Dropdown](https://foundation.zurb.com/sites/docs/dropdown.html) components from Foundation framework. + +In `Pyz/Yves/Application/Theme/default/layout/navigation/main.twig` we traverse the root navigation nodes of the navigation tree and for each root node we render their children nodes as well. + +**Code sample:** + +```html +
    +
    +
    + + + {% raw %}{%{% endraw %} for node in navigationTree.nodes {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if node.navigationNode.isActive {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if node.children|length {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} +
    +
    +
    +``` + +The children nodes are rendered recursively by `Pyz/Yves/Application/Theme/default/layout/navigation/_partials/nodes.twig`. + +**Code sample:** + +```html + +``` + +To prevent code duplication we implemented the `Pyz/Yves/Application/Theme/default/layout/navigation/_partials/base-node.twig` template which we use to render a node by embedding it in the templates above. + +This is also the place where we take the visibility controller parameters into account : `valid_from`, `valid_to`, and `is_active`. + +**Code sample:** + +```php +{% raw %}{%{% endraw %} set class = node.navigationNode.navigationNodeLocalizedAttributes[0].cssClass {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} set url = node.navigationNode.navigationNodeLocalizedAttributes[0].url {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} set externalUrl = node.navigationNode.navigationNodeLocalizedAttributes[0].externalUrl {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} set link = node.navigationNode.navigationNodeLocalizedAttributes[0].link {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} set title = node.navigationNode.navigationNodeLocalizedAttributes[0].title {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} set today = "now"|date("Ymd") {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} if node.navigationNode.isActive and + (node.navigationNode.validFrom is empty or node.navigationNode.validFrom|date("Ymd") ‹= today) and + (node.navigationNode.validTo is empty or node.navigationNode.validTo|date("Ymd") >= today) +{% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block nodeContainer {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if url {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block url {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} elseif link {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block link {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} elseif externalUrl {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block externalUrl {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} else {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block other {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-order-amendment-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-order-amendment-feature.md new file mode 100644 index 00000000000..0c3fc26b501 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-order-amendment-feature.md @@ -0,0 +1,2888 @@ +This document describes how to install the Order Amendment feature. + +## Install feature core + +Some plugins are needed only for optional features. The document provides a list of plugins for all possible integration scenarios, but you need to include only the plugins that match your setup. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Reorder | {{page.release_tag}} | [Install the Reorder feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/order-amendment: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|--------------------------------------------------------------| +| SalesOrderAmendment | vendor/spryker/sales-order-amendment | +| SalesOrderAmendmentOms | vendor/spryker/sales-order-amendment-oms | +| SalesOrderAmendmentExtension | vendor/spryker/sales-order-amendment-extension | +| OrderAmendmentsRestApi | vendor/spryker/sales-order-amendments-rest-api | +| PriceProductSalesOrderAmendment | vendor/spryker/price-product-sales-order-amendment | +| PriceProductSalesOrderAmendmentExtension | vendor/spryker/price-product-sales-order-amendment-extension | + +{% endinfo_block %} + +### 2) Set up configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-----------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|-----------------------------| +| A regular expression, see `config/Shared/config_default.php`. | Closes access for non-logged-in users. | | +| MultiCartConfig::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession() | Defines which quote fields can be saved in the quote collection of a customer's session. | Pyz\Client\MultiCart | +| QuoteConfig::getQuoteFieldsAllowedForSaving() | Enables saving order amendment-related quote fields to the database. | Pyz\Zed\Quote | +| SalesOrderAmendmentConfig::getQuoteFieldsAllowedForSaving() | Enables saving quote-related fields to the database. | Pyz\Zed\SalesOrderAmendment | + +**config/Shared/config_default.php** + +```php +> + */ + public function getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(): array + { + return array_merge(parent::getQuoteFieldsAllowedForCustomerQuoteCollectionInSession(), [ + QuoteTransfer::AMENDMENT_ORDER_REFERENCE + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that only configured fields are saved in a customer's session. + +{% endinfo_block %} + +**src/Pyz/Zed/Quote/QuoteConfig.php** + +```php + + */ + public function getQuoteFieldsAllowedForSaving() + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::AMENDMENT_ORDER_REFERENCE, + QuoteTransfer::QUOTE_PROCESS_FLOW, + QuoteTransfer::ORIGINAL_SALES_ORDER_ITEM_UNIT_PRICES, + QuoteTransfer::ORIGINAL_SALES_ORDER_ITEMS, + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you edit an order, the following applies: +- `amendmentOrderReference` and `quoteProcessFlow` are added to the JSON data in the `spy_quote.quote_data` database column of the corresponding quote. +- `originalSalesOrderItems` is added to the JSON data in the `spy_quote.quote_data` database column of the corresponding quote. + +{% endinfo_block %} + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php + + */ + public function getQuoteFieldsAllowedForSaving(): array + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::BUNDLE_ITEMS, + QuoteTransfer::CART_NOTE, + QuoteTransfer::EXPENSES, + QuoteTransfer::VOUCHER_DISCOUNTS, + QuoteTransfer::GIFT_CARDS, + QuoteTransfer::CART_RULE_DISCOUNTS, + QuoteTransfer::PROMOTION_ITEMS, + QuoteTransfer::IS_LOCKED, + QuoteTransfer::QUOTE_REQUEST_VERSION_REFERENCE, + QuoteTransfer::QUOTE_REQUEST_REFERENCE, + QuoteTransfer::MERCHANT_REFERENCE, + QuoteTransfer::IS_ORDER_PLACED_SUCCESSFULLY, + ]); + } +} +``` + +2. Remove the quote fields that are not relevant for your project. + +3. Configure the batch availability check facade method: + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php + + config/Zed/oms/DummySubprocess/DummyOrderAmendment01.xml + +```xml + + + + + + + amendment in progress + + + + + + + grace period pending + deleted item unreserved + unreserve deleted items + + + + deleted item unreserved + grace period started + start grace period + + + + grace period started + order amendment + start-order-amendment + + + + order amendment + cancelled + finish-order-amendment + + + + order amendment + grace period started + cancel-order-amendment + + + + order amendment + grace period finished + skip-order-amendment + + + + + + + + + + + + + + +``` + + + +{% info_block warningBox "Verification" %} + +Verify the order amendment state machine configuration in the following step. + +{% endinfo_block %} + +2. Using the following process as an example, adjust your OMS state machine configuration according to your project's requirements. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyRefund + DummyReturn + DummyInvoice + DummyPicking + CreateGiftCard + WarehouseAllocation + DummyMerchantCommission + DummyOrderAmendment + + + + + cancellable + + + + cancellable + amendable + + + cancellable + + + cancellable + + + exclude from customer + + + + cancellable + + + + + + + + + + + + + + + new + grace period pending + + + + grace period started + grace period finished + skip grace period + + + + grace period finished + warehouse allocated + allocate warehouse + + + + warehouse allocated + payment pending + authorize + + + + warehouse allocated + invalid + authorize + + + + warehouse allocated + cancelled + cancel + + + + payment pending + paid + pay + + + + tax pending + tax invoice submitted + submit tax invoice + + + + payment pending + cancelled + pay + + + + payment pending + cancelled + cancel + + + + tax invoice submitted + product review requested + request product review + + + + product review requested + confirmed + confirm + + + + confirmed + waiting + skip timeout + + + + waiting + picking list generation scheduled + picking list generation schedule + + + + waiting + exported + skip picking + + + + picking finished + exported + finish picking + + + + waiting + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01** and check the following: + +- The `grace period started` state has the `amendable` tag +- The `order amendment` state exists + +{% endinfo_block %} + +## 3) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------|-------|---------| +| spy_sales_order_amendment | table | created | +| spy_sales_order_amendment_quote | table | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------------|-------|---------|--------------------------------------------------------------------------------------------| +| SalesOrderAmendment | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentTransfer.php | +| SalesOrderAmendmentQuote | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteTransfer.php | +| SalesOrderAmendmentCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentCriteriaTransfer.php | +| SalesOrderAmendmentQuoteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCriteriaTransfer.php | +| SalesOrderAmendmentQuoteConditions | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteConditionsTransfer.php | +| SalesOrderAmendmentDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentDeleteCriteriaTransfer.php | +| SalesOrderAmendmentQuoteCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionDeleteCriteriaTransfer.php | +| SalesOrderAmendmentConditions | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentConditionsTransfer.php | +| SalesOrderAmendmentCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentCollectionTransfer.php | +| SalesOrderAmendmentQuoteCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionTransfer.php | +| SalesOrderAmendmentRequest | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentRequestTransfer.php | +| SalesOrderAmendmentQuoteCollectionRequest | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionRequestTransfer.php | +| SalesOrderAmendmentQuoteCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentQuoteCollectionResponseTransfer.php | +| SalesOrderAmendmentResponse | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentResponseTransfer.php | +| SalesOrderAmendmentItemCollection | class | created | src/Generated/Shared/Transfer/SalesOrderAmendmentItemCollectionTransfer.php | +| Quote | class | updated | src/Generated/Shared/Transfer/QuoteTransfer.php | +| QuoteUpdateRequestAttributes | class | updated | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer.php | +| CartReorderRequest | class | updated | src/Generated/Shared/Transfer/CartReorderRequestTransfer.php | +| Order | class | updated | src/Generated/Shared/Transfer/OrderTransfer.php | +| Item | class | updated | src/Generated/Shared/Transfer/ItemTransfer.php | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer.php | +| CartReorderResponse | class | created | src/Generated/Shared/Transfer/CartReorderResponseTransfer.php | +| CartReorder | class | created | src/Generated/Shared/Transfer/CartReorderTransfer.php | +| OrderConditions | class | created | src/Generated/Shared/Transfer/OrderConditionsTransfer.php | +| OrderCriteria | class | created | src/Generated/Shared/Transfer/OrderCriteriaTransfer.php | +| OrderCollection | class | created | src/Generated/Shared/Transfer/OrderCollectionTransfer.php | +| OrderItemFilter | class | created | src/Generated/Shared/Transfer/OrderItemFilterTransfer.php | +| CheckoutResponse | class | updated | src/Generated/Shared/Transfer/CheckoutResponseTransfer.php | +| OmsOrderItemState | class | created | src/Generated/Shared/Transfer/OmsOrderItemStateTransfer.php | +| RestCartsAttributes | class | created | src/Generated/Shared/Transfer/RestCartsAttributesTransfer.php | +| RestCartReorderRequestAttributes | class | created | src/Generated/Shared/Transfer/RestCartReorderRequestAttributesTransfer.php | +| RestOrderAmendmentsAttributes | class | created | src/Generated/Shared/Transfer/RestOrderAmendmentsAttributesTransfer.php | +| PriceProductResolveConditions | class | created | src/Generated/Shared/Transfer/PriceProductResolveConditionsTransfer.php | +| PriceProductFilter | class | updated | src/Generated/Shared/Transfer/PriceProductFilterTransfer.php | +| OriginalSalesOrderItem | class | updated | src/Generated/Shared/Transfer/OriginalSalesOrderItemTransfer.php | +| SellableItemsRequest | class | updated | src/Generated/Shared/Transfer/SellableItemsRequestTransfer.php | +| SellableItemRequest | class | updated | src/Generated/Shared/Transfer/SellableItemRequestTransfer.php | +| ProductAvailabilityCriteria | class | updated | src/Generated/Shared/Transfer/ProductAvailabilityCriteriaTransfer.php | +| SellableItemResponse | class | updated | src/Generated/Shared/Transfer/SellableItemResponseTransfer.php | +| SellableItemsResponse | class | updated | src/Generated/Shared/Transfer/SellableItemsResponseTransfer.php | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your language configuration: + +**src/data/import/glossary.csv** + +```yaml +sales_order_amendment_oms.validation.order_not_amendable,The order cannot be amended.,en_US +sales_order_amendment_oms.validation.order_not_amendable,Die Bestellung kann nicht geändert werden.,de_DE +sales_order_amendment_oms.validation.amended_order_does_not_exist,Order with reference %order_reference% could not be found.,en_US +sales_order_amendment_oms.validation.amended_order_does_not_exist,Bestellnummer %order_reference% konnte nicht gefunden werden.,de_DE +sales_order_amendment_oms.validation.amendment_order_does_not_exist,Order with reference %order_reference% could not be found.,en_US +sales_order_amendment_oms.validation.amendment_order_does_not_exist,Bestellnummer %order_reference% konnte nicht gefunden werden.,de_DE +sales_order_amendment.validation.sales_order_amendment_does_not_exist,Can not update the sales order amendment with ID %uuid%. Please check the ID.,en_US +sales_order_amendment.validation.sales_order_amendment_does_not_exist,Die Änderung der Bestellung mit der ID %uuid% kann nicht aktualisiert werden. Bitte überprüfen Sie die ID.,de_DE +sales_order_amendment.validation.order_amendment_duplicated,An amendment is already in progress for this order. Please complete or cancel it before starting a new one.,en_US +sales_order_amendment.validation.order_amendment_duplicated,"Für diese Bestellung ist bereits eine Änderung in Bearbeitung. Diese Änderung muss abgeschlossen oder storniert sein, damit Sie eine neue Änderung beginnen können.",de_DE +sales_order_amendment.validation.cart_reorder.order_reference_not_match,"Another order is currently being amended. Complete or cancel the previous amendment before making changes to this order.",en_US +sales_order_amendment.validation.cart_reorder.order_reference_not_match,"Eine andere Bestellung wird gerade geändert. Diese Änderung muss abgeschlossen oder storniert sein, bevor Sie Änderungen an dieser Bestellung vornehmen können.",de_DE +sales_order_amendment.validation.cart.cart_cant_be_amended,"Current cart cannot be amended.",en_US +sales_order_amendment.validation.cart.cart_cant_be_amended,"Der aktuelle Warenkorb kann nicht geändert werden.",de_DE +oms.state.order-amendment,Editing in Progress,en_US +oms.state.order-amendment,Bestelländerung in Bearbeitung,de_DE +sales_order_amendment_oms.validation.order_not_being_amended,This order cannot be edited because the time limit for changes has expired.,en_US +sales_order_amendment_oms.validation.order_not_being_amended,"Eine Bearbeitung dieser Bestellung ist nicht möglich, da die Änderungsfrist abgelaufen ist.",de_DE +sales_order_amendment.pre_check.cannot_change_currency,"Currency cannot be changed during order edit.",en_US +sales_order_amendment.pre_check.cannot_change_currency,"Währung kann während der Bearbeitung einer Bestellung nicht geändert werden.",de_DE +sales_order_amendment.pre_check.cannot_change_price_mode,"Price mode cannot be changed during order edit.",en_US +sales_order_amendment.pre_check.cannot_change_price_mode,"Preismodus kann während der Bearbeitung einer Bestellung nicht geändert werden.",de_DE +store.cart_reorder.error.store_mismatch,"This order was placed in a different store. This action cannot be performed.",en_US +store.cart_reorder.error.store_mismatch,"Diese Bestellung wurde in einem anderen Store getätigt. Aktion kann nicht ausgeführt werden.",de_DE +sales_order_amendment.quote_request.validation.error.forbidden,"Quote requests are unavailable during order amendment.",en_US +sales_order_amendment.quote_request.validation.error.forbidden,"Angebotsanfragen sind während der Bestelländerung nicht verfügbar.",de_DE +sales_order_amendment.order_amendment_after_rfq.validation.error.forbidden,"Amendments are not allowed for orders created from a quote.",en_US +sales_order_amendment.order_amendment_after_rfq.validation.error.forbidden,"Für Bestellungen, die aus einem Angebot erstellt wurden, sind keine Änderungen zulässig.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| OrderAmendmentCartReorderValidatorPlugin | Validates if quote amendment order reference matches `CartReorderTransfer.order.orderReference`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| OrderAmendmentQuoteProcessFlowExpanderCartPreReorderPlugin | Expands the quote process flow with the quote process flow name. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| StartOrderAmendmentCartReorderPostCreatePlugin | Triggers the OMS event to start the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\CartReorder | +| IsAmendableOrderCartReorderRequestValidatorPlugin | Validates if all order items are in the order item state that has the `amendable` flag. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\CartReorder | +| AmendmentOrderReferenceCartPreReorderPlugin | Sets `CartReorderTransfer.quote.amendmentOrderReference` taken from `CartReorderRequestTransfer.orderReference`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| AmendmentQuoteNameCartPreReorderPlugin | Updates `CartReorderTransfer.quote.name` with a custom amendment quote name. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| OriginalSalesOrderItemPriceCartPreReorderPlugin | Adds original sales order item unit prices to `CartReorderTransfer.quote.originalSalesOrderItemUnitPrices` with group keys as an array. | | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\CartReorder | +| OrderSalesOrderAmendmentValidatorRulePlugin | Validates if an order with provided original or amended order reference exists. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\SalesOrderAmendment | +| CartNoteSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's cart notes with the corresponding item's cart notes from `OrderTransfer.items`. | | Spryker\Zed\CartNote\Communication\Plugin\SalesOrderAmendment | +| ShipmentSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's shipments with the corresponding item's shipments from `OrderTransfer.items`. | | Spryker\Zed\Shipment\Communication\Plugin\SalesOrderAmendment | +| ConfigurableBundleNoteSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's configurable bundle notes with the corresponding item's configurable bundle notes from `OrderTransfer.items`. | | Spryker\Zed\ConfigurableBundleNote\Communication\Plugin\SalesOrderAmendment | +| SalesProductConfigurationSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's configurations with the corresponding item's configurations from `OrderTransfer.items`. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\SalesOrderAmendment | +| SalesServicePointSalesOrderItemCollectorPlugin | Iterates over `SalesOrderAmendmentItemCollectionTransfer.itemsToSkip` and compares an item's service points with the corresponding item's service points from `OrderTransfer.items`. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\SalesOrderAmendment | +| OrderAmendmentRestCartReorderAttributesMapperPlugin | Maps the `isAmendment` property from `RestCartReorderRequestAttributesTransfer` to `CartReorderRequestTransfer`. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\CartReorderRestApi | +| OrderAmendmentRestCartAttributesMapperPlugin | Maps the `amendmentOrderReference` field from `QuoteTransfer` to `RestCartsAttributesTransfer`. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\CartsRestApi | +| OrderAmendmentCheckoutPreCheckPlugin | Validates if an order is in a state that allows amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| CustomerOrderSavePlugin | Saves customer info to a sales related table. | | Spryker\Zed\Customer\Communication\Plugin\Checkout | +| UpdateOrderByQuoteCheckoutDoSaveOrderPlugin | Updates order billing address with billing address data from quote. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OrderTotalsSaverPlugin | Saves order totals. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| ReleaseUsedCodesCheckoutDoSaveOrderPlugin | Decreases the number of uses of each of located discount codes by 1. | | Spryker\Zed\Discount\Communication\Plugin\Checkout | +| ShipmentTypeCheckoutDoSaveOrderPlugin | Creates or updates a sales shipment type entity. | | Spryker\Zed\SalesShipmentType\Communication\Plugin\Checkout | +| UpdateCartNoteCheckoutDoSaveOrderPlugin | Updates an order's cart note with the cart note provided in `QuoteTransfer.cartNote`. | | Spryker\Zed\CartNote\Communication\Plugin\Checkout | +| ReplaceSalesOrderDiscountsCheckoutDoSaveOrderPlugin | Deletes sales discount and sales discount code entities related to a provided sales order ID. Iterates over `orderItems` and `orderExpenses` and creates sales discount entities for each item. | | Spryker\Zed\Discount\Communication\Plugin\Checkout | +| ReplaceSalesOrderShipmentCheckoutDoSaveOrderPlugin | Recreates new sales shipment expenses for each item level shipment. | | Spryker\Zed\Shipment\Communication\Plugin\Checkout | +| SalesOrderAmendmentItemsCheckoutDoSaveOrderPlugin | Replaces an order item during amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| ProductBundleOrderSaverPlugin | Saves order bundle items. | | Spryker\Zed\ProductBundle\Communication\Plugin\Checkout | +| ReplaceSalesOrderPaymentCheckoutDoSaveOrderPlugin | Saves order payments from `QuoteTransfer`. | | Spryker\Zed\SalesPayment\Communication\Plugin\Checkout | +| GiftCardPaymentCheckoutDoSaveOrderPlugin | Iterates over `QuoteTransfer.payments` and saves gift card related payments into the `spy_payment_gift_card` table. | | Spryker\Zed\GiftCard\Communication\Plugin\Checkout | +| ReplaceSalesOrderThresholdExpensesCheckoutDoSaveOrderPlugin | Iterates over `QuoteTransfer.expenses` and stores expenses of the type defined by `{@link \Spryker\Shared\SalesOrderThreshold\SalesOrderThresholdConfig::THRESHOLD_EXPENSE_TYPE}` in the database. | | Spryker\Zed\SalesOrderThreshold\Communication\Plugin\Checkout | +| FinishOrderAmendmentCheckoutPostSavePlugin | Triggers the OMS event defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getFinishOrderAmendmentEvent()}` to finish the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| DummyPaymentCheckoutPostSavePlugin | If `QuoteTransfer.billingAddress.lastName` is `Invalid`, adds the error into `CheckoutResponseTransfer`. | | Spryker\Zed\DummyPayment\Communication\Plugin\Checkout | +| CloseQuoteRequestCheckoutPostSaveHookPlugin | If quote contains a quote request version reference, marks the quote request as closed. | | Spryker\Zed\QuoteRequest\Communication\Plugin\Checkout | +| SendEmailToGiftCardUser | Sends an email to a Gift Card user. | | Spryker\Zed\GiftCardMailConnector\Communication\Plugin\Checkout | +| PaymentAuthorizationCheckoutPostSavePlugin | Checks whether the payment method selected for the given order requires authorization. | | Spryker\Zed\Payment\Communication\Plugin\Checkout | +| PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin | Send a request to the used PSP App to confirm the preorder payment. | | Spryker\Zed\Payment\Communication\Plugin\Checkout | +| DisallowQuoteCheckoutPreSavePlugin | Disallows quote checkout for the configured amount of seconds. | | Spryker\Zed\QuoteCheckoutConnector\Communication\Plugin\Checkout | +| SalesOrderExpanderPlugin | Transforms the provided cart items according to the configured cart item transformer strategies. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OriginalOrderQuoteExpanderCheckoutPreSavePlugin | Sets `QuoteTransfer.originalOrder` with a found order entity. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| CancelOrderAmendmentQuoteDeleteAfterPlugin | Triggers the OMS event defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getCancelOrderAmendmentEvent()}` to cancel the order amendment process. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Quote | +| SalesOrderAmendmentOrderExpanderPlugin | Expands `OrderTransfer.salesOrderAmendment` with a found sales order amendment. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Sales | +| IsAmendableOrderExpanderPlugin | Checks if all order items are in the order item state that has a flag defined in `{@link \Spryker\Zed\SalesOrderAmendmentOms\SalesOrderAmendmentOmsConfig::getAmendableOmsFlag()}`. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| CreateSalesOrderAmendmentOrderPostSavePlugin | Persists a sales order amendment entity. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Sales | +| OrderAmendmentCartPreCheckPlugin | Validates if the customer order with a provided amendment order reference exists. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Cart | +| ResetAmendmentOrderReferencePreReloadItemsPlugin | Resets `QuoteTransfer.amendmentOrderReference` before reloading cart items. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Cart | +| ResetOriginalSalesOrderItemUnitPricesPreReloadItemsPlugin | Resets `QuoteTransfer.originalSalesOrderItemUnitPrices` before reloading cart items. | | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\Cart | +| ResetAmendmentQuoteProcessFlowQuotePostMergePlugin | If `PersistentQuoteTransfer.idQuote` is not equal to `CurrentQuoteTransfer.idQuote`, and `quoteProcessFlow` is set to `order-amendment`, resets `quoteProcessFlow`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\PersistentCart | +| DefaultQuoteCollectionFilterPlugin | Filters out non-default quotes. | | Spryker\Zed\MultiCart\Communication\Plugin\Quote | +| IsAmendableOrderSearchOrderExpanderPlugin | Expands the `OrderTransfer.isAmendable` property. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| OrderAmendmentDefaultOrderItemInitialStateProviderPlugin | Returns the initial OMS order item state for order items in the order amendment flow. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Sales | +| OrderAmendmentsByOrderResourceRelationshipPlugin | Adds the `order-amendments` resource as relationship if `OrderTransfer` and `OrderTransfer.salesOrderAmendment` are provided as a payload. | | Spryker\Glue\OrderAmendmentsRestApi\Plugin\GlueApplication | +| CountriesCheckoutDataValidatorPlugin | Verifies if countries can be found by `countryIso2Codes` given in `CheckoutDataTransfer.shipments.shippingAddress`. | | Spryker\Zed\Country\Communication\Plugin\CheckoutRestApi | +| ShipmentMethodCheckoutDataValidatorPlugin | Verifies if a shipment method is valid. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | +| ItemsCheckoutDataValidatorPlugin | Validates if `CheckoutDataTransfer` provides shipment data per item level. | | Spryker\Zed\ShipmentsRestApi\Communication\Plugin\CheckoutRestApi | +| CustomerAddressCheckoutDataValidatorPlugin | Checks if customer addresses exist. | | Spryker\Zed\CustomersRestApi\Communication\Plugin\CheckoutRestApi | +| CompanyBusinessUnitAddressCheckoutDataValidatorPlugin | Checks if company addresses exist. | | Spryker\Zed\CompanyBusinessUnitAddressesRestApi\Communication\Plugin\CheckoutRestApi | +| ShipmentTypeCheckoutDataValidatorPlugin | Validates whether a shipment type related to the shipment method is active and belongs to the quote store. | | Spryker\Zed\ShipmentTypesRestApi\Communication\Plugin\CheckoutRestApi | +| ClickAndCollectExampleReplaceCheckoutDataValidatorPlugin | Replaces filtered product offers with suitable product offers from Persistence. | | Spryker\Zed\ClickAndCollectExample\Communication\Plugin\CheckoutRestApi | +| SaveOrderCommentThreadOrderPostSavePlugin | Saves a comments thread after an order is saved. | | Spryker\Zed\CommentSalesConnector\Communication\Plugin\Sales | +| SaveCompanyBusinessUnitUuidOrderPostSavePlugin | Saves company business unit UUID to the order after it's saved. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Sales | +| SaveCompanyUuidOrderPostSavePlugin | Saves company UUID to the order after it's saved. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Sales | +| DiscountSalesOrderItemCollectionPreDeletePlugin | Deletes sales discount and sales discount code entities found by criteria. | | Spryker\Zed\Discount\Communication\Plugin\Sales | +| SalesDiscountSalesExpensePreDeletePlugin | Deletes sales discount entities related to provided expenses. | | Spryker\Zed\Discount\Communication\Plugin\Sales | +| GiftCardOrderItemsPostSavePlugin | Processes gift card order items after they're saved. | | Spryker\Zed\GiftCard\Communication\Plugin\Sales | +| GiftCardSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item gift card entities found by criteria. | | Spryker\Zed\GiftCard\Communication\Plugin\Sales | +| NopaymentSalesOrderItemCollectionPreDeletePlugin | Deletes no-payment paid entities found by criteria. | | Spryker\Zed\Nopayment\Communication\Plugin\Sales | +| DefaultOrderItemInitialStateProviderPlugin | Sets the initial OMS state for order items. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OmsItemHistorySalesOrderItemCollectionPreDeletePlugin | Deletes entities found by criteria. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| UpdateOrderCustomReferenceOrderPostSavePlugin | Updates custom order reference after an order is saved. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Sales | +| ProductOptionOrderItemsPostSavePlugin | Processes product option order items after they're saved. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| ProductOptionSalesOrderItemCollectionPostUpdatePlugin | Processes product options after an order items collection is updated. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| ProductOptionSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item option entities. | | Spryker\Zed\ProductOption\Communication\Plugin\Sales | +| SalesConfigurableBundleSalesOrderItemCollectionPreDeletePlugin | Deletes sales order configured bundle item entities. | | Spryker\Zed\SalesConfigurableBundle\Communication\Plugin\Sales | +| SalesConfiguredBundlesSalesOrderItemCollectionPostUpdatePlugin | Processes configured bundles after an order items collection is updated. | | Spryker\Zed\SalesConfigurableBundle\Communication\Plugin\Sales | +| SalesProductConfigurationSalesOrderItemCollectionPostUpdatePlugin | Processes product configurations after an order items collection is updated. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\Sales | +| SalesProductConfigurationSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item configuration entities found by criteria. | | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\Sales | +| ItemMetadataSalesOrderItemCollectionPostUpdatePlugin | Processes item metadata after an order items collection is updated. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\Sales | +| ItemMetadataSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item metadata entities found by criteria. | | Spryker\Zed\SalesProductConnector\Communication\Plugin\Sales | +| SalesReclamationSalesOrderItemCollectionPreDeletePlugin | Deletes sales reclamation item entities found by criteria. | | Spryker\Zed\SalesReclamation\Communication\Plugin\Sales | +| ServicePointSalesOrderItemCollectionPostUpdatePlugin | Processes service points after an order items collection is updated. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales | +| ServicePointSalesOrderItemCollectionPreDeletePlugin | Deletes sales order item service point entities found by criteria. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales | +| SalesOrderAmendmentCurrentCurrencyIsoCodePreCheckPlugin | Disallows changing the currency when an order is being edited. | | Spryker\Client\SalesOrderAmendment\Plugin\Currency | +| SalesOrderAmendmentCurrentPriceModePreCheckPlugin | Disallows changing the price mode when an order is being edited. | | Spryker\Client\SalesOrderAmendment\Plugin\Price | +| PriceItemExpanderPlugin | Adds product prices to item based on currency, price mode, and price type. Allows to expand items with nullable prices. | For Order amendment flow, should be executed instead of `{@link \Spryker\Zed\PriceCartConnector\Communication\Plugin\CartItemPricePlugin}`. | Spryker\Zed\PriceCartConnector\Communication\Plugin\Cart | +| OriginalSalesOrderItemPriceItemExpanderPlugin | Replaces an item's prices with the original sales order item's prices before adding or removing cart items to persistence. | Should be executed after `{@link \Spryker\Zed\PriceCartConnector\Communication\Plugin\PriceItemExpanderPlugin}`. | Spryker\Zed\PriceProductSalesOrderAmendment\Communication\Plugin\Cart | +| OriginalSalesOrderItemPriceProductPostResolvePlugin | Replaces an item's prices with the original sales order item's prices after resolving prices for the resulting `PriceProductTransfer`. | | Spryker\Client\PriceProductSalesOrderAmendment\Plugin\PriceProduct | +| OrderItemPriceProductResolveConditionsPriceProductFilterExpanderPlugin | Expands `PriceProductFilterTransfer` with `PriceProductResolveConditionsTransfer` from `ProductViewTransfer`. | | Spryker\Client\PriceProductSalesOrderAmendment\Plugin\PriceProductStorage | +| CurrentStoreCartReorderValidatorPlugin | Validates that the current store matches the store of the order and quote. | | Spryker\Zed\Store\Communication\Plugin\CartReorder | +| ProductOfferOriginalSalesOrderItemGroupKeyExpanderPlugin | Expands a provided group key with a product offer reference if `ItemTransfer.productOfferReference` is set. | | Spryker\Service\ProductOffer\Plugin\SalesOrderAmendment | +| ProductOfferOriginalSalesOrderItemPriceGroupKeyExpanderPlugin | Expands a provided price group key with a product offer reference if `ItemTransfer.productOfferReference` is set. | | Spryker\Service\ProductOffer\Plugin\SalesOrderAmendment | +| OrderAmendmentQuantityBatchAvailabilityStrategyPlugin | Calculates available quantity for each processed item. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Availability | +| OrderAmendmentProductApprovalCartPreCheckPlugin | Checks the approval status for products. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Cart | +| OrderAmendmentProductApprovalPreReloadItemsPlugin | Checks and removes unapproved product items from Quote transfer. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Cart | +| OrderAmendmentProductBundleAvailabilityCartPreCheckPlugin | Checks if product bundle items in `CartChangeTransfer` are available and active. Skips `isActive` validation for items with SKUs from `CartChangeTransfer.quote.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| OrderAmendmentProductBundleStatusCartPreCheckPlugin | Checks if product bundle items in `CartChangeTransfer` are active. Skips validation for items with SKUs from `CartChangeTransfer.quote.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| OrderAmendmentProductExistsCartPreCheckPlugin | Checks if the products added to cart exist. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Cart | +| OrderAmendmentRemoveInactiveItemsPreReloadPlugin | Removes inactive items from quote. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Cart | +| OrderAmendmentProductDiscontinuedCartPreCheckPlugin | Checks all item related products from a cart change request are not discontinued. Skips items that are part of the original order. | | Spryker\Zed\ProductDiscontinued\Communication\Plugin\Cart | +| OrderAmendmentFilterInactiveProductOfferPreReloadItemsPlugin | Checks and removes inactive product offers from cart. Skips inactive product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| OrderAmendmentProductOfferCartPreCheckPlugin | Checks if a cart item product offer belongs to a product. Skips product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| OriginalOrderBundleItemCartPreReorderPlugin | Expands `CartReorderTransfer.quote` with original sales order items from a provided `CartReorderTransfer.order.bundleItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\CartReorder | +| OriginalSalesOrderItemCartPreReorderPlugin | Expands `CartReorderTransfer.quote` with original sales order items from a provided `CartReorderTransfer.order.items`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | +| RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin | Filters out items with inactive product options from `CartChangeTransfer`. | | Spryker\Zed\ProductOptionCartConnector\Communication\Plugin\CartReorder | +| OrderAmendmentProductApprovalCheckoutPreConditionPlugin | Returns `false` if at least one quote item transfer has items with unapproved product. Skips items that are part of the original order. | | Spryker\Zed\ProductApproval\Communication\Plugin\Checkout | +| OrderAmendmentProductBundleAvailabilityCheckoutPreConditionPlugin | Checks if the product bundle items in the `QuoteTransfer` are available and active. Skips `isActive` validation for items with SKUs from `QuoteTransfer.originalSalesOrderItems`. | | Spryker\Zed\ProductBundle\Communication\Plugin\Checkout | +| OrderAmendmentProductExistsCheckoutPreConditionPlugin | Validates if concrete products with the `QuoteTransfer.item.sku` SKU exist and are active. Skips items that are part of the original order. | | Spryker\Zed\ProductCartConnector\Communication\Plugin\Checkout | +| OrderAmendmentProductDiscontinuedCheckoutPreConditionPlugin | Checks if there are no discontinued products in checkout. Skips items that are part of the original order. | | Spryker\Zed\ProductDiscontinued\Communication\Plugin\Checkout | +| OrderAmendmentProductOfferCheckoutPreConditionPlugin | Returns `false` if at least one quote item transfer has items with inactive or unapproved `ProductOffer`. Skips product offers that are part of the original order. | | Spryker\Zed\ProductOffer\Communication\Plugin\Checkout | +| SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin | Creates a new sales order amendment quote entity based on a provided `QuoteTransfer`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| UpdateDeletedItemReservationCommandByOrderPlugin | Retrieves the sales order amendment quote collection by order reference. If the collection is not empty, updates the reservations of deleted items in the order. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| OriginalSalesOrderItemGroupKeyCartReorderItemHydratorPlugin | Hydrates `items.originalSalesOrderItemGroupKey` with the original sales order item group key. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | + + + +
    + src/Pyz/Service/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getOriginalSalesOrderItemGroupKeyExpanderPlugins(): array + { + return [ + new ProductOfferOriginalSalesOrderItemGroupKeyExpanderPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Service/PriceProductSalesOrderAmendment/PriceProductSalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getOriginalSalesOrderItemPriceGroupKeyExpanderPlugins(): array + { + return [ + new ProductOfferOriginalSalesOrderItemPriceGroupKeyExpanderPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getSalesOrderAmendmentCreateValidationRulePlugins(): array + { + return [ + new OrderSalesOrderAmendmentValidatorRulePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesOrderAmendmentExtension\Dependency\Plugin\SalesOrderItemCollectorPluginInterface> + */ + protected function getSalesOrderItemCollectorPlugins(): array + { + return [ + new CartNoteSalesOrderItemCollectorPlugin(), + new ShipmentSalesOrderItemCollectorPlugin(), + new ConfigurableBundleNoteSalesOrderItemCollectorPlugin(), + new SalesProductConfigurationSalesOrderItemCollectorPlugin(), + new SalesServicePointSalesOrderItemCollectorPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php + +```php + + */ + protected function getCartReorderRequestValidatorPlugins(): array + { + return [ + new IsAmendableOrderCartReorderRequestValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderValidatorPluginInterface> + */ + protected function getCartReorderValidatorPluginsForOrderAmendment(): array + { + return [ + new CurrentStoreCartReorderValidatorPlugin(), + new OrderAmendmentCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPreReorderPluginInterface> + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new OrderAmendmentQuoteProcessFlowExpanderCartPreReorderPlugin(), + new AmendmentOrderReferenceCartPreReorderPlugin(), + new AmendmentQuoteNameCartPreReorderPlugin(), + new OriginalSalesOrderItemPriceCartPreReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderItemHydratorPluginInterface> + */ + protected function getCartReorderItemHydratorPlugins(): array + { + return [ + new OriginalSalesOrderItemGroupKeyCartReorderItemHydratorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPostReorderPluginInterface> + */ + protected function getCartPostReorderPlugins(): array + { + return [ + new StartOrderAmendmentCartReorderPostCreatePlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Glue/CartReorderRestApi/CartReorderRestApiDependencyProvider.php + + +```php + + */ + protected function getRestCartReorderAttributesMapperPlugins(): array + { + return [ + new OrderAmendmentRestCartReorderAttributesMapperPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php + + +```php + + */ + protected function getRestCartAttributesMapperPlugins(): array + { + return [ + new OrderAmendmentRestCartAttributesMapperPlugin(), + ]; + } +} +``` + + +
    + + +
    + src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + */ + protected function getCheckoutPreConditionsForOrderAmendment(Container $container): array + { + return [ + new OrderAmendmentProductBundleAvailabilityCheckoutPreConditionPlugin(), + new OrderAmendmentProductDiscontinuedCheckoutPreConditionPlugin(), + new OrderAmendmentProductOfferCheckoutPreConditionPlugin(), + new OrderAmendmentProductExistsCheckoutPreConditionPlugin(), + new OrderAmendmentProductApprovalCheckoutPreConditionPlugin(), + new OrderAmendmentCheckoutPreCheckPlugin(), + ]; + } + + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutSaveOrderInterface|\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutDoSaveOrderInterface> + */ + protected function getCheckoutOrderSaversForOrderAmendment(Container $container): array + { + return [ + new CustomerOrderSavePlugin(), + new UpdateOrderByQuoteCheckoutDoSaveOrderPlugin(), + new OrderTotalsSaverPlugin(), + new ReleaseUsedCodesCheckoutDoSaveOrderPlugin(), + new ShipmentTypeCheckoutDoSaveOrderPlugin(), + new UpdateCartNoteCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderDiscountsCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderShipmentCheckoutDoSaveOrderPlugin(), + new SalesOrderAmendmentItemsCheckoutDoSaveOrderPlugin(), + new ProductBundleOrderSaverPlugin(), + new ReplaceSalesOrderPaymentCheckoutDoSaveOrderPlugin(), + new SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin(), + new GiftCardPaymentCheckoutDoSaveOrderPlugin(), + new ReplaceSalesOrderThresholdExpensesCheckoutDoSaveOrderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooks(Container $container): array + { + return [ + new FinishOrderAmendmentCheckoutPostSavePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooksForOrderAmendment(Container $container): array + { + return [ + new DummyPaymentCheckoutPostSavePlugin(), + new CloseQuoteRequestCheckoutPostSaveHookPlugin(), + new SendEmailToGiftCardUser(), + new PaymentAuthorizationCheckoutPostSavePlugin(), + new PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutPreSaveHookInterface|\Spryker\Zed\Checkout\Dependency\Plugin\CheckoutPreSaveInterface|\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPreSavePluginInterface> + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new DisallowQuoteCheckoutPreSavePlugin(), + new SalesOrderExpanderPlugin(), + new OriginalOrderQuoteExpanderCheckoutPreSavePlugin(), + new FilterOriginalOrderBundleItemCheckoutPreSavePlugin(), + ]; + } +} +``` + +
    + + + +
    + src/Pyz/Zed/Quote/QuoteDependencyProvider.php + + +```php + + */ + protected function getQuoteDeleteAfterPlugins(): array + { + return [ + new CancelOrderAmendmentQuoteDeleteAfterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteExtension\Dependency\Plugin\QuoteCollectionFilterPluginInterface> + */ + protected function getQuoteCollectionFilterPlugins(): array + { + return [ + new DefaultQuoteCollectionFilterPlugin(), + ]; + } +} +``` + +
    + + + +
    + src/Pyz/Zed/Sales/SalesDependencyProvider.php + + +```php + + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new SalesOrderAmendmentOrderExpanderPlugin(), + new IsAmendableOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderPostSavePluginInterface> + */ + protected function getOrderPostSavePluginsForOrderAmendment(): array + { + return [ + new SaveOrderCommentThreadOrderPostSavePlugin(), + new UpdateOrderCustomReferenceOrderPostSavePlugin(), + new SaveCompanyBusinessUnitUuidOrderPostSavePlugin(), + new SaveCompanyUuidOrderPostSavePlugin(), + new CreateSalesOrderAmendmentOrderPostSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SearchOrderExpanderPluginInterface> + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new IsAmendableOrderSearchOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new GiftCardOrderItemsPostSavePlugin(), + new ProductOptionOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesExpensePreDeletePluginInterface> + */ + protected function getSalesExpensePreDeletePlugins(): array + { + return [ + new SalesDiscountSalesExpensePreDeletePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPreDeletePluginInterface> + */ + protected function getSalesOrderItemCollectionPreDeletePlugins(): array + { + return [ + new DiscountSalesOrderItemCollectionPreDeletePlugin(), + new ItemMetadataSalesOrderItemCollectionPreDeletePlugin(), + new OmsItemHistorySalesOrderItemCollectionPreDeletePlugin(), + new ProductOptionSalesOrderItemCollectionPreDeletePlugin(), + new ServicePointSalesOrderItemCollectionPreDeletePlugin(), + new SalesConfigurableBundleSalesOrderItemCollectionPreDeletePlugin(), + new SalesProductConfigurationSalesOrderItemCollectionPreDeletePlugin(), + new GiftCardSalesOrderItemCollectionPreDeletePlugin(), + new NopaymentSalesOrderItemCollectionPreDeletePlugin(), + new SalesReclamationSalesOrderItemCollectionPreDeletePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPostUpdatePluginInterface> + */ + protected function getOrderItemCollectionPostUpdatePlugins(): array + { + return [ + new SalesConfiguredBundlesSalesOrderItemCollectionPostUpdatePlugin(), + new SalesProductConfigurationSalesOrderItemCollectionPostUpdatePlugin(), + new ItemMetadataSalesOrderItemCollectionPostUpdatePlugin(), + new ServicePointSalesOrderItemCollectionPostUpdatePlugin(), + new ProductOptionSalesOrderItemCollectionPostUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemInitialStateProviderPluginInterface> + */ + protected function getOrderItemInitialStateProviderPlugins(): array + { + return [ + new DefaultOrderItemInitialStateProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemInitialStateProviderPluginInterface> + */ + protected function getOrderItemInitialStateProviderPluginsForOrderAmendment(): array + { + return [ + new OrderAmendmentDefaultOrderItemInitialStateProviderPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + OrdersRestApiConfig::RESOURCE_ORDERS, + new OrderAmendmentsByOrderResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + + + +
    + + + +
    + src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php + + +```php + + */ + protected function getCheckoutDataValidatorPluginsForOrderAmendment(): array + { + return [ + new CountriesCheckoutDataValidatorPlugin(), + new ShipmentMethodCheckoutDataValidatorPlugin(), + new ItemsCheckoutDataValidatorPlugin(), + new CustomerAddressCheckoutDataValidatorPlugin(), + new CompanyBusinessUnitAddressCheckoutDataValidatorPlugin(), + new ShipmentTypeCheckoutDataValidatorPlugin(), + new ClickAndCollectExampleReplaceCheckoutDataValidatorPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php + +```php + + */ + protected function getBatchAvailabilityStrategyPlugins(): array + { + return [ + /* + * OrderAmendmentQuantityBatchAvailabilityStrategyPlugin needs to be after all other implementations including ProductConcreteBatchAvailabilityStrategyPlugin. + */ + new OrderAmendmentQuantityBatchAvailabilityStrategyPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new UpdateDeletedItemReservationCommandByOrderPlugin(), 'OrderAmendment/UnreserveDeletedItems'); + $commandCollection->add(new DeleteOrderAmendmentQuoteCommandByOrderPlugin(), 'OrderAmendment/StartGracePeriod'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +1. Place an order with different types of products–for example, physical or digital, and check if the order amendment is available. +2. Go to order detail and order list pages and check if the **edit order** button is displayed. +3. Deactivated and discontinue the products in the order. Make sure the order can be amended. + +{% endinfo_block %} + +**src/Pyz/Client/Currency/CurrencyDependencyProvider.php** + +```php + + */ + protected function getCurrentCurrencyIsoCodePreCheckPlugins(): array + { + return [ + new SalesOrderAmendmentCurrentCurrencyIsoCodePreCheckPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Price/PriceDependencyProvider.php** + +```php + + */ + protected function getCurrentPriceModePreCheckPlugins(): array + { + return [ + new SalesOrderAmendmentCurrentPriceModePreCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make a Glue API call with a currency and price mode different from those in the cart when an order is being edited. For example: `htts://glue.mysprykershop.com/catalog-search?q=001¤cy=CHF&priceMode=NET_MODE`. Make sure the currency and price mode remain unchanged. + +{% endinfo_block %} + +
    + src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + */ + protected function getExpanderPluginsForOrderAmendment(Container $container): array + { + return [ + new PriceItemExpanderPlugin(), + new OriginalSalesOrderItemPriceItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> + */ + protected function getCartPreCheckPluginsForOrderAmendment(): array + { + return [ + new OrderAmendmentProductExistsCartPreCheckPlugin(), + new OrderAmendmentProductBundleAvailabilityCartPreCheckPlugin(), + new OrderAmendmentProductBundleStatusCartPreCheckPlugin(), + new OrderAmendmentProductDiscontinuedCartPreCheckPlugin(), + new OrderAmendmentProductOfferCartPreCheckPlugin(), + new OrderAmendmentProductApprovalCartPreCheckPlugin(), + // Plugins from getCartPreCheckPlugins() without CartItemPricePreCheckPlugin + new OrderAmendmentCartPreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + new ResetAmendmentOrderReferencePreReloadItemsPlugin(), + new ResetOriginalSalesOrderItemUnitPricesPreReloadItemsPlugin(), + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPluginsForOrderAmendment(Container $container): array + { + return [ + new OrderAmendmentRemoveInactiveItemsPreReloadPlugin(), + new OrderAmendmentFilterInactiveProductOfferPreReloadItemsPlugin(), + new OrderAmendmentProductApprovalPreReloadItemsPlugin(), + // Plugins from getPreReloadPlugin() without FilterItemsWithoutPricePlugin + ]; + } +} +``` + +
    + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getQuotePostMergePlugins(): array + { + return [ + new ResetAmendmentQuoteProcessFlowQuotePostMergePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PriceProduct/PriceProductDependencyProvider.php** + +```php + + */ + protected function getPriceProductPostResolvePlugins(): array + { + return [ + new OriginalSalesOrderItemPriceProductPostResolvePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** + +```php + + */ + protected function getPriceProductFilterExpanderPlugins(): array + { + return [ + new OrderItemPriceProductResolveConditionsPriceProductFilterExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Place an order with a product. +2. Increase the price of the product from the order. +3. Start the order amendment process for the order you've placed. + Make sure the product still has the original price. +4. Go to the order details page and click the product to go to the product details page. + Make sure that, on the product details page, the product still has the original price. + + + +{% endinfo_block %} + +## Add the quotation process context + +Take the steps in the following sections to add the context for quote requests. + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-quote-request-connector: "^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|----------------------------------------------| +| SalesQuoteRequestConnector | vendor/spryker/sales-quote-request-connector | + +{% endinfo_block %} + +### 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------| +| QuoteRequestVersionReferenceOrderPostSavePlugin | Persists the `QuoteTransfer.quoteRequestVersionReference` transfer property in the `spy_sales_order` table. | | Spryker\Zed\SalesQuoteRequestConnector\Communication\Plugin\Sales | +| OrderAmendmentQuoteRequestQuoteCheckPlugin | Returns false if quote is in amendment process; otherwise, returns true. | | Spryker\Client\SalesOrderAmendment\Plugin\QuoteRequest | +| OrderAmendmentQuoteRequestValidatorPlugin | Prevents create and update of a quote request with quote in order amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\QuoteRequest | +| OrderAmendmentQuoteRequestUserValidatorPlugin | Prevents create and update of a quote request with quote in order amendment process. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\QuoteRequest | +| QuoteRequestVersionCartReorderValidatorPlugin | Returns `CartReorderResponseTransfer.errors` with error messages if `CartReorderTransfer.order.quoteRequestVersionReference` is set. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\CartReorder | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostSavePlugins(): array + { + return [ + new QuoteRequestVersionReferenceOrderPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create a request for quote. +2. As an agent, approve the quote request. +3. Place an order that was converted from request for quote. +Make sure the `quote_request_version_reference` column in the `spy_sales_order` table is populated with the correct value. + +{% endinfo_block %} + +**src/Pyz/Client/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestQuoteCheckPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestQuoteCheckPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestValidatorPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\QuoteRequestExtension\Dependency\Plugin\QuoteRequestUserValidatorPluginInterface> + */ + protected function getQuoteRequestUserValidatorPlugins(): array + { + return [ + new OrderAmendmentQuoteRequestUserValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php** + +```php + + */ + protected function getCartReorderValidatorPluginsForOrderAmendment(): array + { + return [ + new OriginalSalesOrderItemCartPreReorderPlugin(), + new QuoteRequestVersionCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderPreAddToCartPluginInterface> + */ + protected function getCartReorderPreAddToCartPluginsForOrderAmendment(): array + { + return [ + new RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify that reordering is disabled for orders created from a quote request: + +1. Create a request for quote. +2. As an agent, approve the quote request. +3. Place an order that was converted from the request. +4. Try to reorder the order. + Make sure the error message is displayed: `You cannot reorder this order because it is in the amendment process.`. + +{% endinfo_block %} + +## Enable order editing by company users + +Take the steps in the following sections to enable order editing by company users. + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/company-business-unit-sales-connector: "^1.3.0" spryker/company-sales-connector: "^1.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|------------------------------------------------------| +| CompanyBusinessUnitSalesConnector | vendor/spryker/company-business-unit-sales-connector | +| CompanySalesConnector | vendor/spryker/company-sales-connector | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + + +**>src/data/import/glossary.csv** + +```yaml +permission.name.EditCompanyOrdersPermissionPlugin,Edit Company orders,en_US +permission.name.EditCompanyOrdersPermissionPlugin,Edit Company orders,de_DE +permission.name.EditBusinessUnitOrdersPermissionPlugin,Edit Business unit orders,en_US +permission.name.EditBusinessUnitOrdersPermissionPlugin,Edit Business unit orders,de_DE +``` + + + +2. Import data: + +```bash +console data:import glossary +``` + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------| +| EditCompanyOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same company in the Client layer. | | Spryker\Client\CompanySalesConnector\Plugin\Permission | +| EditCompanyOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same company in the Zed layer. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Permission | +| EditBusinessUnitOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same business unit in the Client layer. | | Spryker\Client\CompanyBusinessUnitSalesConnector\Plugin\Permission | +| EditBusinessUnitOrdersPermissionPlugin | Adds a permission for company users to edit orders from the same business unit in the Zed layer. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Permission | +| EditCompanyOrderCartReorderOrderProviderPlugin | Provides an order if `CartReorderRequestTransfer.companyUserTransfer` has the permission to edit company orders. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\CartReorder | +| EditBusinessUnitOrderCartReorderOrderProviderPlugin | Provides an order if `CartReorderRequestTransfer.companyUserTransfer` has the permission to edit business unit orders. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\CartReorder | +| EditCompanyOrderQuoteExpanderCheckoutPreSavePlugin | Expands `QuoteTransfer` with original order if `QuoteTransfer.customer.companyUserTransfer` has the permission to edit company orders. | | Spryker\Zed\CompanySalesConnector\Communication\Plugin\Checkout | +| EditBusinessUnitOrderQuoteExpanderCheckoutPreSavePlugin | Expands `QuoteTransfer` with original order if `QuoteTransfer.customer.companyUserTransfer` has the permission to edit business unit orders. | | Spryker\Zed\CompanyBusinessUnitSalesConnector\Communication\Plugin\Checkout | + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new EditCompanyOrdersPermissionPlugin(), + new EditBusinessUnitOrdersPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new EditCompanyOrdersPermissionPlugin(), + new EditBusinessUnitOrdersPermissionPlugin(), + ]; + } +} +``` + +3. Execute registered installer: + + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +1. Log in as a company admin. +2. Go to `https://www.mysprykershop.com/en/company/company-role`. +3. Click **Edit** next to a role. + Make sure you can assign the **Edit Company orders** and **Edit Business unit orders** permissions. + +{% endinfo_block %} + +**src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php** + +```php + + */ + protected function getCartReorderOrderProviderPlugins(): array + { + return [ + new EditCompanyOrderCartReorderOrderProviderPlugin(), + new EditBusinessUnitOrderCartReorderOrderProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/CartReorderRestApi/CartReorderRestApiDependencyProvider.php** + +```php + + */ + protected function getCartReorderRequestExpanderPlugins(): array + { + return [ + new CompanyUserCompanyCartReorderRequestExpanderPlugin(), + new CompanyUserCompanyBusinessUnitCartReorderRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new EditCompanyOrderQuoteExpanderCheckoutPreSavePlugin(), + new EditBusinessUnitOrderQuoteExpanderCheckoutPreSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Place an order as a company user. +3. Log in as a different company user from the same company and business unit. +4. Go to `https://www.mysprykershop.com/en/company/company-role`. +5. Click **Edit** next to a role for your user. +6. Assign the **Edit Company orders**, **Edit Business unit orders**, **View Company orders** and **View Business Unit orders** permissions to the role. +7. Re-login as the same user. +8. Go to `https://www.mysprykershop.com/en/customer/order`. +9. Click **Company orders**. +10. Click **Edit order** for an order from the same company or business unit. +Make sure the order amendment starts correctly. +11. Change the order. Make sure the order can be placed successfully. + +{% endinfo_block %} + +## Optionally: Enable order amendment in asynchronous mode + +Order amendment can be enabled in asynchronous mode to improve performance by offloading the most resource-intensive operations to the OMS. + +### 1) Install the required modules + +Some of the Async Order Amendment functionality is provided by an example module. You can install it to see how it works in practice and replace it with your own implementation if needed. + +Install the OrderAmendmentExample module using Composer: + +```bash +composer require spryker/order-amendment-example: "^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------|----------------------------------------| +| OrderAmendmentExample | vendor/spryker/order-amendment-example | + +{% endinfo_block %} + +### 2) Set up configuration + +1. Add the following configuration: + +```php + + */ + public function getQuoteFieldsAllowedForSaving(): array + { + return array_merge(parent::getQuoteFieldsAllowedForSaving(), [ + QuoteTransfer::CUSTOMER, + QuoteTransfer::CUSTOMER_REFERENCE, + QuoteTransfer::STORE, + QuoteTransfer::PAYMENT, + QuoteTransfer::PAYMENTS, + QuoteTransfer::BILLING_ADDRESS, + QuoteTransfer::SHIPPING_ADDRESS, + QuoteTransfer::ORDER_CUSTOM_REFERENCE, + QuoteTransfer::SHIPMENT, + QuoteTransfer::ERRORS, + ]); + } +} +``` + +2. Remove the quote fields that are not relevant for your project. + +{% info_block warningBox "Verification" %} + +Make sure `SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin` saves the specified fields to `spy_sales_order_amendment_quote`. + +{% endinfo_block %} + +#### Configure OMS + +1. Create the async Order amendment OMS subprocess file using the example: + +
    + config/Zed/oms/DummySubprocess/DummyOrderAmendmentAsync01.xml + +```xml + + + + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + amendment in progress + + + + + + + order amendment draft pending + order amendment draft + + + + order amendment draft + order amendment draft applied + apply-order-amendment-draft + + + + order amendment draft applied + draft apply succeeded + + + + order amendment draft applied + draft apply failed + + + + draft apply succeeded + grace period pending + notify-order-amendment-applied + + + + draft apply failed + grace period pending + notify-order-amendment-failed + + + + order amendment + order amendment draft pending + start-order-amendment-draft + + + + + + + + + + + + + +``` + +
    + +2. Adjust your OMS state machine configuration according to your project's requirements. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyOrderAmendmentAsync + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01 [preview-version]** and make sure the `order amendment draft pending` state exists. + +{% endinfo_block %} + +### 3) Add translations + +1. Append glossary according to your configuration: + + +
    src/data/import/glossary.csv + +```yaml +sales_order_amendment_oms.mail.order_amendment_applied.subject,Your order has been successfully updated,en_US +sales_order_amendment_oms.mail.order_amendment_applied.subject,Ihre Bestellung wurde erfolgreich aktualisiert,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.salutation,Hello,en_US +sales_order_amendment_oms.mail.order_amendment_applied.salutation,Hallo,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.title,Your order has been successfully updated,en_US +sales_order_amendment_oms.mail.order_amendment_applied.title,Ihre Bestellung wurde erfolgreich aktualisiert,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_1,Thank you for shopping at Spryker Shop!,en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_1,Danke für deine Bestellung beim Spryker Shop!,de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_2,We are writing to let you know that your order has been successfully updated as requested. You will receive a shipping confirmation by e-mail as soon as your updated order has been sent.,en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_2,"Wir möchten Sie darüber informieren, dass Ihre Bestellung wie gewünscht erfolgreich aktualisiert wurde. Sobald Ihre aktualisierte Bestellung versendet wurde, erhalten Sie eine Versandbestätigung per E-Mail.",de_DE +sales_order_amendment_oms.mail.order_amendment_applied.text.line_3,"If you change your mind, you can return the items within 14 days after delivery. We hope you enjoy your purchase!",en_US +sales_order_amendment_oms.mail.order_amendment_applied.text.line_3,"Falls Sie es sich anders überlegen, können Sie die Artikel innerhalb von 14 Tagen nach Lieferung zurücksenden. Wir wünschen Ihnen viel Freude mit Ihrem Einkauf!",de_DE +sales_order_amendment_oms.mail.order_amendment_failed.subject,Order edit could not be saved,en_US +sales_order_amendment_oms.mail.order_amendment_failed.subject,Bestelländerung konnte nicht gespeichert werden,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.salutation,Hello,en_US +sales_order_amendment_oms.mail.order_amendment_failed.salutation,Hallo,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.title,Order edit could not be saved,en_US +sales_order_amendment_oms.mail.order_amendment_failed.title,Bestelländerung konnte nicht gespeichert werden,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_1,Thank you for shopping at Spryker Shop!,en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_1,Danke für deine Bestellung beim Spryker Shop!,de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_2,"We are writing to let you know that we tried to update your order as requested. Unfortunately, the changes could not be saved due to the following error:",en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_2,"Wir möchten Sie darüber informieren, dass wir versucht haben, Ihre Bestellung wie gewünscht zu aktualisieren. Leider konnten die Änderungen aufgrund des folgenden Fehlers nicht gespeichert werden:",de_DE +sales_order_amendment_oms.mail.order_amendment_failed.text.line_3,"Your original order remains unchanged. If you need help or would like to try again, please contact our customer service team. We’re happy to assist you.",en_US +sales_order_amendment_oms.mail.order_amendment_failed.text.line_3,"Ihre ursprüngliche Bestellung bleibt unverändert. Wenn Sie Hilfe benötigen oder es erneut versuchen möchten, wenden Sie sich bitte an unser Kundenservice — wir helfen Ihnen gerne weiter.",de_DE +sales_order_amendment_oms.mail.footer.text.line_1,Viele Grüße,de_DE +sales_order_amendment_oms.mail.footer.text.line_1,Have a great day!,en_US +sales_order_amendment_oms.mail.footer.text.line_2,Dein Spryker Shop,de_DE +sales_order_amendment_oms.mail.footer.text.line_2,Your Spryker Shop,en_US +sales_order_amendment_oms.error.apply_order_amendment_draft_failed,We could not process your order edit.,en_US +sales_order_amendment_oms.error.apply_order_amendment_draft_failed,Ihre Bestelländerung konnte nicht bearbeitet werden.,de_DE +oms.state.order-amendment-draft-pending,Editing in Progress,en_US +oms.state.order-amendment-draft-pending,Bestelländerung in Bearbeitung,de_DE +oms.state.order-amendment-draft-applied,Editing in Progress,en_US +oms.state.order-amendment-draft-applied,Bestelländerung in Bearbeitung,de_DE +``` + +
    + + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| QuoteToSaveOrderMapperCheckoutDoSaveOrderPlugin | Maps an original order from `QuoteTransfer.originalOrder` to `SaveOrderTransfer`. | | Spryker\Zed\SalesOrderAmendment\Communication\Plugin\Checkout | +| StartOrderAmendmentDraftCheckoutPostSavePlugin | Triggers the OMS event to start the order amendment draft. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Checkout | +| NotifyOrderAmendmentAppliedMailTypeBuilderPlugin | Builds `MailTransfer` with data for the `notify order amendment applied` email. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Mail | +| NotifyOrderAmendmentFailedMailTypeBuilderPlugin | Builds `MailTransfer` with data for the `notify order amendment failed` email. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Mail | +| ApplyOrderAmendmentDraftCommandByOrderPlugin | Places an order with a found sales order amendment quote and quote process flow set to `order-amendment`. | | Spryker\Zed\OrderAmendmentExample\Communication\Plugin\Oms | +| NotifyOrderAmendmentAppliedCommandPlugin | When a sales order amendment quote is found, sends an email notification about successfully applying order amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| NotifyOrderAmendmentFailedCommandPlugin | If a sales order amendment quote is found, sends an email notification about failing order amendment. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| IsOrderAmendmentDraftSuccessfullyAppliedConditionPlugin | Returns `true` if the sales order amendment quote is not found; otherwise returns `false`. | | Spryker\Zed\SalesOrderAmendmentOms\Communication\Plugin\Oms | +| ShipmentGroupsSalesOrderAmendmentQuoteExpanderPlugin | Expands each `SalesOrderAmendmentQuoteTransfer` in `SalesOrderAmendmentQuoteCollectionTransfer.salesOrderAmendmentQuotes` with shipment groups data. | | Spryker\Zed\Shipment\Communication\Plugin\SalesOrderAmendment | + +
    + src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + */ + protected function getCheckoutOrderSaversForOrderAmendmentAsync(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new QuoteToSaveOrderMapperCheckoutDoSaveOrderPlugin(), #Order Amendment Feature + new SalesOrderAmendmentQuoteCheckoutDoSaveOrderPlugin(), #Order Amendment Feature + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooksForOrderAmendmentAsync(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new StartOrderAmendmentDraftCheckoutPostSavePlugin(), #Order Amendment Feature + ]; + } +} +``` + +
    + +
    + src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new NotifyOrderAmendmentAppliedMailTypeBuilderPlugin(), + new NotifyOrderAmendmentFailedMailTypeBuilderPlugin(), + ]; + } +} +``` + +
    + +
    + src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new ApplyOrderAmendmentDraftCommandByOrderPlugin(), 'OrderAmendmentAsync/ApplyOrderAmendmentDraft'); + $commandCollection->add(new NotifyOrderAmendmentAppliedCommandPlugin(), 'OrderAmendmentAsync/NotifyOrderAmendmentApplied'); + $commandCollection->add(new NotifyOrderAmendmentFailedCommandPlugin(), 'OrderAmendmentAsync/NotifyOrderAmendmentFailed'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendConditionPlugins(Container $container): Container // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + $container->extend(self::CONDITION_PLUGINS, function (ConditionCollectionInterface $conditionCollection) { + $conditionCollection + ->add(new IsOrderAmendmentDraftSuccessfullyAppliedConditionPlugin(), 'DummyOrderAmendmentAsync/IsSuccessfullyApplied'); + + return $conditionCollection; + }); +} +``` + +
    + +
    + src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentDependencyProvider.php + +```php + + */ + protected function getSalesOrderAmendmentQuoteExpanderPlugins(): array + { + return [ + new ShipmentGroupsSalesOrderAmendmentQuoteExpanderPlugin(), + ]; + } +} +``` + +
    + + +### Enable asynchronous order amendment + +You can set up asynchronous order amendment in two ways: + +1. Conditionally: The standard order amendment flow starts first, then switches to the asynchronous flow based on specific conditions. +2. Unconditionally: The asynchronous flow runs from the start. + +Follow the instructions in the following sections according to how you want to set it up. + +#### Option 1: Enable async order amendment conditionally + +The Example module lets you enable the asynchronous order amendment flow based on the selected payment method. To configure this behavior, follow the steps: + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| PaymentToAsyncOrderAmendmentFlowCheckoutPreSavePlugin | Sets `QuoteTransfer.quoteProcessFlow` to a new `QuoteProcessFlowTransfer` with the `order-amendment-async` name. | | Spryker\Zed\OrderAmendmentExample\Communication\Plugin\Checkout | + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreSaveHooksForOrderAmendment(Container $container): array + { + return [ + new PaymentToAsyncOrderAmendmentFlowCheckoutPreSavePlugin(), + ]; + } +} +``` + + +2. Specify the payment methods to enable the asynchronous order amendment checkout process flow for: + +**src/Pyz/Zed/OrderAmendmentExample/OrderAmendmentExampleConfig.php** + +```php + + */ + protected const ASYNC_ORDER_AMENDMENT_PAYMENT_METHOD_NAMES = [ + 'dummyPaymentInvoice', + ]; +} +``` + +#### Option 2: Enable async order amendment unconditionally + +1. Specify the order amendment quote process flow: + +**src/Pyz/Zed/SalesOrderAmendment/SalesOrderAmendmentConfig.php** + +```php +setName(SalesOrderAmendmentExtensionContextsInterface::CONTEXT_ORDER_AMENDMENT_ASYNC); + } +} +``` + +2. Enable plugins for the asynchronous order amendment checkout process flow: + +Make sure all the needed plugins registered for the `order-amendment` checkout process flow are also registered for the `order-amendment-async` checkout process flow. + +Replace dependency provider methods postfixed with `ForOrderAmendment` with `ForOrderAmendmentAsync` methods in the following modules: +- `Cart` +- `CartReorder` +- `Checkout` +- `CheckoutRestApi` +- `Sales` + + +{% info_block warningBox "Verification" %} + +1. Place an order. +2. Initiate and finish order amendment. Make sure the following applies: +- The order doesn't show the changes you've submitted. +- The quote has been saved to the `spy_sales_order_amendment_quote` table. +- The order items are in the `order amendment draft pending` state. +3. Execute `console oms:check-condition` command. +- Make sure the order items are in the `order amendment draft applied` state. +- Make sure the changes made in the order have been applied to the order. +- Make sure an email notification about order amendment has been sent. + +{% endinfo_block %} + +#### Optional: Project level customizations + +- Display errors: Display errors appearing during the `ApplyOrderAmendmentDraftCommandByOrderPlugin` execution. If any errors occur, `ApplyOrderAmendmentDraftCommandByOrderPlugin` saves them to `spy_sales_order_amendment_quote` table to the `quote_data` with the other Quote data. You can obtain them from the Quote and display in the frontend. +- Customize email templates: Customize email templates for the order amendment applied and failed notifications by redefining Twig templates: + - `notify-order-amendment-applied.html.twig` + - `notify-order-amendment-applied.text.twig` + - `notify-order-amendment-failed.html.twig` + - `notify-order-amendment-failed.text.twig` +- Customize the OMS process: you can customize you OMS processes to add more states and transitions, for example, to add a state and transition to implement the retry logic for the order amendment draft applying in case of errors. + +## Install feature frontend + +Take the following steps to install the feature frontend. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/order-amendment: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|--------------------------------------------------| +| SalesOrderAmendmentWidget | vendor/spryker-shop/sales-order-amendment-widget | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------| +| SalesOrderAmendmentWidgetConfig::ORDER_AMENDMENT_CART_REORDER_STRATEGY | Defines the cart reorder strategy for order amendment, for example `replace`, `new`. The corresponding strategy plugin handling the specified value must be registered in the project. | Pyz\Yves\SalesOrderAmendmentWidget | +| SalesOrderAmendmentWidgetConfig::IS_ORDER_AMENDMENT_CONFIRMATION_ENABLED | Defines if the order amendment confirmation popup window is displayed. | Pyz\Yves\SalesOrderAmendmentWidget | + +**src/Pyz/Yves/SalesOrderAmendmentWidget/SalesOrderAmendmentWidgetConfig.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SalesOrderAmendmentWidgetRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure order amendment is available on order details and orders pages. + +{% endinfo_block %} + +### 5) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------|---------------------------------------------------------------------|---------------|---------------------------------------------------| +| OrderAmendmentWidget | Enables customers to edit existing orders. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| CancelOrderAmendmentWidget | Enables customers to cancel order amendment requests. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| OrderAmendmentItemLinkWidget | Handles URL generation for deactivated products in order amendment. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| UpdateOrderCheckoutSubmitButtonTextWidget | Displays the text for the submit order update button. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | +| UpdateOrderCheckoutSuccessTitleWidget | Displays the title for the successful order update page. | | SprykerShop\Yves\SalesOrderAmendmentWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderAmendmentWidget::class, + CancelOrderAmendmentWidget::class, + OrderAmendmentItemLinkWidget::class, + UpdateOrderCheckoutSubmitButtonTextWidget::class, + UpdateOrderCheckoutSuccessTitleWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Widgets in Twig" %} + +If your project uses Twig templates, make sure the corresponding widgets are used in the redefined templates. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|-------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OrderAmendmentWidget | Make sure the edit order button is displayed on the orders and order details pages. | +| CancelOrderAmendmentWidget | Make sure the cancel order amendment button is displayed on the Cart page. | +| OrderAmendmentItemLinkWidget | Make sure that, on the Cart page, product URLs are not displayed for deactivated products. | +| UpdateOrderCheckoutSubmitButtonTextWidget | Make sure that, on the Checkout summary page, the submit button text is displayed as configured for the `sales_order_amendment_widget.summary_step.update.order` glossary key. | +| UpdateOrderCheckoutSuccessTitleWidget | Make sure that, on the Successful order update page, the title is displayed as configured for the `sales_order_amendment_widget.success_step.update.success.title` glossary key. | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Make sure that after clicking the edit order button the specified reorder strategy for order amendment is applied (the current cart items are replaced by the amended order items in case the `replace` strategy is applied, new cart is created in case the `new` strategy is applied). + +- Ensure that clicking the "Edit Order" button applies the specified reorder strategy for order amendment: + - `replace` strategy: current cart items are replaced with amended order items + - `new` strategy: a new cart is created +- If the `IS_ORDER_AMENDMENT_CONFIRMATION_ENABLED` configuration is set to `true`, make sure that the order amendment confirmation popup window is displayed. + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature.md new file mode 100644 index 00000000000..9cd8629261b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature.md @@ -0,0 +1,1606 @@ + + + +This document describes how to install the [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. + +{% info_block warningBox "Included features" %} + +This guide expects the basic feature to be in place. It only adds the following functionalities: + +- Order cancellation behavior +- Show `display names` for order item states +- Invoice generation +- Custom order reference +- Sales Orders Backend API +- Order Matrix + +{% endinfo_block %} + + +## Install feature core + +Follow the steps below to install the Order Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Persistent Cart | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|---------------------------------------------------| +| OrderCustomReference | vendor/spryker/order-custom-reference | +| OrderCustomReferenceGui | vendor/spryker/order-custom-reference-gui | +| SalesOrdersBackendApi | vendor/spryker/sales-orders-backend-api | +| SalesOrdersBackendApiExtension | vendor/spryker/sales-orders-backend-api-extension | +| OrderMatrix | vendor/spryker/order-matrix | +| OrderMatrixGui | vendor/spryker/order-matrix-gui | + + {% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------|--------|---------| +| spy_sales_order_invoice | table | created | +| spy_sales_order.order_custom_reference | column | created | +| spy_sales_order.uuid | column | created | +| spy_sales_order_item.uuid | column | created | +| spy_sales_order_address.uuid | column | created | +| spy_sales_order_address_history.uuid | column | created | +| spy_sales_order_totals.uuid | column | created | +| spy_sales_order_note.uuid | column | created | +| spy_sales_order_comment.uuid | column | created | +| spy_sales_expense.uuid | column | created | +| spy_sales_order_item_metadata.uuid | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------------|----------|---------|------------------------------------------------------------------------------| +| OrderInvoice | class | created | src/Generated/Shared/Transfer/OrderInvoiceTransfer | +| OrderInvoiceSendRequest | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendRequestTransfer | +| OrderInvoiceSendResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendResponseTransfer | +| OrderInvoiceCriteria | class | created | src/Generated/Shared/Transfer/OrderInvoiceCriteriaTransfer | +| OrderInvoiceCollection | class | created | src/Generated/Shared/Transfer/OrderInvoiceCollectionTransfer | +| OrderInvoiceResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceResponseTransfer | +| OrderCustomReferenceResponse | class | created | src/Generated/Shared/Transfer/OrderCustomReferenceResponseTransfer | +| OrderResourceCollection | class | created | src/Generated/Shared/Transfer/OrderResourceCollectionTransfer | +| OrdersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrdersBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| Customer | class | created | src/Generated/Shared/Transfer/CustomerTransfer | +| Mail.recipientBccs | property | created | src/Generated/Shared/Transfer/MailTransfer | +| Quote.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteUpdateRequestAttributes.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| Order.orderCustomReference | property | created | src/Generated/Shared/Transfer/OrderTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Quote.quoteProcessFlow | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Quote.originalOrder | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Item.originalSalesOrderItemGroupKey | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| QuoteProcessFlow | class | created | src/Generated/Shared/Transfer/QuoteProcessFlowTransfer | +| SalesExpenseCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionDeleteCriteriaTransfer | +| SalesExpenseCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionResponseTransfer | +| SalesOrderItemCollectionRequest | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionRequestTransfer | +| SalesOrderItemCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionDeleteCriteriaTransfer | +| SalesOrderItemCollectionResponse | class | created | src/Generated/Shared/Transfer/SalesOrderItemCollectionResponseTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| SalesExpenseCollection | class | created | src/Generated/Shared/Transfer/SalesExpenseCollectionTransfer | +| OmsOrderItemState | class | created | src/Generated/Shared/Transfer/OmsOrderItemStateTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| OrderMatrix | class | created | src/Generated/Shared/Transfer/OrderMatrixTransfer | +| OrderMatrixCriteria | class | created | src/Generated/Shared/Transfer/OrderMatrixCriteriaTransfer | +| OrderMatrixRequest | class | created | src/Generated/Shared/Transfer/OrderMatrixRequestTransfer | +| IndexedOrderMatrixResponse | class | created | src/Generated/Shared/Transfer/IndexedOrderMatrixResponseTransfer | +| OrderMatrixConditions | class | created | src/Generated/Shared/Transfer/OrderMatrixConditionsTransfer | +| OrderMatrixCollection | class | created | src/Generated/Shared/Transfer/OrderMatrixCollectionTransfer | + + +{% endinfo_block %} + +### 3) Set up configuration + +Set up the following configuration. + +#### Configure OMS + +{% info_block infoBox %} + +- The `cancellable` flag allows proceeding to the `order cancel` process. +- The `display` attribute allows attaching the `display name` attribute to specific order item states. +- The `DummyInvoice` subprocess allows triggering `invoice-generate` events. + +{% endinfo_block %} + +1. Create the OMS subprocess file: + +
    + config/Zed/oms/DummySubprocess/DummyInvoice01.xml + +```xml + + + + + + + + + + + confirmed + invoice generated + invoice-generate + + + + invoice generated + waiting + invoice-generated + + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +Verify the invoice state machine configuration in the following step. + +{% endinfo_block %} + +2. Using the following process as an example, adjust your OMS state machine configuration according to your project's requirements. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + + DummyInvoice + + + + + cancellable + + + cancellable + + + exclude from customer + + + exclude from customer + + + cancellable + + + cancellable + + + + + + + + + + + new + payment pending + authorize + + + + new + invalid + authorize + + + + new + cancelled + cancel + + + + payment pending + paid + pay + + + + payment pending + cancelled + pay + + + + payment pending + cancelled + cancel + + + + paid + confirmed + confirm + + + + confirmed + waiting + skip timeout + + + + confirmed + cancelled + cancel + + + + waiting + exported + check giftcard purchase + + + + waiting + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01 [preview-version]** and check the following: +- The `new`, `payment pending`, `paid`, and `confirmed` states have the `cancellable` tag inside. +- The `invoice generated` state exists. + +{% endinfo_block %} + +#### Configure the fallback display name prefix + +Adjust configuration according to your project's requirements: + +**src/Pyz/Zed/Oms/OmsConfig.php** + +```php +src/Pyz/Zed/SalesInvoice/Presentation/Invoice/Invoice.twig + +```twig +{%- raw -%} +{# @var order \Generated\Shared\Transfer\OrderTransfer #} +{# @var invoice \Generated\Shared\Transfer\OrderInvoiceTransfer #} + + + + + + + + + + + + + + + + + + + + + +
    + Logo + + {{ 'order_invoice.invoice_template.company.name' | trans }} +
    {{ 'order_invoice.invoice_template.company.group' | trans }}
    +
    {{ 'order_invoice.invoice_template.company.address' | trans | raw }}
    +
    +
    + {{ 'order_invoice.invoice_template.merchant.name' | trans }} +
    {{ 'order_invoice.invoice_template.merchant.address' | trans }}
    +
    +
    + {{ order.billingAddress.firstName }} {{ order.billingAddress.lastName }}
    + {{ order.billingAddress.address1 }} {{ order.billingAddress.address2 }} {{ order.billingAddress.address3 }}
    + {{ order.billingAddress.zipcode }} {{ order.billingAddress.city }}
    + {{ order.billingAddress.region }} +
    +
    +
    {{ invoice.issueDate | date('d. M Y') }}
    +
    + + + + + + + + +
    +
    + {{ 'order_invoice.invoice_template.reference' | trans }} {{ invoice.reference }} +
    +
    +
    {{ 'order_invoice.invoice_template.introduction' | trans }}
    +
    + + + + + + + + + + + + + {% set linenumber = 0 %} + {% set renderedBundles = [] %} + {% set taxes = {} %} + {% set itemSumByTaxes = {} %} + + {% for item in order.items %} + {# @var item \Generated\Shared\Transfer\ItemTransfer #} + + {% set taxRate = item.taxRate %} + {% set rateSum = taxes[item.taxRate] | default(0) + item.sumTaxAmountFullAggregation %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + item.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + {% if item.productBundle is not defined or item.productBundle is null %} + {% set linenumber = linenumber + 1 %} + + + + + + + + + {% endif %} + + {% if item.productBundle is defined and item.productBundle is not null %} + {% if item.relatedBundleItemIdentifier not in renderedBundles %} + {# @var productBundle \Generated\Shared\Transfer\ItemTransfer #} + + {% set linenumber = linenumber + 1 %} + {% set productBundle = item.productBundle %} + + + + + + + + + + {% for bundleditem in order.items %} + {% if item.relatedBundleItemIdentifier == bundleditem.relatedBundleItemIdentifier %} + + + + + + + + {% endif %} + {% endfor %} + + {% set renderedBundles = renderedBundles | merge([item.relatedBundleItemIdentifier]) %} + {% endif %} + {% endif %} + {% endfor %} + + {% for expense in order.expenses %} + {% set linenumber = linenumber + 1 %} + {% set taxRate = expense.taxRate %} + {% set rateSum = taxes[expense.taxRate] | default(0) + expense.sumTaxAmount %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + expense.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + + + + + + + + {% endfor %} + + + + + + + + + + + + + {% for rate, tax in taxes %} + + + + + + + {% endfor %} + + + + + + + + + + + + +
    {{ 'order_invoice.invoice_template.table.number' | trans }}{{ 'order_invoice.invoice_template.table.quantity' | trans }}{{ 'order_invoice.invoice_template.table.name' | trans }}{{ 'order_invoice.invoice_template.table.tax' | trans }}{{ 'order_invoice.invoice_template.table.price' | trans | raw }}
    {{ linenumber }}{{ item.quantity }}{{ item.name }}{{ item.taxRate | number_format }}%{{ item.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ linenumber }}{{ productBundle.quantity }}{{ productBundle.name }}{{ productBundle.taxRate | number_format }}%{{ productBundle.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ bundleditem.quantity }}{{ bundleditem.name }}{{ bundleditem.taxRate | number_format }}%{{ bundleditem.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ linenumber }}{{ expense.name }}{{ expense.taxRate | number_format }}%{{ expense.sumPrice | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.subtotal' | trans }}{{ order.totals.subtotal | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.discount' | trans }}{{ order.totals.discountTotal | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.tax.included' | trans({ '%tax_rate%': rate | number_format }) }}{{ (itemSumByTaxes[rate] - tax) | money(true, order.currencyIsoCode) }}{{ 'order_invoice.invoice_template.table.tax.name' | trans }}{{ tax | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.total.net' | trans }}{{ (order.totals.grandTotal - order.totals.taxTotal.amount) | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.grandtotal' | trans }}{{ order.totals.grandTotal | money(true, order.currencyIsoCode) }}
    + + +{% endraw %} +``` + + + +{% info_block warningBox "Verification" %} + +You will be able to verify the invoice template configuration in a later step. + +{% endinfo_block %} + +3. Adjust the scheduler configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +/* Order matrix sync */ +$jobs[] = [ + 'name' => 'sync-order-matrix', + 'command' => '$PHP_BIN vendor/bin/console order-matrix:sync', + 'schedule' => '*/1 * * * *', + 'enable' => true, + 'global' => true, +]; +``` + +4. Apply the scheduler configuration update: + +```bash +vendor/bin/console scheduler:suspend +vendor/bin/console scheduler:setup +vendor/bin/console scheduler:resume +``` + + +### 4) Add translations + + +{% info_block errorBox %} + +An `oms.state.` prefixed translation key is a combination of the `OmsConfig::getFallbackDisplayNamePrefix()` and a normalized state machine name. If you have different OMS state machine states or a fallback display name prefix, adjust the corresponding translations. + +{% endinfo_block %} + + +{% info_block infoBox "Normalized state machine names" %} + +By default, in state machine names, the following applies: + +- Spaces are replaced with dashes. +- All the words are decapitalized. + +{% endinfo_block %} + +1. Append the glossary according to your configuration: + +
    + src/data/import/glossary.csv + +```csv +sales.error.customer_order_not_found,Customer Order not found.,en_US +sales.error.customer_order_not_found,Die Bestellung wurde nicht gefunden.,de_DE +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Order cannot be canceled because of wrong item state.,en_US +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Die Bestellung kann wegen dem falschen Artikelstatus nicht storniert werden.,de_DE +oms.state.new,New,en_US +oms.state.new,Neu,de_DE +oms.state.payment-pending,Payment pending,en_US +oms.state.payment-pending,Ausstehende Zahlung,de_DE +oms.state.invalid,Ivalid,en_US +oms.state.invalid,Ungültig,de_DE +oms.state.canceled,Canceled,en_US +oms.state.canceled,Abgebrochen,de_DE +oms.state.paid,Paid,en_US +oms.state.paid,Bezahlt,de_DE +oms.state.confirmed,Confirmed,en_US +oms.state.confirmed,Bestätigt,de_DE +oms.state.waiting,Waiting,en_US +oms.state.waiting,Warten,de_DE +oms.state.exported,Exported,en_US +oms.state.exported,Exportiert,de_DE +oms.state.shipped,Shipped,en_US +oms.state.shipped,Versandt,de_DE +oms.state.delivered,Delivered,en_US +oms.state.delivered,Geliefert,de_DE +quote_request.status.closed,Closed,en_US +quote_request.status.closed,Geschlossen,de_DE +mail.order_invoice.subject,"Invoice: %invoiceReference%",en_US +mail.order_invoice.subject,"Rechnung: %invoiceReference%",de_DE +order_custom_reference.reference_saved,Custom order reference was successfully saved.,en_US +order_custom_reference.reference_saved,Ihre Bestellreferenz wurde erfolgreich gespeichert.,de_DE +order_custom_reference.reference_not_saved,Custom order reference has not been changed.,en_US +order_custom_reference.reference_not_saved,Ihre Bestellreferenz wurde nicht geändert.,de_DE +order_custom_reference.validation.error.message_invalid_length,Custom order reference length is invalid.,en_US +order_custom_reference.validation.error.message_invalid_length,Die Länge der Bestellreferenz ist ungültig.,de_DE +order_custom_reference.title,Custom Order Reference,en_US +order_custom_reference.title,Ihre Bestellreferenz,de_DE +order_custom_reference.form.placeholder,Add custom order reference,en_US +order_custom_reference.form.placeholder,Ihre Bestellreferenz hinzufügen,de_DE +order_custom_reference.save,Save,en_US +order_custom_reference.save,Speichern,de_DE +``` + +
    + + 2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the following behaviors. + +#### Set up order item display name + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------|---------------|---------------------------------------------------------------| +| CurrencyIsoCodeOrderItemExpanderPlugin | Expands order items with currency codes (ISO). | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| StateHistoryOrderItemExpanderPlugin | Expands order items with history states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| ItemStateOrderItemExpanderPlugin | Expands order items with item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OrderAggregatedItemStateSearchOrderExpanderPlugin | Expands orders with aggregated item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| PaymentGiftCardSalesPaymentPreDeletePlugin | Removes found payment gift card entities. | | Spryker\Zed\GiftCard\Communication\Plugin\SalesPayment | +| GiftCardBalanceLogSalesPaymentPreDeletePlugin | Removes gift card balance log entities. | | Spryker\Zed\GiftCardBalance\Communication\Plugin\SalesPayment | + + +
    src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new CurrencyIsoCodeOrderItemExpanderPlugin(), + new StateHistoryOrderItemExpanderPlugin(), + new ItemStateOrderItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SearchOrderExpanderPluginInterface> + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new OrderAggregatedItemStateSearchOrderExpanderPlugin() + ]; + } +} +``` + +
    + +
    src/Pyz/Zed/SalesPayment/SalesPaymentDependencyProvider.php + +```php + + */ + protected function getSalesPaymentPreDeletePlugins(): array + { + return [ + new PaymentGiftCardSalesPaymentPreDeletePlugin(), + new GiftCardBalanceLogSalesPaymentPreDeletePlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +- Make sure that every order item from the `SalesFacade::getOrderItems()` result contains the following: + - Currency ISO code + - State history code + - Item state data +- Make sure that every order from the `SalesFacade::getCustomerOrders()` result contains aggregated item state data. + +{% endinfo_block %} + +### Set up order cancellation behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------| +| IsCancellableOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| IsCancellableSearchOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Oms\Communication\Plugin\Sales | + + +
    src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new IsCancellableSearchOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new IsCancellableOrderExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that, on the following pages, each order contains the `isCancellable` flag: + +- Storefront pages: + - **Order History** + - **Overview** +- The Back Office: the **Overview of Orders** page. + +{% endinfo_block %} + +### Set up the order invoice generation behavior + +Set up the following order invoice generation behaviors. + +#### Set up order invoice mail type + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|---------------------------------------------------------|---------------|----------------------------------------------------| +| OrderInvoiceMailTypePlugin | Prepares an invoice email for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Mail | + + +
    src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ->add(new OrderInvoiceMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +
    + + +#### Set up an order invoice OMS command + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|----------------------------------------------------------------------------|---------------|---------------------------------------------------| +| GenerateOrderInvoiceCommandPlugin | A command in the OMS state machine that generates an invoice for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Oms | + + +
    src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(static::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new GenerateOrderInvoiceCommandPlugin(), 'Invoice/Generate'); + return $commandCollection; + }); + + return $container; + } +} +``` + +
    + +#### Set up an order invoice OMS command + +1. Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|---------------------------------------------------------------------|---------------|------------------------------------------------| +| OrderInvoiceSendConsole | A console command that sends not-yet-sent order invoices via email. | | Spryker\Zed\SalesInvoice\Communication\Console | + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new OrderInvoiceSendConsole(), + ]; + } +} +``` + +2. Adjust the scheduler configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +/* Order invoice */ +$jobs[] = [ + 'name' => 'order-invoice-send', + 'command' => '$PHP_BIN vendor/bin/console order:invoice:send', + 'schedule' => '*/5 * * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +3. Apply the scheduler configuration update: + +```bash +vendor/bin/console scheduler:suspend +vendor/bin/console scheduler:setup +vendor/bin/console scheduler:resume +``` + +{% info_block warningBox "Verification" %} + +- Move at least one item in an order to the `invoice generated` state. + Make sure that, according to your `DummyInvoice01.xml` and `SalesInvoiceConfig::getOrderInvoiceTemplatePath()` configuration, the correct order invoice template has been assigned to the order: `spy_sales_order_invoice`. + +- Place an order with an invoice. Make sure that you receive an invoice within the time configured in the scheduler. + +{% endinfo_block %} + +### Set up a custom order reference workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| OrderCustomReferenceOrderPostSavePlugin | After an order is saved, persists `orderCustomReference` in the `spy_sales_order` schema. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Sales | +| OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin | Returns the `QuoteTransfer` fields related to a custom order reference. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Quote | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostSavePlugins() + { + return [ + new OrderCustomReferenceOrderPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteFieldsAllowedForSavingProviderPlugins(): array + { + return [ + new OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Sales**>**Orders**. +2. Click **View** next to an order. +Make sure that, on the order details page, the **Custom Order Reference** section with the **Edit Reference** button is displayed. + +{% endinfo_block %} + +### Set up order-saving plugins + +Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|--------------------------------------------------|---------------|----------------------------------------------------| +| OrderSaverPlugin | Saves an order. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OrderTotalsSaverPlugin | Saves order totals. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| SalesOrderShipmentSaverPlugin | Saves an order shipment. Adds shipment expenses. | | Spryker\Zed\Shipment\Communication\Plugin\Checkout | +| OrderItemsSaverPlugin | Saves order items. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | + + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutOrderSavers(Container $container) + { + return [ + new OrderSaverPlugin(), + new OrderTotalsSaverPlugin(), + new SalesOrderShipmentSavePlugin(), + new OrderItemsSaverPlugin(), + ]; + } +} +``` + +### Set up warehouse picking relationship plugins + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------| +| SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin | Adds `sales-orders` resources as a relationship to `picking-list-items` resources. | | Spryker\Glue\SalesOrdersBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, on the following Storefront pages, even if the `display` property isn't set in the process definition, the item states are displayed correctly: + +- **Customer overview** +- **Order history** +- **Order details** +- **Returns** +- **Return details** + +2. Make sure the `sales-orders` resource is returned as a relationship to the `picking-list-items` resource. + +Request example: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-orders` + +
    + Response body example + +```json +{ + "data": { + "id": "14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b", + "type": "picking-lists", + "attributes": { + "status": "picking-finished", + "createdAt": "2023-03-23 15:47:07.000000", + "updatedAt": "2023-03-30 12:47:45.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b?include=picking-list-items,sales-orders" + } + }, + "included": [ + { + "id": "DE--1", + "type": "sales-orders", + "attributes": { + "cartNote": null, + "orderReference": "DE--1" + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/sales-orders/DE--1?include=picking-list-items,sales-orders" + } + }, + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 1, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "31e21001-e544-5533-9754-51331c8c9ac5", + "sku": "141_29380410", + "quantity": 1, + "name": "Asus Zenbook US303UB", + "amountSalesUnit": null + } + }, + "relationships": { + "sales-orders": { + "data": [ + { + "id": "DE--1", + "type": "sales-orders" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/65bb3aec-0a45-5ec6-9b12-bbca6551d87f?include=picking-list-items,sales-orders" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +Follow the steps below to install the Order Matrix functionality. + +#### Set up Order Matrix behavior + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------|----------------------------------------------------------------------|---------------|------------------------------------------------| +| OrderMatrixConsole | A console command writes whole order matrix statistics to a storage. | | Spryker\Zed\OrderMatrix\Communication\Console | + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new OrderMatrixConsole(), + ]; + } +} +``` + +#### Configure navigation + +1. Adjust the order matrix page in `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + /sales + Sales + fa-shopping-cart + + + + Order Matrix + sales + order-matrix-gui + matrix + index + 1 + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure you can go to **Sales > Order Matrix**. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Order Management feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------| - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|---------------------------------------------------| +| OrderCustomReferenceWidget | vendor/spryker-shop/order-custom-reference-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +```csv +order_cancel_widget.cancel_order,Cancel Order,en_US +order_cancel_widget.cancel_order,Bestellung stornieren,de_DE +order_cancel_widget.order.cancelled,Order was canceled successfully.,en_US +order_cancel_widget.order.cancelled,Die Bestellung wurde erfolgreich storniert.,de_DE +``` + +2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider on the Storefront: + +| PROVIDER | NAMESPACE | +|--------------------------------------|--------------------------------------------------| +| OrderCancelWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCancelWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCancelWidgetRouteProviderPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Make sure the `yves.mysprykershop.com/order/cancel` route is available for POST requests. + +{% endinfo_block %} + +### 4) Set up behavior + +Set up the following behaviors. + +#### Set up order cancellation + +Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|----------------------------------------------|---------------|-------------------------------------------| +| OrderCancelButtonWidget | Displays the **Cancel** button on the Storefront. | | SprykerShop\Yves\OrderCancelWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCancelButtonWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- On the **Order Details** page on the Storefront, the **Cancel** button is displayed. +- In the **item state** table column on the **Customer Overview** and **Order History** pages on the Storefront, aggregated order item states are displayed. +- On the **Returns** page on the Storefront, aggregated return item states are displayed. +- On the **Order Details** and **Return Details** pages on the Storefront, item states are displayed. + +{% endinfo_block %} + +### 5) Enable a route provider plugin + +Register the route provider in the Yves application: + +| PROVIDER | NAMESPACE | +|----------------------------------------------------|-----------------------------------------------------------| +| OrderCustomReferenceWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | +| OrderCustomReferenceWidgetAsyncRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCustomReferenceWidgetRouteProviderPlugin(), + new OrderCustomReferenceWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +### 5) Set up widgets + +1. Register the following plugin to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|----------------------------|-------------------------------------------------------------|---------------|----------------------------------------------------| +| OrderCustomReferenceWidget | Edits and shows a custom order reference on the Storefront. | | SprykerShop\Yves\OrderCustomReferenceWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCustomReferenceWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Log in as a customer on the Storefront and check that, on the order view page, the **Custom order reference** form is displayed. + +{% endinfo_block %} + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Install the Comments + Order Management feature | | [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | +| Install the Order Management Glue API | | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Install the Company Account + Order Management feature | | [Install the Company Account + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Customer Account Management + Order Management feature | | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | +| Install the Packaging Units feature | | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Product Options + Order Management feature | | [Install the Product Options + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | +| Install the Promotions & Discounts + Order Management feature | | [Install the Promotions & Discounts + Order Management feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature0.md b/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature0.md new file mode 100644 index 00000000000..5bca9a3802a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-order-management-feature0.md @@ -0,0 +1,1451 @@ + + + +This document describes how to install the [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. + +{% info_block warningBox "Included features" %} + +The following feature integration guide expects the basic feature to be in place. It only adds the following functionalities: + +- Order cancellation behavior +- Show `display names` for order item states +- Invoice generation +- Custom order reference +- Sales Orders Backend API + +{% endinfo_block %} + + +## Install feature core + +Follow the steps below to install the Order Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Mailing and Notifications | {{page.release_tag}} | [Install the Mailing and Notifications feature](/docs/pbc/all/emails/latest/install-the-mailing-and-notifications-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Persistent Cart | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|---------------------------------------------------| +| OrderCustomReference | vendor/spryker/order-custom-reference | +| OrderCustomReferenceGui | vendor/spryker/order-custom-reference-gui | +| SalesOrdersBackendApi | vendor/spryker/sales-orders-backend-api | +| SalesOrdersBackendApiExtension | vendor/spryker/sales-orders-backend-api-extension | + + {% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------|--------|---------| +| spy_sales_order_invoice | table | created | +| spy_sales_order.order_custom_reference | column | created | +| spy_sales_order.uuid | column | created | +| spy_sales_order_item.uuid | column | created | +| spy_sales_order_address.uuid | column | created | +| spy_sales_order_address_history.uuid | column | created | +| spy_sales_order_totals.uuid | column | created | +| spy_sales_order_note.uuid | column | created | +| spy_sales_order_comment.uuid | column | created | +| spy_sales_expense.uuid | column | created | +| spy_sales_order_item_metadata.uuid | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------------------------------|----------|---------|----------------------------------------------------------------------| +| OrderInvoice | class | created | src/Generated/Shared/Transfer/OrderInvoiceTransfer | +| OrderInvoiceSendRequest | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendRequestTransfer | +| OrderInvoiceSendResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceSendResponseTransfer | +| OrderInvoiceCriteria | class | created | src/Generated/Shared/Transfer/OrderInvoiceCriteriaTransfer | +| OrderInvoiceCollection | class | created | src/Generated/Shared/Transfer/OrderInvoiceCollectionTransfer | +| OrderInvoiceResponse | class | created | src/Generated/Shared/Transfer/OrderInvoiceResponseTransfer | +| OrderCustomReferenceResponse | class | created | src/Generated/Shared/Transfer/OrderCustomReferenceResponseTransfer | +| OrderResourceCollection | class | created | src/Generated/Shared/Transfer/OrderResourceCollectionTransfer | +| OrdersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrdersBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| Mail.recipientBccs | property | created | src/Generated/Shared/Transfer/MailTransfer | +| Quote.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteUpdateRequestAttributes.orderCustomReference | property | created | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| Order.orderCustomReference | property | created | src/Generated/Shared/Transfer/OrderTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +Set up the following configuration. + +#### Configure OMS + +{% info_block infoBox %} + +- The `cancellable` flag allows proceeding to the `order cancel` process. +- The `display` attribute allows attaching the `display name` attribute to specific order item states. +- The `DummyInvoice` subprocess allows triggering `invoice-generate` events. + +{% endinfo_block %} + +1. Create the OMS subprocess file: + +
    + config/Zed/oms/DummySubprocess/DummyInvoice01.xml + +```xml + + + + + + + + + + + confirmed + invoice generated + invoice-generate + + + + invoice generated + waiting + invoice-generated + + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +Verify the invoice state machine configuration in the following step. + +{% endinfo_block %} + +2. Using the following process as an example, adjust your OMS state machine configuration according to your project's requirements. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + + DummyInvoice + + + + + cancellable + + + cancellable + + + exclude from customer + + + exclude from customer + + + cancellable + + + cancellable + + + + + + + + + + + new + payment pending + authorize + + + + new + invalid + authorize + + + + new + cancelled + cancel + + + + payment pending + paid + pay + + + + payment pending + cancelled + pay + + + + payment pending + cancelled + cancel + + + + paid + confirmed + confirm + + + + confirmed + waiting + skip timeout + + + + confirmed + cancelled + cancel + + + + waiting + exported + check giftcard purchase + + + + waiting + gift card purchased + check giftcard purchase + + + + gift card shipped + delivered + complete gift card creation + + + + exported + shipped + ship + + + + shipped + delivered + stock-update + + + + delivered + closed + close + + + + + + + + + + + + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. + +2. Select **DummyPayment01 [preview-version]** and check the following: + +- The `new`, `payment pending`, `paid`, and `confirmed` states keep the `cancellable` tag inside. +- The `invoice generated` state has been added. + +{% endinfo_block %} + +#### Configure the fallback display name prefix + +Adjust configuration according to your project's requirements: + +**src/Pyz/Zed/Oms/OmsConfig.php** + +```php +src/Pyz/Zed/SalesInvoice/Presentation/Invoice/Invoice.twig + +```twig +{%- raw -%} +{# @var order \Generated\Shared\Transfer\OrderTransfer #} +{# @var invoice \Generated\Shared\Transfer\OrderInvoiceTransfer #} + + + + + + + + + + + + + + + + + + + + + +
    + Logo + + {{ 'order_invoice.invoice_template.company.name' | trans }} +
    {{ 'order_invoice.invoice_template.company.group' | trans }}
    +
    {{ 'order_invoice.invoice_template.company.address' | trans | raw }}
    +
    +
    + {{ 'order_invoice.invoice_template.merchant.name' | trans }} +
    {{ 'order_invoice.invoice_template.merchant.address' | trans }}
    +
    +
    + {{ order.billingAddress.firstName }} {{ order.billingAddress.lastName }}
    + {{ order.billingAddress.address1 }} {{ order.billingAddress.address2 }} {{ order.billingAddress.address3 }}
    + {{ order.billingAddress.zipcode }} {{ order.billingAddress.city }}
    + {{ order.billingAddress.region }} +
    +
    +
    {{ invoice.issueDate | date('d. M Y') }}
    +
    + + + + + + + + +
    +
    + {{ 'order_invoice.invoice_template.reference' | trans }} {{ invoice.reference }} +
    +
    +
    {{ 'order_invoice.invoice_template.introduction' | trans }}
    +
    + + + + + + + + + + + + + {% set linenumber = 0 %} + {% set renderedBundles = [] %} + {% set taxes = {} %} + {% set itemSumByTaxes = {} %} + + {% for item in order.items %} + {# @var item \Generated\Shared\Transfer\ItemTransfer #} + + {% set taxRate = item.taxRate %} + {% set rateSum = taxes[item.taxRate] | default(0) + item.sumTaxAmountFullAggregation %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + item.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + {% if item.productBundle is not defined or item.productBundle is null %} + {% set linenumber = linenumber + 1 %} + + + + + + + + + {% endif %} + + {% if item.productBundle is defined and item.productBundle is not null %} + {% if item.relatedBundleItemIdentifier not in renderedBundles %} + {# @var productBundle \Generated\Shared\Transfer\ItemTransfer #} + + {% set linenumber = linenumber + 1 %} + {% set productBundle = item.productBundle %} + + + + + + + + + + {% for bundleditem in order.items %} + {% if item.relatedBundleItemIdentifier == bundleditem.relatedBundleItemIdentifier %} + + + + + + + + {% endif %} + {% endfor %} + + {% set renderedBundles = renderedBundles | merge([item.relatedBundleItemIdentifier]) %} + {% endif %} + {% endif %} + {% endfor %} + + {% for expense in order.expenses %} + {% set linenumber = linenumber + 1 %} + {% set taxRate = expense.taxRate %} + {% set rateSum = taxes[expense.taxRate] | default(0) + expense.sumTaxAmount %} + {% set taxes = taxes | merge({ (taxRate): rateSum }) %} + {% set rateItemSum = itemSumByTaxes[taxRate] | default(0) + expense.sumPriceToPayAggregation %} + {% set itemSumByTaxes = itemSumByTaxes | merge({ (taxRate): rateItemSum }) %} + + + + + + + + + {% endfor %} + + + + + + + + + + + + + {% for rate, tax in taxes %} + + + + + + + {% endfor %} + + + + + + + + + + + + +
    {{ 'order_invoice.invoice_template.table.number' | trans }}{{ 'order_invoice.invoice_template.table.quantity' | trans }}{{ 'order_invoice.invoice_template.table.name' | trans }}{{ 'order_invoice.invoice_template.table.tax' | trans }}{{ 'order_invoice.invoice_template.table.price' | trans | raw }}
    {{ linenumber }}{{ item.quantity }}{{ item.name }}{{ item.taxRate | number_format }}%{{ item.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ linenumber }}{{ productBundle.quantity }}{{ productBundle.name }}{{ productBundle.taxRate | number_format }}%{{ productBundle.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ bundleditem.quantity }}{{ bundleditem.name }}{{ bundleditem.taxRate | number_format }}%{{ bundleditem.sumPriceToPayAggregation | money(true, order.currencyIsoCode) }}
    {{ linenumber }}{{ expense.name }}{{ expense.taxRate | number_format }}%{{ expense.sumPrice | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.subtotal' | trans }}{{ order.totals.subtotal | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.discount' | trans }}{{ order.totals.discountTotal | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.tax.included' | trans({ '%tax_rate%': rate | number_format }) }}{{ (itemSumByTaxes[rate] - tax) | money(true, order.currencyIsoCode) }}{{ 'order_invoice.invoice_template.table.tax.name' | trans }}{{ tax | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.total.net' | trans }}{{ (order.totals.grandTotal - order.totals.taxTotal.amount) | money(true, order.currencyIsoCode) }}
    {{ 'order_invoice.invoice_template.table.grandtotal' | trans }}{{ order.totals.grandTotal | money(true, order.currencyIsoCode) }}
    + + +{% endraw %} +``` + + + +{% info_block warningBox "Verification" %} + +You will be able to verify the invoice template configuration in a later step. + +{% endinfo_block %} + + +### 4) Add translations + + +{% info_block errorBox %} + +An `oms.state.` prefixed translation key is a combination of the `OmsConfig::getFallbackDisplayNamePrefix()` and a normalized state machine name. If you have different OMS state machine states or a fallback display name prefix, adjust the corresponding translations. + +{% endinfo_block %} + + +{% info_block infoBox "Normalized state machine names" %} + +By default, in state machine names, the following applies: + +- Spaces are replaced with dashes. +- All the words are decapitalized. + +{% endinfo_block %} + +1. Append the glossary according to your configuration: +
    src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +**src/data/import/glossary.csv** + +```csv +sales.error.customer_order_not_found,Customer Order not found.,en_US +sales.error.customer_order_not_found,Die Bestellung wurde nicht gefunden.,de_DE +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Order cannot be canceled because of wrong item state.,en_US +sales.error.order_cannot_be_canceled_due_to_wrong_item_state,Die Bestellung kann wegen dem falschen Artikelstatus nicht storniert werden.,de_DE +oms.state.new,New,en_US +oms.state.new,Neu,de_DE +oms.state.payment-pending,Payment pending,en_US +oms.state.payment-pending,Ausstehende Zahlung,de_DE +oms.state.invalid,Ivalid,en_US +oms.state.invalid,Ungültig,de_DE +oms.state.canceled,Canceled,en_US +oms.state.canceled,Abgebrochen,de_DE +oms.state.paid,Paid,en_US +oms.state.paid,Bezahlt,de_DE +oms.state.confirmed,Confirmed,en_US +oms.state.confirmed,Bestätigt,de_DE +oms.state.waiting,Waiting,en_US +oms.state.waiting,Warten,de_DE +oms.state.exported,Exported,en_US +oms.state.exported,Exportiert,de_DE +oms.state.shipped,Shipped,en_US +oms.state.shipped,Versandt,de_DE +oms.state.delivered,Delivered,en_US +oms.state.delivered,Geliefert,de_DE +quote_request.status.closed,Closed,en_US +quote_request.status.closed,Geschlossen,de_DE +mail.order_invoice.subject,"Invoice: %invoiceReference%",en_US +mail.order_invoice.subject,"Rechnung: %invoiceReference%",de_DE +order_custom_reference.reference_saved,Custom order reference was successfully saved.,en_US +order_custom_reference.reference_saved,Ihre Bestellreferenz wurde erfolgreich gespeichert.,de_DE +order_custom_reference.reference_not_saved,Custom order reference has not been changed.,en_US +order_custom_reference.reference_not_saved,Ihre Bestellreferenz wurde nicht geändert.,de_DE +order_custom_reference.validation.error.message_invalid_length,Custom order reference length is invalid.,en_US +order_custom_reference.validation.error.message_invalid_length,Die Länge der Bestellreferenz ist ungültig.,de_DE +order_custom_reference.title,Custom Order Reference,en_US +order_custom_reference.title,Ihre Bestellreferenz,de_DE +order_custom_reference.form.placeholder,Add custom order reference,en_US +order_custom_reference.form.placeholder,Ihre Bestellreferenz hinzufügen,de_DE +order_custom_reference.save,Save,en_US +order_custom_reference.save,Speichern,de_DE +``` + +
    + + 2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Set up the following behaviors. + +#### Set up order item display name + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------|---------------|----------------------------------------------| +| CurrencyIsoCodeOrderItemExpanderPlugin | Expands order items with currency codes (ISO). | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| StateHistoryOrderItemExpanderPlugin | Expands order items with history states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| ItemStateOrderItemExpanderPlugin | Expands order items with item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | +| OrderAggregatedItemStateSearchOrderExpanderPlugin | Expands orders with aggregated item states. | | Spryker\Zed\Oms\Communication\Plugin\Sales | + + +
    src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new CurrencyIsoCodeOrderItemExpanderPlugin(), + new StateHistoryOrderItemExpanderPlugin(), + new ItemStateOrderItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SearchOrderExpanderPluginInterface> + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new OrderAggregatedItemStateSearchOrderExpanderPlugin() + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +- Make sure that every order item from the `SalesFacade::getOrderItems()` result contains the following: + - Currency ISO code + - State history code + - Item state data +- Make sure that every order from the `SalesFacade::getCustomerOrders()` result contains aggregated item state data. + +{% endinfo_block %} + +### Set up order cancellation behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------| +| IsCancellableOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Sales\Communication\Plugin\Sales | +| IsCancellableSearchOrderExpanderPlugin | Checks if each order item has the cancellable flag. | | Spryker\Zed\Oms\Communication\Plugin\Sales | + + +
    src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getSearchOrderExpanderPlugins(): array + { + return [ + new IsCancellableSearchOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new IsCancellableOrderExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that, on the following pages, each order contains the `isCancellable` flag: + +- Storefront pages: + - **Order History** + - **Overview** +- The Back Office: the **Overview of Orders** page. + +{% endinfo_block %} + +### Set up the order invoice generation behavior + +Set up the following order invoice generation behaviors. + +#### Set up order invoice mail type + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|---------------------------------------------------------|---------------|----------------------------------------------------| +| OrderInvoiceMailTypePlugin | Prepares an invoice email for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Mail | + + +
    src/Pyz/Zed/Mail/MailDependencyProvider.php + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ->add(new OrderInvoiceMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +
    + + +#### Set up an order invoice OMS command + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|----------------------------------------------------------------------------|---------------|---------------------------------------------------| +| GenerateOrderInvoiceCommandPlugin | A command in the OMS state machine that generates an invoice for an order. | | Spryker\Zed\SalesInvoice\Communication\Plugin\Oms | + + +
    src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(static::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new GenerateOrderInvoiceCommandPlugin(), 'Invoice/Generate'); + return $commandCollection; + }); + + return $container; + } +} +``` + +
    + +#### Set up an order invoice OMS command + +1. Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|---------------------------------------------------------------------|---------------|------------------------------------------------| +| OrderInvoiceSendConsole | A console command that sends not-yet-sent order invoices via email. | | Spryker\Zed\SalesInvoice\Communication\Console | + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new OrderInvoiceSendConsole(), + ]; + } +} +``` + +2. Adjust the scheduler configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +/* Order invoice */ +$jobs[] = [ + 'name' => 'order-invoice-send', + 'command' => '$PHP_BIN vendor/bin/console order:invoice:send', + 'schedule' => '*/5 * * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +3. Apply the scheduler configuration update: + +```bash +vendor/bin/console scheduler:suspend +vendor/bin/console scheduler:setup +vendor/bin/console scheduler:resume +``` + +{% info_block warningBox "Verification" %} + +- Move at least one item in an order to the `invoice generated` state. + Make sure that, according to your `DummyInvoice01.xml` and `SalesInvoiceConfig::getOrderInvoiceTemplatePath()` configuration, the correct order invoice template has been assigned to the order: `spy_sales_order_invoice`. + +- Place an order with an invoice. Make sure that you receive an invoice within the time configured in the scheduler. + +{% endinfo_block %} + +### Set up a custom order reference workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| OrderCustomReferenceOrderPostSavePlugin | After an order is saved, persists `orderCustomReference` in the `spy_sales_order` schema. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Sales | +| OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin | Returns the `QuoteTransfer` fields related to a custom order reference. | | Spryker\Zed\OrderCustomReference\Communication\Plugin\Quote | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostSavePlugins() + { + return [ + new OrderCustomReferenceOrderPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteFieldsAllowedForSavingProviderPlugins(): array + { + return [ + new OrderCustomReferenceQuoteFieldsAllowedForSavingProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Sales**>**Orders**. +2. Click **View** next to an order. +Make sure that, on the order details page, the *Custom Order Reference* section with the **Edit Reference** button is displayed. + +{% endinfo_block %} + +### Set up order-saving plugins + +Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|--------------------------------------------------|---------------|----------------------------------------------------| +| OrderSaverPlugin | Saves an order. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| OrderTotalsSaverPlugin | Saves order totals. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | +| SalesOrderShipmentSaverPlugin | Saves an order shipment. Adds shipment expenses. | | Spryker\Zed\Shipment\Communication\Plugin\Checkout | +| OrderItemsSaverPlugin | Saves order items. | | Spryker\Zed\Sales\Communication\Plugin\Checkout | + + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutOrderSavers(Container $container) + { + return [ + new OrderSaverPlugin(), + new OrderTotalsSaverPlugin(), + new SalesOrderShipmentSavePlugin(), + new OrderItemsSaverPlugin(), + ]; + } +} +``` + +### Set up warehouse picking relationship plugins + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------| +| SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin | Adds `sales-orders` resources as a relationship to `picking-list-items` resources. | | Spryker\Glue\SalesOrdersBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new SalesOrdersByPickingListItemsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, on the following Storefront pages, even if the `display` property isn't set in the process definition, the item states are displayed correctly: + +- **Customer overview** +- **Order history** +- **Order details** +- **Returns** +- **Return details** + +2. Make sure the `sales-orders` resource is returned as a relationship to the `picking-list-items` resource. + +`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-orders` +
    + Response body example +```json +{ + "data": { + "id": "14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b", + "type": "picking-lists", + "attributes": { + "status": "picking-finished", + "createdAt": "2023-03-23 15:47:07.000000", + "updatedAt": "2023-03-30 12:47:45.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b?include=picking-list-items,sales-orders" + } + }, + "included": [ + { + "id": "DE--1", + "type": "sales-orders", + "attributes": { + "cartNote": null, + "orderReference": "DE--1" + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/sales-orders/DE--1?include=picking-list-items,sales-orders" + } + }, + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 1, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "31e21001-e544-5533-9754-51331c8c9ac5", + "sku": "141_29380410", + "quantity": 1, + "name": "Asus Zenbook US303UB", + "amountSalesUnit": null + } + }, + "relationships": { + "sales-orders": { + "data": [ + { + "id": "DE--1", + "type": "sales-orders" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/65bb3aec-0a45-5ec6-9b12-bbca6551d87f?include=picking-list-items,sales-orders" + } + } + ] +} +``` +
    + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Order Management feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------| - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} |[Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html)| +| Checkout | {{page.release_tag}} |[Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/order-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|---------------------------------------------------| +| OrderCustomReferenceWidget | vendor/spryker-shop/order-custom-reference-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +```csv +order_cancel_widget.cancel_order,Cancel Order,en_US +order_cancel_widget.cancel_order,Bestellung stornieren,de_DE +order_cancel_widget.order.cancelled,Order was canceled successfully.,en_US +order_cancel_widget.order.cancelled,Die Bestellung wurde erfolgreich storniert.,de_DE +``` + +2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider on the Storefront: + +| PROVIDER | NAMESPACE | +|--------------------------------------|--------------------------------------------------| +| OrderCancelWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCancelWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCancelWidgetRouteProviderPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Make sur the `yves.mysprykershop.com/order/cancel` route is available for POST requests. + +{% endinfo_block %} + +### 4) Set up behavior + +Set up the following behaviors. + +#### Set up an order cancellation behavior + +Set up the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|----------------------------------------------|---------------|-------------------------------------------| +| OrderCancelButtonWidget | Displays the **Cancel** button on the Storefront. | | SprykerShop\Yves\OrderCancelWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCancelButtonWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- The `OrderCancelButtonWidget` widget has been registered. +- On the **Order Details** page on the Storefront, the **Cancel** button is displayed. +- In the **item state** table column on the **Customer Overview** and **Order History** pages on the Storefront, aggregated order item states are displayed. +- On the **Returns** page on the Storefront, aggregated return item states are displayed. +- On the **Order Details** and **Return Details** pages on the Storefront, item states are displayed. + +{% endinfo_block %} + +### 5) Enable a route provider plugin + +Register the route provider in the Yves application: + +| PROVIDER | NAMESPACE | +|----------------------------------------------------|-----------------------------------------------------------| +| OrderCustomReferenceWidgetRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | +| OrderCustomReferenceWidgetAsyncRouteProviderPlugin | SprykerShop\Yves\OrderCustomReferenceWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new OrderCustomReferenceWidgetRouteProviderPlugin(), + new OrderCustomReferenceWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +### 5) Set up widgets + +1. Register the following plugin to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|----------------------------|-------------------------------------------------------------|---------------|----------------------------------------------------| +| OrderCustomReferenceWidget | Edits and shows a custom order reference on the Storefront. | | SprykerShop\Yves\OrderCustomReferenceWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + OrderCustomReferenceWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Log in as a customer on the Storefront and check that the **Custom order reference** form is displayed on the order view page. + +{% endinfo_block %} + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Install the Comments + Order Management feature | | [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | +| Install the Order Management Glue API | | [Install the Order Management Glue API](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) | +| Install the Company Account + Order Management feature | | [Install the Company Account + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Customer Account Management + Order Management feature | | [Install the Customer Account Management + Order Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html) | +| Install the Packaging Units feature | | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Install the Product + Order Management feature | | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Install the Product Options + Order Management feature | | [Install the Product Options + Order Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | +| Install the Promotions & Discounts + Order Management feature | | [Install the Promotions & Discounts + Order Management feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..8b19c1483a1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature.md @@ -0,0 +1,159 @@ +This document describes how to install the Order Management + Promotions & Discounts feature. + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-discount-connector:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|-----------------------------------------| +| SalesDiscountConnector | vendor/spryker/sales-discount-connector | + +{% endinfo_block %} + +### 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerOrderCountDecisionRulePlugin | Checks if the customer's order count matches the discount's condition. | | Spryker\Zed\SalesDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CustomerOrderCountDecisionRulePlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +2. Log in as a customer with a number of orders that fulfills the discount condition. +3. Add any product to the cart. +4. Verify that the discount is applied to the cart. + +{% endinfo_block %} + +### 3) Configure discount context synchronization + +By default, when a discount based on `CustomerOrderCountDecisionRulePlugin` is applied to the main order, it is *not* automatically applied to associated merchant orders in a marketplace setup. Merchant orders discounts are calculated separately from the main order. + +For customer order count-based discounts to be applied to merchant orders, configure the synchronization of discount context between the main order and merchant orders: + +1. Update the required modules using Composer: + +```bash +composer require spryker/merchant-sales-order:"^1.7.0" spryker/merchant-sales-order-extension:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|-----------------------------------------------| +| MerchantSalesOrder | vendor/spryker/merchant-sales-order | +| MerchantSalesOrderExtension | vendor/spryker/merchant-sales-order-extension | + +{% endinfo_block %} + +2. Set `SalesDiscountConnectorConfig::isCurrentOrderExcludedFromCount` to return `true` if you want to exclude the current order from the `customer-order-count` discount condition: + +**src/Pyz/Zed/SalesDiscountConnector/SalesDiscountConnectorConfig.php** + +```php + + */ + protected function getMerchantOrderTotalsPreRecalculatePlugins(): array + { + return [ + new CopyOrderContextMerchantOrderTotalsPreRecalculatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +2. Log in as a customer with a number of orders that fulfills the discount condition. +3. Add any product offer (merchant product) to the cart. +4. Verify that the discount is applied to the cart. +5. Place an order. +6. Trigger OMS commands and conditions till merchant order is created. +7. Go to merchant portal and check the order. +8. Discount should be applied to the merchant order. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature0.md b/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature0.md new file mode 100644 index 00000000000..2e24c8242ce --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-order-management-promotions-and-discounts-feature0.md @@ -0,0 +1,74 @@ +This document describes how to install the Order Management + Promotions & Discounts feature. + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-discount-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|-----------------------------------------| +| SalesDiscountConnector | vendor/spryker/sales-discount-connector | + +{% endinfo_block %} + +### 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|--------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerOrderCountDecisionRulePlugin | Checks if the customer's order count matches the discount's condition. | | Spryker\Zed\SalesDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new CustomerOrderCountDecisionRulePlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `customer-order-count` field. +2. Log in as a customer with a number of orders that fulfills the discount condition. +3. Add any product to the cart. +4. Verify that the discount is applied to the cart. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-packaging-units-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-packaging-units-feature.md new file mode 100644 index 00000000000..b1c50818166 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-packaging-units-feature.md @@ -0,0 +1,1136 @@ + + + +This document describes how to install the [Packaging Units](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/packaging-units-feature-overview.html) feature. + +## Install feature core + +Follow the steps to install the Packaging Units feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Measurement Units | {{page.release_tag}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/packaging-units:"{{page.release_tag}}" --update-with-dependencies` +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------|----------------------------------------------------| +| ProductPackagingUnit | vendor/spryker/product-packaging-unit | +| ProductPackagingUnitDataImport | vendor/spryker/product-packaging-unit-data-import | +| ProductPackagingUnitStorage | vendor/spryker/product-packaging-unit-storage | +| ProductPackagingUnitsBackendApi | vendor/spryker/product-packaging-units-backend-api | + +{% endinfo_block %} + +### 2) Set up configuration + +Adjust synchronization queue pools in `src/Pyz/Zed/ProductPackagingUnitStorage/ProductPackagingUnitStorageConfig.php`: + +```php +Entity.spy_product_packaging_unit.update
    Entity.spy_product_packaging_unit.delete | +| spy_product_packaging_unit_type | Entity.spy_product_packaging_unit_type.create
    Entity.spy_product_packaging_unit_type.update
    Entity.spy_product_packaging_unit_type.delete | + + +**src/Pyz/Zed/ProductPackagingUnit/Persistence/Propel/Schema/spy_product_packaging_unit.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    +
    +``` + +2. Set up synchronization queue pools so non-multi-store entities (not store-specific entities) can be synchronized among stores: + +**src/Pyz/Zed/ProductPackagingUnitStorage/Persistence/Propel/Schema/spy_product_packaging_unit_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +3. Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------|--------|---------| +| spy_product_packaging_unit | table | created | +| spy_product_packaging_unit_type | table | created | +| spy_product_abstract_packaging_storage | table | created | +| spy_sales_order_item.amount | column | created | +| spy_sales_order_item.amount_sku | column | created | + +Make sure that the following changes in transfer objects have been applied: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------| +| ProductPackagingUnit | class | created | src/Generated/Shared/Transfer/ProductPackagingUnitTransfer | +| ProductPackagingUnitAmount | class | created | src/Generated/Shared/Transfer/ProductPackagingUnitAmountTransfer | +| ProductPackagingUnitStorage | class | created | src/Generated/Shared/Transfer/ProductPackagingUnitStorageTransfer | +| ProductConcretePackagingStorage | class | created | src/Generated/Shared/Transfer/ProductConcretePackagingStorageTransfer | +| ProductPackagingUnitType | class | created | src/Generated/Shared/Transfer/ProductPackagingUnitTypeTransfer | +| ProductPackagingUnitTypeTranslation | class | created | src/Generated/Shared/Transfer/ProductPackagingUnitTypeTranslationTransfer | +| ProductConcreteAvailability | class | created | src/Generated/Shared/Transfer/ProductConcreteAvailabilityTransfer | +| OmsState | class | created | src/Generated/Shared/Transfer/OmsStateTransfer | +| OmsStateCollection | class | created | src/Generated/Shared/Transfer/OmsStateCollectionTransfer | +| OmsProcess | class | created | src/Generated/Shared/Transfer/OmsProcessTransfer | +| SalesOrderItemStateAggregation | class | created | src/Generated/Shared/Transfer/SalesOrderItemStateAggregationTransfer | +| CartChange | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| CartPreCheckResponse | class | created | src/Generated/Shared/Transfer/CartPreCheckResponseTransfer | +| Quote | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| PersistentCartChange | class | created | src/Generated/Shared/Transfer/PersistentCartChangeTransfer | +| ProductConcrete | class | created | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| Message | class | created | src/Generated/Shared/Transfer/MessageTransfer | +| CheckoutResponse | class | created | src/Generated/Shared/Transfer/CheckoutResponseTransfer | +| CheckoutError | class | created | src/Generated/Shared/Transfer/CheckoutErrorTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| Order | class | created | src/Generated/Shared/Transfer/OrderTransfer | +| ProductMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementBaseUnitTransfer | +| ItemCollection | class | created | src/Generated/Shared/Transfer/ItemCollectionTransfer | +| ProductOption | class | created | src/Generated/Shared/Transfer/ProductOptionTransfer | +| Locale | class | created | src/Generated/Shared/Transfer/LocaleTransfer | +| Translation | class | created | src/Generated/Shared/Transfer/TranslationTransfer | +| ReservationRequest | class | created | src/Generated/Shared/Transfer/ReservationRequestTransfer | +| PickingListCollection | class | created | src/Generated/Shared/Transfer/PickingListCollectionTransfer | +| PickingListItem | class | created | src/Generated/Shared/Transfer/PickingListItemTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| ProductMeasurementSalesUnitsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ProductMeasurementSalesUnitsBackendApiAttributesTransfer | +| ProductMeasurementUnitsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitsBackendApiAttributesTransfer | +| PickingListItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListItemsBackendApiAttributesTransfer | +| ProductMeasurementUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitTransfer | +| ProductMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementSalesUnitTransfer | +| ItemTransfer.amount | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| ItemTransfer.amountLeadProduct | property | created | src/Generated/Shared/Transfer/ItemTransfer | + +Make sure that the changes have been implemented successfully. To do it, trigger the following methods and make sure that the preceding events have been triggered: + +| PATH | METHOD NAME | +|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------| +| src/Orm/Zed/ProductPackagingUnit/Persistence/Base/SpyProductPackagingUnit.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductPackagingUnit/Persistence/Base/SpyProductPackagingUnitType.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductPackagingUnitStorage/Persistence/Base/SpyProductPackagingUnitStorage.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductPackagingUnit/Persistence/Base/SpyProductPackagingUnitType.php | sendToQueue() | + + +{% endinfo_block %} + +### 4) Add translations + +1. Append the glossary according to your language configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.pre.check.availability.failed.lead.product,Products inside the item 'sku' are not available at the moment.,en_US +cart.pre.check.availability.failed.lead.product,Produkte im Artikel 'sku' sind momentan nicht verfügbar.,de_DE +product.unavailable,Product '%sku%' is not available at the moment,en_US +product.unavailable,Das Produkt '%sku%' ist momentan nicht verfügbar,de_DE +cart.pre.check.amount.min.failed,Die minimale Mengenanforderung für Produkt SKU '%sku%' ist nicht erreicht.,de_DE +cart.pre.check.amount.min.failed,Minimum amount requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.pre.check.amount.max.failed,Die maximale Mengenanforderung für Produkt SKU '%sku%' ist überschritten.,de_DE +cart.pre.check.amount.max.failed,Maximum amount for product SKU '%sku%' is exceeded.,en_US +cart.pre.check.amount.interval.failed,Die Anzahl für Produkt SKU '%sku%' liegt nicht innerhalb des vorgegebenen Intervals.,de_DE +cart.pre.check.amount.interval.failed,Amount interval requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.pre.check.amount.is_not_variable.failed,Standardbetrag für Produkt SKU '%sku%' ist überschritten.,de_DE +cart.pre.check.amount.is_not_variable.failed,Default amount requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.item.packaging_unit.not_found,Packaging unit not found for product with SKU '%sku%'.,en_US +cart.item.packaging_unit.not_found,Verpackungseinheit für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +``` + +{% info_block infoBox "Info" %} + +All packaging unit types need to have glossary entities for the configured locales. + +{% endinfo_block %} + +Infrastructural record's glossary keys: + +**src/data/import/glossary.csv** + +```yaml +packaging_unit_type.item.name,Item,en_US +packaging_unit_type.item.name,Stück,de_DE +``` + +Demo data glossary keys: + +**src/data/import/glossary.csv** + +```yaml +packaging_unit_type.ring_500.name,"Ring (500m)",en_US +packaging_unit_type.ring_500.name,"Ring (500m)",de_DE +packaging_unit_type.box.name,Box,en_US +packaging_unit_type.box.name,Box,de_DE +packaging_unit_type.palette.name,Palette,en_US +packaging_unit_type.palette.name,Palette,de_DE +packaging_unit_type.giftbox.name,Giftbox,en_US +packaging_unit_type.giftbox.name,Geschenkbox,de_DE +packaging_unit_type.valentines_special.name,"Valentine's special",en_US +packaging_unit_type.valentines_special.name,Valentinstag Geschenkbox,de_DE +packaging_unit_type.pack_20.name,Pack 20,en_US +packaging_unit_type.pack_20.name,Pack 20,de_DE +packaging_unit_type.pack_500.name,Pack 500,en_US +packaging_unit_type.pack_500.name,Pack 500,de_DE +packaging_unit_type.pack_100.name,Pack 100,en_US +packaging_unit_type.pack_100.name,Pack 100,de_DE +packaging_unit_type.pack_mixed.name,Mixed Screws boxes,en_US +packaging_unit_type.pack_mixed.name,Gemischte Schraubenkästen,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data in the database has been added to the `spy_glossary` table. + +{% endinfo_block %} + + +### 5) Configure export to the key-value store (Redis or Valkey) + +This step publishes tables on change (create, edit, delete) to `spy_product_packaging_unit_storage` and synchronizes the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------| +| ProductPackagingUnitStorageEventSubscriber | Registers listeners that are responsible for publishing product abstract packaging unit storage entity changes when a related entity change event occurs. | | Spryker\Zed\ProductPackagingUnitStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductPackagingUnitStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Set up publish feature + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------|---------------|--------------------------------------------------------------------| +| ProductPackagingUnitSynchronizationDataPlugin | Registers a publisher for manually triggering the publish command. | | Spryker\Zed\ProductPackagingUnitStorage\Communication\Plugin\Event | + +**src/Pyz/Zed/Event/EventBehaviorDependencyProvider.php** + +```php + + */ + protected function getEventTriggerResourcePlugins(): array + { + return [ + new ProductPackagingUnitEventResourceBulkRepositoryPlugin(), + ]; + } +} +``` + +#### Set up sync feature + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| ProductPackagingUnitSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | | Spryker\Zed\ProductPackagingUnitStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductPackagingUnitSynchronizationDataBulkPlugin(), + ]; + } +} +``` + +### 6) Add infrastructural data + +1. Add the following data. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|---------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| ProductPackagingUnitTypeInstallerPlugin | Installs the configured infrastructural packaging unit types. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Installer | + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins() + { + return [ + new ProductPackagingUnitTypeInstallerPlugin(), + ]; + } +} +``` + +2. Execute the registered installer plugins and install infrastructural data: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured infrastructural packaging unit types of the database are added to the `spy_product_packaging_unit_type` table. + +{% endinfo_block %} + +### 7) Import product packaging unit types + +1. Prepare your data according to your requirements using our demo data: + +**vendor/spryker/spryker/Bundles/ProductPackagingUnitDataImport/data/import/product_packaging_unit_type.csv** + +```yaml +name +packaging_unit_type.ring_500.name +packaging_unit_type.box.name +packaging_unit_type.palette.name +packaging_unit_type.giftbox.name +packaging_unit_type.valentines_special.name +packaging_unit_type.pack_mixed.name +packaging_unit_type.pack_20.name +packaging_unit_type.pack_100.name +packaging_unit_type.pack_500.name +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------|-----------|-----------|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| +| name | ✓ | string | packaging_unit_type.ring_500.name | Glossary key that will be used to display a packaging unit type. Each name needs a glossary key definition for all configured locales. | + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------------------------------------| +| ProductPackagingUnitTypeDataImportPlugin | Imports packaging unit type data into the database. | | Spryker\Zed\ProductPackagingUnitDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductPackagingUnitTypeDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import product-packaging-unit-type +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_product_packaging_unit_type` table. + +{% endinfo_block %} + +#### Import product packaging units + +1. Prepare your data according to your requirements using our demo data: + +**vendor/spryker/spryker/Bundles/ProductPackagingUnitDataImport/data/import/product_packaging_unit.csv** + +```yaml +concrete_sku,lead_product_sku,packaging_unit_type_name,default_amount,is_amount_variable,amount_min,amount_max,amount_interval +218_1233,218_123,packaging_unit_type.pack_mixed.name,5,1,3,5,2 +218_1234,218_123,packaging_unit_type.box.name,100,1,100,1000,10 +218_1230,218_123,packaging_unit_type.pack_20.name,20,0,0,0,0 +218_1231,218_123,packaging_unit_type.pack_100.name,100,0,0,0,0 +218_1232,218_123,packaging_unit_type.pack_500.name,500,0,0,0,0 +217_1231,217_123,packaging_unit_type.ring_500.name,1,0,,, +215_124,215_123,packaging_unit_type.ring_500.name,1,0,,, +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------------|-----------|------------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| concrete_sku | ✓ | string | 218_123 | Concrete product SKU of packaging unit. | +| lead_product_sku | ✓ | string | 1 | Lead product concrete SKU. | +| packaging_unit_type_name | ✓ | string | packaging_unit_type.ring_500.name | Type a name of the current concrete product. | +| default_amount | optional | positive integer | 5 | | +| is_amount_variable | ✓ | bool integer | 1 | | +| amount_min | optional | positive integer | 3 | | +| amount_max | optional | positive integer | 5 | | +| amount_interval | optional | positive integer | 2 | Min = 3; Max = 10; Interval = 2
    Choosable: 3, 5, 7, 9 | + + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| +| ProductPackagingUnitDataImportPlugin | Imports packaging unit type data into the database. | | Spryker\Zed\ProductPackagingUnitDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductPackagingUnitDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import product-packaging-unit +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data in the database has been added to the `spy_product_packaging_unit` and `spy_product_packaging_unit_type` tables. + +{% endinfo_block %} + +### 7) Set up behavior + +Set up the following behaviors. + +#### Set up checkout workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES| NAMESPACE | +|----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| +| AmountAvailabilityCartPreCheckPlugin | Validates if the given amount is available according to stock configuration during the cart change. | Expects the `amount` field to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| AmountGroupKeyItemExpanderPlugin | Expands a group key with the amount and its sales unit to granulate the item grouping in the cart for packaging unit items. | Expects the `amount` and `amountSalesUnit` fields to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| AmountRestrictionCartPreCheckPlugin | Validates the amount restrictions when Item has restrictions. | Expects the `amount` and `amountSalesUnit` fields to be set in `ItemTransfer` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| AmountSalesUnitItemExpanderPlugin | Sets the `amountSalesUnit` field for `ItemTransfers` with packaging units. | Expects the `amount` and `amountSalesUnit.IdProductMeasurementSalesUnit` to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| AmountSalesUnitValuePostSavePlugin | Sets a normalized amount sales unit value field. | Expects the `amount` and `amountSalesUnit` fields to be set in `ItemTransfer` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| CustomAmountPriceItemExpanderPlugin | Updates unit prices for variable amounted packaging units. | Expects the `amount` and `productPackagingUnit` fields to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| ProductPackagingUnitCartAddItemStrategyPlugin | Merges the `quantity` and `amount` fields changes into the cart for `ItemTransfers` with packaging units on the cart add action. | Expects the amount field to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| ProductPackagingUnitCartRemoveItemStrategyPlugin | Merges the `quantity` and `amount` fields changes into the cart for `ItemTransfers` with packaging units on the cart removal action. | Expects the amount field to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| ProductPackagingUnitItemExpanderPlugin | Sets the `amountLeadProduct` and `productPackagingUnit` fields in the `ItemTransfer` properties . | Expects the `amount` field to be set in `ItemTransfer` properties with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| ProductPackagingUnitCartPreCheckPlugin | Checks if packaging units are found for items in `CartChangeTransfer`. | Expects the `amount` field to be set in the `ItemTransfer` properties with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Cart | +| AmountAvailabilityCheckoutPreConditionPlugin | Validates if the given amount is available according to stock configuration during checkout. | Expects the `amount` and `amountLeadProduct` fields to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Checkout | +| PackagingUnitSplittableItemTransformerStrategyPlugin | Splitting order item if product packaging unit item is splittable | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Checkout | +| ProductPackagingUnitCartAddItemStrategyPlugin | Merges the `quantity` and `amount` fields changes into the cart for `ItemTransfers` with packaging units on the persistent cart add action. | Expects the `amount` field to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\PersistentCart | +| LeadProductReservationPostSaveTerminationAwareStrategyPlugin | Updates the lead product's reservation for the provided product packaging unit SKU. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Reservation | +| AmountSalesUnitOrderItemExpanderPreSavePlugin | Sets the amount measurement related fields in the Order item for saving. | Expects the `amountSalesUnit` field to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\SalesExtension | +| ProductPackagingUnitOrderItemExpanderPreSavePlugin | Sets the `amount` and `amountSku` fields in the Order item for saving. | Expects `amountLeadProduct` to be set in `ItemTransfers` with packaging units. | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\SalesExtension | +| LeadProductStockUpdateHandlerPlugin | Updates availability and reservation of a lead product for a given product packaging unit for stock update handler. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Stock | +| ProductPackagingUnitAmountCartChangeRequestExpanderPlugin | Sets the `amount` and `amountSalesUnit.IdProductMeasurementSalesUnit` fields in `ItemTransfers` with packaging units for cart change. | Expects a request to contain the to-be-used information. | Spryker\Client\ProductPackagingUnit\Plugin\CartExtension | +| ProductPackagingUnitAmountPersistentCartChangeExpanderPlugin | Sets the `amount` and `amountSalesUnit.IdProductMeasurementSalesUnit` fields in `ItemTransfers` with packaging units for persistent cart change. | Expects a request to contain the to-be-used information. | Spryker\Client\ProductPackagingUnit\Plugin\PersistentCartExtension | +| ProductPackagingUnitOmsReservationAggregationPlugin | Aggregates reservations for provided SKU both with or without packaging unit. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Oms | +| ProductPackagingUnitProductAbstractAddToCartPlugin | Filters out products which have packaging unit available. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\ProductPageSearch | +| AmountLeadProductOrderItemExpanderPlugin | Expands order items with additional packaging unit amount lead product. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Sales | +| AmountSalesUnitOrderItemExpanderPlugin | Expands order items with additional packaging unit sales unit. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\Sales | +| ProductPackagingUnitPickingListCollectionExpanderPlugin | Expands `PickingListCollectionTransfer.pickingList.pickingListItem.orderItem` transfer objects with `amountSalesUnit` property. | | Spryker\Zed\ProductPackagingUnit\Communication\Plugin\PickingList | +| ProductPackagingUnitPickingListItemsBackendApiAttributesMapperPlugin | Maps amount sales unit from `PickingListItemTransfer.orderItem.amountSalesUnit` to `ApiPickingListItemsAttributesTransfer.orderItem.amountSalesUnit` transfer property. | Expects the `uuid` and `orderItem.amountSalesUnit.productMeasurementUnit` fields to be set in `PickingListItemTransfer`. Expects the `uuid` field to be set in `ApiPickingListItemsAttributesTransfer` as well. | Spryker\Glue\ProductPackagingUnitsBackendApi\Plugin\PickingListsBackendApi | + +
    +src/Pyz/Client/Cart/CartDependencyProvider.php + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new ProductPackagingUnitItemExpanderPlugin(), + new AmountGroupKeyItemExpanderPlugin(), + new AmountSalesUnitItemExpanderPlugin(), + new CustomAmountPriceItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\CartOperationStrategyPluginInterface> + */ + protected function getCartRemoveItemStrategyPlugins(Container $container): array + { + return [ + new ProductPackagingUnitCartRemoveItemStrategyPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> + */ + protected function getCartPreCheckPlugins(Container $container) + { + return [ + new AmountAvailabilityCartPreCheckPlugin(), + new AmountRestrictionCartPreCheckPlugin(), + new ProductPackagingUnitCartPreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\Cart\Dependency\PostSavePluginInterface> + */ + protected function getPostSavePlugins(Container $container) + { + return [ + new AmountSalesUnitValuePostSavePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return list<\Spryker\Zed\CartExtension\Dependency\Plugin\CartOperationStrategyPluginInterface> + */ + protected function getCartAddItemStrategyPlugins(Container $container): array + { + return [ + new ProductPackagingUnitCartAddItemStrategyPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container) + { + return [ + new AmountAvailabilityCheckoutPreConditionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getCartAddItemStrategyPlugins(Container $container): array + { + return [ + new ProductPackagingUnitCartAddItemStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getReservationPostSaveTerminationAwareStrategyPlugins(): array + { + return [ + new LeadProductReservationPostSaveTerminationAwareStrategyPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OmsExtension\Dependency\Plugin\OmsReservationAggregationPluginInterface> + */ + protected function getOmsReservationAggregationPlugins(): array + { + return [ + new ProductPackagingUnitOmsReservationAggregationPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPreSavePlugins(): array + { + return [ + new ProductPackagingUnitOrderItemExpanderPreSavePlugin(), + new AmountSalesUnitOrderItemExpanderPreSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPluginInterface> + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new AmountLeadProductOrderItemExpanderPlugin(), + new AmountSalesUnitOrderItemExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\ItemTransformerStrategyPluginInterface> + */ + public function getItemTransformerStrategyPlugins(): array + { + return [ + new PackagingUnitSplittableItemTransformerStrategyPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/Stock/StockDependencyProvider.php** + +```php + + */ + protected function getStockUpdateHandlerPlugins(Container $container): array + { + return [ + new LeadProductStockUpdateHandlerPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getAddItemsRequestExpanderPlugins(): array + { + return [ + new ProductPackagingUnitAmountCartChangeRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getChangeRequestExtendPlugins(): array + { + return [ + new ProductPackagingUnitAmountPersistentCartChangeExpanderPlugin(), #ProductPackagingUnit + ]; + } +} +``` + +**src/Pyz/Zed/PickingList/PickingListDependencyProvider.php** + +```php + + */ + protected function getPickingListCollectionExpanderPlugins(): array + { + return [ + new ProductPackagingUnitPickingListCollectionExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/PickingListsBackendApi/PickingListsBackendApiDependencyProvider.php** + +```php + + */ + protected function getApiPickingListItemsAttributesMapperPlugins(): array + { + return [ + new ProductPackagingUnitPickingListItemsBackendApiAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Add an item with packaging units to cart and check if the following statements are true: + +- A packaging unit can be found for an item. +- The `amount`, `amountSalesUnit`, `amountLeadProduct` and `ProductPackagingUnit` fields in the `ItemTransfer` properties get fully populated. +- The amount restriction works as expected. +- Availability is validated respectfully according to your lead product's and packaging unit is configuration. +- Item grouping in the cart works as expected. +- Variable amount changes affect unit prices in the `ItemTransfer` properties. +- The quantity and amount are merged correctly when the group key matches. + +Go through the checkout workflow, make an order and check if the following statements are true: +- Check if the stock is modified respectfully according to your lead product's and packaging unit is configuration. +- Check if the following fields in the `spy_sales_order_item` table are saved: + - `amount` + - `amount_sku` + - `amount_measurement_unit_name` + - `amount_measurement_unit_code` + - `amount_measurement_unit_precision` + - `amount_measurement_unit_conversion` + - `amount_base_measurement_unit_name` + +Go to the Zed UI Sales overview, check the order, and verify the following: +- The correct sales unit is displayed. +- The correct amount is displayed per sales order item. + +Make sure the following: +- Abstract products that have packaging units available don't have `add_to_cart_sku` field in the Elasticsearch document. +- Every order item from `SalesFacade::getOrderItems()` results contains packaging units data: `ItemTransfer.amountLeadProduct` and `ItemTransfer.amountSalesUnit` are set for the order items that have packaging units. +- The results of picking lists from `PickingListFacade::getPickingListCollection()` contain packaging units data: `PickingListCollectionTransfer.pickingList.pickingListItem.orderItem.amountSalesUnit` are set for the order items that have packaging units. + +{% endinfo_block %} + + +## Install feature frontend + +Follow the steps below to install the {Feature Name} feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Measurement Units | {{page.release_tag}} | [Install the Measurement Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | +| Non-splittable Products | {{page.release_tag}} | | + +### 1) Install the required modules + +```bash +composer require spryker-feature/packaging-units: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|---------------------------------------------------| +| ProductPackagingUnitWidget | vendor/spryker-shop/product-packaging-unit-widget | + +{% endinfo_block %} + +### 2) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +packaging-units.recommendation.amount-min-violation,Minimum amount requirements for product are not fulfilled,en_US +packaging-units.recommendation.amount-min-violation,Mindestmengenanforderungen für das Produkt sind nicht erfüllt,de_DE +packaging-units.recommendation.amount-max-violation,Maximum amount requirements for product are not fulfilled,en_US +packaging-units.recommendation.amount-max-violation,Maximale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +packaging-units.recommendation.amount-interval-violation,Amount interval requirements for product are not fulfilled,en_US +packaging-units.recommendation.amount-interval-violation,Mengenintervallanforderungen für das Produkt sind nicht erfüllt,de_DE +packaging_units.recommendation.suggestion,Would you like to add:,en_US +packaging_units.recommendation.suggestion,Möchten Sie hinzufügen:,de_DE +packaging_units.recommendation.between-units-info,The amount you have chosen is in between 2 base units,en_US +packaging_units.recommendation.between-units-info,Ihre gewählte Anzahl liegt zwischen 2 basis Einheiten,de_DE +packaging_units.cart.quantity,Quantity,en_US +packaging_units.cart.quantity,Anzahl,de_DE +packaging_units.cart.amount,Amount,en_US +packaging_units.cart.amount,Betrag,de_DE +packaging_units.cart.item,Items,en_US +packaging_units.cart.item,Artikel,de_DE +page.detail.add-to-cart,In den Warenkorb,de_DE +page.detail.add-to-cart,Add to Cart,en_US +product.measurement.sales_unit,Sales Unit,en_US +product.measurement.sales_unit,Maßeinheit,de_DE +cart.item_quantity,Anzahl,de_DE +cart.item_quantity,Quantity,en_US +measurement_units.new-price,New price,en_US +measurement_units.new-price,Neuer Preis,de_DE +measurement_units.recommendation.between-units-info,The quantity you have chosen is in between 2 base units,en_US +measurement_units.recommendation.between-units-info,Ihre gewählte Anzahl liegt zwischen 2 basis Einheiten,de_DE +measurement_units.recommendation.min-violation,Minimum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.min-violation,Minimale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.max-violation,Maximum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.max-violation,Maximale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.suggestion,Would you like to add,en_US +measurement_units.recommendation.suggestion,Was würden Sie gerne hinzufügen? ,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data in the database has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up widgets + +1. Enable the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|----------------------------|-------------------------------------------------------------|----------------------------------------------------| +| ProductPackagingUnitWidget | Displays product packaging options for quantity and amount. | SprykerShop\Yves\ProductPackagingUnitWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ProductPackagingUnitWidget::class, + ]; + } +} +``` + +`ProductPackagingUnitWidget` uses Javascript for some functionality: + +| Functionality | Path | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Controls base unit => sales unit calculationsApplies product quantity and amount restrictions on sales unit levelOffers recommendation when invalid quantity or amount is selectedMaintains stock-based quantity, amount and sales unit information for posting | `vendor/spryker-shop/product-packaging-unit-widget/src/SprykerShop/Yves/ProductPackagingUnitWidget/Theme/default/components/molecules/packaging-unit-quantity-selector/packaging-unit-quantity-selector.ts` | + + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Check if Check if the `amount` field meets the following criteria: + +- It appears on the Product Detail page for items with packaging units. +- It is displayed correctly with measurement unit information on the Cart page. +- It is displayed correctly with measurement unit information on the Checkout Summary page. +- It is displayed correctly with measurement unit information on the previous Orders page. + +{% endinfo_block %} + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------| +| QuickOrderItemDefaultPackagingUnitExpanderPlugin | Expands `ItemTransfer` with packaging unit data if available using product the abstract ID and product concrete ID | | SprykerShop\Yves\ProductPackagingUnitWidget\Plugin\QuickOrder | + +**src/Pyz/Yves/QuickOrderPage/QuickOrderPageDependencyProvider.php** + +```php + + */ + protected function getQuickOrderItemTransferExpanderPlugins(): array + { + return [ + new QuickOrderItemDefaultPackagingUnitExpanderPlugin(), + ]; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-payments-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-payments-feature.md new file mode 100644 index 00000000000..8f0026a4eb5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-payments-feature.md @@ -0,0 +1,753 @@ + + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. + +The current feature integration guide only adds the following functionalities: +- Payment Back Office UI +- Payment method per store +- Payment data import +- Payment app express checkout flow + +{% endinfo_block %} + +## Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + +### Prerequisites for PayPal Express by PayOne + +Your PayOne Account needs to be onboarded to the PayPal Express v2. + +For more information, see [Paypal Express V2 in PayOne docs](https://docs.payone.com/payment-methods/paypal/paypal-v2/paypal-express-v2). + +Make sure all payment methods can be used with your PayOne account before deploying to production. + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/payments:"{{page.release_tag}}" spryker/checkout-rest-api:"^3.0.0" spryker/payment-cart-connector --update-with-dependencies +``` + + +{% info_block warningBox "Verification" %} +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | REQUIRED ONLY FOR ACP PAYMENTS | +|---------------------------|--------------------------------------------------|--------------------------------| +| PaymentDataImport | vendor/spryker/payment-data-import | | +| PaymentGui | vendor/spryker/payment-gui | | +| PaymentApp | vendor/spryker/payment-app | v | +| PaymentAppExtension | vendor/spryker/payment-app-extension | v | +| PaymentAppShipment | vendor/spryker/payment-app-shipment | v | +| PaymentAppWidget | vendor/spryker-shop/payment-app-widget | v | +| PaymentAppWidgetExtension | vendor/spryker-shop/payment-app-widget-extension | v | +| PaymentCartConnector | vendor/spryker/payment-cart-connector | | + +{% endinfo_block %} + +## 2) Set up Express Checkout payments configuration + + +1. Configure the checkout payment step to hide the express checkout payment methods. For example, if you're using the ACP Payone app, you can exclude the `payone-paypal-express` payment method. + +**src/Pyz/Yves/CheckoutPage/CheckoutPageConfig.php** + +```php + + */ + public function getExcludedPaymentMethodKeys(): array + { + return [ + 'payone-paypal-express', + ]; + } +} +``` + +2. Cart reload, remove item, and update quantity are the default cart operations. Define the payment methods that you want to exclude from the cart operations. During the checkout steps, cart reloads are executed multiple times, and the payment methods are cleared. In the example below, the `PayPal Express` payment method name should be excluded from the cart operations to prevent the payment method from being cleared. + +**src/Pyz/Zed/PaymentCartConnector/PaymentCartConnectorConfig.php** + +```php + + */ + protected const EXCLUDED_PAYMENT_METHODS = [ + 'PayPal Express', + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Add several products to cart and proceed to checkout. Make sure that the payment methods you've excluded are not shown on the checkout payment step page. + +{% endinfo_block %} + +3. The express checkout flow is a simplified checkout flow that skips some of the checkout steps. Depending on your project needs, configure the needed checkout steps to be skipped during the express checkout flow. + +**src/Pyz/Yves/PaymentAppWidget/PaymentAppWidgetConfig.php** + +```php + + */ + protected const CHECKOUT_STEPS_TO_SKIP_IN_EXPRESS_CHECKOUT_WORKFLOW = [ + 'address', + 'shipment', + 'payment', + ]; +} +``` + +{% info_block warningBox "Verification" %} + + +1. Add several products to the cart and proceed to the express checkout flow. +2. Use the express checkout widget to place an order shown on the cart page. +3. Confirming the order opens the order confirmation page. +Make sure the steps you have configured to skip are skipped in the checkout flow. + +{% endinfo_block %} + +4. When a customer returns to the cart page during the express checkout flow, some quote fields are cleared to allow them to restart the checkout process from the beginning. In the example below, the `PAYMENT`, `PAYMENTS`, `SHIPMENT`, `BILLING_ADDRESS`, `SHIPPING_ADDRESS`, and `PRE_ORDER_PAYMENT_DATA` quote fields are configured to be cleared. Configure the quote fields to be cleared during the express checkout flow according to your needs. + + +**src/Pyz/Yves/PaymentAppWidget/PaymentAppWidgetConfig.php** + +```php + + */ + protected const QUOTE_FIELDS_TO_CLEAN_IN_EXPRESS_CHECKOUT_WORKFLOW = [ + QuoteTransfer::PAYMENT, + QuoteTransfer::PAYMENTS, + QuoteTransfer::SHIPMENT, + QuoteTransfer::BILLING_ADDRESS, + QuoteTransfer::SHIPPING_ADDRESS, + QuoteTransfer::PRE_ORDER_PAYMENT_DATA, + ]; +} +``` + +{% info_block warningBox "Verification" %} + +1. Add several products to cart and proceed to the express checkout flow. +2. Use the express checkout widget to place an order shown on the cart page. +3. Confirming the order opens the order confirmation page. +4. Return to the cart page and check that the quote fields you have configured are cleared. + +{% endinfo_block %} + +5. Configure a shipment method to be used by default in the express checkout and its cost to be added to the total price. +In the example below, the `spryker_dummy_shipment-standard` shipment method is configured for the `payone-paypal-express` payment method. +The key is the payment method key, and the value is the shipment method key. + +**src/Pyz/Zed/PaymentAppShipment/PaymentAppShipmentConfig.php** + +```php + + */ + protected const EXPRESS_CHECKOUT_SHIPMENT_METHODS_INDEXED_BY_PAYMENT_METHOD = [ + 'payone-paypal-express' => 'spryker_dummy_shipment-standard', + ]; +} +``` + +{% info_block warningBox "Verification" %} + +1. Add several products to cart and proceed to the express checkout flow. +2. Use the express checkout widget to place an order shown on the cart page. +3. Confirm the order, which opens the order confirmation page. + Make sure the shipment methods you've configured to be used by default was applied to the order. + +{% endinfo_block %} + +6. Enable the express checkout shipment for product bundles. + +**src/Pyz/Zed/PaymentAppShipment/PaymentAppShipmentConfig.php** + +```php + + */ + protected const SHIPMENT_ITEM_COLLECTION_FIELD_NAMES = [ + QuoteTransfer::BUNDLE_ITEMS, + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Add a product bundle to cart and place the order using the express checkout flow. + Make sure the order is placed successfully. + +{% endinfo_block %} + +7. When customers start a regular checkout, the quote is cleaned up to let them to restart the checkout process from the beginning. Enable cart cleanup for the regular checkout flow. + + +**src/Pyz/Zed/PaymentAppShipment/PaymentAppShipmentConfig.php** + +```php +buildImporterConfiguration('payment_method.csv', static::IMPORT_TYPE_PAYMENT_METHOD); + } + + /** + * @return \Generated\Shared\Transfer\DataImporterConfigurationTransfer + */ + public function getPaymentMethodAtoreDataImporterConfiguration(): DataImporterConfigurationTransfer + { + return $this->buildImporterConfiguration('payment_method_store.csv', static::IMPORT_TYPE_PAYMENT_METHOD_STORE); + } +} +``` + +2. Configure the Payment GUI module with money and store plugins. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| StoreRelationToggleFormTypePlugin | Represents a store relation toggle form based on stores registered in the system. | | Spryker\Zed\Store\Communication\Plugin\Form | + +**src/Pyz/Zed/PaymentGui/PaymentGuiDependencyProvider.php** + +```php + Administration > Payment Management > Payment Methods** section. +- You can see information about the payment method in the **Back Office > Administration > Payment Management > Payment Methods > View** section. +- You can edit the payment method in the **Back Office > Administration > Payment Management > Payment Methods > Edit** section. + +{% endinfo_block %} + +3. Enable the payment app express checkout flow in the Yves step engine. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------| +| PaymentAppExpressCheckoutWorkflowCheckoutStepResolverStrategyPlugin | Returns checkout steps suitable for the express checkout workflow and cleans quote fields based on the configuration. | | SprykerShop\Yves\PaymentAppWidget\Plugin\CheckoutPage | + +**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutStepResolverStrategyPlugins(): array + { + return [ + new PaymentAppExpressCheckoutWorkflowCheckoutStepResolverStrategyPlugin(), + ]; + } + +} +``` + +4. Enable the default shipment method for the payment app express checkout flow. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|-----------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ShipmentExpressCheckoutPaymentRequestProcessorPlugin | Provides the shipment method for the express checkout payment request.| | Spryker\Zed\PaymentAppShipment\Communication\Plugin\PaymentApp | + +**src/Pyz/Zed/PaymentApp/PaymentAppDependencyProvider.php** + +```php + + */ + protected function getExpressCheckoutPaymentRequestProcessorPlugins(): array + { + return [ + new ShipmentExpressCheckoutPaymentRequestProcessorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- The express checkout button is displayed on the Cart page. +- Clicking the express checkout button opens the express checkout page. +- You can place an order using the express checkout. +- On the summary page, a default shipment method applied to the order is displayed. + +{% endinfo_block %} + +5. Register the following route provider plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|------------------------------------------------------|---------------|-------------------------------------------------| +| PaymentAppWidgetRouteProviderPlugin | Adds the payment app routes to the Yves application. | | SprykerShop\Yves\PaymentAppWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new PaymentAppWidgetRouteProviderPlugin(), + ]; + } +} +``` + +6. Enable the payment method cleanup for cart operations. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|----------------------------------------------------------------------------|---------------|------------------------------------------------------------| +| RemoveQuotePaymentCartItemExpanderPlugin | Removes payment information from the quote when cart changes are made. | | Spryker\Zed\PaymentCartConnector\Communication\Plugin\Cart | + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new RemoveQuotePaymentCartItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Add a product to cart and proceed to the express checkout. +2. Go to the cart page and change product quantities, add new products, or remove existing ones. + Make sure the payment method has been removed from the cart. + + +{% endinfo_block %} + +## 6) Replace deprecated funtionality + +Use the `PaymentDataImport` module instead of the following: +- `SalesPaymentMethodTypeInstallerPlugin` plugin +- `PaymentConfig::getSalesPaymentMethodTypes()` config method + +## 7) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------|-------------------------------------------------------------------|---------------|------------------------------------------| +| ExpressCheckoutPaymentWidget | Displays the express checkout payment methods available for cart. | | SprykerShop\Yves\PaymentAppWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ExpressCheckoutPaymentWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Verify that the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +|------------------------------|-------------------------------------------------------------------------------------| +| ExpressCheckoutPaymentWidget | Make sure that the express checkout payment methods are displayed on the cart page. | + +{% endinfo_block %} + +3. With the express checkout flow, you might want to skip some address fields that are part of the regular checkout, for example–the salutation field. +Customize the address step according to your needs, hiding fields using the 'n/a' placeholder. + +**ShopUi/Theme/default/components/molecules/display-address/display-address.twig** + +```twig +
  • + {{ (('customer.salutation.' ~ data.address.salutation | lower) | trans) == 'n/a' ? '' : (('customer.salutation.' ~ data.address.salutation | lower) | trans) }} + {{ data.address.firstName }} {{ data.address.lastName }} +
  • +``` + +{% info_block warningBox "Verification" %} + +Make sure that on the order summary page, the address fields you've configured to hide aren't displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-permissions-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-permissions-feature.md new file mode 100644 index 00000000000..91ae3f275a0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-permissions-feature.md @@ -0,0 +1,55 @@ + + +The Permissions feature is shipped with following modules: + +| MODULE | DESCRIPTION | +| --- | --- | +| [Permission](https://github.com/spryker/spryker-core/tree/master/Bundles/Permission) | Provides permissions support that can be used as a part of ACL / RBAC. | +| [PermissionExtension](https://github.com/spryker/spryker-core/tree/master/Bundles/PermissionExtension) | Holds a set of plugin interfaces that can be used as extension points of the Permission module. | + +To install the feature, follow the steps below: + +1. Install necessary modules using composer: + +```bash +composer update "spryker/*" "spryker-shop/*" +composer require spryker/permission-extension:"^1.0.0" spryker/permission:"^1.0.0" +``` + +2. Add plugins to Zed `CustomerDependencyProvider`: + + +| MODULE | PLUGIN | DESCRIPTION | METHOD IN DEPENDENCY ROVIDER | +| --- | --- | --- | --- | +| CompanyRole | PermissionCustomerExpanderPlugin | Adds permissions to the company user. | getCustomerTransferExpanderPlugins | +| CompanyUser | CustomerTransferCompanyUserExpanderPlugin | Adds company user information to customer transfer. | getCustomerTransferExpanderPlugins | + +**src/Pyz/Zed/Customer/CustomerDependencyProvider.php** + +```php +namespace Pyz\Zed\Customer; + +use Spryker\Zed\CompanyUser\Communication\Plugin\Customer\CustomerTransferCompanyUserExpanderPlugin; +use Spryker\Zed\CompanyRole\Communication\Plugin\PermissionCustomerExpanderPlugin; +use Spryker\Zed\Customer\CustomerDependencyProvider as SprykerCustomerDependencyProvider; + +class CustomerDependencyProvider extends SprykerCustomerDependencyProvider +{ + + /** + * @return \Spryker\Zed\Customer\Dependency\Plugin\CustomerTransferExpanderPluginInterface[] + */ + protected function getCustomerTransferExpanderPlugins() + { + return [ + new PermissionCustomerExpanderPlugin(), + new CustomerTransferCompanyUserExpanderPlugin() + ]; + } +} +``` + +3. Synchronize permission plugins with storage: + +Go to the Administration interface, **Maintenance** menu and click **Sync permissions**. + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-feature.md new file mode 100644 index 00000000000..5f5a65f66d4 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-feature.md @@ -0,0 +1,298 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Resource Sharing | {{page.release_tag}} | +| | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/persistent-cart-sharing: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| PersistentCartShare | vendor/spryker/persistent-cart-share | +| PersistentCartShareExtension | vendor/spryker/persistent-cart-share-extension | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects: + +| Transfer | Type | Event | Path | +| --- | --- | --- | --- | +| ResourceShareData.idQuote | property | added | src/Generated/Shared/Transfer/ResourceShareDataTransfer | +| ResourceShareData.ownerCompanyUserId | property | added | src/Generated/Shared/Transfer/ResourceShareDataTransfer | +| ResourceShareData.ownerCompanyBusinessUnitId | property | added | src/Generated/Shared/Transfer/ResourceShareDataTransfer | + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| Resource Sharing | {{page.release_tag}} | +| Customer Account Management | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/persistent-cart-sharing: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| PersistentCartSharePage | vendor/spryker-shop/persistent-cart-share-page | +| PersistentCartShareWidget | vendor/spryker-shop/persistent-cart-share-widget | + +{% endinfo_block %} + +### 2) Add translations + +Append glossary according to your configuration: + +data/import/common/common/glossary.csv + +```yaml +persistent_cart_share.error.resource_is_not_available,The cart you are trying to access is not available.,en_US +persistent_cart_share.error.resource_is_not_available,"Der Warenkorb, auf den Sie zugreifen möchten, ist nicht verfügbar.",de_DE +persistent_cart_share.error.quote_is_not_available,The cart you are trying to access is not available.,en_US +persistent_cart_share.error.quote_is_not_available,"Der Warenkorb, auf den Sie zugreifen möchten, ist nicht verfügbar.",de_DE +persistent_cart_share.share_options.external.PREVIEW,,en_US +persistent_cart_share.share_options.external.PREVIEW,,de_DE +persistent_cart_share.share_options.internal.READ_ONLY,Read Only,en_US +persistent_cart_share.share_options.internal.READ_ONLY,Schreibgeschützt,de_DE +persistent_cart_share.share_options.internal.FULL_ACCESS,Full Access,en_US +persistent_cart_share.share_options.internal.FULL_ACCESS,Ohne Einschränkung,de_DE +persistent_cart_share.copy,Copy,en_US +persistent_cart_share.copy,Kopieren,de_DE +persistent_cart_share.external_users,External Users,en_US +persistent_cart_share.external_users,Externe Benutzer,de_DE +persistent_cart_share.internal_users,Internal Users,en_US +persistent_cart_share.internal_users,Interne Benutzer,de_DE +persistent_cart_share.title,Share Cart via link,en_US +persistent_cart_share.title,Einkaufswagen per Link teilen,de_DE +clipboard.copy.success,Successfully copied to clipboard!,en_US +clipboard.copy.success,Erfolgreich in die Zwischenablage kopiert!,de_DE +clipboard.copy.error,Copying to clipboard is not supported by your browser. Try to copy the text manually.,en_US +clipboard.copy.error,Das Kopieren in die Zwischenablage wird von Ihrem Browser nicht unterstützt. Versuchen Sie den Text manuell zu kopieren.,de_DE +persistent_cart_share_page.preview,Preview: %title%,en_US +persistent_cart_share_page.preview,Vorschau: %title%,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CartPreviewRouterStrategyPlugin | Redirects company user to the Cart Preview page if a cart was shared with Preview access. | None | SprykerShop\Yves\PersistentCartSharePage\Plugin | +| PreviewCartShareOptionPlugin | Provides an external (preview) share option for the Share Cart via link widget. | None | Spryker\Client\PersistentCartShare\Plugin | + +**src/Pyz/Yves/ResourceSharePage/ResourceSharePageDependencyProvider.php** + +```php +Make sure, that you can see the "Share Cart via Link" widget on a cart page.
    Make sure you can see an "External Users" radio button. Click on it.
    Make sure, that you can see the generated link for Preview access.
    Make sure, that you can see a "Copy" button near the link. Click on it.
    Make sure, that the link was copied to the clipboard (or a message that it's impossible because of some browser limitations).
    Copy the Cart Preview link and proceed with it. Make sure, that you are redirected to the Cart Preview page. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-shared-carts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-shared-carts-feature.md new file mode 100644 index 00000000000..52af7f26a8b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-persistent-cart-sharing-shared-carts-feature.md @@ -0,0 +1,233 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Shared Carts | {{page.release_tag}} | +| Persistent Cart Sharing | {{page.release_tag}} | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ShareCartByResourceShareZedActivatorStrategyPlugin | Responsible for sharing a cart to company users within the same business unit. Updates company user access level if he proceeded the cart share link with higher permission. | Expects the Company User to be logged in. | Spryker\Zed\SharedCart\Communication\Plugin\ResourceShare | +| CartShareLoginRequiredResourceShareClientActivatorStrategyPlugin | Provides a redirect route for resource share link when share option requires Customer to be logged in. | None | Spryker\Client\SharedCart\Plugin\ResourceShare | +| SwitchDefaultCartResourceShareClientActivatorStrategyPlugin | Switches default cart for company user after he proceeded cart share link with Read-only or Full Access access. | None | Spryker\Client\SharedCart\Plugin\ResourceShare | + +**src/Pyz/Zed/ResourceShare/ResourceShareDependencyProvider.php** + +```php +Make sure, that after you shared a cart with Read-only access to another company user and he followed a "Full Access" link - his cart access was updated to "Full Access". + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure, that when you have a cart share link with Read-only or Full Access and you're not logged in - you can see the "Login to access requested shared resource." error message. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure, that when you have a cart share link with Read-only or Full Access, you are logged in and you follow the link - your default cart will be changed to shared one before you get redirected to the cart page. + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Shared Carts | {{page.release_tag}} | +| Persistent Cart Sharing | {{page.release_tag}} | + +## 1) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +shared_cart.resource_share.strategy.error.cart_access_denied,The cart URL is wrong or try to login with another company user account.,en_US +shared_cart.resource_share.strategy.error.cart_access_denied,"Die URL des Einkaufswagens ist falsch, oder versuchen Sie sich mit einem anderen Konto anzumelden.",de_DE +shared_cart.resource_share.strategy.error.unable_to_share_cart,Unable to share a cart with provided customer.,en_US +shared_cart.resource_share.strategy.error.unable_to_share_cart,Der Einkaufswagen kann nicht mit dem angegebenen Kunden geteilt werden.,de_DE +shared_cart.resource_share.strategy.success.cart_share_access_updated,Access level was updated.,en_US +shared_cart.resource_share.strategy.success.cart_share_access_updated,Zugriffsebene wurde aktualisiert.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +## 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| FullAccessCartShareOptionPlugin | Provides an internal (Full Access) share option for the Share Cart via link widget. | None | Spryker\Client\SharedCart\Plugin | +| ReadOnlyCartShareOptionPlugin | Provides an internal (Read-Only) share option for the Share Cart via link widget. | None | Spryker\Client\SharedCart\Plugin | +| SharedCartRouterStrategyPlugin | Provides a route to the page, where the customer will be redirected to, after successful cart share with Read-only or Full Access access. | None | SprykerShop\Yves\SharedCartPage\Plugin\ResourceShare | + +**src/Pyz/Client/PersistentCartShare/PersistentCartShareDependencyProvider.php** + +```php +Make sure, that you can see the "Share Cart via Link" widget on a cart page.
    Make sure you can see an "Internal Users" radio button. Click on it.
    Make sure, that you can see two generated links - one for Read-only access and another - for Full Access access.
    Login as another Company User from the same business unit.
    Proceed with the link for Read-only access. Make sure, that the cart was shared to you with Read-only access.
    Proceed with the link for Full Access access. Make sure, that the "Access level was updated." message appeared, and now a cart is shared with you with the Full Access access. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-prices-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-prices-feature.md new file mode 100644 index 00000000000..b681c65456b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-prices-feature.md @@ -0,0 +1,320 @@ + + +{% info_block errorBox "Attention!" %} + +The following feature integration Guide expects the basic feature to be in place. The current feature integration Guide only adds the **Volume Prices** functionality and `PriceProductWidget`. + +{% endinfo_block %} + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +|---|---| +| Spryker Core | {{page.release_tag}} | +| Prices | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/prices: "^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| NAME | VERSION | +| --- | --- | +| PriceProductVolume | vendor/spryker/price-product-volume | +| PriceProductDataImport | vendor/spryker/price-product-data-import | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| PriceProductVolume | class | created | src/Generated/Shared/Transfer/PriceProductVolumeTransfer | +| PriceProductVolumeCollection | class | created | src/Generated/Shared/Transfer/PriceProductVolumeCollectionTransfer | +| PriceProduct.volumeQuantity | column | added | src/Generated/Shared/Transfer/PriceProductTransfer | +| ProductViewTransfer.currentPriceProduct | column | added | src/Generated/Shared/Transfer/CurrentProductPriceTransfer | + +{% endinfo_block %} + +### 3) Import data + +#### Import volume prices + +{% info_block infoBox "Note" %} + +The following imported entities will be used as product volumes in Spryker OS. + +{% endinfo_block %} + +Prepare your data according to your requirements using our demo data: + +**src/data/import/product_price.csv** + +```yaml +abstract_sku,concrete_sku,price_type,store,currency,value_net,value_gross,price_data.volume_prices +193,,DEFAULT,DE,EUR,16195,17994,"[{""quantity"":5,""net_price"":150,""gross_price"":165}, {""quantity"":10,""net_price"":145,""gross_price"":158}, {""quantity"":20,""net_price"":140,""gross_price"":152}]" +195,,DEFAULT,DE,CHF,40848,45387,"[{""quantity"":3,""net_price"":350,""gross_price"":385}, {""quantity"":8,""net_price"":340,""gross_price"":375}]" +194,,DEFAULT,AT,EUR,20780,23089,"[{""quantity"":5,""net_price"":265,""gross_price"":295}, {""quantity"":10,""net_price"":275,""gross_price"":310}, {""quantity"":20,""net_price"":285,""gross_price"":320}]" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---|---|---|---|---| +| abstract_sku | optional | string | 193 | Either `abstract_sku` or `concrete_sku` should be present to attach the given prices to the correct product | +| concrete_sku | optional | string | 117_29890338 | Either `abstract_sku` or `concrete_sku` should be present to attach the given prices to the correct product | +| price_type | ✓ | string | DEFAULT | | +| store | ✓ | string | DE | Store in which the specific product has that specific price | +| currency | ✓ | string | EUR | The currency in which the specific product has that specific price | +| value_net | ✓ | integer | 10200 | The net (before tax) price in cents | +| value_gross | ✓ | integer | 12000 | The gross (after tax) price in cents | +| price_data.volume_prices | optional | json string | `"[{""quantity"":5,""net_price"":150,""gross_price"":165}]"` | A json description of the prices when the quantity changes (volume based pricing). In the example given, the product bought, when it has a quantity of less than 5, it uses the normal price, but uses this Volume Price when the quantity is greater than 5 | + +Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductDataImportPlugin | Imports demo product price data into the database. | None | Spryker\Zed\PriceProductDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + for more details.) +{% endinfo_block %} +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +namespace Pyz\Zed\DataImport; +... +use Spryker\Zed\MerchantDataImport\Communication\Plugin\MerchantDataImportPlugin; +use Spryker\Zed\MerchantRelationshipDataImport\Communication\Plugin\MerchantRelationshipDataImportPlugin; +use Spryker\Zed\PriceProductDataImport\Communication\Plugin\PriceProductDataImportPlugin; +use Spryker\Zed\PriceProductMerchantRelationshipDataImport\Communication\Plugin\PriceProductMerchantRelationshipDataImportPlugin; +... + + protected function getDataImporterPlugins(): array + { + return [ + [new CategoryDataImportPlugin(), DataImportConfig::IMPORT_TYPE_CATEGORY_TEMPLATE], + new CompanyDataImportPlugin(), + new CompanyBusinessUnitDataImportPlugin(), + new CompanyUnitAddressDataImportPlugin(), + new CompanyUnitAddressLabelDataImportPlugin(), + new CompanyUnitAddressLabelRelationDataImportPlugin(), + new ProductMeasurementUnitDataImportPlugin(), + new ProductMeasurementBaseUnitDataImportPlugin(), + new ProductMeasurementSalesUnitDataImportPlugin(), + new ProductMeasurementSalesUnitStoreDataImportPlugin(), + new ProductQuantityDataImportPlugin(), + new ProductPackagingUnitTypeDataImportPlugin(), + new ProductPackagingUnitDataImportPlugin(), + new BusinessOnBehalfCompanyUserDataImportPlugin(), + new PriceProductDataImportPlugin(), + new MerchantDataImportPlugin(), + new MerchantRelationshipDataImportPlugin(), + new PriceProductMerchantRelationshipDataImportPlugin(), + ]; + } +``` + +7. Add a plugin to Zed `ConsoleDependencyProvider`: + + +| Module | Plugin | Description | Method in Dependency Provider | +| --- | --- | --- | --- | +| `Console` | `PriceProductMerchantRelationshipDeleteConsole` | Deletes imported prices. | `getConsoleCommands` | + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + + + + + + +
    + +
    +``` + +9. Add the event subscriber to Zed `EventDependencyProvider`: + + +| Module | Event Subscriber Name | Method in EventDependencyProvider | +| --- | --- | --- | +| `Event` | `PriceProductMerchantRelationshipStorageEventSubscriber` | `getEventSubscriberCollection` | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductLabelStorageEventSubscriber()); + $eventSubscriberCollection->add(new ProductSetStorageEventSubscriber()); + $eventSubscriberCollection->add(new ProductSearchConfigStorageEventSubscriber()); + $eventSubscriberCollection->add(new PriceProductMerchantRelationshipStorageEventSubscriber()); +... +``` + +10. `Change/create` class in Zed `PriceProduct` module: `PriceProductDependencyProvider` + +**src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php** + +```php + + */ + protected function getCartPreCheckPlugins(Container $container): array + { + return [ + new ProductApprovalCartPreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new ProductApprovalPreReloadItemsPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ProductApprovalCheckoutPreConditionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductAbstractPreCreatePlugins(): array + { + return [ + new ProductApprovalProductAbstractPreCreatePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php** + +```php + + */ + protected function getProductPageSearchCollectionFilterPlugins(): array + { + return [ + new ProductApprovalProductPageSearchCollectionFilterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductConcreteCollectionFilterPluginInterface> + */ + protected function getProductConcreteCollectionFilterPlugins(): array + { + return [ + new ProductApprovalProductConcreteCollectionFilterPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductAbstractStorageCollectionFilterPlugins(): array + { + return [ + new ProductApprovalProductAbstractStorageCollectionFilterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductStorageExtension\Dependency\Plugin\ProductConcreteStorageCollectionFilterPluginInterface> + */ + protected function getProductConcreteStorageCollectionFilterPlugins(): array + { + return [ + new ProductApprovalProductConcreteStorageCollectionFilterPlugin(), + ]; + } +} +``` + +
    src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + */ + protected function getProductAbstractEditViewExpanderPlugins(): array + { + return [ + new ProductApprovalProductAbstractEditViewExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductTableQueryCriteriaExpanderPluginInterface> + */ + protected function getProductTableQueryCriteriaExpanderPluginInterfaces(): array + { + return [ + new ProductApprovalProductTableQueryCriteriaExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductTableConfigurationExpanderPluginInterface> + */ + protected function getProductTableConfigurationExpanderPlugins(): array + { + return [ + new ProductApprovalProductTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductTableDataBulkExpanderPluginInterface> + */ + protected function getProductTableDataBulkExpanderPlugins(): array + { + return [ + new ProductApprovalProductTableDataBulkExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductTableActionExpanderPluginInterface> + */ + protected function getProductTableActionExpanderPlugins(): array + { + return [ + new ProductApprovalProductTableActionExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the shop owner can approve products so customers can follow the review process in his company. + +{% endinfo_block %} + +2. Set up shopping list plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| ProductApprovalAddItemPreCheckPlugin | Checks the product approval status for shopping list item. | None | Spryker\Zed\ProductApproval\Communication\Plugin\ShoppingList | + +**src/Pyz/Zed/ShoppingList/ShoppingListDependencyProvider.php** + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new ProductApprovalAddItemPreCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that shopping list item can't be added to shopping list with not approved status. + +{% endinfo_block %} + +3. Set up product offer merchant portal plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|----------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------| +| ProductApprovalStatusProductTableExpanderPlugin | Expands GuiTableConfigurationTransfer and GuiTableDataResponseTransfer.data with approval status column. | None | Spryker\Zed\ProductMerchantPortalGui\Communication\Plugin\ProductOfferMerchantPortalGui | + +**src/Pyz/Zed/ProductOfferMerchantPortalGui/ProductOfferMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getProductTableExpanderPlugins(): array + { + return [ + new ProductApprovalStatusProductTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `GuiTableDataResponseTransfer.data` was extended with approval status column. + +{% endinfo_block %} + +### 5) Import data + +Follow the steps to import product approval data: + +1. Prepare data according to your requirements using the following demo data: + +
    +data/import/common/common/product_abstract_approval_status.csv + +```yaml +sku,approval_status +001,approved +002,approved +003,approved +004,approved +005,approved +006,approved +007,approved +008,approved +009,approved +010,approved +011,approved +012,approved +013,approved +014,approved +015,approved +016,approved +017,approved +018,approved +019,approved +020,approved +021,approved +022,approved +023,approved +024,approved +025,approved +026,approved +027,approved +028,approved +029,approved +030,approved +031,approved +032,approved +033,approved +034,approved +035,approved +036,approved +037,approved +038,approved +039,approved +040,approved +041,approved +042,approved +043,approved +044,approved +045,approved +046,approved +047,approved +048,approved +049,approved +050,approved +051,approved +052,approved +053,approved +054,approved +055,approved +056,approved +057,approved +058,approved +059,approved +060,approved +061,approved +062,approved +063,approved +064,approved +065,approved +066,approved +067,approved +068,approved +069,approved +070,approved +071,approved +072,approved +073,approved +074,approved +075,approved +076,approved +077,approved +078,approved +079,approved +080,approved +081,approved +082,approved +083,approved +084,approved +085,approved +086,approved +087,approved +088,approved +089,approved +090,approved +091,approved +092,approved +093,approved +094,approved +095,approved +096,approved +097,approved +098,approved +099,approved +100,approved +101,approved +102,approved +103,approved +104,approved +105,approved +106,approved +107,approved +108,approved +109,approved +110,approved +111,approved +112,approved +113,approved +114,approved +115,approved +116,approved +117,approved +118,approved +119,approved +120,approved +121,approved +122,approved +123,approved +124,approved +125,approved +126,approved +127,approved +128,approved +129,approved +130,approved +131,approved +132,approved +133,approved +134,approved +135,approved +136,approved +137,approved +138,approved +139,approved +140,approved +141,approved +142,approved +143,approved +144,approved +145,approved +146,approved +147,approved +148,approved +149,approved +150,approved +151,approved +152,approved +153,approved +154,approved +155,approved +156,approved +157,approved +158,approved +159,approved +160,approved +161,approved +162,approved +163,approved +164,approved +165,approved +166,approved +167,approved +168,approved +169,approved +170,approved +171,approved +172,approved +173,approved +174,approved +175,approved +176,approved +177,approved +178,approved +179,approved +180,approved +181,approved +182,approved +183,approved +184,draft +185,approved +186,approved +187,approved +188,approved +189,approved +190,approved +191,approved +192,approved +193,approved +194,approved +195,approved +196,denied +197,approved +198,approved +199,approved +200,approved +201,approved +202,approved +203,approved +204,approved +205,approved +206,approved +207,approved +208,approved +209,waiting_for_approval +210,approved +211,approved +212,approved +213,approved +214,approved +215,approved +216,approved +217,approved +218,approved +218,approved +219,approved +666,approved +fish-1,approved +potato-1,approved +cable-hdmi-1,approved +cable-vga-1,approved +``` + +
    + +| COLUMN | Required | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------|----------|-----------|--------------|-----------------------------------------------------------------| +| concrete_sku | ✓ | string | 214 | Unique abstract product identifier. | +| approval_status | ✓ | string | approved | Product status (draft, waiting_for_approval, approved, denied). | + +2. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|---------------------------------------------|---------------|-----------------------------------------------------------------------| +| ProductAbstractApprovalStatusDataImportPlugin | Imports abstract product approval statuses. | None | Spryker\Zed\ProductApprovalDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getQuoteUpdateBeforePlugins(): array + { + return [ + new SanitizeBundleItemsBeforeQuoteSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure bundle items are removed from the quote when all items are removed from the cart. Cart counter must show 0 items after all items are removed from the cart. + +{% endinfo_block %} + +## Alternative setup for handling large quantities of bundled products in the cart + +When a bundle product is added to cart with a big number of items–for example, 100-200 items–users may experience a slowdown in cart operations or even get an internal server error because of insufficient memory. + +To avoid this, you can use the following alternative plugins: + +| PLUGIN | ALTERNATIVE FOR | NAMESPACE | +|--------------------------------------------------------------|-----------------------------------------|---------------------------------------------------------------| +| RefreshBundlesWithUnitedItemsCartOperationPostSavePlugin | CartPostSaveUpdateBundlesPlugin | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| UnfoldBundlesToUnitedItemsItemExpanderPlugin | ExpandBundleItemsPlugin | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | +| ReplaceBundlesWithUnitedItemsCartChangeRequestExpanderPlugin | RemoveBundleChangeRequestExpanderPlugin | Spryker\Client\ProductBundle\Plugin\Cart | +| ReplaceBundlesWithUnitedItemsCartChangeRequestExpandPlugin | RemoveBundleChangeRequestExpanderPlugin | Spryker\Zed\ProductBundle\Communication\Plugin\PersistentCart | +| ExpandBundleItemsWithImagesPlugin | | Spryker\Zed\ProductBundle\Communication\Plugin\Cart | + +### 1) Set up plugins + +Remove the existing plugins and add the alternative ones: + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + // new ExpandBundleItemsPlugin(), + new ExpandBundleItemsWithImagesPlugin() + new UnfoldBundlesToUnitedItemsItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartOperationPostSavePluginInterface> + */ + protected function getPostSavePlugins(Container $container): array + { + return [ + // new CartPostSaveUpdateBundlesPlugin(), + new RefreshBundlesWithUnitedItemsCartOperationPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php*** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpandPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +- Do the following as a guest user: + 1. Add a product bundle to cart. + 2. Increase the bundle's quantity to a larger number—for example, 1,000 items. + 3. Decrease the quantity. + Make sure that increase and decrease operations are performed without a significant delay and don't fail with an exception. + 4. Repeat steps 1-3 as a registered user. + +- Make sure that the images of bundled products are displayed correctly in cart. + +{% endinfo_block %} + +### 2) Adjust a non-splittable quantity threshold for bundled items + +For orders with a large numbers of product bundles to be created successfully, the threshold for creating separate shipments out of bundled items needs to be not higher than 10. Lowering the threshold reduces the number of separate shipments in an order, decreasing the risk of insufficient memory errors during order creation. + +You can set the threshold using the `SalesQuantityConfig::BUNDLED_ITEM_NONSPLIT_QUANTITY_THRESHOLD` constant in the `SalesQuantity` module config. When the threshold is reached, bundled items are kept together instead of being split into individual items, ensuring they are processed as a single shipment. Lowering the threshold reduces the number of separate shipments in an order, decreasing the risk of insufficient memory errors during order creation. + +For details more details on, see [Install the Splittable Order Items feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html). + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-cart-feature0.md b/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-cart-feature0.md new file mode 100644 index 00000000000..bdd51784b3f --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-cart-feature0.md @@ -0,0 +1,184 @@ + + +This document describes how to install the Product Bundles + Cart feature. + +## Install feature core + +Follow the steps below to install feature core. + +### Prerequisites + +Install the required features: + +| NAME | EXPECTED DIRECTORY | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html)| +| Product Bundles | {{page.release_tag}} | [Install the Product Bundles feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html)| +| Cart | {{page.release_tag}} | | + + +### Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductBundleItemCountQuantityPlugin | Returns combined quantity of all items in the cart. | None | Spryker\Client\ProductBundle\Plugin\Cart | + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + // new ExpandBundleItemsPlugin(), + new ExpandBundleItemsWithImagesPlugin() + new UnfoldBundlesToUnitedItemsItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartOperationPostSavePluginInterface> + */ + protected function getPostSavePlugins(Container $container): array + { + return [ + // new CartPostSaveUpdateBundlesPlugin(), + new RefreshBundlesWithUnitedItemsCartOperationPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PersistentCart/PersistentCartDependencyProvider.php*** + +```php + + */ + protected function getRemoveItemsRequestExpanderPlugins(): array + { + return [ + // new RemoveBundleChangeRequestExpanderPlugin(), + new ReplaceBundlesWithUnitedItemsCartChangeRequestExpandPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Add a product bundle to the cart and increase its quantity to a larger number—for example, 1,000 items. Then, decrease the quantity. +Make sure that increase and decrease operations are performed without a significant delay and do not fail, with an exception. + +Perform this verification both as an anonymous and logged-in user. +Make sure that bundled products have an images that are displayed correctly in the cart. + +{% endinfo_block %} + +### 2) Adjust a non-splittable quantity threshold for bundled items in the `SalesQuantity` module config + +To create an order successfully with a large number of product bundles in the cart, the `SalesQuantityConfig::BUNDLED_ITEM_NONSPLIT_QUANTITY_THRESHOLD` constant in the `SalesQuantity` module config must be also set to a lower number—for example, 10. +This constant controls the bundle quantity threshold. When the threshold is reached, it keeps bundled items from splitting into individual items and adds them to the order as a single shipment. +The lower the threshold, the fewer number of separate shipments are created in an order, which decreases the potential probability of insufficient memory errors during the order creation process. + +For details, see [Install the Splittable Order Items feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-feature.md new file mode 100644 index 00000000000..65a39144bc7 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-bundles-feature.md @@ -0,0 +1,289 @@ + + +This integration guide expects the basic feature to be in place. It adds only the Product Bundle storage configuration. + +## Prerequisites + +Install the required features: + + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} |[Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| + +## 1) Install required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker-feature/product-bundles --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductBundle | vendor/spryker/product-bundle | +| ProductBundleStorage |vendor/spryker/product-bundle-storage| + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Set up database schema and transfer objects: + +1. Adjust the schema definition for entity changes to trigger events: + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_product_bundle | Entity.spy_product_bundle.create
    Entity.spy_product_bundle.update
    Entity.spy_product_bundle.delete | +| spy_product_bundle_storage |Entity.spy_product_bundle_storage.create
    Entity.spy_product_bundle_storage.update
    Entity.spy_product_bundle_storage.delete | + +**src/Pyz/Zed/ProductBundle/Persistence/Propel/Schema/spy_product_bundle.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/ProductBundleStorage/Persistence/Propel/Schema/spy_product_bundle_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductBundleStorageTransfer | class | created | src/Generated/Shared/Transfer/ProductBundleStorageTransfer | +| ProductForProductBundleStorageTransfer| class| created |src/Generated/Shared/Transfer/ProductForProductBundleStorageTransfer| +| SynchronizationDataTransfer |class |created |src/Generated/Shared/Transfer/SynchronizationDataTransfer| +| ProductBundleCriteriaFilterTransfer |class| created |src/Generated/Shared/Transfer/ProductBundleCriteriaFilterTransfer| +| ProductBundleStorageCriteriaTransfer |class| created |src/Generated/Shared/Transfer/ProductBundleStorageCriteriaTransfer| +| ProductBundleCollectionTransfer| class| created| src/Generated/Shared/Transfer/ProductBundleCollectionTransfer| +| ProductBundleTransfer| class |created |src/Generated/Shared/Transfer/ProductBundleTransfer| +| FilterTransfer| class |created |src/Generated/Shared/Transfer/FilterTransfer| +| ProductForBundleTransfer| class |created| src/Generated/Shared/Transfer/ProductForBundleTransfer| + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Ensure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_bundle_storage | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Ensure that propel entities have been generated successfully by checking their existence under `src/Orm/Zed/ProductBundleStorage`. + +{% endinfo_block %} + +3. Change the generated entity classes `SpyProductBundleStorage` and `SpyProductBundleStorageQuery` to extend from Spryker core classes as shown in the table below: + +| CLASS PATH | EXTENDS | +| --- | --- | +| src/Orm/Zed/ProductBundleStorage/Persistence/Base/SpyProductBundleStorage.php | Spryker\Zed\ProductBundleStorage\Persistence\Propel\AbstractSpyProductBundleStorage | +| src/Orm/Zed/ProductBundleStorage/Persistence/Base/SpyProductBundleStorageQuery.php | Spryker\Zed\ProductBundleStorage\Persistence\Propel\AbstractSpyProductBundleStorageQuery | + +{% info_block warningBox "Verification" %} + +Ensure that the changes have been implemented successfully by triggering the following methods and checking that the respective events are triggered: + +| PATH | METHOD NAME | EVENT | +| --- | --- | --- | +| src/Orm/Zed/ProductBundle/Persistence/Base/SpyProductBundle.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | Entity.spy_product_bundle.create
    Entity.spy_product_bundle.update
    Entity.spy_product_bundle.delete | +| src/Orm/Zed/ProductBundleStorage/Persistence/Base/SpyProductBundleStorage.php |sendToQueue() |Entity.spy_product_bundle_storage.create
    Entity.spy_product_bundle_storage.update
    Entity.spy_product_bundle_storage.delete| + +{% endinfo_block %} + +## 3) Configure export to the key-value store (Redis or Valkey) and Elasticsearch + +To configure export to the key-value store (Redis or Valkey) and Elasticsearch, follow the steps below: + +### Set up event listeners + +Set up tables to be published to the `spy_product_bundle_storage` on change (create, edit, delete) and synchronization of the data to Storage. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductBundlePublishWritePublisherPlugin | Publishes product bundle data when the publish product bundle event is triggered. | None | Spryker\Zed\ProductBundleStorage\Communication\Plugin\Publisher\ProductBundle | +| ProductBundleWritePublisherPlugin |Publishes product bundle data when product bundle create, update and delete events fire. | None |Spryker\Zed\ProductBundleStorage\Communication\Plugin\Publisher\ProductBundle| +| ProductBundleWritePublisherPlugin | Publishes product bundle data when the relevant concrete products create, update and delete events fire. | None | Spryker\Zed\ProductBundleStorage\Communication\Plugin\Publisher\ProductConcrete | +| ProductBundleSynchronizationDataBulkRepositoryPlugin| Synchronizes product bundle data to the storage. | None | Spryker\Zed\ProductBundleStorage\Communication\Plugin\Synchronization | + + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Check cart product image expander plugins - make sure you can see images related to cart items in the cart page in Yves. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-category-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-category-feature.md new file mode 100644 index 00000000000..64815d0edb3 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-category-feature.md @@ -0,0 +1,739 @@ + + +This document describes how to install the [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) + [Category](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/category-management-feature-overview.html#root-parent-and-child-categories) feature. + +## Install feature core + +Follow the steps below to install the Product + Category feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------|------------------------------------------------| +| ProductCategory | vendor/spryker/product-category | +| ProductCategorySearch | vendor/spryker/product-category-search | +| ProductCategoryStorage | vendor/spryker/product-category-storage | +| ProductCategoryFilterStorage | vendor/spryker/product-category-filter-storage | + +{% endinfo_block %} + +### 2) Set up configuration + +Set up the following configuration: + +**src/Pyz/Zed/ProductCategoryStorage/ProductCategoryStorageConfig.php** + +```php + + + + + + + +
    +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database. + +{% endinfo_block %} + +### 4) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published to the `spy_product_abstract_category_storage` and `spy_product_category_filter_storage` and synchronized to the Storage on create, edit, and delete changes: + +1. Set up publisher plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|-----------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------| +| CategoryIsActiveAndCategoryKeyWritePublisherPlugin | Publishes product category data by the `SpyCategory` entity events with modified columns. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\Category | +| CategoryStoreDeletePublisherPlugin | Publishes product category data by the `CategoryStore` un-publish event. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\Category | +| CategoryStoreWriteForPublishingPublisherPlugin | Publishes product category data by the `CategoryStore` publish event. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\Category | +| CategoryStoreWritePublisherPlugin | Publishes product category data by the`SpyCategoryStore` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\Category | +| CategoryWritePublisherPlugin | Publishes product category data by the `SpyCategory` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\Category | +| CategoryAttributeNameWritePublisherPlugin | Publishes product category data by the`SpyCategoryAttribute` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\CategoryAttribute | +| CategoryAttributeWritePublisherPlugin | Publishes product category data by the`SpyCategoryAttribute` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\CategoryAttribute | +| CategoryNodeWritePublisherPlugin | Publishes product category data by the `SpyCategoryNode` entity events with modified columns. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\CategoryNode | +| CategoryUrlAndResourceCategorynodeWritePublisherPlugin | Publishes product category data by the `SpyUrl` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\CategoryUrl | +| CategoryUrlWritePublisherPlugin | Publishes product category data by the `SpyUrl` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\CategoryUrl | +| ProductCategoryWriteForPublishingPublisherPlugin | Publishes product category data by the `ProductCategory` publishing events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\ProductCategory | +| ProductCategoryWritePublisherPlugin | Publishes product category data by the`SpyProductCategory` entity events. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher\ProductCategory | + +
    +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +getProductCategoryStoragePlugins(), + ); + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getProductCategoryStoragePlugins(): array + { + return [ + new CategoryStoreWritePublisherPlugin(), + new CategoryStoreWriteForPublishingPublisherPlugin(), + new CategoryStoreDeletePublisherPlugin(), + new ProductCategoryStorageCategoryWritePublisherPlugin(), + new CategoryIsActiveAndCategoryKeyWritePublisherPlugin(), + new ProductCategoryAttributeWritePublisherPlugin(), + new CategoryAttributeNameWritePublisherPlugin(), + new ProductCategoryNodeWritePublisherPlugin(), + new CategoryUrlWritePublisherPlugin(), + new CategoryUrlAndResourceCategorynodeWritePublisherPlugin(), + new ProductCategoryWriteForPublishingPublisherPlugin(), + new ProductCategoryWritePublisherPlugin(), + ]; + } +} +``` + +
    + +2. Set up event listeners: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|-----------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------| +| ProductCategoryFilterStorageEventSubscriber | Registers listeners that publish category information to the storage when a related entity changes. | | Spryker\Zed\ProductCategoryFilterStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductCategoryFilterStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +3. Set up trigger plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|----------------------------------------------------------------------|---------------|-------------------------------------------------------------------| +| ProductCategoryPublisherTriggerPlugin | Retrieves product categories based on the provided limit and offset. | | Spryker\Zed\ProductCategoryStorage\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + +An expected data fragment example: `product_category_filter:8` + +```json +{ + "id_category":8, + "filter_data":{ + "filters":[ + { + "isActive":true, + "label":"label", + "key":"label" + }, + { + "isActive":false, + "label":"color", + "key":"color" + }, + { + "isActive":false, + "label":"storage_capacity", + "key":"storage_capacity" + }, + { + "isActive":false, + "label":"brand", + "key":"brand" + }, + { + "isActive":false, + "label":"touchscreen", + "key":"touchscreen" + }, + { + "isActive":false, + "label":"weight", + "key":"weight" + }, + { + "isActive":false, + "label":"merchant_name", + "key":"merchant_name" + }, + { + "isActive":false, + "label":"category", + "key":"category" + }, + { + "isActive":false, + "label":"price", + "key":"price-DEFAULT-EUR-GROSS_MODE" + }, + { + "isActive":false, + "label":"rating", + "key":"rating" + } + ] + } +} +``` + + + +{% endinfo_block %} + + +### 5) Set up behavior + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------| +| ProductCategoryMapExpanderPlugin | Expands `PageMapTransfer` with category map data. | | Spryker\Zed\ProductCategorySearch\Communication\Plugin\ProductPageSearch\Elasticsearch | +| ProductCategoryPageDataExpanderPlugin | Expands `ProductPageSearchTransfer` with category related data. | | Spryker\Zed\ProductCategorySearch\Communication\Plugin\ProductPageSearch | +| ProductCategoryPageDataLoaderPlugin | Expands `ProductPayloadTransfer.categories` with product category entities. | | Spryker\Zed\ProductCategorySearch\Communication\Plugin\ProductPageSearch | +| ProductCategoryRelationReadPlugin | Gets localized products abstract names by category. | | Spryker\Zed\ProductCategory\Communication\Plugin\CategoryGui | +| RemoveProductCategoryRelationPlugin | Removes relations between category and products. | | Spryker\Zed\ProductCategory\Communication\Plugin | +| ProductUpdateEventTriggerCategoryRelationUpdatePlugin | Triggers product update events for products that are assigned to the given category and its child categories. | | Spryker\Zed\ProductCategory\Communication\Plugin\Category | +| ParentCategoryIdsProductAbstractCategoryStorageCollectionExpanderPlugin | Expands product categories with their parent category IDs. | | Spryker\Client\CategoryStorage\Plugin\ProductCategoryStorage | + +
    +src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that the product abstract contains the category property in Elasticsearch: + +**Data fragment** + +```json +{ + "_id":"product_abstract:at:de_de:42", + "_source":{ + "store":"AT", + "locale":"de_DE", + "type":"product_abstract", + "is-active":true, + "search-result-data":{ + "id_product_abstract":42, + "abstract_sku":"042", + "abstract_name":"Samsung Galaxy S7", + "url":"/de/samsung-galaxy-s7-42", + "type":"product_abstract", + "add_to_cart_sku":"042_31040075", + }, + "category":{ + "all-parents":[ + 11, + 12, + 1 + ], + "direct-parents":[ + "12" + ] + }, + } +} +``` + +{% endinfo_block %} + +**src/Pyz/Zed/CategoryGui/CategoryGuiDependencyProvider.php** + +```php +> Category**. +2. For any category of your choice, in **Actions**, select **Delete**. +3. On the **DELETE CATEGORY: `{CATEGORY_NAME}`** page that opens, make sure the **Products to be de-assigned** field is present. The `{CATEGORY_NAME}` placeholder stands for the name of the category that you choose in step 2. + +**src/Pyz/Zed/Category/CategoryDependencyProvider.php** + +```php + + */ + protected function getProductAbstractCategoryStorageCollectionExpanderPlugins(): array + { + return [ + new ParentCategoryIdsProductAbstractCategoryStorageCollectionExpanderPlugin(), + ]; + } +} +``` + +## Install feature frontend + +Follow the steps below to install the Product + Category feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + + +### 1) Install the required modules + +```bash +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------|---------------------------------------------| +| ProductCategoryWidget | vendor/spryker-shop/product-category-widget | + +{% endinfo_block %} + +### 2) Set up widgets + +Register the following global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|----------------------------------------|--------------------------------------------------------------|-----------------------------------------------| +| ProductBreadcrumbsWithCategoriesWidget | Displays category breadcrumbs on the product details page. | SprykerShop\Yves\ProductCategoryWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new ProductComparisonPageRouteProviderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure the product comparison page is available at `https://mysprykershop.com/product-comparison`. + +{% endinfo_block %} + +### 4) Set up widgets + +Set up widgets as follows: + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------| +| ComparisonProductTogglerComparisonListWidget | Displays the **Compare** and **Remove from Compare** buttons for adding and removing a product from the comparison list. | | SprykerShop\Yves\ProductComparisonWidget\Widget | +| LinkToProductComparisonListWidget | Displays a link to the Product Comparison page. | | SprykerShop\Yves\ProductComparisonWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ComparisonProductTogglerComparisonListWidget::class, + LinkToProductComparisonListWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Verify that the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +|----------------------------------------------|--------------------------------------------------------------------------------| +| ComparisonProductTogglerComparisonListWidget | Make sure that, on the product details page, you can add a product to a product comparison list. | +| LinkToProductComparisonListWidget | Make sure that the `Product comparison` menu item is displayed in the menu bar. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-configuration-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-configuration-feature.md new file mode 100644 index 00000000000..7a637857c74 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-configuration-feature.md @@ -0,0 +1,2252 @@ + + +This document describes how to install the [Product Configuration](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) feature. + + +## Install feature core + +Follow the steps below to install the Product Configuration feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Wishlist | {{page.release_tag}} || +| ShoppingList | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require "spryker-feature/configurable-product":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|------------------------------------------------------| +| ProductConfiguration | vendor/spryker/product-configuration | +| ProductConfigurationCart | vendor/spryker/product-configuration-cart | +| ProductConfigurationDataImport | vendor/spryker/product-configuration-data-import | +| ProductConfigurationGui | vendor/spryker/product-configuration-gui | +| ProductConfigurationPersistentCart | vendor/spryker/product-configuration-persistent-cart | +| ProductConfigurationStorage | vendor/spryker/product-configuration-storage | +| ProductConfigurationWishlist | vendor/spryker/product-configuration-wishlist | +| ProductConfigurationShoppingList | vendor/spryker/product-configuration-shopping-list | +| SalesProductConfiguration | vendor/spryker/sales-product-configuration | +| SalesProductConfigurationGui | vendor/spryker/sales-product-configuration-gui | + +{% endinfo_block %} + +### 2) Set up the configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------| +| ProductConfigurationConstants::SPRYKER_PRODUCT_CONFIGURATOR_ENCRYPTION_KEY | Provides an encryption key for checksum validation. It is used for the checksum generation of the product configurator data based on the provided key. | Spryker\Shared\ProductConfiguration\ProductConfigurationConstants | +| ProductConfigurationConstants::SPRYKER_PRODUCT_CONFIGURATOR_HEX_INITIALIZATION_VECTOR | Provides a hex initialization vector for the checksum validation. It is used as a hex initialization vector for the checksum generation of product configurator data. | Spryker\Shared\ProductConfiguration\ProductConfigurationConstants | +| KernelConstants::DOMAIN_WHITELIST | Defines a set of whitelist domains that every external URL is checked against before redirecting. | Spryker\Shared\Kernel\KernelConstants | + +**config/Shared/config_default.php** + +```php +>> Product Configuration +$config[ProductConfigurationConstants::SPRYKER_PRODUCT_CONFIGURATOR_ENCRYPTION_KEY] = getenv('SPRYKER_PRODUCT_CONFIGURATOR_ENCRYPTION_KEY') ?: 'change123'; +$config[ProductConfigurationConstants::SPRYKER_PRODUCT_CONFIGURATOR_HEX_INITIALIZATION_VECTOR] = getenv('SPRYKER_PRODUCT_CONFIGURATOR_HEX_INITIALIZATION_VECTOR') ?: '0c1ffefeebdab4a3d839d0e52590c9a2'; +$config[KernelConstants::DOMAIN_WHITELIST][] = getenv('SPRYKER_PRODUCT_CONFIGURATOR_HOST'); +``` + +{% info_block warningBox "Verification" %} + +To make sure that the changes have been applied, check that the exemplary product configurator opens at `http://date-time-configurator-example.mysprykershop.com`. + +{% endinfo_block %} + +{% info_block infoBox %} + +You can control whether particular fields must be filtered out and not used for Product Configuration instance hash generation. You can do it through the `ProductConfigurationConfig::getConfigurationFieldsNotAllowedForEncoding()` config setting. + +{% endinfo_block %} + +**src/Pyz/Service/ProductConfiguration/ProductConfigurationConfig.php** + +```php + + */ + public function getConfigurationFieldsNotAllowedForEncoding(): array + { + return [ + ProductConfigurationInstanceTransfer::QUANTITY, + ]; + } +} +``` + +{% info_block warningBox "Warning" %} + +Specify only fields that are defined in the transfer definition. Otherwise, you must define them on the project level. + +{% endinfo_block %} + +**src/Pyz/Shared/ProductConfiguration/Transfer/product_configuration.transfer.xml** + +```xml + + + + + + +``` + +### 3) Set up database schema and transfer objects + +1. For entity changes to trigger events, adjust the schema definition: + +**src/Pyz/Zed/ProductConfiguration/Persistence/Propel/Schema/spy_product_configuration.schema.xml** + +```xml + + + + + + +
    +
    + +``` + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| spy_product_configuration | Entity.spy_product_configuration.create
    Entity.spy_product_configuration.update
    Entity.spy_product_configuration.delete | + +**src/Pyz/Zed/ProductConfigurationStorage/Persistence/Propel/Schema/spy_product_configuration_storage.schema.xml** + +```xml + + + + + + +
    +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|------------------------------------------------------------|--------|---------| +| spy_product_configuration | table | created | +| spy_product_configuration_storage | table | created | +| spy_sales_order_item_configuration | table | created | +| spy_wishlist_item.product_configuration_instance_data | column | added | +| spy_shopping_list_item.product_configuration_instance_data | column | added | + +Make sure that the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------------|-------|---------|------------------------------------------------------------------------------------| +| CartChangeTransfer | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| CartItemQuantityTransfer | class | created | src/Generated/Shared/Transfer/CartItemQuantityTransfer | +| CheckoutErrorTransfer | class | created | src/Generated/Shared/Transfer/CheckoutErrorTransfer | +| CheckoutResponseTransfer | class | created | src/Generated/Shared/Transfer/CheckoutResponseTransfer | +| CompanyUserTransfer | class | created | src/Generated/Shared/Transfer/CompanyUserTransfer | +| CurrencyTransfer | class | created | src/Generated/Shared/Transfer/CurrencyTransfer | +| CustomerTransfer | class | created | src/Generated/Shared/Transfer/CustomerTransfer | +| DataImporterConfigurationTransfer | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReportTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| ErrorTransfer | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| FilterTransfer | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| ItemTransfer | class | created | src/Generated/Shared/Transfer/ItemTransfer | +| ItemReplaceTransfer | class | created | src/Generated/Shared/Transfer/ItemReplaceTransfer | +| MessageTransfer | class | created | src/Generated/Shared/Transfer/MessageTransfer | +| MoneyValueTransfer | class | created | src/Generated/Shared/Transfer/MoneyValueTransfer | +| OrderTransfer | class | created | src/Generated/Shared/Transfer/OrderTransfer | +| PaginationTransfer | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| PersistentCartChangeTransfer | class | created | src/Generated/Shared/Transfer/PersistentCartChangeTransfer | +| PriceProductTransfer | class | created | src/Generated/Shared/Transfer/PriceProductTransfer | +| PriceProductDimensionTransfer | class | created | src/Generated/Shared/Transfer/PriceProductDimensionTransfer | +| PriceProductFilterTransfer | class | created | src/Generated/Shared/Transfer/PriceProductFilterTransfer | +| ProductConcreteTransfer | class | created | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| ProductConfigurationTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationTransfer | +| ProductConfigurationAggregationTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationAggregationTransfer | +| ProductConfigurationCollectionTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationCollectionTransfer | +| ProductConfigurationConditionsTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationConditionsTransfer | +| ProductConfigurationCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationCriteriaTransfer | +| ProductConfigurationFilterTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationFilterTransfer | +| ProductConfigurationInstanceTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationInstanceTransfer | +| ProductConfigurationInstanceCollectionTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationInstanceCollectionTransfer | +| ProductConfigurationInstanceConditionsTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationInstanceConditionsTransfer | +| ProductConfigurationInstanceCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationInstanceCriteriaTransfer | +| ProductConfigurationStorageTransfer | class | created | src/Generated/Shared/Transfer/ProductConfigurationStorageTransfer | +| ProductConfiguratorPageResponseTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorPageResponseTransfer | +| ProductConfiguratorRedirectTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorRedirectTransfer | +| ProductConfiguratorRequestTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorRequestTransfer | +| ProductConfiguratorRequestDataTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorRequestDataTransfer | +| ProductConfiguratorResponseTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorResponseTransfer | +| ProductConfiguratorResponseProcessorResponseTransfer | class | created | src/Generated/Shared/Transfer/ProductConfiguratorResponseProcessorResponseTransfer | +| ProductStorageCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ProductStorageCriteriaTransfer | +| ProductViewTransfer | class | created | src/Generated/Shared/Transfer/ProductViewTransfer | +| QuoteTransfer | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteErrorTransfer | class | created | src/Generated/Shared/Transfer/QuoteErrorTransfer | +| QuoteRequestTransfer | class | created | src/Generated/Shared/Transfer/QuoteRequestTransfer | +| QuoteRequestResponseTransfer | class | created | src/Generated/Shared/Transfer/QuoteRequestResponseTransfer | +| QuoteRequestVersionTransfer | class | created | src/Generated/Shared/Transfer/QuoteRequestVersionTransfer | +| QuoteResponseTransfer | class | created | src/Generated/Shared/Transfer/QuoteResponseTransfer | +| SalesOrderItemConfigurationTransfer | class | created | src/Generated/Shared/Transfer/SalesOrderItemConfigurationTransfer | +| SalesOrderItemConfigurationFilterTransfer | class | created | src/Generated/Shared/Transfer/SalesOrderItemConfigurationFilterTransfer | +| SalesProductConfigurationTemplateTransfer | class | created | src/Generated/Shared/Transfer/SalesProductConfigurationTemplateTransfer | +| SaveOrderTransfer | class | created | src/Generated/Shared/Transfer/SaveOrderTransfer | +| ShoppingListTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListTransfer | +| ShoppingListItemTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItemCollectionTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListItemCollectionTransfer | +| ShoppingListItemResponseTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListItemResponseTransfer | +| ShoppingListPreAddItemCheckResponseTransfer | class | created | src/Generated/Shared/Transfer/ShoppingListPreAddItemCheckResponseTransfer | +| SortTransfer | class | created | src/Generated/Shared/Transfer/SortTransfer | +| StoreTransfer | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| SynchronizationDataTransfer | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| WishlistTransfer | class | created | src/Generated/Shared/Transfer/WishlistTransfer | +| WishlistItemTransfer | class | created | src/Generated/Shared/Transfer/WishlistItemTransfer | +| WishlistItemCollectionTransfer | class | created | src/Generated/Shared/Transfer/WishlistItemCollectionTransfer | +| WishlistItemCriteriaTransfer | class | created | src/Generated/Shared/Transfer/WishlistItemCriteriaTransfer | +| WishlistItemMetaTransfer | class | created | src/Generated/Shared/Transfer/WishlistItemMetaTransfer | +| WishlistItemResponseTransfer | class | created | src/Generated/Shared/Transfer/WishlistItemResponseTransfer | +| WishlistMoveToCartRequestTransfer | class | created | src/Generated/Shared/Transfer/WishlistMoveToCartRequestTransfer | +| WishlistMoveToCartRequestCollectionTransfer | class | created | src/Generated/Shared/Transfer/WishlistMoveToCartRequestCollectionTransfer | +| WishlistPreAddItemCheckResponseTransfer | class | created | src/Generated/Shared/Transfer/WishlistPreAddItemCheckResponseTransfer | +| WishlistPreUpdateItemCheckResponseTransfer | class | created | src/Generated/Shared/Transfer/WishlistPreUpdateItemCheckResponseTransfer | + +{% endinfo_block %} + +### 4) Set up behavior + +Set up the following behaviors: + +1. Set up Publishers and a Queue processor: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------|----------------|---------------------------------------------------------------------------------------------| +| ProductConfigurationWritePublisherPlugin | Updates product configuration when triggered by provided product configuration events. | None | Spryker\Zed\ProductConfigurationStorage\Communication\Plugin\Publisher\ProductConfiguration | +| ProductConfigurationDeletePublisherPlugin | Removes all data from the product configuration storage when triggered by provided product configuration events. | None | Spryker\Zed\ProductConfigurationStorage\Communication\Plugin\Publisher\ProductConfiguration | +| SynchronizationStorageQueueMessageProcessorPlugin | Reads messages from the synchronization queue and saves them to the storage. | None | \Spryker\Zed\Synchronization\Communication\Plugin\Queue | + + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getProductConfigurationStoragePlugins() + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getProductConfigurationStoragePlugins(): array + { + return [ + new ProductConfigurationWritePublisherPlugin(), + new ProductConfigurationDeletePublisherPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ProductConfigurationStorageConfig::PRODUCT_CONFIGURATION_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + QueueNameFoo, (Queue and error queue will be created: QueueNameFoo and QueueNameFoo.error) + * QueueNameBar => [ + * RoutingKeyFoo => QueueNameBaz, // (Additional queues can be defined by several routing keys) + * ], + * + * @see https://www.rabbitmq.com/tutorials/amqp-concepts.html + * + * @return array + */ + protected function getQueueConfiguration(): array + { + return [ + ProductConfigurationStorageConfig::PRODUCT_CONFIGURATION_SYNC_STORAGE_QUEUE, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, after creating a product configuration, you can find the corresponding record in the `spy_product_configuration_storage` table. + +{% endinfo_block %} + +2. Set up, regenerate, and resync features by setting up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|------------------------------------------------------------------------------------------------------------|----------------|------------------------------------------------------------------------------| +| ProductConfigurationPublisherTriggerPlugin | Triggers publish events for product configuration data. | None | Spryker\Zed\ProductConfigurationStorage\Communication\Plugin\Publisher | +| ProductConfigurationSynchronizationDataRepositoryPlugin | Allows synchronizing the content of the entire `spy_product_configuration_storage` table into the storage. | None | Spryker\Zed\ProductConfigurationStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductConfigurationPublisherTriggerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductConfigurationStorage/ProductConfigurationStorageConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductConfigurationSynchronizationDataRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the product configuration trigger plugin works correctly: +1. Fill the `spy_product_configuration` table with some data. +2. Run the `console publish:trigger-events -r product_configuration` command. +3. Make sure that the `spy_product_configuration_storage` table has been filled with respective data. +4. In your system, make sure that storage entries are displayed with the `kv:product_configuration:sku` mask. + +Make sure that the product configuration synchronization plugin works correctly: +1. Fill the `spy_product_configuration_storage` table with some data. +2. Run the `console sync:data product_configuration` command. +3. In your system, make sure that the storage entries are displayed with the `kv:product_configuration:sku` mask. + +{% endinfo_block %} + +3. Set up quantity counter plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|-------------------------------------------------------------------------------------| +| ProductConfigurationCartItemQuantityCounterStrategyPlugin | Finds a provided item in a provided cart. Counts the item quantity by the item SKU and the product configuration instance. Returns the item quantity. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\Availability | +| ProductConfigurationCartItemQuantityCounterStrategyPlugin | Finds a provided item in a provided cart. Counts the item quantity by the item SKU and the product configuration instance. Returns the item quantity. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\AvailabilityCartConnector | +| ProductConfigurationCartItemQuantityCounterStrategyPlugin | Finds a provided item in a provided changed cart. Counts the item quantity by the item SKU and the product configuration instance in add and subtract directions. Returns the item quantity. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\PriceCartConnector | + +**src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php** + +```php + + */ + protected function getCartItemQuantityCounterStrategyPlugins(): array + { + return [ + new ProductConfigurationCartItemQuantityCounterStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/AvailabilityCartConnector/AvailabilityCartConnectorDependencyProvider.php** + +```php + + */ + public function getCartItemQuantityCounterStrategyPlugins(): array + { + return [ + new ProductConfigurationCartItemQuantityCounterStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorDependencyProvider.php** + +```php + + */ + protected function getCartItemQuantityCounterStrategyPlugins(): array + { + return [ + new ProductConfigurationCartItemQuantityCounterStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the product configuration item quantity counter plugins work correctly: +1. Configure a configurable product. +2. Add the product to the cart. +3. Make sure that the product has been successfully added to the cart. + +{% endinfo_block %} + +4. Set up cart plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-----------------------------------------------------------------------------------------|----------------|-------------------------------------------------------------------------| +| ProductConfigurationGroupKeyItemExpanderPlugin | Expands the items that have a product configuration instance property with a group key. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\Cart | +| ProductConfigurationCartChangeRequestExpanderPlugin | Expands provided changed cart items with product configuration instances. | None | Spryker\Client\ProductConfigurationCart\Plugin\Cart | +| ProductConfigurationPersistentCartRequestExpanderPlugin | Expands provided changed persistent cart items with product configuration instances. | None | Spryker\Client\ProductConfigurationPersistentCart\Plugin\PersistentCart | + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new ProductConfigurationGroupKeyItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getAddItemsRequestExpanderPlugins() + { + return [ + new ProductConfigurationCartChangeRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php + + */ + protected function getChangeRequestExtendPlugins(): array + { + return [ + new ProductConfigurationPersistentCartRequestExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the cart plugins work correctly: +1. Configure a configurable product. +2. Add the configured product to the cart. +3. Make sure that the product has been successfully added to the cart. + +{% endinfo_block %} + +5. Set up checkout plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|--------------------------------------------------------------------------------------------------------|----------------|--------------------------------------------------------------------| +| ProductConfigurationCheckoutPreConditionPlugin | Returns `true` if all product configuration items in a quote are complete. Otherwise, returns `false`. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\Checkout | + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ProductConfigurationCheckoutPreConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that checkout plugins work correctly: +1. Add a configurable product to the cart without completing its configuration. +2. Try to place an order with the product. +3. Make sure that the order is not placed and you get an error message about incomplete configuration. + +{% endinfo_block %} + +6. Set up product management plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|--------------------------------------------------------------------------------------|----------------|----------------------------------------------------------------------------| +| ProductConfigurationProductTableDataBulkExpanderPlugin | Expands product items with a configurable product type if they have a configuration. | None | Spryker\Zed\ProductConfigurationGui\Communication\Plugin\ProductManagement | + +**src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php** + +```php + + */ + protected function getProductTableDataBulkExpanderPlugins(): array + { + return [ + new ProductConfigurationProductTableDataBulkExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Check that product management plugins work correctly: +1. Add the configuration to the product using data import. +2. In the Back Office, go to **Catalog > Products**. +3. Find a product with a configuration that you created before. +4. Check that product is marked as configurable. + +{% endinfo_block %} + +7. Set up sales plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|--------------------------------------------------------------------------------------------------------------|----------------|------------------------------------------------------------------| +| ProductConfigurationOrderItemExpanderPlugin | Expands items with product configuration. | None | Spryker\Zed\SalesProductConfiguration\Communication\Plugin\Sales | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new ProductConfigurationOrderItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new ProductConfigurationOrderItemsPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that sales plugins work correctly: +1. Configure a configurable product. +2. Place an order with the product. +3. Check that the `spy_sales_order_item_configuration` database table contains a record with the configurable order item. + +{% endinfo_block %} + +8. Set up price product plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|----------------|------------------------------------------------------------------------------| +| ProductConfigurationPriceProductExpanderPlugin | Expands the list of price product transfers with product configuration prices. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\PriceCartConnector | +| ProductConfigurationPriceProductFilterPlugin | Filters out all but product configuration prices. | None | Spryker\Service\ProductConfiguration\Plugin\PriceProduct | +| ProductConfigurationVolumePriceProductFilterPlugin | Finds a corresponding volume price for a provided quantity. | None | Spryker\Service\ProductConfiguration\Plugin\PriceProduct | +| ProductConfigurationStoragePriceDimensionPlugin | Returns product configuration prices. If a product configuration instance or prices weren't set, returns an empty array . | None | Spryker\Client\ProductConfigurationStorage\Plugin\PriceProductStorage | +| ProductConfigurationPriceProductFilterExpanderPlugin | Expands `PriceProductFilterTransfer` with a product configuration instance. | None | Spryker\Client\ProductConfigurationStorage\Plugin\PriceProductStorage | +| PriceProductVolumeProductConfigurationPriceExtractorPlugin | Extracts volume prices from price product data. | None | Spryker\Client\ProductConfiguration\Plugin | + +**src/Pyz/Zed/PriceCartConnector/PriceCartConnectorDependencyProvider.php** + +```php + + */ + protected function getPriceProductExpanderPlugins(): array + { + return [ + new ProductConfigurationPriceProductExpanderPlugin(), + ]; + } +} +``` + + +**src/Pyz/Service/PriceProduct/PriceProductDependencyProvider.php** + +```php + + */ + protected function getPriceProductDecisionPlugins(): array + { + return array_merge([ + new ProductConfigurationPriceProductFilterPlugin(), + new ProductConfigurationVolumePriceProductFilterPlugin(), + ], parent::getPriceProductDecisionPlugins()); + } +} +``` + +**src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** + +```php + + */ + public function getPriceDimensionStorageReaderPlugins(): array + { + return [ + new ProductConfigurationStoragePriceDimensionPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\PriceProductStorageExtension\Dependency\Plugin\PriceProductFilterExpanderPluginInterface> + */ + protected function getPriceProductFilterExpanderPlugins(): array + { + return [ + new ProductConfigurationPriceProductFilterExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductConfiguration/ProductConfigurationDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationPriceExtractorPlugins(): array + { + return [ + new PriceProductVolumeProductConfigurationPriceExtractorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the product configuration price overrides the default product price: +1. Configure a configurable product with a regular price and volume price. +2. Add the product to the cart with the amount required for the volume prices to apply. +3. Make sure that the volume price applies. + +{% endinfo_block %} + +9. Set up availability plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|--------------------------------------------------------------------------------|----------------|-----------------------------------------------------------------------| +| ProductConfigurationAvailabilityStorageStrategyPlugin | Checks whether a product configuration provides an availability for a product. | None | Spryker\Client\ProductConfigurationStorage\Plugin\AvailabilityStorage | + +**src/Pyz/Client/AvailabilityStorage/AvailabilityStorageDependencyProvider.php** + +```php + + */ + public function getAvailabilityStorageStrategyPlugins(): array + { + return [ + new ProductConfigurationAvailabilityStorageStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that availability plugins work correctly: +1. Configure a configurable product that has regular availability. +2. Make sure that you cannot add to the cart more items than are available for the configuration. + + +{% endinfo_block %} + +10. Set up product plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|-----------------------------------------|----------------|------------------------------------------------------------------| +| ProductViewProductConfigurationExpanderPlugin | Expands a product with a configuration. | None | Spryker\Client\ProductConfigurationStorage\Plugin\ProductStorage | + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + return [ + new ProductViewProductConfigurationExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +On the **Product Details** page of a configurable product, make sure that you can see product configuration information. + +{% endinfo_block %} + +11. Set up product configuration check plugins for the quote request module: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------|--------------------------------------------------------------------|----------------|-------------------------------------------------------------| +| ProductConfigurationQuoteRequestQuoteCheckPlugin | Validates product configuration before the quote request creation. | None | Spryker\Client\ProductConfigurationCart\Plugin\QuoteRequest | + +**src/Pyz/Client/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestQuoteCheckPlugins(): array + { + return [ + new ProductConfigurationQuoteRequestQuoteCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the plugins work correctly: +1. Add a configurable product with an incomplete configuration to the cart. +2. Check that the Checkout and Request for quote buttons are not available. + +{% endinfo_block %} + +12. Set up product configuration validation plugins for the quote request module: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|---------------------------------------------------------------------|----------------|------------------------------------------------------------------------| +| ProductConfigurationQuoteRequestValidatorPlugin | Validates customers' quote requests with the validators stack. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\QuoteRequest | +| ProductConfigurationQuoteRequestUserValidatorPlugin | Validates agents assists' quote requests with the validators stack. | None | Spryker\Zed\ProductConfigurationCart\Communication\Plugin\QuoteRequest | + +**src/Pyz/Zed/QuoteRequest/QuoteRequestDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestValidatorPlugins(): array + { + return [ + new ProductConfigurationQuoteRequestValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\QuoteRequestExtension\Dependency\Plugin\QuoteRequestUserValidatorPluginInterface> + */ + protected function getQuoteRequestUserValidatorPlugins(): array + { + return [ + new ProductConfigurationQuoteRequestUserValidatorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the plugins work correctly: + +1. Log in as an agent assist. +2. Add a configurable product with an incomplete configuration to the cart. +3. Select **Save** or **Save and Back to Edit**. +4. Make sure that the validation error message appears. + +{% endinfo_block %} + +13. Set up wishlist plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------|------------------------------------------------------------------------| +| ProductConfigurationItemExpanderPlugin | Expands the `WishlistItem` transfer object with product configuration data. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistAddItemPreCheckPlugin | Checks whether product configuration exists by provided `WishlistItem.sku` transfer property. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistReloadItemsPlugin | Expands the `WishlistItem` transfers collection in `Wishlist` transfer object with product configuration data. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistPreAddItemPlugin | Prepares product configuration attached to a wishlist item to be saved. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product configuration data. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistPreUpdateItemPlugin | Prepares product configuration attached to a wishlist item to be saved. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistUpdateItemPreCheckPlugin | Checks whether product configuration exists by the provided `WishlistItem.sku` transfer property. | None | Spryker\Zed\ProductConfigurationWishlist\Communication\Plugin\Wishlist | +| ProductConfigurationWishlistCollectionToRemoveExpanderPlugin | Expands `WishlistItemCollectionTransfer` with successfully added wishlist items to a cart. | None | Spryker\Client\ProductConfigurationWishlist\Plugin\Wishlist | +| ProductConfigurationWishlistPostMoveToCartCollectionExpanderPlugin | Expands `WishlistMoveToCartRequestCollectionTransfer` with not valid product configuration items. | None | Spryker\Client\ProductConfigurationWishlist\Plugin\Wishlist | +| ProductConfigurationWishlistItemPriceProductExpanderPlugin | Expands the collection of product price transfers with product configuration prices taken from `ProductViewTransfer`. | None | Spryker\Client\ProductConfigurationWishlist\Plugin\PriceProductStorage | + + +
    src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php + +```php + + */ + protected function getItemExpanderPlugins() + { + return [ + new ProductConfigurationItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\AddItemPreCheckPluginInterface> + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new ProductConfigurationWishlistAddItemPreCheckPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\WishlistReloadItemsPluginInterface> + */ + protected function getWishlistReloadItemsPlugins(): array + { + return [ + new ProductConfigurationWishlistReloadItemsPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\WishlistPreAddItemPluginInterface> + */ + protected function getWishlistPreAddItemPlugins(): array + { + return [ + new ProductConfigurationWishlistPreAddItemPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\WishlistItemExpanderPluginInterface> + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new ProductConfigurationWishlistItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\WishlistPreUpdateItemPluginInterface> + */ + protected function getWishlistPreUpdateItemPlugins(): array + { + return [ + new ProductConfigurationWishlistPreUpdateItemPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\UpdateItemPreCheckPluginInterface> + */ + protected function getUpdateItemPreCheckPlugins(): array + { + return [ + new ProductConfigurationWishlistUpdateItemPreCheckPlugin(), + ]; + } +} + +``` + +
    + +**src/Pyz/Client/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistPostMoveToCartCollectionExpanderPlugins(): array + { + return [ + new ProductConfigurationWishlistPostMoveToCartCollectionExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\WishlistExtension\Dependency\Plugin\WishlistCollectionToRemoveExpanderPluginInterface> + */ + protected function getWishlistCollectionToRemoveExpanderPlugins(): array + { + return [ + new ProductConfigurationWishlistCollectionToRemoveExpanderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** + +```php + + */ + protected function getPriceProductExpanderPlugins(): array + { + return [ + new ProductConfigurationWishlistItemPriceProductExpanderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that the wishlist plugins work correctly: +1. Configure a configurable product. +2. Add the configured product to a wishlist. +3. Make sure that the product has been successfully added to the wishlist. + +{% endinfo_block %} + +14. Set up shopping list plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|----------------|--------------------------------------------------------------------------------| +| ProductConfigurationShoppingListItemMapperPlugin | Adds product configuration to a shopping list item if product configuration found. | None | Spryker\Client\ProductConfigurationShoppingList\Plugin\ShoppingList | +| ProductConfigurationShoppingListItemToItemMapperPlugin | Copies product configuration from the shopping list item to a cart item. | None | Spryker\Client\ProductConfigurationShoppingList\Plugin\ShoppingList | +| ProductConfigurationShoppingListExpanderPlugin | Expands shopping list items with product configuration. | None | Spryker\Client\ProductConfigurationShoppingList\Plugin\ShoppingList | +| ProductConfigurationShoppingListAddItemPreCheckPlugin | Checks whether product configuration exists by the provided `ShoppingListItem.sku` transfer property. | None | Spryker\Zed\ProductConfigurationShoppingList\Communication\Plugin\ShoppingList | +| ProductConfigurationShoppingListItemBulkPostSavePlugin | Removes configuration if a product configuration instance is not set at a shopping list item. | None | Spryker\Zed\ProductConfigurationShoppingList\Communication\Plugin\ShoppingList | +| ProductConfigurationShoppingListItemCollectionExpanderPlugin | Expands `ShoppingListItemTransfer` transfer object with product configuration data. | None | Spryker\Zed\ProductConfigurationShoppingList\Communication\Plugin\ShoppingList | +| ItemProductConfigurationItemToShoppingListItemMapperPlugin | Copies product configuration from a cart item to a shopping list item. | None | Spryker\Zed\ProductConfigurationShoppingList\Communication\Plugin\ShoppingList | + +
    src/Pyz/Client/ShoppingList/ShoppingListDependencyProvider.php + +```php + + */ + protected function getAddItemShoppingListItemMapperPlugins(): array + { + return [ + new ProductConfigurationShoppingListItemMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\ShoppingListExtension\Dependency\Plugin\ShoppingListItemToItemMapperPluginInterface> + */ + protected function getShoppingListItemToItemMapperPlugins(): array + { + return [ + new ProductConfigurationShoppingListItemToItemMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\ShoppingListExtension\Dependency\Plugin\ShoppingListExpanderPluginInterface> + */ + protected function getShoppingListExpanderPlugins(): array + { + return [ + new ProductConfigurationShoppingListExpanderPlugin(), + ]; + } +} + +``` + +
    + +
    src/Pyz/Zed/ShoppingList/ShoppingListDependencyProvider.php + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new ProductConfigurationShoppingListAddItemPreCheckPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ShoppingListItemBulkPostSavePluginInterface> + */ + protected function getShoppingListItemBulkPostSavePlugins(): array + { + return [ + new ProductConfigurationShoppingListItemBulkPostSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ShoppingListItemCollectionExpanderPluginInterface> + */ + protected function getItemCollectionExpanderPlugins(): array + { + return [ + new ProductConfigurationShoppingListItemCollectionExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ItemToShoppingListItemMapperPluginInterface> + */ + protected function getItemToShoppingListItemMapperPlugins(): array + { + return [ + new ItemProductConfigurationItemToShoppingListItemMapperPlugin(), + ]; + } +} + +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the shopping list plugins work correctly: +1. Configure a configurable product. +2. Add the configured product to a shopping list. +3. Make sure that the product has been added successfully to the shopping list. + +{% endinfo_block %} + + +### 5) Import data + +The following imported entities are used as product configurations in Spryker. To import product configuration data, follow these steps: + +1. Prepare data according to your requirements using the following demo data: + +**data/import/product_configuration.csv** + +```csv +concrete_sku,configurator_key,is_complete,default_configuration,default_display_data +093_24495843,DATE_TIME_CONFIGURATOR,0,"{""time_of_day"": ""2""}","{""Preferred time of the day"": ""Afternoon"", ""Date"": ""9.09.2020""}" +``` + +| COLUMN | Required | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------------|-----------|------------|-----------------------------------------------------------------------------|--------------------------------------------------------------------------| +| concrete_sku | ✓ | string | 093_24495843 | Unique product identifier. | +| configurator_key | ✓ | string | DATE_TIME_CONFIGURATOR | Unique identifier of a product configurator to be used for this product. | +| is_complete | | boolean | 0 | Defines if product configuration complete by default. | +| default_configuration | | text | `"{""time_of_day"": ""2""}"` | Defines default configuration. | +| default_display_data | | text | `"{""Preferred time of the day"": ""Afternoon"", ""Date"": ""9.09.2020""}"` | Defines default display data for the configuration. | + +2. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------|-------------------------------------|----------------|------------------------------------------------------------------| +| ProductConfigurationDataImportPlugin | Imports product configuration data. | None | \Spryker\Zed\ProductConfigurationDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductConfigurationDataImportPlugin(), + ]; + } +} +``` + +3. Import data: + +```bash +console data:import product-configuration +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_product_cofiguration` table. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require "spryker-feature/configurable-product":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------|----------------------------------------------------------------| +| ProductConfigurationCartWidget | vendor/spryker-shop/product-configuration-cart-widget | +| ProductConfigurationWidget | vendor/spryker-shop/product-configuration-widget | +| ProductConfigurationWishlistWidget | vendor/spryker-shop/product-configuration-wishlist-widget | +| ProductConfigurationShoppingListWidget | vendor/spryker-shop/product-configuration-shopping-list-widget | +| ProductConfiguratorGatewayPage | vendor/spryker-shop/product-configurator-gateway-page | +| SalesProductConfigurationWidget | vendor/spryker-shop/sales-product-configuration-widget | + +{% endinfo_block %} + +### 2) Add translations + +Add translations as follows: + +1. Append glossary according to your configuration: + +```php +product_configuration.checkout.validation.error.is_not_complete,"Product configuration is not completed.",en_US +product_configuration.checkout.validation.error.is_not_complete,"Die Produktkonfiguration ist nicht abgeschlossen.",de_DE +product_configuration_widget.configure,Configure,en_US +product_configuration_widget.configure,Konfigurieren,de_DE +product_configuration_widget.complete,"Configuration complete!",en_US +product_configuration_widget.complete,"Konfiguration abgeschlossen!",de_DE +product_configuration_widget.not_complete,"Configuration is not complete.",en_US +product_configuration_widget.not_complete,"Die Konfiguration ist nicht abgeschlossen.",de_DE +product_configuration_widget.quote_not_valid,"This cart can't be processed. Please configure items inside the cart.",en_US +product_configuration_widget.quote_not_valid,"Dieser Warenkorb kann nicht bearbeitet werden. Bitte konfigurieren Sie Artikel im Warenkorb.",de_DE +product_configurator_gateway_page.configurator_key_not_blank,"Configurator key is required parameter",en_US +product_configurator_gateway_page.configurator_key_not_blank,"Konfiguratorschlüssel ist ein erforderlicher Parameter",de_DE +product_configurator_gateway_page.item_group_key_required,"Group Key is required parameter",en_US +product_configurator_gateway_page.item_group_key_required,"Gruppenschlüssel ist erforderlicher Parameter",de_DE +product_configurator_gateway_page.source_type_not_blank,"Source is required parameter",en_US +product_configurator_gateway_page.source_type_not_blank,"Source ist erforderlicher Parameter",de_DE +product_configurator_gateway_page.sku_not_blank,"Product SKU is required parameter",en_US +product_configurator_gateway_page.sku_not_blank,"Produkt-SKU ist ein erforderlicher Parameter",de_DE +product_configurator_gateway_page.quantity_required,"Quantity is required parameter",en_US +product_configurator_gateway_page.quantity_required,"Menge ist Parameter erforderlich",de_DE +product_configuration.validation.error.not_valid_response_checksum,"Not valid response checksum provided",en_US +product_configuration.validation.error.not_valid_response_checksum,"Keine gültige Antwortprüfsumme angegeben",de_DE +product_configuration.validation.error.expired_timestamp,"Expired timestamp was provided",en_US +product_configuration.validation.error.expired_timestamp,"Der abgelaufene Zeitstempel wurde bereitgestellt",de_DE +product_configuration_storage.validation.error.group_key_is_not_provided,"Group key must be provided",en_US +product_configuration_storage.validation.error.group_key_is_not_provided,"Gruppenschlüssel muss angegeben werden",de_DE +product_configuration.access_token.request.error.can_not_obtain_access_token,"Can not obtain access token",en_US +product_configuration.access_token.request.error.can_not_obtain_access_token,"Zugriffstoken kann nicht abgerufen werden",de_DE +product_configuration.error.configured_item_not_found_in_cart,Configured product '%sku%' was not found.,en_US +product_configuration.error.configured_item_not_found_in_cart,'%sku%' des kofigurierbaren Produkts wurde nicht gefunden.,de_DE +product_configuration.error.availability.failed,The product has an availability of %availability%.,en_US +product_configuration.error.availability.failed,Das Produkt hat eine Verfügbarkeit von %availability%.,de_DE +product_configuration.quote_request.validation.error.incomplete,You must finish the configuration of the products to validate the quote.,en_US +product_configuration.quote_request.validation.error.incomplete,"Sie müssen die Konfiguration der Produkte abschließen, um das Angebot zu validieren.",de_DE +product_configuration.response.validation.error,Failed to validate product configurator response.,en_US +product_configuration.response.validation.error,Die Antwort vom Produktkonfigurator konnte nicht validiret werden.,de_DE +product_configuration.error.configuration_not_found,Product configuration was not found for product '%sku%'.,en_US +product_configuration.error.configuration_not_found,Produktkonfiguration wurde nicht für Produkt '%sku%' gefunden.,de_DE +wishlist.validation.error.wishlist_item_not_found,Wishlist item not found.,en_US +wishlist.validation.error.wishlist_item_not_found,Wunschliste Artikel nicht gefunden.,de_DE +wishlist.validation.error.wishlist_item_cannot_be_updated,Wishlist item cannot be updated.,en_US +wishlist.validation.error.wishlist_item_cannot_be_updated,Wunschliste kann nicht aktualisiert werden.,de_DE +product_configuration_wishlist.error.configuration_not_found,"Product configuration was not found for wishlist item '%id%'.",en_US +product_configuration_wishlist.error.configuration_not_found,"Für den Wunschlistenartikel '%id%' wurde keine Produktkonfiguration gefunden.",de_DE +product_configuration_shopping_list.error.configuration_not_found,"Product configuration was not found for shopping list item '%uuid%'.",en_US +product_configuration_shopping_list.error.configuration_not_found,"Für den Einkaufslistenartikel '%uuid%' wurde keine Produktkonfiguration gefunden.",de_DE +product_configuration_shopping_list.error.item_not_found,"Shopping list item not found.",en_US +product_configuration_shopping_list.error.item_not_found,"Artikel auf der Einkaufsliste nicht gefunden.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +1. On the Storefront, register the following route provider: + +| PROVIDER | NAMESPACE | +|---------------------------------------------------|---------------------------------------------------------------| +| ProductConfiguratorGatewayPageRouteProviderPlugin | SprykerShop\Yves\ProductConfiguratorGatewayPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new ProductConfiguratorGatewayPageRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `yves.mysprykershop.com/product-configurator-gateway/request` and `yves.mysprykershop.com/product-configurator-gateway/response` routes are available for `POST` requests. + +{% endinfo_block %} + +2. Register the following reorder item expander plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------------|----------------|-------------------------------------------------------------------------------| +| ProductConfigurationReorderItemExpanderPlugin | Expands items with product configuration based on data from order items. | None | SprykerShop\Yves\SalesProductConfigurationWidget\Plugin\CustomerReorderWidget | + +**src/Pyz/Yves/CustomerReorderWidget/CustomerReorderWidgetDependencyProvider.php** + +```php + + */ + protected function getReorderItemExpanderPlugins(): array + { + return [ + new ProductConfigurationReorderItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the reorder expander plugin works: +1. Order with a configurable product. +2. On the Storefront, go to the **Order history** page. +3. Next to the order with the configurable product, select **Reorder**. +4. In the cart, check that the configurable product has the configuration from the previous order. + +{% endinfo_block %} + +3. Register the following gateway plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| --- | +| ProductDetailPageProductConfiguratorRequestStrategyPlugin | Finds the product configuration instance for a given product, maps it to `ProductConfiguratorRequestTransfer`, and sends the product configurator access token request. | None | SprykerShop\Yves\ProductConfiguratorGatewayPage\Plugin| +| ProductDetailPageProductConfiguratorResponseStrategyPlugin | Maps the product configurator check sum response, validates it and replaces configuration for a given product in the session. | None | SprykerShop\Yves\ProductConfiguratorGatewayPage\Plugin| +| ProductDetailPageProductConfiguratorRequestDataFormExpanderStrategyPlugin | Extends the product configurator request form with the SKU field to support configuration for a product on the PDP page. | None | SprykerShop\Yves\ProductConfiguratorGatewayPage\Plugin| +| CartPageProductConfiguratorRequestStartegyPlugin | Finds configuration instance in quote, maps it to `ProductConfiguratorRequestTransfer` and sends product configurator access token request. | None | SprykerShop\Yves\ProductConfigurationCartWidget\Plugin| +| CartPageProductConfiguratorResponseStrategyPlugin | Maps the raw product configurator checksum response, validates it, and replaces the corresponding item in a quote. | None | SprykerShop\Yves\ProductConfigurationCartWidget\Plugin | +| CartPageProductConfiguratorRequestDataFormExpanderStrategyPlugin | Extends the product configurator request form with SKU, quantity, and key group fields to support configuration for a cart item on a cart page. | None | SprykerShop\Yves\ProductConfigurationCartWidget\Plugin| +| WishlistPageProductConfiguratorRequestStrategyPlugin | Finds product configuration instance for given wishlist item, maps product configuration instance data to `ProductConfiguratorRequestTransfer`, and sends product configurator access token request. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Plugin\ProductConfiguratorGatewayPage | +| WishlistPageProductConfiguratorResponseStrategyPlugin | Maps the product configurator check sum response, validates it, and replaces configuration for a given product in the wishlist item. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Plugin\ProductConfiguratorGatewayPage | +| WishlistPageProductConfiguratorRequestDataFormExpanderStrategyPlugin | Extends the product configurator request form with the `idWishlistItem` and `sku` fields to support configuration for a wishlist item on the wishlist page. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Plugin\ProductConfiguratorGatewayPage | +| ShoppingListPageProductConfiguratorRequestStrategyPlugin | Finds product configuration instance for given shopping list item, maps product configuration instance data to `ProductConfiguratorRequestTransfer`, and sends product configurator access token request. | None | SprykerShop\Yves\ProductConfigurationShoppingListWidget\Plugin\ProductConfiguratorGatewayPage | +| ShoppingListPageProductConfiguratorResponseStrategyPlugin | Maps the product configurator check sum response, validates it and replaces configuration for a given product in the shopping list item. | None | SprykerShop\Yves\ProductConfigurationShoppingListWidget\Plugin\ProductConfiguratorGatewayPage | +| ShoppingListPageProductConfiguratorRequestDataFormExpanderStrategyPlugin | Extends the product configurator request form with the `shoppingListItemUuid` and `quantity` fields to support configuration for a shopping list item on the Shopping List page. | None | SprykerShop\Yves\ProductConfigurationShoppingListWidget\Plugin\ProductConfiguratorGatewayPage | + +
    src/Pyz/Yves/ProductConfiguratorGatewayPage/ProductConfiguratorGatewayPageDependencyProvider.php + +```php + + */ + protected function getProductConfiguratorRequestPlugins(): array + { + return [ + new ProductDetailPageProductConfiguratorRequestStrategyPlugin(), + new CartPageProductConfiguratorRequestStartegyPlugin(), + new WishlistPageProductConfiguratorRequestStrategyPlugin(), + new ShoppingListPageProductConfiguratorRequestStrategyPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\ProductConfiguratorGatewayPageExtension\Dependency\Plugin\ProductConfiguratorResponseStrategyPluginInterface> + */ + protected function getProductConfiguratorResponsePlugins(): array + { + return [ + new ProductDetailPageProductConfiguratorResponseStrategyPlugin(), + new CartPageProductConfiguratorResponseStrategyPlugin(), + new WishlistPageProductConfiguratorResponseStrategyPlugin(), + new ShoppingListPageProductConfiguratorResponseStrategyPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\ProductConfiguratorGatewayPageExtension\Dependency\Plugin\ProductConfiguratorRequestDataFormExpanderStrategyPluginInterface> + */ + protected function getProductConfiguratorRequestDataFormExpanderStrategyPlugins(): array + { + return [ + new ProductDetailPageProductConfiguratorRequestDataFormExpanderStrategyPlugin(), + new CartPageProductConfiguratorRequestDataFormExpanderStrategyPlugin(), + new WishlistPageProductConfiguratorRequestDataFormExpanderStrategyPlugin(), + new ShoppingListPageProductConfiguratorRequestDataFormExpanderStrategyPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the plugins are set up correctly: +1. Go to the PDP of a configurable product, make sure that you can open the configurator page, and return to the PDP with the configuration saved. +2. Add a configurable product to the wishlist. Then, go to the wishlist page and make sure that you can open the configurator page and return to the wishlist page with the configuration saved. +3. Add a configurable product to the shopping list. Then, go to the shopping list page and make sure that you can open the configurator page and return to the shopping list page with the configuration saved. + +{% endinfo_block %} + +4. To set up widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| ProductConfigurationCartItemDisplayWidget | Displays the product configuration of cart items. | None | SprykerShop\Yves\ProductConfigurationWidget\Widget | +| ProductConfigurationCartPageButtonWidget | Displays the product configuration button for configurable cart items. | None | SprykerShop\Yves\ProductConfigurationCartWidget\Widget | +| ProductConfigurationProductDetailPageButtonWidget | Displays the product configuration button for configurable products. | None | SprykerShop\Yves\ProductConfigurationWidget\Widget | +| ProductConfigurationProductViewDisplayWidget | Displays the product configuration of configurable products. | None | SprykerShop\Yves\ProductConfigurationCartWidget\Widget | +| ProductConfigurationQuoteValidatorWidget | Displays if the configuration of configurable cart items is valid. | None | SprykerShop\Yves\ProductConfigurationWidget\Widget | +| ProductConfigurationOrderItemDisplayWidget | Displays the product configuration of order items. | None | SprykerShop\Yves\SalesProductConfigurationWidget\Widget | +| ProductConfigurationWishlistFormWidget | Adds `has_product_configuration_attached` form hidden field to enable wishlist item expansion. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Widget | +| ProductConfigurationWishlistItemDisplayWidget | Displays the product configuration of wishlist items. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Widget | +| ProductConfigurationWishlistPageButtonWidget | Displays the product configuration button for configurable wishlist items. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Widget | +| ProductConfigurationShoppingListItemDisplayWidget | Displays the product configuration of shopping list items. | None | SprykerShop\Yves\ProductConfigurationShoppingListWidget\Widget | +| ProductConfigurationShoppingListPageButtonWidget | Displays the product configuration button for configurable shopping list items. | None | SprykerShop\Yves\ProductConfigurationShoppingListWidget\Widget | + + +
    src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ProductConfigurationCartPageButtonWidget::class, + ProductConfigurationCartItemDisplayWidget::class, + ProductConfigurationProductDetailPageButtonWidget::class, + ProductConfigurationProductViewDisplayWidget::class, + ProductConfigurationOrderItemDisplayWidget::class, + ProductConfigurationQuoteValidatorWidget::class, + ProductConfigurationWishlistFormWidget::class, + ProductConfigurationWishlistItemDisplayWidget::class, + ProductConfigurationWishlistPageButtonWidget::class, + ProductConfigurationShoppingListItemDisplayWidget::class, + ProductConfigurationShoppingListPageButtonWidget::class, + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +|---------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ProductConfigurationCartItemDisplayWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationCartItemDisplayWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationCartPageButtonWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationCartPageButtonWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationProductDetailPageButtonWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationProductDetailPageButtonWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationProductViewDisplayWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationProductViewDisplayWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationQuoteValidatorWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationQuoteValidatorWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationOrderItemDisplayWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationOrderItemDisplayWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationWishlistFormWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationWishlistFormWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationWishlistItemDisplayWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationWishlistItemDisplayWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationWishlistPageButtonWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationWishlistPageButtonWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationShoppingListItemDisplayWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationShoppingListItemDisplayWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | +| ProductConfigurationShoppingListPageButtonWidget | `{% raw %}{%{% endraw %} widget 'ProductConfigurationShoppingListPageButtonWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | + +{% endinfo_block %} + +5. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that product configuration data is displayed on the *Product Details*, *Cart*, *Wishlist*, and *Shopping list* pages. + +{% endinfo_block %} + +## Install an example date-time product configurator + +Follow the steps below to install an exemplary date-time product configurator. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require "spryker-shop/date-time-configurator-page-example":"^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------------|---------------------------------------------------------| +| DateTimeConfiguratorPageExample | vendor/spryker-shop/date-time-configurator-page-example | + +{% endinfo_block %} + +### 2) Configure an endpoint + +1. Define a new front controller for the date-time configurator: + +**public/Configurator/index.php** + +```php +render(); + +if ($response instanceof Response) { + $response->send(); +} + +echo $response; +``` + +1. To enable the new endpoint, adjust a Deploy file: + +**deploy.*.yml** + +```yaml +version: "0.1" + +namespace: spryker_demo +tag: '1.0' + +environment: docker.dev +image: + environment: + SPRYKER_PRODUCT_CONFIGURATOR_HOST: date-time-configurator-example.spryker.local + SPRYKER_PRODUCT_CONFIGURATOR_PORT: 80 + SPRYKER_PRODUCT_CONFIGURATOR_ENCRYPTION_KEY: 'change123' + SPRYKER_PRODUCT_CONFIGURATOR_HEX_INITIALIZATION_VECTOR: '0c1ffefeebdab4a3d839d0e52590c9a2' + +... + +groups: + EU: + region: EU + applications: + yves_eu: + application: yves + endpoints: + date-time-configurator-example.spryker.local: + entry-point: Configurator +... +``` + +3. Fetch the changes and restart the application with the endpoint enabled: + +```bash +docker/sdk boot deploy.yml +docker/sdk up +``` + +4. Add the endpoint to your `hosts` file: + +**/etc/hosts** + +```text +127.0.0.1 date-time-configurator-example.spryker.local +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `http://date-time-configurator-example.spryker.local/` endpoint is accessible. + +{% endinfo_block %} + +### 3) Add translations + +1. Append glossary according to your configuration: + +```yaml +demo_date_time_configurator_page.checkout.validation.error.price_is_not_valid,"Product configuration price is not valid",en_US +demo_date_time_configurator_page.checkout.validation.error.price_is_not_valid,"Der Produktkonfigurationspreis ist ungültig",de_DE +product_configurator_gateway_page.wishlist_item_id_required,"Wishlist item ID is required parameter.",en_US +product_configurator_gateway_page.wishlist_item_id_required,"Die ID des Wunschartikels ist ein erforderlicher Parameter.",de_DE +product_configurator_gateway_page.configurator_key_is_not_supported,"Configurator key is not supported.",en_US +product_configurator_gateway_page.configurator_key_is_not_supported,"Konfiguratorschlüssel wird nicht unterstützt.",de_DE +product_configurator_gateway_page.shopping_list_item_uuid_required,"Shopping List item ID is required parameter.",en_US +product_configurator_gateway_page.shopping_list_item_uuid_required,"Die Artikel-ID der Einkaufsliste ist ein erforderlicher Parameter.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up behavior + +1. Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|----------------|---------------------------------------------------------------------------------------------------| +| ExampleDateTimeConfiguratorAvailabilityStrategyPlugin | Returns `true` if a product configuration instance exists and has an appropriate configurator key. | None | SprykerShop\Zed\DateTimeConfiguratorPageExample\Communication\Plugin\Availability | +| ExampleDateTimeProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\ProductConfigurationWidget | +| ExampleDateTimeProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Zed\DateTimeConfiguratorPageExample\Communication\Plugin\SalesProductConfigurationGui | +| ExampleDateTimeSalesProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\SalesProductConfigurationWidget | +| ExampleDateTimeCartProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\ProductConfigurationCartWidget | +| ExampleDateTimeProductConfiguratorRequestExpanderPlugin | Expands request to the configurator with the date-time configurator host. | None | SprykerShop\Client\DateTimeConfiguratorPageExample\Plugin\ProductConfiguration | +| ExampleDateTimeWishlistItemProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\ProductConfigurationWishlistWidget | +| ProductConfigurationWishlistItemRequestExpanderPlugin | Expands `WishlistItem` with product configuration. | None | SprykerShop\Yves\ProductConfigurationWishlistWidget\Plugin\WishlistPage | +| ExampleDateTimeShoppingListItemProductConfigurationRenderStrategyPlugin | Decodes JSON configuration data. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\ProductConfigurationShoppingListWidget | +| ConfiguratorSecurityHeaderExpanderPlugin | Adds configurator url to `Content-Security-Policy` header. | None | SprykerShop\Yves\DateTimeConfiguratorPageExample\Plugin\Application | + +**src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php** + +```php + + */ + protected function getAvailabilityStrategyPlugins(): array + { + return [ + new ExampleDateTimeConfiguratorAvailabilityStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SalesProductConfigurationGui/SalesProductConfigurationGuiDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ProductConfigurationWishlistWidget/ProductConfigurationWishlistWidgetDependencyProvider.php** + +```php + + */ + protected function getWishlistItemProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeWishlistItemProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/WishlistPage/WishlistPageDependencyProvider.php** + +```php + + */ + protected function getWishlistItemRequestExpanderPlugins(): array + { + return [ + new ProductConfigurationWishlistItemRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ProductConfigurationShoppingListWidget/ProductConfigurationShoppingListWidgetDependencyProvider.php** + +```php + + */ + protected function getShoppingListItemProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeShoppingListItemProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Application/ApplicationDependencyProvider.php** + +```php + + */ + protected function getSecurityHeaderExpanderPlugins(): array + { + return [ + new ConfiguratorSecurityHeaderExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SalesProductConfigurationGui/SalesProductConfigurationGuiDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/SalesProductConfigurationWidget/SalesProductConfigurationWidgetDependencyProvider.php** + +```php + + */ + protected function getSalesProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeSalesProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductConfiguration/ProductConfigurationDependencyProvider.php** + +```php + + */ + protected function getProductConfigurationRequestExpanderPlugins(): array + { + return [ + new ExampleDateTimeProductConfiguratorRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ProductConfigurationCartWidget/ProductConfigurationCartWidgetDependencyProvider.php** + +```php + + */ + protected function getCartProductConfigurationRenderStrategyPlugins(): array + { + return [ + new ExampleDateTimeCartProductConfigurationRenderStrategyPlugin(), + ]; + } +} +``` + +2. To build the frontend assets for the configurator application, in `ConsoleDependencyProvider`, set up the `DateTimeProductConfiguratorBuildFrontendConsole` console command. + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DateTimeProductConfiguratorBuildFrontendConsole(), + ]; + } +} +``` + +3. Build the frontend application of the date-time configurator: + +```bash +console frontend:date-time-product-configurator:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that the frontend part has been built: +1. Check that the folder `public/Configurator/dist` exists, and it's not empty. +2. Check that you can access the configurator at `https://date-time-configurator-example.mysprykershop.com/`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-feature.md new file mode 100644 index 00000000000..4c99fd807ca --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-feature.md @@ -0,0 +1,578 @@ + + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. +This guide only describes the *Product Concrete Search* and *Add to cart from the Catalog page* integration. + +{% endinfo_block %} + + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | + +### 1) Install the required modules + +1. Install the required modules using Composer: + +```bash +composer require spryker-feature/product:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------|-----------------------------------------| +| Product | spryker/product | +| ProductAttribute | spryker/product-attribute | +| ProductAttributeExtension | spryker/product-attribute-extension | +| ProductAttributeGui | spryker/product-attribute-gui | +| ProductCategoryFilter | spryker/product-category-filter | +| ProductCategoryFilterGui | spryker/product-category-filter-gui | +| ProductCategoryFilterStorage | spryker/product-category-filter-storage | +| ProductImageStorage | spryker/product-image-storage | +| ProductManagement | spryker/product-management | +| ProductPageSearch | spryker/product-page-search | +| ProductQuantityStorage | spryker/product-quantity-storage | +| ProductSearch | spryker/product-search | +| ProductStorage | spryker/product-storage | +| ProductSearchConfigStorage | spryker/product-search-config-storage | + +{% endinfo_block %} + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductImageFilter | class | created | src/Generated/Shared/Transfer/ProductImageFilterTransfer | +| ProductConcretePageSearch.images | property | added | src/Generated/Shared/Transfer/ProductConcretePageSearchTransfer | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +quick-order.input.placeholder,Search by SKU or Name,en_US +quick-order.input.placeholder,Suche per SKU oder Name,de_DE +product_quick_add_widget.form.quantity,"# Qty",en_US +product_quick_add_widget.form.quantity,"# Anzahl",de_DE +quick-order.search.no_results,Item cannot be found,en_US +quick-order.search.no_results,Das produkt konnte nicht gefunden werden.,de_DE +product_search_widget.search.no_results,Products were not found.,en_US +product_search_widget.search.no_results,Products were not found.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table in the database. + +{% endinfo_block %} + +### 3) Add configuration + +Add the following configuration. + +#### Enable multiselect product attributes + +Expand available attribute types: + +**src/Pyz/Zed/ProductAttribute/ProductAttributeConfig.php** + +```php + + */ + public function getAttributeAvailableTypes(): array + { + return array_merge( + parent::getAttributeAvailableTypes(), + [ + SharedProductAttributeConfig::INPUT_TYPE_MULTISELECT => SharedProductAttributeConfig::INPUT_TYPE_MULTISELECT, + ], + ); + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, on the **Create a Product Attribute** page, a **mutliselect** input type is available: `https://backoffice.de.b2b-demo-shop.local/product-attribute-gui/attribute/create`. + +{% endinfo_block %} + +#### Configure export to the key-value store (Redis or Valkey) and Elasticsearch + +Add the configuration for adding products to cart from the catalog page: + +**src/Pyz/Zed/ProductPageSearch/ProductPageSearchConfig.php** + +```php +add(new ProductConcretePageSearchProductImageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +**src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new ProductConcretePublisherTriggerPlugin(), + new CategoryStoreProductAbstractPageSearchWritePublisherPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +1. Executing the `console sync:data product_concrete` command, syncs the product data, including images, to Elasticsearch product concrete documents. +2. When a product or its images are updated in the Back Office, these changes are synced to respective Elasticsearch product concrete documents. + +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +| --- | --- | --- | +| Elasticsearch | ProductConcrete | product_concrete:de:de_de:1 | + +
    + Expected data fragment example + +```yaml +{ + "store":"DE", + "locale":"de_DE", + "type":"product_concrete", + "is-active":true, + "search-result-data":{ + "id_product":1, + "fkProductAbstract":2, + "abstractSku":"222", + "sku":"222_111", + "type":"product_concrete", + "name":"HP 200 280 G1", + "images":[ + { + "idProductImage":1, + "idProductImageSetToProductImage":1, + "sortOrder":0, + "externalUrlSmall":"//images.icecat.biz/img/gallery_mediums/img_29406823_medium_1480596185_822_26035.jpg", + "externalUrlLarge":"//images.icecat.biz/img/gallery_raw/29406823_8847.png" + } + ] + }, + "full-text-boosted":[ + "HP 200 280 G1", + "222_111" + ], + "suggestion-terms":[ + "HP 200 280 G1", + "222_111" + ], + "completion-terms":[ + "HP 200 280 G1", + "222_111" + ], + "string-sort":{ + "name":"HP 200 280 G1" + } +} +``` + + +{% endinfo_block %} + +**src/Pyz/Zed/ProductAttribute/ProductAttributeDependencyProvider.php** + +```php + + */ + protected function getProductAttributeDataFormatterPlugins(): array + { + return [ + new MultiSelectProductAttributeDataFormatterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can manage "multiselect" product attributes at `https://zed.de.demo-spryker.com/product-attribute-gui/view/product-abstract?id-product-abstract={id-product-abstract}}`. + +{% endinfo_block %} + +### 5) Search for concrete product SKU in the list of abstract products + +{% info_block warningBox "Performance impact" %} + +We recommend testing how this feature affects table loading times. + +{% endinfo_block %} + +Extend the `isConcreteSkuSearchInProductTableEnabled` method in the `ProductManagementConfig` class at the project level and return `true`: + +**src/Pyz/Zed/ProductManagement/ProductManagementConfig.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ProductConcreteSearchWidget::class, + ProductConcreteAddWidget::class, + ProductConcreteSearchGridWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered: + +| MODULE | TEST | +| --- | --- | +| ProductConcreteSearchWidget | Go to the **Cart** page. Make sure the **Quick add to Cart** section is displayed and you can search for concrete products by entering a SKU. | +| ProductConcreteAddWidget | Go to the **Cart** page. Make sure that, in the **Quick add to Cart** section, you find a product, select a quantity and add it to cart. | +| ProductConcreteSearchGridWidget | Can be checked on the slot edit page of Configurator. | + +{% endinfo_block %} + +## Enable the text alternatives functionality + +The Text Alternatives functionality lets you to add alternative text to product images for better accessibility and SEO. + +### 1) Upgrade the following modules to the specified versions or higher + +| NAME | VERSION | +|-------------------------------|---------| +| spryker/product-image | 3.20.0 | +| spryker/product-image-storage | 1.19.0 | +| spryker/product-management | 0.19.53 | +| spryker/glossary | 3.16.0 | +| spryker/glossary-storage | 1.5.0 | +| spryker-shop/shop-ui | 1.96.0 | + +```bash +composer require spryker/glossary:^3.16.0 spryker/glossary-storage:^1.5.0 spryker/product-image:^3.20.0 spryker/product-image-storage:1.19.0 spryker/product-management:^0.19.53 spryker-shop/shop-ui:^1.96.0 --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------|--------------------------------------| +| ProductImage | vendor/spryker/spryker/product-image | +| ProductImageStorage | vendor/spryker/product-image-storage | +| ProductManagement | vendor/spryker/product-management | +| Glossary | vendor/spryker/glossary | +| GlossaryStorage | vendor/spryker/glossary-storage | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +### 2) Enable the feature in the ProductImage module configuration + +**src/Pyz/Shared/ProductImage/ProductImageConfig.php** + +```php + Entity.spy_product_abstract_group.update
    Entity.spy_product_abstract_group.delete | + + +**src/Pyz/Zed/ProductGroup/Persistence/Propel/Schema/spy_product_group.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Set up synchronization queue pools so non-multi-store entities (not store specific entities) will be synchronized among stores: + +**src/Pyz/Zed/ProductGroupStorage/Persistence/Propel/Schema/spy_product_group_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + + +3. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_group | table | created | +| spy_product_abstract_group | table | created | +| spy_product_abstract_group_storage | table | created | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that the following changes took place in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductGroup | class | created | src/Generated/Shared/Transfer/ProductGroupTransfer | +| ProductAbstractGroups | class | created | src/Generated/Shared/Transfer/ProductAbstractGroupsTransfer | +| ProductAbstractGroupStorage | class | created | src/Generated/Shared/Transfer/ProductAbstractGroupStorageTransfer | + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Make sure that the changes have been implemented successfully. To do it, trigger the following methods and make sure that the above events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductGroup/Persistence/Base/SpyProductAbstractGroup.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Configure Export to the key-value store (Redis or Valkey) + +This step will publish tables on change (create, edit, delete) to the `spy_product_abstract_group_storage` table and synchronize the data to Storage. + +#### Set up Event Listeners + +Set up the following plugins: + + +| Plugin | Specification | Prerequisites | Namespace | +| --- | --- | --- | --- | +| ProductGroupStorageEventSubscriber | Registers listeners that are responsible to publish product abstract group storage entity changes when a related entity change event occurs. | None | Spryker\Zed\ProductGroupStorage\Communication\Plugin\Event\Subscriber | + +```php +add(new ProductGroupStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Setup re-generate and re-sync features + +Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductGroupSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductGroupStorage\Communication\Plugin\Synchronization | + +```php + + + + + + + +
    + +
    +``` + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_configurable_bundle_template_image_storage | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| `SpyConfigurableBundleTemplateImageStorageEntity` | class | created | `src/Generated/Shared/Transfer/SpyConfigurableBundleTemplateImageStorageEntityTransfer` | + +{% endinfo_block %} + +### 2) Configure export to the key-value store (Redis or Valkey) and Elasticsearch + +This step will publish tables on change (create, edit) to the `spy_configurable_bundle_template_image_storage` and synchronize the data to Storage. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateImagePageSearchEventSubscriber | Registers listeners that are responsible for publishing configurable bundle template image entity changes to search when a related entity change event occurs. | None | Spryker\Zed\ConfigurableBundlePageSearch\Communication\Plugin\Event\Subscriber | +| ConfigurableBundleTemplateImagePageSearchEventSubscriber | Registers listeners that are responsible for publishing configurable bundle template image entity changes to search when a related entity change event occurs. | None | Spryker\Zed\ConfigurableBundlePageSearch\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ConfigurableBundleTemplateImageStorageEventSubscriber()); + $eventSubscriberCollection->add(new ConfigurableBundleTemplateImagePageSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Set up re-generate and re-sync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateImageEventResourceBulkRepositoryPlugin | Allows populating empty storage table with data. | None | Spryker\Zed\ConfigurableBundleStorage\Communication\Plugin\Event | +| ConfigurableBundleTemplateImageSynchronizationDataBulkPlugin | Allows synchronizing the entire storage table content into Storage. | None | Spryker\Zed\ConfigurableBundlePageSearch\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + + + + + + + + +
    + +
    +``` + +Expand `ProductImageSetTransfer` transfer: + +**src/Pyz/Shared/ProductImage/Transfer/product_image.transfer.xml** + +```xml + + + + + + + + +``` + +Run the following commands to apply database changes and generate entity and transfer +changes: + +```bash +console propel:install +console transfer:generate +``` + +Prepare your data according to your requirements using our demo data: + +**data/import/configurable_bundle_template_image.csv** + +```yaml +configurable_bundle_template_key,product_image_set_key +t000001,product_image_set_1 +t000001,product_image_set_2 +t000002,product_image_set_3 +t000002,product_image_set_4 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| configurable_bundle_template_key | ✓ | string | t000001 | Internal data import identifier for the configurable bundle template. | +| product_image_set_key | ✓ | string | product_image_set_1 | Internal data import identifier for the product image set. | + +{% info_block warningBox "Verification" %} + +Make sure that the `product_image_set_key` column is added to the `spy_product_image_set` table in the database. + +{% endinfo_block %} + +Expand your data import steps for product image sets: + +**data/import/icecat_biz_data/product_image.csv** + +```yaml +...,product_image_set_key +...,product_image_set_1 +...,product_image_set_2 +...,product_image_set_3 +...,product_image_set_4 +``` + +Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ConfigurableBundleTemplateImageDataImportPlugin | Links configurable bundle templates with product image sets. | None | Spryker\Zed\ConfigurableBundleDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/ProductLabel/Persistence/Propel/Schema/spy_product_label_localized_attributes.schema.xml** + +```xml + + + + + + +
    +
    +``` + +**src/Pyz/Zed/ProductLabel/Persistence/Propel/Schema/spy_product_label_product_abstract.schema.xml** + +```xml + + + + + + +
    +
    +``` + + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_product_label |
    • Entity.spy_product_label.create
    • Entity.spy_product_label.update
    • Entity.spy_product_label.delete
    | +| spy_product_label_store |
    • Entity.spy_product_label_store.create
    • Entity.spy_product_label_store.update
    • Entity.spy_product_label_store.delete
    | +| spy_product_label_localized_attributes |
    • Entity.spy_product_label_localized_attributes.create
    • Entity.spy_product_label_localized_attributes.update
    • Entity.spy_product_label_localized_attributes.delete
    | +| spy_product_label_product_abstract |
    • Entity.spy_product_label_product_abstract.create
    • Entity.spy_product_label_product_abstract.update
    • Entity.spy_product_label_product_abstract.delete
    | + +2. To synchronize the entities without store relations among stores, set up synchronization queue pools: + +**src/Pyz/Zed/ProductLabelStorage/Persistence/Propel/Schema/spy_product_label_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +3. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_label | table | created | +| spy_product_label_store | table | created | +| spy_product_label_localized_attributes | table | created | +| spy_product_label_product_abstract | table | created | +| spy_product_label_dictionary_storage | table | created | +| spy_product_abstract_label_storage | table | created | + +Ensure that the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductLabel | class | created | src/Generated/Shared/Transfer/ProductLabelTransfer | +| ProductLabelCriteria | class | created | src/Generated/Shared/Transfer/ProductLabelCriteriaTransfer | +| ProductLabelLocalizedAttributes | class | created | src/Generated/Shared/Transfer/ProductLabelLocalizedAttributesTransfer | +| ProductLabelProductAbstract | class | created | src/Generated/Shared/Transfer/ProductLabelProductAbstractTransfer | +| ProductLabelProductAbstractRelations | class | created | src/Generated/Shared/Transfer/ProductLabelProductAbstractRelationsTransfer | +| ProductLabelResponse | class | created | src/Generated/Shared/Transfer/ProductLabelResponseTransfer | +| ProductLabelCollection | class | created | src/Generated/Shared/Transfer/ProductLabelCollectionTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| StorageProductLabel | class | created | src/Generated/Shared/Transfer/StorageProductLabelTransfer | +| Message | class | created | src/Generated/Shared/Transfer/MessageTransfer | +| FacetConfig | class | created | src/Generated/Shared/Transfer/FacetConfigTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| ProductLabelAggregateForm | class | created | src/Generated/Shared/Transfer/ProductLabelAggregateFormTransfer | +| Money | class | created | src/Generated/Shared/Transfer/MoneyTransfer | +| PageMap | class | created | src/Generated/Shared/Transfer/PageMapTransfer | +| ProductPageLoad | class | created | src/Generated/Shared/Transfer/ProductPageLoadTransfer | +| ProductPageSearch | class | created | src/Generated/Shared/Transfer/ProductPageSearchTransfer | +| ProductPayload | class | created | src/Generated/Shared/Transfer/ProductPayloadTransfer | +| ProductAbstractLabelStorage | class | created | src/Generated/Shared/Transfer/ProductAbstractLabelStorageTransfer | +| ProductLabelDictionaryStorage | class | created | src/Generated/Shared/Transfer/ProductLabelDictionaryStorageTransfer | +| ProductLabelDictionaryItem | class | created | src/Generated/Shared/Transfer/ProductLabelDictionaryItemTransfer | +| ProductView | class | created | src/Generated/Shared/Transfer/ProductViewTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Locale | class | created | src/Generated/Shared/Transfer/LocaleTransfer | +| TabItem | class | created | src/Generated/Shared/Transfer/TabItemTransfer | +| TabsView | class | created | src/Generated/Shared/Transfer/TabsViewTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +1. Set up publishers: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| --- | --- | +| ProductLabelLocalizedAttributesWritePublisherPlugin | Updates the localized attributes of the product label in the storage when triggered by the provided product label storage events. | | Spryker\Zed\ProductLabel\Communication\Plugin\Publisher | +| ProductLabelWritePublisherPlugin | Updates the label data of the product page search when triggered by the provided product label events. | | Spryker\Zed\ProductLabelSearch\Communication\Plugin\Publisher\ProductLabel | +| ProductLabelProductAbstractWritePublisherPlugin | Updates the label data of the product page search when triggered by the provided product label product abstract relation events. | | Spryker\Zed\ProductLabelSearch\Communication\Plugin\Publisher\ProductLabelProductAbstract | +| ProductLabelStoreWritePublisherPlugin | Updates the product abstract data in the search engine when triggered by the provided publish and unpublish events of the product label and product abstract relation. | | Spryker\Zed\ProductLabelSearch\Communication\Plugin\Publisher\ProductLabelStore | +| ProductAbstractLabelWritePublisherPlugin | Updates product abstract data in the storage when triggered by the provided publish and unpublish events of the product label and product abstract relation. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher\ProductAbstractLabel | +| ProductLabelDictionaryWritePublisherPlugin | Updates the data of the product label dictionary in the storage when triggered by the provided product label storage events. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher\ProductLabelDictionary | +| ProductLabelProductAbstractWritePublisherPlugin | Updates the product abstract data in the storage when triggered by the provided events of product label and product abstract relation. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher\ProductLabelProductAbstract | +| ProductLabelDictionaryDeletePublisherPlugin | Removes all the data of the product label dictionary storage when triggered by the provided product label dictionary events. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher\ProductLabelDictionary | +| ProductLabelSearchPublisherTriggerPlugin | Allows publishing and republishing product label search data manually. | | Spryker\Zed\ProductLabelSearch\Communication\Plugin\Publisher | + +
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +getProductLabelSearchPlugins(), + $this->getProductLabelStoragePlugins(), + ); + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getProductLabelSearchPlugins(): array + { + return [ + new ProductLabelSearchWritePublisherPlugin(), + new ProductLabelProductAbstractSearchWritePublisherPlugin(), + new ProductLabelStoreSearchWritePublisherPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getProductLabelStoragePlugins(): array + { + return [ + new ProductAbstractLabelStorageWritePublisherPlugin(), + new ProductLabelProductAbstractStorageWritePublisherPlugin(), + new ProductLabelDictionaryStorageWritePublisherPlugin(), + new ProductLabelDictionaryStorageDeletePublisherPlugin(), + new ProductLabelLocalizedAttributesWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductLabelSearchPublisherTriggerPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Ensure that following applies: +- After creating a product label, you can find the corresponding record in the `spy_product_label_dictionary_storage` table. +- After creating or updating a product label or assigning a new locale to a store, the corresponding localized attributes are stored in the `spy_product_label_localized_attributes` table. +- After assigning a product label to a product, the corresponding product record contains the assigned label in the `spy_product_abstract_label_storage` table. + +{% endinfo_block %} + +2. Set up, regenerate, and resync features by setting up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductAbstractLabelPublisherTriggerPlugin | Triggers publish events for the product label data. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher | +| ProductLabelDictionaryPublisherTriggerPlugin | Triggers publish events for the product label dictionary data. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Publisher | +| ProductAbstractLabelSynchronizationDataRepositoryPlugin | Allows synchronizing the content of the entire `spy_product_abstract_label_storage` table into the storage. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Synchronization | +| ProductLabelDictionarySynchronizationDataRepositoryPlugin | Allows synchronizing the content of the entire `spy_product_label_dictionary_storage` table content into the storage. | | Spryker\Zed\ProductLabelStorage\Communication\Plugin\Synchronization | +| ProductNewLabelUpdaterPlugin | Returns the list of relations of product labels to abstract products to assign or deassign product labels for. The results are used to persist product label relation changes into the database. The plugin is called by the `ProductLabelRelationUpdaterConsole` command. | | Spryker\Zed\ProductNew\Communication\Plugin | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +> Products**. +2. To create a product, click **Create a Product**. +3. In the **NEW FROM** and **NEW TO** fields, enter dates so that the current date is between the entered ones. +4. Clisk **Save**. +5. On the Storefront, check that the product is displayed with the `new` product label. + +{% endinfo_block %} + +### 4) Import data + +{% info_block infoBox "Info" %} + +The following imported entities are used as product labels in Spryker. + +{% endinfo_block %} + +1. Prepare data according to your requirements using the following demo data: + +**data/import/product_label.csv** + +```yaml +name,is_active,is_dynamic,is_exclusive,front_end_reference,valid_from,valid_to,name.en_US,product_abstract_skus,priority +Label 1,1,0,0,,,,Label 1,"001,002,003",1 +Label 2,1,1,0,template,,,Label 2,,2 +Label 3,1,1,0,highlight,,,Label 3,,3 +NEW,1,1,0,template:tag,,,New,Neu,,2 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| name | Yes | string | Label 1 | Unique product label identifier. | +| is_active | Yes | integer | 1 | Defines if the product label is available. | +| is_dynamic | Yes | integer | 1 | Defines if the product label is dynamic. | +| is_exclusive | Yes | integer | 1 | Defines if the product label is exclusive. | +| front_end_reference | Yes |string | template:tag | When the label is rendered, this value is used as a part of the CSS selector on the page. | +| valid_from | Yes | string | 2020-01-01 | Defines the date on which the product label starts to be displayed. | +| valid_to | Yes | string | 2020-02-02 | Defines the date on which the product label stops to be displayed. | +| name.en_US | Yes | string | name | Name of the product label for a specific locale. | +| product_abstract_skus | Yes | string | "001,002,003" | List of product SKUs to which the product label is added. | +| priority | Yes | integer | 3 | Defines the product label position among other product labels on the product details page and the product abstract cart. | + +**data/import/product_label_store.csv** + +```yaml +name,store_name +Label 1,US +Label 1,DE +Label 2,US +Label 3,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| name | Yes | string | Label 1 | Unique product label identifier. | +| store_name | Yes | string | US | Name of the store to assign the label to. | + +2. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductLabelDataImportPlugin | Imports product label data into the database. | | Spryker\Zed\ProductLabelDataImport\Communication\Plugin | +| ProductLabelStoreDataImportPlugin | Imports product label store data into the database. | | Spryker\Zed\ProductLabelDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +The result of the query will contain only Products that were on the given Whitelists, but not on the given Blacklists.| The Customer session must contain Product List information. See [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) for an example implementation. | Spryker\Client\CustomerCatalog\Plugin\Search | +| ProductListQueryExpanderPlugin | Expands search query with filtering by product list ID. | None | Spryker\Client\ProductListSearch\Plugin\Search | + +{% info_block infoBox "Info" %} + +The order of the query expander plugins matters for the search result. Make sure that your query expanders are in the appropriate order. The `FacetQueryExpanderPlugin` needs to be placed after all the other plugins that filter down the result; otherwise, it can't generate the proper query fragment for itself. + +{% endinfo_block %} + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +You should also be able to filter product concrete search results by product list ID. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-lists-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-lists-feature.md new file mode 100644 index 00000000000..a3335052aff --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-lists-feature.md @@ -0,0 +1,870 @@ + + + +This document describes how to install the [Product Lists feature](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-lists-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Product Lists feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE| +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/product-lists:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductList | vendor/spryker/product-list | +| ProductListDataImport | vendor/spryker/product-list-data-import | +| ProductListGui | vendor/spryker/product-list-gui | +| ProductListGuiExtension | vendor/spryker/product-list-gui-extension | +| ProductListSearch | vendor/spryker/product-list-search | +| ProductListStorage | vendor/spryker/product-list-storage | +| ProductStorageExtension | vendor/spryker/product-storage-extension | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Define the following transfer objects: + +**src/Pyz/Shared/ProductList/Transfer/product_list.transfer.xml** + +```xml + + + + + + + + + + + + + + + + + + +``` + +2. Adjust the schema definition so that entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_product_list | Entity.spy_product_list.create
    Entity.spy_product_list.update
    Entity.spy_product_list.delete | +| spy_product_list_product_concrete | Entity.spy_product_list_product_concrete.create
    Entity.spy_product_list_product_concrete.update
    Entity.spy_product_list_product_concrete.delete | +| spy_product_list_category | Entity.spy_product_list_category.create
    Entity.spy_product_list_category.update
    Entity.spy_product_list_category.delete | + +**src/Pyz/Zed/ProductList/Persistence/Propel/Schema/spy_product_list.schema.xml** + +``` xml + + + + + + +
    + + + + +
    + + + + +
    +
    +``` + +3. Set up synchronization queue pools so that non-multi-store entities (not store-specific entities) are synchronized among stores: + +**src/Pyz/Zed/ProductListStorage/Persistence/Propel/Schema/spy_product_list_storage.schema.xml** + +```xml + + + + + + +
    + + + + +
    +
    +``` + +4. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductList | class | created | src/Generated/Shared/Transfer/ProductListTransfer | +| ProductListCollection | class | created | src/Generated/Shared/Transfer/ProductListCollectionTransfer | +| ProductListCriteria | class | created | src/Generated/Shared/Transfer/ProductListCriteriaTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| ProductListCategoryRelation | class | created | src/Generated/Shared/Transfer/ProductListCategoryRelationTransfer | +| ProductListProductConcreteRelation | class | created | src/Generated/Shared/Transfer/ProductListProductConcreteRelationTransfer | +| CartChange | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| ProductListAggregateForm | class | created | src/Generated/Shared/Transfer/ProductListAggregateFormTransfer | +| QueryCriteria | class | created | src/Generated/Shared/Transfer/QueryCriteriaTransfer | +| QueryJoin | class | created | src/Generated/Shared/Transfer/QueryJoinTransfer | +| PageMap | class | created | src/Generated/Shared/Transfer/PageMapTransfer | +| ProductListMap | class | created | src/Generated/Shared/Transfer/ProductListMapTransfer | +| ProductPageSearch | class | created | src/Generated/Shared/Transfer/ProductPageSearchTransfer | +| ProductConcretePageSearch | class | created | src/Generated/Shared/Transfer/ProductConcretePageSearchTransfer | +| ProductPayload | class | created | src/Generated/Shared/Transfer/ProductPayloadTransfer | +| ProductAbstractProductListStorage | class | created | src/Generated/Shared/Transfer/ProductAbstractProductListStorageTransfer | +| ProductConcreteProductListStorage | class | created | src/Generated/Shared/Transfer/ProductConcreteProductListStorageTransfer | +| CustomerProductListCollection | class | created | src/Generated/Shared/Transfer/CustomerProductListCollectionTransfer | +| Customer.companyUserTransfer | property | created | src/Generated/Shared/Transfer/CustomerTransfer | +| Customer.customerProductListCollection | property | created | src/Generated/Shared/Transfer/CustomerTransfer | + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_list | table | created | +| spy_product_list_product_concrete | table | created | +| spy_product_list_category | table | created | +| spy_product_abstract_product_list_storage | table | created | +| spy_product_concrete_product_list_storage | table | created | + +Make sure that propel entities have been generated successfully by checking their existence. Also, change the generated entity classes to extend from Spryker core classes. + +| CLASS PATH | EXTENDS | +| --- | --- | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductList.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductList | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListQuery.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductListQuery | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListProductConcrete.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductListProductConcrete | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListProductConcreteQuery.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductListProductConcreteQuery | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListCategory.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductListCategory | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListCategoryQuery.php | Spryker\Zed\ProductList\Persistence\Propel\AbstractSpyProductListCategoryQuery | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductAbstractProductListStorage | Spryker\Zed\ProductListStorage\Persistence\Propel\AbstractSpyProductAbstractProductListStorage | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductAbstractProductListStorageQuery | Spryker\Zed\ProductListStorage\Persistence\Propel\AbstractSpyProductAbstractProductListStorageQuery | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductConcreteProductListStorage | Spryker\Zed\ProductListStorage\Persistence\Propel\AbstractSpyProductConcreteProductListStorage | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductConcreteProductListStorageQuery | Spryker\Zed\ProductListStorage\Persistence\Propel\AbstractSpyProductConcreteProductListStorageQuery | + +Make sure that the changes have been implemented successfully. For this purpose, trigger the following methods and make sure that the preceding events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductList.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListProductConcrete.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductList/Persistence/Base/SpyProductListCategory.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductAbstractProductListStorage.php | sendToQueue() | +| src/Orm/Zed/ProductListStorage/Persistence/Base/SpyProductConcreteProductListStorage.php | sendToQueue() | + +{% endinfo_block %} + +### 3) Set up the configuration + +Add the following configuration: + +**src/Pyz/Zed/ProductListGui/ProductListGuiConfig.php** + +```php +add(new ProductListStorageEventSubscriber()); + $eventSubscriberCollection->add(new ProductListSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when a product list is created, updated, or deleted, they are exported or removed to the key-value store (Redis or Valkey) and Elasticsearch accordingly. + +| STORAGE TYPE | TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | +|-----------------------------------| --- | --- | +| Key-value store (Redis or Valkey) | Product Abstract Product List | kv:product_abstract_product_lists:1 | +| Key-value store (Redis or Valkey) | Product Concrete Product List | kv:product_concrete_product_list:1 | +| Elasticsearch | Product Abstract | product_abstract:de:en_us:1 | +| Elasticsearch | Product Concrete | product_concrete:de:en_us:1 | + +{% endinfo_block %} + +**Example expected data fragment for Product Abstract Product List** + +```json +{ + "id_product_abstract": 1, + "id_whitelists": [1,2], + "id_blacklists": [3] +} +``` + +**Example expected data fragment for Product Concrete Product List** + +```json +{ + "id_product_concrete": 1, + "id_whitelists": [1,2], + "id_blacklists": [3] +} +``` + +**Example expected data fragment for Product Abstract** + +```json +{ + "product-lists": { + "whitelists": [1,2], + "blacklists": [3] + } +} +``` + +**Example expected data fragment for Product Concrete** + +```json +{ + "product-lists": { + "whitelists": [1,2], + "blacklists": [3] + } +} +``` + +#### Prepare search data for export + +With this step, you extend Elasticsearch documents with product list data. + +Add the following plugins to your project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductListDataLoaderPlugin |Loads product list data as payload for the publishing process. | None|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch\DataLoader | +|ProductListDataLoadExpanderPlugin|Expands product page data with all its product lists for publishing based on the previously collected product information.|Product list data must be available in the product payload. Suggestion: use `ProductListDataLoaderPlugin` (the first plugin in the table).|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch\DataExpander| +|ProductListMapExpanderPlugin|Maps product list data to the Elasticsearch document structure.|Product list data must be available. Suggestion: use `ProductListDataLoadExpanderPlugin` (see the preceding one).|`Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch`| +|ProductAbstractProductListSynchronizationDataPlugin|Can be executed to synchronize all product_abstract_product_list entries from the database to the key-value store (Redis or Valkey).|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| +|ProductConcreteProductListSynchronizationDataPlugin|Can be executed to synchronize all product_concrete_product_list entries from the database to the key-value store (Redis or Valkey).|None|Spryker\Zed\ProductListStorage\Communication\Plugin\Synchronization| +|ProductConcreteProductListPageDataExpanderPlugin|Expands `ProductConcretePageSearchTransfer` with product lists data and returns the modified object.|None|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch| +|ProductConcreteProductListPageMapExpanderPlugin|Maps product list data related to concrete products to the Elasticsearch document structure.|Product list data must be available. Suggestion: use `ProductConcreteProductListPageDataExpanderPlugin` (see the preceding one).|Spryker\Zed\ProductListSearch\Communication\Plugin\ProductPageSearch| + +
    +src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + new ProductListDataLoadExpanderPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\ProductPageSearch\Dependency\Plugin\ProductPageMapExpanderInterface[] + */ + protected function getMapExpanderPlugins() + { + return [ + new ProductListMapExpanderPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface[] + */ + protected function getDataLoaderPlugins() + { + return [ + new ProductListDataLoaderPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductConcretePageMapExpanderPluginInterface[] + */ + protected function getConcreteProductPageMapExpanderPlugins(): array + { + return [ + new ProductConcreteProductListPageMapExpanderPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductConcretePageDataExpanderPluginInterface[] + */ + protected function getProductConcretePageDataExpanderPlugins(): array + { + return [ + new ProductConcreteProductListPageDataExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductListSearchPublisherTriggerPlugin(), + new ProductListPublisherTriggerPlugin(), + ]; + } +} +``` + +### 6) Import product lists + +1. Prepare your data according to your requirements using our demo data: + +**vendor/spryker/product-list-data-import/data/import/product_list.csv** + +```yaml +"product_list_key","name","type" +"pl-001","All computers","whitelist" +"pl-002","No ASUS","blacklist" +"pl-003","All tablets","blacklist" +"pl-004","Cameras, Wearables & Phones","whitelist" +"pl-005","Camcorders over 400€","blacklist" +"pl-006","All cameras","whitelist" +"pl-007","Tablets with enough storage","whitelist" +"pl-008","No Smartwatches","blacklist" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| product_list_key | ✓ | string (unique) | pl-001 | A unique identifier used to identify a product list. | +|name|mandatory|string|All computers| A custom product list name used to provide a readable title or sentence of what the list contains. Used only for internal representation.| +|type|mandatory|string ("blacklist"/"whitelist")|whitelist| Defines whether the list is a denylist or allowlist.| + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductListDataImportPlugin | Imports basic product list data into the database. | None | Spryker\Zed\ProductListDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + +vendor/spryker/product-list-data-import/data/import/product_list_to_concrete_product.csv + +```yaml +product_list_key,concrete_sku +pl-002,166_30230575 +pl-002,166_29565389 +pl-002,165_29879507 +pl-002,165_29879528 +pl-002,099_27207215 +pl-002,114_29911081 +pl-002,114_30580483 +pl-002,139_24699831 +pl-002,140_22766487 +pl-002,141_29380410 +pl-002,142_30943081 +pl-002,143_31035196 +pl-002,144_29804740 +pl-002,144_30312874 +pl-002,144_29804741 +pl-002,157_29525342 +pl-002,158_29885222 +pl-002,159_29885260 +pl-002,159_29885269 +pl-002,160_29533301 +pl-002,161_29533300 +pl-002,162_29533299 +pl-002,163_29728850 +pl-002,164_29565390 +pl-002,165_29879507 +pl-002,165_29879528 +pl-002,166_30230575 +pl-002,166_29565389 +pl-002,215_123 +pl-002,215_124 +pl-005,204_29851280 +pl-005,187_26306352 +pl-005,188_26306353 +pl-005,194_25904145 +pl-005,195_25904159 +pl-007,161_29533300 +pl-007,177_24867659 +pl-007,177_25913296 +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| product_list_key | ✓ | string | pl-002 | An existing product list identifier for the assignment. | +|concrete_sku|mandatory|string|166_30230575|An existing concrete product SKU to assign to the product list.| + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductListProductConcreteDataImportPlugin | Imports concrete product assignments for product lists. | Product list data and concrete product data must exist before this importer plugin runs. | vendor/spryker/product-list-data-import/src/Spryker/Zed/ProductListDataImport/Communication/Plugin/ProductListProductConcreteDataImportPlugin.php | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +Suggestion: to collect variant data, use `ProductViewVariantExpanderPlugin` before .|Spryker\Client\ProductListStorage\Plugin\ProductStorageExtension| +| ProductAbstractListStorageRestrictionFilterPlugin | Responsible for filtering abstract product IDs based on allowlists and denylists. | None | Spryker\Client\ProductListStorage\Plugin\ProductStorageExtension | +| ProductConcreteListStorageRestrictionFilterPlugin| Responsible for filtering concrete product IDs based on allowlists and denylists. | None | Spryker\Client\ProductListStorage\Plugin\ProductStorageExtension| + +
    +src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Make sure that features that use the key-value store (Redis or Valkey) to read product data—for example, the product details page or product relations—don't show it when a product is restricted for the customer. + +{% endinfo_block %} + +#### Product restrictions in the cart + +Add the following plugins to handle product restrictions for cart items: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductListRestrictedItemsPreCheckPlugin | Checks all cart items and adds violations to the cart precheck response when they are restricted for the current customer. | None | Spryker\Zed\ProductList\Communication\Plugin\CartExtension | +|RemoveRestrictedItemsPreReloadPlugin|Checks and removes restricted cart items from the quote and adds a message for each removed item.|None|Spryker\Zed\ProductList\Communication\Plugin\CartExtension| + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php +
  • Entity.spy_product_measurement_unit.create
  • Entity.spy_product_measurement_unit.update
  • Entity.spy_product_measurement_unit.delete
  • | +| spy_product_measurement_base_unit |
    • Entity.spy_product_measurement_base_unit.create
    • Entity.spy_product_measurement_base_unit.update
    • Entity.spy_product_measurement_base_unit.delete
    | +| spy_product_measurement_sales_unit |
    • Entity.spy_product_measurement_sales_unit.create
    • Entity.spy_product_measurement_sales_unit.update
    • Entity.spy_product_measurement_sales_unit.delete
    | +| spy_product_measurement_sales_unit_store |
    • Entity.spy_product_measurement_sales_unit_store.create
    • Entity.spy_product_measurement_sales_unit_store.update
    • Entity.spy_product_measurement_sales_unit_store.delete
    | + +**src/Pyz/Zed/ProductMeasurementUnit/Persistence/Propel/Schema/spy_product_measurement_unit.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    +
    +``` + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_measurement_unit | table | created | +| spy_product_measurement_base_unit | table | created | +| spy_product_measurement_sales_unit | table | created | +| spy_product_measurement_sales_unit_store | table | created | +| spy_product_measurement_unit_storage | table | created | +| spy_product_concrete_measurement_unit_storage | table | created | +| spy_sales_order_item.quantity_base_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_precision | column | created | +| spy_sales_order_item.quantity_measurement_unit_conversion | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductMeasurementUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitTransfer | +| ProductMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementBaseUnitTransfer | +| ProductMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementSalesUnitTransfer | +| SpyProductMeasurementUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitEntityTransfer | +| SpyProductMeasurementBaseUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementBaseUnitEntityTransfer | +| SpyProductMeasurementSalesUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitEntityTransfer | +| SpyProductMeasurementSalesUnitStoreEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitStoreEntityTransfer | +| ProductMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitStorageTransfer | +| ProductConcreteMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementBaseUnitTransfer | +| ProductConcreteMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementSalesUnitTransfer | +| ProductConcreteMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementUnitStorageTransfer | +| SpyProductMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitStorageEntityTransfer | +| SpyProductConcreteMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductConcreteMeasurementUnitStorageEntityTransfer | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the changes were implemented successfully. For this purpose, trigger the following methods and make sure that the above events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementUnit.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementBaseUnit.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnit.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnitStore.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Add translations + +{% info_block infoBox "Info" %} + +All measurement units need to have glossary entities for the configured locales. + +{% endinfo_block %} + +Infrastructural record's glossary keys: + +**src/data/import/glossary.csv** + +```yaml +measurement_units.item.name,Item,en_US +measurement_units.item.name,Stück,de_DE +``` + +Demo data glossary keys: + +**src/data/import/glossary.csv** + +```yaml +measurement_units.standard.weight.kilo.name,Kilo,en_US +measurement_units.standard.weight.gram.name,Gram,en_US +measurement_units.standard.length.metre.name,Meter,en_US +measurement_units.standard.length.centimetre.name,Centimeter,en_US +measurement_units.standard.length.feet.name,Feet,en_US +measurement_units.standard.weight.kilo.name,Kilo,de_DE +measurement_units.standard.weight.gram.name,Gramm,de_DE +measurement_units.standard.length.metre.name,Meter,de_DE +measurement_units.standard.length.centimetre.name,Centimeter,de_DE +measurement_units.standard.length.feet.name,Fuß,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + + +### 4) Configure export to the key-value store (Redis or Valkey) + +This step will publish tables on change (create, edit, delete) to the `spy_product_measurement_unit_storage` and `spy_product_concrete_measurement_unit_storage` and synchronise the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitStorageEventSubscriber | Registers listeners that are responsible to publish product measurement unit storage entity changes when a related entity change event occurs. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php + add(new ProductMeasurementUnitStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Setup re-generate and re-sync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductConcreteMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty storage table with data. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty storage table with data. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductConcreteMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | +| ProductMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole storage table content into Storage. | None | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php +
  • Referred product abstracts to be imported
  • Referred measurement units to be imported
  • |Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin| + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +A custom multiplier that is used to calculate base unit. This field can be empty if both base and sales unit code is defined in the general [conversion ratios](https://github.com/spryker/util-measurement-unit-conversion/blob/1ae26cf8e629d25157e273097941bde438a24ddc/src/Spryker/Service/UtilMeasurementUnitConversion/UtilMeasurementUnitConversionConfig.php).

    Example: 5 means that 1 quantity of this sales unit represents 5 of the base unit.

    | +|precision|mandatory|integer, power of ten, empty|100|A property that affects how detailed to render a float measurement unit. Affects visual only, not used in calculations.
    When left empty, the precision of the measurement unit is used.| +|is_displayed|mandatory|integer|0|Controls if the sales unit can be displayed for customers.| +|is_default|mandatory|integer|1|Controls if this sales unit is preferred as the default sales unit when offered for customers.
    Takes no effect if is_displayed set as 0.
    1 product concrete can have up to 1 default sales unit.| + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementSalesUnitDataImportPlugin | Imports sales measurement unit definitions into the database. |
    • Referred product concretes to be imported
    • Related product abstracts to be imported
    • Related product abstracts' base units to be imported
    • Referred measurement units to be imported
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +Proceed with this step even if you have only 1 Store. + +{% endinfo_block %} + +Prepare your data according to your requirements using our demo data: + +**vendor/spryker/product-measurement-unit-data-import/data/import/product_measurement_sales_unit_store.csv** + +```yaml +sales_unit_key,store_name +sales_unit_1,DE +sales_unit_1,US +sales_unit_1,AT +sales_unit_2,DE +sales_unit_2,US +sales_unit_2,AT +sales_unit_3,DE +sales_unit_3,US +sales_unit_3,AT +sales_unit_4,DE +sales_unit_4,AT +sales_unit_5,US +sales_unit_6,DE +sales_unit_6,US +sales_unit_6,AT +sales_unit_7,DE +sales_unit_7,US +sales_unit_7,AT +sales_unit_8,DE +sales_unit_8,US +sales_unit_8,AT +sales_unit_9,DE +sales_unit_9,US +sales_unit_9,AT +sales_unit_10,DE +sales_unit_10,US +sales_unit_10,AT +sales_unit_11,DE +sales_unit_11,US +sales_unit_11,AT +sales_unit_12,DE +sales_unit_12,AT +sales_unit_12,US +sales_unit_13,DE +sales_unit_13,US +sales_unit_13,AT +sales_unit_14,DE +sales_unit_14,US +sales_unit_14,AT +sales_unit_15,DE +sales_unit_15,US +sales_unit_15,AT +sales_unit_16,DE +sales_unit_16,US +sales_unit_16,AT +sales_unit_17,DE +sales_unit_17,US +sales_unit_17,AT +sales_unit_18,DE +sales_unit_18,US +sales_unit_18,AT +sales_unit_19,DE +sales_unit_19,US +sales_unit_19,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| sales_unit_key |mandatory | string | sales_unit_1 |A reference used for the product measurement sales unit data import. | +|store_name|mandatory|string|DE|Contains the store name where the sales unit is available.| + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|ProductMeasurementSalesUnitStoreDataImportPlugin |Imports sales measurement units' Store configuration into the database. |
    • Referred sales units to be imported.
    • Referred Stores to be imported.
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +` action works with measurement units by adding an item to cart with sales unit and checking if `QuoteTransfer.items[].quantitySalesUnit` record gets populated. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that checkout workflow works with measurement unit by ordering item with sales unit and checking the `spy_sales_order_item` contains `quantity_base_measurement_unit_name`, `quantity_measurement_unit_name`, `quantity_measurement_unit_code`, `quantity_measurement_unit_precision` and `quantity_measurement_unit_conversion` fields populated. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that abstract products which have measurement units don't have `add_to_cart_sku` field at Elasticsearch document. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that every order item from the `SalesFacade::getOrderItems()` results contains quantity sales unit data. + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core E-commerce | {{page.release_tag}} | +|Checkout| {{page.release_tag}} | +| | | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/measurement-units: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductMeasurementUnitWidget | vendor/spryker-shop/product-measurement-unit-widget | + +{% endinfo_block %} + + +### 2) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.item_quantity,Quantity,en_US +product.measurement.sales_unit,Sales Unit,en_US +page.detail.add-to-cart,Add to Cart,en_US +measurement_units.recommendation.between-units-info,The quantity you have chosen is in between 2 base units,en_US +measurement_units.recommendation.min-violation,Minimum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.max-violation,Maximum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.suggestion,Would you like to add,en_US +cart.pre.check.quantity.min.failed,Minimum quantity requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.pre.check.quantity.max.failed,Maximum quantity for product SKU '%sku%' is exceeded.,en_US +cart.pre.check.quantity.interval.failed,Quantity interval requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.item_quantity,Anzahl,de_DE +product.measurement.sales_unit,Maßeinheit,de_DE +page.detail.add-to-cart,In den Warenkorb,de_DE +measurement_units.recommendation.between-units-info,Ihre gewählte Anzahl liegt zwischen 2 basis Einheiten,de_DE +measurement_units.recommendation.min-violation,Minimale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.max-violation,Maximale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.suggestion,Was würden Sie gerne hinzufügen? ,de_DE +cart.pre.check.quantity.min.failed,Die Mindestanzahl für Produkt SKU '%sku%' ist nicht erreicht.,de_DE +cart.pre.check.quantity.max.failed,Die Maximalanzahl für Produkt SKU '%sku%' ist überschritten.,de_DE +cart.pre.check.quantity.interval.failed,Die Anzahl für Produkt SKU '%sku%' liegt nicht innerhalb des vorgegebenen Intervals.,de_DE +cart.item.sales_unit.not_found,Sales unit is not found for product with SKU '%sku%'.,en_US +cart.item.sales_unit.not_found,Verkaufseinheit wird für Produkt mit SKU '%sku%' nicht gefunden.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitWidgetPlugin | Allows customers to select sales units for the product when adding to cart. |None | SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\ProductDetailPage | +|QuantitySalesUnitWidgetPlugin|Displays selected sales unit information for products on the cart overview page.|None|SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\CartPage| + +**src/Pyz/Yves/ProductDetailPage/ProductDetailPageDependencyProvider.php** + +```php + sales unit calculations. Applies product quantity restrictions on sales unit level. Offers recommendation when invalid quantity is selected. Maintains stock-based quantity and sales unit information for posting |vendor/spryker-shop/product-measurement-unit-widget/src/SprykerShop/Yves/ProductMeasurementUnitWidget/Theme/default/components/molecules/measurement-quantity-selector/measurement-quantity-selector.ts | + +Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +| --- | --- | +| ProductMeasurementUnitWidgetPlugin | Go to the product detail page where the product has sales units and add a product to the cart with a sales unit. | +| QuantitySalesUnitWidgetPlugin | Go to the cart overview page and see if the sales unit information appears for a product. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-availability-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-availability-feature.md new file mode 100644 index 00000000000..cc03e213b2b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-availability-feature.md @@ -0,0 +1,307 @@ + + +This document describes how to install the Product Offer Service Points Availability feature. + +## Install feature core + +Follow the steps below to install the Product Offer Service Points Availability feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer Service Points | {{page.release_tag}} | [Install the Product Offer Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | + +### 1) Install the required modules + +1. Install the required modules using Composer: + +```bash +composer require spryker-feature/product-offer-service-points-availability: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------------------------------|--------------------------------------------------------------------------------------| +| ProductOfferServicePointAvailability | vendor/spryker/product-offer-service-point-availability | +| ProductOfferServicePointAvailabilityCalculatorStorage | vendor/spryker/product-offer-service-point-availability-calculator-storage | +| ProductOfferServicePointAvailabilityCalculatorStorageExtension | vendor/spryker/product-offer-service-point-availability-calculator-storage-extension | +| ProductOfferServicePointAvailabilitiesRestApi | vendor/spryker/product-offer-service-point-availabilities-rest-api | +| ProductOfferServicePointAvailabilityStorage | vendor/spryker/product-offer-service-point-availability-storage | +| ProductOfferServicePointAvailabilityStorageExtension | vendor/spryker/product-offer-service-point-availability-storage-extension | +| ProductOfferServicePointAvailabilityWidget | vendor/spryker-shop/product-offer-service-point-availability-widget | + +{% endinfo_block %} + +2. Optional: To install an example calculator strategy for the Click & Collect product offer service point availability, install the following module: + +```bash +composer require spryker/click-and-collect-example: "^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------|------------------------------------------| +| ClickAndCollectExample | vendor/spryker/click-and-collect-example | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------------------------------|-------|---------|--------------------------------------------------------------------------------------------------------------| +| ProductOfferCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferCriteriaTransfer | +| ProductAvailabilityCriteria | class | created | src/Generated/Shared/Transfer/ProductAvailabilityCriteriaTransfer | +| ServicePoint | class | created | src/Generated/Shared/Transfer/ServicePointTransfer | +| SellableItemRequest | class | created | src/Generated/Shared/Transfer/SellableItemRequestTransfer | +| ProductOfferConditions | class | created | src/Generated/Shared/Transfer/ProductOfferConditionsTransfer | +| SellableItemsResponse | class | created | src/Generated/Shared/Transfer/SellableItemsResponseTransfer | +| SellableItemResponse | class | created | src/Generated/Shared/Transfer/SellableItemResponseTransfer | +| SellableItemsRequest | class | created | src/Generated/Shared/Transfer/SellableItemsRequestTransfer | +| ProductOfferCollection | class | created | src/Generated/Shared/Transfer/ProductOfferCollectionTransfer | +| ProductOfferServiceCollection | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCollectionTransfer | +| ProductOfferServiceCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCriteriaTransfer | +| ProductOfferServiceConditions | class | created | src/Generated/Shared/Transfer/ProductOfferServiceConditionsTransfer | +| ProductOffer | class | created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| ProductOfferServices | class | created | src/Generated/Shared/Transfer/ProductOfferServicesTransfer | +| Service | class | created | src/Generated/Shared/Transfer/ServiceTransfer | +| ProductOfferServicePointAvailabilityRequestItem | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityRequestItemTransfer | +| ProductOfferServicePointAvailabilityConditions | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityConditionsTransfer | +| ProductOfferServicePointAvailabilityCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityCriteriaTransfer | +| ProductOfferServicePointAvailabilityResponseItem | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityResponseItemTransfer | +| ProductOfferServicePointAvailabilityCollection | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityCollectionTransfer | +| ProductOfferStorage | class | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| ServiceStorage | class | created | src/Generated/Shared/Transfer/ServiceStorageTransfer | +| ServiceTypeStorage | class | created | src/Generated/Shared/Transfer/ServiceTypeStorageTransfer | +| ProductOfferAvailabilityStorage | class | created | src/Generated/Shared/Transfer/ProductOfferAvailabilityStorageTransfer | +| ProductOfferStorageCollection | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCollectionTransfer | +| ProductOfferStorageCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCriteriaTransfer | +| ServicePointStorage | class | created | src/Generated/Shared/Transfer/ServicePointStorageTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| RestProductOfferServicePointAvailabilitiesRequestAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilitiesRequestAttributesTransfer | +| RestProductOfferServicePointAvailabilityRequestItemsAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilityRequestItemsAttributesTransfer | +| RestProductOfferServicePointAvailabilitiesResponseAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilitiesResponseAttributesTransfer | +| RestProductOfferServicePointAvailabilityResponseItemsAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilityResponseItemsAttributesTransfer | +| RestProductOfferServicePointAvailabilitiesResponseAttributesCollection | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilitiesResponseAttributesCollectionTransfer | +| RestErrorMessage | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Set up the following behaviors. + +#### Enable the availability plugin + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------| +| ProductOfferServicePointBatchAvailabilityStrategyPlugin | Validates the service point for a product offer. | | Spryker\Zed\ProductOfferServicePointAvailability\Communication\Plugin\Availability\ProductOfferServicePointBatchAvailabilityStrategyPlugin | + +**src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php** + +```php + + */ + protected function getBatchAvailabilityStrategyPlugins(): array + { + return [ + new ProductOfferServicePointBatchAvailabilityStrategyPlugin(), // Needs to be before ProductConcreteBatchAvailabilityStrategyPlugin + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Add a product offer with a service point to cart. + +2. In the `spy_product_offer_service` database table, delete the connection between the product offer and the service point. + +3. Try to create an order. + Make sure you get the error message about the product being unavailable. + +{% endinfo_block %} + +#### Enable the demo Click & Collect availability calculator strategy plugin + +Optional: If you've installed the example module in [1) Install the required modules](#install-the-required-modules), enable the following example plugin. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| ExampleClickAndCollectProductOfferServicePointAvailabilityCalculatorStrategyPlugin | Calculates and returns product offer availabilities by service point UUID for requested items, prioritizing the matching criteria. Takes into account merchant references if provided. | | Spryker\Client\ClickAndCollectExample\Plugin | + +**src/Pyz/Client/ProductOfferServicePointAvailabilityCalculatorStorage/ProductOfferServicePointAvailabilityCalculatorStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferServicePointAvailabilityCalculatorStrategyPlugins(): array + { + return [ + new ExampleClickAndCollectProductOfferServicePointAvailabilityCalculatorStrategyPlugin(), + ]; + } +} +``` + +#### Enable the Storefront API + +To enable the Storefront API, register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|----------------------------------------------------------------------|---------------|------------------------------------------------------------| +| ProductOfferServicePointAvailabilitiesResourceRoutePlugin | Registers the `product-offer-service-point-availabilities` resource. | | Spryker\Glue\ProductOfferServicePointAvailabilitiesRestApi | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductOfferServicePointAvailabilitiesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send the following request: + +`POST https://glue.mysprykershop.com/product-offer-service-point-availabilities` + +```json + { + "data": { + "type": "product-offer-service-point-availabilities", + "attributes": { + "servicePointUuids": [ + "{{service-point-uuid}}" + ], + "serviceTypeUuid": "{{service-type-uuid}}", + "productOfferServicePointAvailabilityRequestItems": [ + { + "productConcreteSku": "{{product-concrete-sku}}", + "productOfferReference": "{{product-offer-reference}}", + "quantity": 1 + } + ] + } + } + } +``` + +Make sure you get a valid response. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps to install the Product Offer Service Points Availability feature frontend. + +### 1) Add translations + +1. Append the glossary: + +```csv +product_offer_service_point_availability_widget.all_items_available,All items are available.,en_US +product_offer_service_point_availability_widget.all_items_available,Alle Produkte sind verfügbar.,de_DE +product_offer_service_point_availability_widget.some_items_not_available,Some items are not available.,en_US +product_offer_service_point_availability_widget.some_items_not_available,Einige der Produkte sind nicht verfügbar.,de_DE +product_offer_service_point_availability_widget.all_items_not_available,Not available.,en_US +product_offer_service_point_availability_widget.all_items_not_available,Keine der Produkte sind verfügbar.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 2) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|-----------------------------------------------------------------------------------|----------------|---------------------------------------------------------------------| +| ProductOfferServicePointAvailabilityDisplayWidget | Enables the message about the product offer availability for service points. | | SprykerShop\Yves\ProductOfferServicePointAvailabilityWidget\Widget | +| ProductOfferServicePointAvailabilityWidget | Shows the product offer availability for service points. | | SprykerShop\Yves\ProductOfferServicePointAvailabilityWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ProductOfferServicePointAvailabilityWidget::class, + ProductOfferServicePointAvailabilityDisplayWidget::class, + ]; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-feature.md new file mode 100644 index 00000000000..32de0cbcb3b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-service-points-feature.md @@ -0,0 +1,602 @@ + + +This document describes how to install the Product Offer + Service Points feature. + +## Install feature core + +Follow the steps below to install the Product Offer + Service Points feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer | {{page.release_tag}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/product-offer-service-points: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|--------------------------------------------------------| +| ProductOfferServicePoint | vendor/spryker/product-offer-service-point | +| ProductOfferServicePointDataImport | vendor/spryker/product-offer-service-point-data-import | +| ProductOfferServicePointGui | vendor/spryker/product-offer-service-point-gui | +| ProductOfferServicePointStorage | vendor/spryker/product-offer-service-point-storage | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------| +| spy_product_offer_service | Entity.spy_product_offer_service.create
    Entity.spy_product_offer_service.delete | + +**src/Pyz/Zed/ProductOfferServicePoint/Persistence/Propel/Schema/spy_product_offer_service.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------------|--------|---------| +| spy_product_offer_service | table | created | +| spy_product_offer_service_storage | table | created | + +Make sure that propel entities have been generated successfully by checking their existence. Also, make generated entity classes extending respective Spryker core classes. + +| CLASS NAMESPACE | EXTENDS | +|-----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------| +| \Orm\Zed\ProductOfferServicePoint\Persistence\SpyProductOfferService | \Spryker\Zed\ProductOfferServicePoint\Persistence\Propel\AbstractSpyProductOfferService | +| \Orm\Zed\ProductOfferServicePoint\Persistence\SpyProductOfferServiceQuery | \Spryker\Zed\ProductOfferServicePoint\Persistence\Propel\AbstractSpyProductOfferServiceQuery | +| \Orm\Zed\ProductOfferServicePointStorage\Persistence\SpyProductOfferServiceStorage | \Spryker\Zed\ProductOfferServicePointStorage\Persistence\Propel\AbstractSpyProductOfferServiceStorage | +| \Orm\Zed\ProductOfferServicePointStorage\Persistence\SpyProductOfferServiceStorageQuery | \Spryker\Zed\ProductOfferServicePointStorage\Persistence\Propel\AbstractSpyProductOfferServiceStorageQuery | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------|-------|---------|---------------------------------------------------------------------------------| +| ServicePoint | class | created | src/Generated/Shared/Transfer/ServicePointTransfer | +| ServicePointCollection | class | created | src/Generated/Shared/Transfer/ServicePointCollectionTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| Sort | class | created | src/Generated/Shared/Transfer/SortTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| DataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReport | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| ServicePointStorage | class | created | src/Generated/Shared/Transfer/ServicePointStorageTransfer | +| ProductOfferService | class | created | src/Generated/Shared/Transfer/ProductOfferServiceTransfer | +| ProductOfferServices | class | created | src/Generated/Shared/Transfer/ProductOfferServicesTransfer | +| ProductOfferServiceCollection | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCollectionTransfer | +| ProductOfferServiceCollectionRequest | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCollectionRequestTransfer | +| ProductOfferServiceCollectionResponse | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCollectionResponseTransfer | +| ProductOfferServiceCollectionResponse | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCollectionResponseTransfer | +| ProductOfferServiceCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferServiceCriteriaTransfer | +| ProductOfferServiceConditions | class | created | src/Generated/Shared/Transfer/ProductOfferServiceConditionsTransfer | +| IterableProductOfferServicesCriteria | class | created | src/Generated/Shared/Transfer/IterableProductOfferServicesCriteriaTransfer | +| IterableProductOfferServicesConditions | class | created | src/Generated/Shared/Transfer/IterableProductOfferServicesConditionsTransfer | +| ProductOfferServiceStorage | class | created | src/Generated/Shared/Transfer/ProductOfferServiceStorageTransfer | +| ProductOfferServiceStorageCollection | class | created | src/Generated/Shared/Transfer/ProductOfferServiceStorageCollectionTransfer | +| ServicePointStorageCollection | class | created | src/Generated/Shared/Transfer/ServicePointStorageCollectionTransfer | +| ServicePointStorageCriteria | class | created | src/Generated/Shared/Transfer/ServicePointStorageCriteriaTransfer | +| ServicePointStorageConditions | class | created | src/Generated/Shared/Transfer/ServicePointStorageConditionsTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | + +{% endinfo_block %} + +### 3) Import service points + +1. Prepare your data according to your requirements using our demo data: + +**data/import/common/common/product_offer_service.csv** + +```csv +product_offer_reference,service_key +offer419,s1 +offer420,s1 +offer421,s1 +offer422,s1 +offer423,s1 +offer424,s1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|-----------|-----------|--------------|----------------------------------------| +| product_offer_reference | ✓ | string | offer419 | Unique reference of the product offer. | +| service_key | ✓ | string | s1 | Unique key of the service. | + +2. Enable data imports at your configuration file—for example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: product-offer-service + source: data/import/common/common/marketplace/product_offer_service.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|---------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| ProductOfferServiceDataImportPlugin | Imports product offer services into the database. | None | \Spryker\Zed\ProductOfferServicePointDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductOfferServiceDataImportPlugin(), + ]; + } +} +``` + +4. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ProductOfferServicePointDataImportConfig::IMPORT_TYPE_PRODUCT_OFFER_SERVICE), + ]; + + return $commands; + } +} +``` + +5. Import data: + +```bash +console data:import:product-offer-service +``` + +{% info_block warningBox "Verification" %} + +Make sure that entities were imported to the following database tables respectively: + +- `spy_service_point` +- `spy_service_point_store` +- `spy_service_point_address` +- `spy_service_type` +- `spy_service` +- `spy_product_offer_service` + +{% endinfo_block %} + +### 4) Add translations + +1. Append the glossary according to your configuration: + +```csv +product_offer_service_point.validation.product_offer_reference_not_found,Product offer '%product_offer_reference%' not found.,en_US +product_offer_service_point.validation.product_offer_reference_not_found,Product offer '%product_offer_reference%' nicht gefunden.,de_DE +product_offer_service_point.validation.product_offer_has_multiple_service_points,Product offer '%product_offer_reference%' can have only one service point.,en_US +product_offer_service_point.validation.product_offer_has_multiple_service_points,Das Product Offer '%product_offer_reference%' kann nur einen Service Point haben.,de_DE +product_offer_service_point.validation.service_uuid_not_found,Services with uuids '%service_uuids%' not found.,en_US +product_offer_service_point.validation.service_uuid_not_found,Services mit den uuids '%service_uuids%' wurde nicht gefunden.,de_DE +product_offer_service_point.validation.service_not_unique,A service for product offer '%product_offer_reference%' with the same uuid already exists in request.,de_DE +product_offer_service_point.validation.service_not_unique,Ein Service für Product Offer '%product_offer_reference%' mit derselben UUID ist bereits in der Anfrage vorhanden.,de_DE +product_offer_service_point.validation.product_offer_not_unique,A product offer with the same reference already exists in request.,de_DE +product_offer_service_point.validation.product_offer_not_unique,Ein Product Offer mit der gleichen Referenz liegt bereits in der Anfrage vor.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 5) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published and synchronized to the Storage on create, edit, and delete changes. + +1. In `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`, adjust the `RabbitMq` module's configuration: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ProductOfferServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_PRODUCT_OFFER_SERVICE, + ]; + } +} +``` + +2. Register new queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ProductOfferServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_PRODUCT_OFFER_SERVICE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +3. Configure synchronization pool and event queue name: + +**src/Pyz/Zed/ProductOfferServicePointStorage/ProductOfferServicePointStorageConfig.php** + +```php + +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +getProductOfferServicePointStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductOfferServicePublisherTriggerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getProductOfferServicePointStoragePlugins(): array + { + return [ + new ProductOfferServiceWritePublisherPlugin(), + new ProductOfferServiceWriteByPublishPublisherPlugin(), + new ProductOfferServiceProductOfferWritePublisherPlugin(), + new ProductOfferServiceProductOfferStoreWritePublisherPlugin(), + new ProductOfferServiceServiceWritePublisherPlugin(), + new ProductOfferServiceServicePointWritePublisherPlugin(), + new ProductOfferServiceServicePointStoreWritePublisherPlugin(), + ]; + } +} +``` + +
    + +5. Set up synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------|----------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| ProductOfferServiceSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer service storage table content into the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferServicePointStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductOfferServiceSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `product-offer-service` trigger plugin works correctly: + +1. Fill the `spy_product_offer_service` table with data. +2. Run the `console publish:trigger-events -r product_offer_service` command. +3. Make sure that the `spy_product_offer_service_storage` table has been filled with respective data. +4. Make sure that, in your system, storage entries are displayed with `kv:product_offer_service:{store}:{product_offer_reference}` mask. + +Make sure that the `product-offer-service` synchronization plugin works correctly: + +1. Fill the `spy_product_offer_service_storage` table with some data. +2. Run the `console sync:data -r product_offer_service` command. +3. Make sure that, in your system, storage entries are displayed with the `kv:product_offer_service:{store}:{product_offer_reference}` mask. + +Make sure when a product offer service is created via DataImport, it's exported to the key-value store (Redis or Valkey) accordingly. + +Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: + +```yaml +{ + "productOfferReference": "offer1", + "servicePointUuid": "262feb9d-33a7-5c55-9b04-45b1fd22067e", + "serviceUuids": ["f34c6ee7-8c73-4542-a621-846d91fafa56", "f34c6ee7-8c73-4542-a621-846d91fafa56", "f34c6ee7-8c73-4542-a621-846d91fafa56"], + "_timestamp": 1683216744.8334839 +} +``` + +{% endinfo_block %} + +### 7) Set up behavior + +To expand product offers with services, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|-------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| ServiceProductOfferPostCreatePlugin | Creates the product offer service entities. | | Spryker\Zed\ProductOfferServicePoint\Communication\Plugin\ProductOffer | +| ServiceProductOfferPostUpdatePlugin | Updates the product offer service entities. | | Spryker\Zed\ProductOfferServicePoint\Communication\Plugin\ProductOffer | +| ServiceProductOfferExpanderPlugin | Expands product offer transfers with services. | | Spryker\Zed\ProductOfferServicePoint\Communication\Plugin\ProductOffer | +| ServiceProductOfferStorageExpanderPlugin | Expands product offer storage transfers with services from the storage. | | Spryker\Client\ProductOfferServicePointStorage\Plugin\ProductOfferStorage | +| ServiceProductOfferViewSectionPlugin | Expands the product offer view section with services. | | Spryker\Zed\ProductOfferServicePointGui\Communication\Plugin\ProductOfferGui | + +
    +src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php + +```php + + */ + protected function getProductOfferPostCreatePlugins(): array + { + return [ + ... + new ServiceProductOfferPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferPostUpdatePluginInterface> + */ + protected function getProductOfferPostUpdatePlugins(): array + { + return [ + ... + new ServiceProductOfferPostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferExpanderPluginInterface> + */ + protected function getProductOfferExpanderPlugins(): array + { + return [ + ... + new ServiceProductOfferExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageExpanderPlugins(): array + { + return [ + new ServiceProductOfferStorageExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + public function getProductOfferViewSectionPlugins(): array + { + return [ + new ServiceProductOfferViewSectionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to the **Marketplace > Offers**. +2. On the **Offers** page, next to a product offer, click **View**. + This opens the **View Offer: {offer ID}** page. +3. Scroll down the page and make sure the **SERVICES** pane is displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-availability-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-availability-feature.md new file mode 100644 index 00000000000..b1d2fd5dc5f --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-availability-feature.md @@ -0,0 +1,147 @@ + + +This document describes how to install the Product Offer Shipment Availability feature. + +## Install feature core + +Follow the steps below to install the Product Offer Shipments Availability feature. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/product-offer-shipment-availability: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------------|----------------------------------------------------| +| ProductOfferShipmentAvailability | vendor/spryker/product-offer-shipment-availability | + +{% endinfo_block %} + + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------------------|-------|---------|----------------------------------------------------------------------------------------| +| ProductOfferCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferCriteriaTransfer | +| ProductAvailabilityCriteria | class | created | src/Generated/Shared/Transfer/ProductAvailabilityCriteriaTransfer | +| ShipmentType | class | created | src/Generated/Shared/Transfer/ShipmentTypeTransfer | +| SellableItemRequest | class | created | src/Generated/Shared/Transfer/SellableItemRequestTransfer | +| ProductOfferConditions | class | created | src/Generated/Shared/Transfer/ProductOfferConditionsTransfer | +| SellableItemsResponse | class | created | src/Generated/Shared/Transfer/SellableItemsResponseTransfer | +| SellableItemResponse | class | created | src/Generated/Shared/Transfer/SellableItemResponseTransfer | +| SellableItemsRequest | class | created | src/Generated/Shared/Transfer/SellableItemsRequestTransfer | +| ProductOfferCollection | class | created | src/Generated/Shared/Transfer/ProductOfferCollectionTransfer | +| ProductOffer | class | created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| ProductOfferShipmentTypeCollection | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCollectionTransfer | +| ProductOfferShipmentTypeCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCriteriaTransfer | +| ProductOfferShipmentTypeConditions | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeConditionsTransfer | +| ProductOfferShipmentType | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeTransfer | +| ProductOfferServicePointAvailabilityConditions | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityConditionsTransfer | +| ProductOfferServicePointAvailabilityCollection | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityCollectionTransfer | +| ProductOfferServicePointAvailabilityCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityCriteriaTransfer | +| ProductOfferServicePointAvailabilityResponseItem | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityResponseItemTransfer | +| ProductOfferStorage | class | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| ShipmentTypeStorage | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageTransfer | +| ShipmentTypeStorageConditions | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageConditionsTransfer | +| ShipmentTypeStorageCriteria | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCriteriaTransfer | +| ShipmentTypeStorageCollection | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCollectionTransfer | + +{% endinfo_block %} + +## Set up behavior + +Register the availability plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| ProductOfferShipmentTypeBatchAvailabilityStrategyPlugin | Validates shipment type for the product offer. | None | Spryker\Zed\ProductOfferShipmentTypeAvailability\Communication\Plugin\Availability\ProductOfferShipmentTypeBatchAvailabilityStrategyPlugin | + +**src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php** + +```php + + */ + protected function getBatchAvailabilityStrategyPlugins(): array + { + return [ + new ProductOfferShipmentTypeBatchAvailabilityStrategyPlugin(), // Needs to be before ProductConcreteBatchAvailabilityStrategyPlugin + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that availability plugin works correctly: + +1. Add a product offer with the shipment type to your cart. + +2. Go to `spy_product_offer_shipment_type` and delete the connection between the product offer and the service point. + +3. Try to create an order. You should see the error message that the product isn't available at the moment. + +{% endinfo_block %} + +2. Register the availability filter plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|-------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ShipmentTypeProductOfferServicePointAvailabilityFilterPlugin | Filters product offer service point availability by shipmen type. | None | Spryker\Client\ProductOfferShipmentTypeAvailabilityStorage\Plugin\ProductOfferServicePointAvailabilityStorage\ShipmentTypeProductOfferServicePointAvailabilityFilterPlugin | + +**src/Pyz/Client/ProductOfferServicePointAvailabilityStorage/ProductOfferServicePointAvailabilityStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferServicePointAvailabilityFilterPlugins(): array + { + return [ + new ShipmentTypeProductOfferServicePointAvailabilityFilterPlugin(), + ]; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-feature.md new file mode 100644 index 00000000000..3b45dbdb9d7 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-offer-shipment-feature.md @@ -0,0 +1,609 @@ + + +This document describes how to install the Product Offer Shipment feature. + +## Install feature core + +Follow the steps below to install the Product Offer Shipment feature core. + +## Prerequisites + +Before you start the feature integration, make sure you have integrated the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer | {{page.release_tag}} | [Install the Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | + +## 1) Install the required modules + +1. Install the required modules using Composer: + +```bash +composer require spryker-feature/product-offer-shipment:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|--------------------------------------------------------------| +| ProductOfferShipmentType | vendor/spryker/product-offer-shipment-type | +| ProductOfferShipmentTypeDataImport | vendor/spryker/product-offer-shipment-type-data-import | +| ProductOfferShipmentTypeGui | vendor/spryker/product-offer-shipment-type-gui | +| ProductOfferShipmentTypeStorage | vendor/spryker/product-offer-shipment-type-storage | +| ProductOfferShipmentTypeStorageExtension | vendor/spryker/product-offer-shipment-type-storage-extension | + +{% endinfo_block %} + + + +2. Optional: To install demo Click&Collect functionalities, install the following module: + +```bash +composer require spryker/click-and-collect-example: "^0.4.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------|------------------------------------------| +| ClickAndCollectExample | vendor/spryker/click-and-collect-example | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| spy_product_offer_shipment_type | Entity.spy_product_offer_shipment_type.create
    Entity.spy_product_offer_shipment_type.update
    Entity.spy_product_offer_shipment_type.delete | + +**src/Pyz/Zed/ProductOfferShipmentType/Persistence/Propel/Schema/spy_product_offer_shipment_type.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------------------|-------|---------| +| spy_product_offer_shipment_type | table | created | +| spy_product_offer_shipment_type_storage | table | created | + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------|----------|---------|----------------------------------------------------------------------------------| +| ProductOfferShipmentTypeCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCriteriaTransfer | +| ProductOfferShipmentTypeConditions | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeConditionsTransfer | +| ProductOfferShipmentTypeCollection | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCollectionTransfer | +| ProductOfferShipmentTypeIteratorCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeIteratorCriteriaTransfer | +| ProductOfferShipmentTypeIteratorConditions | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeIteratorConditionsTransfer | +| ProductOfferShipmentType | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeTransfer | +| ProductOfferShipmentTypeStorage | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeStorageTransfer | +| ProductOfferShipmentTypeCollectionRequest | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCollectionRequestTransfer | +| ProductOfferShipmentTypeCollectionResponse | class | created | src/Generated/Shared/Transfer/ProductOfferShipmentTypeCollectionResponseTransfer | +| ProductOfferCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferCriteriaTransfer | +| ProductOfferConditions | class | created | src/Generated/Shared/Transfer/ProductOfferConditionsTransfer | +| ProductOfferCollection | class | created | src/Generated/Shared/Transfer/ProductOfferCollectionTransfer | +| ProductOffer | class | created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| ShipmentTypeCriteria | class | created | src/Generated/Shared/Transfer/ShipmentTypeCriteriaTransfer | +| ShipmentTypeConditions | class | created | src/Generated/Shared/Transfer/ShipmentTypeConditionsTransfer | +| ShipmentTypeCollection | class | created | src/Generated/Shared/Transfer/ShipmentTypeCollectionTransfer | +| ShipmentType | class | created | src/Generated/Shared/Transfer/ShipmentTypeTransfer | +| ProductOfferStorage | class | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| ShipmentTypeStorageCriteria | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCriteriaTransfer | +| ShipmentTypeStorageConditions | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageConditionsTransfer | +| ShipmentTypeStorageCollection | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCollectionTransfer | +| ShipmentTypeStorage | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageTransfer | +| StoreCollection | class | created | src/Generated/Shared/Transfer/StoreCollectionTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| CartChange | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| Sort | class | created | src/Generated/Shared/Transfer/SortTransfer | +| DataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImportConfigurationTransfer | +| DataImporterReport | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| EventEntity | class | created | src/Generated/Shared/Transfer/EventEntityTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| Quote | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| Item | class | created | src/Generated/Shared/Transfer/ItemTransfer | +| ProductOfferStorageCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCriteriaTransfer | +| ProductOfferStorageCollection | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCollectionTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| ProductOfferStorage.productConcreteSku | property | added | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| ShipmentTypeStorage.key | property | added | src/Generated/Shared/Transfer/ShipmentTypeStorageTransfer | + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published to `spy_product_offer_shipment_type_storage` and synchronized to the Storage on create, edit, and delete changes: + +1. In `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`, adjust the `RabbitMq` module configuration: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ProductOfferShipmentTypeStorageConfig::PRODUCT_OFFER_SHIPMENT_TYPE_SYNC_STORAGE_QUEUE, + ]; + } +} +``` + +2. Register the new queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ProductOfferShipmentTypeStorageConfig::PRODUCT_OFFER_SHIPMENT_TYPE_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} + +``` + +3. Configure the synchronization pool and event queue name: + +**src/Pyz/Zed/ShipmentTypeStorage/ShipmentTypeStorageConfig.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getProductOfferShipmentTypeStoragePlugins(), + ); + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductOfferShipmentTypePublisherTriggerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getProductOfferShipmentTypeStoragePlugins(): array + { + return [ + new ProductOfferShipmentTypeWritePublisherPlugin(), + new ProductOfferProductOfferShipmentTypeWritePublisherPlugin(), + new ProductOfferStoreProductOfferShipmentTypeWritePublisherPlugin(), + new ShipmentTypeProductOfferShipmentTypeWritePublisherPlugin(), + new ShipmentTypeStoreProductOfferShipmentTypeWritePublisherPlugin(), + ]; + } +} +``` + +5. Set up synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------|------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| ProductOfferShipmentTypeSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the product offer shipment type storage table's content into the key-value store (Redis or Valkey). | | Spryker\Zed\ProductOfferShipmentTypeStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductOfferShipmentTypeSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `product-offer-shipment-type` data is stored in storage correctly: + +1. Fill the `spy_product_offer`, `spy_product_offer_store`, `spy_shipment_type`, `spy_shipment_type_store`, and `spy_product_offer_shipment_type` tables with data. +2. Run the `console publish:trigger-events -r product_offer` command. +3. Make sure that the `spy_product_offer_shipment_type_storage` table has been filled with respective data. +4. Make sure that, in your system, storage entries are displayed with the `kv:product_offer_shipment_type:{store}:{product_offer_reference}` mask. + +Make sure that `product-offer-shipment-type` synchronization plugin works correctly: + +1. Fill the `spy_product_offer_shipment_type_storage` table with some data. +2. Run the `console sync:data -r product_offer_shipment_type` command. +3. Make sure that, in your system, storage entries are displayed with the `kv:product_offer_shipment_type:{store}:{product_offer_reference}` mask. + +Make sure that when a product offer shipment type relation is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +In the key-value store (Redis or Valkey), make sure data is represented in the following format: + +```json +{ + "product_offer_reference": "offer1", + "shipment_type_uuids": [ + "174d9dc0-55ae-5c4b-a2f2-a419027029ef" + ] +} +``` + +{% endinfo_block %} + +### 4) Import shipment types for product offers + +1. Prepare your data according to your requirements using our demo data: + +**vendor/spryker/spryker/Bundles/ProductOfferShipmentTypeDataImport/data/import/product_offer_shipment_type.csv** + +```csv +product_offer_reference,shipment_type_key +offer1,delivery +offer2,delivery +offer3,delivery +offer4,pickup +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|-----------|-----------|--------------|-----------------------------| +| product_offer_reference | ✓ | string | offer1 | Reference of product offer. | +| shipment_type_key | ✓ | string | delivery | Key of the shipment type. | + +2. Register the following data import plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|--------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| ProductOfferShipmentTypeDataImportPlugin | Imports product offer shipment types data from the specified file. | None | \Spryker\Zed\ProductOfferShipmentTypeDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductOfferShipmentTypeDataImportPlugin(), + ]; + } +} +``` + +3. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . ':' . ProductOfferShipmentTypeDataImportConfig::IMPORT_TYPE_PRODUCT_OFFER_SHIPMENT_TYPE), + ]; + + return $commands; + } +} +``` + +4. Import data: + +```bash +console data:import:product-offer-shipment-type +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_product_offer_shipment_type` table in the database. + +{% endinfo_block %} + +### 5) Add translations + +1. Append the glossary according to your configuration: + +```csv +product_offer_shipment_type.validation.product_offer_reference_not_found,Product offer '%product_offer_reference%' not found.,en_US +product_offer_shipment_type.validation.product_offer_reference_not_found,Product offer '%product_offer_reference%' nicht gefunden.,de_DE +product_offer_shipment_type.validation.shipment_type_uuid_not_found,Delivery types with uuids '%shipment_type_uuids%' not found.,en_US +product_offer_shipment_type.validation.shipment_type_uuid_not_found,Lieferarten mit den uuids '%shipment_type_uuids%' wurde nicht gefunden.,de_DE +product_offer_shipment_type.validation.product_offer_not_unique,A product offer with the same reference already exists in request.,de_DE +product_offer_shipment_type.validation.product_offer_not_unique,Ein Product Offer mit der gleichen Referenz liegt bereits in der Anfrage vor.,de_DE +product_offer_shipment_type.validation.shipment_type_not_unique,A delivery type for product offer '%product_offer_reference%' with the same uuid already exists in request.,de_DE +product_offer_shipment_type.validation.shipment_type_not_unique,Ein Lieferart für Product Offer '%product_offer_reference%' mit derselben UUID ist bereits in der Anfrage vorhanden.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 6) Set up behavior + +Enable the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------| +| ShipmentTypeProductOfferPostCreatePlugin | Persists the product offer shipment type to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferPostUpdatePlugin | Deletes redundant product offer shipment types from persistence. Persists missed product offer shipment types to persistence. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferExpanderPlugin | Expands `ProductOfferTransfer` with related shipment types. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\ProductOffer | +| ShipmentTypeProductOfferStorageExpanderPlugin | Expands `ProductOfferStorageTransfer` with shipment type storage data. | | Spryker\Client\ProductOfferShipmentTypeStorage\Plugin\ProductOfferStorage | +| ShipmentTypeProductOfferAvailableShipmentTypeFilterPlugin | Filters out shipment types without the product offer shipment type relation. | | Spryker\Client\ClickAndCollectExample\Plugin\ShipmentTypeStorage | +| ShipmentTypeProductOfferViewSectionPlugin | Expands the product offer view section with shipment types. | | Spryker\Zed\ProductOfferShipmentTypeGui\Communication\Plugin\ProductOfferGui | + +
    src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php + +```php + + */ + protected function getProductOfferPostCreatePlugins(): array + { + return [ + new ShipmentTypeProductOfferPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferPostUpdatePluginInterface> + */ + protected function getProductOfferPostUpdatePlugins(): array + { + return [ + new ShipmentTypeProductOfferPostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferExpanderPluginInterface> + */ + protected function getProductOfferExpanderPlugins(): array + { + return [ + new ShipmentTypeProductOfferExpanderPlugin(), + ]; + } +``` + +
    + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageExpanderPlugins(): array + { + return [ + new ShipmentTypeProductOfferStorageExpanderPlugin(), + ]; + } +} +``` + + +**src/Pyz/Client/ShipmentTypeStorage/ShipmentTypeStorageDependencyProvider.php** + +```php + + */ + protected function getAvailableShipmentTypeFilterPlugins(): array + { + return [ + new ShipmentTypeProductOfferAvailableShipmentTypeFilterPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + public function getProductOfferViewSectionPlugins(): array + { + return [ + new ServiceProductOfferViewSectionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to the **Marketplace > Offers**. +2. On the **Offers** page, next to a product offer, click **View**. + This opens the **View Offer: {offer ID}** page. +3. Scroll down the page and make sure the **SHIPMENT TYPES** pane is displayed. + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-options-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-options-order-management-feature.md new file mode 100644 index 00000000000..2547f16c901 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-options-order-management-feature.md @@ -0,0 +1,49 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Product Options | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductOptionsOrderItemExpanderPlugin | Expands order items with product options. | None | Spryker\Zed\ProductOption\Communication\Plugin\Sales | + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php +Entity.spy_product_review.update
    Entity.spy_product_review.delete | + +**src/Pyz/Zed/ProductReview/Persistence/Propel/Schema/spy_product_review.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------|--------|---------| +| spy_product_review | table | created | +| spy_product_abstract_review_storage | table | created | +| spy_product_review_search | table | created | + +Make sure that propel entities have been generated successfully by checking their existence. Also, make generated entity classes extending respective Spryker core classes: + +| CLASS NAMESPACE | EXTENDS | +|--------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| +| \Orm\Zed\ProductReview\Persistence\SpyProductReview | \Spryker\Zed\ProductReview\Persistence\Propel\AbstractSpyProductReview | +| \Orm\Zed\ProductReview\Persistence\SpyProductReviewQuery | \Spryker\Zed\ProductReview\Persistence\Propel\AbstractSpyProductReviewQuery | +| \Orm\Zed\ProductReviewStorage\Persistence\SpyProductAbstractReviewStorage | \Spryker\Zed\ProductReviewStorage\Persistence\Propel\AbstractSpyProductAbstractReviewStorage | +| \Orm\Zed\ProductReviewStorage\Persistence\SpyProductAbstractReviewStorageQuery | \Spryker\Zed\ProductReviewStorage\Persistence\Propel\AbstractSpyProductAbstractReviewStorageQuery | +| \Orm\Zed\ProductReviewSearch\Persistence\SpyProductReviewSearch | \Spryker\Zed\ProductReviewSearch\Persistence\Propel\AbstractSpyProductReviewSearch | +| \Orm\Zed\ProductReviewSearch\Persistence\SpyProductReviewSearchQuery | \Spryker\Zed\ProductReviewSearch\Persistence\Propel\AbstractSpyProductReviewSearchQuery | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------|-------|---------|----------------------------------------------------------------------| +| ProductReview | class | created | src/Generated/Shared/Transfer/ProductReviewTransfer | +| ProductReviewRequest | class | created | src/Generated/Shared/Transfer/ProductReviewRequestTransfer | +| ProductReviewError | class | created | src/Generated/Shared/Transfer/ProductReviewErrorTransfer | +| ProductReviewResponse | class | created | src/Generated/Shared/Transfer/ProductReviewResponseTransfer | +| ProductReviewSearchConfig | class | created | src/Generated/Shared/Transfer/ProductReviewSearchConfigTransfer | +| ProductReviewSearchRequest | class | created | src/Generated/Shared/Transfer/ProductReviewSearchRequestTransfer | +| BulkProductReviewSearchRequest | class | created | src/Generated/Shared/Transfer/BulkProductReviewSearchRequestTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| ProductAbstractReview | class | created | src/Generated/Shared/Transfer/ProductAbstractReviewTransfer | +| PaginationSearchResult | class | created | src/Generated/Shared/Transfer/PaginationSearchResultTransfer | +| FacetConfig | class | created | src/Generated/Shared/Transfer/FacetConfigTransfer | +| SortConfig | class | created | src/Generated/Shared/Transfer/SortConfigTransfer | +| PaginationConfig | class | created | src/Generated/Shared/Transfer/PaginationConfigTransfer | +| Locale | class | created | src/Generated/Shared/Transfer/LocaleTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| SearchContext | class | created | src/Generated/Shared/Transfer/SearchContextTransfer | +| ProductView | class | created | src/Generated/Shared/Transfer/ProductViewTransfer | +| ProductReviewSummary | class | created | src/Generated/Shared/Transfer/ProductReviewSummaryTransfer | +| RatingAggregation | class | created | src/Generated/Shared/Transfer/RatingAggregationTransfer | +| EventEntity | class | created | src/Generated/Shared/Transfer/EventEntityTransfer | +| ProductConcrete | class | created | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| AddReviews | class | created | src/Generated/Shared/Transfer/AddReviewsTransfer | +| Review | class | created | src/Generated/Shared/Transfer/ReviewTransfer | +| MessageAttributes | class | created | src/Generated/Shared/Transfer/MessageAttributesTransfer | +| ProductReviewSearch | class | created | src/Generated/Shared/Transfer/ProductReviewSearchTransfer | +| ProductPageSearch | class | created | src/Generated/Shared/Transfer/ProductPageSearchTransfer | +| ProductPayload | class | created | src/Generated/Shared/Transfer/ProductPayloadTransfer | +| ProductPageLoad | class | created | src/Generated/Shared/Transfer/ProductPageLoadTransfer | +| PageMap | class | created | src/Generated/Shared/Transfer/PageMapTransfer | +| ConcreteProductsRestAttributes | class | created | src/Generated/Shared/Transfer/ConcreteProductsRestAttributesTransfer | +| AbstractProductsRestAttributes | class | created | src/Generated/Shared/Transfer/AbstractProductsRestAttributesTransfer | +| RestProductReviewsAttributes | class | created | src/Generated/Shared/Transfer/RestProductReviewsAttributesTransfer | +| ProductReviewSearchRequest | class | created | src/Generated/Shared/Transfer/ProductReviewSearchRequestTransfer | +| BulkProductReviewSearchRequest | class | created | src/Generated/Shared/Transfer/BulkProductReviewSearchRequestTransfer | +| ProductReviewResponse | class | created | src/Generated/Shared/Transfer/ProductReviewResponseTransfer | +| RestUser | class | created | src/Generated/Shared/Transfer/RestUserTransfer | +| RestUser | class | created | src/Generated/Shared/Transfer/RestUserTransfer | +| ProductReviewStorage | class | created | src/Generated/Shared/Transfer/ProductReviewStorageTransfer | +| RestErrorMessage | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | +| ProductReviewError | class | created | src/Generated/Shared/Transfer/ProductReviewErrorTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | + +{% endinfo_block %} + +### 3) Import product reviews + +For details about this step, see [Ratings and Reviews data import](/docs/pbc/all/ratings-reviews/latest/import-and-export-data/ratings-and-reviews-data-import.html). + +### 4) Add translations + +1. Append the glossary according to your configuration: + +```csv +product_review.product_ratings,Product Ratings,en_US +product_review.product_ratings,Product Bewertungen,de_DE +product_review.product_reviews,Product Reviews,en_US +product_review.product_reviews,Product Bewertungen,de_DE +product_review.on,on,en_US +product_review.on,am,de_DE +product_review.summary.star,star,en_US +product_review.summary.star,Stern,de_DE +product_review.summary.stars,stars,en_US +product_review.summary.stars,Sterne,de_DE +product_review.summary.out_of,out of,en_US +product_review.summary.out_of,von,de_DE +product_review.summary.review,review,en_US +product_review.summary.review,Bewertung,de_DE +product_review.summary.reviews,reviews,en_US +product_review.summary.reviews,Bewertungen,de_DE +product_review.no_reviews,No review for this product yet,en_US +product_review.no_reviews,Dieses Produkt hat noch keine Bewertung,de_DE +product_review.submit.add_a_review,Add a Review,en_US +product_review.submit.add_a_review,Bewertung Abgeben,de_DE +product_review.submit.rating,Rating,en_US +product_review.submit.rating,Bewertung,de_DE +product_review.submit.rating.none,No rating was selected,en_US +product_review.submit.rating.none,Es wurde keine Bewertung ausgewählt,de_DE +product_review.submit.summary,Summary,en_US +product_review.submit.summary,Überschrift,de_DE +product_review.submit.description,Description,en_US +product_review.submit.description,Rezension,de_DE +product_review.submit.nickname,Name,en_US +product_review.submit.nickname,Name,de_DE +product_review.submit.success,Product review was successfully submitted.,en_US +product_review.submit.success,Produktrezension wurde erfolgreich versendet.,de_DE +product_review.error.no_customer,Please login to access this feature.,en_US +product_review.error.no_customer,"Bitte melden Sie sich an, um Zugiff auf dieses Feature zu erhalten.",de_DE +product_review.error.invalid_rating,Product rating should be selected.,en_US +product_review.error.invalid_rating,Produktbewertung soll ausgewählt werden.,de_DE + ``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 5) Configure export to Elasticsearch + +1. In `SearchElasticsearchConfig`, adjust the Elasicsearch config: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + public function getStoreCreationResourcesToReSync(): array + { + return [ + ProductReviewSearchConfig::PRODUCT_REVIEW_RESOURCE_NAME, + ]; + } +} +``` + +4. Configure the synchronization pool and event queue name: + +**src/Pyz/Zed/ProductReviewSearch/ProductReviewSearchConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductReviewSynchronizationDataPlugin(), + ]; + } +} +``` + +6. Enable event trigger plugins to be able to re-trigger publish events: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|----------------------------------------------------------------------------------|---------------|------------------------------------------------------------| +| ProductReviewEventResourceQueryContainerPlugin | Allows synchronizing the product review search table content with Elasticsearch. | None | Spryker\Zed\ProductReviewSearch\Communication\Plugin\Event | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + */ + protected function getEventTriggerResourcePlugins(): array + { + return [ + new ProductReviewEventResourceQueryContainerPlugin(), + ]; + } +} +``` + +7. Register the event subscriber: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|------------------------------------------------|---------------|-----------------------------------------------------------------------------------| +| ProductReviewSearchEventSubscriber | Registers listeners for product review entity. | None | Spryker\Zed\ProductReviewSearch\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductReviewSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +8. Register product page data expander, data loader, and map expander plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|-------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| ProductReviewDataLoaderExpanderPlugin | Expands the provided object with review details. | None | Spryker\Zed\ProductReviewSearch\Communication\Plugin\PageDataExpander | +| ProductReviewPageDataLoaderPlugin | Expands the provided object with review details. | None | Spryker\Zed\ProductReviewSearch\Communication\Plugin\PageDataLoader | +| ProductReviewMapExpanderPlugin | Adds product review data related to product abstract search data. | None | Spryker\Zed\ProductReviewSearch\Communication\Plugin\ProductPageSearch\Elasticsearch | + +
    src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php +|array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataExpanderPluginInterface> + */ + protected function getDataExpanderPlugins(): array + { + $dataExpanderPlugins = []; + + $dataExpanderPlugins[ProductReviewSearchConfig::PLUGIN_PRODUCT_PAGE_RATING_DATA] = new ProductReviewDataLoaderExpanderPlugin(); + + return $dataExpanderPlugins; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface> + */ + protected function getDataLoaderPlugins(): array + { + return [ + new ProductReviewPageDataLoaderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface> + */ + protected function getProductAbstractMapExpanderPlugins(): array + { + return [ + new ProductReviewMapExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +1. Fill the `spy_product_review` table with some data and run `console event:trigger -r product_review`. +2. Make sure that the `spy_product_review_search` table is filled with respective data. +3. Make sure that the `spy_product_abstract_page_search` table entry from the product review has changed. +4. In the `spy_product_review_search` table, change some records and run `console sync:data product_review`. +5. Make sure that your changes have been synced to the respective Elasticsearch document. + +{% endinfo_block %} + +### 5) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published and synchronized to the Storage on create, edit, and delete changes: + +1. Configure synchronization pool and event queue name: + +**src/Pyz/Zed/ProductReviewStorage/ProductReviewStorageConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductReviewSynchronizationDataPlugin(), + ]; + } +} +``` + +3. Enable event trigger plugins to be able to re-trigger publish events: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| ProductReviewEventResourceQueryContainerPlugin | Allows synchronizing the product abstract review storage table content with the key-value store (Redis or Valkey). | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Event | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + */ + protected function getEventTriggerResourcePlugins(): array + { + return [ + new ProductReviewEventResourceQueryContainerPlugin(), + ]; + } +} +``` + +4. Register the event subscriber: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|------------------------------------------------|---------------|------------------------------------------------------------------------| +| ProductReviewStorageEventSubscriber | Registers listeners for product review entity. | None | Spryker\Zed\ProductReviewStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductReviewStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Fill the `spy_product_review` table with some data and run `console event:trigger -r product_abstract_review`. +2. Make sure that the `spy_product_abstract_review_storage` table is filled with respective data. +3. In the `spy_product_abstract_review_storage` table, change some records and run `console sync:data product_abstract_review`. +4. Make sure that your changes have been synced to the key-value store (Redis or Valkey). + +{% endinfo_block %} + +### 6) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------|-----------------------------------------------------|---------------|---------------------------------------------| +| DisplayProductAbstractReviewWidget | Displays the product abstract review. | None | SprykerShop\Yves\ProductReviewWidget\Widget | +| ProductDetailPageReviewWidget | Displays the product review on a product details page. | None | SprykerShop\Yves\ProductReviewWidget\Widget | +| ProductRatingFilterWidget | Displays the product rating filter. | None | SprykerShop\Yves\ProductReviewWidget\Widget | +| ProductReviewDisplayWidget | Displays the product review rating. | None | SprykerShop\Yves\ProductReviewWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + $routeProviders = [ + new ProductReviewWidgetRouteProviderPlugin(), + ]; + + return $routeProviders; + } +} +``` + +3. Register expander plugins if you use product group widget: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ProductReviewStorageProductViewExpanderPlugin | Expands `ProductViewTransfer` objects with product review rating data. | None | SprykerShop\Yves\ProductReviewWidget\Plugin\ProductGroupWidget | + +**src/Pyz/Yves/ProductGroupWidget/ProductGroupWidgetDependencyProvider.php** + +```php + + */ + protected function getProductViewBulkExpanderPlugins(): array + { + return [ + new ProductReviewStorageProductViewExpanderPlugin(), + ]; + } +} +``` + +### 7) Set up behavior + +1. To enable the Glue API, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|---------------------------------------------------|---------------|-------------------------------------------------------------| +| AbstractProductsProductReviewsResourceRoutePlugin | Registers the `product-reviews` resource. | | \Spryker\Glue\ProductReviewsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new AbstractProductsProductReviewsResourceRoutePlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following endpoints are available: + +`https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-reviews` + +
    +Example + +```json +{ + "data": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/26" + } + } + ], + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5", + "last": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5", + "first": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews?page[offset]=0&page[limit]=5" + } +} +``` + +
    + +`https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}/product-reviews/{% raw %}{{{% endraw %}review_id{% raw %}}}{% endraw %}` + +
    +Example + +```json +{ + "data": { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139/product-reviews/21" + } + } +} +``` + +
    + +{% endinfo_block %} + +1. To enable the Glue API relationships, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|-------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------------------------| +| ProductReviewsRelationshipByProductAbstractSkuPlugin | Adds the `product-reviews` relationship to the `abstract-products` resource. | | \Spryker\Glue\ProductReviewsRestApi\Plugin\GlueApplication | +| ProductReviewsRelationshipByProductConcreteSkuPlugin | Adds the `product-reviews` relationship to the `concrete-products` resource. | | \Spryker\Glue\ProductReviewsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new ProductReviewsRelationshipByProductAbstractSkuPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductReviewsRelationshipByProductConcreteSkuPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +3. Register expander plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|---------------------------------------------------------|---------------|------------------------------------------------------------| +| ProductReviewsAbstractProductsResourceExpanderPlugin | Expands `abstract-products` resource with reviews data. | | \Spryker\Glue\ProductReviewsRestApi\Plugin\ProductsRestApi | +| ProductReviewsConcreteProductsResourceExpanderPlugin | Expands `concrete-products` resource with reviews data. | | \Spryker\Glue\ProductReviewsRestApi\Plugin\ProductsRestApi | + +**src/Pyz/Glue/ProductsRestApi/ProductsRestApiDependencyProvider.php** + +```php + + */ + protected function getConcreteProductsResourceExpanderPlugins(): array + { + return [ + new ProductReviewsConcreteProductsResourceExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\ProductsRestApiExtension\Dependency\Plugin\AbstractProductsResourceExpanderPluginInterface> + */ + protected function getAbstractProductsResourceExpanderPlugins(): array + { + return [ + new ProductReviewsAbstractProductsResourceExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make a request to `https://glue.mysprykershop.com/abstract-products/{% raw %}{{{% endraw %}abstract_sku{% raw %}}}{% endraw %}?include=product-reviews`. + +Make sure that the response contains product-reviews as a relationship and product-reviews data included. + +Make sure that `averageRating` and `reviewCount` attributes are present in `concrete-products` and `abstract-products` resources attributes section. + +
    Example + +```json +{ + "data": { + "type": "abstract-products", + "id": "139", + "attributes": { + "sku": "139", + "averageRating": 4, + "reviewCount": 5, + "name": "Asus Transformer Book T200TA", + "description": "As light as you like Transformer Book T200 is sleek, slim and oh so light — just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach the 11.6-inch tablet for 11.95mm slenderness and a mere 750g weight! With up to 10.4 hours of battery life that lasts all day long, you're free to work or play from dawn to dusk. And ASUS Instant On technology ensures that Transformer Book T200 is always responsive and ready for action! Experience outstanding performance from the latest Intel® quad-core processor. You'll multitask seamlessly and get more done in less time. Transformer Book T200 also delivers exceptional graphics performance — with Intel HD graphics that are up to 30% faster than ever before! Transformer Book T200 is equipped with USB 3.0 connectivity for data transfers that never leave you waiting. Just attach your USB 3.0 devices to enjoy speeds that are up to 10X faster than USB 2.0!", + "attributes": { + "product_type": "Hybrid (2-in-1)", + "form_factor": "clamshell", + "processor_cache_type": "2", + "processor_frequency": "1.59 GHz", + "brand": "Asus", + "color": "Black" + }, + "superAttributesDefinition": [ + "form_factor", + "processor_frequency", + "color" + ], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "139_24699831" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Asus Transformer Book T200TA", + "metaKeywords": "Asus,Entertainment Electronics", + "metaDescription": "As light as you like Transformer Book T200 is sleek, slim and oh so light — just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach t", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_cache_type": "Processor cache", + "processor_frequency": "Processor frequency", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/asus-transformer-book-t200ta-139" + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/abstract-products/139?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "21" + }, + { + "type": "product-reviews", + "id": "22" + }, + { + "type": "product-reviews", + "id": "23" + }, + { + "type": "product-reviews", + "id": "25" + }, + { + "type": "product-reviews", + "id": "26" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/26" + } + } + ] +} +``` + +
    + +Make a request to `https://glue.mysprykershop.com/concrete-products/{% raw %}{{{% endraw %}concrete_sku{% raw %}}}{% endraw %}?include=product-reviews`. + +Make sure that the response contains product-reviews as a relationship and product-reviews data included. + +
    +Example + +```json +{ + "data": { + "type": "concrete-products", + "id": "139_24699831", + "attributes": { + "sku": "139_24699831", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4, + "reviewCount": 5, + "name": "Asus Transformer Book T200TA", + "description": "As light as you like Transformer Book T200 is sleek, slim and oh so light — just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach the 11.6-inch tablet for 11.95mm slenderness and a mere 750g weight! With up to 10.4 hours of battery life that lasts all day long, you're free to work or play from dawn to dusk. And ASUS Instant On technology ensures that Transformer Book T200 is always responsive and ready for action! Experience outstanding performance from the latest Intel® quad-core processor. You'll multitask seamlessly and get more done in less time. Transformer Book T200 also delivers exceptional graphics performance — with Intel HD graphics that are up to 30% faster than ever before! Transformer Book T200 is equipped with USB 3.0 connectivity for data transfers that never leave you waiting. Just attach your USB 3.0 devices to enjoy speeds that are up to 10X faster than USB 2.0!", + "attributes": { + "product_type": "Hybrid (2-in-1)", + "form_factor": "clamshell", + "processor_cache_type": "2", + "processor_frequency": "1.59 GHz", + "brand": "Asus", + "color": "Black" + }, + "superAttributesDefinition": [ + "form_factor", + "processor_frequency", + "color" + ], + "metaTitle": "Asus Transformer Book T200TA", + "metaKeywords": "Asus,Entertainment Electronics", + "metaDescription": "As light as you like Transformer Book T200 is sleek, slim and oh so light — just 26mm tall and 1.5kg docked. And when need to travel even lighter, detach t", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_cache_type": "Processor cache", + "processor_frequency": "Processor frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/concrete-products/139_24699831?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "21" + }, + { + "type": "product-reviews", + "id": "22" + }, + { + "type": "product-reviews", + "id": "23" + }, + { + "type": "product-reviews", + "id": "25" + }, + { + "type": "product-reviews", + "id": "26" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "21", + "attributes": { + "rating": 4, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/21" + } + }, + { + "type": "product-reviews", + "id": "22", + "attributes": { + "rating": 4, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/22" + } + }, + { + "type": "product-reviews", + "id": "23", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/23" + } + }, + { + "type": "product-reviews", + "id": "25", + "attributes": { + "rating": 3, + "nickname": "Spencor", + "summary": "Curabitur ultricies, sapien quis placerat lacinia", + "description": "Etiam venenatis sit amet lorem eget tristique. Donec rutrum massa nec commodo cursus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse scelerisque scelerisque augue eget condimentum. Quisque quis arcu consequat, lacinia nulla tempor, venenatis ante. In ullamcorper, orci sit amet tempus tincidunt, massa augue molestie enim, in finibus metus odio at purus. Mauris ut semper sem, a ornare sapien. Fusce eget facilisis felis. Integer imperdiet massa a tortor varius, tincidunt laoreet ipsum viverra." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/25" + } + }, + { + "type": "product-reviews", + "id": "26", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Cras porttitor", + "description": "Cras porttitor, odio vel ultricies commodo, erat turpis pulvinar turpis, id faucibus dolor odio a tellus. Mauris et nibh tempus, convallis ipsum luctus, mollis risus. Donec molestie orci ante, id tristique diam interdum eget. Praesent erat neque, sollicitudin sit amet pellentesque eget, gravida in lectus. Donec ultrices, nisl in laoreet ultrices, nunc enim lacinia felis, ac convallis tortor ligula non eros. Morbi semper ipsum non elit mollis, non commodo arcu porta. Mauris tincidunt purus rutrum erat ornare, varius egestas eros eleifend." + }, + "links": { + "self": "http://glue.de.suite-nonsplit.local/product-reviews/26" + } + } + ] +} +``` + +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-relations-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-relations-feature.md new file mode 100644 index 00000000000..963e44f65e5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-relations-feature.md @@ -0,0 +1,463 @@ + + +## Install feature core + +Follow the steps below to install feature core. + +### Prerequisites + +To start feature integration, overview, and install the necessary features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | +| ProductRelations | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require "spryker-feature/product-relations:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductRelation | vendor/spryker/product-relation | +| ProductRelationGui | vendor/spryker/product-relation-gui | +| ProductRelationDataImport | vendor/spryker/product-relation-data-import | +| ProductRelationStorage | vendor/spryker/product-relation-storage | +| ProductRelationWidget | vendor/spryker/product-relation-widget | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +|spy_product_relation| table| created| +|spy_product_relation_product_abstract |table| created| +|spy_product_relation_store |table| created| +|spy_product_abstract_relation_storage| table| created| + +{% endinfo_block %} + +2. Adjust the schema definition so entity changes trigger events. + +**src/Pyz/Zed/ProductRelation/Persistence/Propel/Schema/spy_product_relation.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + +
    +``` + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_product_relation | Entity.spy_product_relation.create
    Entity.spy_product_relation.update
    Entity.spy_product_relation.delete | +| spy_product_relation_store | Entity.spy_product_relation_store.create
    Entity.spy_product_relation_store.delete | +| spy_product_relation_product_abstract | Entity.spy_product_relation_product_abstract.create
    Entity.spy_product_relation_product_abstract.delete | + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ---| ---| ---| ---| +|ProductRelation| class| created | src/Generated/Shared/Transfer/ProductRelationTransfer| +|ProductRelationCriteria| class| created|src/Generated/Shared/Transfer/ProductRelationCriteriaTransfer| +| StoreRelation| class| created| src/Generated/Shared/Transfer/StoreRelationTransfer| +| Store| class| created| src/Generated/Shared/Transfer/StoreTransfer| +| ProductRelationType | class| created|src/Generated/Shared/Transfer/ProductRelationTypeTransfer| +|ProductRelationRelatedProduct | class |created|src/Generated/Shared/Transfer/ProductRelationRelatedProductTransfer| +|RuleQueryDataProvider| class | created |src/Generated/Shared/Transfer/RuleQueryDataProviderTransfer| +|PropelQueryBuilderRuleSet| class | created|src/Generated/Shared/Transfer/PropelQueryBuilderRuleSetTransfer| +|PropelQueryBuilderCriteria| class | created |src/Generated/Shared/Transfer/PropelQueryBuilderCriteriaTransfer| +| PropelQueryBuilderCriteriaMapping| class| created|src/Generated/Shared/Transfer/PropelQueryBuilderCriteriaMappingTransfer| +| StorageProductRelations| class | created |src/Generated/Shared/Transfer/StorageProductRelationsTransfer| +| StorageProductAbstractRelation| class| created|src/Generated/Shared/Transfer/StorageProductAbstractRelationTransfer| +|Quote| class | created |src/Generated/Shared/Transfer/QuoteTransfer| +|Item| class| created |src/Generated/Shared/Transfer/ItemTransfer| +|CurrentProductPrice| class| created|src/Generated/Shared/Transfer/CurrentProductPriceTransfer| +|Locale| class| created |src/Generated/Shared/Transfer/LocaleTransfer| +|ProductUrl| class| created|src/Generated/Shared/Transfer/ProductUrlTransfer| +|TabItem| class | created |src/Generated/Shared/Transfer/TabItemTransfer| +| TabsView| class| created|src/Generated/Shared/Transfer/TabsViewTransfer| +| LocalizedUrl| class | created|src/Generated/Shared/Transfer/LocalizedUrlTransfer| +| ProductAbstract| class | created|src/Generated/Shared/Transfer/ProductAbstractTransfer| +| ProductRelationCriteriaFilter| class| created|src/Generated/Shared/Transfer/ProductRelationCriteriaFilterTransfer| +| ProductRelationResponse| class | created | src/Generated/Shared/Transfer/ProductRelationResponseTransfer| +| Filter| class | created| src/Generated/Shared/Transfer/FilterTransfer| + +{% endinfo_block %} + +### 3) Configure export to the key-value store (Redis or Valkey) + +Follow the procedure below to to publish tables on change (create, edit, delete) to the `spy_product_abstract_group_storage` table and synchronize the data to Storage. + +#### Set up publishers + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--- |--- |--- |--- | +|ProductRelationWritePublisherPlugin | Publishes product relation data by create, update and delete events from the `spy_product_relation` table. | none | Spryker\Zed\ProductRelationStorage\Communication\Plugin\Publisher\ProductRelation\ProductRelationWritePublisherPlugin | +|ProductRelationWriteForPublishingPublisherPlugin| Publishes product relation data by publish and unpublish events from the `spy_product_relation` table. | none | Spryker\Zed\ProductRelationStorage\Communication\Plugin\Publisher\ProductRelation\ProductRelationWriteForPublishingPublisherPlugin | +|ProductRelationProductAbstractWritePublisherPlugin| Publishes product relation data by create and delete events from the `spy_product_relation_product_abstract` table. | none | Spryker\Zed\ProductRelationStorage\Communication\Plugin\Publisher\ProductRelationProductAbstract\ProductRelationProductAbstractWritePublisherPlugin| +|ProductRelationStoreWritePublisherPlugin| Publishes product relation data by create and delete events from the `spy_product_relation_store` table. | none | Spryker\Zed\ProductRelationStorage\Communication\Plugin\Publisher\ProductRelationStore\ProductRelationStoreWritePublisherPlugin| + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +getProductRelationStoragePlugins() + ); + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface[] + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + ... + new ProductRelationPublisherTriggerPlugin(), + ]; + } + + /** + * @return \Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface[] + */ + protected function getProductRelationStoragePlugins(): array + { + return [ + new ProductRelationWritePublisherPlugin(), + new ProductRelationWriteForPublishingPublisherPlugin(), + new ProductRelationProductAbstractWritePublisherPlugin(), + new ProductRelationStoreWritePublisherPlugin(), + ]; + } +} + +``` + + +#### Set up re-generate and re-sync features + +Set up re-generate and re-sync features as follows: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductRelationSynchronizationDataRepositoryPlugin | Allows the whole storage table content to be synchronizedinto Storage. | none | Spryker\Zed\ProductRelationStorage\Communication\Plugin\Synchronization\ProductRelationSynchronizationDataRepositoryPlugin | + +**src/Pyz/Zed/ProductRelationStorage/ProductRelationStorageConfig.php** + +```php +buildImporterConfiguration('product_relation.csv', static::IMPORT_TYPE_PRODUCT_RELATION); + } + + /** + * @return \Generated\Shared\Transfer\DataImporterConfigurationTransfer + */ + public function getProductRelationStoreDataImporterConfiguration(): DataImporterConfigurationTransfer + { + $moduleDataImportDirectory = $this->getModuleDataImportDirectoryPath(); + + return $this->buildImporterConfiguration($moduleDataImportDirectory . 'product_relation_store.csv', static::IMPORT_TYPE_PRODUCT_RELATION_STORE); + } +} +``` + +2. Configure the Product relation GUI module with a store plugin. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|StoreRelationToggleFormTypePlugin | Represents a store relation toggle form based on the stores registered in the system. | None |Spryker\Zed\Store\Communication\Plugin\Form | + +**src/Pyz/Zed/ProductRelationGui/ProductRelationGuiDependencyProvider.php** + +```php + **Product** > **Product Relations**. +- You can see the product relation information in the Back Office > **Product** > **Product Relations** > **View Product Relation**. +- You can edit the product relation in the Back Office > **Product** > **Product Relations** > **Edit Product Relation**. +- You can create a product relation in the Back Office > **Product** > **Product Relations** > **Create Product Relation**. +- You can delete the product relation in the Back Office > **Product** > **Product Relations** > **Delete Product Relation**. + +{% endinfo_block %} + +3. Enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--- |--- |--- |--- | +|SimilarProductsWidget | Widget for relations with the cross-selling relation type. | None | SprykerShop\Yves\ProductRelationWidget\Widget | +|UpSellingProductsWidget| Widget for relations with the up-selling relation type. | None | SprykerShop\Yves\ProductRelationWidget\Widget | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-product-sets-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-product-sets-feature.md new file mode 100644 index 00000000000..3961915cad0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-product-sets-feature.md @@ -0,0 +1,301 @@ + + +This document describes how to install the [Product Sets feature](/docs/pbc/all/content-management-system/latest/base-shop/product-sets-feature-overview.html). + +## Prerequisites + +To prepare your project to work with Product Sets: +1. Require the Product Set modules in your `composer.json`: + +```bash +composer require spryker/product-set spryker/product-set-collector spryker/product-set-gui +``` + +2. If you want to enable the Product Sets search powered by Elasticsearch, install the `spryker/search-elasticsearch` module: + +```bash +composer require spryker/search-elasticsearch +``` + +3. Install the new database tables: + +```bash +vendor/bin/console propel:diff +``` + +Propel should generate a migration file with the changes. + +4. Apply the database changes: + +```bash +vendor/bin/console propel:migrate +``` + +5. Generate ORM models: + +```bash +vendor/bin/console propel:model:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that: +- New classes have been added to `\Orm\Zed\ProductSet\Persistence`. +- They extend the base classes from the Spryker core. For example: + + - `\Orm\Zed\ProductSet\Persistence\SpyProductSet` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductSet` + + - `\Orm\Zed\ProductSet\Persistence\SpyProductSetData` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductSetData` + + - `\Orm\Zed\ProductSet\Persistence\SpyProductAbstractSet` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductAbstractSet` + + - `\Orm\Zed\ProductSet\Persistence\SpyProductSetQuery` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductSetQuery` + + - `\Orm\Zed\ProductSet\Persistence\SpyProductSetDataQuery` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductSetDataQuery` + + - `\Orm\Zed\ProductSet\Persistence\SpyProductAbstractSetQuery` extends `\Spryker\Zed\ProductSet\Persistence\Propel\AbstractSpyProductAbstractSetQuery` + +{% endinfo_block %} + +6. Get the new transfer objects: + +```bash +vendor/bin/console transfer:generate +``` + +7. Rebuild Zed navigation: + +```bash +vendor/bin/console navigation:build-cache +``` + +8. To activate the Product Set collectors, add `ProductSetCollectorStoragePlugin` to the storage collector plugin stack and `ProductSetCollectorSearchPlugin` to the search collector plugin stack: + +```php +set(static::SEARCH_PLUGINS, function (Container $container) { + return [ + // ... + ProductSetConfig::RESOURCE_TYPE_PRODUCT_SET => new ProductSetCollectorSearchPlugin(), + ]; + }); + + $container->set(static::STORAGE_PLUGINS, function (Container $container) { + return [ + // ... + ProductSetConfig::RESOURCE_TYPE_PRODUCT_SET => new ProductSetCollectorStoragePlugin(), + ]; + }); + + // ... + } +} +``` + +## Data setup + +Implement an installer in your project to put products together in sets representing how you want them to be displayed in your shop frontend. Find implementation examples in the [Demoshop](https://github.com/spryker/demoshop). + +### Listing products sets on the Storefront + +The KV storage and Elasticsearch should by now contain some product sets you can display on the Storefront. By default, the exported documents in Search do not support the configurable search features as products: full-text search, faceted navigation, sorting, and pagination. However, since their data structure is the same, it's possible to implement the same features with a custom implementation. + +For a simple listing, the `ProductSet` module provides a Client API to list product sets from Elasticsearch. By calling the `ProductSetClient::getProductSetList()` method, a limited set of documents can be listed on the Storefront. The results are sorted in descending order based on the product sets' weight attributes. + +The executed search query works the same way as described in Search Query. +If you need to extend the query, for example, by filtering current store and locale, add the desired query expander plugins, like in the example below. To format a raw response from Elasticsearch, provide a result formatter plugin that is also provided by the `ProductSet` module. + +```php + + +## Enable the text alternatives functionality + +The Text Alternatives functionality lets you add alternative text to product images for better accessibility and SEO. + +### 1) Upgrade modules + +Upgrade the following modules to the specified versions or higher + +| NAME | VERSION | +|------------------------------------|-----------| +| spryker/product-image | 3.20.0 | +| spryker/product-set-gui | 2.13.0 | +| spryker/product-set-page-search | 1.13.0 | +| spryker/product-set-storage | 1.13.0 | +| spryker/glossary | 3.16.0 | +| spryker/glossary-storage | 1.5.0 | +| spryker-shop/product-set-list-page | 1.2.0 | +| spryker-shop/product-set-widget | 1.10.0 | +| spryker-shop/shop-ui | 1.96.0 | + +```bash +composer require spryker/glossary:^3.16.0 spryker/glossary-storage:^1.5.0 spryker/product-image:^3.20.0 spryker/product-set-gui:^2.13.0 spryker/product-set-page-search:^1.13.0 spryker/product-set-storage:^1.13.0 spryker-shop/product-set-list-page:^1.2.0 spryker-shop/product-set-widget:^1.10.0 spryker-shop/shop-ui:^1.96.0 --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------|-------------------------------------------| +| ProductImage | vendor/spryker/spryker/product-image | +| ProductSetGui | vendor/spryker/product-set-gui | +| ProductSetPageSearch | vendor/spryker/product-set-page-search | +| ProductSetStorage | vendor/spryker/product-set-storage | +| Glossary | vendor/spryker/glossary | +| GlossaryStorage | vendor/spryker/glossary-storage | +| ProductSetListPage | vendor/spryker-shop/product-set-list-page | +| ProductSetWidget | vendor/spryker-shop/product-set-widget | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +### 2) Enable the feature in the ProductImage module configuration + +**src/Pyz/Shared/ProductImage/ProductImageConfig.php** + +```php + + */ + protected function getDiscountPostUpdatePlugins(): array + { + return [ + new DeleteDiscountVoucherPoolDiscountPostUpdatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Merchandising > Discount**. +2. Create a discount with the **Voucher** type. +3. Generate several voucher codes for the created discount. +4. Switch the discount type from **Voucher** to another type–for example, **Cart rule**. Make sure the voucher pool and voucher codes related to discount are deleted from `spy_discount_voucher_pool` and from `spy_discount_voucher` DB tables. + +{% endinfo_block %} + +### 5) Build Zed UI frontend + +Enable Javascript and CSS changes: + +```bash +console frontend:project:install-dependencies +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that discounts are calculated according to their priorities: +1. Create a couple of percentage discounts with different priorities. +2. To fulfill the discounts' requirements, add items to the cart. +3. Check that discounts are applied in the correct order and that the calculated discount total is correct. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that you can submit the *Discount Create* and *Discount Update* forms with specified date and time for **Valid From** and **Valid To** discount form fields: +1. In the Back Office, go to **Merchandising > Discount**. +2. Create a new discount or update an existing one and check that you can see the **Discount** form. +3. To ensure you can see the calendar, click on **Valid From** and **Valid To** fields, where you can select a specific date and time. +4. Make sure **Valid From** and **Valid To** fields can accept the selected date and time (for times not falling on the hour, use keystroke entry—for example, 13:45). +5. In the `spy_discount` DB table, make sure **Valid From** and **Valid To** date and time are saved correctly. + +{% endinfo_block %} + +[//]: # (---) + +[//]: # (title: Install the Promotions & Discounts feature) + +[//]: # (description: This guides provides you with a set of steps needed to be performed in order to integrate the Discount Promotion feature into your project.) + +[//]: # (last_updated: Jun 16, 2021) + +[//]: # (template: feature-integration-guide-template) + +[//]: # (originalLink: https://documentation.spryker.com/2021080/docs/promotions-discounts-feature-integration) + +[//]: # (originalArticleId: 7aa7d23c-7a28-415c-a4cd-a011c9e85a6c) + +[//]: # (redirect_from:) + +[//]: # ( - /2021080/docs/promotions-discounts-feature-integration) + +[//]: # ( - /2021080/docs/en/promotions-discounts-feature-integration) + +[//]: # ( - /docs/promotions-discounts-feature-integration) + +[//]: # ( - /docs/en/promotions-discounts-feature-integration) + +[//]: # (---) + +[//]: # (To start using the Discount Promotion feature, you have to do some configuration in your Zed application.) + +[//]: # () +[//]: # (## Prerequisites) + +[//]: # () +[//]: # (1. First make sure you have the latest `DiscountPromotion` module.) + +[//]: # ( Usecthe `composer require spryker/discount-promotion` command to install it.) + +[//]: # (2. You also need at least `"spryker/discount": "^4.5.0"` for the discount module.) + +[//]: # () +[//]: # (* Run `vendor/bin/console transfer:generate` to generate the latest transfer object.) + +[//]: # (* Run `vendor/bin/console propel:diff` to generate migration file for the database. Inspect this new file and check if only `spy_discount_promotion` has been created there.) + +[//]: # (* Run `vendor/bin/console propel:migrate` to migrate the latest generate migration file.) + +[//]: # (* Run `vendor/bin/console propel:model:build` to generate new propel Entities and Query classes.) + +[//]: # () +[//]: # (## Enabling discount promotions) + +[//]: # () +[//]: # (To enable Discount promotions, you have to add a number of plugins to the `Discount` module so that `DiscountPromotion` can extend it.) + +[//]: # (Below there is the example of the `DiscountDependencyProvider` class.) + +[//]: # () +[//]: # (```php) + +[//]: # (setIsPromotion((bool)$this->request->request->get('isPromo'));`) + +[//]: # (3. Inject `ProductPromotionMapperPlugin` to Cart Module:) + +[//]: # () +[//]: # (```php) + +[//]: # (getProvidedDependency(CartDependencyProvider::PLUGIN_PROMOTION_PRODUCT_MAPPER);) + +[//]: # ( }) + +[//]: # (}) + +[//]: # (```) + +[//]: # () +[//]: # (5. Add call to plugin in `CartController`.) + +[//]: # () +[//]: # (```php) + +[//]: # (getFactory()) + +[//]: # ( ->getProductPromotionMapperPlugin()) + +[//]: # ( ->mapPromotionItemsFromProductStorage() + +[//]: # ( $quoteTransfer,) + +[//]: # ( $this->getRequest()) + +[//]: # ( );) + +[//]: # () +[//]: # ( $this->viewResponse([) + +[//]: # ( //other data) + +[//]: # ( 'promotionStorageProducts' => $promotionStorageProducts,) + +[//]: # ( ]);) + +[//]: # () +[//]: # (}) + +[//]: # (```) + +[//]: # () +[//]: # (Change twig templates to render promotion products. Since we've changed how quantity is rendered for promotion products, some cart templates in our demoshop were reorganized.) + +[//]: # () +[//]: # (Firstly, make sure a promotion item twig template is called in `Pyz/Yves/Cart/Theme/default/cart/index.twig`. This usually should be placed after cart items as in the example below:) + +[//]: # () +[//]: # (```php) + +[//]: # ({% raw %}{%{% endraw %} for cartItem in cartItems {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} if cartItem.bundleProduct is defined {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} include '@cart/cart/parts/cart-item.twig' with {) + +[//]: # ( cartItem: cartItem.bundleProduct,) + +[//]: # ( bundleItems: cartItem.bundleItems) + +[//]: # ( } {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} else {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} include '@cart/cart/parts/cart-item.twig' {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} //existing code) + +[//]: # () +[//]: # ({% raw %}{%{% endraw %} include '@DiscountPromotion/discount-promotion/item-list.twig' {% raw %}%}{% endraw %} //new include) + +[//]: # (```) + +[//]: # () +[//]: # (`Pyz/Yves/Cart/Theme/default/cart/parts/cart-item.twig` was also heavily modified to work with promotion products ( check our demoshop version), as the cart page can be different per project.) + +[//]: # () +[//]: # (The key points that were changed: the "Add to cart" button extracted to `Pyz/Yves/Cart/Theme/default/cart/parts/cart-add-to-cart.twig`, item price information extracted to `Pyz/Yves/Cart/Theme/default/cart/parts/cart-item-prices.twig`, cart product variants extracted to `Pyz/Yves/Cart/Theme/default/cart/parts/cart-product-variants.twig`.) + +[//]: # () +[//]: # (Below there is the demoshop `Pyz/Yves/Cart/Theme/default/cart/parts/cart-item.twig` file for reference.) + +[//]: # () +[//]: # (```php) + +[//]: # (
    ) + +[//]: # () +[//]: # ( {% raw %}{%{% endraw %} include '@Cart/cart/parts/cart-images.twig' {% raw %}%}{% endraw %}) + +[//]: # () +[//]: # (
      ) + +[//]: # ( {# General data #}) + +[//]: # (
    • {% raw %}{{{% endraw %} cartItem.name {% raw %}}}{% endraw %}
    • {% raw %}{{{% endraw %} 'cart.item.sku' | trans {% raw %}}}{% endraw %} {% raw %}{{{% endraw %} cartItem.sku {% raw %}}}{% endraw %}
    • ) + +[//]: # () +[//]: # ( {% raw %}{%{% endraw %} if bundleItems is defined {% raw %}%}{% endraw %}) + +[//]: # ( {# Product Bundles #}) + +[//]: # (
    • {% raw %}{{{% endraw %} 'cart.item.bundle.description' | trans {% raw %}}}{% endraw %}
        ) + +[//]: # ( {% raw %}{%{% endraw %} for bundleItem in bundleItems {% raw %}%}{% endraw %}) + +[//]: # (
      • {% raw %}{{{% endraw %} bundleItem.quantity {% raw %}}}{% endraw %} x {% raw %}{{{% endraw %} bundleItem.name {% raw %}}}{% endraw %}
      • ) + +[//]: # ( {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %}) + +[//]: # (
    • ) + +[//]: # ( {% raw %}{%{% endraw %} else {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} include '@Cart/cart/parts/cart-product-variants.twig' {% raw %}%}{% endraw %}) + +[//]: # ( {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %}) + +[//]: # (
    ) + +[//]: # () +[//]: # ( {% raw %}{%{% endraw %} include '@Cart/cart/parts/cart-item-prices.twig' {% raw %}%}{% endraw %}) + +[//]: # () +[//]: # ( {% raw %}{%{% endraw %} include '@Cart/cart/parts/cart-add-to-cart.twig' {% raw %}%}{% endraw %}) + +[//]: # (
    ) + +[//]: # (```) + +[//]: # () +[//]: # (Make sure `CartOperationHandler` sets ID of `idDiscountPromotion`.) + +[//]: # () +[//]: # (```php) + +[//]: # (public function add($sku, $quantity, $optionValueUsageIds = [])) + +[//]: # ( {) + +[//]: # ( $itemTransfer = new ItemTransfer();) + +[//]: # ( $itemTransfer->setSku($sku);) + +[//]: # ( $itemTransfer->setQuantity($quantity);) + +[//]: # ( $itemTransfer->setIdDiscountPromotion($this->getIdDiscountPromotion()); //new setter) + +[//]: # () +[//]: # ( $this->addProductOptions($optionValueUsageIds, $itemTransfer);) + +[//]: # () +[//]: # ( $quoteTransfer = $this->cartClient->addItem($itemTransfer);) + +[//]: # ( $this->cartClient->storeQuote($quoteTransfer);) + +[//]: # ( }) + +[//]: # () +[//]: # (protected function getIdDiscountPromotion()) + +[//]: # ({) + +[//]: # ( return (int)$this->request->request->get('idDiscountPromotion');) + +[//]: # (}) + +[//]: # (```) + +[//]: # () +[//]: # (When using promotion discount with voucher code, you will get the error message that voucher is not correct. It's because voucher code is a product offered as promotion and not yet added to cart.) + +[//]: # () +[//]: # (You have to modify `\Pyz\Yves\Discount\Handler\VoucherHandler::addFlashMessages` to handle discounts with promotions.) + +[//]: # () +[//]: # (Add the following condition:) + +[//]: # () +[//]: # (```php) + +[//]: # (namespace Pyz\Yves\Discount\Handler;) + +[//]: # () +[//]: # (class VoucherHandler extends BaseHandler implements VoucherHandlerInterface) + +[//]: # ({) + +[//]: # ( /**) + +[//]: # ( * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer) + +[//]: # ( * @param string $voucherCode) + +[//]: # ( *) + +[//]: # ( * @return void) + +[//]: # ( */) + +[//]: # ( protected function addFlashMessages($quoteTransfer, $voucherCode)) + +[//]: # ( {) + +[//]: # () +[//]: # ( //---new code) + +[//]: # ( if ($this->isVoucherFromPromotionDiscount($quoteTransfer, $voucherCode)) {) + +[//]: # ( return;) + +[//]: # ( }) + +[//]: # ( //-----) + +[//]: # () +[//]: # ( if ($this->isVoucherCodeApplied($quoteTransfer, $voucherCode)) {) + +[//]: # ( $this->setFlashMessagesFromLastZedRequest($this->calculationClient);) + +[//]: # ( return;) + +[//]: # ( }) + +[//]: # () +[//]: # ( $this->flashMessenger->addErrorMessage('cart.voucher.apply.failed');) + +[//]: # ( }) + +[//]: # () +[//]: # ( /**) + +[//]: # ( * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer) + +[//]: # ( * @param string $voucherCode) + +[//]: # ( *) + +[//]: # ( * @return bool) + +[//]: # ( */) + +[//]: # ( protected function isVoucherFromPromotionDiscount(QuoteTransfer $quoteTransfer, $voucherCode)) + +[//]: # ( {) + +[//]: # ( foreach ($quoteTransfer->getUsedNotAppliedVoucherCodes() as $voucherCodeUsed) {) + +[//]: # ( if ($voucherCodeUsed === $voucherCode) {) + +[//]: # ( return true;) + +[//]: # ( }) + +[//]: # ( }) + +[//]: # () +[//]: # ( return false;) + +[//]: # ( }) + +[//]: # (}) + +[//]: # (```) + +[//]: # () +[//]: # (After this you should be able to use the new discounts with promotion.) diff --git a/_includes/pbc/all/install-features/202602.0/install-the-push-notification-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-push-notification-feature.md new file mode 100644 index 00000000000..ff10e2c625e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-push-notification-feature.md @@ -0,0 +1,772 @@ + + + +This document describes how to install the [Push Notification feature](/docs/pbc/all/miscellaneous/latest/push-notification-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Push Notification feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/push-notification: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|-----------------------------------------------| +| PushNotification | vendor/spryker/push-notification | +| PushNotificationExtension | vendor/spryker/push-notification-extension | +| PushNotificationWebPushPhp | vendor/spryker/push-notification-web-push-php | +| PushNotificationsBackendApi | vendor/spryker/push-notifications-backend-api | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------------------|-------|---------| +| spy_push_notification | table | created | +| spy_push_notification_subscription | table | created | +| spy_push_notification_group | table | created | +| spy_push_notification_provider | table | created | +| spy_push_notification_subscription_delivery_log | table | created | + +Make sure that the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------------|-------|---------|--------------------------------------------------------------------------------------------| +| PushNotificationSubscriptionCollectionRequest | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionCollectionRequestTransfer | +| PushNotificationSubscriptionCollectionResponse | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionCollectionResponseTransfer | +| PushNotificationSubscriptionCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionCollectionDeleteCriteriaTransfer | +| PushNotificationSubscriptionCollection | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionCollectionTransfer | +| PushNotificationSubscription | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionTransfer | +| PushNotificationSubscriptionDeliveryLog | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionDeliveryLogTransfer | +| PushNotificationUser | class | created | src/Generated/Shared/Transfer/PushNotificationUserTransfer | +| PushNotificationCollectionRequest | class | created | src/Generated/Shared/Transfer/PushNotificationCollectionRequestTransfer | +| PushNotificationCollectionResponse | class | created | src/Generated/Shared/Transfer/PushNotificationCollectionResponseTransfer | +| PushNotification | class | created | src/Generated/Shared/Transfer/PushNotificationTransfer | +| PushNotificationGroup | class | created | src/Generated/Shared/Transfer/PushNotificationGroupTransfer | +| PushNotificationGroupCriteria | class | created | src/Generated/Shared/Transfer/PushNotificationGroupCriteriaTransfer | +| PushNotificationGroupConditions | class | created | src/Generated/Shared/Transfer/PushNotificationGroupConditionsTransfer | +| PushNotificationGroupCollection | class | created | src/Generated/Shared/Transfer/PushNotificationGroupCollectionTransfer | +| PushNotificationProviderCriteria | class | created | src/Generated/Shared/Transfer/PushNotificationProviderCriteriaTransfer | +| PushNotificationSubscriptionCriteria | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionCriteriaTransfer | +| PushNotificationProviderCollection | class | created | src/Generated/Shared/Transfer/PushNotificationProviderCollectionTransfer | +| PushNotificationProviderCollectionRequest | class | created | src/Generated/Shared/Transfer/PushNotificationProviderCollectionRequestTransfer | +| PushNotificationProviderCollectionResponse | class | created | src/Generated/Shared/Transfer/PushNotificationProviderCollectionResponseTransfer | +| PushNotificationProviderCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/ApiPushNotificationGroupsAttributesTransferTransfer | +| PushNotificationProvider | class | created | src/Generated/Shared/Transfer/PushNotificationProviderTransfer | +| PushNotificationProviderConditions | class | created | src/Generated/Shared/Transfer/PushNotificationProviderConditionsTransfer | +| PushNotificationSubscriptionConditions | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionConditionsTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| PushNotificationCollection | class | created | src/Generated/Shared/Transfer/PushNotificationCollectionTransfer | +| PushNotificationCriteria | class | created | src/Generated/Shared/Transfer/PushNotificationCriteriaTransfer | +| PushNotificationConditions | class | created | src/Generated/Shared/Transfer/PushNotificationConditionsTransfer | +| PushNotificationSubscriptionsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PushNotificationSubscriptionsBackendApiAttributesTransfer | +| PushNotificationGroupsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PushNotificationGroupsBackendApiAttributesTransfer | +| PushNotificationProvidersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PushNotificationProvidersBackendApiAttributesTransfer | +| GlueRequest | class | created | src/Generated/Shared/Transfer/GlueRequestTransfer | +| GlueRequestUser | class | created | src/Generated/Shared/Transfer/GlueRequestUserTransfer | +| GlueResponse | class | created | src/Generated/Shared/Transfer/GlueResponseTransfer | +| GlueResource | class | created | src/Generated/Shared/Transfer/GlueResourceTransfer | +| GlueResourceMethodConfiguration | class | created | src/Generated/Shared/Transfer/GlueResourceMethodConfigurationTransfer | +| GlueError | class | created | src/Generated/Shared/Transfer/GlueErrorTransfer | +| Sort | class | created | src/Generated/Shared/Transfer/SortTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| LocaleCriteria | class | created | src/Generated/Shared/Transfer/LocaleCriteriaTransfer | +| LocaleConditions | class | created | src/Generated/Shared/Transfer/LocaleConditionsTransfer | +| Locale | class | created | src/Generated/Shared/Transfer/LocaleTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +1. To make the `push-notification-subscriptions` and `push-notification-providers` resources protected, adjust the protected paths configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + '/push-notification-subscriptions' => [ + 'isRegularExpression' => false, + ], + '/\/push-notification-providers.*/' => [ + 'isRegularExpression' => true, + ], + ]; + } +} +``` + +2. Add the configuration defining *Voluntary Application Server Identity (VAPID) keys, which are used by the push notification: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------------------------------|---------------------------------------------------------------------------------------|-------------------------------------------| +| PushNotificationWebPushPhpConstants::VAPID_PUBLIC_KEY | Provides the `VAPID` public key. Used for authentication to send push notifications. | Spryker\Shared\PushNotificationWebPushPhp | +| PushNotificationWebPushPhpConstants::VAPID_PRIVATE_KEY | Provides the `VAPID` private key. Used for authentication to send push notifications. | Spryker\Shared\PushNotificationWebPushPhp | +| PushNotificationWebPushPhpConstants::VAPID_SUBJECT | Provides the `VAPID` subject. Used for authentication to send push notifications. | Spryker\Shared\PushNotificationWebPushPhp | + +**config/Shared/config_default.php** + +```php +>> Push Notification Web Push Php +$config[PushNotificationWebPushPhpConstants::VAPID_PUBLIC_KEY] = getenv('SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_PUBLIC_KEY'); +$config[PushNotificationWebPushPhpConstants::VAPID_PRIVATE_KEY] = getenv('SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_PRIVATE_KEY'); +$config[PushNotificationWebPushPhpConstants::VAPID_SUJECT] = getenv('SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_SUBJECT'); +``` + +3. Add the VAPID keys to the needed local deploy file: + +```yml + +image: + tag: spryker/php:8.1 + environment: + SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_PUBLIC_KEY: 'Your public key.' + SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_PRIVATE_KEY: 'Your private key.' + SPRYKER_PUSH_NOTIFICATION_WEB_PUSH_PHP_VAPID_SUBJECT: 'https://your.subject' +``` + +{% info_block infoBox "VAPID" %} + + +VAPID is a new way to send and receive website push notifications. Your VAPID keys let you send web push campaigns without sending them through a service like Firebase Cloud Messaging (FCM). + +To generate `VAPID` keys, you can use the following tools: +- `https://vapidkeys.com/`: an online tool to generate keys. +- `https://www.npmjs.com/package//web-push`: a Node.js package that generates VAPID keys. + +The following example command generates `VAPID` keys by using the `web-push` Node.js library: + +```bash +web-push generate-vapid-keys --json +``` + +{% endinfo_block %} + +4. Add the variables you've added in step 3 to Parameter Store. For instructions, see [Add variables in the Parameter Store](/docs/ca/dev/add-variables-in-the-parameter-store.html) + +### 4) Add translations + +1. Append glossary according to your configuration: + +```csv +push_notification.validation.error.push_notification_provider_not_found,The push notification provider was not found.,en_US +push_notification.validation.error.push_notification_provider_not_found,Der Push-Benachrichtigungsanbieters wurde nicht gefunden.,de_DE +push_notification.validation.error.push_notification_not_found,Push notification not found.,en_US +push_notification.validation.error.push_notification_not_found,Push-Nachricht nicht gefunden.,de_DE +push_notification.validation.error.wrong_group_name,Wrong group name.,en_US +push_notification.validation.error.wrong_group_name,Falscher Gruppenname.,de_DE +push_notification.validation.error.push_notification_already_exists,Push notification subscription already exists.,en_US +push_notification.validation.error.push_notification_already_exists,Das Abonnement für Push-Benachrichtigungen existiert bereits.,de_DE +push_notification.validation.error.locale_not_found,Provided locale not found.,en_US +push_notification.validation.error.locale_not_found,Bereitgestellte Sprache nicht gefunden.,de_DE +push_notification_web_push_php.validation.error.invalid_payload_structure,Invalid payload structure.,en_US +push_notification_web_push_php.validation.error.invalid_payload_structure,Ungültige Nutzlaststruktur.,de_DE +push_notification_web_push_php.validation.error.payload_length_exceeded,The maximum payload length exceeded.,en_US +push_notification_web_push_php.validation.error.payload_length_exceeded,Die maximale Länge der Nutzlast wurde überschritten.,de_DE +push_notification.validation.push_notification_provider_name_exists,A push notification provider with the same name already exists.,en_US +push_notification.validation.push_notification_provider_name_exists,Ein Push-Benachrichtigungsanbieter mit demselben Namen ist bereits vorhanden.,de_DE +push_notification.validation.push_notification_provider_name_wrong_length,A push notification provider name must have length from %min% to %max% characters.,en_US +push_notification.validation.push_notification_provider_name_wrong_length,Ein Push-Benachrichtigungsanbietername muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +push_notification.validation.push_notification_provider_name_is_not_unique,A push notification provider with the same name already exists in request.,en_US +push_notification.validation.push_notification_provider_name_is_not_unique,Ein Push-Benachrichtigungsanbieter mit demselben Namen ist bereits in der Anfrage vorhanden.,de_DE +push_notification.validation.push_notification_exists,Unable to delete push notification provider while push notification exists.,en_US +push_notification.validation.push_notification_exists,Der Push-Benachrichtigungsanbieter kann nicht gelöscht werden solange Push-Benachrichtigungen vorhanden sind.,de_DE +push_notification.validation.push_notification_subscription_exists,Unable to delete push notification provider while push notification subscription exists.,en_US +push_notification.validation.push_notification_subscription_exists,Der Push-Benachrichtigungsanbieter kann nicht gelöscht werden solange Push-Benachrichtigungsabonnements vorhanden sind.,de_DE +push_notification.validation.wrong_request_body,Wrong request body.,en_US +push_notification.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 5) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|-------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| PushNotificationWebPushPhpPushNotificationSubscriptionValidatorPlugin | Validates the push notification subscription payload. | | Spryker\Zed\PushNotificationWebPushPhp\Communication\Plugin\PushNotification | +| PushNotificationWebPushPhpPayloadLengthPushNotificationValidatorPlugin | Validates the push notification payload. | | Spryker\Zed\PushNotificationWebPushPhp\Communication\Plugin\PushNotification | +| PushNotificationWebPushPhpPushNotificationSenderPlugin | Sends the push notification collection. | | Spryker\Zed\PushNotificationWebPushPhp\Communication\Plugin\PushNotification | + +
    +src/Pyz/Zed/PushNotification/PushNotificationDependencyProvider.php + +```php + + */ + protected function getPushNotificationSubscriptionValidatorPlugins(): array + { + return [ + new PushNotificationWebPushPhpPushNotificationSubscriptionValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PushNotificationExtension\Dependency\Plugin\PushNotificationValidatorPluginInterface> + */ + protected function getPushNotificationValidatorPlugins(): array + { + return [ + new PushNotificationWebPushPhpPayloadLengthPushNotificationValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PushNotificationExtension\Dependency\Plugin\PushNotificationSenderPluginInterface> + */ + protected function getPushNotificationSenderPlugins(): array + { + return [ + new PushNotificationWebPushPhpPushNotificationSenderPlugin(), + ]; + } +} + +``` + +
    + +2. Enable the following installer plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| PushNotificationWebPushPhpProviderInstallerPlugin | Adds the `web-push` provider to the list of available push notification providers. | | Spryker\Zed\PushNotificationWebPushPhp\Communication\Plugin\Installer | + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins(): array + { + return [ + new PushNotificationWebPushPhpProviderInstallerPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Ensure that the installer plugin works correctly: + +1. Execute install plugins: + +```bash +docker/sdk console setup:init-db +``` + +2. Check that the `web-push-php` push notification provider exists in the `spy_push_notification_provider` database table. + +{% endinfo_block %} + +3. Enable the following console command plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------|---------------------------------------------------------------------|---------------|----------------------------------------------------| +| SendPushNotificationConsole | Sends notifications in an async way. | | Spryker\Zed\PushNotification\Communication\Console | +| DeleteExpiredPushNotificationSubscriptionConsole | Deletes expired push notification subscriptions from `Persistence`. | | Spryker\Zed\PushNotification\Communication\Console | + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DeleteExpiredPushNotificationSubscriptionConsole(), + new SendPushNotificationConsole(), + ]; + } +} + +``` + +4. To enable the Backend API, register the plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------|------------------------------------------------------------|---------------|---------------------------------------------------------------------------| +| PushNotificationSubscriptionsBackendResourcePlugin | Registers the `push-notification-subscriptions` resource. | | Spryker\Glue\PushNotificationsBackendApi\Plugin\GlueBackendApiApplication | +| PushNotificationProvidersBackendResourcePlugin | Registers the `push-notification-providers` resource. | | Spryker\Glue\PushNotificationsBackendApi\Plugin\GlueBackendApiApplication | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new PushNotificationSubscriptionsBackendResourcePlugin(), + new PushNotificationProvidersBackendResourcePlugin(), + ]; + } +} + +``` + +#### Verify the push notifications + +1. Create a simple single-page demo application. +2. Generate `VAPID` keys at `https://vapidkeys.com/`. +3. Create a directory for the demo application: + +```bash +mkdir push_notification_spa +``` + +4. In the `push_notification_spa` directory, create the following files: + +**.../push_notification_spa/index.html** + +```html + + + Web Push sandbox + + +

    Web Push sandbox

    + + + + + +``` + +
    +.../push_notification_spa/app.js + +```js +document.addEventListener('DOMContentLoaded', () => { + const applicationServerKey = ''; + let isPushEnabled = false; + + const pushButton = document.querySelector('#push-button'); + if (!pushButton) { + return; + } + + pushButton.addEventListener('click', function () { + if (isPushEnabled) { + disablePush(); + } else { + enablePush(); + } + }); + + const subscriptionButton = document.querySelector('#subscription-button'); + if (!subscriptionButton) { + return; + } + + navigator.serviceWorker.register('serviceWorker.js').then( + () => { + console.log('[SW] Service worker has been registered'); + }, + e => { + console.error('[SW] Service worker registration failed', e); + changePushButtonState('incompatible'); + } + ); + + subscriptionButton.addEventListener('click', async function () { + let serviceWorkerRegistration = await navigator.serviceWorker.ready; + let subscription = await serviceWorkerRegistration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array(applicationServerKey), + }) + + push_sendSubscriptionToServer(subscription); // pass subscription here + }); + + + if (!('serviceWorker' in navigator)) { + console.warn('Service workers are not supported by this browser'); + changePushButtonState('incompatible'); + return; + } + + if (!('PushManager' in window)) { + console.warn('Push notifications are not supported by this browser'); + changePushButtonState('incompatible'); + return; + } + + if (!('showNotification' in ServiceWorkerRegistration.prototype)) { + console.warn('Notifications are not supported by this browser'); + changePushButtonState('incompatible'); + return; + } + + // Check the current Notification permission. + // If its denied, the button should appear as such until the user changes the permission manually + if (Notification.permission === 'denied') { + console.warn('Notifications are denied by the user'); + changePushButtonState('incompatible'); + } + + function changePushButtonState(state) { + switch (state) { + case 'enabled': + pushButton.disabled = false; + pushButton.textContent = 'Disable Push notifications'; + isPushEnabled = true; + break; + case 'disabled': + pushButton.disabled = false; + pushButton.textContent = 'Enable Push notifications'; + isPushEnabled = false; + break; + case 'computing': + pushButton.disabled = true; + pushButton.textContent = 'Loading...'; + break; + case 'incompatible': + pushButton.disabled = true; + pushButton.textContent = 'Push notifications are not compatible with this browser'; + break; + default: + console.error('Unhandled push button state', state); + break; + } + } + + function urlBase64ToUint8Array(base64String) { + const padding = '='.repeat((4 - (base64String.length % 4)) % 4); + const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/'); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; ++i) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; + } + + function checkNotificationPermission() { + return new Promise((resolve, reject) => { + if (Notification.permission === 'denied') { + return reject(new Error('Push messages are blocked.')); + } + + if (Notification.permission === 'granted') { + return resolve(); + } + + if (Notification.permission === 'default') { + return Notification.requestPermission().then(result => { + if (result !== 'granted') { + reject(new Error('Bad permission result')); + } else { + resolve(); + } + }); + } + + return reject(new Error('Unknown permission')); + }); + } + + function enablePush() { + changePushButtonState('computing'); + checkNotificationPermission() + .then(() => navigator.serviceWorker.ready) + .then(serviceWorkerRegistration => + serviceWorkerRegistration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array(applicationServerKey), + }) + ) + .then(subscription => { + console.info('Browser notifications are activated!'); + changePushButtonState('enabled') + }) + .then(subscription => subscription && changePushButtonState('enabled')) // update your UI + .catch(e => { + if (Notification.permission === 'denied') { + console.warn('Notifications are denied by the user.'); + changePushButtonState('incompatible'); + } else { + console.error('Impossible to subscribe to push notifications', e); + changePushButtonState('disabled'); + } + }); + } + + function disablePush() { + changePushButtonState('computing'); + + // To unsubscribe from push messaging, you need to get the subscription object + navigator.serviceWorker.ready + .then(serviceWorkerRegistration => serviceWorkerRegistration.pushManager.getSubscription()) + .then(subscription => { + changePushButtonState('disabled'); + }) + .then(subscription => subscription.unsubscribe()) + .then(() => changePushButtonState('disabled')) + .catch(e => { + // We failed to unsubscribe, this can lead to + // an unusual state, so it may be best to remove + // the users data from your data store and + // inform the user that you have done so + console.error('Error when unsubscribing the user', e); + changePushButtonState('disabled'); + }); + } + + async function getToken() { + const response = await fetch('http://glue-backend.de.spryker.local/token', { + method: "POST", + body: JSON.stringify({ + grantType: "password", + username: "", + password: "" + }), + }); + + return response.json() + } + + async function push_sendSubscriptionToServer(subscription) { + const tokenScos = await getToken(); + const accessToken = tokenScos[0].access_token; + const key = subscription.getKey('p256dh'); + const token = subscription.getKey('auth'); + + return fetch('http://glue-backend.de.spryker.local/push-notification-subscriptions', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/vnd.api+json' + }, + body: JSON.stringify({ + data: { + type: "push-notification-subscriptions", + attributes: { + providerName: "web-push-php", + group: { + name: "warehouse", + identifier: 1234 + }, + 'payload': { + endpoint: subscription.endpoint, + publicKey: key ? btoa(String.fromCharCode.apply(null, new Uint8Array(key))) : null, + authToken: token ? btoa(String.fromCharCode.apply(null, new Uint8Array(token))) : null, + } + } + } + }), + }).then(() => subscription); + } +}); +``` + +
    + +**.../push_notification_spa/serviceWorker.js** + +```js +self.addEventListener('push', function (event) { + if (!(self.Notification && self.Notification.permission === 'granted')) { + return; + } + + const sendNotification = body => { + const title = "Web Push example"; + + return self.registration.showNotification(title, { + body, + }); + }; + + if (event.data) { + const message = event.data.text(); + event.waitUntil(sendNotification(message)); + } +}); +``` + +5. To set up credential, in `.../push_notification_spa/app.js`, set your VAPID public key for the `applicationServerKey` variable. +6. In `.../push_notification_spa/app.js`, find the `getToken()` method and set the credentials of the user that works in your system. +7. Run the local HTTP server with the demo app: + +```bash +php -S localhost:8000 +``` + +8. To enable the push notification, on the **Web Push sandbox** page, click **Enable browser notifications**. +9. To create a push notification subscription, on the **Web Push sandbox** page, click **Create Push notification subscription**. +10. Create the push notification by adding it manually to the `spy_push_notification` database table. + Use the same group and notification provider that is used by the subscription. +11. Send the push notification: + +```bash +docker/sdk console send-push-notifications +``` + + The notification is displayed with content from the `spy_push_notification.payload` database field. + +13. Change the `spy_push_notification_subscription.expired_at` subscription expiration date to the previous year's date. +14. Remove the outdated subscriptions: + +```bash +docker/sdk console delete-expired-push-notification-subscriptions +``` + + +### 6) Set up a cron job to automate push notifications + +In the cron-job list, enable the `send-push-notifications` and `delete-expired-push-notification-subscriptions` console commands: + +**config/Zed/cronjobs/jobs.php** + +```php + 'delete-expired-push-notification-subscriptions', + 'command' => '$PHP_BIN vendor/bin/console push-notification:delete-expired-push-notification-subscriptions', + 'schedule' => '0 0 * * 0', + 'enable' => true, + 'stores' => $allStores, +]; + +$jobs[] = [ + 'name' => 'send-push-notifications', + 'command' => '$PHP_BIN vendor/bin/console push-notification:send-push-notifications', + 'schedule' => '* * * * *', + 'enable' => true, + 'stores' => $allStores, +]; +``` + +{% info_block warningBox "Verification" %} + +1. Create a push notification and subscribe to it. + Make sure that push notifications are sent based on the cron-job schedule by checking the `spy_push_notification_subscription_delivery_log` database table. This table contains a record for each unique combination of push notification and push notification subscription. +2. Create the push notification subscription record with `spy_push_notification_subscription.expired_at` with last year's date. + Make sure that outdated push notification subscription is removed based on the cron-job schedule by checking the `spy_push_notification_subscription` database table. + +{% endinfo_block %} + +{% info_block infoBox "" %} + +To optimize job execution and manage job concurrency, we recommend configuring and using the following pre-installed Jenkins plugins: + +- `Priority Sorter Plugin`: lets you set priorities for your Jenkins jobs. You can assign higher priorities to critical jobs, ensuring they are executed before lower-priority jobs. +- `Throttle Concurrent Builds Plugin`: provides fine-grained control over how many concurrent builds of a job can run. You can use it to limit the number of parallel executions for resource-intensive jobs, preventing overloading your Jenkins environment. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-queue-data-import-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-queue-data-import-feature.md new file mode 100644 index 00000000000..20780b9a296 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-queue-data-import-feature.md @@ -0,0 +1,44 @@ + + +## Install feature core + +### 1) Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker/data-import:"1.5.0" spryker/data-import-extension:"1.1.0" --update-with-dependencies` +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +|DataImport |vendor/spryker/data-import| +|DataImportExtension| vendor/spryker/data-import-extension| + +{% endinfo_block %} + + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate` +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| DataSetItem | class | created | src/Generated/Shared/Transfer/DataSetItemTransfer.php | +| QueueWriterConfiguration | class | created | src/Generated/Shared/Transfer/QueueWriterConfigurationTransfer.php | +| DataImporterQueueDataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterQueueDataImporterConfigurationTransfer.php | +| DataImporterQueueReaderConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterQueueReaderConfigurationTransfer.php | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-discontinued-products-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-discontinued-products-feature.md new file mode 100644 index 00000000000..bb22a7f5ccb --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-discontinued-products-feature.md @@ -0,0 +1,54 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +|Quick Add To Cart | {{page.release_tag}} | +|Discontinued Products | {{page.release_tag}} | + +### 1) Set up behavior + +#### Set up the additional functionality + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductDiscontinuedItemValidatorPlugin |Checks if the provided product SKU is discontinued, if yes - adds an error message. | None | Spryker\Client\ProductDiscontinuedStorage\Plugin\QuickOrder | + +**src/Pyz/Client/QuickOrder/QuickOrderDependencyProvider.php** + +```php + `QuickOrderFormMeasurementUnitColumnPlugin` adds the *Measuring Unit* column to the **Quick Add To Cart** page. Check if the column is displayed on the page. + +{% endinfo_block %} + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|ProductConcreteTransferBaseMeasurementUnitExpanderPlugin|Expands the provided array of `ProductConcreteTransfers` with the base measurement unit information (if available) for the product.|None|Spryker\Client\ProductMeasurementUnitStorage\Plugin\QuickOrder| + +**src/Pyz/Client/QuickOrder/QuickOrderDependencyProvider.php** + +```php +`ProductQuantityItemValidatorPlugin`takes care about quantities restrictions. Provide an SKU with quantity restrictions on the **Quick Add To Cart** page and verify if quantity gets automatically adjusted according to the quantity restrictions. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-packaging-units-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-packaging-units-feature.md new file mode 100644 index 00000000000..70da1b61ba0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-quick-add-to-cart-packaging-units-feature.md @@ -0,0 +1,54 @@ + + +## Install feature frontend + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +|---|---| +|Quick Order| {{page.release_tag}} | +|Packaging Units| {{page.release_tag}} | + +### 1) Set up behavior + +#### Set up the additional functionality + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|QuickOrderItemDefaultPackagingUnitExpanderPlugin|Expands `ItemTransfer` with packaging unit data if available.|None|SprykerShop\Yves\ProductPackagingUnitWidget\Plugin\QuickOrder| + +**src/Pyz/Yves/QuickOrderPage/QuickOrderPageDependencyProvider.php** + +```php + + */ + protected function getQuoteRequestPreCreateCheckPlugins(): array + { + return [ + new QuoteApprovalQuoteRequestPreCreateCheckPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that the **Request For Quote** button is not available on the **Cart** page when the quote is in the status *Waiting*. + +Make sure that when you have locked cart after quotation process and request approval for this cart, the cart should stay locked even if approver declined it. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-quotation-process-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-quotation-process-feature.md new file mode 100644 index 00000000000..179d6d229ba --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-quotation-process-feature.md @@ -0,0 +1,851 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +|Spryker Core | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +|Company Account | {{page.release_tag}} | +|Prices | {{page.release_tag}} | +| Agent Assist | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/quotation-process: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| QuoteRequest | vendor/spryker/quote-request | +| QuoteRequestExtension | vendor/spryker/quote-request-extension | +| QuoteRequestAgent | vendor/spryker/quote-request-agent | +| QuoteRequestDataImport | vendor/spryker/quote-request-data-import | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +|QuoteConfig::getQuoteFieldsAllowedForSaving | Used to allow saving quote request related fields of the quote to the database. |Pyz\Zed\Quote | +|QuoteRequestConfig::getQuoteFieldsAllowedForSaving |Used to define which quota data should be saved in the database during the request for quote process. |Pyz\Zed\QuoteRequest | +|Outdated quote request closing cronjob (See below in `config/Zed/cronjobs/jobs.php`) | Add cronjob that closes outdated quote requests. | - | +|Customer login access control regular expression (See below in `config/Shared/config_default.php`) | Used to close access for not logged in customers. | - | + +**src/Pyz/Zed/Quote/QuoteConfig.php** + +```php + 'close-outdated-quote-requests', + 'command' => '$PHP_BIN vendor/bin/console quote-request:close-outdated', + 'schedule' => '0 * * * *', + 'enable' => true, + 'run_on_non_production' => true, + 'stores' => $allStores, +]; +``` + +{% info_block warningBox "Verification" %} + +Make sure that quote request with outdated **Valid Until** changes its status to closed within one hour. + +{% endinfo_block %} + +**config/Shared/config_default.php** + +```php +src/data/import/glossary.csv + +```yaml +quote_request_widget.request_for_quote,Request for Quote,en_US +quote_request_widget.request_for_quote,Angebotsanfrage,de_DE +quote_request_widget.request_for_quote.list.title,Requests for Quote,en_US +quote_request_widget.request_for_quote.list.title,Angebotsanfragen,de_DE +quote_request_page.quote_request,Request for Quote,en_US +quote_request_page.quote_request,Angebotsanfrage,de_DE +quote_request_page.quote_request.create,Create,en_US +quote_request_page.quote_request.create,Erstellen,de_DE +quote_request_page.quote_request_version.created,RfQ have got new version,en_US +quote_request_page.quote_request_version.created,Angebotsanfrage hat neue Version bekommen,de_DE +quote_request_page.quote_request.submit,Submit Request,en_US +quote_request_page.quote_request.submit,Anfrage Einreichen,de_DE +quote_request_page.quote_request.metadata.label.note,Notes,en_US +quote_request_page.quote_request.metadata.label.note,Anmerkungen,de_DE +quote_request_page.quote_request.metadata.label.delivery_date,Do not ship later than,en_US +quote_request_page.quote_request.metadata.label.delivery_date,Versenden Sie nicht später als,de_DE +quote_request_page.quote_request.metadata.label.purchase_order_number,Purchase order number,en_US +quote_request_page.quote_request.metadata.label.purchase_order_number,Bestellnummer,de_DE +quote_request_page.quote_request.violations.invalid_date,Date should be greater than current date.,en_US +quote_request_page.quote_request.violations.invalid_date,Date should be greater than current date.,de_DE +quote_request_page.quote_request.created,Quote request created successfully.,en_US +quote_request_page.quote_request.created,Angebotsanfrage erfolgreich erstellt.,de_DE +quote_request_page.quote_request.list.reference,RfQ,en_US +quote_request_page.quote_request.list.reference,AfA,de_DE +quote_request_page.quote_request.list.company,Company,en_US +quote_request_page.quote_request.list.company,Firma,de_DE +quote_request_page.quote_request.list.business_unit,Business unit,en_US +quote_request_page.quote_request.list.business_unit,Geschäftseinheit,de_DE +quote_request_page.quote_request.list.owner,Owner,en_US +quote_request_page.quote_request.list.owner,Inhaber,de_DE +quote_request_page.quote_request.list.total,Total,en_US +quote_request_page.quote_request.list.total,Gesamt,de_DE +quote_request_page.quote_request.list.date,Date,en_US +quote_request_page.quote_request.list.date,Datum,de_DE +quote_request_page.quote_request.list.status,Status,en_US +quote_request_page.quote_request.list.status,Status,de_DE +quote_request_page.quote_request.list.actions,Actions,en_US +quote_request_page.quote_request.list.actions,Aktionen,de_DE +quote_request_page.quote_request.labels.date,Date,en_US +quote_request_page.quote_request.labels.date,Datum,de_DE +quote_request_page.quote_request.labels.status,Status,en_US +quote_request_page.quote_request.labels.status,Status,de_DE +quote_request_page.quote_request.labels.valid_till,Valid Till (UTC),en_US +quote_request_page.quote_request.labels.valid_till,Gültig bis (UTC),de_DE +quote_request_page.quote_request.labels.hide_latest_version,Hide latest version from customer,en_US +quote_request_page.quote_request.labels.hide_latest_version,Die letzte Version vom Kunden verstecken,de_DE +quote_request_page.quote_request.labels.latest_version_is_hidden,The latest version is hidden from the customer,en_US +quote_request_page.quote_request.labels.latest_version_is_hidden,Die letzte Version ist dem Kunden verborgen,de_DE +quote_request_page.quote_request.labels.latest_version_is_visible,The latest version is visible to the customer,en_US +quote_request_page.quote_request.labels.latest_version_is_visible,Die letzte Version ist für den Kunden sichtbar,de_DE +quote_request_page.quote_request.labels.history,History,en_US +quote_request_page.quote_request.labels.history,Geschichte,de_DE +quote_request_page.quote_request.labels.customer,Customer,en_US +quote_request_page.quote_request.labels.customer,Kunde,de_DE +quote_request_page.quote_request.labels.company,Company,en_US +quote_request_page.quote_request.labels.company,Unternehmen,de_DE +quote_request_page.quote_request.labels.business_unit,Business unit,en_US +quote_request_page.quote_request.labels.business_unit,Geschäftseinheit,de_DE +quote_request_page.quote_request.labels.information,RfQ Information,en_US +quote_request_page.quote_request.labels.information,Informationen zur Angebotsanfrage,de_DE +quote_request_page.quote_request.labels.version_information,Version Information,en_US +quote_request_page.quote_request.labels.version_information,Versionsinformation,de_DE +quote_request_page.quote_request.actions.view,View,en_US +quote_request_page.quote_request.actions.view,Ansehen,de_DE +quote_request_page.quote_request.actions.cancel,Cancel,en_US +quote_request_page.quote_request.actions.cancel,Stornieren,de_DE +quote_request_page.quote_request.actions.save,Save,en_US +quote_request_page.quote_request.actions.save,Sparen,de_DE +quote_request_page.quote_request.actions.back_to_list,Back to List,en_US +quote_request_page.quote_request.actions.back_to_list,Zurück zur Liste,de_DE +quote_request_page.quote_request.actions.back_to_view,Back to View,en_US +quote_request_page.quote_request.actions.back_to_view,Zurück zur Ansicht,de_DE +quote_request_page.quote_request.actions.send_to_customer,Send to Customer,en_US +quote_request_page.quote_request.actions.send_to_customer,Senden Sie an den Kunden,de_DE +quote_request_page.quote_request.actions.send_to_agent,Send to Agent,en_US +quote_request_page.quote_request.actions.send_to_agent,An Agent senden,de_DE +quote_request_page.quote_request.actions.save_and_back_to_edit,Save and Back to Edit,en_US +quote_request_page.quote_request.actions.save_and_back_to_edit,Speichern und zurück zum Bearbeiten,de_DE +quote_request_page.quote_request.actions.convert_to_cart,Convert to Cart,en_US +quote_request_page.quote_request.actions.convert_to_cart,In den Warenkorb konvertieren,de_DE +quote_request_page.quote_request.actions.revise,Revise,en_US +quote_request_page.quote_request.actions.revise,Überarbeiten,de_DE +quote_request_page.quote_request.actions.edit,Edit,en_US +quote_request_page.quote_request.actions.edit,Ändern,de_DE +quote_request_page.quote_request.actions.edit_items,Edit Items,en_US +quote_request_page.quote_request.actions.edit_items,Elemente bearbeiten,de_DE +quote_request_page.quote_request.view.empty,You do not have any quote requests yet.,en_US +quote_request_page.quote_request.view.empty,Sie haben noch keine Angebotsanfragen.,de_DE +quote_request_page.quote_request.updated,Quote request updated successfully.,en_US +quote_request_page.quote_request.updated,Angebotsanfrage erfolgreich aktualisiert.,de_DE +quote_request_page.quote_request.sent_to_customer,Quote request sent to customer successfully.,en_US +quote_request_page.quote_request.sent_to_customer,Angebotsanfrage erfolgreich an den Kunden gesendet.,de_DE +quote_request_page.quote_request.sent_to_user,Request for quote was successfully sent to the agent for processing.,en_US +quote_request_page.quote_request.sent_to_user,Die Angebotsanfrage wurde erfolgreich zur Bearbeitung an den Agenten gesendet.,de_DE +quote_request_page.quote_request.use_default_price,Use default price,en_US +quote_request_page.quote_request.use_default_price,Standardpreis verwenden,de_DE +quote_request_page.quote_request.converted_to_cart,Quote request converted to cart successfully.,en_US +quote_request_page.quote_request.converted_to_cart,Die Angebotsanfrage wurde erfolgreich in den Warenkorb konvertiert.,de_DE +quote_request_page.quote_request.edit_items_confirm,"You are editing RfQ %reference% if you will leave it, all changes will be dropped.",en_US +quote_request_page.quote_request.edit_items_confirm,"Sie bearbeiten RfQ %reference% wenn Sie es verlassen, werden alle Änderungen verworfen.",de_DE +agent.account.quote_request,Requests for Quote,en_US +agent.account.quote_request,Angebotsanfragen,de_DE +quote_request_agent_widget.quote_request,Request for Quote,en_US +quote_request_agent_widget.quote_request,Angebotsanfrage,de_DE +quote_request_agent_widget.items,Items,en_US +quote_request_agent_widget.items,Artikel,de_DE +quote_request_agent_widget.no_request_created,You do not have any quote requests yet.,en_US +quote_request_agent_widget.no_request_created,Sie haben noch keine Angebotsanfragen.,de_DE +quote_request_agent_widget.create_new_request,Create new RfQ,en_US +quote_request_agent_widget.create_new_request,Neue Angebotsanfrage,de_DE +quote_request_agent_widget.view_all_requests,View all requests,en_US +quote_request_agent_widget.view_all_requests,Alle Anfragen anzeigen,de_DE +quote_request_agent_widget.form.select_customer,Select customer,en_US +quote_request_agent_widget.form.select_customer,"Wählen Sie den Kunden aus",de_DE +quote_request_agent_page.checkout.step.save_rfq.title,Save Request For Quote,en_US +quote_request_agent_page.checkout.step.save_rfq.title,Angebotsanfrage speichern,de_DE +quote_request_page.quote_request.saved,Quote request saved successfully.,en_US +quote_request_page.quote_request.saved,Angebotsanfrage wurde erfolgreich gespeichert.,de_DE +quote_request_page.quote_request.actions.edit_address,Edit Address,en_US +quote_request_page.quote_request.actions.edit_address,Adresse bearbeiten,de_DE +quote_request_page.quote_request.actions.edit_shipment,Edit Shipment,en_US +quote_request_page.quote_request.actions.edit_shipment,Versandart bearbeiten,de_DE +quote_request_page.quote_request.edit_address_confirm,"You are editing Quote Request %reference% if you will leave it, all changes will be dropped.",en_US +quote_request_page.quote_request.edit_address_confirm,"Sie bearbeiten Angebotsanfrage %reference% wenn Sie es verlassen, werden alle Änderungen verworfen.",de_DE +quote_request_page.quote_request.edit_shipment_confirm,"You are editing Quote Request %reference% if you will leave it, all changes will be dropped.",en_US +quote_request_page.quote_request.edit_shipment_confirm,"Sie bearbeiten Angebotsanfrage %reference% wenn Sie es verlassen, werden alle Änderungen verworfen.",de_DE +quote_request_page.quote_request.shipment_counter,"Shipment %index% of %length%",en_US +quote_request_page.quote_request.shipment_counter,"Lieferung %index% von %length%",de_DE +quote_request_page.quote_request.empty_shipment_data,No shipment address / shipment method provided.,en_US +quote_request_page.quote_request.empty_shipment_data,Es wurde keine Lieferadresse / Lieferart angegeben.,de_DE +quote_request_page.quote_request.title_create,Create Quote Request,en_US +quote_request_page.quote_request.title_create,Angebotsanfrage erstellen,de_DE +quote_request_page.quote_request.title_edit,Edit #%id%,en_US +quote_request_page.quote_request.title_edit,Ändern #%id%,de_DE +quote_request_page.quote_request.title_attention,Attention,en_US +quote_request_page.quote_request.title_attention,Achtung,de_DE +quote_request_page.quote_request.title_addresses,Addresses,en_US +quote_request_page.quote_request.title_addresses,Adressen,de_DE +quote_request_page.quote_request.title_billing_address,Billing Address,en_US +quote_request_page.quote_request.title_billing_address,Rechnungsadresse,de_DE +quote_request_page.quote_request.title_delivery_address,Delivery address,en_US +quote_request_page.quote_request.title_delivery_address,Lieferadresse,de_DE +quote_request_page.quote_request.title_shipment_method,Shipment method,en_US +quote_request_page.quote_request.title_shipment_method,Versandmethode,de_DE +quote_request_page.quote_request.breadcrumb.create,Create,en_US +quote_request_page.quote_request.breadcrumb.create,Erstellen,de_DE +quote_request_page.quote_request.breadcrumb.edit,Edit,en_US +quote_request_page.quote_request.breadcrumb.edit,Ändern,de_DE +quote_request_page.quote_request.breadcrumb.attention,Attention,en_US +quote_request_page.quote_request.breadcrumb.attention,Achtung,de_DE +quote_request_page.quote_request.multiple_delivery_address,Multiple delivery addresses.,en_US +quote_request_page.quote_request.multiple_delivery_address,Mehrere Lieferadressen.,de_DE +quote_request_page.quote_request.multiple_shipment_method,Multiple shipment methods.,en_US +quote_request_page.quote_request.multiple_shipment_method,Mehrere Versandarten.,de_DE +quote_request_page.quote_request.empty_page,Your Quote is empty!,en_US +quote_request_page.quote_request.empty_page,Ihre Angebotsanfrage ist unvollständig!,de_DE +quote_request_page.quote_request.empty_delivery_address,No delivery address added.,en_US +quote_request_page.quote_request.empty_delivery_address,Keine Lieferadresse hinzugefügt.,de_DE +quote_request_page.quote_request.empty_address,No address added.,en_US +quote_request_page.quote_request.empty_address,Keine Adresse hinzugefügt.,de_DE +quote_request_page.quote_request.empty_shipment_method,No shipment method added.,en_US +quote_request_page.quote_request.empty_shipment_method,Keine Versandart hinzugefügt.,de_DE +quote_request_page.quote_request.cta_add_address,Add address,en_US +quote_request_page.quote_request.cta_add_address,Adresse hinzufügen,de_DE +quote_request_page.quote_request.cta_edit_address,Edit address,en_US +quote_request_page.quote_request.cta_edit_address,Adresse bearbeiten,de_DE +quote_request_page.quote_request.cta_add_shipment_method,Add shipment method,en_US +quote_request_page.quote_request.cta_add_shipment_method,Versandart hinzufügen,de_DE +quote_request_page.quote_request.cta_edit_shipment_method,Edit shipment method,en_US +quote_request_page.quote_request.cta_edit_shipment_method,Versandart bearbeiten,de_DE +quote_request_page.quote_request.item,%count% item(s),en_US +quote_request_page.quote_request.item,%count% artikel,de_DE +``` + +
    + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up behavior + +#### Set up quote request workflow + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|PurchaseOrderNumberMetadataFieldPlugin|Adds purchase order number to metadata for `QuoteRequest` form.|None|SprykerShop\Yves\QuoteRequestPage\Plugin\QuoteRequestPage| +|DeliveryDateMetadataFieldPlugin|Adds delivery date to metadata for `QuoteRequest` form.|None|SprykerShop\Yves\QuoteRequestPage\Plugin\QuoteRequestPage| +|NoteMetadataFieldPlugin|Adds note to metadata for `QuoteRequestAgent` form.|None|SprykerShop\Yves\QuoteRequestPage\Plugin\QuoteRequestPage| +|PurchaseOrderNumberMetadataFieldPlugin|Adds purchase order number to metadata for `QuoteRequestAgent` form.|None|SprykerShop\Yves\QuoteRequestAgentPage\Plugin\QuoteRequestAgentPage| +|DeliveryDateMetadataFieldPlugin|Adds delivery date to metadata for `QuoteRequestAgent` form.|None|SprykerShop\Yves\QuoteRequestAgentPage\Plugin\QuoteRequestAgentPage| +|NoteMetadataFieldPlugin|Adds note to metadata for `QuoteRequestAgent` form.|None|SprykerShop\Yves\QuoteRequestAgentPage\Plugin\QuoteRequestAgentPage| + +**Pyz\Yves\QuoteRequestPage\QuoteRequestPageDependencyProvider.php** + +```php + + */ + protected function getCartReorderQuoteProviderStrategyPlugins(): array + { + return [ + new ResetItemsSessionCartReorderQuoteProviderStrategyPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/CartReorder/CartReorderDependencyProvider.php + +```php + + */ + protected function getCartReorderValidatorPlugins(): array + { + return [ + new CurrentStoreCartReorderValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderQuoteProviderStrategyPluginInterface> + */ + protected function getCartReorderQuoteProviderStrategyPlugins(): array + { + return [ + new ReplacePersistentCartReorderQuoteProviderStrategyPlugin(), + new NewPersistentCartReorderQuoteProviderStrategyPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPreReorderPluginInterface> + */ + protected function getCartPreReorderPlugins(): array + { + return [ + new CopyOrderCurrencyCartPreReorderPlugin(), + new CopyOrderPriceModeCartPreReorderPlugin(), + new ProductListRestrictedItemsCartPreReorderPlugin(), + new ReplaceBundledItemsCartPreReorderPlugin(), + new MergeProductMeasurementUnitItemsCartPreReorderPlugin(), + new MergeProductPackagingUnitItemsCartPreReorderPlugin(), + new MergeConfigurableBundleItemsCartPreReorderPlugin(), + new CartNoteCartPreReorderPlugin(), + new OrderCustomReferenceCartPreReorderPlugin(), + new MergeProductQuantityRestrictionItemsCartPreReorderPlugin(), + new CopyOrderCommentThreadCartPreReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderItemHydratorPluginInterface> + */ + protected function getCartReorderItemHydratorPlugins(): array + { + return [ + new ProductMeasurementUnitCartReorderItemHydratorPlugin(), + new ProductPackagingUnitCartReorderItemHydratorPlugin(), + new CartNoteCartReorderItemHydratorPlugin(), + new ProductOfferCartReorderItemHydratorPlugin(), + new MerchantProductCartReorderItemHydratorPlugin(), + new MerchantProductOfferCartReorderItemHydratorPlugin(), + new ProductConfigurationCartReorderItemHydratorPlugin(), + new ProductOptionCartReorderItemHydratorPlugin(), + new ConfigurableBundleCartReorderItemHydratorPlugin(), + new ConfigurableBundleNoteCartReorderItemHydratorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPostReorderPluginInterface> + */ + protected function getCartPostReorderPlugins(): array + { + return [ + new UpdateQuoteCartPostReorderPlugin(), + new ConfiguredBundleCartPostReorderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderPreAddToCartPluginInterface> + */ + protected function getCartReorderPreAddToCartPlugins(): array + { + return [ + new RemoveUnavailableItemsCartReorderPreAddToCartPlugin(), + new RemoveInactiveItemsCartReorderPreAddToCartPlugin(), + new RemoveInactiveProductOffersCartReorderPreAddToCartPlugin(), + new RemoveInactiveProductOptionItemsCartReorderPreAddToCartPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderOrderItemFilterPluginInterface> + */ + protected function getCartReorderOrderItemFilterPlugins(): array + { + return [ + new ProductBundleCartReorderOrderItemFilterPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new CartReorderResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that a customer can reorder with different types of products on the cart page. + +{% endinfo_block %} + +## Install feature frontend + +To install the feature frontend, take the following steps. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/reorder: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------|-------------------------------------------------| +| CartReorderPage | vendor/spryker-shop/cart-reorder-page | +| CartReorderPageExtension | vendor/spryker-shop/cart-reorder-page-extension | + +{% endinfo_block %} + +### 2) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +cart_reorder_page.reorder_all,Reorder all,en_US +cart_reorder_page.reorder_all,Alle Artikel Nachbestellen,de_DE +cart_reorder_page.reorder,Reorder,en_US +cart_reorder_page.reorder,Nachbestellen,de_DE +cart_reorder_page.reorder_selected,Reorder selected items,en_US +cart_reorder_page.reorder_selected,Ausgewählte Artikel Nachbestellen,de_DE +cart_reorder.pre_add_to_cart.inactive_product_option_item_removed,Inactive item %sku% was removed from your shopping cart.,en_US +cart_reorder.pre_add_to_cart.inactive_product_option_item_removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------|--------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| CartReorderPageRouteProviderPlugin | Expands router collection with the `cart-reorder` endpoint. | | SprykerShop\Yves\CartReorderPage\Plugin\Router | +| ProductAvailabilityCartReorderItemCheckboxAttributeExpanderPlugin | Overwrites the disabled attribute for unavailable items. | | SprykerShop\Yves\AvailabilityWidget\Plugin\CartReorderPage | +| ProductBundleCartReorderItemCheckboxAttributeExpanderPlugin | Overwrites attribute name and value for bundle items. | | SprykerShop\Yves\ProductBundleWidget\Plugin\CartReorderPage | +| ProductBundleCartReorderRequestExpanderPlugin | Expands `CartReorderRequestTransfer` with bundle item identifiers. | | SprykerShop\Yves\ProductBundleWidget\Plugin\CartReorderPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new CartReorderPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartReorderPage/CartReorderPageDependencyProvider.php** + +```php + + */ + protected function getCartReorderItemCheckboxAttributeExpanderPlugins(): array + { + return [ + new ProductAvailabilityCartReorderItemCheckboxAttributeExpanderPlugin(), + new ProductBundleCartReorderItemCheckboxAttributeExpanderPlugin(), + ]; + } + + /** + * @return list<\SprykerShop\Yves\CartReorderPageExtension\Dependency\Plugin\CartReorderRequestExpanderPluginInterface> + */ + protected function getCartReorderRequestExpanderPlugins(): array + { + return [ + new ProductBundleCartReorderRequestExpanderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure a customer can reorder on the order details and order list pages. + +{% endinfo_block %} + +### 4) Set up widgets + +To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|---------------------------------------------------------------------------------------|---------------|-----------------------------------------| +| CartReorderWidget | Enables customers to reorder existing orders on the order table page. | | SprykerShop\Yves\CartReorderPage\Widget | +| CartReorderItemCheckboxWidget | Enables customers to reorder concrete products from existing orders on the order detail page. | | SprykerShop\Yves\CartReorderPage\Widget | +| CartReorderItemsWidget | Enables customers to reorder existing orders on the order details page. | | SprykerShop\Yves\CartReorderPage\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + CartReorderWidget::class, + CartReorderItemCheckboxWidget::class, + CartReorderItemsWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|-------------------------------|-----------------------------------------------------------------------------------------------------------------------| +| CartReorderWidget | Go to the **Order List** page and make sure you can reorder an existing order by clicking the reorder button. | +| CartReorderItemCheckboxWidget | Go to the **Order Details** page and make sure you can select and reorder items clicking the reorder button. | +| CartReorderItemsWidget | Go to the **Order Details** page and make sure you can reorder all items by clicking the reorder all button. | + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-resource-sharing-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-resource-sharing-feature.md new file mode 100644 index 00000000000..2495ebd4f80 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-resource-sharing-feature.md @@ -0,0 +1,172 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/resource-sharing: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ResourceShare | vendor/spryker/resource-share | +| ResourceShareExtension | vendor/spryker/resource-share-extension | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_resource_share | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes in transfer objects have been applied: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| SpyResourceShareEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyResourceShareEntityTransfer | +| ResourceShare | class | created | src/Generated/Shared/Transfer/ResourceShareTransfer | +| ResourceShareData | class | created | src/Generated/Shared/Transfer/ResourceShareDataTransfer | +| ResourceShareRequest | class | created | src/Generated/Shared/Transfer/ResourceShareRequestTransfer | +| ResourceShareResponse | class | created | src/Generated/Shared/Transfer/ResourceShareResponseTransfer | + +{% endinfo_block %} + +## Install feature frontend + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/resource-sharing: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ResourceSharePage | vendor/spryker-shop/resource-share-page | +| ResourceSharePageExtension | vendor/spryker-shop/resource-share-page-extension | + +{% endinfo_block %} + +### 2) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +resource_share.activator.error.strategy_expects_logged_in_customer,Please login to access requested shared resource.,en_US +resource_share.activator.error.strategy_expects_logged_in_customer,"Bitte anmelden, um Zugand zu der angeforderten Ressource zu erhalten.",de_DE +resource_share.reader.error.resource_is_not_found_by_provided_uuid,Resource is not found by provided UUID.,en_US +resource_share.reader.error.resource_is_not_found_by_provided_uuid,Resource wurde nicht bei dem angegebenen UUID gefunden.,de_DE +resource_share.generation.error.resource_type_is_not_defined,Resource type is not defined.,en_US +resource_share.generation.error.resource_type_is_not_defined,Ressourcentyp wurde nicht definiert.,de_DE +resource_share.generation.error.customer_reference_is_not_defined,Customer reference is not defined.,en_US +resource_share.generation.error.customer_reference_is_not_defined,Kundenreferenz wurde nicht definiert.,de_DE +resource_share.validation.error.resource_share_is_expired,Resource share is expired.,en_US +resource_share.validation.error.resource_share_is_expired,Ressourcenteilung ist abgelaufen.,de_DE +resource-share.link.error.no-route,Redirect route should not be empty.,en_US +resource-share.link.error.no-route,Redirect Route kann nicht leer sein.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Enable controllers + +#### Route list + +Register the following route provider plugins: + +| PROVIDER | NAMESPACE | +| --- | --- | +| ResourceSharePageRouteProviderPlugin | SprykerShop\Yves\ResourceSharePage\Plugin\Router | + + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + '/sales-return-gui/sales/list', + ]; + + $externalBlocks = parent::getSalesDetailExternalBlocksUrls(); + + return array_merge($externalBlocks, $projectExternalBlocks); + } + + /** + * @return bool + */ + public function isHydrateOrderHistoryToItems(): bool + { + return false; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the order detail page in the Back Office shows a table with order's returns in the **Returns** section. + +Make sure that when the `StateHistoryOrderItemExpanderPlugin` is not configured and `SalesConfig::isHydrateOrderHistoryToItems()` is false, the order item state history is not shown in the order items table on the order detail page. + +{% endinfo_block %} + +#### Configure OMS + +Consider OMS configuration using `DummyPayment01` process as an example. +First of all, add `DummyReturn01` process. + +**config/Zed/oms/DummySubprocess/DummyReturn01.xml** + +```xml + + + + + + + + + + + + + + shipped + waiting for return + start-return + + + + delivered + waiting for return + start-return + + + + waiting for return + returned + execute-return + + + + waiting for return + return canceled + cancel-return + + + + return canceled + shipped to customer + ship-return + + + + shipped to customer + delivered + delivery-return + + + + + + + + + + + + + +``` + +Include `DummyReturn01` as a subprocess into `DummyPayment01`. + +**config/Zed/oms/DummyPayment01.xml** + +```xml + + + + + + DummyReturn + + + + + + +``` + +{% info_block warningBox "Verification" %} + +Make sure the OMS the transition diagram shows a possible transition from `shipped` to `waiting for return`. + +{% endinfo_block %} + +### 3) Set up database schema and transfer objects + +Adjust the schema definition so entity changes will trigger the events: + +**src/Pyz/Zed/SalesReturn/Persistence/Propel/Schema/spy_sales_return.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/SalesReturnSearch/Persistence/Propel/Schema/spy_sales_return_search.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +Run the following commands to apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_sales_return | table | created | +| spy_sales_return_item | table | created | +| spy_sales_return_reason | table | created | +| spy_sales_return_reason_search | table | created | +| spy_sales_order_item.remuneration_amount | column | created | +| spy_sales_order_item.uuid | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| Return | class | created | src/Generated/Shared/Transfer/ReturnTransfer | +| ReturnItem | class | created | src/Generated/Shared/Transfer/ReturnItemTransfer | +| ReturnTotals | class | created | src/Generated/Shared/Transfer/ReturnTotalsTransfer | +| ReturnCollection | class | created | src/Generated/Shared/Transfer/ReturnCollectionTransfer | +| ReturnCollection | class | created | src/Generated/Shared/Transfer/ReturnCreateRequestTransfer | +| ReturnCreateRequest | class | created | src/Generated/Shared/Transfer/ReturnCreateRequestTransfer | +| ReturnReasonSearch | class | created | src/Generated/Shared/Transfer/ReturnReasonSearchTransfer | +| ReturnReasonSearchRequest | class | created | src/Generated/Shared/Transfer/ReturnReasonSearchRequestTransfer | +| ReturnReasonSearchCollection | class | created | src/Generated/Shared/Transfer/ReturnReasonSearchCollectionTransfer | +| ReturnResponse | class | created | src/Generated/Shared/Transfer/ReturnResponseTransfer | +| ReturnItemFilter | class | created | src/Generated/Shared/Transfer/ReturnItemFilterTransfer | +| ReturnFilter | class | created | src/Generated/Shared/Transfer/ReturnFilterTransfer | +| ReturnReasonFilter | class | created | src/Generated/Shared/Transfer/ReturnReasonFilterTransfer | +| OrderItemFilter| class | created | src/Generated/Shared/Transfer/OrderItemFilterTransfer | +| BarcodeResponse| class | created | src/Generated/Shared/Transfer/BarcodeResponseTransfer| +| Item.isReturnable | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.orderReference | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.createdAt | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.currencyIsoCode | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.salesOrderConfiguredBundle | property | created | src/Generated/Shared/Transfer/ItemTransfer` | +| Item.returnPolicyMessages | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| OrderListRequest.orderReferences | property | created | src/Generated/Shared/Transfer/OrderListRequestTransfer | +| PaginationConfig.maxItemsPerPage | property | created | src/Generated/Shared/Transfer/PaginationConfigTransfer | + +{% endinfo_block %} + +### 4) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +return.return_reasons.damaged.name,Damaged,en_US +return.return_reasons.damaged.name,Beschädigt,de_DE +return.return_reasons.wrong-item.name,Wrong Item,en_US +return.return_reasons.wrong-item.name,Falscher Artikel,de_DE +return.return_reasons.no_longer_needed.name,No longer needed,en_US +return.return_reasons.no_longer_needed.name,Nicht mehr benötigt,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 5) Configure export to Elasticsearch + +Adjust Elasicsearch config at SearchElasticsearchConfig: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Configure synchronization pool + +**src/Pyz/Zed/SalesReturnSearch/SalesReturnSearchConfig.php** + +```php +extend(static::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new StartReturnCommandPlugin(), 'Return/StartReturn'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that results from `SalesFacade::getOrderItems()` method call contain respective `isReturnable` and `returnPolicyMessages` data. +Make sure that results from `SalesFacade::getOrderByIdSalesOrder()` method contain remuneration total data. + +Make sure the order items that transit from status `shipped` to `waiting for return` have the remuneration amount set. + +{% endinfo_block %} + +### Update Back Office navigation + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that the **Sales > Returns** navigation item is displayed. + +{% endinfo_block %} + + + +## Install feature frontend + +Follow the steps below to install the feature front end. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/return-management:"{{page.release_tag}}" spryker-shop/barcode-widget:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| SalesReturnPage | vendor/spryker-shop/sales-return-page | +| BarcodeWidget | vendor/spryker-shop/barcode-widget | + +{% endinfo_block %} + +### 2) Add translations + +Add translations as follows: + +1. Append glossary according to your configuration: + +
    data/import/common/common/glossary.csv + +```yaml +customer.order.remunerationTotal,Remuneration Total,en_US +customer.order.remunerationTotal,Rückerstattungsbetrag,de_DE +customer.order.refundTotal,Refund Total,en_US +customer.order.refundTotal,Rückerstattung insgesamt,de_DE +sales_configured_bundle_widget.returnable_state,Non-returnable,en_US +sales_configured_bundle_widget.returnable_state,Kann nicht retourniert werden,de_DE +sales_configured_bundle_widget.quantity,Quantity:,en_US +sales_configured_bundle_widget.quantity,Anzahl:,de_DE +return_page.default_title,Returns,en_US +return_page.default_title,Retouren,de_DE +return_page.title,Create Return,en_US +return_page.title,Retoure Anlegen,de_DE +return_page.return_reasons.select_reason.placeholder,Select reason,en_US +return_page.return_reasons.select_reason.placeholder,Grund auswählen,de_DE +return_page.return_reasons.custom_reason.placeholder,Custom reason,en_US +return_page.return_reasons.custom_reason.placeholder,Benutzerdefinierter Grund,de_DE +return.return_policy.returnable_till.message,Returnable till: %date%,en_US +return.return_policy.returnable_till.message,Retournierbar bis: %date%,de_DE +return_page.list.title,Returns,en_US +return_page.list.title,Retouren,de_DE +return_page.account.no_return,No returns at the moment,en_US +return_page.account.no_return,Momentan gibt es keine Retouren,de_DE +return_page.return.return_ref,Return Reference,en_US +return_page.return.return_ref,Retourennummer,de_DE +return_page.return.order_ref,Order Reference,en_US +return_page.return.order_ref,Bestellnummer,de_DE +return_page.return.number_of_items,No. of Items,en_US +return_page.return.number_of_items,Anzahl der Artikel,de_DE +return_page.return.date,Return Date,en_US +return_page.return.date,Retouredatum,de_DE +return_page.return.items_state,Items State,en_US +return_page.return.items_state,Stand der Artikel,de_DE +return_page.return.view_return,View Return,en_US +return_page.return.view_return,Retoure ansehen,de_DE +return_page.return.print_return,Print Slip,en_US +return_page.return.print_return,Beleg ausdrücken,de_DE +return_page.breadcrumb.returns,Returns,en_US +return_page.breadcrumb.returns,Retouren,de_DE +return_page.breadcrumb.create_return,Create Return,en_US +return_page.breadcrumb.create_return,Retoure anlegen,de_DE +return_page.details.page_title,Return Details,en_US +return_page.details.page_title,Retourendetails,de_DE +return_page.details.actions.back_to_list,Back to List,en_US +return_page.details.actions.back_to_list,Zurück zur Liste,de_DE +return_page.details.actions.print_slip,Print Slip,en_US +return_page.details.actions.print_slip,Beleg ausdrücken,de_DE +return_page.details.total.items_to_return,Items to return,en_US +return_page.details.total.items_to_return,Die zu retournierenden Artikel,de_DE +return_page.details.total.items_to_return.count,items,en_US +return_page.details.total.items_to_return.count,Artikel,de_DE +return_page.details.total.remuneration_total,Remuneration Total,en_US +return_page.details.total.remuneration_total,Rückerstattungsbetrag,de_DE +return_page.item.options,Product options:,en_US +return_page.item.options,Produktoptionen:,de_DE +return_page.table.actions,Actions,en_US +return_page.table.actions,Aktionen,de_DE +return_page.button.return_list,Returns,en_US +return_page.button.return_list,Retouren,de_DE +return_page.return_reasons.title,Reason:,en_US +return_page.return_reasons.title,Grund:,de_DE +return_page.return.created,Return created successfully,en_US +return_page.return.created,Retoure wurde erfolgreich angelegt,de_DE +return_page.return.title,Create Return,en_US +return_page.return.title,Retoure Anlegen,de_DE +return_page.order_reference,Order ref:,en_US +return_page.order_reference,Bestellnummer:,de_DE +return_page.order_date,Order date:,en_US +return_page.order_date,Bestellungsdatum:,de_DE +return_page.return_reference,Return ref:,en_US +return_page.return_reference,Retourennummer:,de_DE +return_page.return_date,Return date:,en_US +return_page.return_date,Retouredatum:,de_DE +return_page.button_text,Create Return,en_US +return_page.button_text,Retoure anlegen,de_DE +return_page.item_sku,SKU:,en_US +return_page.item_sku,SKU:,de_DE +return_page.quantity,Quantity:,en_US +return_page.quantity,Anzahl:,de_DE +return_page.returnable_state,Non-returnable,en_US +return_page.returnable_state,Kann nicht retourniert werden,de_DE +return_page.create_return.validation.selected_items,At least one product should be selected.,en_US +return_page.create_return.validation.selected_items,Mindestens ein Produkt sollte ausgewählt werden.,de_DE +return_page.button.create_return,Create Return,en_US +return_page.button.create_return,Retoure anlegen,de_DE +return_page.slip.return_reference,Return Ref,en_US +return_page.slip.return_reference,Retourennummer,de_DE +return_page.slip.return_date,Return Date,en_US +return_page.slip.return_date,Retouredatum,de_DE +return_page.slip.order_reference,Order Ref,en_US +return_page.slip.order_reference,Bestellnummer,de_DE +return_page.slip.barcode,Barcode,en_US +return_page.slip.barcode,Barcode,de_DE +return_page.slip.product_sku,Product SKU,en_US +return_page.slip.product_sku,Produkt-SKU,de_DE +return_page.slip.product_name,Product Name,en_US +return_page.slip.product_name,Produktname,de_DE +return_page.slip.default_price,Default Price,en_US +return_page.slip.default_price,Standardpreis,de_DE +return_page.slip.quantity,Qty,en_US +return_page.slip.quantity,Anzahl,de_DE +return_page.slip.total_price,Total Price,en_US +return_page.slip.total_price,Gesamtpreis,de_DE +return_page.slip.return_reason,Return Reason,en_US +return_page.slip.return_reason,Retourengrund,de_DE +return_page.slip.items_to_return,Items to Return,en_US +return_page.slip.items_to_return,Die zu retournierenden Artikel,de_DE +return_page.slip.remuneration_total,Remuneration Total,en_US +return_page.slip.remuneration_total,Rückerstattungsbetrag,de_DE +sales_product_bundle_widget.returnable_text,Returnable till:,en_US +sales_product_bundle_widget.returnable_text,Man kann retournieren bis:,de_DE +sales_product_bundle_widget.returnable_state,Non-returnable,en_US +sales_product_bundle_widget.returnable_state,Kann nicht retourniert werden,de_DE +sales_product_bundle_widget.item_sku,SKU:,en_US +sales_product_bundle_widget.item_sku,SKU:,de_DE +sales_product_bundle_widget.quantity,Quantity:,en_US +sales_product_bundle_widget.quantity,Anzahl:,de_DE +sales_product_bundle_widget.item.options,Product options:,en_US +sales_product_bundle_widget.item.options,Produktoptionen:,de_DE +oms.state.new,New,en_US +oms.state.new,Neu,de_DE +oms.state.waiting,Waiting,en_US +oms.state.waiting,Warten,de_DE +oms.state.in-progress,In progress,en_US +oms.state.in-progress,In Bearbeitung,de_DE +oms.state.ready,Ready,en_US +oms.state.ready,Bereit,de_DE +oms.state.canceled,Canceled,en_US +oms.state.canceled,Abgebrochen,de_DE +oms.state.closed,Closed,en_US +oms.state.closed,Geschlossen,de_DE +oms.state.draft,Draft,en_US +oms.state.draft,Entwurf,de_DE +oms.state.payment-pending,Payment pending,en_US +oms.state.payment-pending,Ausstehende Zahlung,de_DE +oms.state.paid,Paid,en_US +oms.state.paid,Bezahlt,de_DE +oms.state.confirmed,Confirmed,en_US +oms.state.confirmed,Bestätigt,de_DE +oms.state.exported,Exported,en_US +oms.state.exported,Exportiert,de_DE +oms.state.shipped,Shipped,en_US +oms.state.shipped,Versandt,de_DE +oms.state.delivered,Delivered,en_US +oms.state.delivered,Geliefert,de_DE +oms.state.ready-for-return,Ready for return,en_US +oms.state.ready-for-return,Bereit zum Retournieren,de_DE +oms.state.refunded,Refunded,en_US +oms.state.refunded,Zurückerstattet,de_DE +oms.state.returned,Returned,en_US +oms.state.returned,Retourniert,de_DE +oms.state.waiting-for-return,Waiting for return,en_US +oms.state.waiting-for-return,Wartet auf Retoure,de_DE +oms.state.shipped-to-customer,Shipped to customer,en_US +oms.state.shipped-to-customer,An den Kunden versandt,de_DE +oms.state.sent-to-merchant,Sent to merchant,en_US +oms.state.sent-to-merchant,An den Händler versandt,de_DE +oms.state.shipped-by-merchant,Shipped by merchant,en_US +oms.state.shipped-by-merchant,Von dem Händler versandt,de_DE +oms.state.return-canceled,Return canceled,en_US +oms.state.return-canceled,Retoure wurde abgebrochen,de_DE +return.create_return.validation.returnable_items_error,Return cannot be created as it contains non-returnable items,en_US +return.create_return.validation.returnable_items_error,"Retoure kann nicht angestellt werden, weil sie die Artikel beinhaltet, die nicht retourniert werden können",de_DE +return.create_return.validation.store_error,Return cannot be created - a wrong store has been selected,en_US +return.create_return.validation.store_error,Retoure kann nicht angestellt werden - es wurde ein falscher Store ausgewählt.,de_DE +return.create_return.validation.items_error,Return cannot be cretaed for this set of items,en_US +return.create_return.validation.items_error,Für dieses Set der Artikel kann die Retoure nicht erstellt werden,de_DE +``` + +
    + +2. Import data: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Ensure that the configured data has been added to the `spy_glossary` table in the database. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider on the Storefront: + +| PROVIDER | NAMESPACE | +| --- | --- | +| SalesReturnPageRouteProviderPlugin | SprykerShop\Yves\SalesReturnPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + Data export config file + +```yml +version: 1 + +defaults: + filter_criteria: &default_filter_criteria + order_created_at: + type: between + from: '2020-05-01 00:00:00' + to: '2020-12-31 23:59:59' + +actions: + - data_entity: order-expense + destination: '{data_entity}s_DE_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + - data_entity: order-expense + destination: '{data_entity}s_AT_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [AT] + + - data_entity: order-item + destination: '{data_entity}s_DE_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + - data_entity: order-item + destination: '{data_entity}s_AT_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [AT] + + - data_entity: order + destination: '{data_entity}s_DE_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + - data_entity: order + destination: '{data_entity}s_AT_{timestamp}.{extension}' + filter_criteria: + <<: *default_filter_criteria + store_name: [AT] + ``` + + + + 3. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------|---------------|-------------------------------------------------------------| +| OutputStreamDataExportConnectionPlugin | Writes a formatted data batch to the output stream. | | Spryker\Service\DataExport\Plugin\DataExport | +| OrderDataEntityExporterPlugin | Adds the `order` data exporter. | | Spryker\Zed\SalesDataExport\Communication\Plugin\DataExport | +| OrderExpenseDataEntityExporterPlugin | Adds the `order-expense` data exporter. | | Spryker\Zed\SalesDataExport\Communication\Plugin\DataExport | +| OrderItemDataEntityExporterPlugin | Adds the `order-item` data exporter. | | Spryker\Zed\SalesDataExport\Communication\Plugin\DataExport | + +**src/Pyz/Service/DataExport/DataExportDependencyProvider.php** + +```php + + */ + protected function getDataExportConnectionPlugins(): array + { + return [ + new OutputStreamDataExportConnectionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/DataExport/DataExportDependencyProvider.php** + +```php +
  • Applies scheduled prices for the current store.
  • Persists a price product store for the applied scheduled product price.
  • Disables irrelevant product price schedules for the applied scheduled products price.
  • Reverts product prices from the fallback price type for scheduled product prices that are finished.
  • | 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 +src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + +2. Apply scheduled prices: + +```bash +console price-product-schedule:apply +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure that the following conditions are met: +1. Go to **Catalog > Products** and check the following: + 1. Check that scheduled prices have been correctly applied. + 2. Click **Edit** to check that you can edit any abstract or concrete product. + 3. On the **Edit Product** page, you can find the **Scheduled Prices** tab with your scheduled prices which you can create, update, and delete. +2. Go to **Catalog > Scheduled Prices** and check the following: + 1. You can import scheduled prices and then see the list of previous imports. + 2. You can click the **View**, **Edit**, **Download**, and **Delete** buttons to see information about the import, edit the name of the import as well as edit and delete scheduled prices inside this import, and download all the prices inside the import, and delete the import. + +{% endinfo_block %} + +3. Clear applied scheduled prices: + +```bash +console price-product-schedule:clean-up 1 +``` + +{% info_block warningBox "Vreification" %} + +Make sure that applied scheduled prices have been correctly removed from the database by checking the `spy_price_product_schedule` table. + +{% endinfo_block %} + +### 6) Set up cron job + +Enable the `apply-price-product-schedule` console command in the cron-job list: + +**config/Zed/cronjobs/jobs.php** + +```php + '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, +]; +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, go to **Catalog > Products** and make sure that scheduled prices have been correctly applied. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-search-widget-for-concrete-products-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-search-widget-for-concrete-products-feature.md new file mode 100644 index 00000000000..40ef2f944a0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-search-widget-for-concrete-products-feature.md @@ -0,0 +1,166 @@ + + +## Install feature core + +### Prerequisites + +To start the feature integration, overview and install the necessary features: + +| NAME | REQUIRED | VERSION | +| --- | --- | --- | +| Cart | v | {{page.release_tag}} | +| Product | v | {{page.release_tag}} | +| Non-splittable Products | | {{page.release_tag}} | + +### 1) Check the installed modules + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | REQUIRED | EXPECTED DIRECTORY | +| --- | --- | --- | +| Cart | v | vendor/spryker/cart | +| Product | v | vendor/spryker/product | +| ProductQuantity | | vendor/spryker/product-quantity | +| ProductSearchWidget | | vendor/spryker-shop/product-search-widget | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes are present in the transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| CartChangeTransfer | class | created | src/Generated/Shared/Transfer/CartChangeTransfer | +| ItemTransfer | class | created |src/Generated/Shared/Transfer/ItemTransfer | +| MessageTransfer | class | created | src/Generated/Shared/Transfer/MessageTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Append glossary according to your language configuration: + +**src/data/import/glossary.csv** + +```yaml +cart.quick_add_to_cart,Schnell zum Warenkorb hinzufügen,de_DE +cart.quick_add_to_cart,Quick add to Cart,en_US +cart.quick_add_to_cart.submit,In den Warenkorb,de_DE +cart.quick_add_to_cart.submit,Add to Cart,en_US +product_quick_add_widget.form.quantity,"# Qty",en_US +product_quick_add_widget.form.quantity,"# Anzahl",de_DE +product_quick_add_widget.form.error.quantity.required,"Quantity must be at least 1",en_US +product_quick_add_widget.form.error.quantity.required,"Die Anzahl muss mindestens 1 sein",de_DE +product_quick_add_widget.form.error.quantity.max_value_constraint,"Provided quantity is too high",en_US +product_quick_add_widget.form.error.quantity.max_value_constraint,"Die Menge ist leider zu groß",de_DE +product_quick_add_widget.form.error.redirect_route_empty,"Redirect router should not be empty",en_US +product_quick_add_widget.form.error.redirect_route_empty,"Redirect Router kann nicht leer sein",de_DE +product_quick_add_widget.form.error.sku.empty,"SKU should not be empty",en_US +product_quick_add_widget.form.error.sku.empty,"SKU kann nicht leer sein",de_DE +product-quantity.notification.quantity.min.failed,The ordered quantity was adjusted to the next possible quantity for the article because minimum quantity is %min%.,en_US +product-quantity.notification.quantity.min.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Mindestanzahl ist %min%.,de_DE +product-quantity.notification.quantity.max.failed,The ordered quantity was adjusted to the next possible quantity for the article because maximum quantity is %max%.,en_US +product-quantity.notification.quantity.max.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Maximalanzahl ist %max%.,de_DE +product-quantity.notification.quantity.interval.failed,The ordered quantity was adjusted to the next possible quantity for the article because quantity step is %step%.,en_US +product-quantity.notification.quantity.interval.failed,Die bestellte Anzahl erfüllt nicht die Anforderungen für dieses Produkt. Intervallgröße ist %step%.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Set up widgets + +Enable global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +| --- | --- | --- | +| ProductConcreteAddWidget | Provides a form with the product concrete search and quantity inputs to add the concrete products to cart. | SprykerShop\Yves\ProductSearchWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getCheckoutAddressStepPostExecutePlugins(): array + { + return [ + new ServicePointCheckoutAddressStepPostExecutePlugin(), + ]; + } +} +``` + +2. Enable the demo Click & Collect replacement strategy plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| ClickAndCollectExampleDeliveryServicePointQuoteItemReplaceStrategyPlugin | Replaces product offers in quote items that have the `delivery` shipment type with suitable product offer replacements. | | Spryker\Zed\ClickAndCollectExample\Communication\Plugin\ServicePointCart | +| ClickAndCollectExamplePickupServicePointQuoteItemReplaceStrategyPlugin | Replaces product offers in quote items that have the `pickup` shipment type with suitable product offer replacements. | | Spryker\Zed\ClickAndCollectExample\Communication\Plugin\ServicePointCart | + +**src/Pyz/Zed/ServicePointCart/ServicePointCartDependencyProvider.php** + +```php + + */ + protected function getServicePointQuoteItemReplaceStrategyPlugins(): array + { + return [ + new ClickAndCollectExampleDeliveryServicePointQuoteItemReplaceStrategyPlugin(), + new ClickAndCollectExamplePickupServicePointQuoteItemReplaceStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create two product offers with the `delivery` and `pickup` shipment types for the same product. +2. Add the product offer with `delivery` shipment type to cart. +3. Proceed to checkout. +4. Go to the Address step. +5. Choose the `pickup` shipment type. +6. Go to the next step. +7. Check that the product offer with the `delivery` type is replaced with the product offer with `pickup` type. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-service-points-cart-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-service-points-cart-feature.md new file mode 100644 index 00000000000..9c519cce93a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-service-points-cart-feature.md @@ -0,0 +1,123 @@ + + +This document describes how to install the Service Points Cart feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/service-points-cart: "{{page.release_tag}}" --update-with-dependencies +composer require spryker/service-point-carts-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------|---------------------------------------------| +| ServicePointCart | vendor/spryker/service-point-cart | +| ServicePointCartExtension | vendor/spryker/service-point-cart-extension | +| ServicePointCartPage | vendor/spryker-shop/service-point-cart-page | +| ServicePointCartsRestApi | vendor/spryker/service-point-carts-rest-api | + +{% endinfo_block %} + +## 2) Add translations + +1. Append the glossary according to your configuration: + +```csv +service_point_cart.checkout.validation.error,Selected service point "%uuid%" is not available for the store "%store_name%",en_US +service_point_cart.checkout.validation.error,Der ausgewählte Servicepunkt "%uuid%" ist für den Shop "%store_name%" nicht verfügbar,de_DE +``` + +## 3) Set up behavior + +Register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------| +| ServicePointCheckoutPreConditionPlugin | Validates if `QuoteTransfer.items.servicePoint` is active and available for the current store. | | Spryker\Zed\ServicePointCart\Communication\Plugin\Checkout | +| ReplaceServicePointQuoteItemsQuoteMapperPlugin | If shipments are provided, replaces quote items using an applicable strategy. | | Spryker\Zed\ServicePointCartsRestApi\Communication\Plugin\CheckoutRestApi | + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ServicePointCheckoutPreConditionPlugin(), + ]; + } +``` + +{% info_block warningBox "Verification" %} + +1. Add an item to cart and proceed to checkout. +2. Select a service point. +3. Deactivate the service point. +4. Proceed to the **Summary** page. + On the **Summary** page, make sure you get the validation error. + +{% endinfo_block %} + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteMapperPlugins(): array + { + return [ + new ReplaceServicePointQuoteItemsQuoteMapperPlugin() # Has to be placed before PaymentsQuoteMapperPlugin + ]; + } +``` + +{% info_block warningBox "Verification" %} + +1. Prepare two product offers for the same product: + + 1. With support for the pickup shipment type and a connection to a service point. + 2. Without support for the pickup shipment type. + +2. Using Glue API, add the product offer 2 to cart. +3. Using the `checkout-data` endpoint, select a service point for the item. + Make sure the selected service point is returned in the response. Make sure the product offer 2 has been replaced with the product offer 1. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-service-points-customer-account-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-service-points-customer-account-management-feature.md new file mode 100644 index 00000000000..d1988063b1b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-service-points-customer-account-management-feature.md @@ -0,0 +1,266 @@ + + + +This document describes how to install the Service Points + [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. + +## Prerequisites + +To start feature installation, install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +## 1) Install the required modules + +To install the the demo Click&Collect functionalities, install the module using Composer: + +```bash +composer require spryker-shop/click-and-collect-page-example: "^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|----------------------------------------------------| +| ClickAndCollectPageExample | vendor/spryker-shop/click-and-collect-page-example | + +{% endinfo_block %} + +## 2) Add translations + +1. Append the glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +service_point_widget.validation.error.service_point_not_selected,Please select service point.,en_US +service_point_widget.validation.error.service_point_not_selected,Bitte Servicestelle auswählen.,de_DE +service_point_widget.validation.error.billing_address_not_provided,Please add billing address manually.,en_US +service_point_widget.validation.error.billing_address_not_provided,Bitte fügen Sie die Rechnungsadresse manuell hinzu.,de_DE +service_point_widget.select_location_action,Select a location,en_US +service_point_widget.select_location_action,Wählen Sie einen Standort,de_DE +service_point_widget.change_action,Change,en_US +service_point_widget.change_action,Ändern,de_DE +service_point_widget.location_label,Location:,en_US +service_point_widget.location_label,Standort:,de_DE +service_point_widget.select_your_store_title,Select your store,en_US +service_point_widget.select_your_store_title,Wählen Sie Ihren Store,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +## 3) Set up behavior + +Enable the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------|--------------------------------------------------------------------| +| ClickAndCollectServiceTypeCheckoutAddressCollectionFormExpanderPlugin | Expands the `ServicePoint` subform with a pickupable service type. | | SprykerShop\Yves\ClickAndCollectPageExample\Plugin\CustomerPage | +| ClickAndCollectServiceTypeCheckoutMultiShippingAddressesFormExpanderPlugin | Expands `ServicePoint` with a pickupable service type. | | SprykerShop\Yves\ClickAndCollectPageExample\Plugin\CustomerPage | +| ServicePointCheckoutAddressCollectionFormExpanderPlugin | Expands the checkout address form with `ServicePoint`. | | SprykerShop\Yves\ServicePointWidget\Plugin\CustomerPage | +| ServicePointCheckoutMultiShippingAddressesFormExpanderPlugin | Expands the checkout multi-shipping address form with `ServicePoint`. | | SprykerShop\Yves\ServicePointWidget\Plugin\CustomerPage | +| ServicePointAddressCheckoutAddressCollectionFormExpanderPlugin | Expands shipments with the service point address. | | SprykerShop\Yves\ServicePointWidget\Plugin\CustomerPage | +| ClickAndCollectServicePointAddressFormWidgetCacheKeyGeneratorStrategyPlugin | Skips the caching of the `ClickAndCollectServicePointAddressFormWidget` widget. | | SprykerShop\Yves\ClickAndCollectPageExample\Plugin\ShopApplication | + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutAddressCollectionFormExpanderPlugins(): array + { + return [ + new ServicePointCheckoutAddressCollectionFormExpanderPlugin(), + new ServicePointAddressCheckoutAddressCollectionFormExpanderPlugin(), + new ClickAndCollectServiceTypeCheckoutAddressCollectionFormExpanderPlugin(), + ]; + } + + /** + * @return list<\SprykerShop\Yves\CustomerPageExtension\Dependency\Plugin\CheckoutMultiShippingAddressesFormExpanderPluginInterface> + */ + protected function getCheckoutMultiShippingAddressesFormExpanderPlugins(): array + { + return [ + new ServicePointCheckoutMultiShippingAddressesFormExpanderPlugin(), + new ClickAndCollectServiceTypeCheckoutMultiShippingAddressesFormExpanderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getWidgetCacheKeyGeneratorStrategyPlugins(): array + { + return [ + new ClickAndCollectServicePointAddressFormWidgetCacheKeyGeneratorStrategyPlugin(), + ]; + } +} +``` + +## 4) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------|--------------------------------------------------------------------|----------------|----------------------------------------------------| +| ClickAndCollectServicePointAddressFormWidget | Turns on service point selection during the checkout address step. | | SprykerShop\Yves\ClickAndCollectPageExample\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ClickAndCollectServicePointAddressFormWidget::class, + ]; + } +} +``` + +## 5) Set up the FE part + +Adjust TWIG templates to display the service point selector: + +1. To the `page-layout-main` template of the `ShopUi` module, add the `main-overlay` molecule: + +```twig +{% raw %}{% block globalComponents %} + .... + {% include molecule('main-overlay') with { + attributes: { + 'is-open': data.isOverlayOpen, + }, + } only %} +{% endblock %}{% endraw %} +``` + +2. In the `ShopUi` module, to the `icon-spite` atom, add the `cross` icon: + +```twig +{% raw %} + +{% endraw %} +``` + +{% info_block infoBox "The cross icon is already defined" %} + +If the `cross` icon is already defined in the project, it's not necessary to add it again. + +{% endinfo_block %} + +3. In `tsconfig.yves.json` of the `ShopUi` module, adjust the `paths` section: + +```json +{ + "compilerOptions": { + "paths": { + ... + "ServicePointWidget/*": [ + "./vendor/spryker-shop/service-point-widget/src/SprykerShop/Yves/ServicePointWidget/Theme/default/*" + ] + } + } +} +``` + +4. To the `address` view of the `CheckoutPage` module, add `ClickAndCollectServicePointAddressFormWidget`: + +```twig +{% raw %}{% widget 'ClickAndCollectServicePointAddressFormWidget' args [data.form] only %}{% endwidget %}{% endraw %} +``` + +{% info_block infoBox "Adding of ClickAndCollectServicePointAddressFormWidget is automated" %} + +If you are using `ShipmentTypeAddressFormWidget`, `ClickAndCollectServicePointAddressFormWidget` is added automatically. + +{% endinfo_block %} + +5. Optional: For a multi-shipment, to the `address-item-form-field-list` molecule of the `CheckoutPage` module, add `ClickAndCollectServicePointAddressFormWidget`: + +```twig +{% raw %}{% widget 'ClickAndCollectServicePointAddressFormWidget' args [item] only %}{% endwidget %}{% endraw %} +``` + +{% info_block infoBox "Adding of ClickAndCollectServicePointAddressFormWidget is automated" %} + +If using the `ShipmentTypeAddressFormWidget` widget, the `ClickAndCollectServicePointAddressFormWidget` is added automatically. Therefore, you don't need to add it manually. + +{% endinfo_block %} + +6. Build assets: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered: + +| MODULE | TEST | +|----------------------------------------------|----------------------------------------------------------------------------------| +| ClickAndCollectServicePointAddressFormWidget | Go to the address checkout step and make sure you can select a service point. | + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-service-points-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-service-points-feature.md new file mode 100644 index 00000000000..8480480ac06 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-service-points-feature.md @@ -0,0 +1,1699 @@ + + +This document describes how to install the Service Points feature. + +## Install feature core + +Follow the steps below to install the Service Points feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/service-points: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------|------------------------------------------------| +| ServicePoint | vendor/spryker/service-point | +| ServicePointDataImport | vendor/spryker/service-point-data-import | +| ServicePointsBackendApi | vendor/spryker/service-points-backend-api | +| ServicePointSearch | vendor/spryker/service-point-search | +| ServicePointsRestApi | vendor/spryker/service-points-rest-api | +| ServicePointStorage | vendor/spryker/service-point-storage | +| ServicePointWidget | vendor/spryker/service-point-widget | +| SalesServicePoint | vendor/spryker/sales-service-point | +| SalesServicePointGui | vendor/spryker/sales-service-point-gui | +| SalesServicePointWidget | vendor/spryker-shop/sales-service-point-widget | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|---------------------------|-------------------------------------------------------------------------------------------------------------------------------| +| spy_service_point | Entity.spy_service_point.create
    Entity.spy_service_point.update
    Entity.spy_service_point.delete | +| spy_service_point_address | Entity.spy_service_point_address.create
    Entity.spy_service_point_address.update
    Entity.spy_service_point_address.delete | +| spy_service_point_store | Entity.spy_service_point_store.create
    Entity.spy_service_point_store.update
    Entity.spy_service_point_store.delete | +| spy_service_type | Entity.spy_service_type.create
    Entity.spy_service_type.update
    Entity.spy_service_type.delete | + +**src/Pyz/Zed/ServicePoint/Persistence/Propel/Schema/spy_service_point.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    + +
    +``` + +2. Apply database changes and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:entity:generate +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been applied to the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------|--------|---------| +| spy_service_point | table | created | +| spy_service_point_address | table | created | +| spy_service | table | created | +| spy_service_point_store | table | created | +| spy_service_point_search | table | created | +| spy_service_point_storage | table | created | +| spy_service_type | table | created | +| spy_region.uuid | column | created | +| spy_sales_order_item_service_point | table | created | + +- Make sure propel entities have been generated successfully by checking their existence. +- Make sure the existing Propel classes have been extended to include the new added columns. + +| CLASS NAMESPACE | EXTENDS | +|---------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| \Orm\Zed\ServicePoint\Persistence\SpyServicePoint | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePoint | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddress | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddress | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddressQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddressQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyService | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyService | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointAddressQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointAddressQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointStore | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointStore | +| \Orm\Zed\ServicePoint\Persistence\SpyServicePointStoreQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServicePointStoreQuery | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceType | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceType | +| \Orm\Zed\ServicePoint\Persistence\SpyServiceTypeQuery | \Spryker\Zed\ServicePoint\Persistence\Propel\AbstractSpyServiceTypeQuery | +| \Orm\Zed\ServicePointSearch\Persistence\SpyServicePointSearch | \Spryker\Zed\ServicePointSearch\Persistence\Propel\AbstractSpyServicePointSearch | +| \Orm\Zed\ServicePointSearch\Persistence\SpyServicePointSearchQuery | \Spryker\Zed\ServicePointSearch\Persistence\Propel\AbstractSpyServicePointSearchQuery | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServicePointStorage | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServicePointStorage | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServicePointStorageQuery | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServicePointStorageQuery | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServiceTypeStorage | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServiceTypeStorage | +| \Orm\Zed\ServicePointStorage\Persistence\SpyServiceTypeStorageQuery | \Spryker\Zed\ServicePointStorage\Persistence\Propel\AbstractSpyServiceTypeStorageQuery | +| \Orm\Zed\SalesServicePoint\Persistence\SpySalesOrderItemServicePoint | \Spryker\Zed\SalesServicePoint\Persistence\Propel\AbstractSpySalesOrderItemServicePoint | +| \Orm\Zed\SalesServicePoint\Persistence\SpySalesOrderItemServicePointQuery | \Spryker\Zed\SalesServicePoint\Persistence\Propel\AbstractSpySalesOrderItemServicePointQuery | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------|-------|---------|---------------------------------------------------------------------------------| +| ServicePoint | class | created | src/Generated/Shared/Transfer/ServicePointTransfer | +| ServicePointCollection | class | created | src/Generated/Shared/Transfer/ServicePointCollectionTransfer | +| ServicePointCollectionRequest | class | created | src/Generated/Shared/Transfer/ServicePointCollectionRequestTransfer | +| ServicePointCollectionResponse | class | created | src/Generated/Shared/Transfer/ServicePointCollectionResponseTransfer | +| ServicePointCriteria | class | created | src/Generated/Shared/Transfer/ServicePointCriteriaTransfer | +| ServicePointConditions | class | created | src/Generated/Shared/Transfer/ServicePointConditionsTransfer | +| ServicePointSearchConditions | class | created | src/Generated/Shared/Transfer/ServicePointSearchConditions | +| ServicePointsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicePointsBackendApiAttributesTransfer | +| ServiceTypesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServiceTypesBackendApiAttributesTransfer | +| ServicesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicesBackendApiAttributesTransfer | +| ServicesRequestBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicesRequestBackendApiAttributesTransfer | +| ServicePointAddressesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/ServicePointAddressesBackendApiAttributesTransfer | +| StoreRelation | class | created | src/Generated/Shared/Transfer/StoreRelationTransfer | +| Store | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| Error | class | created | src/Generated/Shared/Transfer/ErrorTransfer | +| Sort | class | created | src/Generated/Shared/Transfer/SortTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| ErrorCollection | class | created | src/Generated/Shared/Transfer/ErrorCollectionTransfer | +| DataImporterConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReport | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| CountryCriteria | class | created | src/Generated/Shared/Transfer/CountryCriteriaTransfer | +| CountryConditions | class | created | src/Generated/Shared/Transfer/CountryConditionsTransfer | +| Country | class | created | src/Generated/Shared/Transfer/CountryTransfer | +| CountryCollection | class | created | src/Generated/Shared/Transfer/CountryCollectionTransfer | +| Region | class | created | src/Generated/Shared/Transfer/RegionTransfer | +| ServicePointAddressCollection | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionTransfer | +| ServicePointAddressCollectionRequest | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionRequestTransfer | +| ServicePointAddressCollectionResponse | class | created | src/Generated/Shared/Transfer/ServicePointAddressCollectionResponseTransfer | +| ServicePointAddressCriteria | class | created | src/Generated/Shared/Transfer/ServicePointAddressCriteriaTransfer | +| ServicePointAddressConditions | class | created | src/Generated/Shared/Transfer/ServicePointAddressConditionsTransfer | +| ServicePointAddress | class | created | src/Generated/Shared/Transfer/ServicePointAddressTransfer | +| GlueRelationship | class | created | src/Generated/Shared/Transfer/GlueRelationshipTransfer | +| ServicePointSearchCollection | class | created | src/Generated/Shared/Transfer/ServicePointSearchCollectionTransfer | +| ServicePointSearch | class | created | src/Generated/Shared/Transfer/ServicePointSearchTransfer | +| ServicePointSearchRequest | class | created | src/Generated/Shared/Transfer/ServicePointSearchRequestTransfer | +| ServiceCollectionRequest | class | created | src/Generated/Shared/Transfer/ServiceCollectionRequestTransfer | +| ServiceCollectionResponse | class | created | src/Generated/Shared/Transfer/ServiceCollectionResponseTransfer | +| ServiceCollection | class | created | src/Generated/Shared/Transfer/ServiceCollectionTransfer | +| ServiceConditions | class | created | src/Generated/Shared/Transfer/ServiceConditionsTransfer | +| ServiceCriteria | class | created | src/Generated/Shared/Transfer/ServiceCriteriaTransfer | +| Service | class | created | src/Generated/Shared/Transfer/ServiceTransfer | +| ServiceTypeCollectionRequest | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionRequestTransfer | +| ServiceTypeCollectionResponse | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionResponseTransfer | +| ServiceTypeCollection | class | created | src/Generated/Shared/Transfer/ServiceTypeCollectionTransfer | +| ServiceTypeConditions | class | created | src/Generated/Shared/Transfer/ServiceTypeConditionsTransfer | +| ServiceTypeCriteria | class | created | src/Generated/Shared/Transfer/ServiceTypeCriteriaTransfer | +| ServiceType | class | created | src/Generated/Shared/Transfer/ServiceTypeTransfer | +| ServicePointStorage | class | created | src/Generated/Shared/Transfer/ServicePointStorageTransfer | +| ServicePointAddressStorage | class | created | src/Generated/Shared/Transfer/ServicePointAddressStorageTransfer | +| ServiceStorage | class | created | src/Generated/Shared/Transfer/ServiceStorageTransfer | +| CountryStorage | class | created | src/Generated/Shared/Transfer/CountryStorageTransfer | +| RegionStorage | class | created | src/Generated/Shared/Transfer/RegionStorageTransfer | +| ServicePointStorageCollection | class | created | src/Generated/Shared/Transfer/ServicePointStorageCollectionTransfer | +| ServicePointStorageCriteria | class | created | src/Generated/Shared/Transfer/ServicePointStorageCriteriaTransfer | +| ServicePointStorageConditions | class | created | src/Generated/Shared/Transfer/ServicePointStorageConditionsTransfer | +| SynchronizationData | class | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Filter | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| SalesOrderItemServicePoint | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| Item | class | created | src/Generated/Shared/Transfer/FilterTransfer | +| SalesOrderItemServicePointCriteria | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointCriteria | +| SalesOrderItemServicePointConditions | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointConditions | +| SalesOrderItemServicePointCollection | class | created | src/Generated/Shared/Transfer/SalesOrderItemServicePointCollection | +| Quote | class | created | src/Generated/Shared/Transfer/QuoteTransfer | +| SaveOrder | class | created | src/Generated/Shared/Transfer/SaveOrderTransfer | +| ShipmentGroup | class | created | src/Generated/Shared/Transfer/ShipmentGroupTransfer | +| RestServicePointsAttributes | class | created | src/Generated/Shared/Transfer/RestServicePointsAttributesTransfer | +| RestServicePointAddressesAttributes | class | created | src/Generated/Shared/Transfer/RestServicePointAddressesAttributesTransfer | +| RestErrorMessage | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +To make the `service-points`, `service-point-addresses`, `services`, and `service-types` resources protected, adjust the protected paths configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + // ... + '/\/service-points.*/' => [ + 'isRegularExpression' => true, + ], + '/\/services.*/' => [ + 'isRegularExpression' => true, + ], + '/\/service-types.*/' => [ + 'isRegularExpression' => true, + ], + ]; + } +} +``` + +### 4) Import service points + +1. Prepare the data according to your requirements using our demo data: + +**data/import/common/common/service_point.csv** + +```csv +key,name,is_active +sp1,Spryker Main Store,1 +sp2,Spryker Berlin Store,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|-----------|-----------|--------------------|-----------------------------------------| +| key | ✓ | string | sp1 | Unique key of the service point. | +| name | ✓ | string | Spryker Main Store | Name of the service point. | +| is_active | ✓ | bool | 0 | Defines if the service point is active. | + +**data/import/common/{store}/service_point_store.csv** + +```csv +service_point_key,store_name +sp1,DE +sp2,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|--------------|-----------------------------------------| +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| store_name | ✓ | string | DE | Store relation for the service point. | + +**data/import/common/common/service_point_address.csv** + +```csv +service_point_key,region_iso2_code,country_iso2_code,address1,address2,address3,city,zip_code +sp1,,DE,Caroline-Michaelis-Straße,8,,Berlin,10115 +sp2,,DE,Julie-Wolfthorn-Straße,1,,Berlin,10115 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|---------------------------|----------------------------------| +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| region_iso2_code | | string | DE-BE | Region ISO2 code. | +| country_iso2_code | ✓ | string | DE | Country ISO2 code. | +| address1 | ✓ | string | Caroline-Michaelis-Straße | First line of address. | +| address2 | ✓ | string | 8a | Second line of address. | +| address3 | | string | 12/1 | Third line of address. | +| city | ✓ | string | Berlin | City. | +| zip_code | ✓ | string | 10115 | Zip code. | + +**data/import/common/common/service_type.csv** + +```csv +name,key +Pickup,pickup +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------|-----------|-----------|--------------|-----------------------------------| +| name | ✓ | string | Pickup | Unique key of the service type. | +| key | ✓ | string | pickup | Unique name of the service type. | + +**data/import/common/common/service.csv** + +```csv +key,service_point_key,service_type_key,is_active +s1,sp1,pickup,1 +s2,sp2,pickup,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|-------------------|-----------------------------------| +| key | ✓ | string | sps1 | Unique key of the service. | +| service_point_key | ✓ | string | sp1 | Unique key of the service point. | +| service_type_key | ✓ | string | pickup | Unique key of the service type. | +| is_active | ✓ | bool | 0 | Defines if the service is active. | + +2. Enable the data imports per your configuration file—for example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: service-point + source: data/import/common/common/service_point.csv + - data_entity: service-point-store + source: data/import/common/{store}/service_point_store.csv + - data_entity: service-point-address + source: data/import/common/common/service_point_address.csv + - data_entity: service-type + source: data/import/common/common/service_type.csv + - data_entity: service + source: data/import/common/common/service.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|---------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| ServicePointDataImportPlugin | Imports service points into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServicePointStoreDataImportPlugin | Imports service point store relations into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServicePointAddressDataImportPlugin | Imports service point addresses into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServiceTypeDataImportPlugin | Imports service types into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | +| ServiceDataImportPlugin | Imports services into the database. | | \Spryker\Zed\ServicePointDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ServicePointDataImportPlugin(), + new ServicePointStoreDataImportPlugin(), + new ServicePointAddressDataImportPlugin(), + new ServiceTypeDataImportPlugin(), + new ServiceDataImportPlugin(), + ]; + } +} +``` + +4. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_POINT_ADDRESS), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE_TYPE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ServicePointDataImportConfig::IMPORT_TYPE_SERVICE), + ]; + + return $commands; + } +} +``` + +5. Import data: + +```bash +console data:import service-point +console data:import service-point-address +console data:import:service +console data:import service-point-store +console data:import:service-type +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_service_point` +- `spy_service_point_store` +- `spy_service_point_address` +- `spy_service_type` +- `spy_service` + +{% endinfo_block %} + +### 5) Add translations + +1. Append the glossary according to your configuration: + +
    + Glossary +```csv +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +### 5) Configure export to Elasticsearch + +1. In `SearchElasticsearchConfig`, adjust the Elasicsearch config: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + protected function getQueueConfiguration(): array + { + return [ + ServicePointSearchConfig::QUEUE_NAME_SYNC_SEARCH_SERVICE_POINT, + ]; + } +} +``` + +4. Register the new queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ServicePointSearchConfig::QUEUE_NAME_SYNC_SEARCH_SERVICE_POINT => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +5. Configure the synchronization pool: + +**src/Pyz/Zed/ServicePointSearch/ServicePointSearchConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ServicePointSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ServicePointPublisherTriggerPlugin(), + ]; + } +} +``` + +#### Register publisher plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|-----------------------------------------------------------|---------------|-----------------------------------------------------------------------------------| +| ServicePointWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePoint | +| ServicePointDeletePublisherPlugin | Listens for events and unpublishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePoint | +| ServicePointAddressWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePointAddress | +| ServicePointStoreWritePublisherPlugin | Listens for events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\ServicePointStore | +| ServiceWritePublisherPlugin | Listens for service events and publishes respective data. | | Spryker\Zed\ServicePointSearch\Communication\Plugin\Publisher\Service | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return [ + new ServicePointWritePublisherPlugin(), + new ServicePointDeletePublisherPlugin(), + new ServicePointAddressWritePublisherPlugin(), + new ServicePointStoreWritePublisherPlugin(), + new ServiceWritePublisherPlugin(), + ]; + } +} +``` + +#### Register query expander and result formatter plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointSearchResultFormatterPlugin | Maps raw Elasticsearch results to a transfer. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\ResultFormatter | +| SortedServicePointSearchQueryExpanderPlugin | Adds sorting to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| PaginatedServicePointSearchQueryExpanderPlugin | Adds pagination to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| StoreServicePointSearchQueryExpanderPlugin | Adds filtering by locale to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| ServiceTypesServicePointSearchQueryExpanderPlugin | Adds filtering by service types to a search query. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | +| ServicePointAddressRelationExcludeServicePointQueryExpanderPlugin | Excludes the service point address relation from a query if the `excludeAddressRelation` request parameter is provided. | | Spryker\Client\ServicePointSearch\Plugin\Elasticsearch\Query | + +**src/Pyz/Client/ServicePointSearch/ServicePointSearchDependencyProvider.php** + +```php + + */ + protected function getServicePointSearchResultFormatterPlugins(): array + { + return [ + new ServicePointSearchResultFormatterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getServicePointSearchQueryExpanderPlugins(): array + { + return [ + new StoreServicePointSearchQueryExpanderPlugin(), + new SortedServicePointSearchQueryExpanderPlugin(), + new PaginatedServicePointSearchQueryExpanderPlugin(), + new ServiceTypesServicePointSearchQueryExpanderPlugin(), + new ServicePointAddressRelationExcludeServicePointQueryExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Fill the `spy_service_point` table with some data and run `console publish:trigger-events -r service_point`. + - Make sure the `spy_service_point_search` table is filled with respective data per store. + - Make sure, in Elasticearch documents, data is structured in the following format: + +```yaml +{ + "store":"DE", + "type":"service_point", + "search-result-data":{ + "idServicePoint":123, + "uuid":"40320bdf-c2af-4dd8-8d09-4550ece4287d", + "name":"Service Point Name #1", + "key":"service-point-name-1", + "address":{ + "idServicePointAddress":44, + "uuid":"2f02b327-0165-46ea-88df-0190d9a1c242", + "address1":"Seeburger Str.", + "address2":"270", + "address3":"Block B", + "city":"Berlin", + "zipCode":"10115", + "country":{ + "iso2Code":"DE", + "name":"Germany" + }, + "region":{ + "name":"Saxony" + } + } + }, + "full-text-boosted":[ + "Service Point Name #1" + ], + "full-text":[ + "Service Point Name #1", + "Seeburger Str. 270 Block B", + "Berlin", + "10115", + "Germany", + "Saxony" + ], + "suggestion-terms":[ + "Service Point Name #1" + ], + "completion-terms":[ + "Service Point Name #1" + ], + "string-sort":{ + "city":"Berlin" + } +} +``` + +1. In the `spy_service_point_search` table, change some records and run `console sync:data service_point`. + Make sure your changes have been synced to the respective Elasticsearch document. + +{% endinfo_block %} + +### 6) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published and synced to the Storage on create, edit, and delete changes: + +1. In `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`, adjust the `RabbitMq` module's configuration: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_SERVICE_POINT, + ]; + } +} +``` + +2. Register the queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ServicePointStorageConfig::QUEUE_NAME_SYNC_STORAGE_SERVICE_POINT => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +3. Configure the synchronization pool and event queue name: + +**src/Pyz/Zed/ServicePointStorage/ServicePointStorageConfig.php** + +```php +getServicePointStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ServicePointStoragePublisherTriggerPlugin(), + new ServiceTypePublisherTriggerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getServicePointStoragePlugins(): array + { + return [ + new ServicePointStorageWritePublisherPlugin(), + new ServicePointStorageAddressWritePublisherPlugin(), + new ServicePointStorageStoreWritePublisherPlugin(), + new ServicePointStorageServiceWritePublisherPlugin(), + new ServiceTypeWritePublisherPlugin(), + ]; + } +} +``` + +5. Set up the synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|--------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| ServicePointSynchronizationDataBulkRepositoryPlugin | Synchronizes the content of the service point storage table into the key-value store (Redis or Valkey). | | Spryker\Zed\ServicePointStorage\Communication\Plugin\Synchronization | +| ServiceTypeSynchronizationDataBulkRepositoryPlugin | Synchronizes the content of the service type storage table into the key-value store (Redis or Valkey). | | Spryker\Zed\ServicePointStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ServicePointStorageSynchronizationDataBulkRepositoryPlugin(), + new ServiceTypeSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the `service-point` trigger plugin works correctly: + +1. Fill the `spy_service_point`, `spy_service_point_store`, and `spy_servoce_point_address` tables with data. +2. Run the `console publish:trigger-events -r service_point` command. +- Make sure the `spy_service_point_storage` table has been filled with respective data. +- Make sure storage entries are now displayed with the `kv:service_point:{store}:{service_point_id}` mask. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `service-point` synchronization plugin works correctly: + +1. Fill the `spy_service_point_storage` table with some data. +2. Run the `console sync:data -r service_point` command. + Make sure storage entries are now displayed with the `kv:service_point:{store}:{service_point_id}` mask. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Make sure that, when a service point is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +- Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: + +```yaml +{ + "id_service_point": 1, + "uuid": "262feb9d-33a7-5c55-9b04-45b1fd22067e", + "name": "Spryker Main Store", + "key": "sp1", + "is_active": true, + "address": { + "id_service_point_address": 1, + "uuid": "74768ee9-e7dd-5e3c-bafd-b654e7946c54", + "address1": "Caroline-Michaelis-Stra\u00dfe", + "address2": "8", + "address3": null, + "zip_code": "10115", + "city": "Berlin", + "country": { + "iso2_code": "DE", + "id_country": 60 + }, + "region": { + "uuid": "2f02b327-0165-46ea-88df-0190d9a1c242", + "id_region": 1, + "name": "Berlin" + } + }, + "services": {[ + { + "idService": 1, + "uuid": "f34c6ee7-8c73-4542-a621-846d91fafa56", + "key": "s1", + "serviceType": "pickup" + }, + { + "idService": 2, + "uuid": "b516a972-59cf-41d5-9f91-ef1011179b60", + "key": "s2", + "serviceType": "delivery" + } + ]}, + "_timestamp": 1683216744.8334839 +} +``` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `service-type` trigger plugin works correctly: + +1. Fill the `spy_service_type` table with data. +2. Run the `console publish:trigger-events -r service_type` command. +- Make sure the `spy_service_type_storage` table has been filled with respective data. +- Make sure storage entries are now displayed with the `kv:service_type:{service_type_id}` mask. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Verify the `service-type` synchronization plugin works correctly: + +1. Fill the `spy_service_type_storage` table with some data. +2. Run the `console sync:data -r service_type` command. + Make sure storage entries are now displayed with the `kv:service_type:{service_type_id}` mask. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +- Make sure that when a service type is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +- Make sure that, in the key-value store (Redis or Valkey), data is displayed in the following format: + +```json +{ + "id_service_type": 1, + "uuid": "2370ad95-4e9f-5ac3-913e-300c5805b181", + "name": "Pickup", + "key": "pickup", + "_timestamp": 1692352890.0729749 +} +``` + +{% endinfo_block %} + +### 7) Set up behavior + +1. To enable the Backend API, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointsBackendResourcePlugin | Registers the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplication | +| ServicePointAddressesBackendResourcePlugin | Registers the `service-point-addresses` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplication | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new ServicePointsBackendResourcePlugin(), + new ServicePointAddressesBackendResourcePlugin(), + new ServiceTypesBackendResourcePlugin(), + new ServicesBackendResourcePlugin(), + ]; + } +} + +``` + +2. To enable the Backend API relationships, register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------------------------| +| ServicePointAddressesByServicePointsBackendResourceRelationshipPlugin | Adds the `service-point-addresses` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServicesByServicePointsBackendResourceRelationshipPlugin | Adds the `services` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServicePointsByServicesBackendResourceRelationshipPlugin | Adds the `service-points` relationship to the `services` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ServiceTypesByServicesBackendResourceRelationshipPlugin | Adds the `service-types` relationship to the `services` resource. | | \Spryker\Glue\ServicePointsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICE_POINTS, + new ServicePointAddressesByServicePointsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICE_POINTS, + new ServicesByServicePointsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICES, + new ServicePointsByServicesBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ServicePointsBackendApiConfig::RESOURCE_SERVICES, + new ServiceTypesByServicesBackendResourceRelationshipPlugin(), + ); + + ... + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can send the following requests: + +- `POST https://glue-backend.mysprykershop.com/service-points` + + ```json + { + "data": { + "type": "service-points", + "attributes": { + "name": "Some Service Point", + "key": "ssp", + "isActive": "true", + "stores": ["DE", "AT"] + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-points", + "attributes": { + "name": "Another Name" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/service-points/` +- `GET https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + + ```json + { + "data": { + "type": "service-point-address", + "attributes": { + "address1": "address1", + "address2": "address2", + "address3": "address3", + "city": "city", + "zipCode": "10115", + "countryIso2Code": "DE" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses/{% raw %}{{service-point-address-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-point-address", + "attributes": { + "address1": "another address1", + "address2": "another address2", + "address3": "another address3", + "city": "another city", + "zipCode": "20115", + "countryIso2Code": "AT" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + +- `GET https://glue-backend.mysprykershop.com/service-types/` +- `GET https://glue-backend.mysprykershop.com/service-types/{% raw %}{{service-type-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/service-types/` + + ```json + { + "data": { + "type": "service-types", + "attributes": { + "name": "ServiceType", + "key": "st-4" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/service-types/{% raw %}{{service-type-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "service-types", + "attributes": { + "name": "ServiceType" + } + } + } + ``` + +- `GET https://glue-backend.mysprykershop.com/services/` +- `GET https://glue-backend.mysprykershop.com/services/{% raw %}{{service-uuid}}{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/services/` + + ```json + { + "data": { + "type": "services", + "attributes": { + "isActive": false, + "key": 123, + "servicePointUuid": "{% raw %}{{service-point-uuid}}{% endraw %}", + "serviceTypeUuid": "{% raw %}{{service-type-uuid}}{% endraw %}" + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/services/{% raw %}{{service-uuid}}{% endraw %}` + + ```json + { + "data": { + "type": "services", + "attributes": { + "isActive": true + } + } + } + ``` + +{% endinfo_block %} + +3. To enable the Storefront API, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------|---------------|-----------------------------------------------------------| +| ServicePointsResourceRoutePlugin | Registers the `service-points` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | +| ServicePointAddressesResourceRoutePlugin | Registers the `service-point-addresses` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ServicePointsResourceRoutePlugin(), + new ServicePointAddressesResourceRoutePlugin(), + ]; + } +} +``` + +4. To enable the Storefront API relationships, register the plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|-----------------------------------------------------------------------------------|---------------|-----------------------------------------------------------| +| ServicePointAddressesByServicePointUuidResourceRelationshipPlugin | Adds the `service-point-addresses` relationship to the `service-points` resource. | | \Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ServicePointsRestApiConfig::RESOURCE_SERVICE_POINTS, + new ServicePointAddressesByServicePointUuidResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can send the following requests: + +- `GET https://glue.mysprykershop.com/service-points` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}/service-point-addresses` + +Make sure that you can include the `service-point-addresses` resource in the `service-points` resource requests. +- `GET https://glue.mysprykershop.com/service-points?include=service-point-addresses` +- `GET https://glue.mysprykershop.com/service-points/{% raw %}{{service-point-uuid}}{% endraw %}?include=service-point-addresses` + +{% endinfo_block %} + +### 8) Set up the reorder process + +1. To enable reorder to work with service points, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------------|---------------|------------------------------------------------------------------------| +| ServicePointReorderItemSanitizerPlugin | Cleans up service point data during the reorder process. | | \SprykerShop\Yves\SalesServicePointWidget\Plugin\CustomerReorderWidget | + +**src/Pyz/Yves/CustomerReorderWidget/CustomerReorderWidgetDependencyProvider.php** + +```php + + */ + protected function getReorderItemSanitizerPlugins(): array + { + return [ + new ServicePointReorderItemSanitizerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure sales service points are empty for order items during the reorder process. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Service Points feature frontend. + +### 1) Add translations + +1. Append the glossary: + +```csv +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +### 2) Set up configuration + +Add the following configuration: + +1. Disable service points to be selected for product bundles during checkout: + +|CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------|----------------------------------------------------------|-----------------------------| +| ServicePointWidgetConfig::getNotApplicableServicePointAddressStepFormItemPropertiesForHydration() | Defines the list of properties in an `ItemTransfer` that are not intended for form hydration. | Pyz\Yves\ServicePointWidget | +| ProductBundleConfig::getAllowedBundleItemFieldsToCopy() | Defines the list of allowed fields to be copied from a source bundle item to destination bundled items. | Pyz\Zed\ProductBundle | + +**src/Pyz/Yves/ServicePointWidget/ServicePointWidgetConfig.php** + +```php + + */ + public function getNotApplicableServicePointAddressStepFormItemPropertiesForHydration(): array + { + return [ + ItemTransfer::BUNDLE_ITEM_IDENTIFIER, + ItemTransfer::RELATED_BUNDLE_ITEM_IDENTIFIER, + ]; + } +} +``` + +**src/Pyz/Zed/ProductBundle/ProductBundleConfig.php** + +```php + + */ + public function getAllowedBundleItemFieldsToCopy(): array + { + return [ + ItemTransfer::SHIPMENT, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure service points can't be selected for product bundles on the checkout address step. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route providers on the Storefront: + +| PROVIDER | NAMESPACE | +|---------------------------------------|---------------------------------------------------| +| ServicePointWidgetRouteProviderPlugin | SprykerShop\Yves\ServicePointWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + $routeProviders = [ + new ServicePointWidgetRouteProviderPlugin(), + ]; + + return $routeProviders; + } +} +``` + +### 4) Set up widgets + +1. To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------------------------------|---------------|--------------------------------------------| +| ServicePointSearchWidget | Enables customers to search and sort service points. | | SprykerShop\Yves\ServicePointWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ServicePointSearchWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +|--------------------------|-----------------------------------------------------------------| +| ServicePointSearchWidget | `{% raw %}{%{% endraw %} widget 'ServicePointSearchWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %}` | + +Make sure that, during checkout, you can select a service point for the order items. + +{% endinfo_block %} + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` diff --git a/_includes/pbc/all/install-features/202602.0/install-the-service-points-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-service-points-order-management-feature.md new file mode 100644 index 00000000000..8f076d7c7db --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-service-points-order-management-feature.md @@ -0,0 +1,328 @@ + + +This document describes how to install the Service Points + [Order Management](/docs/pbc/all/order-management-system/latest/base-shop/order-management-feature-overview/order-management-feature-overview.html) feature. + +## Install feature core + +Follow the steps below to install the Service Points + Order Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | + +### Set up behavior + +1. Register the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------| +| ServicePointOrderItemExpanderPlugin | Expands sales order items with a related service point. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales\ServicePointOrderItemExpanderPlugin | +| ServicePointOrderItemsPostSavePlugin | Persists service point information for sales order items. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales\ServicePointOrderItemsPostSavePlugin | +| ServicePointCheckoutDataExpanderPlugin | Expands `RestCheckoutDataTransfer` with extracted service points. | | Spryker\Zed\ServicePointsRestApi\Communication\Plugin\CheckoutRestApi | +| ServicePointQuoteMapperPlugin | Maps the rest checkout request data of service points to a quote transfer. | | Spryker\Zed\SalesServicePoint\Communication\Plugin\Sales\ServicePointOrderItemsPostSavePlugin | +| ServicePointsByCheckoutDataResourceRelationshipPlugin | Adds the `service-points` resources as a relationship to the `checkout-data` resources. | | Spryker\Glue\ServicePointsRestApi\Plugin\GlueApplication | +| ServicePointCheckoutDataResponseMapperPlugin | Maps service points from `RestCheckoutDataTransfer` to `RestCheckoutDataResponseAttributesTransfers` | | Spryker\Glue\ServicePointsRestApi\Plugin\CheckoutRestApi | +| ServicePointCheckoutRequestAttributesValidatorPlugin | Validates service points in `RestCheckoutRequestAttributesTransfer`. | | Spryker\Glue\ServicePointsRestApi\Plugin\CheckoutRestApi | + + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new ServicePointOrderItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new ServicePointOrderItemsPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Add a product offer with the service point shipment type to cart. + +2. Place the order. + +3. Check that the `spy_sales_order_item_service_point` database table contains a record with the product and the selected service point. + +{% endinfo_block %} + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + CheckoutRestApiConfig::RESOURCE_CHECKOUT_DATA, + new ServicePointsByCheckoutDataResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getCheckoutRequestAttributesValidatorPlugins(): array + { + return [ + new ServicePointCheckoutRequestAttributesValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\CheckoutRestApiExtension\Dependency\Plugin\CheckoutDataResponseMapperPluginInterface> + */ + protected function getCheckoutDataResponseMapperPlugins(): array + { + return [ + new ServicePointCheckoutDataResponseMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteMapperPlugins(): array + { + return [ + new ServicePointQuoteMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CheckoutRestApiExtension\Dependency\Plugin\CheckoutDataExpanderPluginInterface> + */ + protected function getCheckoutDataExpanderPlugins(): array + { + return [ + new ServicePointCheckoutDataExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the `checkout-data` Glue API endpoint supports service points: + +1. Add a product offer with a service point relation to cart: + +`POST https://glue.mysprykershop.com/checkout-data` +
    + Request body example +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "Cart ID", + "servicePoints": [{ + "idServicePoint": "Service Point ID", + "items": [ + "Item Group Key" + ] + }] + } + } +} +``` +
    + +Make sure you receive a valid response: + +
    + Response body example +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "selectedServicePoints": [ + { + "idServicePoint": "Service Point ID", + "items": [ + "Item Group Key" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data" + } + } +} +``` +
    + +2. Repeat the previous steps but specify a non-existing or inactive service point ID. + Make sure the response contains the corresponding error. +3. Repeat step 1 but do not specify `data.attributes.servicePoints.idServicePoint` or `data.attributes.servicePoints.items`. + Make sure the response contains the corresponding error. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify the `checkout` Glue API endpoint supports service points: + +1. Add a product offer with a service point relation to cart. +- `POST https://glue.mysprykershop.com/checkout` +
    + Request body example +```json +{ + "data": { + "type": "checkout", + "attributes": { + // Other Checkout attributes + "servicePoints": [{ + "idServicePoint": "Service Point ID", + "items": [ + "Item Group Key" + ] + }] + } + } +} +``` +
    + + Make sure the response status is 201 and the `spy_sales_order_item_service_point` database table contains the record with the selected service point. + +2. Repeat the previous steps but specify a non-existing or inactive service point ID. + Make sure the response contains the corresponding error. + +3. Repeat step 1 but do not specify `data.attributes.servicePoints.idServicePoint` or `data.attributes.servicePoints.items`. + Make sure the response contains the corresponding error. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Service Points + Order Management feature frontend. + +### Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------|-------------------------------------------------------------|---------------|-------------------------------------------------| +| SalesServicePointNameForShipmentGroupWidget | Displays service points in orders on the Storefront. | | SprykerShop\Yves\SalesServicePointWidget\Widget | +| ServicePointNameForShipmentGroupWidget | Displays service points per shipment group on the Storefront. | | SprykerShop\Yves\ServicePointWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SalesServicePointNameForShipmentGroupWidget::class, + ServicePointNameForShipmentGroupWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Add the widget to a Twig template: + +```twig +{% raw %}{%{% endraw %} widget 'SalesServicePointNameForShipmentGroupWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} widget 'ServicePointNameForShipmentGroupWidget' args [...] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} +``` + +Make sure that, in orders with service points, service points are displayed during checkout and in the order details. + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-shared-carts-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-shared-carts-feature.md new file mode 100644 index 00000000000..6d36070eb14 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-shared-carts-feature.md @@ -0,0 +1,769 @@ + + +## Install feature core + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +|---|---| +|Cart| {{page.release_tag}} | +|Persistent Cart | {{page.release_tag}} | +|Multiple Carts| {{page.release_tag}} | +|Company Account| {{page.release_tag}} | +|Spryker Core| {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/shared-carts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| SharedCart | vendor/spryker/shared-cart | +| SharedCartDataImport | vendor/spryker/shared-cart-data-import | + +{% endinfo_block %} + +### 2) Set up the database schema + +Run the following commands to apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_quote_company_user | table | created | +| spy_quote_permission_group | table | created | +| spy_quote_permission_group_to_permission | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| QuoteResponseTransfer.sharedCustomerQuotes | column | added | src/Generated/Shared/Transfer/QuoteResponseTransfer | +| QuoteTransfer.shareDetails | column | added | src/Generated/Shared/Transfer/QuoteTransfer | +| QuoteUpdateRequestAttributesTransfer.shareDetails | column | added | src/Generated/Shared/Transfer/QuoteUpdateRequestAttributesTransfer | +| ShareDetailTransfer | Class | created | src/Generated/Shared/Transfer/ShareDetailTransfer | +| ShareDetailCollectionTransfer | Class | created | src/Generated/Shared/Transfer/ShareDetailCollectionTransfer | +| QuotePermissionGroupTransfer | Class | created | src/Generated/Shared/Transfer/QuotePermissionGroupTransfer | +| QuotePermissionGroupCriteriaFilterTransfer | Class | created | src/Generated/Shared/Transfer/QuotePermissionGroupCriteriaFilterTransfer | +| QuotePermissionGroupResponseTransfer | Class | created | src/Generated/Shared/Transfer/QuotePermissionGroupResponseTransfer | +| ShareCartRequestTransfer | Class | created | src/Generated/Shared/Transfer/ShareCartRequestTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Glossary keys for flash messages: + +**src/data/import/glossary.csv** + +```yaml +shared_cart.share.error.already_exist,Cart was already shared with this customer,en_US +shared_cart.share.error.already_exist,Der Warenkorb wurde bereits mit diesem Kunden geteilt,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table in the database. + +{% endinfo_block %} + +### 4) Import data + +#### Add infrastructural data + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|SharedCartPermissionInstallerPlugin|Installs the registered infrastructural quote permissions.|None|Spryker\Zed\SharedCart\Communication\Plugin| +|ReadSharedCartPermissionPlugin|Quote permission to check read shared cart permissions in the client layer.|None|Spryker\Client\SharedCart\Plugin| +|WriteSharedCartPermissionPlugin|Quote permission to check writing shared cart permissions in the client layer.|None|Spryker\Client\SharedCart\Plugin| +|ReadSharedCartPermissionPlugin|Quote permission to check read shared cart permissions in the zed layer. |None|Spryker\Zed\SharedCart\Communication\Plugin| +|WriteSharedCartPermissionPlugin|Quote permission to check writing shared cart permissions in the zed layer. |None|Spryker\Zed\SharedCart\Communication\Plugin| + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php +1. Records with the keys `ReadSharedCartPermissionPlugin` and `WriteSharedCartPermissionPlugin` have been added to the `spy_permission` table.
    2. In the database the configured infrastructural quote permission groups have been added to the `spy_quote_permission_group` and `spy_quote_permission_group_to_permission` tables. + +{% endinfo_block %} + +#### Import carts sharing + +{% info_block infoBox "Info" %} + +The following imported entities will be used as carts to the company user relations in the Spryker OS. + +{% endinfo_block %} + +Prepare your data according to your requirements using our demo data: + +**vendor/spryker/chared-cart-data-import/data/import/shared_cart.csv** + +```yaml +quote_key,company_user_key,permission_group_name +quote-22,Spryker--1,FULL_ACCESS +quote-23,Spryker--1,FULL_ACCESS +quote-23,Spryker--2,FULL_ACCESS +quote-23,Spryker--3,FULL_ACCESS +quote-23,Spryker--6,FULL_ACCESS +quote-23,Spryker--4,READ_ONLY +quote-23,Spryker--5,READ_ONLY +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---|---|---|---|---| +|quote_key|mandatory|string |quote-22|Key that will identify the quote to add data to.| +|company_user_key|mandatory|string|Spryker--1|Key that will identify the company user that the quote is shared with.| +|permission_group_name|mandatory|string|FULL_ACCESS|Permission group that will be assigned to the shared company user.| + +Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|SharedCartDataImportPlugin|Imports customer's quotes sharing to database.| Make sure that customers have been already imported.
    Make sure that company users have been already imported.
    Make sure that a cart has been already imported.|Spryker\Zed\SharedCartDataImport\Communication\Plugin| + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +It is executed after the cart has been created or updated.|None|Spryker\Zed\SharedCart\Communication\Plugin| +|RemoveSharedQuoteBeforeQuoteDeletePlugin|Removes the sharing relation for the current cart before the cart has been removed.|None|Spryker\Zed\SharedCart\Communication\Plugin| +|UpdateShareDetailsQuoteAfterSavePlugin|Updates the cart sharing relations after the cart has been created or updated.|None|Spryker\Zed\SharedCart\Communication\Plugin| +|SharedQuoteSetDefaultBeforeQuoteSavePlugin|Marks the cart sharing relation for the current customer as active if the quote has been marked as active.|None|Spryker\Zed\SharedCart\Communication\Plugin| + +{% info_block infoBox "Information" %} + +All shared cart plugins must be added after the multi-cart plugins have been registered. + +{% endinfo_block %} + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + A new record will be added to `spy_quote_company_user` if sharing quote functionality used. + +{% endinfo_block %} + +#### Persistent cart integration + +Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|SharedCartsUpdateQuoteUpdatePlugin|Adds shared cart list to multi-cart collection.
    Sorts the collection by name.
    Saves the multi-cart collection in the session. |`SharedCartQuoteResponseExpanderPlugin` should be included. It should be executed after `\Spryker\Client\MultiCart\Plugin\SaveCustomerQuotesQuoteUpdatePlugin` has been registered and before `\Spryker\Client\MultiCart\Plugin\DefaultQuoteUpdatePlugin` has been registered.|Spryker\Client\SharedCart\Plugin| +|ProductSeparatePersistentCartChangeExpanderPlugin|Allows adding a product as a separate item if the product with the same SKU already exists in the cart.|1|`Spryker\Client\SharedCart\Plugin`| +|`PermissionUpdateQuoteUpdatePlugin`|Takes a permission list from `QuoteResponseTransfer` and updates a customer from the session.|`SharedCartQuoteResponseExpanderPlugin` should be included.|Spryker\Client\SharedCart\Plugin| +|SharedCartQuoteResponseExpanderPlugin|Expands `QuoteResponseTransfer` with the following shared cart related data:
    1) Carts shared with the customer.
    2) Customer permission list.
    3) Expands a customer cart with the sharing data.|1|Spryker\Zed\SharedCart\Communication\Plugin| + +**src/Pyz/Client/PersistentCart/PersistentCartDependencyProvider.php** + +```php +Quotes shared with the current customer must be added to the multi-cart session ;
    `CustomerTransfer::$permissions` must contain permissions must be updated in customer session; + +{% endinfo_block %} + +#### Set up permission integration + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|QuotePermissionStoragePlugin |Shared cart permission provider.|None|Spryker\Zed\SharedCart\Communication\Plugin| + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php +Open Yves and log in with customer. + +| MODULE | TEST | +| --- | --- | +| SharedCartPermissionGroupWidget | Hover over the multicart list in the header: it should contain the access column. | +| CartListPermissionGroupWidget | Open `https://mysprykershop.com/multi-cart/` - the page should contain the access column and share cart link | +| CartDeleteCompanyUsersListWidget | Open `https://mysprykershop.com/multi-cart/`. Click on the share cart link.
    Share the cart and click on the delete link.
    The list of customers whom this cart is shared with should appear on the delete confirmation page. | + +{% endinfo_block %} + +### 4) Enable controllers + +Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +|SharedCartPageControllerProvider|Provides routes used in `SharedCartPage.` |None|SprykerShop\Yves\SharedCartPage\Plugin\Provider| + +**src/Pyz/Yves/ShopApplication/YvesBootstrap.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container): array + { + return [ + new ShipmentTypeCheckoutPreConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +- Make sure that if you change items in the cart (add, remove or change quantity) then all the shipping methods are sanitized. +- Make sure that if you deactivate shipment type selected during the checkout, you will receive a validation error on checkout summary page. + +{% endinfo_block %} + + +## Install feature frontend + +Follow the steps below to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +|----------|------------------| +| Shipment | {{page.release_tag}} | +| Cart | {{page.release_tag}} | + +### Add translations + +Add translations as follows: + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```csv +shipment_type_cart.checkout.validation.error,Selected delivery type "%name%" is not available,en_US +shipment_type_cart.checkout.validation.error,Die ausgewählte Lieferart "%name%" ist nicht verfügbar,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary` table in the database. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-shipment-customer-account-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-shipment-customer-account-management-feature.md new file mode 100644 index 00000000000..10bcb863a0c --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-shipment-customer-account-management-feature.md @@ -0,0 +1,277 @@ + + + +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) + [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +## 1) Add translations + +1. Append the glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +page.checkout.address.single_address,Single address,en_US +page.checkout.address.single_address,Eine Adresse,de_DE +page.checkout.address.multiple_addresses,Multiple addresses,en_US +page.checkout.address.multiple_addresses,Mehrere Adressen,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +## 2) Set up behavior + +Enable the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------|---------------------------------------------------------------------------|---------------|------------------------------------------------------------| +| ShipmentTypeCheckoutAddressCollectionFormExpanderPlugin | Expands the checkout address form with the `ShipmentType` subform. | | SprykerShop\Yves\ShipmentTypeWidget\Plugin\CustomerPage | +| ShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin | Expands the checkout multi-shipping address form `ShipmentType`. | | SprykerShop\Yves\ShipmentTypeWidget\Plugin\CustomerPage | +| ShipmentTypeAddressFormWidgetCacheKeyGeneratorStrategyPlugin | Skips caching of the `ShipmentTypeAddressFormWidget` widget. | | SprykerShop\Yves\ShipmentTypeWidget\Plugin\ShopApplication | + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutAddressCollectionFormExpanderPlugins(): array + { + return [ + new ShipmentTypeCheckoutAddressCollectionFormExpanderPlugin(), + ]; + } + + /** + * @return list<\SprykerShop\Yves\CustomerPageExtension\Dependency\Plugin\CheckoutMultiShippingAddressesFormExpanderPluginInterface> + */ + protected function getCheckoutMultiShippingAddressesFormExpanderPlugins(): array + { + return [ + new ShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getWidgetCacheKeyGeneratorStrategyPlugins(): array + { + return [ + new ShipmentTypeAddressFormWidgetCacheKeyGeneratorStrategyPlugin(), + ]; + } +} +``` + +## 3) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|---------------------------------------------------------------|---------------|--------------------------------------------| +| ShipmentTypeAddressFormWidget | Enables shipment type selection at the checkout address step. | | SprykerShop\Yves\ShipmentTypeWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + public function getShipmentHashFields(): array + { + return array_merge(parent::getShipmentHashFields(), [ShipmentTransfer::SHIPMENT_TYPE_UUID]); + } +} +``` + +**src/Pyz/Zed/Shipment/ShipmentConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + '/\/shipment-types.*/' => [ + 'isRegularExpression' => true, + ], + ]; + } +} +``` + +### 3) To enable the Storefront API, register the following plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| ShipmentTypesResourceRoutePlugin | Registers the `shipment-types` resource. | | Spryker\Glue\ShipmentTypesRestApi\Plugin\GlueApplication | +| ShipmentTypesByShipmentMethodsResourceRelationshipPlugin | Adds the `shipment-types` resources as a relationship to `shipment-methods` resources. | | Spryker\Glue\ShipmentTypesRestApi\Plugin\GlueApplication | +| SelectedShipmentTypesCheckoutDataResponseMapperPlugin | Maps the selected shipment types to `RestCheckoutDataResponseAttributesTransfer.selectedShipmentTypes`. | | Spryker\Glue\ShipmentTypesRestApi\Plugin\CheckoutRestApi | +| ItemShipmentTypeQuoteMapperPlugin | Maps shipment types taken from shipment methods to `Quote.items.shipmentType`. | | Spryker\Zed\ShipmentTypesRestApi\Communication\Plugin\CheckoutRestApi | +| ShipmentTypeCheckoutDataValidatorPlugin | Validates whether the shipment type related to the shipment method is active and belongs to the quote store. | | Spryker\Zed\ShipmentTypesRestApi\Communication\Plugin\CheckoutRestApi | +| ShipmentTypeReadCheckoutDataValidatorPlugin | Validates whether the shipment type related to the shipment method is active and belongs to the quote store. | | Spryker\Zed\ShipmentTypesRestApi\Communication\Plugin\CheckoutRestApi | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + new ShipmentTypesResourceRoutePlugin(), + } + + /** + * {@inheritDoc} + * + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection, + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + ShipmentsRestApiConfig::RESOURCE_SHIPMENT_METHODS, + new ShipmentTypesByShipmentMethodsResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +- Make sure that you can send the following requests: + +- `GET https://glue.mysprykershop.com/shipment-types` +- `GET https://glue.mysprykershop.com/shipment-types/{{shipment-type-uuid}}` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +- Make sure you have the `shipment-types` resource as a relationship to `shipment-methods` when you send a request with the multi-shipment request structure. + +`POST https://glue-backend.mysprykershop.com/checkout-data?include=shipments,shipment-methods,shipment-types` +
    + Request body example + ```json + { + "data": { + "type": "checkout-data", + "attributes": { + "customer": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin" + }, + "idCart": "d60de64b-08c7-564d-8916-d7756f2dc865", + "payments": [ + { + "paymentMethodName": "credit card", + "paymentProviderName": "DummyPayment" + } + ], + "shipments": [ + { + "items": [ + "139_24699831_c45147dee729311ef5b5c3003946c48f" + ], + "shippingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "zipCode": "61000", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "idShipmentMethod": 1, + "requestedDeliveryDate": null + } + ] + } + } + } + ``` +
    + +
    + Response body example + ```json + { + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [], + "selectedServicePoints": [], + "selectedShipmentTypes": [] + }, + "links": { + "self": "http://glue.de.spryker.local/checkout-data?include=shipments,shipment-methods,shipment-types" + }, + "relationships": { + "shipments": { + "data": [ + { + "type": "shipments", + "id": "d96343e971c91e3ecb098976d1e2cc9b" + } + ] + } + } + }, + "included": [ + { + "type": "shipment-types", + "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", + "attributes": { + "name": "Delivery", + "key": "delivery" + }, + "links": { + "self": "http://glue.de.spryker.local/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" + } + }, + { + "type": "shipment-methods", + "id": "1", + "attributes": { + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "deliveryTime": null, + "price": 490, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "http://glue.de.spryker.local/shipment-methods/1" + }, + "relationships": { + "shipment-types": { + "data": [ + { + "type": "shipment-types", + "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3" + } + ] + } + } + }, + { + "type": "shipments", + "id": "d96343e971c91e3ecb098976d1e2cc9b", + "attributes": { + "items": [ + "139_24699831_eb160de1de89d9058fcb0b968dbbbd68" + ], + "requestedDeliveryDate": null, + "shippingAddress": { + "id": null, + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "zipCode": "61000", + "city": "Berlin", + "country": null, + "iso2Code": "DE", + "company": "Spryker", + "phone": null, + "isDefaultBilling": true, + "isDefaultShipping": true, + "idCompanyBusinessUnitAddress": null + }, + "selectedShipmentMethod": { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": "19.00", + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + }, + "links": { + "self": "http://glue.de.spryker.local/shipments/d96343e971c91e3ecb098976d1e2cc9b" + }, + "relationships": { + "shipment-methods": { + "data": [ + { + "type": "shipment-methods", + "id": "1" + } + ] + } + } + } + ] + } + ``` +
    +{% endinfo_block %} + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getCheckoutDataResponseMapperPlugins(): array + { + return [ + new SelectedShipmentTypesCheckoutDataResponseMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +- Make sure you have the `selectedShipmentTypes` field in the response when you send a request with a single-shipment request structure. + +`POST https://glue-backend.mysprykershop.com/checkout-data` +
    + Request body example + ```json + { + "data": { + "type": "checkout-data", + "attributes": { + "customer": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin" + }, + "idCart": "d60de64b-08c7-564d-8916-d7756f2dc865", + "billingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "zipCode": "61000", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "shippingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "zipCode": "61000", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "payments": [ + { + "paymentMethodName": "credit card", + "paymentProviderName": "DummyPayment" + } + ], + "shipment": { + "idShipmentMethod": 1 + } + } + } + } + ``` +
    + +
    + Response body example + ```json + { + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [ + { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + ], + "selectedPaymentMethods": [], + "selectedServicePoints": [], + "selectedShipmentTypes": [ + { + "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", + "name": "Delivery", + "key": "delivery" + } + ] + }, + "links": { + "self": "http://glue.de.spryker.local/checkout-data" + } + } + } + ``` +
    + +{% endinfo_block %} + +**src/Pyz/Zed/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getQuoteMapperPlugins(): array + { + return [ + new ItemShipmentTypeQuoteMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CheckoutRestApiExtension\Dependency\Plugin\CheckoutDataValidatorPluginInterface> + */ + protected function getCheckoutDataValidatorPlugins(): array + { + return [ + new ShipmentTypeCheckoutDataValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\CheckoutRestApiExtension\Dependency\Plugin\ReadCheckoutDataValidatorPluginInterface> + */ + protected function getReadCheckoutDataValidatorPlugins(): array + { + return [ + new ShipmentTypeReadCheckoutDataValidatorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Deactivate one of the shipment types and send a request with the corresponding shipment method: +`POST https://glue-backend.mysprykershop.com/checkout-data` +
    + Request body example + ```json + { + "data": { + "type": "checkout-data", + "attributes": { + "customer": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin" + }, + "idCart": "d60de64b-08c7-564d-8916-d7756f2dc865", + "payments": [ + { + "paymentMethodName": "credit card", + "paymentProviderName": "DummyPayment" + } + ], + "shipments": [ + { + "items": [ + "139_24699831_c45147dee729311ef5b5c3003946c48f" + ], + "shippingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "West road", + "address2": "212", + "address3": "", + "zipCode": "61000", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "idShipmentMethod": 1, + "requestedDeliveryDate": null + } + ] + } + } + } + ``` +
    + +
    + Response body example + ```json + { + "errors": [ + { + "code": "1101", + "status": 422, + "detail": "Selected delivery type \"Delivery\" is not available." + } + ] + } + ``` +
    +{% endinfo_block %} + +### 4) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events. + +
    + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|---------------------------|-------------------------------------------------------------------------------------------------------------------------| +| spy_shipment_type | Entity.spy_shipment_type.create
    Entity.spy_shipment_type.update
    Entity.spy_shipment_type.delete | +| spy_shipment_type_store | Entity.spy_shipment_type_store.create
    Entity.spy_shipment_type_store.update
    Entity.spy_shipment_type_store.delete | +| spy_shipment_carrier | Entity.spy_shipment_carrier.create
    Entity.spy_shipment_carrier.update
    Entity.spy_shipment_carrier.delete | +| spy_shipment_method | Entity.spy_shipment_method.create
    Entity.spy_shipment_method.update
    Entity.spy_shipment_method.delete | +| spy_shipment_method_store | Entity.spy_shipment_method_store.create
    Entity.spy_shipment_method_store.update
    Entity.spy_shipment_method_store.delete | + + +
    + + +**src/Pyz/Zed/ShipmentType/Persistence/Propel/Schema/spy_shipment_type.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/Shipment/Persistence/Propel/Schema/spy_shipment.schema.xml** + +```xml + + + + + + + +
    + + + + + + + +
    + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------------------|--------|---------| +| spy_sales_shipment_type | table | created | +| spy_shipment_method_store | table | created | +| spy_shipment_type | table | created | +| spy_shipment_type_storage | table | created | +| spy_shipment_type_store | table | created | +| spy_sales_shipment.fk_shipment_type | column | created | +| spy_sales_shipment.uuid | column | created | +| spy_shipment_carrier.uuid | column | created | +| spy_shipment_method.fk_shipment_type | column | created | +| spy_shipment_method.uuid | column | created | +| spy_shipment_method_price.uuid | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------|----------|---------|--------------------------------------------------------------------------| +| ShipmentTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTransfer | +| StoreTransfer | class | created | src/Generated/Shared/Transfer/StoreTransfer | +| DataImporterConfigurationTransfer | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReaderConfigurationTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReaderConfigurationTransfer | +| DataImporterReportTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | +| DataImporterReportMessageTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReportMessageTransfer | +| TotalsTransfer | class | created | src/Generated/Shared/Transfer/TotalsTransfer | +| SalesShipmentCriteria | class | created | src/Generated/Shared/Transfer/SalesShipmentCriteriaTransfer | +| SalesShipmentConditions | class | created | src/Generated/Shared/Transfer/SalesShipmentConditionsTransfer | +| SalesShipmentCollection | class | created | src/Generated/Shared/Transfer/SalesShipmentCollectionTransfer | +| ShipmentTypeCollectionTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeCollectionTransfer | +| ShipmentTypeTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeTransfer | +| ShipmentTypeCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeCriteriaTransfer | +| ShipmentTypeConditionsTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeConditionsTransfer | +| ShipmentTypeStorageCollectionTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCollectionTransfer | +| ShipmentTypeStorageTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageTransfer | +| ShipmentTypeStorageCriteriaTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageCriteriaTransfer | +| ShipmentTypeStorageConditionsTransfer | class | created | src/Generated/Shared/Transfer/ShipmentTypeStorageConditionsTransfer | +| ShipmentMethodCollectionTransfer | class | created | src/Generated/Shared/Transfer/ShipmentMethodCollectionTransfer | +| SalesShipmentTypeTransfer | class | created | src/Generated/Shared/Transfer/SalesShipmentTypeTransfer | +| RestShipmentTypesAttributesTransfer | class | created | src/Generated/Shared/Transfer/RestShipmentTypesAttributesTransfer | +| SalesShipmentResourceCollection | class | created | src/Generated/Shared/Transfer/SalesShipmentResourceCollectionTransfer | +| SalesShipmentsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/SalesShipmentsBackendApiAttributesTransfer | +| RestErrorMessageTransfer | class | created | src/Generated/Shared/Transfer/RestErrorMessageTransfer | +| ShipmentMethodTransfer.shipmentType | property | created | src/Generated/Shared/Transfer/ShipmentMethodTransfer | +| ShipmentTransfer.shipmentTypeUuid | property | created | src/Generated/Shared/Transfer/ShipmentTransfer | +| ItemTransfer.shipmentType | property | created | src/Generated/Shared/Transfer/ItemTransfer | + +{% endinfo_block %} + +### 5) Add translations + +1. Append glossary according to your configuration: + +```csv +shipment_type.name.shipment_type_delivery,Delivery,en_US +shipment_type.name.shipment_type_delivery,Lieferung,de_DE +shipment_type.name.shipment_type_pickup,Pickup,en_US +shipment_type.name.shipment_type_pickup,Abholung,de_DE +shipment_type.validation.shipment_type_entity_not_found,A delivery type entity was not found.,en_US +shipment_type.validation.shipment_type_entity_not_found,Lieferart wurde nicht gefunden.,de_DE +shipment_type.validation.shipment_type_key_exists,A delivery type with the same key already exists.,en_US +shipment_type.validation.shipment_type_key_exists,Es existiert bereits eine Lieferart mit dem gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_is_not_unique,At least two delivery types in this request have the same key.,en_US +shipment_type.validation.shipment_type_key_is_not_unique,Mindestens zwei Lieferarten in dieser Anfrage haben den gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_invalid_length,A delivery type key must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_key_invalid_length,Der Lieferart-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.shipment_type_name_invalid_length,A delivery type name must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_name_invalid_length,Der Lieferart-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +shipment_type.validation.store_does_not_exist,Store mit dem Namen ‘%name%’ existiert nicht.,de_DE +shipment_types_rest_api.error.shipment_type_not_available,Selected delivery type "%name%" is not available.,en_US +shipment_types_rest_api.error.shipment_type_not_available,Die ausgewählte Lieferart "%name%" ist nicht verfügbar.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 6) Configure export to the key-value store (Redis or Valkey) + +Configure tables to be published to `spy_shipment_type_storage` and synchronized to the Storage on create, edit, and delete changes: + +1. In `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`, adjust the `RabbitMq` module configuration: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ShipmentTypeStorageConfig::QUEUE_NAME_SYNC_STORAGE_SHIPMENT_TYPE, + ]; + } +} +``` + +2. Register the queue message processor: + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ShipmentTypeStorageConfig::QUEUE_NAME_SYNC_STORAGE_SHIPMENT_TYPE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} + +``` + +3. Configure the synchronization pool and event queue name: + +**src/Pyz/Zed/ShipmentTypeStorage/ShipmentTypeStorageConfig.php** + +```php +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getShipmentTypeStoragePlugins(), + ); + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ShipmentTypePublisherTriggerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getShipmentTypeStoragePlugins(): array + { + return [ + new ShipmentTypeWriterPublisherPlugin(), + new ShipmentTypeStoreWriterPublisherPlugin(), + new ShipmentCarrierShipmentTypeWriterPublisherPlugin(), + new ShipmentMethodPublishShipmentTypeWriterPublisherPlugin(), + new ShipmentMethodShipmentTypeWriterPublisherPlugin(), + new ShipmentMethodStoreShipmentTypeWriterPublisherPlugin(), + ]; + } +} +``` + + + +5. Set up synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|--------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| ShipmentTypeSynchronizationDataBulkRepositoryPlugin | Enables synchronizing the shipment type storage table's content into the key-value store (Redis or Valkey). | | Spryker\Zed\ShipmentTypeStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ShipmentTypeSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `shipment-type` trigger plugin works correctly: + +1. Fill the `spy_shipment_type` and `spy_shipment_type_store` tables with data. +2. Run the `console publish:trigger-events -r shipment_type` command. +3. Make sure that the `spy_shipment_type_storage` table has been filled with respective data. +4. Make sure that, in your system, storage entries are displayed with the `kv:shipment_type:{store}:{shipment_type_id}` mask. + +Make sure that `shipment-type` synchronization plugin works correctly: + +1. Fill the `spy_shipment_type_storage` table with some data. +2. Run the `console sync:data -r shipment_type` command. +3. Make sure that, in your system, storage entries are displayed with the `kv:shipment_type:{store}:{shipment_type_id}` mask. + +Make sure that when a shipment type is created or edited through BAPI, it's exported to the key-value store (Redis or Valkey) accordingly. + +In the key-value store (Redis or Valkey), make sure data is represented in the following format: + +```json +{ + "id_shipment_type": 1, + "uuid": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", + "name": "Pickup", + "key": "pickup", + "_timestamp": 1684933897.870368 +} +``` + +{% endinfo_block %} + +### 7) Import shipment methods + +{% info_block infoBox "Info" %} + +The following imported entities are used as shipment methods in Spryker OS. + +{% endinfo_block %} + +1. Prepare your data according to your requirements using our demo data: + +**vendor/spryker/spryker/Bundles/ShipmentDataImport/data/import/shipment.csv** + +```yaml +shipment_method_key,name,carrier,taxSetName +spryker_dummy_shipment-standard,Standard,Spryker Dummy Shipment,Shipment Taxes +spryker_dummy_shipment-express,Express,Spryker Dummy Shipment,Shipment Taxes +spryker_drone_shipment-air_standard,Air Standard,Spryker Drone Shipment,Shipment Taxes +spryker_drone_shipment-air_sonic,Air Sonic,Spryker Drone Shipment,Shipment Taxes +spryker_drone_shipment-air_light,Air Light,Spryker Drone Shipment,Shipment Taxes +spryker_no_shipment,NoShipment,NoShipment,Tax Exempt +free_pickup,Free Pickup,pickup,Tax Exempt +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---------------------|-----------|-----------|---------------------------------|-------------------------------| +| shipment_method_key | ✓ | string | spryker_dummy_shipment-standard | Shipment method key. | +| name | ✓ | string | Standard | Shipment method name. | +| carrier | ✓ | string | Spryker Dummy Shipment | Shipment carrier name. | +| taxSetName | ✓ | string | Shipment Taxes | Tax set name. | + +**vendor/spryker/spryker/Bundles/ShipmentDataImport/data/import/shipment_method_store.csv** + +```yaml +shipment_method_key,store +spryker_dummy_shipment-standard,AT +spryker_dummy_shipment-standard,DE +spryker_dummy_shipment-standard,US +spryker_dummy_shipment-express,AT +spryker_dummy_shipment-express,DE +spryker_dummy_shipment-express,US +spryker_drone_shipment-air_standard,AT +spryker_drone_shipment-air_standard,DE +spryker_drone_shipment-air_standard,US +spryker_drone_shipment-air_sonic,AT +spryker_drone_shipment-air_sonic,DE +spryker_drone_shipment-air_sonic,US +spryker_drone_shipment-air_light,AT +spryker_drone_shipment-air_light,DE +spryker_drone_shipment-air_light,US +spryker_no_shipment,AT +spryker_no_shipment,DE +spryker_no_shipment,US +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---------------------|-----------|-----------|---------------------------------|-------------------------------------| +| shipment_method_key | ✓ | string | spryker_dummy_shipment-standard | Existing shipping method key. | +| store | ✓ | string | DE | Existing store name. | + +**vendor/spryker/spryker/Bundles/ShipmentDataImport/data/import/shipment_price.csv** + +```yaml +shipment_method_key,store,currency,value_net,value_gross +spryker_dummy_shipment-standard,AT,EUR,290,390 +spryker_dummy_shipment-express,AT,EUR,390,490 +spryker_drone_shipment-air_standard,AT,EUR,350,400 +spryker_drone_shipment-air_sonic,AT,EUR,700,900 +spryker_drone_shipment-air_light,AT,EUR,1100,1200 +spryker_dummy_shipment-standard,AT,CHF,350,460 +spryker_dummy_shipment-express,AT,CHF,460,580 +spryker_drone_shipment-air_standard,AT,CHF,420,480 +spryker_drone_shipment-air_sonic,AT,CHF,720,1100 +spryker_drone_shipment-air_light,AT,CHF,1300,1600 +spryker_no_shipment,AT,EUR,0,0 +spryker_no_shipment,AT,CHF,0,0 +free_pickup,AT,EUR,,0 +free_pickup,AT,CHF,,0 +spryker_dummy_shipment-standard,DE,EUR,390,490 +spryker_dummy_shipment-express,DE,EUR,490,590 +spryker_drone_shipment-air_standard,DE,EUR,450,500 +spryker_drone_shipment-air_sonic,DE,EUR,800,1000 +spryker_drone_shipment-air_light,DE,EUR,1200,1500 +spryker_dummy_shipment-standard,DE,CHF,450,560 +spryker_dummy_shipment-express,DE,CHF,560,680 +spryker_drone_shipment-air_standard,DE,CHF,520,580 +spryker_drone_shipment-air_sonic,DE,CHF,920,1200 +spryker_drone_shipment-air_light,DE,CHF,1400,1700 +spryker_no_shipment,DE,EUR,0,0 +spryker_no_shipment,DE,CHF,0,0 +free_pickup,DE,EUR,,0 +free_pickup,DE,CHF,,0 +spryker_dummy_shipment-standard,US,EUR,390,490 +spryker_dummy_shipment-express,US,EUR,490,590 +spryker_drone_shipment-air_standard,US,EUR,450,500 +spryker_drone_shipment-air_sonic,US,EUR,800,1000 +spryker_drone_shipment-air_light,US,EUR,1200,1500 +spryker_dummy_shipment-standard,US,CHF,450,560 +spryker_dummy_shipment-express,US,CHF,560,680 +spryker_drone_shipment-air_standard,US,CHF,520,580 +spryker_drone_shipment-air_sonic,US,CHF,920,1200 +spryker_drone_shipment-air_light,US,CHF,1400,1700 +spryker_no_shipment,US,EUR,0,0 +spryker_no_shipment,US,CHF,0,0 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---------------------|-----------|-----------|---------------------------------|-------------------------------------| +| shipment_method_key | ✓ | string | spryker_dummy_shipment-standard | Existing shipping method key. | +| store | ✓ | string | DE | Existing store name. | +| currency | ✓ | string | EUR | Existing currency name. | +| value_net | optional | integer | 390 | Net price, in coins. | +| value_gross | optional | integer | 490 | Gross price, in coins. | + +**vendor/spryker/spryker/Bundles/ShipmentTypeDataImport/data/import/shipment_type.csv** + +```yaml +key,name,is_active +pickup,Pickup,1 +delivery,Delivery,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|-----------|-----------|--------------|------------------------------| +| key | ✓ | string | pickup | Key for the shipment type. | +| name | ✓ | string | Pickup | Name for the shipment type. | +| is_active | ✓ | string | 1 | Status of the shipment type. | + +**vendor/spryker/spryker/Bundles/ShipmentTypeDataImport/data/import/shipment_type_store.csv** + +```yaml +shipment_type_key,store_name +pickup,AT +delivery,AT +pickup,DE +delivery,DE +pickup,US +delivery,US +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|--------------|-----------------------------------| +| shipment_type_key | ✓ | string | pickup | Key of an existing shipping type. | +| store_name | ✓ | string | DE | Name of an existing store. | + +**vendor/spryker/spryker/Bundles/ShipmentTypeDataImport/data/import/shipment_method_shipment_type.csv** + +```yaml +shipment_method_key,shipment_type_key +spryker_dummy_shipment-standard,delivery +spryker_dummy_shipment-express,delivery +spryker_drone_shipment-air_standard,delivery +spryker_drone_shipment-air_sonic,delivery +spryker_drone_shipment-air_light,delivery +spryker_no_shipment,delivery +free_pickup,pickup +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---------------------|-----------|-----------|---------------------------------|-------------------------------------| +| shipment_method_key | ✓ | string | spryker_dummy_shipment-standard | Key of an existing shipping method. | +| shipment_type_key | ✓ | string | delivery | Key of an existing shipping type. | + +1. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|---------------------------------------------------------------------------|---------------|---------------------------------------------------------------------| +| ShipmentDataImportPlugin | Imports shipment method data into the database. | None | \Spryker\Zed\ShipmentDataImport\Communication\Plugin | +| ShipmentMethodPriceDataImportPlugin | Imports shipment method price data into the database. | None | \Spryker\Zed\ShipmentDataImport\Communication\Plugin | +| ShipmentMethodStoreDataImportPlugin | Imports shipment method store data into the database. | None | \Spryker\Zed\ShipmentDataImport\Communication\Plugin | +| ShipmentTypeDataImportPlugin | Imports shipment types data from the specified file. | None | \Spryker\Zed\ShipmentTypeDataImport\Communication\Plugin\DataImport | +| ShipmentTypeStoreDataImportPlugin | Imports shipment type stores data from the specified file. | None | \Spryker\Zed\ShipmentTypeDataImport\Communication\Plugin\DataImport | +| ShipmentMethodShipmentTypeDataImportPlugin | Imports shipment types for shipment methods data from the specified file. | None | \Spryker\Zed\ShipmentTypeDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +buildImporterConfiguration('shipment.csv', static::IMPORT_TYPE_SHIPMENT); + } + + /** + * @return \Generated\Shared\Transfer\DataImporterConfigurationTransfer + */ + public function getShipmentMethodPriceDataImporterConfiguration(): DataImporterConfigurationTransfer + { + return $this->buildImporterConfiguration('shipment_price.csv', static::IMPORT_TYPE_SHIPMENT_PRICE); + } +} +``` + +**src/Pyz/Zed/ShipmentTypeDataImport/ShipmentTypeDataImportConfig** + +```php +buildImporterConfiguration('shipment_type.csv', static::IMPORT_TYPE_SHIPMENT_TYPE); + } + + /** + * @return \Generated\Shared\Transfer\DataImporterConfigurationTransfer + */ + public function getShipmentTypeStoreDataImporterConfiguration(): DataImporterConfigurationTransfer + { + return $this->buildImporterConfiguration('shipment_type_store.csv', static::IMPORT_TYPE_SHIPMENT_TYPE_STORE); + } + + /** + * @return \Generated\Shared\Transfer\DataImporterConfigurationTransfer + */ + public function getShipmentMethodShipmentTypeDataImporterConfiguration(): DataImporterConfigurationTransfer + { + return $this->buildImporterConfiguration('shipment_method_shipment_type.csv', static::IMPORT_TYPE_SHIPMENT_METHOD_SHIPMENT_TYPE); + } +} +``` + +2. Configure shipment GUI module with money and store plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------| +| MoneyCollectionFormTypePlugin | Represents the money collection fields based on stores, currencies, and price types defined in the system. | None | Spryker\Zed\MoneyGui\Communication\Plugin\Form | +| StoreRelationToggleFormTypePlugin | Represents a store relation toggle form based on stores registered in the system. | None | Spryker\Zed\Store\Communication\Plugin\Form | +| ShipmentTotalCalculatorPlugin | Calculates shipment total using expenses. | None | Spryker\Zed\Shipment\Communication\Plugin\Calculation | + +**src/Pyz/Zed/ShipmentGui/ShipmentGuiDependencyProvider.php** + +```php +> Shipments > Delivery Methods**. The **Delivery Methods** page opens. +2. Check that, in the **DELIVERY METHODS** table, the list of shipment methods is displayed. +3. Check that, for any shipment method of your choice, in the **Actions** column, you can click **View**, **Edit**, and **Delete** to complete a respective action. + +{% endinfo_block %} + +**src/Pyz/Zed/Calculation/CalculationDependencyProvider.php** + +```php + + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new ShipmentOrderItemExpanderPlugin(), + ]; + } +} +``` + +4. Configure the shipment type expander plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------| +| ShipmentTypeItemExpanderPlugin | Expands `CartChange.items.shipment` transfer with `shipmentTypeUuid` taken from `CartChange.items.shipmentType.uuid`. | | Spryker\Zed\ShipmentTypeCart\Communication\Plugin\Cart | +| ShipmentTypeQuoteExpanderPlugin | Expands `QuoteTransfer.items.shipment` transfer with `shipmentTypeUuid` taken from `QuoteTransfer.items.shipmentType.uuid`. | | Spryker\Zed\ShipmentTypeCart\Communication\Plugin\Quote | +| ShipmentTypeShipmentMethodCollectionExpanderPlugin | Expands `ShipmentMethodCollectionTransfer.shipmentMethod` with shipment type. | | Spryker\Zed\ShipmentType\Communication\Plugin\Shipment | + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new ShipmentTypeItemExpanderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new ShipmentTypeQuoteExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php** + +```php + + */ + protected function getShipmentMethodCollectionExpanderPlugins(): array + { + return [ + new ShipmentTypeShipmentMethodCollectionExpanderPlugin(), + ]; + } +} +``` + +5. Configure shipment type filter plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------|---------------|---------------|-----------| +| ShipmentTypeShipmentMethodFilterPlugin | | | Spryker\Zed\ShipmentType\Communication\Plugin\Shipment | + +**src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php** + +```php + + */ + protected function getMethodFilterPlugins(Container $container): array + { + return [ + new ShipmentTypeShipmentMethodFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that during checkout on the Shipment step, you can only see shipment methods that have relation to active shipment types related to the current store or shipment methods without shipment type relation: + +1. In the `spy_shipment_type` DB table, set `isActive = 0` to deactivate one of the shipment types. +2. Set its ID as `fk_shipment_type` in `spy_shipment_method_table`. +3. In the Storefront, add an item to the cart, do a checkout, and proceed to the Shipment step. +4. Check that there's no shipment method related to inactive shipment type in the shipment form. + +{% endinfo_block %} + +6. Configure shipment type order saver plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|--------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------|-------------------------------------------------------------| +| ShipmentTypeCheckoutDoSaveOrderPlugin | Persists shipment type data to the `spy_sales_shipment_type` table and updates `spy_sales_shipment` with `fk_shipment_type`. | Should be executed after the `SalesOrderShipmentSavePlugin` plugin. | Spryker\Zed\SalesShipmentType\Communication\Plugin\Checkout | + + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php +|list<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutDoSaveOrderInterface> + */ + protected function getCheckoutOrderSavers(Container $container): array + { + return [ + new ShipmentTypeCheckoutDoSaveOrderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you place an order, the selected shipment type is persisted to `spy_sales_shipment_type` and `spy_sales_shipment.fk_sales_shipment_type` is updated. + +{% endinfo_block %} + +7. To enable the Backend API, register these plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|---------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------------------| +| ShipmentTypesBackendResourcePlugin | Registers the `shipment-types` resource. | | Spryker\Glue\ShipmentTypesBackendApi\Plugin\GlueBackendApiApplication | +| SalesShipmentsByPickingListsBackendResourceRelationshipPlugin | Adds `sales-shipments` resources as a relationship to `picking-list-items` resources. | | Spryker\Glue\ShipmentsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new ShipmentTypesBackendResourcePlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new SalesShipmentsByPickingListsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Make sure that you can send the following requests: + +- `GET https://glue-backend.mysprykershop.com/shipment-types` +- `GET https://glue-backend.mysprykershop.com/shipment-types/{% raw %}{{{% endraw %}shipment-types-uuid{% raw %}}{{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/shipment-types` + + ```json + { + "data": { + "type": "shipment-types", + "attributes": { + "name": "Some Shipment Type", + "key": "some-shipment-type", + "isActive": true, + "stores": ["DE", "AT"] + } + } + } + ``` + +- `PATCH https://glue-backend.mysprykershop.com/shipment-types/{% raw %}{{{% endraw %}shipment-types{% raw %}}{{% endraw %}` + + ```json + { + "data": { + "type": "shipment-types", + "attributes": { + "isActive": false + } + } + } + ``` + +2. Make sure you have a `sales-shipments` resource as a relationship to `picking-list-items` when you do a request. + +`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,sales-shipments` +
    + Response body example +```json +{ + "data": { + "id": "14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b", + "type": "picking-lists", + "attributes": { + "status": "picking-finished", + "createdAt": "2023-03-23 15:47:07.000000", + "updatedAt": "2023-03-30 12:47:45.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/14baa0f3-e6e7-5aa8-bc6c-c02ec39ca77b?include=picking-list-items,sales-shipments" + } + }, + "included": [ + { + "id": "84935e86-ef86-507f-9c23-54942486d8cb", + "type": "sales-shipments", + "attributes": { + "requestedDeliveryDate": "2023-04-20" + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/sales-shipments/84935e86-ef86-507f-9c23-54942486d8cb?include=picking-list-items,sales-shipments" + } + }, + { + "id": "65bb3aec-0a45-5ec6-9b12-bbca6551d87f", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 1, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "31e21001-e544-5533-9754-51331c8c9ac5", + "sku": "141_29380410", + "quantity": 1, + "name": "Asus Zenbook US303UB", + "amountSalesUnit": null + } + }, + "relationships": { + "sales-shipments": { + "data": [ + { + "id": "84935e86-ef86-507f-9c23-54942486d8cb", + "type": "sales-shipments" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/65bb3aec-0a45-5ec6-9b12-bbca6551d87f?include=picking-list-items,sales-shipments" + } + } + ] +} +``` +
    +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Сore feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Isntall the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/shipment:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------|------------------------------------------| +| ShipmentTypeWidget | vendor/spryker-shop/shipment-type-widget | +| ShipmentPage | vendor/spryker-shop/shipment-page | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +1. Disable shipment points to be selected for product bundles during checkout: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|-----------------------------| +| ShipmentTypeWidgetConfig::getNotApplicableServicePointAddressStepFormItemPropertiesForHydration() | Defines the list of properties in an `ItemTransfer` that are not intended for form hydration. | Pyz\Yves\ShipmentTypeWidget | +| ProductBundleConfig::getAllowedBundleItemFieldsToCopy() | Defines the list of allowed fields to be copied from a source bundle item to destination bundled items. | Pyz\Zed\ProductBundle | + +**src/Pyz/Yves/ShipmentTypeWidget/ShipmentTypeWidgetConfig.php** + +```php + + */ + public function getNotApplicableShipmentTypeAddressStepFormItemPropertiesForHydration(): array + { + return [ + ItemTransfer::BUNDLE_ITEM_IDENTIFIER, + ItemTransfer::RELATED_BUNDLE_ITEM_IDENTIFIER, + ]; + } +} +``` + +**src/Pyz/Zed/ProductBundle/ProductBundleConfig.php** + +```php + + */ + public function getAllowedBundleItemFieldsToCopy(): array + { + return [ + ItemTransfer::SHIPMENT, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can't select shipment points for product bundles on the address checkout step. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------| +| ShipmentTypeCheckoutPageStepEnginePreRenderPlugin | Expands the `Quote.items.shipment` transfer with `shipmentTypeUuid` taken from `Quote.items.shipmentType.uuid`. | | SprykerShop\Yves\ShipmentTypeWidget\Plugin\CheckoutPage | +| ShipmentTypeCheckoutAddressStepPreGroupItemsByShipmentPlugin | Cleans `Shipment.shipmentTypeUuid` from each item in `Quote.items`. | | SprykerShop\Yves\ShipmentTypeWidget\Plugin\CustomerPage | +| ShipmentReorderItemSanitizerPlugin | Sets the `ItemTransfer.shipment` property to `null` for each item after reorder. | | SprykerShop\Yves\ShipmentPage\Plugin\CustomerReorderWidget | + +**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutPageStepEnginePreRenderPlugins(): array + { + return [ + new ShipmentTypeCheckoutPageStepEnginePreRenderPlugin(), + ]; + } +``` + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutAddressStepPreGroupItemsByShipmentPlugins(): array + { + return [ + new ShipmentTypeCheckoutAddressStepPreGroupItemsByShipmentPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CustomerReorderWidget/CustomerReorderWidgetDependencyProvider.php** + +```php + + */ + protected function getReorderItemSanitizerPlugins(): array + { + return [ + new ShipmentReorderItemSanitizerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that after completing the reordering process, the address selection step functions correctly, and the address type is selected as "single address". + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-shipment-product-offer-service-points-availability-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-shipment-product-offer-service-points-availability-feature.md new file mode 100644 index 00000000000..bc5ea5fec82 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-shipment-product-offer-service-points-availability-feature.md @@ -0,0 +1,76 @@ + + +This document describes how to install the Shipment Product Offer Service Points Availability feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/shipment-product-offer-service-points-availability: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------------------------|----------------------------------------------------------------------------------| +| ShipmentTypeProductOfferServicePointAvailabilitiesRestApi | vendor/spryker/shipment-type-product-offer-service-point-availabilities-rest-api | + +{% endinfo_block %} + + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +- Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------------------------|-------|---------|---------------------------------------------------------------------------------------------------| +| RestProductOfferServicePointAvailabilitiesRequestAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilitiesRequestAttributesTransfer | +| ProductOfferServicePointAvailabilityConditions | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityConditionsTransfer | + +- Make sure you can use the `shipmentTypeUuid` filter when sending requests to the `product-offer-service-point-availabilities` resource. Example: + +`POST https://glue.mysprykershop.com/product-offer-service-point-availabilities` + +```json + { + "data": { + "type": "product-offer-service-point-availabilities", + "attributes": { + "servicePointUuids": [ + "{{service-point-uuid}}" + ], + "serviceTypeUuid": "{{service-type-uuid}}", + "productOfferServicePointAvailabilityRequestItems": [ + { + "productConcreteSku": "{{product-concrete-sku}}", + "productOfferReference": "{{product-offer-reference}}", + "quantity": 1 + } + ], + "shipmentTypeUuid": "{{shipment-type-uuid}}" + } + } + } +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-shipment-service-points-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-shipment-service-points-feature.md new file mode 100644 index 00000000000..196b4091bae --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-shipment-service-points-feature.md @@ -0,0 +1,470 @@ + + + +This document describes how to install the [Shipment](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) + Service Points feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/shipment-service-points: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------------|--------------------------------------------------------------------| +| ShipmentTypeServicePoint | vendor/spryker/shipment-type-service-point | +| ShipmentTypeServicePointDataImport | vendor/spryker/shipment-type-service-point-data-import | +| ShipmentTypesServicePointsResourceRelationship | vendor/spryker/shipment-types-service-points-resource-relationship | + +{% endinfo_block %} + +## 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|--------------------------| +| ShipmentsRestApiConfig::shouldExecuteShippingAddressValidationStrategyPlugins() | Returns a list of shipment type keys which are applicable for shipping address validation and setting address based on selected service point. | Pyz\Zed\ShipmentsRestApi | + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiConfig.php** + +```php + + */ + public function getApplicableShipmentTypeKeysForShippingAddress(): array + { + return [static::SHIPMENT_TYPE_KEY_PICKUP]; + } +} + +``` + +## 3) Import data + +1. Prepare data according to your requirements using our demo data: + +**data/import/common/common/shipment_type_service_type.csv** + +```csv +shipment_type_key,service_type_key +pickup,pickup +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------|-----------|-----------|--------------|----------------------------------| +| shipment_type_key | ✓ | string | pickup | Unique key of the shipment type. | +| service_type_key | ✓ | string | pickup | Unique key of the service type. | + +2. Enable data imports in your configuration file—for example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: shipment-type-service-type + source: data/import/common/common/shipment_type_service_type.csv +``` + +3. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|----------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| ShipmentTypeServiceTypeDataImportPlugin | Imports the data about relations between shipment and service types into the database. | | \Spryker\Zed\ShipmentTypeServicePointDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ShipmentTypeServiceTypeDataImportPlugin(), + ]; + } +} +``` + +4. To enable the behaviors, register the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ShipmentTypeServicePointDataImportConfig::IMPORT_TYPE_SHIPMENT_TYPE_SERVICE_TYPE), + ]; + } +} +``` + +5. Import data: + +```bash +console data:import:shipment-type-service-type +``` + +{% info_block warningBox "Verification" %} + +Make sure that entities have been imported into the `spy_shipment_type_service_type` database table. + +{% endinfo_block %} + +## 4) Set up behavior + +1. Enable the expanding of shipment type storage data with the service type by registering the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| ServiceTypeShipmentTypeStorageExpanderPlugin | Expands `ShipmentTypeStorageTransfer` with the service type data by `ShipmentTypeStorageTransfer.servicetype.uuid`. | | Spryker\Client\ShipmentTypeServicePointStorage\Plugin\ShipmentTypeStorage | +| ServiceTypeShipmentTypeStorageExpanderPlugin | Expands `ShipmentTypeStorageTransfer.serviceType` with the service type UUID. | | Spryker\Zed\ShipmentTypeServicePointStorage\Communication\Plugin\ShipmentTypeStorage | + +**src/Pyz/Client/ShipmentTypeStorage/ShipmentTypeStorageDependencyProvider.php** + +```php + + */ + protected function getShipmentTypeStorageExpanderPlugins(): array + { + return [ + new ServiceTypeShipmentTypeStorageExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ShipmentTypeStorage/ShipmentTypeStorageDependencyProvider.php** + +```php + + */ + protected function getShipmentTypeStorageExpanderPlugins(): array + { + return [ + new ServiceTypeShipmentTypeStorageExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `shipment-type` storage data is expanded with the service type UUID: + +1. Fill the `spy_shipment_type_service_point` tables with data. +2. Run the `console publish:trigger-events -r shipment_type` command. +3. Make sure that the `spy_shipment_type_storage.data` field includes the `service_type.uuid` data. + +{% endinfo_block %} + +2. Enable the relationship between `shipment-types` and `service-types` resources in the Storefront API by registering the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|--------------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| ServiceTypeByShipmentTypesResourceRelationshipPlugin | Adds the `service-types` resource as a relationship to `shipment-types`. | | Spryker\Glue\ShipmentTypeServicePointsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ShipmentTypesRestApiConfig::RESOURCE_SHIPMENT_TYPES, + new ServiceTypeByShipmentTypesResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can include the `service-types` relation in the `shipment-types` resource requests: +- `GET https://glue.mysprykershop.com/shipment-types?include=service-types` +- `GET https://glue.mysprykershop.com/shipment-types/{{shipment-type-uuid}}?include=service-types` + +{% endinfo_block %} + +3. Enable addresses to be set based on the selected service point and shipment type for the Storefront API checkout: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| ShipmentTypeServicePointCheckoutRequestAttributesValidatorPlugin | Checks that a valid service point is provided for each element in `RestCheckoutRequestAttributesTransfer.shipments` with an applicable shipment type. | | Spryker\Glue\ShipmentTypeServicePointsRestApi\Plugin\CheckoutRestApi | +| ShipmentTypeServicePointCheckoutRequestExpanderPlugin | Maps a provided service point address to a shipping address. | | Spryker\Glue\ShipmentTypeServicePointsRestApi\Plugin\CheckoutRestApi | +| MultiShipmentTypeServicePointShippingAddressValidationStrategyPlugin | Checks if a multi-shipment request is given and at least one of the provided shipment methods is related to an applicable shipment type. | | Spryker\Glue\ShipmentTypeServicePointsRestApi\Plugin\ShipmentsRestApi | +| SingleShipmentTypeServicePointShippingAddressValidationStrategyPlugin | Checks if a single-shipment request is given and the given shipment method is related to an applicable shipment type. | | Spryker\Glue\ShipmentTypeServicePointsRestApi\Plugin\ShipmentsRestApi | + +**src/Pyz/Glue/CheckoutRestApi/CheckoutRestApiDependencyProvider.php** + +```php + + */ + protected function getCheckoutRequestAttributesValidatorPlugins(): array + { + return [ + new ShipmentTypeServicePointCheckoutRequestAttributesValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Glue\CheckoutRestApiExtension\Dependency\Plugin\CheckoutRequestExpanderPluginInterface> + */ + protected function getCheckoutRequestExpanderPlugins(): array + { + return [ + new ShipmentTypeServicePointCheckoutRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/ShipmentsRestApi/ShipmentsRestApiDependencyProvider.php** + +```php + + */ + protected function getShippingAddressValidationStrategyPlugins(): array + { + return [ + new MultiShipmentTypeServicePointShippingAddressValidationStrategyPlugin(), + new SingleShipmentTypeServicePointShippingAddressValidationStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} +Make sure that validation plugins work as expected: + +1. Create a cart and add some items to it. +2. Send the `POST https://glue.mysprykershop.com/checkout-data` request with incorrect request body by not providing a service point for one of the shipment methods. + +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "{{cart_uuid}}", + "customer": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin" + }, + "shipments": [ + { + "idShipmentMethod": "{{id_shipment_method}}", + "items": [ + "{{item_group_key}}" + ] + } + ] + } + } +} +``` + +3. Check that the response contains information about the validation error. + +Make sure a service point address is set as a shipping address during checkout: + +1. Create a cart and add some items to it. +2. Send the `POST https://glue.mysprykershop.com/checkout` request: + +```json +{ + "data": { + "type": "checkout", + "attributes": { + "idCart": "{{cart_uuid}}", + "customer": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "Spencor", + "lastName": "Hopkin" + }, + "billingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "spencor", + "lastName": "hopkin", + "address1": "Seeburger Str. 270", + "address2": "210", + "address3": "", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "phone": "+380669455897", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "payments": [ + { + "dummyPaymentInvoice": { + "dateOfBirth": "08.04.1986" + }, + "paymentMethodName": "Invoice", + "paymentProviderName": "dummyPayment", + "paymentSelection": "dummyPaymentInvoice" + } + ], + "servicePoints": [ + { + "items": [ + "{{item_group_key}}" + ], + "idServicePoint": "{{id_service_point}}" + } + ], + "shipments": [ + { + "idShipmentMethod": "{{applicable_shipment_method_id}}", + "items": [ + "{{item_group_key}}" + ], + "shippingAddress": { + "salutation": "Mr", + "email": "spencor.hopkin@spryker.com", + "firstName": "spencor", + "lastName": "hopkin", + "address1": "Seeburger Str. 270", + "address2": "210", + "address3": "", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "Spryker", + "phone": "+380669455897", + "isDefaultShipping": true, + "isDefaultBilling": true + } + } + ] + } + } +} +``` + +3. In the database, check that `spy_sales_order_address` contains the service point address data for the created order. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-shopping-lists-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-shopping-lists-feature.md new file mode 100644 index 00000000000..89c14cfb829 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-shopping-lists-feature.md @@ -0,0 +1,1453 @@ + + +## Install feature core + +Follow the steps below to install feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Company Account | {{page.release_tag}} | [Install the Company account feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Customer Account Management](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/shopping-lists:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ShoppingList| vendor/spryker/shopping-list| +| ShoppingListNote|vendor/spryker/shopping-list-note| +| ShoppingListSession|vendor/spryker/shopping-list-session| + +{% endinfo_block %} + +### 2) Set up the database schema and transfer objects + +1. Adjust the schema definition so that entity changes can trigger events. + +| AFFECTED ENTITY | TRIGGERED EVENTS | +| --- | --- | +| spy_shopping_list | Entity.spy_shopping_list.create
    Entity.spy_shopping_list.update
    Entity.spy_shopping_list.delete | +| spy_shopping_list_item | Entity.spy_shopping_list_item.create
    Entity.spy_shopping_list_item.update
    Entity.spy_shopping_list_item.delete | +| spy_shopping_list_company_user | Entity.spy_shopping_list_company_user.create
    Entity.spy_shopping_list_company_user.update
    Entity.spy_shopping_list_company_user.delete | +| spy_shopping_list_company_business_unit | Entity.spy_shopping_list_company_business_unit.create`
    Entity.spy_shopping_list_company_business_unit.update
    Entity.spy_shopping_list_company_business_unit.delete | + +**src/Pyz/Zed/ShoppingList/Persistence/Propel/Schema/spy_shopping_list.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + + + + + +
    + + + + + +
    +
    +``` + +**src/Pyz/Zed/ShoppingListStorage/Persistence/Propel/Schema/spy_shopping_list_customer_storage.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database. + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_shopping_list | table | created | +| spy_shopping_list_item | table | created | +| spy_shopping_list_company_user | table | created | +| spy_shopping_list_company_business_unit | table | created| +| spy_shopping_list_company_business_unit_blacklist | table | created| +| spy_shopping_list_customer_storage | table | created | +| spy_shopping_list_permission_group | table | created | +| spy_shopping_list_permission_group_to_permission| table | created | +| spy_shopping_list_item_note | table | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + + Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | ---| +| ShoppingList | class | created | src/Generated/Shared/Transfer/ShoppingListTransfer | +| ShoppingListCollection | class | created | src/Generated/Shared/Transfer/ShoppingListCollectionTransfer | +| ShoppingListOverviewRequest | class | created | src/Generated/Shared/Transfer/ShoppingListOverviewRequestTransfer | +| ShoppingListOverviewResponse| class | created | src/Generated/Shared/Transfer/ShoppingListOverviewResponseTransfer | +| ShoppingListResponse | class | created | src/Generated/Shared/Transfer/ShoppingListResponseTransfer | +| ShoppingListCompanyUser | class | created | src/Generated/Shared/Transfer/ShoppingListCompanyUserTransfer | +| ShoppingListCompanyUserCollection | class | created | src/Generated/Shared/Transfer/ShoppingListCompanyUserCollectionTransfer | +| ShoppingListCompanyBusinessUnit| class | created |src/Generated/Shared/Transfer/ShoppingListCompanyBusinessUnitTransfer | +| ShoppingListCompanyBusinessUnitCollection| class | created | src/Generated/Shared/Transfer/ShoppingListCompanyBusinessUnitCollectionTransfer | +| ShoppingListCustomerStorage | class | created | src/Generated/Shared/Transfer/ShoppingListCustomerStorageTransfer | +| ShoppingListPermissionGroup | class | created | src/Generated/Shared/Transfer/ShoppingListPermissionGroupTransfer | +| ShoppingListPermissionGroupCollection | class | created | src/Generated/Shared/Transfer/ShoppingListPermissionGroupCollectionTransfer| +| ShoppingListAddToCartRequest | class | created | src/Generated/Shared/Transfer/ShoppingListAddToCartRequestTransfer | +| ShoppingListAddToCartRequestCollection | class | created | src/Generated/Shared/Transfer/ShoppingListAddToCartRequestCollectionTransfer | +| ShoppingListSession | class | created | src/Generated/Shared/Transfer/ShoppingListSessionTransfer | +| ShoppingListShareRequest | class | created | src/Generated/Shared/Transfer/ShoppingListShareRequestTransfer | +| ShoppingListShareResponse | class | created | src/Generated/Shared/Transfer/ShoppingListShareResponseTransfer | +| ShoppingListDismissRequest | class | created | src/Generated/Shared/Transfer/ShoppingListDismissRequestTransfer | +| ShoppingListCompanyBusinessUnitBlacklist | class | created | src/Generated/Shared/Transfer/ShoppingListCompanyBusinessUnitBlacklistTransfer | +| ShoppingListFromCartRequest | class | created | src/Generated/Shared/Transfer/ShoppingListFromCartRequestTransfer | +| ShoppingListItem| class | created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItemCollection | class | created | src/Generated/Shared/Transfer/ShoppingListItemCollectionTransfer | +| ShoppingListItemResponse | class | created | src/Generated/Shared/Transfer/ShoppingListItemResponseTransfer | +| ShoppingListPreAddItemCheckResponse | class | created | src/Generated/Shared/Transfer/ShoppingListPreAddItemCheckResponseTransfer | +| ItemCollection | class | created | src/Generated/Shared/Transfer/ItemCollectionTransfer | +| SpyShoppingListEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListEntityTransfer | +| SpyShoppingListCompanyUserEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListCompanyUserEntityTransfer | +| SpyShoppingListCompanyBusinessUnit | class | created | src/Generated/Shared/Transfer/SpyShoppingListCompanyBusinessUnitTransfer | +| SpyShoppingListCompanyBusinessUnitBlacklist | class | created | src/Generated/Shared/Transfer/SpyShoppingListItemEntityTransfer | +| SpyShoppingListCustomerStorageEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListCustomerStorageEntityTransfer | +| SpyShoppingListPermissionGroupEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListPermissionGroupEntityTransfer | +| SpyShoppingListPermissionGroupToPermissionEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListPermissionGroupToPermissionEntityTransfer | +| SpyShoppingListItemEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListItemEntityTransfer | +| SpyShoppingListItemNoteEntity | class | created | src/Generated/Shared/Transfer/SpyShoppingListItemEntityTransfer | + + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Trigger the following methods and make sure the prior events have been triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ShoppingList/Persistence/Base/SpyShoppingList.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ShoppingList/Persistence/Base/SpyShoppingListItem.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ShoppingList/Persistence/Base/SpyShoppingListCompanyUser.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | +| src/Orm/Zed/ShoppingList/Persistence/Base/SpyShoppingList.php | prepareSaveEventName()
    addSaveEventToMemory()
    addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Add translations + +1. Append the glossary: + +**src/data/import/glossary.csv** + +```yaml +customer.account.shopping_list.item.add.success,Item %sku% was added to the List.,en_US +customer.account.shopping_list.item.add.success,Artikel %sku% wurde zu der Liste hinzugefügt.,de_DE +customer.account.shopping_list.item.add.failed,Item %sku% could not be added to the List.,en_US +customer.account.shopping_list.item.add.failed,Artikel %sku% konnte der Liste nicht hinzugefügt werden.,de_DE +customer.account.shopping_list.create.success,"List '%name%' was created successfully.",en_US +customer.account.shopping_list.create.success,"Einkaufsliste '%name%' wurde erfolgreich erstellt.",de_DE +customer.account.shopping_list.error.cannot_update,Cannot update shopping list.,en_US +customer.account.shopping_list.error.cannot_update,Die Liste konnte nicht aktualisiert werden.,de_DE +customer.account.shopping_list.share.share_shopping_list_fail,This shopping list has been shared before with this entity,en_US +customer.account.shopping_list.share.share_shopping_list_fail,Diese Einkaufsliste wurde bereits mit dieser Entität geteilt,de_DE +customer.account.shopping_list.quick_add,"Quick add",en_US +customer.account.shopping_list.quick_add,"Schnell hinzufügen",de_DE +customer.account.shopping_list.quick_add.submit,Add,en_US +customer.account.shopping_list.quick_add.submit,Hinzufügen,de_DE +customer.account.shopping_list_item.error.product_not_active,Product is not active.,en_US +customer.account.shopping_list_item.error.product_not_active,Produkt ist nicht aktiv,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Configure export to the key-value store (Redis or Valkey) + +This step publishes tables on change (create, edit, delete) to the `spy_shopping_list_storage` and syncs the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ShoppingListStorageEventSubscriber | Registers the listeners that are responsible for publishing shopping list data based on changes to shopping lists and related entities. | | Spryker\Zed\ShoppingListStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ShoppingListStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +2. Register synchronization queue and synchronization error queue: + +
    + src/Pyz/Client/RabbitMq/RabbitMqConfig.php + +```php +append($this->createQueueOption(ShoppingListStorageConfig::SHOPPING_LIST_SYNC_STORAGE_QUEUE, ShoppingListStorageConfig::SHOPPING_LIST_SYNC_STORAGE_ERROR_QUEUE)); + + return $queueOptionCollection; + } + + /** + * @param string $queueName + * @param string $errorQueueName + * @param string $routingKey + * + * @return \Generated\Shared\Transfer\RabbitMqOptionTransfer + */ + protected function createQueueOption($queueName, $errorQueueName, $routingKey = 'error') + { + $queueOptionTransfer = new RabbitMqOptionTransfer(); + $queueOptionTransfer + ->setQueueName($queueName) + ->setDurable(true) + ->setType('direct') + ->setDeclarationType(Connection::RABBIT_MQ_EXCHANGE) + ->addBindingQueueItem($this->createQueueBinding($queueName)) + ->addBindingQueueItem($this->createErrorQueueBinding($errorQueueName, $routingKey)); + + return $queueOptionTransfer; + } + + /** + * @param string $queueName + * + * @return \Generated\Shared\Transfer\RabbitMqOptionTransfer + */ + protected function createQueueBinding($queueName) + { + $queueOptionTransfer = new RabbitMqOptionTransfer(); + $queueOptionTransfer + ->setQueueName($queueName) + ->setDurable(true) + ->setNoWait(false) + ->addRoutingKey(''); + + return $queueOptionTransfer; + } + + /** + * @param string $errorQueueName + * @param string $routingKey + * + * @return \Generated\Shared\Transfer\RabbitMqOptionTransfer + */ + protected function createErrorQueueBinding($errorQueueName, $routingKey) + { + $queueOptionTransfer = new RabbitMqOptionTransfer(); + $queueOptionTransfer + ->setQueueName($errorQueueName) + ->setDurable(true) + ->setNoWait(false) + ->addRoutingKey($routingKey); + + return $queueOptionTransfer; + } +} +``` + +
    + +#### Configure message processors + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all shopping list messages to sync with the key-value store (Redis or Valkey) and marks messages as failed in case of an error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Add synchronization plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ShoppingListSynchronizationDataBulkPlugin | Populates empty storage table with data. | | Spryker\Zed\ShoppingListStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php +(hint: `CompanyUser.CustomerTransferCompanyUserExpanderPlugin`) | Spryker\Zed\ShoppingList\Communication\Plugin | +| ShoppingListItemProductConcreteActiveAddItemPreCheckPlugin | Checks if the product concrete within the shopping list item is active. | ) | Spryker\Zed\ShoppingList\Communication\Plugin | +| ShoppingListItemNoteToItemCartNoteMapperPlugin | Maps shopping list item notes to cart item notes when creating a cart out of a shopping list. | | Spryker\Client\ShoppingListNote\Plugin | +| ItemCartNoteToShoppingListItemNoteMapperPlugin | Maps cart item notes to shopping list notes when creating shopping list out of a cart. | | Spryker\Zed\ShoppingListNote\Communication\Plugin | +| ShoppingListItemNoteBeforeDeletePlugin | Deletes a shopping list item note before deleting a shopping list item. | | Spryker\Zed\ShoppingListNote\Communication\Plugin | +| ShoppingListItemNoteExpanderPlugin |Expands `ShoppingListItemTransfer` with `ShoppingListItemNoteTransfer`. | | Spryker\Zed\ShoppingListNote\Communication\Plugin | +| ShoppingListItemNotePostSavePlugin |Saves a shopping list item note when saving a shopping list item. | | Spryker\Zed\ShoppingListNote\Communication\Plugin | +| ShoppingListCollectionOutdatedPlugin |Used to determine if the shopping list collection needs to be updated, according to the last update date. | | Spryker\Zed\ShoppingListNote\Communication\Plugin | + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + +src/Pyz/Client/ShoppingList/ShoppingListDependencyProvider.php + +```php + + +**src/Pyz/Client/ShoppingListSession/ShoppingListSessionDependencyProvider.php** + +```php + +src/data/import/glossary.csv + +```yaml +customer.account.shopping_list.overview.edit,Edit,en_US +customer.account.shopping_list.overview.edit,Bearbeiten,de_DE +shopping_list.item_note,Note:,en_US +shopping_list.item_note,Hinweis:,de_DE +shopping_list.item_note.add,"Add a note +",en_US +shopping_list.item_note.add,"Füg ein Notiz hinzu +",de_DE +customer.account.shopping_list.overview.share,Share,en_US +customer.account.shopping_list.overview.share,Teilen,de_DE +customer.account.shopping_list.overview.print,Print,en_US +customer.account.shopping_list.overview.print,Drucken,de_DE +customer.account.shopping_list.overview.delete,Delete,en_US +customer.account.shopping_list.overview.delete,Löschen,de_DE +customer.account.shopping_list.overview.owner,Owner,en_US +customer.account.shopping_list.overview.owner,Inhaber,de_DE +customer.account.shopping_list.access,Access,en_US +customer.account.shopping_list.access,Zugriff,de_DE +company.account.company_user,Users,en_US +company.account.company_user,Benutzer,de_DE +customer.account.shopping_list.delete.warning,Warning,en_US +customer.account.shopping_list.delete.warning,Warnung,de_DE +customer.account.shopping_list.delete.you_are_trying_to_delete_shopping_list,"You are trying to delete shopping list %name%",en_US +customer.account.shopping_list.delete.you_are_trying_to_delete_shopping_list,"Sie versuchen die Einkaufsliste%name% zu löschen",de_DE +customer.account.shopping_list.delete.it_belongs_to_follow,It belongs to following,en_US +customer.account.shopping_list.delete.it_belongs_to_follow,Es gehört zu folgenden,de_DE +company.account.business_unit,Business Units,en_US +company.account.business_unit,Geschäftseinheiten,de_DE +customer.account.shopping_list.delete.it_wll_be_deleted_from_all_of_them,It will be deleted from all of them,en_US +customer.account.shopping_list.delete.it_wll_be_deleted_from_all_of_them,Es wird von allen gelöscht,de_DE +customer.account.shopping_list.overview.name,Name,en_US +customer.account.shopping_list.overview.name,Name,de_DE +customer.account.shopping_list.overview.created_date,Date of creation,en_US +customer.account.shopping_list.overview.created_date,Erstelldatum,de_DE +customer.account.shopping_list.overview.item_count,Number of Items,en_US +customer.account.shopping_list.overview.item_count,Anzahl der Teile,de_DE +customer.account.shopping_list.overview.actions,Actions,en_US +customer.account.shopping_list.overview.actions,Aktion,de_DE +customer.account.shopping_list.overview.add_shopping_list_to_cart,Add selected to,en_US +customer.account.shopping_list.overview.add_shopping_list_to_cart,Hinzufügen zu,de_DE +customer.account.shopping_list.product,Product,en_US +customer.account.shopping_list.product,Produkt,de_DE +customer.account.shopping_list.price,Price,en_US +customer.account.shopping_list.price,Preis,de_DE +customer.account.shopping_list.quantity,Quantity,en_US +customer.account.shopping_list.quantity,Anzahl,de_DE +customer.account.shopping_list.availability,Availability,en_US +customer.account.shopping_list.availability,Verfügbarkeit,de_DE +product_alternative_widget.not_applicable,N/A,en_US +product_alternative_widget.not_applicable,N/A,de_DE +customer.account.shopping_list.available,Available,en_US +customer.account.shopping_list.available,Verfügbar,de_DE +customer.account.shopping_list.not_available,Currently not available,en_US +customer.account.shopping_list.not_available,Nicht verfügbar,de_DE +customer.account.shopping_list.remove,Remove,en_US +customer.account.shopping_list.remove,Löschen,de_DE +customer.account.shopping_list.permissions.FULL_ACCESS,Full access,en_US +customer.account.shopping_list.permissions.FULL_ACCESS,Voller Zugriff,de_DE +customer.account.shopping_list.permissions.READ_ONLY,Read only,en_US +customer.account.shopping_list.permissions.READ_ONLY,Schreibgeschützt,de_DE +customer.account.shopping_list.permissions.NO_ACCESS,No access,en_US +customer.account.shopping_list.permissions.NO_ACCESS,Kein Zugriff,de_DE +customer.account.shopping_list,Shopping lists,en_US +customer.account.shopping_list,Einkaufslisten,de_DE +customer.account,Customer Account,en_US +customer.account,Mein Konto,de_DE +customer.account.shopping_list.create_from_cart.title,Add to shopping list,en_US +customer.account.shopping_list.create_from_cart.title,Auf die Merkliste,de_DE +customer.account.shopping_list.shopping_cart,Shopping cart,en_US +customer.account.shopping_list.shopping_cart,Einkaufswagen,de_DE +customer.account.shopping_list.create_from_cart.form_title,'%cart_name%' add to shopping list,en_US +customer.account.shopping_list.create_from_cart.form_title,'%cart_name%' auf die Merkliste,de_DE +customer.account.shopping_list.share.from.share,Share,en_US +customer.account.shopping_list.share.from.share,Teilen,de_DE +customer.account.shopping_list.share.from.share_with,Share Shopping List with:,en_US +customer.account.shopping_list.share.from.share_with,Einkaufsliste teilen mit:,de_DE +customer.account.shopping_list.share.select_company_business_unit,Select business unit,en_US +customer.account.shopping_list.share.select_company_business_unit,Wählen Sie die Geschäftseinheit aus,de_DE +customer.account.shopping_list.share.select_company_user,Select user,en_US +customer.account.shopping_list.share.select_company_user,Benutzer wählen,de_DE +customer.account.print_shopping_list.title.shopping_list_id,Shopping List ID,en_US +customer.account.print_shopping_list.title.shopping_list_id,Einkaufslisten-ID,de_DE +customer.account.print_shopping_list.title.shopping_list_name,Shopping List Name,en_US +customer.account.print_shopping_list.title.shopping_list_name,Name der Einkaufsliste,de_DE +customer.account.print_shopping_list.table.barcode,Barcode,en_US +customer.account.print_shopping_list.table.barcode,Barcode,de_DE +customer.account.print_shopping_list.table.product_sku,Product SKU,en_US +customer.account.print_shopping_list.table.product_sku,Produkt Artikelnummer,de_DE +customer.account.print_shopping_list.table.product_name,Product name,en_US +customer.account.print_shopping_list.table.product_name,Produktname,de_DE +customer.account.print_shopping_list.table.default_price,Default price,en_US +customer.account.print_shopping_list.table.default_price,Standardpreis,de_DE +customer.account.print_shopping_list.table.note,Note,en_US +customer.account.print_shopping_list.table.note,Notiz,de_DE +customer.account.shopping_list.print_shopping_list,Print,en_US +customer.account.shopping_list.print_shopping_list,Drucken,de_DE +customer.account.shopping_list.add_selected_items_to_cart,Add selected items to cart,en_US +customer.account.shopping_list.add_selected_items_to_cart,Ausgewählte Artikel in den Warenkorb legen,de_DE +customer.account.shopping_list.add_all_available_to_cart,Add all available products to cart,en_US +customer.account.shopping_list.add_all_available_to_cart,Alle Produkte zum Warenkorb hinzufügen,de_DE +customer.account.shopping_list.empty,Currently there are no items in your shopping list.,en_US +customer.account.shopping_list.empty,Zurzeit ist kein Produkt auf deiner Einkaufsliste.,de_DE +customer.account.shopping_list.overview.dismiss,Dismiss,en_US +customer.account.shopping_list.overview.dismiss,Ablehnen,de_DE +customer.account.shopping_list.overview.warning,Warning,en_US +customer.account.shopping_list.overview.warning,Warnung,de_DE +shopping_list_page.dismiss_confirmation.trying_to_dismiss,"Are you sure that you what to dismiss shopping list?",en_US +shopping_list_page.dismiss_confirmation.trying_to_dismiss,"Sind Sie sicher, dass Sie den Einkaufsliste ablehnen wollen?",de_DE +shopping_list_page.dismiss.failed,Shopping list was not dismissed.,en_US +shopping_list_page.dismiss.failed,Einkaufsliste wurde nicht abgelehnt,de_DE +shopping_list_page.dismiss.success,Shopping list was dismissed successfully.,en_US +shopping_list_page.dismiss.success,"Einkaufsliste wurde erfolgreich abgelehnt.",de_DE +general.cancel.button,Cancel,en_US +general.cancel.button,Abbrechen,de_DE +customer.account.shopping_list.overview.add_new,Add new shopping list,en_US +customer.account.shopping_list.overview.add_new,Neue Einkaufsliste hinzufügen,de_DE +forms.submit-btn,Submit,en_US +forms.submit-btn,Speichern,de_DE +general.back.button,Back,en_US +general.back.button,Zurück,de_DE +shopping_list.cart.items_add.success,Items were added to the List,en_US +shopping_list.cart.items_add.success,Artikel wurden zu der Liste hinzugefügt,de_DE +shopping_list.cart.items_add.failed,Items could not be added to the List,en_US +shopping_list.cart.items_add.failed,Artikel konnten der Liste nicht hinzugefügt werden,de_DE +customer.account.shopping_list.item.remove.success,Product removed successfully.,en_US +customer.account.shopping_list.item.remove.success,Produkt erfolgreich entfernt.,de_DE +customer.account.shopping_list.item.remove.failed,Product was not removed from shopping list.,en_US +customer.account.shopping_list.item.remove.failed,Artikel wurde nicht von der Einkaufsliste entfernt,de_DE +customer.account.shopping_list.item.added_to_cart.failed,Item was not added to cart.,en_US +customer.account.shopping_list.item.added_to_cart.failed,Produkt konnte nicht in den Warenkorb gelegt werden.,de_DE +customer.account.shopping_list.item.added_to_cart,Item added to cart successfully.,en_US +customer.account.shopping_list.item.added_to_cart,Produkt erfolgreich in den Warenkorb gelegt.,de_DE +customer.account.shopping_list.item.added_all_available_to_cart.failed,Not all items are added to cart successfully,en_US +customer.account.shopping_list.item.added_all_available_to_cart.failed,Nicht alle Artikel konnten erfolgreich in den Warenkorb gelegt werden.,de_DE +customer.account.shopping_list.item.added_all_available_to_cart,Available items added to cart successfully.,en_US +customer.account.shopping_list.item.added_all_available_to_cart,Verfügbare Produkte wurden erfolgreich in den Warenkorb gelegt.,de_DE +customer.account.shopping_list.item.select_item,At least one product should be selected.,en_US +customer.account.shopping_list.item.select_item,Mindestens ein Produkt sollte ausgewählt werden.,de_DE +customer.account.shopping_list.delete.success,Shopping list deleted successfully.,en_US +customer.account.shopping_list.delete.success,Einkaufsliste erfolgreich gelöscht.,de_DE +customer.account.shopping_list.delete.failed,Shopping list was not deleted.,en_US +customer.account.shopping_list.delete.failed,Einkaufsliste konnte nicht gelöscht.,de_DE +shopping_list_page.dismiss.failed,Shopping list was not dismissed.,en_US +shopping_list_page.dismiss.failed,Einkaufsliste wurde nicht abgelehnt,de_DE +shopping_list_page.dismiss.success,Shopping list was dismissed successfully.,en_US +shopping_list_page.dismiss.success,"Einkaufsliste wurde erfolgreich abgelehnt.",de_DE +customer.account.shopping_list.updated,Shopping list updated successfully,en_US +customer.account.shopping_list.updated,Einkaufsliste erfolgreich aktualisiert.,de_DE +customer.account.shopping_list.items.added_to_cart.not_found,There are no products available for adding to cart.,en_US +customer.account.shopping_list.items.added_to_cart.not_found,Es sind keine Produkte zum Hinzufügen in den Warenkorb verfügbar.,de_DE +customer.account.shopping_list.items.added_to_cart.failed,Items were not added to cart.,en_US +customer.account.shopping_list.items.added_to_cart.failed,Produkte konnten nicht in den Warenkorb gelegt werden.,de_DE +customer.account.shopping_list.items.added_to_cart,Items added to cart successfully.,en_US +customer.account.shopping_list.items.added_to_cart,Produkte erfolgreich in den Warenkorb gelegen.,de_DE +customer.account.shopping_list.share.share_shopping_list_successful,Sharing shopping list was successful,en_US +customer.account.shopping_list.share.share_shopping_list_successful,Einkaufsliste wurde erfolgreich geteilt,de_DE +customer.account.shopping_list.clear.success,Shopping list was successfully cleared.,en_US +customer.account.shopping_list.clear.success,Einkaufsliste wurde erfolgreich gelöscht.,de_DE +customer.account.shopping_list.share.error.one_id_required,Please choose either customer or business unit to share the shopping list with,en_US +customer.account.shopping_list.share.error.one_id_required,"Bitte wählen Sie entweder einen Kunden oder eine Geschäftseinheit aus, mit welchem Sie die Einkaufsliste teilen möchten.",de_DE +cart.add-to-shopping-list.form.add_new,Add new shopping list,en_US +cart.add-to-shopping-list.form.add_new,Einkaufsliste erstellen,de_DE +cart.add-to-shopping-list.form.placeholder,Enter name of a new shopping list,en_US +cart.add-to-shopping-list.form.placeholder,Geben Sie den Namen einer neuen Einkaufsliste ein,de_DE +cart.add-to-shopping-list.form.error.empty_name,"Please, enter shopping list name",en_US +cart.add-to-shopping-list.form.error.empty_name,Bitte geben Sie den Namen der Einkaufsliste ein,de_DE +customer.account.shopping_list.create_from_cart.choose_shopping_list,Choose shopping list,en_US +customer.account.shopping_list.create_from_cart.choose_shopping_list,Wählen Sie die Einkaufsliste,de_DE +customer.account.shopping_list.create_from_cart.name,Name,en_US +customer.account.shopping_list.create_from_cart.name,Name,de_DE +customer.account.shopping_list.item.not_added,Failed to add product to shopping list.,en_US +customer.account.shopping_list.item.not_added,Hinzufügen zur Einkaufsliste fehlgeschlagen.,de_DE +widget.shopping_list.multi_cart.to_shopping_list,To shopping list,en_US +widget.shopping_list.multi_cart.to_shopping_list,Zur Einkaufsliste,de_DE +shopping_list_widget.items,Items,en_US +shopping_list_widget.items,Artikel,de_DE +shopping_list_widget.full_access,Full access,en_US +shopping_list_widget.full_access,Ohne Einschränkung,de_DE +shopping_list_widget.read_only,Read only,en_US +shopping_list_widget.read_only,Schreibgeschützt,de_DE +widget.shopping_list.multi_cart.to_shopping_list,To shopping list,en_US +widget.shopping_list.multi_cart.to_shopping_list,Zur Einkaufsliste,de_DE +shopping_list.item_quantity,Anzahl,de_DE +shopping_list.item_quantity,Quantity,en_US +page.detail.add-to-shopping-list,Add to Shopping list,en_US +page.detail.add-to-shopping-list,In die Einkaufsliste,de_DE +shopping_list.shopping_list,Shopping list,en_US +shopping_list.shopping_list,Einkaufsliste,de_DE +shopping_list.no_lists_created,You do not have any shopping lists yet.,en_US +shopping_list.no_lists_created,Du hast noch keine Einkaufslisten.,de_DE +shopping_list.create_new_list,Create new list,en_US +shopping_list.create_new_list,Erstelle eine neue Liste,de_DE +product_quick_add_widget.form.quantity,"# Qty",en_US +product_quick_add_widget.form.quantity,"# Anzahl",de_DE +product_quick_add_widget.form.error.quantity.required,"Quantity must be at least 1",en_US +product_quick_add_widget.form.error.quantity.required,"Die Anzahl muss mindestens 1 sein",de_DE +product_quick_add_widget.form.error.quantity.max_value_constraint,"Provided quantity is too high",en_US +product_quick_add_widget.form.error.quantity.max_value_constraint,"Die Menge ist leider zu groß",de_DE +product_quick_add_widget.form.error.redirect_route_empty,"Redirect router should not be empty",en_US +product_quick_add_widget.form.error.redirect_route_empty,"Redirect Router kann nicht leer sein",de_DE +product_quick_add_widget.form.error.sku.empty,"SKU should not be empty",en_US +product_quick_add_widget.form.error.sku.empty,"SKU kann nicht leer sein",de_DE +``` + + + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up router plugins + +Register the following route provider plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|--------------------------------------------------------------|---------------|------------------------------------------------------------------------------------------| +| ShoppingListPageRouteProviderPlugin | Adds the shopping list routes to the Yves application. | | \SprykerShop\Yves\ShoppingListPage\Plugin\Router | +| ShoppingListWidgetRouteProviderPlugin | Adds the shopping list widget routes to the Yves application. | | \SprykerShop\Yves\ShoppingListWidget\Plugin\Router\ShoppingListWidgetRouteProviderPlugin | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new ShoppingListPageRouteProviderPlugin(), + new ShoppingListWidgetRouteProviderPlugin(), + new ShoppingListWidgetAsyncRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure shopping lists are available at `https://mysprykershop.com/shopping-list`. + +After completing the installation, make sure you can perform shopping list actions like add or remove. + +Make sure you can add items to a shopping list from the Cart page with the cart actions AJAX mode enabled. + +{% endinfo_block %} + + +### 4) Set up quick order plugin + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|----------------------------------------------------------|---------------|------------------------------------------------------------| +| ShoppingListQuickOrderFormHandlerStrategyPlugin | Adds products to shopping lists using the quick order feature. | | \SprykerShop\Yves\ShoppingListWidget\Plugin\QuickOrderPage | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getQuickOrderFormHandlerStrategyPlugins(): array + { + return [ + new ShoppingListQuickOrderFormHandlerStrategyPlugin(), #ShoppingListFeature + ]; + } + +} +``` + +### 5) Set up the shopping list note form plugin + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|---------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| ShoppingListItemNoteFormExpanderPlugin | Adds the `ShoppingListItemNote` form fields to builder using `ShoppingListItemNoteForm`. | | SprykerShop\Yves\ShoppingListNoteWidget\Plugin\ShoppingListPage | + +**Yves/ShoppingListPage/ShoppingListPageDependencyProvider.php** + +```php + + */ + protected function getShoppingListItemFormExpanderPlugins(): array + { + return [ + new ShoppingListItemNoteFormExpanderPlugin() + ]; + } + +} +``` + + +### 6) Set up widgets + +1. Enable global widgets: + +| WIDGET | DESCRIPTION | NAMESPACE | +|----------------------------------|-------------------------------------------------------------------------------------------------------------------|------------------------------------------------| +| ShoppingListNavigationMenuWidget | Shows a top navigation submenu containing all of the current logged-in customer shopping lists. | SprykerShop\Yves\ShoppingListWidget\Widget | +| ShoppingListMenuItemWidget | Shows customer shopping lists in the customer account navigation side menu. | SprykerShop\Yves\ShoppingListWidget\Widget | +| AddToShoppingListWidget | Enables customers to add a product with an SKU to one of the shopping lists they have write access to. | SprykerShop\Yves\ShoppingListWidget\Widget | +| ShoppingListItemNoteWidget | Enables customers to create, save, and remove notes from shopping list items. | SprykerShop\Yves\ShoppingListNoteWidget\Widget | +| ShoppingListDismissWidget | Enables customers to dismiss a shopping list that was shared. | SprykerShop\Yves\ShoppingListPage\Widget | +| ShoppingListSubtotalWidget | Enables customers to see the shopping list subtotal price. | SprykerShop\Yves\ShoppingListWidget\Widget | +| CreateShoppingListFromCartWidget | Enables customers to move products from cart to a shopping list. | SprykerShop\Yves\ShoppingListWidget\Widget | +| AddItemsToShoppingListWidget | Displays available shopping lists. | SprykerShop\Yves\ShoppingListWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + ['en_US'], +]; + +// >> BACKOFFICE + +// ACL: Allow or disallow URLs for Zed GUI for ALL users +$config[AclConstants::ACL_DEFAULT_RULES] = [ + [ + 'bundle' => 'security-gui', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], + [ + 'bundle' => 'acl', + 'controller' => 'index', + 'action' => 'denied', + 'type' => 'allow', + ], +]; + +// Security Blocker Back Office user +$config[SecurityBlockerBackofficeConstants::BACKOFFICE_USER_BLOCKING_TTL] = 900; +$config[SecurityBlockerBackofficeConstants::BACKOFFICE_USER_BLOCK_FOR_SECONDS] = 360; +$config[SecurityBlockerBackofficeConstants::BACKOFFICE_USER_BLOCKING_NUMBER_OF_ATTEMPTS] = 9; + +``` + +{% info_block warningBox "Verification" %} + +After finishing the installation, make sure the following applies: +- Entries without a translation for a language with a configured fallback are translated into the fallback language. +- The translation cache is stored under the configured directory. +- Translations are found based on the configured path pattern. + +{% endinfo_block %} + +### Set up an authentication strategy + +The following authentication strategies are available by default: + +- `\Spryker\Zed\SecurityOauthUser\SecurityOauthUserConfig::AUTHENTICATION_STRATEGY_CREATE_USER_ON_FIRST_LOGIN`: If a user doesn't exist, it's created automatically based on the data from an external service. +- `\Spryker\Zed\SecurityOauthUser\SecurityOauthUserConfig::AUTHENTICATION_STRATEGY_ACCEPT_ONLY_EXISTING_USERS`: Accepts only existing users for authentication. + + +**src/Pyz/Zed/SecurityOauthUser/SecurityOauthUserConfig.php** + +```php + + + + + Maintenance + fa-wrench + + + + Storage index + storage-gui + maintenance + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure you can go to **Maintenance > Storage**. + +{% endinfo_block %} + +### Configure the `User` module to execute post-save plugins + +**src/Pyz/Zed/User/UserConfig.php** + +```php +`UserPasswordResetMailTypeBuilderPlugin` is enabled. | Spryker\Zed\UserPasswordResetMail\Communication\Plugin\UserPasswordReset | +| ZedOauthUserSecurityPlugin | Extends the `User` firewall with an authenticator and user provider if exists; otherwise, introduces the `OauthUser` firewall in the security service. | Must be connected after or instead of `ZedUserSecurityPlugin`. | \Spryker\Zed\SecurityOauthUser\Communication\Plugin\Security | +| BackofficeUserSecurityBlockerConfigurationSettingsExpanderPlugin | Expands security blocker configuration settings with the Back Office user security configuration. | | \Spryker\Client\SecurityBlockerBackoffice\Plugin\SecurityBlocker | +| SecurityBlockerBackofficeUserEventDispatcherPlugin | Adds a listener to log failed Back Office login attempts. Denies access in case of exceeding the limit of failed login attempts. | | \Spryker\Zed\SecurityBlockerBackofficeGui\Communication\Plugin\EventDispatcher | + +
    + src/Pyz/Zed/Application/ApplicationDependencyProvider.php + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new ZedSecurityApplicationPlugin(), + + // web profiler plugin should be after the security plugin. + new WebProfilerApplicationPlugin(), + ] + + return $plugins; + } + + /** + * @return list<\Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface> + */ + protected function getBackofficeApplicationPlugins(): array + { + $plugins = [ + new ZedSecurityApplicationPlugin(), + ]; + + return $plugins; + } + + /** + * @return list<\Spryker\Shared\ApplicationExtension\Dependency\Plugin\ApplicationPluginInterface> + */ + protected function getBackendGatewayApplicationPlugins(): array + { + return [ + new ZedSecurityApplicationPlugin(), + ]; + } +} +``` + + + +**src/Pyz/Zed/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ZedUserSessionHandlerSecurityPlugin(), + new ZedUserSecurityPlugin(), + new ZedOauthUserSecurityPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/SecurityBlocker/SecurityBlockerDependencyProvider.php** + +```php + + */ + protected function getSecurityBlockerConfigurationSettingsExpanderPlugins(): array + { + return [ + new BackofficeUserSecurityBlockerConfigurationSettingsExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/EventDispatcher/EventDispatcherDependencyProvider.php** + +```php + + */ + protected function getEventDispatcherPlugins(): array + { + return [ + new SecurityBlockerBackofficeUserEventDispatcherPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that `https://mysprykershop.com/security-oauth-user/login` redirects you to the login page with the *Authentication failed!* message displayed. + +{% endinfo_block %} + +**src/Pyz/Zed/UserPasswordReset/UserPasswordResetDependencyProvider.php** + +```php + + */ + public function getUserPasswordResetRequestStrategyPlugins(): array + { + return [ + new MailUserPasswordResetRequestStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new UserPasswordResetMailTypeBuilderPlugin(), + ]; + } +} +``` + +2. Rebuild Zed router and Twig caches: + +```bash +console router:cache:warm-up +console twig:cache:warmer +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- The Back Office login page and other pages that require authentication are accessible. +- On the Back Office login page, clicking the **Forgot password?** button opens the password reset form. +- You receive a password reset email after submitting the password reset form. + +{% endinfo_block %} + +### 4.2 Set up translation across the Back Office + +1. Activate the following plugins for translation: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|--------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------| +| TranslationPlugin | Translates the flash messages provided by the Messenger module. | | Spryker\Zed\Translator\Communication\Plugin\Messenger | +| TranslatorTwigPlugin | Extends Twig with Symfony's translation extension and Spryker's translator logic. | | Spryker\Zed\Translator\Communication\Plugin\Twig | +| UserLocaleLocalePlugin | Provides the locale of a logged-in user as a current locale. | Enable `\Spryker\Zed\Locale\Communication\Plugin\Application\LocaleApplicationPlugin` that sets the locale of the application based on the provided locale plugin. | Spryker\Zed\UserLocale\Communication\Plugin\Locale | +| AssignUserLocalePreSavePlugin | Expands `UserTransfer` before saving it with a locale ID and name. | | Spryker\Zed\UserLocale\Communication\Plugin\User | +| LocaleUserExpanderPlugin | Expands `UserTransfer` with a locale ID and name after reading it from the database. | | Spryker\Zed\UserLocale\Communication\Plugin\User | +| UserLocaleFormExpanderPlugin | Expands the edit user profile form with a locale field. | | Spryker\Zed\UserLocaleGui\Communication\Plugin | + + +2. Execute the registered installer plugins and install infrastructural data: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Ensure that the command has done the following: +- Cleaned the previous translation cache in the translation folder, which is `data/{YOUR_STORE}/cache/Zed/translation` by default. +- Generated translation cache files like `catalogue.{YOUR_LOCALE}.{RANDOM_STRING}.php` and `catalogue.{YOUR_LOCALE}.{RANDOM_STRING}.php.meta` in the translation folder, which is `data/{YOUR_STORE}/cache/Zed/translation` by default. + +{% endinfo_block %} + +**src/Pyz/Zed/Messenger/MessengerDependencyProvider.php** + +```php + + */ + protected function getTranslationPlugins(): array + { + return [ + /** + * TranslationPlugin needs to be after other translator plugins. + */ + new TranslationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new TranslatorTwigPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that the `trans` and `transChoice` Twig filters work and use translations from the configured translation files. + +{% endinfo_block %} + +**src/Pyz/Zed/Locale/LocaleDependencyProvider.php** + +```php +src/Pyz/Zed/User/UserDependencyProvider.php + +```php + + */ + protected function getUserFormExpanderPlugins(): array + { + return [ + new UserLocaleFormExpanderPlugin(), + ]; + } + + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserPreSavePluginInterface> + */ + protected function getUserPreSavePlugins(): array + { + return [ + new AssignUserLocalePreSavePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserExpanderPluginInterface> + */ + protected function getUserExpanderPlugins(): array + { + return [ + new LocaleUserExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Users > Users**. +2. Click **Add New User**. + On the **Create new User** page, make sure that the **Interface language*** field exists. + +{% endinfo_block %} + +### 4.3 Add translations + +Append the glossary according to your configuration: + +data/import/common/common/glossary.csv + +```yaml +security_blocker_backoffice_gui.error.account_blocked,"Too many log in attempts from your address. Please wait %minutes% minutes before trying again.",en_US +security_blocker_backoffice_gui.error.account_blocked,"Warten Sie bitte %minutes% Minuten, bevor Sie es erneut versuchen.",de_DE +``` + +### 4.4 Set up audit logging + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------------------------------|---------------|--------------------------------------------| +| CurrentUserDataRequestProcessorPlugin | Adds the username and user UUID from the current request to the log data. | | Spryker\Zed\User\Communication\Plugin\Log | + +**src/Pyz/Zed/Log/LogDependencyProvider.php** + +```php + + */ + protected function getZedSecurityAuditLogProcessorPlugins(): array + { + return [ + new CurrentUserDataRequestProcessorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getMerchantPortalSecurityAuditLogProcessorPlugins(): array + { + return [ + new CurrentUserDataRequestProcessorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Find the logs under the configured log file paths and make sure the audit logs data is expanded with username and +user UUID from a current request. + +{% endinfo_block %} + +### 4.5 Set up console commands for managing the translation cache + +1. Set up the following console commands: + +| COMMAND | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------|--------------------------------------|-----------------|----------------------------------------------| +| CleanTranslationCacheConsole | Cleans the translation cache for Zed. | | Spryker\Zed\Translator\Communication\Console | +| GenerateTranslationCacheConsole | Generates the translation cache for Zed. | | Spryker\Zed\Translator\Communication\Console | + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new CleanTranslationCacheConsole(), + new GenerateTranslationCacheConsole(), + ]; + + return $commands; + } +} +``` + +2. Regenerate translation cache: + +```bash +console translator:clean-cache +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +Ensure that the command has done the following: +- Cleaned the previous translation cache in the translation folder, which is `data/{YOUR_STORE}/cache/Zed/translation` by default. +- Generated translator cache files like `catalogue.{YOUR_LOCALE}.{RANDOM_STRING}.php` and `catalogue.{YOUR_LOCALE}.{RANDOM_STRING}.php.meta` in the translation folder, which is `data/{YOUR_STORE}/cache/Zed/translation` by default. + +{% endinfo_block %} + +## 5) Set up installers + +An installer is a one-time runner that installs essential elements of an application. Usually, they're run a single time because they can rewrite parameters on subsequent runs. Installers shouldn't be confused with data importers, which can be run multiple times with incremental results. + +In this case, installers set up required database data and Back Office configuration. This is mostly helpful for development and local installations, which are regularly installed from scratch. For example, you might want a default Back Office user to be able to access Back Office after a new project installation. + +Installer plugins should be added to `src/Pyz/Zed/Installer/InstallerDependencyProvider.php`. + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins() + { + return [ + new TranslatorInstallerPlugin(), + ]; + } +} +``` + +List of helpful installers: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|-----------------------------------------------------------------------|---------------|--------------------------------------------| +| TranslatorInstallerPlugin | Regenerates translation caches for all locales of a current store. | | Spryker\Zed\Translator\Communication\Plugin | +| UserInstallerPlugin | Provides default users for the Back Office access. Username: `admin@spryker.com`. Password: `change123`.| | Spryker\Zed\User\Communication\Plugin | +| AclInstallerPlugin | Installs default groups and roles and promotes the default Back Office user to the root group from `UserInstallerPlugin`. | | Spryker\Zed\Acl\Communication\Plugin | diff --git a/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-back-office-warehouse-user-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-back-office-warehouse-user-management-feature.md new file mode 100644 index 00000000000..ca12b722b82 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-back-office-warehouse-user-management-feature.md @@ -0,0 +1,62 @@ +This document describes how to install the Spryker Core Back Office + Warehouse User Management feature. + +## Install feature core + +Follow the steps below to install the Picking App feature API. + +## Prerequisites + +To start feature integration, integrate the required features and Glue APIs: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Warehouse User Management | {{page.release_tag}} | [Install the Warehouse User Management feature](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html) | + +## 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------| +| UserByWarehouseUserAssignmentResourceRelationshipPlugin | Adds the `users` resource as a relationship to the `warehouse-user-assignments` resource. | | Spryker\Glue\UsersBackendApi\Plugin\GlueJsonApiConvention | + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + WarehouseUsersBackendApiConfig::RESOURCE_TYPE_WAREHOUSE_USER_ASSIGNMENTS, + new UserByWarehouseUserAssignmentBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that when the `users` resource is included as a query string, the `warehouse-user-assignments` resource returns it as a relationship: `https://glue-backend.mysprykershop.com/warehouse-user-assignments?include=users`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-feature.md new file mode 100644 index 00000000000..eee144db687 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-spryker-core-feature.md @@ -0,0 +1,1550 @@ + + + +This document describes how to install the [Spryker Core feature](/docs/pbc/all/miscellaneous/latest/spryker-core-feature-overview/spryker-core-feature-overview.html). + +{% info_block infoBox "Included features" %} + + +This guide expects the basic feature to be installed. This guide adds the following functionalities: +- Vault +- Redis Session +- Store GUI +- Blocking too many failed login attempts +- Audit logging +- Rule engine + +{% endinfo_block %} + +## Install feature core + +Follow the steps below to install the Spryker Core feature core. + +### 1) Install the required modules + +```bash +composer require "spryker-feature/spryker-core":"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|-----------------------------------------------------| +| Log | vendor/spryker/log | +| LogExtension | vendor/spryker/log-extension | +| UtilEncryption | vendor/spryker/util-encryption | +| Vault | vendor/spryker/vault | +| Router | vendor/spryker/router | +| SessionExtension | vendor/spryker/session-extension | +| SessionRedis | vendor/spryker/session-redis | +| SessionFile | vendor/spryker/session-redis | +| StoreGui | vendor/spryker/store-gui | +| StorageExtension | vendor/spryker/storage-extension | +| StorageRedis | vendor/spryker/storage-redis | +| SecuritySystemUser | vendor/spryker/security-system-user | +| SecurityBlocker | vendor/spryker/security-blocker | +| SecurityBlockerExtension | vendor/spryker/security-blocker-extension | +| SecurityBlockerStorefrontCustomer | vendor/spryker/security-blocker-storefront-customer | +| RuleEngine | vendor/spryker/rule-engine | +| RuleEngineExtension | vendor/spryker/rule-engine-extension | + +{% endinfo_block %} + +### 2) Set up configuration + +Set up the following configuration. + +#### Optional: Set up Router + +Router is a core module that mapps URLs to specific controllers and actions. The router cache is used to improve the performance of the routing system by caching the routing information. + +To set up Router, add the following configuration: + +```php + [ + 'token' => getenv('SPRYKER_ZED_REQUEST_TOKEN') ?: "ADJUST THIS TOKEN TO A SECURE ONE", + ], +]; +``` + +#### Set up Vault + +Add the configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------|----------------------|----------------------| +| VaultConstants::ENCRYPTION_KEY | Encrypts vault data. | Spryker\Shared\Vault | + +{% info_block errorBox "Security measures" %} + +Make sure that, in production environments, the encryption key is secured. This key protects all the data stored in the Vault. + +{% endinfo_block %} + + +**config/Shared/config_local.php** + +```php +store("secret_category", "secret_id", $secret); + +assertSame($secret, $vaultFacade->retrieve("secret_category", "secret_id")); +``` + +#### Configure key-value storage (Redis or Valkey) + +Add the configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| SessionRedisConstants::LOCKING_TIMEOUT_MILLISECONDS | Defines the key-value storage (Redis or Valkey) lock timeout in milliseconds. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::LOCKING_RETRY_DELAY_MICROSECONDS | Defines the retry delay between the attempts to acquire key-value storage (Redis or Valkey) lock in microseconds. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::LOCKING_LOCK_TTL_MILLISECONDS | Defines the time to live for key-value storage (Redis or Valkey) lock in milliseconds. | Spryker\Shared\SessionRedis | +| SessionFileConstants::ZED_SESSION_FILE_PATH | Defines the filesystem path for storing Zed sessions. | Spryker\Shared\SessionFile | +| SessionRedisConstants::ZED_SESSION_REDIS_PASSWORD | Defines the password for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_HOST | Defines the host for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_PORT | Defines the protocol for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_DATABASE | Defines the database for connecting to key-value storage (Redis or Valkey) as a Zed session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs for connecting to key-value storage (Redis or Valkey) a as Zed session storage in replication mode. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::ZED_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options for connecting to key-value storage (Redis or Valkey) as a Zed session storage in replication mode. | Spryker\Shared\SessionRedis | +| StorageRedisConstants::STORAGE_REDIS_PROTOCOL | Defines the protocol for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PASSWORD | Defines the password for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_HOST | Defines the host for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PORT | Defines the port for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_DATABASE | Defines the database for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_PERSISTENT_CONNECTION | Enables and disables data persistence for a key-value storage (Redis or Valkey) connection. | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_DATA_SOURCE_NAMES | Specifies an array of DSN strings for a multi-instance cluster and replication key-value storage (Redis or Valkey) setup. | Spryker\Shared\StorageRedis | +| StorageRedisConstants::STORAGE_REDIS_CONNECTION_OPTIONS | Specifies an array of client options for connecting to key-value storage (Redis or Valkey). | Spryker\Shared\StorageRedis | + +#### Configure general storage + +{% info_block warningBox "" %} + +Make sure to replace all the values in the following examples with real values. + +{% endinfo_block %} + +In case of a multi-instance key-value storage (Redis or Valkey) setup, add the following configuration: + +**config/Shared/config_default.php** + +```php + 'sentinel', + 'service' => 'mymaster', + 'parameters' => [ + 'password' => 'secret', + 'database' => 2, + ], +]; +``` + +{% info_block warningBox "" %} + +This configuration is used exclusively. In other words, you can't use any other key-value storage (Redis or Valkey) configuration. + +{% endinfo_block %} + +In case of a single-instance key-value storage (Redis or Valkey) setup, add the following configuration: + +**config/Share/config_default.php** + +```php + $tags + * + * @return void + */ + public function addAuditLog(string $action, array $tags): void + { + $this->getAuditLogger( + (new AuditLoggerConfigCriteriaTransfer())->setChannelName('security'), + )->info('user logged in', ['tags' => ['user_logged_in']]); + } +} +``` + +{% endinfo_block %} + +**config/Shared/config_default.php** + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new ZedSecurityApplicationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ZedSystemUserSecurityPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Session/SessionDependencyProvider.php** + +```php + + */ + protected function getSessionHandlerPlugins(): array + { + return [ + new SessionHandlerRedisProviderPlugin(), + new SessionHandlerRedisLockingProviderPlugin(), + new SessionHandlerFileProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SessionExtension\Dependency\Plugin\SessionLockReleaserPluginInterface> + */ + protected function getZedSessionLockReleaserPlugins(): array + { + return [ + new ZedSessionRedisLockReleaserPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Storage/StorageDependencyProvider.php** + +```php + + */ + protected function getSecurityBlockerConfigurationSettingsExpanderPlugins(): array + { + return [ + new CustomerSecurityBlockerConfigurationSettingsExpanderPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Go to `https://zed.mysprykershop.com` and make sure Zed boots up without errors. + +{% endinfo_block %} + +
    + src/Pyz/Glue/Log/LogDependencyProvider.php + +```php + + */ + protected function getGlueSecurityAuditLogHandlerPlugins(): array + { + return [ + new AuditLogTagFilterBufferedStreamHandlerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogHandlerPluginInterface> + */ + protected function getGlueBackendSecurityAuditLogHandlerPlugins(): array + { + return [ + new AuditLogTagFilterBufferedStreamHandlerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getGlueSecurityAuditLogProcessorPlugins(): array + { + return [ + new PsrLogMessageProcessorPlugin(), + new EnvironmentProcessorPlugin(), + new ServerProcessorPlugin(), + new AuditLogRequestProcessorPlugin(), + new ResponseProcessorPlugin(), + new AuditLogMetaDataProcessorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getGlueBackendSecurityAuditLogProcessorPlugins(): array + { + return [ + new PsrLogMessageProcessorPlugin(), + new EnvironmentProcessorPlugin(), + new ServerProcessorPlugin(), + new AuditLogRequestProcessorPlugin(), + new ResponseProcessorPlugin(), + new AuditLogMetaDataProcessorPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/Log/LogDependencyProvider.php + +```php + + */ + protected function getZedSecurityAuditLogHandlerPlugins(): array + { + return [ + new AuditLogTagFilterBufferedStreamHandlerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogHandlerPluginInterface> + */ + protected function getMerchantPortalSecurityAuditLogHandlerPlugins(): array + { + return [ + new AuditLogTagFilterBufferedStreamHandlerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getZedSecurityAuditLogProcessorPlugins(): array + { + return [ + new PsrLogMessageProcessorPlugin(), + new EnvironmentProcessorPlugin(), + new ServerProcessorPlugin(), + new AuditLogRequestProcessorPlugin(), + new ResponseProcessorPlugin(), + new AuditLogMetaDataProcessorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getMerchantPortalSecurityAuditLogProcessorPlugins(): array + { + return [ + new PsrLogMessageProcessorPlugin(), + new EnvironmentProcessorPlugin(), + new ServerProcessorPlugin(), + new AuditLogRequestProcessorPlugin(), + new ResponseProcessorPlugin(), + new AuditLogMetaDataProcessorPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- Logs data has been expanded with the registered plugins: environment, server, request. +- Log type sections exist and contain the corresponding data. + +{% endinfo_block %} + +2. Set up the console commands: + +| COMMAND | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| StorageRedisExportRdbConsole | Exports a key-value storage (Redis or Valkey) database as an .rdb file. | | Spryker\Zed\StorageRedis\Communication\Console | +| StorageRedisImportRdbConsole | Imports an rdb file. | | Spryker\Zed\StorageRedis\Communication\Console | + +**Pyz\Zed\Console\ConsoleDependencyProvider** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new StorageRedisExportRdbConsole(), + new StorageRedisImportRdbConsole(), + ]; + + return $commands; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify that `StorageRedisExportRdbConsole` and `StorageRedisImportRdbConsole` are activated, check if the `vendor/bin/console storage:redis:export-rdb` and `vendor/bin/console storage:redis:import-rdb` console commands exist. + +{% endinfo_block %} + +3. Build the navigation cache: + +```bash +vendor/bin/console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +To verify that the navigation for Store GUI is successfully generated, make sure that, in the Back Office, the **Administration**>**Stores** navigation item is displayed. + +{% endinfo_block %} + +### 6) Set up Publish and Synchronize + +RabbitMQ is used for event handling in Spryker. The default event queues are used to handle events that are published by the system. + +1. Enable the default event queues in the RabbitMQ configuration: + + +
    +Pyz/Client/RabbitMq/RabbitMqConfig.php + +```php + QueueNameFoo, (Queue and error queue will be created: QueueNameFoo and QueueNameFoo.error) + * QueueNameBar => [ + * RoutingKeyFoo => QueueNameBaz, // (Additional queues can be defined by several routing keys) + * ], + * + * @see https://www.rabbitmq.com/tutorials/amqp-concepts.html + * + * @return array + */ + protected function getQueueConfiguration(): array + { + return [ + EventConstants::EVENT_QUEUE => [ + EventConfig::EVENT_ROUTING_KEY_RETRY => EventConstants::EVENT_QUEUE_RETRY, + EventConfig::EVENT_ROUTING_KEY_ERROR => EventConstants::EVENT_QUEUE_ERROR, + ], + GlossaryStorageConfig::SYNC_STORAGE_TRANSLATION, + UrlStorageConstants::URL_SYNC_STORAGE_QUEUE, + $this->get(LogConstants::LOG_QUEUE_NAME), + // ... + ]; + } + + /** + * @return string + */ + protected function getDefaultBoundQueueNamePrefix(): string + { + return 'error'; + } +} +``` + +
    + +2. Add `PublisherTriggerEventsConsole` to `ConsoleDependencyProvider`: + +**Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + // ... + new PublisherTriggerEventsConsole(), + // ... + ]; + // ... + } +} +``` + +1. Add `PublisherSubscriber` to `EventDependencyProvider`: + +**src/Pyz/Zed/Event/EventDependencyProvidder.php** + +```php +add(new GlossaryStorageEventSubscriber()); + $eventSubscriberCollection->add(new UrlStorageEventSubscriber()); + // ... + $eventSubscriberCollection->add(new PublisherSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +## Install feature frontend + +Follow the steps below to install the Spryker Core feature frontend. + +### 1) Install the required modules + +```bash +composer require "spryker-feature/spryker-core": "{{page.release_tag}}" +``` + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------------| +| SessionFileConstants::YVES_SESSION_FILE_PATH | Defines the filesystem path for storing Yves sessions. | Spryker\Shared\SessionFile | +| SessionRedisConstants::YVES_SESSION_REDIS_SCHEME | Defines a scheme protocol for key-value storage (Redis or Valkey) connection when used as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_PASSWORD | Defines the password used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_HOST | Defines the host used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_PORT | Defines the port used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_DATABASE | Defines the database used while connecting to key-value storage (Redis or Valkey) as Yves session storage. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_DATA_SOURCE_NAMES | Defines the list of DSNs used while connecting to key-value storage (Redis or Valkey) as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | +| SessionRedisConstants::YVES_SESSION_REDIS_CLIENT_OPTIONS | Defines the list of client options used while connecting to key-value storage (Redis or Valkey) as Yves session storage in replication mode. | Spryker\Shared\SessionRedis | +| LogConstants::LOG_FILE_PATH_YVES | Absolute path to the log file to be used by the stream handler. | Spryker\Shared\Log | +| LogConstants::AUDIT_LOGGER_CONFIG_PLUGINS_YVES | Provides plugin class names that contain the configuration for audit logging for the Yves application. | Spryker\Shared\Log | + +**config/Shared/config_default.php** + +```php + 'sentinel', + 'service' => 'mymaster', + 'parameters' => [ + 'password' => 'secret', + 'database' => 1, + ], +]; +``` + + +3. In case of a single-instance key-value storage (Redis or Valkey) setup, add the following configuration: + +{% info_block warningBox "" %} + +Make sure you don't use the same key-value storage (Redis or Valkey) database for Yves and Zed sessions. + +{% endinfo_block %} + +**config/Share/config_default.php** + +```php + $tags + * + * @return void + */ + public function addAuditLog(string $action, array $tags): void + { + $this->getAuditLogger( + (new AuditLoggerConfigCriteriaTransfer())->setChannelName('security'), + )->info('user logged in', ['tags' => ['user_logged_in']]); + } +} +``` + +{% endinfo_block %} + + +
    + src/Pyz/Yves/SessionRedis/SessionRedisConfig.php + +```php + + */ + public function getSessionRedisLockingExcludedUrlPatterns(): array + { + return [ + '/^.*\/error-page\/*.*$/', + '/^.*\/health-check$/', + ]; + } + + /** + * @return list + */ + public function getSessionRedisLockingExcludedBotUserAgents(): array + { + return [ + 'Googlebot', + 'bingbot', + 'Baiduspider', + 'YandexBot', + 'DuckDuckBot', + 'Sogou', + 'ia_archiver', + 'facebookexternalhit', + 'Twitterbot', + 'LinkedInBot', + 'Slackbot', + 'WhatsApp', + 'Discordbot', + 'AhrefsBot', + 'Applebot', + 'msnbot', + 'MJ12bot', + 'SEMrushBot', + 'PetalBot', + 'SeznamBot', + 'AdsBot-Google', + 'crawler', + 'spider', + 'robot', + 'bot/', + ]; + } +} +``` + +
    + + +### 3) Add translations + +1. Append the glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +error.429,Zu viele Anfragen,de_DE +error.429,Too Many Requests,en_US +security_blocker_page.error.account_blocked,"Too many log in attempts from your address. Please wait %minutes% minutes before trying again.",en_US +security_blocker_page.error.account_blocked,"Warten Sie bitte %minutes% Minuten, bevor Sie es erneut versuchen.",de_DE +``` + +2. Add the glossary keys: + +```bash +console data:import:glossary +``` + +{% info_block warningBox "Verification" %} + +Ensure that, in the database, the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 4) Set up behavior + +Install the plugins and modules: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------| +| SessionHandlerRedisProviderPlugin | Provides a key-value storage (Redis or Valkey)-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionRedis\Plugin\Session | +| SessionHandlerConfigurableRedisLockingProviderPlugin() | Provides a configurable, key-value storage (Redis or Valkey)-based session handler for Yves sessions, offering fine-grained control over session locking. | | Spryker\Yves\SessionFile\Plugin\Session | +| SessionHandlerFileProviderPlugin | Provides a file-based session handler implementation for Yves sessions. | | Spryker\Yves\SessionFile\Plugin\Session | +| YvesSessionRedisLockReleaserPlugin | Removes a session lock from key-value storage (Redis or Valkey) by session ID for Yves sessions. It's used for removing previously created locks by running `session:lock:remove`. | | Spryker\Zed\SessionRedis\Communication\Plugin\Session | +| SecurityBlockerCustomerEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the customers' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | +| SecurityBlockerAgentEventDispatcherPlugin | Adds subscribers for request and authentication failure events to control the agents' failed login attempts. | | SprykerShop\Yves\SecurityBlockerPage\Plugin\EventDispatcher | +| AuditLogTagFilterBufferedStreamHandlerPlugin | Provides the Monolog handler. | | Spryker\Yves\Log\Plugin\Log | +| PsrLogMessageProcessorPlugin | Processes a record's message according to PSR-3 rules. | | Spryker\Yves\Log\Plugin\Processor | +| EnvironmentProcessorPlugin | Adds environment related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | +| ServerProcessorPlugin | Adds service related data to the log data. | | Spryker\Yves\Log\Plugin\Processor | +| AuditLogRequestProcessorPlugin | Adds request related data to the log data. | | Spryker\Yves\Log\Plugin\Log | +| ResponseProcessorPlugin | Removes response data from the log data. | | Spryker\Yves\Log\Plugin\Processor | +| AuditLogMetaDataProcessorPlugin | Adds the `audit_log` log type to the log data. | | Spryker\Yves\Log\Plugin\Log | +| UrlSessionRedisLockingExclusionConditionPlugin | Skips key-value storage (Redis or Valkey) session locking when the request URI matches any of the URL patterns from the module configuration. | | Spryker\Yves\SessionRedis\Plugin\SessionRedisLockingExclusion | +| BotSessionRedisLockingExclusionConditionPlugin | Skips key-value storage (Redis or Valkey) session locking when the request's User-Agent header contains any of the patterns returned by the module configuration. | | Spryker\Yves\SessionRedis\Plugin\SessionRedisLockingExclusion | + +**src/Pyz/Yves/Session/SessionDependencyProvider.php** + +```php + + */ + protected function getSessionHandlerPlugins(): array + { + return [ + new SessionHandlerRedisProviderPlugin(), + new SessionHandlerConfigurableRedisLockingProviderPlugin(), + new SessionHandlerFileProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Session/SessionDependencyProvider.php** + +```php + + */ + protected function getYvesSessionLockReleaserPlugins(): array + { + return [ + new YvesSessionRedisLockReleaserPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/EventDispatcher/EventDispatcherDependencyProvider.php** + +```php + + */ + protected function getEventDispatcherPlugins(): array + { + return [ + new SecurityBlockerCustomerEventDispatcherPlugin(), + new SecurityBlockerAgentEventDispatcherPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Validation" %} + +1. Make sure is activated by + +2. To verify , + + +| Plugin | Verification | +|------|-------------| +| `SecurityBlockerCustomerEventDispatcherPlugin` | Attempt to sign in as a customer with incorrect credentials. After making the number of attempts specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCKING_NUMBER_OF_ATTEMPTS`, the account should get blocked for the period of time specified in `SecurityBlockerConstants::SECURITY_BLOCKER_BLOCK_FOR`. Consequent login attempts should return the `429 Too many requests` error. | +| `SecurityBlockerAgentEventDispatcherPlugin` | Repeat the prior verification using an agent agent account. The security behavior should match the configuration you've set up in [Set up configuration](#set-up-configuration). | + + +{% endinfo_block %} + + +
    + src/Pyz/Yves/Log/LogDependencyProvider.php + +```php +use Spryker\Yves\Log\LogDependencyProvider as SprykerLogDependencyProvider; +use Spryker\Yves\Log\Plugin\Log\AuditLogMetaDataProcessorPlugin; +use Spryker\Yves\Log\Plugin\Log\AuditLogRequestProcessorPlugin; +use Spryker\Yves\Log\Plugin\Log\AuditLogTagFilterBufferedStreamHandlerPlugin; +use Spryker\Yves\Log\Plugin\Processor\EnvironmentProcessorPlugin; +use Spryker\Yves\Log\Plugin\Processor\PsrLogMessageProcessorPlugin; +use Spryker\Yves\Log\Plugin\Processor\ResponseProcessorPlugin; +use Spryker\Yves\Log\Plugin\Processor\ServerProcessorPlugin; + +class LogDependencyProvider extends SprykerLogDependencyProvider +{ + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogHandlerPluginInterface> + */ + protected function getYvesSecurityAuditLogHandlerPlugins(): array + { + return [ + new AuditLogTagFilterBufferedStreamHandlerPlugin(), + ]; + } + + /** + * @return list<\Spryker\Shared\Log\Dependency\Plugin\LogProcessorPluginInterface> + */ + protected function getYvesSecurityAuditLogProcessorPlugins(): array + { + return [ + new PsrLogMessageProcessorPlugin(), + new EnvironmentProcessorPlugin(), + new ServerProcessorPlugin(), + new AuditLogRequestProcessorPlugin(), + new ResponseProcessorPlugin(), + new AuditLogMetaDataProcessorPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- The logs data has been expanded with the registered plugins: environment, server, request +- The log type section exists and contains the corresponding data + +{% endinfo_block %} + +**src/Pyz/Yves/SessionRedis/SessionRedisDependencyProvider.php** + +```php + + */ + protected function getSessionRedisLockingExclusionConditionPlugins(): array + { + return [ + new UrlSessionRedisLockingExclusionConditionPlugin(), + new BotSessionRedisLockingExclusionConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Validation" %} + +Make sure that the key-value storage (Redis or Valkey) session locking is skipped for the URLs and user agents specified in the configuration. +- For example, if the URL `/error-page` is accessed, the key-value storage (Redis or Valkey) session locking should be skipped. +- If the user agent `Googlebot` is used, the key-value storage (Redis or Valkey) session locking should be skipped. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-based-catalog-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-based-catalog-feature.md new file mode 100644 index 00000000000..501dc6136be --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-based-catalog-feature.md @@ -0,0 +1,327 @@ +This document describes how you install the Self-Service Portal (SSP) asset-based catalog feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features the asset-based catalog depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) + +## Prerequisites + +Before you start the installation, make sure you have installed the following features: + + +| FEATURE | VERSION | INSTALLATION GUIDE | +|---------------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + + +## Configure event triggering for catalog entities + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model_to_product_list.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model_to_ssp_asset.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +## Apply database schema changes + +Apply schema updates: + +```bash +console propel:install +``` + + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_model_to_product_list` +- `spy_ssp_asset_to_ssp_model` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Set up behavior + + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------|-----------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| SspModelAssetWritePublisherPlugin | Publishes SSP model data by `SpySspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetToModelWritePublisherPlugin | Publishes SSP model data by `SpySspAssetToSspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SspAssetToModelWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToSspModel` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getSspAssetStoragePlugins(), + $this->getSspAssetSearchPlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetStoragePlugins(): array + { + return [ + new SspModelAssetWritePublisherPlugin(), + new SspAssetToModelWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetSearchPlugins(): array + { + return [ + new SearchSspAssetToModelWritePublisherPlugin(), + ]; + } +} +``` + + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------|-------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| SspAssetInfoForItemWidget | On the cart page, renders asset information for a cart item. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspItemAssetSelectorWidget | On the product details page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspCartItemAssetSelectorWidget | On the cart page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| AssetCompatibilityLabelWidget | Displays the compatibility label for assets. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetFilterNameWidget | Displays the asset name in search result section. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetFilterWidget | Display asset data. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspAssetInfoForItemWidget::class, + AssetCompatibilityLabelWidget::class, + SspAssetFilterNameWidget::class, + SspAssetFilterWidget::class, + SspCartItemAssetSelectorWidget::class, + SspItemAssetSelectorWidget::class, + ]; + } +} +``` + +## Import the Model relation data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/product_list_to_concrete_product.csv** + +```csv +product_list_key,concrete_sku +ssp-pl-001,service-001-1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------------|----------|-----------|---------------|---------------------------------------------------------------------| +| product_list_key | ✓ | string | ssp-pl-001 | Unique identifier for the product list used as a reference. | +| concrete_sku | ✓ | string | service-001-1 | SKU of the concrete product to be associated with the product list. | + +**data/import/common/common/ssp_model_asset.csv** + +```csv +model_reference,asset_reference +MDL--1,AST--3 +MDL--2,AST--4 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------|----------|-----------|--------------|------------------------------------------------------------------| +| model_reference | ✓ | string | MDL--1 | Unique identifier for the model used as a reference. | +| asset_reference | ✓ | string | AST--3 | Unique identifier for the asset to be associated with the model. | + +**data/import/common/common/ssp_model_product_list.csv** + +```csv +model_reference,product_list_key +MDL--2,ssp-pl-001 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------------|----------|-----------|--------------|-------------------------------------------------------------------------| +| model_reference | ✓ | string | MDL--2 | Unique identifier for the model used as a reference. | +| product_list_key | ✓ | string | ssp-pl-001 | Unique identifier for the product list to be associated with the model. | + +## Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal + - data_entity: ssp-model-asset + source: data/import/common/common/ssp_model_asset.csv + - data_entity: ssp-model-product-list + source: data/import/common/common/ssp_model_product_list.csv +``` + +## Register data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------------------------------| +| SspModelAssetDataImportPlugin | Imports ssp asset model relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| SspModelProductListDataImportPlugin | Imports ssp asset model relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspModelAssetDataImportPlugin(), + new SspModelProductListDataImportPlugin(), + ]; + } +} +``` + + +### Import the data + +{% info_block infoBox "Prerequisites" %} + +Before importing the data, make sure you have imported demo data for the following entities: + +- [Import product data](/docs/dg/dev/data-import/latest/importing-product-data-with-a-single-file.html#single-csv-file-for-combined-product-data-import) - required for `product-abstract` and `product-concrete` data imports +- [Import product lists](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html#import-product-lists) - required for `product-list` data import +- [Import product lists product concrete relation](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html#import-product-lists) - required for `product-list-product-concrete` data import + +{% endinfo_block %} + +```bash +console data:import product-list +console data:import product-abstract +console data:import product-concrete +console data:import product-list-product-concrete +console data:import ssp-model-product-list +console data:import ssp-asset +console data:import ssp-model-asset +console data:import merchant-product-offer +``` + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-management-feature.md new file mode 100644 index 00000000000..5256fcfaa16 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-asset-management-feature.md @@ -0,0 +1,1446 @@ +This document describes how to install the Self-Service Portal (SSP) Asset Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Asset Management depends on + +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Defines the Flysystem service configuration for handling asset file storage. This configuration specifies the adapter, such as local or S3, and the root path for storing asset files, ensuring they're managed securely and efficiently. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::BASE_URL_YVES | Specifies the base URL for the Yves frontend. This URL is used to generate absolute links to asset-related pages on the Storefront, ensuring correct navigation and resource loading. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::ASSET_STORAGE_NAME | Defines the unique identifier for the Flysystem storage instance used for SSP assets. This name links the asset management feature to the specific filesystem configuration defined in `FileSystemConstants::FILESYSTEM_SERVICE`. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE | Defines the default file max size per file upload during ssp asset creation and update. | SprykerFeature\Zed\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | +| SelfServicePortalConfig::getAssetStatusClassMap() | Defines a map that associates asset status values, such as `pending` or `approved`, with their corresponding CSS class names. This is used in the Back Office and Storefront to visually represent the status of each asset, for example, with colored labels. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET | Defines queue name as used for processing SSP asset storage messages. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET | Defines queue name as used for processing ssp asset search synchronization. | SprykerFeature\Shared\SelfServicePortal | + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\FileSystem\FileSystemConstants; +use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConstants; +use Spryker\Service\FlysystemAws3v3FileSystem\Plugin\Flysystem\Aws3v3FilesystemBuilderPlugin; + +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'ssp-asset-image' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_ASSETS_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_ASSETS_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_ASSETS_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-asset-image', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::BASE_URL_YVES] = 'https://your-yves-url'; +$config[SelfServicePortalConstants::ASSET_STORAGE_NAME] = 'ssp-asset-image'; +$config[SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE] = getenv('SPRYKER_SSP_DEFAULT_FILE_MAX_SIZE') ?: '10M'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_ASSETS_KEY` - AWS S3 access key for SSP assets storage +- `SPRYKER_S3_SSP_ASSETS_SECRET` - AWS S3 secret key for SSP assets storage +- `SPRYKER_S3_SSP_ASSETS_BUCKET` - AWS S3 bucket name for SSP assets storage +- `AWS_REGION` - AWS region +- `SPRYKER_SSP_DEFAULT_FILE_MAX_SIZE` - Maximum file size for SSP asset uploads (defaults to `10M` if not set) + +{% endinfo_block %} + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getAssetStatusClassMap(): array + { + return [ + 'pending' => 'label-warning', + 'in_review' => 'label-primary', + 'approved' => 'label-success', + 'deactivated' => 'label-danger', + ]; + } + + + /** + * @return string|null + */ + public function getSspAssetSearchSynchronizationPoolName(): ?string + { + return SynchronizationConfig::DEFAULT_SYNCHRONIZATION_POOL_NAME; + } +} +``` + +## Configure synchronization queues + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET, + SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET, + ]; + } +} +``` + + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_ASSET => new SynchronizationStorageQueueMessageProcessorPlugin(), + SelfServicePortalConfig::QUEUE_NAME_SYNC_SEARCH_SSP_ASSET => new SynchronizationSearchQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Set up the queue infrastructure: + +```bash +vendor/bin/console queue:setup +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the RabbitMQ management interface, the following queues are available: +- `sync.search.ssp_asset` +- `sync.search.ssp_asset.error` +- `sync.storage.ssp_asset` +- `sync.storage.ssp_asset.error` +{% endinfo_block %} + +## Configure ElasticSearch supported source indexes + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + protected const SUPPORTED_SOURCE_IDENTIFIERS = [ + 'ssp_asset', + ]; +} +``` + +**src/Pyz/Zed/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php + + */ + public function getJsonSchemaDefinitionDirectories(): array + { + $directories = parent::getJsonSchemaDefinitionDirectories(); + + $directory = sprintf('%s/vendor/spryker-feature/*/src/*/Shared/*/Schema/', APPLICATION_ROOT_DIR); + if (glob($directory, GLOB_NOSORT | GLOB_ONLYDIR)) { + $directories[] = $directory; + } + + $directories[] = sprintf('%s/src/Pyz/Shared/*/Schema/', APPLICATION_ROOT_DIR); + + return $directories; + } +} +``` + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetSearchResultFormatterPlugins(): array + { + return [ + new SspAssetSearchResultFormatterPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getSspAssetSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetSearchQueryExpanderPlugin(), + ]; + } +} + +``` + +## Configure the event triggering for the Asset entity + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_asset.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_asset` +- `spy_ssp_asset_file` +- `spy_ssp_asset_to_company_business_unit` +- `spy_sales_order_item_ssp_asset` +- `spy_ssp_asset_storage` +- `spy_ssp_asset_search` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Assets` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Assets + self-service-portal + list-asset + index + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Back Office, the **Customer portal** > **Assets** section is available. + +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------------| +| ViewCompanySspAssetPermissionPlugin | Grants permission to view assets of an entire company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspAssetPermissionPlugin | Grants permission to view assets within the user's business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| CreateSspAssetPermissionPlugin | Grants permission to create assets. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| UpdateSspAssetPermissionPlugin | Grants permission to update assets. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| UnassignSspAssetPermissionPlugin | Grants permission to unassign assets from business units. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides routes for the SSP asset management pages on the Storefront. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes into a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SspAssetPreAddToCartPlugin | When a product is added to cart, maps the asset reference from the request to the item transfer object. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| SspAssetItemExpanderPlugin | Expands cart items with asset data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| SspAssetOrderExpanderPlugin | Expands an order with asset data for all its items. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetOrderItemsPostSavePlugin | After an order is placed, saves the relations between order items and assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetOrderItemExpanderPlugin | Expands individual order items with asset data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspAssetPublisherTriggerPlugin | Retrieves SSP assets by offset and limit. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher | +| SspAssetQueryExpanderPlugin | Expands search query with asset-specific product filtering based on SSP asset reference. | | SprykerFeature\Client\SelfServicePortal\Plugin\Catalog | +| SspAssetWritePublisherPlugin | Publishes SSP asset data by `SpySspAsset` entity events to the storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetToCompanyBusinessUnitWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToCompanyBusinessUnit` entity events to the storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Search | +| SspAssetWritePublisherPlugin | Publishes SSP asset data by `SpySspAsset` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SearchSspAssetToCompanyBusinessUnitWritePublisherPlugin | Publishes SSP asset data by `SpySspAssetToCompanyBusinessUnit` entity events to the search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspAsset\Storage | +| SspAssetListSynchronizationDataBulkRepositoryPlugin | Retrieves SSP assets by offset and limit for synchronization to a storage. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\Storage | +| SearchSspAssetListSynchronizationDataBulkRepositoryPlugin | Retrieves SSP assets by offset and limit for synchronization to a search engine. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\SspAsset\Search | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspAssetPermissionPlugin(), + new ViewBusinessUnitSspAssetPermissionPlugin(), + new UpdateSspAssetPermissionPlugin(), + new UnassignSspAssetPermissionPlugin(), + new CreateSspAssetPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspAssetPermissionPlugin(), + new ViewBusinessUnitSspAssetPermissionPlugin(), + new UpdateSspAssetPermissionPlugin(), + new UnassignSspAssetPermissionPlugin(), + new CreateSspAssetPermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new SspAssetPreAddToCartPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new SspAssetItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new SspAssetOrderExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new SspAssetOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPluginInterface> + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new SspAssetOrderItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getSspAssetStoragePlugins(), + $this->getSspAssetSearchPlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new SspAssetPublisherTriggerPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetStoragePlugins(): array + { + return [ + new SspAssetWritePublisherPlugin(), + new SspAssetToCompanyBusinessUnitWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getSspAssetSearchPlugins(): array + { + return [ + new SearchSspAssetWritePublisherPlugin(), + new SearchSspAssetToCompanyBusinessUnitWritePublisherPlugin(), + ]; + } +} +``` + + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +|array<\Spryker\Client\Search\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function createCatalogSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetQueryExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new SspAssetListSynchronizationDataBulkRepositoryPlugin(), + new SearchSspAssetListSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +Setup search updates + +```bash +console search:setup +``` + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|-----------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| SspAssetListWidget | Renders a list of assets on the **My Assets** page in the Customer Account. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAssetMenuItemWidget | Renders the **My Assets** menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspItemAssetSelectorWidget | On the product details page, renders an autocomplete form field for selecting an asset. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspListMenuItemWidget | Renders the menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspAssetListWidget::class, + SspAssetMenuItemWidget::class, + SspListMenuItemWidget::class, + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **View company assets** + - **View business unit assets** + - **Update assets** + - **Unassign business unit ssp assets** + - **Create assets** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Assets** menu item is displayed. +2. Go to **Customer Account** > **Assets**. +3. Click **Create Asset**. +4. Upload an image and fill in the required fields. +5. Click **Save**. + Make sure the asset gets saved and this opens the asset details page. +6. Go to **Customer Account** > **Assets**. + Make sure the the asset you've created is displayed in the list. +7. Go to **Customer Account** > **Dashboard**. + Make sure the **Assets** widget displays the asset you've created. +8. Log out and log in with a company user without the role you've created. + Make sure the **Assets** menu item is not displayed, and you can't access the **Assets** page. + +{% endinfo_block %} + +## Enable the Backend API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| SspAssetsBackendResourcePlugin | Provides the GET, POST and PATCH endpoints for SSP assets. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueBackendApiApplication | +| SspAssetSearchResultFormatterPlugin | Formats search ssp asset search result. | | SprykerFeature\Client\SelfServicePortal\Plugin\Elasticsearch\ResultFormatter | +| SspAssetSearchQueryExpanderPlugin | Expands SSP asset search query with permissions, sorting and search criterias. | | SprykerFeature\Client\SelfServicePortal\Plugin\Elasticsearch\Query | + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetSearchResultFormatterPlugins(): array + { + return [ + new SspAssetSearchResultFormatterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getSspAssetSearchQueryExpanderPlugins(): array + { + return [ + new SspAssetSearchQueryExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new SspAssetsBackendResourcePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can manage `ssp-assets` resources as a Back Office user: + + +1. Get the access token by sending a `POST` request to the token endpoint with back office user credentials: + +`POST https://glue-backend.mysprykershop.com/token` + +```http +POST https://glue-backend.mysprykershop.com/token HTTP/2.0 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 1051 + +grant_type=password&username={username}&password={password} +``` + +2. Use the access token to access the `ssp-assets` backend endpoint: + +
    + GET https://glue-backend.mysprykershop.com/ssp-assets + +```json +{ + "data": [ + { + "id": "AST--1", + "type": "ssp-assets", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "status": "pending", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--1" + } + }, + { + "id": "AST--2", + "type": "ssp-assets", + "attributes": { + "reference": "AST--2", + "name": "DemoHaul Titan X9", + "serialNumber": "TRK1200027", + "status": "pending", + "note": "The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--2" + } + }, + { + "id": "AST--3", + "type": "ssp-assets", + "attributes": { + "reference": "AST--3", + "name": "OfficeJet Pro 9025e All-in-One Printer", + "serialNumber": "CN1234ABCD", + "status": "pending", + "note": "The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--3" + } + }, + { + "id": "AST--4", + "type": "ssp-assets", + "attributes": { + "reference": "AST--4", + "name": "Logistic Casa F-08", + "serialNumber": "", + "status": "pending", + "note": "1FUJGLDR5KL123456", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--4" + } + }, + { + "id": "AST--5", + "type": "ssp-assets", + "attributes": { + "reference": "AST--5", + "name": "AssetName1", + "serialNumber": "serialNumberAsset1API", + "status": "pending", + "note": "noteAsset", + "createdDate": "2025-09-23 12:50:06", + "externalImageUrl": "http://emaple.com", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--5" + } + } + ], + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets" + } +} +``` + +
    + +3. To get the particular asset, use the access token to send a `GET` request to the `ssp-assets` endpoint with the asset ID: + +`GET https://glue-backend.mysprykershop.com/ssp-assets/AST--1` + +```json +{ + "data": { + "id": "AST--1", + "type": "ssp-assets", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "status": "pending", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "createdDate": "2025-09-23 10:37:21", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg", + "companyBusinessUnitOwnerUuid": "5b9c6fc4-bf5d-5b53-9ca9-1916657e6fb2" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--1" + } + } +} +``` + +4. Use the access token to create the `ssp-assets` resource: +`POST https://glue-backend.mysprykershop.com/ssp-assets` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": + { + "name": {% raw %}{{{% endraw %}Asset name{% raw %}}}{% endraw %}, + "serialNumber": {% raw %}{{{% endraw %}Serial number{% raw %}}}{% endraw %}", + "status": {% raw %}{{{% endraw %}One of the following statuses: pending, in_review, approved and deactivated{% raw %}}}{% endraw %}, + "note":{% raw %}{{{% endraw %}Note{% raw %}}}{% endraw %}, + "externalImageUrl": {% raw %}{{{% endraw %}URL to an image{% raw %}}}{% endraw %}, + "companyBusinessUnitOwnerUuid": {% raw %}{{{% endraw %}The UUID of the company business unit{% raw %}}}{% endraw %} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "id": "AST--6", + "type": "ssp-assets", + "attributes": { + "reference": "AST--6", + "name": "Test Asset for CRUD TEST", + "serialNumber": "CRUD-TEST-YYYYY", + "status": "pending", + "note": "This asset will be used for testing all CRUD operations!!!!!", + "createdDate": "2025-09-23 13:59:35", + "externalImageUrl": "https://example.com/asset-image_1.jpg", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--6" + } + } +} +``` + +5. For updating the particular asset, use the access token to send a `PATCH` request to the `ssp-assets` endpoint with the asset ID: + +`PATCH https://glue-backend.mysprykershop.com/ssp-assets/AST--6` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": + { + "name": {% raw %}{{{% endraw %}Asset name{% raw %}}}{% endraw %}, + "serialNumber": {% raw %}{{{% endraw %}Serial number{% raw %}}}{% endraw %}", + "status": {% raw %}{{{% endraw %}One of the following statuses: pending, in_review, approved and deactivated{% raw %}}}{% endraw %}, + "note":{% raw %}{{{% endraw %}Note{% raw %}}}{% endraw %}, + "externalImageUrl": {% raw %}{{{% endraw %}URL to an image{% raw %}}}{% endraw %}, + "companyBusinessUnitOwnerUuid": {% raw %}{{{% endraw %}The UUID of the company business unit{% raw %}}}{% endraw %}, + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "id": "AST--6", + "type": "ssp-assets", + "attributes": { + "reference": "AST--6", + "name": "Test Asset for CRUD TEST", + "serialNumber": "CRUD-TEST-XXXX", + "status": "pending", + "note": "This asset will be used for testing all CRUD operations!!!!!", + "createdDate": "2025-09-23 13:59:35", + "externalImageUrl": "https://example.com/asset-image_1.jpg", + "companyBusinessUnitOwnerUuid": "5860fdd0-21fc-5389-87c9-5f1507d1ef3e" + }, + "links": { + "self": "http://glue-backend.eu.spryker.local/ssp-assets/AST--6" + } + } +} +``` + +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------|---------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspAssetsResourceRoutePlugin | Provides the GET and POST endpoints for the SSP assets. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspAssetsResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can manage `ssp-assets` resources for the company user: + +0. Prerequisites: +- You have a company user +- You have company user credentials: username and password +- Assets are assigned to the business unit of the company user +- You have imported assets as described in data import section + +1. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +2. Use the access token to access the `ssp-assets` endpoint: + + +
    + GET https://glue.mysprykershop.com/ssp-assets + +```json +{ + "data": [ + { + "type": "ssp-assets", + "id": "AST--1", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--1" + } + }, + { + "type": "ssp-assets", + "id": "AST--2", + "attributes": { + "reference": "AST--2", + "name": "DemoHaul Titan X9", + "serialNumber": "TRK1200027", + "note": "The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--2" + } + }, + { + "type": "ssp-assets", + "id": "AST--3", + "attributes": { + "reference": "AST--3", + "name": "OfficeJet Pro 9025e All-in-One Printer", + "serialNumber": "CN1234ABCD", + "note": "The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--3" + } + }, + { + "type": "ssp-assets", + "id": "AST--4", + "attributes": { + "reference": "AST--4", + "name": "Logistic Casa F-08", + "serialNumber": "", + "note": "1FUJGLDR5KL123456", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--4" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets" + } +} +``` + +
    + +3. To get the particular asset, use the access token to send a `GET` request to the `ssp-assets` endpoint with the asset ID: + +`GET https://glue.mysprykershop.com/ssp-assets/AST--1` + +```json +{ + "data": { + "type": "ssp-assets", + "id": "AST--1", + "attributes": { + "reference": "AST--1", + "name": "DemoBrand Print Pro 2100", + "serialNumber": "PRNT000014", + "note": "The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.", + "externalImageUrl": "https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--1" + } + } +} +``` + +4. Use the access token to create the `ssp-assets` resource: + +`POST https://glue.mysprykershop.com/ssp-assets` + +```json +{ + "data": { + "type": "ssp-assets", + "attributes": { + "name": {Asset name}, + "serialNumber": {Serial number}, + "note": {Note}, + "externalImageUrl": {URL} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "type": "ssp-assets", + "id": "AST--5", + "attributes": { + "reference": "AST--5", + "name": "AssetName1", + "serialNumber": "serialNumberAsset1API", + "note": "noteAsset", + "externalImageUrl": "http://emaple.com" + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-assets/AST--5" + } + } +} +``` + +{% endinfo_block %} + + +## Demo data for EU region / DE store + +### Add asset demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_asset.csv** + +```csv +reference,name,serial_number,note,external_image_url,business_unit_key,assigned_business_unit_keys +AST--1,DemoBrand Print Pro 2100,PRNT000014,"The DemoBrand Print Pro 2100 is a compact, high-speed monochrome LaserJet printer designed for home offices and small workgroups. It delivers crisp text and sharp graphics with a print speed of up to 24 pages per minute. Featuring wireless connectivity, auto-duplex printing, and a user-friendly control panel, the BlazeJet 2100 ensures professional output with minimal maintenance. Compatible with Windows, macOS, and mobile devices via Wi-Fi.",https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg,spryker_systems_HR,"spryker_systems_HR" +AST--2,DemoHaul Titan X9,TRK1200027,"The DemoHaul Titan X9 is a high-performance heavy-duty truck engineered for demanding transport operations. Built with a reinforced steel chassis and a turbocharged diesel engine, the Titan X9 delivers exceptional hauling power, fuel efficiency, and long-distance reliability. Its ergonomic cabin features advanced driver-assist technology, real-time load monitoring, and a fully digital dashboard for enhanced control. With a payload capacity of up to 18 tons and rugged off-road capability, the Titan X9 is the ultimate solution for logistics professionals and fleet operators.",https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Truck.png,spryker_systems_Zurich,spryker_systems_Zurich +AST--3,OfficeJet Pro 9025e All-in-One Printer,CN1234ABCD,"The OfficeJet Pro 9025e is a high-performance multifunctional printer designed for modern office environments. It offers fast printing, scanning, copying, and faxing capabilities with automatic duplex printing. With built-in Wi-Fi and mobile printing options, this all-in-one device enhances workplace efficiency.",https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg,spryker_systems_HR,spryker_systems_HR +AST--4,Logistic Casa F-08,,1FUJGLDR5KL123456,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg,spryker_systems_HR,spryker_systems_HR +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------------------------|----------|-----------|----------------------------------------------------------------|---------------------------------------------------------------------------| +| reference | ✓ | string | AST--1 | Unique identifier for the asset used as a reference in the system. | +| name | ✓ | string | DemoBrand Print Pro 2100 | The display name of the asset. | +| serial_number | x | string | PRNT000014 | The serial number of the asset for identification purposes. | +| note | x | string | The DemoBrand Print Pro 2100... | Detailed description or notes about the asset. | +| external_image_url | x | string | `https://d2s0ynfc62ej12.cloudfront.net/image/Demo_Printer.jpeg` | URL to an external image of the asset. | +| business_unit_key | x | string | spryker_systems_HR | The key of the business unit that owns the asset. | +| assigned_business_unit_keys | x | string | spryker_systems_HR | Comma-separated list of business unit keys that have access to the asset. | + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: ssp-asset + source: data/import/common/common/ssp_asset.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------|---------------|----------------------------------------------------------------------| +| SspAssetDataImportPlugin | Imports a ssp asset into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspAssetDataImportPlugin(), + ]; + } +} +``` + +Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_SSP_ASSET), + ]; + + return $commands; + } +} +``` + + +### Import the data + +```bash +console data:import:ssp-asset +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: + +- `spy_asset` +- `spy_ssp_asset_to_company_business_unit` +- `spy_ssp_asset_storage` +- `spy_ssp_asset_search` + {% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-dashboard-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-dashboard-management-feature.md new file mode 100644 index 00000000000..f0b4cf4b11d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-dashboard-management-feature.md @@ -0,0 +1,398 @@ +This document describes how to install the Self-Service Portal (SSP) Dashboard Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Dashboard Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} +Make sure the following transfer objects have been generated: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------|----------|---------|------------------------------------------------------------------| +| DashboardRequest | transfer | created | src/Generated/Shared/Transfer/DashboardRequestTransfer | +| DashboardComponentCriteria | transfer | created | src/Generated/Shared/Transfer/DashboardComponentCriteriaTransfer | +| DashboardResponse | transfer | created | src/Generated/Shared/Transfer/DashboardResponseTransfer | +| CmsBlockRequest | transfer | created | src/Generated/Shared/Transfer/CmsBlockRequestTransfer | +| CmsBlock | transfer | created | src/Generated/Shared/Transfer/CmsBlockTransfer | +| SynchronizationData | transfer | created | src/Generated/Shared/Transfer/SynchronizationDataTransfer | +| Customer | transfer | created | src/Generated/Shared/Transfer/CustomerTransfer | +| CompanyUser | transfer | created | src/Generated/Shared/Transfer/CompanyUserTransfer | +| Store | transfer | created | src/Generated/Shared/Transfer/StoreTransfer | + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +### Add dashboard demo data + +1. Append `cms_block.csv`: + +
    + data/import/common/common/cms_block.csv + +```csv +cms-sales_rep:default,sales_rep:default,Title and Content,@CmsBlock/template/title_and_content_block.twig,1,,,
    Mitarbeiter des Kundendienstes
    ,,,,, +ssp-news-block-1,News Banner-1,Title and Content,@CmsBlock/template/title_and_content_block.twig,1,"
    {{ 'ssp_dashboard.general.news' | trans }}
    ","
    {{ 'ssp_dashboard.general.news' | trans }}
    ","
    {{ content_banner('ssp-br-1', 'bottom-title') }}
    {{ content_banner('ssp-br-2', 'bottom-title') }}
    ","
    {{ content_banner('ssp-br-1', 'bottom-title') }}
    {{ content_banner('ssp-br-2', 'bottom-title') }}
    ",,,, +``` + +
    + +2. Append **data/import/common/DE/cms_block_store.csv** + +```csv +ssp-news-block-1,DE +cms-sales_rep:default,DE +``` + +3. Append **data/import/common/common/cms_slot.csv**: + +```csv +ssp-news,ssp-news-block-1,SSP News.,SprykerCmsSlotBlock,@SelfServicePortal/views/dashboard/dashboard.twig,1 +``` + +4. Append **data/import/common/common/cms_slot_block.csv** + +```csv +slt-mobile-header,blck-9,1,@ShopUi/templates/page-layout-main/page-layout-main.twig,,,,,,, +ssp-news,ssp-news-block-1,1,@SelfServicePortal/views/dashboard/dashboard.twig,,,,,,, +``` + +5. Append **data/import/common/common/cms_slot_template.csv** + +```csv +SSP Dashboard,Dashboard Page.,@SelfServicePortal/views/dashboard/dashboard.twig +``` + +6. Append **data/import/common/common/content_banner.csv** + +```csv +ssp-br-1,SSP Banner Name 1,SSP Banner Description 1, ,,, ,,,/assets/current/default/images/400x200.png,,,/en/demo-landing-page,,,ssp-banner-image,, +ssp-br-2,SSP Banner Name 2,SSP Banner Description 2, ,,, ,,,/assets/current/default/images/400x200.png,,,/en/demo-landing-page,,,ssp-banner-image,, +``` + +7. Append **data/import/common/common/company_role_permission.csv** + +```csv +Ottom_Admin,ViewBusinessUnitSspServicePermissionPlugin, +Spryker_Admin,ViewBusinessUnitSspServicePermissionPlugin, +test-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +trial-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +proof-company_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Jim_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Kudamm_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Hotel-Mitte_Admin,ViewBusinessUnitSspServicePermissionPlugin, +BoB-Regular_Admin,ViewBusinessUnitSspServicePermissionPlugin, +test-company-2_Admin,ViewBusinessUnitSspServicePermissionPlugin, +Spryker_Buyer_With_Limit,ViewBusinessUnitSspServicePermissionPlugin, +Ottom_Admin,ViewCompanySspServicePermissionPlugin, +Spryker_Admin,ViewCompanySspServicePermissionPlugin, +test-company_Admin,ViewCompanySspServicePermissionPlugin, +trial-company_Admin,ViewCompanySspServicePermissionPlugin, +proof-company_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Jim_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Kudamm_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Hotel-Mitte_Admin,ViewCompanySspServicePermissionPlugin, +BoB-Regular_Admin,ViewCompanySspServicePermissionPlugin, +test-company-2_Admin,ViewCompanySspServicePermissionPlugin, +Spryker_Buyer_With_Limit,ViewCompanySspServicePermissionPlugin, +``` + +## Add twig template + +1. Create a new CMS template to be used for dashboard content sourced from the CMS: + +**src/Pyz/Shared/CmsBlock/Theme/default/template/title_and_content_block.twig** + +```twig +{% raw %}{% block content %}{% endraw %} + + + + {{ spyCmsBlockPlaceholder('title') | raw }} + {{ spyCmsBlockPlaceholder('content') | raw }} +{% raw %}{% endblock %}{% endraw %} +``` + +### Import the data + +Import dashboard demo data: + +```bash +console data:import cms-slot-template +console data:import content-banner +console data:import cms-block +console data:import cms-block-store +console data:import cms-slot +console data:import cms-slot-block +console data:import company-role-permission +``` + +{% info_block warningBox "Verification" %} + +- Make sure the glossary keys have been added to `spy_glossary_key` and `spy_glossary_translation` tables. +- Make sure that the imported data on CMS blocks, CMS slots, and content banners is present in the Back Office. + {% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------|------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ViewDashboardPermissionPlugin | Provides access to the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewCompanySspServicePermissionPlugin | Provides access to company services on the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspServicePermissionPlugin | Provides access to company business unit services on the dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| CmsBlockCompanyBusinessUnitCmsBlockStorageReaderPlugin | Enables business unit-specific CMS blocks. | | SprykerFeature\Client\SelfServicePortal\Plugin\CmsBlockStorage | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the the SSP dashboard page. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| SspDashboardFilterControllerEventHandlerPlugin | Restricts access to dashboard pages for non-company users. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceDashboardDataExpanderPlugin | Expands dashboard data with services. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspInquiryDashboardDataExpanderPlugin | Expands dashboard data with inquiries. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspFileDashboardDataExpanderPlugin | Expands dashboard data with file attachments. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | +| SspAssetDashboardDataExpanderPlugin | Expands dashboard data with assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspDashboardManagement | + + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Client\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewDashboardPermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspServicePermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewCompanySspServicePermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new ViewDashboardPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + new ViewCompanySspServicePermissionPlugin(), + new ViewBusinessUnitSspServicePermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getCmsBlockStorageReaderPlugins(): array + { + return [ + new CmsBlockCompanyBusinessUnitCmsBlockStorageReaderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getDashboardDataExpanderPlugins(): array + { + return [ + new SspInquiryDashboardDataExpanderPlugin(), + new SspFileDashboardDataExpanderPlugin(), + new SspAssetDashboardDataExpanderPlugin(), + new SspServiceDashboardDataExpanderPlugin(), + ]; + } +} +``` + +## Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------|-----------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------| +| DashboardMenuItemWidget | Provides a menu item widget for the customer account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspFileListWidget | Displays a file attachment available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceListWidget | Displays services available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + DashboardMenuItemWidget::class, + SspFileListWidget::class, + SspServiceListWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the **View Dashboard** permission. +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Dashboard** menu item is displayed. +2. Go to **Customer Account** > **Dashboard**. Make sure the page shows the following: + +- Correct company account information +- Widgets for Assets, Inquiries, and Files + +3. Log out and log in with a compnay user without the role you've created. +Make sure the **Dashboard** menu item is not displayed, and you can't access the **Dashboard** page. + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-file-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-file-management-feature.md new file mode 100644 index 00000000000..f1c271f1c1b --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-file-management-feature.md @@ -0,0 +1,435 @@ +This document describes how to install the Self-Service Portal (SSP) File Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP File Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------|------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Configures the Flysystem service for managing file uploads, specifying the adapter and storage path for files. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::STORAGE_NAME | Defines the storage name for SSP files in the Flysystem configuration, linking to the specified file system service. | SprykerFeature\Shared\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_FILES_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_FILES_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_FILES_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/files', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::STORAGE_NAME] = 'ssp-files'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure the following tables have been created in the database: + +- `spy_company_user_file` +- `spy_company_business_unit_file` + +Make sure the following columns have been added to the `spy_file` table: + +- `file_reference` +- `uuid` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Files` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + File Attachments + self-service-portal + list-file + index + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Back Office, the **Customer portal** > **File Attachments** section is available. + +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| ViewCompanyUserFilesPermissionPlugin | Enables company users to view the files they uploaded. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanyBusinessUnitFilesPermissionPlugin | Allows access to files uploaded within a business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanyFilesPermissionPlugin | Allows access to all files within a company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| DownloadCompanyFilesPermissionPlugin | Enables downloading files. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the [SSP file management feature](/docs/pbc/all/self-service-portal/latest/ssp-file-management-feature-overview.html). | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes in a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SelfServicePortalTwigPlugin | Provides Twig functionality for Self-Service Portal features. | | SprykerFeature\Zed\SelfServicePortal\Communication\Twig | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanyUserFilesPermissionPlugin(), + new ViewCompanyBusinessUnitFilesPermissionPlugin(), + new ViewCompanyFilesPermissionPlugin(), + ]; + } +} + +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php + + */ + protected function getPermissionPlugins(): array + { + return [ + new DownloadCompanyFilesPermissionPlugin(), + new ViewCompanyUserFilesPermissionPlugin(), + new ViewCompanyBusinessUnitFilesPermissionPlugin(), + new ViewCompanyFilesPermissionPlugin(), + ]; + } +} + +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new SspFileSspAssetManagementExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new SelfServicePortalTwigPlugin(), + ]; + } +} +``` + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------|------------------------------------------------------|---------------|----------------------------------------------| +| SspCompanyFilesMenuItemWidget | Provides a menu item widget for the customer account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspFileListWidget | Displays a file attachment available to a company user on the dashboard page in the customer account. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspCompanyFilesMenuItemWidget::class, + SspFileListWidget::class, + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Verify file upload and attachment: + +1. In the Back Office, go to **Customer portal** > **File Attachments**. +2. Click **Upload file**. +3. Drag and drop three files into the upload area. +4. Click **Upload**. + Make sure the File Attachments list page shows the files you've uploaded. +5. Next to a file attachment with reference `FILE-1`, click **Attach**. +6. Go to the **Company user** tab. +7. Select a company user. +8. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-1`. +9. In the **Linked entities** section, make sure the previously selected company user is displayed. +10. Go to **Customer portal** > **File Attachments**. +11. Next to a file attachment with reference `FILE-2`, click **Attach**. +12. Go to the **Business unit** tab. +13. Select a business unit. +14. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-2`. +15. In the **Linked entities** section, make sure the previously selected business unit is displayed. +16. Go to **Customer portal** > **File Attachments**. +17. Next to a file attachment with reference `FILE-3`, click **Attach**. +18. Go to the **Company** tab. +19. Select a company. +20. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-3`. +21. In the **Linked entities** section, make sure that business units from the previously selected company are displayed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify permission management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **Open My Files page** + - **Download file** + - **View My Files** + - **View Business unit files** + - **View Company Files** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've just created to the user. +10. Go to **Customer portal** > **File Attachments**. +11. Next to a file attachment with reference `FILE-1`, click **Attach**. +12. Go to the **Company user** tab. +13. Select the company user you've assigned the role to. +14. Click **Save**. + Make sure you are redirected to the view file attachments page for `FILE-1`. +9. In the **Linked entities** section, make sure the previously selected company user is displayed. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify permissions on Storefront: + +1. On the Storefront, log in with the company user you've assigned the role to. + Make sure the **Files** menu item is displayed. +2. Go to **Customer Account** > **Files** page. + Make sure the file with reference FILE-1 is displayed. +4. Click Download next to a file. Make sure a file is downloaded. +3. Log out and log in with another company user that doesn't have the role. + Make sure the **Files** menu item is not displayed and you can't access the **Files** page. + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-inquiry-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-inquiry-management-feature.md new file mode 100644 index 00000000000..1ba5eb73449 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-inquiry-management-feature.md @@ -0,0 +1,971 @@ +This document describes how to install the Self-Service Portal (SSP) Inquiry Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Inquiry Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------|----------| ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Configures the Flysystem service for managing file uploads, specifying the adapter and storage path for inquiry-related files. | Spryker\Shared\FileSystem | +| SelfServicePortalConstants::BASE_URL_YVES | Defines the base URL for the Yves frontend, which is used to construct links in email notifications sent for inquiries. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE | Sets a maximum total size for all files that can be uploaded with a single inquiry, preventing excessively large submissions. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE | Sets a maximum size for a single file that can be uploaded with an inquiry. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::INQUIRY_STORAGE_NAME | Defines the storage name for inquiry files in the Flysystem configuration, linking to the specified file system service. | SprykerFeature\Shared\SelfServicePortal | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kernel | +| SelfServicePortalConfig::getInquiryInitialStateMachineMap() | Maps an inquiry's state machine process to its initial state, determining the starting point of the inquiry workflow. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryStateMachineProcessInquiryTypeMap() | Maps each inquiry type to a specific state machine process, allowing for different workflows based on the inquiry's nature. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryCancelStateMachineEventName() | Defines the name of a state machine event that is triggered to cancel an inquiry. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getSspInquiryAvailableStatuses() | Provides a list of all possible statuses that an inquiry can have, which are used for filtering and display purposes. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConfig::getInquiryStatusClassMap() | Maps inquiry statuses to corresponding CSS class names, allowing for visual styling of status indicators in the user interface. | SprykerFeature\Zed\SelfServicePortal | +| SelfServicePortalConfig::getInquiryPendingStatus() | Specifies which inquiry status is considered "Pending," which is used for dashboard widgets and filtering. | SprykerFeature\Zed\SelfServicePortal | +| SalesConfig::getSalesDetailExternalBlocksUrls() | Extends the order details page in the Back Office by adding a block to display related inquiries. | Spryker\Zed\Sales | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_CLAIM_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_CLAIM_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_CLAIM_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-inquiry', + 'path' => '', + ], +]; + +$config[SelfServicePortalConstants::BASE_URL_YVES] = 'https://your-yves-url'; +$config[SelfServicePortalConstants::DEFAULT_TOTAL_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE') ?: '100M'; +$config[SelfServicePortalConstants::DEFAULT_FILE_MAX_SIZE] = getenv('SPRYKER_DEFAULT_FILE_MAX_SIZE') ?: '20M'; +$config[SelfServicePortalConstants::INQUIRY_STORAGE_NAME] = 'ssp-inquiry'; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_CLAIM_KEY` - AWS S3 access key for SSP inquiry file storage +- `SPRYKER_S3_SSP_CLAIM_SECRET` - AWS S3 secret key for SSP inquiry file storage +- `SPRYKER_S3_SSP_CLAIM_BUCKET` - AWS S3 bucket name for SSP inquiry file storage +- `AWS_REGION` - AWS region +- `SPRYKER_DEFAULT_TOTAL_FILE_MAX_SIZE` - Maximum total size for all files uploaded with a single inquiry (defaults to `100M` if not set) +- `SPRYKER_DEFAULT_FILE_MAX_SIZE` - Maximum size for a single file uploaded with an inquiry (defaults to `20M` if not set) + +{% endinfo_block %} + +
    + src/Pyz/Shared/SelfServicePortal/SelfServicePortalConfig.php + +```php + 'created', + ]; + } + + public function getSspInquiryStateMachineProcessInquiryTypeMap(): array + { + return [ + 'general' => 'SspInquiryDefaultStateMachine', + 'order' => 'SspInquiryDefaultStateMachine', + 'ssp_asset' => 'SspInquiryDefaultStateMachine', + ]; + } + + /** + * @return string + */ + public function getSspInquiryCancelStateMachineEventName(): string + { + return 'cancel'; + } + + /** + * @return array + */ + public function getSspInquiryAvailableStatuses(): array + { + return [ + 'pending', + 'in_review', + 'approved', + 'rejected', + 'canceled', + ]; + } +} + +``` + +
    + +
    + src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php + +```php + + */ + public function getInquiryStatusClassMap(): array + { + return [ + 'approved' => 'label-success', + 'rejected' => 'label-danger', + 'pending' => 'label-warning', + 'canceled' => 'label-default', + 'in_review' => 'label-primary', + ]; + } + + public function getInquiryPendingStatus(): string + { + return 'pending'; + } +} + +``` + +
    + +**src/Pyz/Zed/Sales/SalesConfig.php** + +```php + + */ + public function getSalesDetailExternalBlocksUrls(): array + { + $projectExternalBlocks = [ + 'inquiries' => '/self-service-portal/list-order-inquiry' + ]; + + $externalBlocks = parent::getSalesDetailExternalBlocksUrls(); + + return array_merge($externalBlocks, $projectExternalBlocks); + } +} +``` + +## Configure navigation + +Add the `Inquiries` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Inquiries + self-service-portal + list-inquiry + index + + + + +``` + +Generate routers and navigation cache + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the Back Office, the **Customer portal** > **Inquiries** menu item is available. +{% endinfo_block %} + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_inquiry` +- `spy_ssp_inquiry_file` +- `spy_ssp_inquiry_sales_order` +- `spy_ssp_inquiry_sales_order_item` +- `spy_ssp_inquiry_ssp_asset` + {% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Add state machine configuration + +Create an XML configuration file for the state machine. + +
    + config/Zed/StateMachine/SspInquiry/SspInquiryDefaultStateMachine.xml + +```xml + + + + + + + + + + + + + + + + created + pending + initiate + + + pending + in_review + start_review + + + pending + canceled + cancel + + + in_review + approved + approve + + + in_review + rejected + reject + + + + + + + + + + + + +``` + +
    + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| CreateSspInquiryPermissionPlugin | Allows customer to create inquiries. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspInquiryPermissionPlugin | Allows customer to view inquiries within the same company business unit. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| ViewCompanySspInquiryPermissionPlugin | Allows customer to view inquiries within the same company. | | SprykerFeature\Shared\SelfServicePortal\Plugin\Permission | +| SelfServicePortalPageRouteProviderPlugin | Provides Yves routes for the SSP inquiry feature. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| SspInquiryRestrictionHandlerPlugin | Restricts access to inquiries and inquiry details pages for non-company users. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| FileSizeFormatterTwigPlugin | Adds a Twig filter to format file sizes in a human-readable format. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Twig | +| SelfServicePortalTwigPlugin | Provides Twig functionality for Self-Service Portal features. | | SprykerFeature\Zed\SelfServicePortal\Communication\Twig | +| SspInquiryDataImportPlugin | Introduces the `ssp-inquiry` import type. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| SspInquiryApprovedMailTypeBuilderPlugin | Sends an email on inquiry approval. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | +| SspInquiryRejectedMailTypeBuilderPlugin | Sends an email on inquiry rejection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Mail | +| SspInquirySspAssetManagementExpanderPlugin | Adds the inquiries table to Assets. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement | +| SspInquiryStateMachineHandlerPlugin | State Machine handler for inquiry processing. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\StateMachine | +| ApproveSspInquiryCommandPlugin | State Machine command that handles inquiry approval. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement | +| RejectSspInquiryCommandPlugin | State Machine command that handles inquiry rejection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspInquiryManagement | + +**src/Pyz/Zed/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Zed\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new CreateSspInquiryPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Yves\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\CreateSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspInquiryPermissionPlugin; +use SprykerFeature\Shared\SelfServicePortal\Plugin\Permission\ViewCompanySspInquiryPermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new CreateSspInquiryPermissionPlugin(), + new ViewBusinessUnitSspInquiryPermissionPlugin(), + new ViewCompanySspInquiryPermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspInquiryDataImportPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new SspInquirySspAssetManagementExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\StateMachine\Dependency\Plugin\CommandPluginInterface> + */ + protected function getStateMachineCommandPlugins(): array + { + return [ + 'SspInquiry/Approve' => new ApproveSspInquiryCommandPlugin(), + 'SspInquiry/Reject' => new RejectSspInquiryCommandPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/StateMachine/StateMachineDependencyProvider.php** + +```php + + */ + protected function getStateMachineHandlers(): array + { + return [ + new SspInquiryStateMachineHandlerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new SelfServicePortalTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FileSizeFormatterTwigPlugin(), + ]; + } +} +``` + + +### Set up widgets + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------|------------------------------------------------------|---------------|----------------------------------------------| +| SspInquiryMenuItemWidget | Provides a customer menu item for the inquiries. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| CreateOrderSspInquiryWidget | Provides a button to create an inquiry for an order. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspInquiryListWidget | Provides the inquiries table. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspListMenuItemWidget | Renders the menu item in the Customer Account side menu. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SspInquiryMenuItemWidget::class, + CreateOrderSspInquiryWidget::class, + SspInquiryListWidget::class, + SspListMenuItemWidget::class, + ]; + } + + protected function getFilterControllerEventSubscriberPlugins(): array + { + return [ + new SspInquiryRestrictionHandlerPlugin(), + ]; + } +} +``` + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block infoBox "CMS block data" %} + +CMS block data import is required for email templates to work properly. To import CMS block data for email templates, see the [Add cms block data import for email templates](#add-cms-block-data-import-for-email-templates) section below. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Set customer permissions for inquiry management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **Create inquiry** + - **View company inquiries** + - **View business unit inquiries** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've created to the user. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify customer permissions on Storefront: + +1. On the Storefront, log in with the company user you've assigned the role to. +2. Go to **Customer Account** > **Inquiries**. +3. Click **Create Inquiry**. +4. Fill in the required fields. +5. Optional: Upload up to 5 files. +6. Click **Submit Inquiry**. + Make sure this saves the inquiry and opens the inquiry details page. +7. Go to **Customer Account** > **Inquiries**. + Make sure the inquiry you've created is displayed in the list. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Verify inquiries in the Back Office: + +1. In the Back Office, go to **Customer Portal** > **Inquiries** page. Make sure the following applies: + +- The inquiry you've created on the Storefront is displayed in the list. +- You can filter the list by **Inquiry status** and **Inquiry type**. + +2. Click **View** next to an inquiry. + Make sure that, in the **Status** section, **Start review** and **Cancel** buttons are displayed. +3. Click **Start review**. + Make sure the inquiry status changes to **In review**. + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add inquiry demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_inquiry.csv** + +```csv +reference,store,type,company_user_key,subject,description +DE-INQR--1,DE,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account. +DE-INQR--2,DE,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details. +DE-INQR--3,AT,general,Spryker--8,Request for documentation,Please provide detailed documentation on the warranty and return policies for the products purchased under my account. +DE-INQR--4,AT,general,Spryker--8,Product catalog issue,I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details. +``` + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: ssp-inquiry + source: data/import/common/common/ssp_inquiry.csv +``` + +### Add cms block data import for email templates + +{% info_block warningBox "Required" %} + +CMS block data import is required for inquiry email notifications to work properly. Make sure to complete this step. + +{% endinfo_block %} + +Add to **data/import/common/common/cms_block.csv**: + +
    + cms_block.csv + +```csv +{% raw %} +cms-block-email--ssp-inquiry-approved--html,ssp-inquiry-approved--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    ","

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    " +cms-block-email--ssp-inquiry-approved--text,ssp-inquiry-approved--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}" +cms-block-email--ssp-inquiry-rejected--html,ssp-inquiry-rejected--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.sspInquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    ","

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%':mail.customer.firstName~' '~mail.customer.lastName})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%':mail.sspInquiry.reference})}}

    {{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}
    " +cms-block-email--ssp-inquiry-rejected--text,ssp-inquiry-rejected--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}","{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.salutation' | trans({'%name%' : mail.customer.firstName ~ ' ' ~ mail.customer.lastName})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_rejected.main_text' | trans({'%reference%' : mail.sspInquiry.reference})}}\n{{ 'ssp_inquiry.mail.trans.ssp_inquiry_list_page' | trans }}: {{ mail.sspInquiryUrl }}" +{% endraw %} +``` + +
    + +Add to **data/import/common/DE/cms_block_store.csv**: + +```csv +cms-block-email--ssp-inquiry-approved--html,DE +cms-block-email--ssp-inquiry-approved--text,DE +cms-block-email--ssp-inquiry-rejected--html,DE +cms-block-email--ssp-inquiry-rejected--text,DE +``` + +### Import the data + +```bash +console data:import ssp-inquiry +console data:import cms-block +console data:import cms-block-store +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- Glossary keys have been added to `spy_glossary_key` and `spy_glossary_translation` tables. +- The `ssp_inquiry` table contains the new inquiries. +- The new CMS blocks are assigned to correct stores. + +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------|------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspInquiriesResourceRoutePlugin | Provides the GET and POST endpoints for the SSP inquiries. | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspInquiriesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create inquiries by importing demo data as described in the previous sections. + +2. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +3. Use the access token to access the `ssp-inquiries` endpoint: + + +
    + GET https://glue.mysprykershop.com/ssp-inquiries + +```json +{ + "data": [ + { + "type": "ssp-inquiries", + "id": "DE-INQR--1", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Request for documentation", + "description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.", + "reference": "DE-INQR--1", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1" + } + }, + { + "type": "ssp-inquiries", + "id": "DE-INQR--2", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Product catalog issue", + "description": "I noticed that several products in the catalog are missing specifications and images. This makes it difficult to make informed purchasing decisions. Please update the product details.", + "reference": "DE-INQR--2", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--2" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries" + } +} +``` + +4. To get the particular inquiry, use the access token to send a `GET` request to the `ssp-inquiries` endpoint with the asset ID: + `GET https://glue.mysprykershop.com/ssp-inquiries/DE-INQR--1` + +```json +{ + "data": { + "type": "ssp-inquiries", + "id": "DE-INQR--1", + "attributes": { + "sspAssetReference": null, + "orderReference": null, + "type": "general", + "status": "pending", + "subject": "Request for documentation", + "description": "Please provide detailed documentation on the warranty and return policies for the products purchased under my account.", + "reference": "DE-INQR--1", + "isCancellable": null + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--1" + } + } +} +``` + +5. Use the access token to create the `ssp-inquiries` resource: + `POST https://glue.mysprykershop.com/ssp-inquiries` + +```json +{ + "data": { + "type": "ssp-inquiries", + "attributes": { + "subject": {Inquiry subject}, + "description": {Inquiry description}, + "type": {One of the following types: general, order, ssp_asset} + } + } +} +``` + +Example of a successful response: + +```json +{ + "data": { + "type": "ssp-inquiries", + "id": "DE-INQR--3", + "attributes": { + "sspAssetReference": "AST--39", + "orderReference": null, + "type": "ssp_asset", + "status": "pending", + "subject": "TestInquiryAPIsubject", + "description": "TestInquiryAPIdescription", + "reference": "DE-INQR--3", + "isCancellable": true + }, + "links": { + "self": "http://glue.eu.spryker.local/ssp-inquiries/DE-INQR--3" + } + } +} +``` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-model-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-model-management-feature.md new file mode 100644 index 00000000000..0b0f4b1302a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-model-management-feature.md @@ -0,0 +1,482 @@ +This document describes how to install the Self-Service Portal (SSP) Model Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Model Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|---------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following packages are now listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +Add the following configuration to `config/Shared/config_default.php`: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------| +| FileSystemConstants::FILESYSTEM_SERVICE | Defines the Flysystem service configuration for handling asset file storage. This configuration specifies the adapter, such as local or S3, and the root path for storing model files, ensuring they're managed securely and efficiently. | Spryker\Shared\FileSystem | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kernel | +| SelfServicePortalConstants::SSP_MODEL_IMAGE_STORAGE_NAME | Defines the unique identifier for the Flysystem storage instance used for SSP models. This name links the model management feature to the specific filesystem configuration defined in `FileSystemConstants::FILESYSTEM_SERVICE`. | Spryker\Shared\Kernel | +| SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL | Defines queue name as used for processing SSP model storage messages. | SprykerFeature\Shared\SelfServicePortal | + +**config/Shared/config_default.php** + +```php + [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('SPRYKER_S3_SSP_MODELS_KEY') ?: '', + 'secret' => getenv('SPRYKER_S3_SSP_MODELS_SECRET') ?: '', + 'bucket' => getenv('SPRYKER_S3_SSP_MODELS_BUCKET') ?: '', + 'region' => getenv('AWS_REGION') ?: '', + 'version' => 'latest', + 'root' => '/ssp-model-image', + 'path' => '', + ], +]; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +$config[SelfServicePortalConstants::SSP_MODEL_IMAGE_STORAGE_NAME] = 'ssp-model-image'; +``` + +{% info_block infoBox "Cloud environment variables" %} + +In cloud environments, set the following environment variables: + +- `SPRYKER_S3_SSP_MODELS_KEY` - AWS S3 access key for SSP model file storage +- `SPRYKER_S3_SSP_MODELS_SECRET` - AWS S3 secret key for SSP model file storage +- `SPRYKER_S3_SSP_MODELS_BUCKET` - AWS S3 bucket name for SSP model file storage +- `AWS_REGION` - AWS region + +{% endinfo_block %} + +## Configure synchronization queues + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL, + ]; + } +} +``` + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + SelfServicePortalConfig::QUEUE_NAME_SYNC_STORAGE_SSP_MODEL => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Set up the queue infrastructure: + +```bash +vendor/bin/console queue:setup +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the RabbitMQ management interface, the following queues are available: + +- `sync.storage.ssp_model` +- `sync.storage.ssp_model.error` + +{% endinfo_block %} + +## Configure the event triggering for the model entity + +**src/Pyz/Zed/SelfServicePortal/Persistence/Propel/Schema/spy_ssp_model.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +Apply changes: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Make sure the following tables have been created in the database: + +- `spy_ssp_model` +- `spy_ssp_model_storage` + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Models` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Models + self-service-portal + list-model + index + + + + +``` + +Generate routers and navigation cache + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} +Make sure that, in the Back Office, the **Customer portal** > **Models** section is available. +{% endinfo_block %} + +## Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------|----------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------| +| SspModelPublisherTriggerPlugin | Retrieves SSP models by provided limit and offset. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher | +| SspModelWritePublisherPlugin | Publishes SSP model data by `SpySspModel` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspModel\Storage | +| SspModelToProductListWritePublisherPlugin | Publishes SSP model data by `SpySspModelToProductList` entity events. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Publisher\SspModel\Storage | +| SspModelListSynchronizationDataBulkRepositoryPlugin | Retrieves a collection of SSP model storage transfers according to provided offset, limit and IDs. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Synchronization\Storage | +| SspModelProductListUsedByTableExpanderPlugin | Expands table data by adding SSP models related to the product list. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductListGui | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return [ + new SspModelWritePublisherPlugin(), + new SspModelToProductListWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new SspModelPublisherTriggerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new SspModelListSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductListGui/ProductListGuiDependencyProvider.php** + +```php + + */ + protected function getProductListUsedByTableExpanderPlugins(): array + { + return [ + new SspModelProductListUsedByTableExpanderPlugin(), + ]; + } +} +``` + +### Set up widgets + +{% info_block infoBox "Info" %} + +No widgets are required for the Model Management feature. + +{% endinfo_block %} + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Verify models in the Back Office: + +1. In the Back Office, go to **Customer Portal** > **Models**. +2. Click **Create Model**. +3. Fill in the required fields (name). +4. Optional: Upload an image or provide an image URL, set model code. +5. Click **Save**. + Make sure the model gets saved and this opens the model details page. +6. Go to **Customer Portal** > **Models**. + Make sure the model you've created is displayed in the list. + +{% endinfo_block %} + +## Demo data for EU region / DE store + +### Add model demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/ssp_model.csv** + +```csv +reference,name,code,image_url +MDL--1,OfficeJet Pro,9025e,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg +MDL--2,Casa,F-08,https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_223498915.jpeg +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-----------|----------|-----------|-------------------------------------------------------------------------|------------------------------------------------------| +| reference | ✓ | string | MDL--1 | Unique identifier for the model used as a reference. | +| name | | string | OfficeJet Pro | The display name of the model. | +| code | ✓ | string | 9025e | The model code for identification purposes. | +| image_url | | string | `https://d2s0ynfc62ej12.cloudfront.net/image/AdobeStock_125577546.jpeg` | URL to an image of the model. | + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... +# SelfServicePortal +- data_entity: ssp-model + source: data/import/common/common/ssp_model.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|---------------------------------------|---------------|----------------------------------------------------------------------| +| SspModelDataImportPlugin | Imports a ssp model into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new SspModelDataImportPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container) + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_SSP_MODEL), + ]; + + return $commands; + } +} +``` + +### Import the data + +```bash +console data:import:ssp-model +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the following database tables: + +- `spy_ssp_model` +- `spy_ssp_model_storage` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). + diff --git a/_includes/pbc/all/install-features/202602.0/install-the-ssp-service-management-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-ssp-service-management-feature.md new file mode 100644 index 00000000000..97e9bd9a3a5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-ssp-service-management-feature.md @@ -0,0 +1,1764 @@ +{% info_block warningBox %} + +SSP Service Management feature is not compatible with the [Order Amendment feature](/docs/pbc/all/order-management-system/latest/base-shop/order-amendment-feature-overview.html). Orders that include services booked through the SSP can't be amended. + +{% endinfo_block %} + +This document describes how to install the Self-Service Portal (SSP) SSP Service Management feature. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. + +{% endinfo_block %} + +## Features SSP Service Management depends on + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-model-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/latest/install/install-the-ssp-asset-based-catalog-feature.html) + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|--------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Shipment Service Points | {{page.release_tag}} | [Install the Shipment Service Points feature](/docs/pbc/all/carrier-management/latest/unified-commerce/install-features/install-the-shipment-service-points-feature.html) | +| Click and Collect | {{page.release_tag}} | [Enable Click and Collect](/docs/pbc/all/service-point-management/latest/unified-commerce/enable-click-collect.html) | +| Service Points | {{page.release_tag}} | [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | +| Service Points Product Offer | {{page.release_tag}} | [Install the Service Points Product Offer feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-product-offer-feature.html) | +| Product Offer Service Points | {{page.release_tag}} | [Install the Product Offer Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | +| Product Offer Shipment | {{page.release_tag}} | [Install the Product Offer Shipment feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html) | +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Marketplace Product Offer Cart | {{page.release_tag}} | [Install the Marketplace Product Offer Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html) | +| Self-Service Portal | {{page.release_tag}} | [Install Self-Service Portal](/docs/pbc/all/self-service-portal/latest/install/install-self-service-portal) | + +## Install the required modules + +Install the required packages using Composer: + +```bash +composer require spryker-feature/self-service-portal:"^{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following package is listed in `composer.lock`: + +| MODULE | EXPECTED DIRECTORY | +|-------------------|--------------------------------------------| +| SelfServicePortal | vendor/spryker-feature/self-service-portal | + +{% endinfo_block %} + +## Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------| +| SelfServicePortalConstants::GOOGLE_MAPS_API_KEY | Defines a Google Maps API key required for rendering maps and location-based features in the service point selector. | SprykerFeature\Shared\SelfServicePortal | +| SelfServicePortalConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING | Maps payment methods to their corresponding state machine processes, ensuring that service orders follow the correct payment workflow. | SprykerFeature\Shared\SelfServicePortal | +| ClickAndCollectPageExampleConfig::CLICK_AND_COLLECT_SHIPMENT_TYPES | Defines the shipment types that are supported by Click & Collect, enabling customers to choose between different delivery or pickup options. | SprykerShop\Yves\ClickAndCollectPageExample | +| ClickAndCollectPageExampleConfig::DEFAULT_PICKABLE_SERVICE_TYPES | Specifies default service types that are considered "pickable," meaning they can be selected for in-person service or pickup. | SprykerShop\Yves\ClickAndCollectPageExample | +| SelfServicePortalConfig::getDefaultMerchantReference() | Provides a default merchant reference used when creating product offers from the Back Office, ensuring that offers are associated with the correct merchant. | SprykerFeature\Zed\SelfServicePortal | +| DataImportConfig::getFullImportTypes() | Specifies the list of data import entities to be processed during a full data import, including service-related data. | Pyz\Zed\DataImport | +| ServicePointWidgetConfig::getDeliveryShipmentTypeKeys() | Defines a list of shipment type keys that are treated as delivery types within the service point widget. | SprykerShop\Yves\ServicePointWidget | +| ShipmentTypeWidgetConfig::getDeliveryShipmentTypes() | Defines a list of shipment type keys that are treated as delivery types within the shipment type widget. | SprykerShop\Yves\ShipmentTypeWidget | +| SelfServicePortalConfig::getProductOfferServiceAvailabilityShipmentTypeKeys() | Returns a list of shipment type keys that are applicable for product offer service availability. | SprykerFeature\Client\SelfServicePortal | +| SelfServicePortalConfig::getDefaultSelectedShipmentTypeKey() | This shipment type will be pre-selected in the shipment type options for the services. | Pyz\Yves\SelfServicePortal\SelfServicePortalConfig | +| SelfServicePortalConfig::getDeliveryLikeShipmentTypes() | Override this method in project-level configuration to define delivery-like shipment types. | Pyz\Yves\SelfServicePortal\SelfServicePortalConfig | +| KernelConstants::CORE_NAMESPACES | Defines the core namespaces. | Spryker\Shared\Kerne | + + +**config/Shared/config_default.php** + +```php +use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConstants; + +$config[SelfServicePortalConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = $config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING]; +$config[SelfServicePortalConstants::GOOGLE_MAPS_API_KEY] = getenv('SPRYKER_GOOGLE_MAPS_API_KEY') ?: ''; + +$config[KernelConstants::CORE_NAMESPACES] = [ + ... + 'SprykerFeature', +]; +``` + +**src/Pyz/Yves/ClickAndCollectPageExample/ClickAndCollectPageExampleConfig.php** + +```php + + */ + protected const array CLICK_AND_COLLECT_SHIPMENT_TYPES = [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + self::SHIPMENT_TYPE_DELIVERY, + ]; + + /** + * @var array + */ + protected const array DEFAULT_PICKABLE_SERVICE_TYPES = [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; +} +``` + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + return [ + SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE, + ]; + } +} +``` + +**src/Pyz/Yves/ServicePointWidget/ServicePointWidgetConfig.php** + +```php + + */ + public function getDeliveryShipmentTypeKeys(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +**src/Pyz/Yves/ShipmentTypeWidget/ShipmentTypeWidgetConfig.php** + +```php + + */ + public function getDeliveryShipmentTypes(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +**src/Pyz/Client/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getProductOfferServiceAvailabilityShipmentTypeKeys(): array + { + return [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; + } +} +``` + +**src/Pyz/Yves/SelfServicePortal/SelfServicePortalConfig.php** + +```php + + */ + public function getShipmentTypeSortOrder(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; + } + + /** + * @return array + */ + public function getDeliveryLikeShipmentTypes(): array + { + return [ + static::SHIPMENT_TYPE_DELIVERY, + static::SHIPMENT_TYPE_ON_SITE_SERVICE, + ]; + } +} +``` + +### Protect Google Maps API key + +Your Google Maps API production key must be protected. Unprotected keys can be stolen and abused, leading to unauthorized usage and unexpected charges. + +To protect the API key, follow the steps: + +1. Go to [Google Cloud Console](https://console.cloud.google.com/apis/credentials). +2. Select your project and open **APIs & Services → Credentials**. +3. Select the API key you want to protect. +4. Set application restrictions: +- For web: choose **HTTP referrers** +- For server: choose **IP addresses** +- For mobile apps: use **Android/iOS options** +5. For API restrictions, enable only required APIs, such as Maps JavaScript API or Places API. +6. Click **Save**. + + +## Set up database schema + +Apply schema updates: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|--------------------------------------------|--------|---------| +| spy_product_shipment_type | table | created | +| spy_sales_product_class | table | created | +| spy_sales_order_item_product_class | table | created | +| spy_product_class | table | created | +| spy_product_to_product_class | table | created | +| spy_sales_order_item_metadata.scheduled_at | column | added | +| spy_service_point_address.longitude | column | added | +| spy_service_point_address.latitude | column | added | + +{% endinfo_block %} + +## Set up transfer objects + +Generate transfer classes: + +```bash +console transfer:generate +``` + +## Configure navigation + +Add the `Services` and `Offers` sections to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Customer Portal + fa-id-badge + + + + Booked Services + self-service-portal + list-service + index + fa-paperclip + + + + +``` + +Generate routers and navigation cache: + +```bash +console router:cache:warm-up:backoffice +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure the following menu items are available in the Back Office navigation: + +- **Customer Portal** > **Booked Services** + +{% endinfo_block %} + +### Add translations + +[Here you can find how to import translations for Self-Service Portal feature](/docs/pbc/all/self-service-portal/latest/install/ssp-glossary-data-import.html) + +Import translations: + +```bash +console data:import glossary +``` + +## Set up behavior + +1. Add the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------| +| ProductClassFacetConfigTransferBuilderPlugin | Configures a facet filter for product classes as an enumeration type with multi-value support. | | SprykerFeature\Client\SelfServicePortal\Plugin\Catalog | +| ShipmentTypeProductViewExpanderPlugin | Adds shipment type information to product view based on provided shipment type identifiers. | | SprykerFeature\Client\SelfServicePortal\Plugin\ProductStorage | +| ProductOfferPreAddToCartPlugin | Adds the product offer reference to an item during the add-to-cart process. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| ServicePointPreAddToCartPlugin | Associates a service point with a cart item using a provided product offer reference and service point UUID. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CartPage | +| ShipmentTypePreAddToCartPlugin | Associates a shipment type with a cart item during the add-to-cart process. | | SprykerFeature\Yves\SelfServicePortal\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\SelfServicePortal\Plugin\CartPage | +| SelfServicePortalPageRouteProviderPlugin | Defines and adds routes for managing service points, searching, listing customer services, updating service times, and canceling services. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Router | +| ShipmentTypeProductConcretePostCreatePlugin | Adds shipment type information after creating a product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcretePostUpdatePlugin | Updates shipment type information after updating a product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteExpanderPlugin | Expands product concrete data with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteStorageCollectionExpanderPlugin | Expands product concrete storage collection with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductStorage | +| SspShipmentTypeQuoteExpanderPlugin | Expands quote data with SSP shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Quote | +| ServicePointQuoteExpanderPlugin | Expands quote data with service point information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Quote | +| ScheduleTimeOrderItemExpanderPreSavePlugin | Expands order item data with scheduled time information before saving. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspServiceShipmentTypePreReloadItemsPlugin | Checks and removes service items without a shipment type from cart. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| EditOfferProductOfferTableActionPlugin | Expands the product offer table with an edit button. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductOfferGui | +| SspServiceCancellableOrderItemExpanderPlugin | Expands order items with an `isCancellable` property. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ServiceSspAssetManagementExpanderPlugin | Expands assets with a services collection. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\SspAssetManagement | +| ProductServiceClassNameTwigPlugin | Adds the `serviceProductClassName` Twig global variable with the value from config. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Twig | +| SingleAddressPerShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin | Expands the checkout multi-shipping address form with single address per shipment type checkbox. | | SprykerFeature\Yves\SelfServicePortal\Plugin\CustomerPage | +| ProductClassItemExpanderPlugin | Expands cart items with the related product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| ServicePointItemExpanderPlugin | Expands cart items with a selected service point. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| SspShipmentTypeItemExpanderPlugin | Expands cart items with shipment type information. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Cart | +| ProductClassDataImportPlugin | Imports product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductToProductClassDataImportPlugin | Imports product to product class relations. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductShipmentTypeDataImportPlugin | Imports a product shipment type relation. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductClassesProductConcreteExpanderPlugin | Expands `ProductConcreteTransfer` with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ProductClassProductConcreteAfterUpdatePlugin | Updates product classes for an existing product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ProductClassProductConcretePostCreatePlugin | Saves product classes for a newly created product concrete. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Product | +| ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin | Maps shipment types from product concrete to product form data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassFormExpanderPlugin | Expands product concrete form with a product class field. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductConcreteFormEditDataProviderExpanderPlugin | Expands product concrete form data with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductConcreteTransferMapperPlugin | Maps product class data from form to `ProductConcreteTransfer`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ShipmentTypeProductConcreteFormExpanderPlugin | Expands the `ProductConcreteForm` with a choice field for shipment types. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ShipmentTypeProductFormTransferMapperExpanderPlugin | Maps shipment type form data to `ProductConcreteTransfer`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductManagement | +| ProductClassProductAbstractMapExpanderPlugin | Adds product class names to product abstract search data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductPageDataExpanderPlugin | Expands the provided ProductPageSearchTransfer transfer object's data with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductPageDataLoaderPlugin | Expands `ProductPageLoadTransfer` object with product class data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductPageSearch | +| ProductClassProductConcreteStorageCollectionExpanderPlugin | Expands `ProductConcreteStorage` transfers with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ProductStorage | +| ProductClassOrderExpanderPlugin | Expands order items with product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ProductClassOrderItemsPostSavePlugin | Persists product classes information from `ItemTransfer.productClasses`. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspProductClassSalesOrderItemCollectionPreDeletePlugin | Deletes related product class entries for given sales order items. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| CoordinatesServicePointSearchDataExpanderPlugin | Adds latitude and longitude coordinates to the service point search data. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\ServicePointSearch | +| ProductServiceAvailabilityStorageStrategyPlugin | Checks the availability of service products by verifying they have a service shipment type and at least one available product offer. | | SprykerFeature\Client\SelfServicePortal\Plugin\AvailabilityStorage | +| ShipmentTypeServicePointProductOfferStorageFilterPlugin | Filters product offers by shipment type and service point UUIDs from criteria to return matching offers. | | SprykerFeature\Client\SelfServicePortal\Plugin\ProductOfferStorage | +| SspServiceReschedulableOrderExpanderPlugin | Expands the order items with "reschedulable" flag, that is used to show/hide reschedule button in storefront and back-office. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| SspServiceReschedulableOrderExpanderPlugin | Expands the order items with "reschedulable" flag, that is used to show/hide reschedule button in storefront and back-office. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\Sales | +| ViewCompanySspServicePermissionPlugin | Allows customer to view services within the same company. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | +| ViewBusinessUnitSspServicePermissionPlugin | Allows customer to view services within the same company business unit. | | SprykerFeature\Yves\SelfServicePortal\Plugin\Permission | + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php + + */ + protected function getFacetConfigTransferBuilderPlugins(): array + { + return [ + new ProductClassFacetConfigTransferBuilderPlugin(), + ]; + } + + /** + * @return array> + */ + protected function getFacetConfigTransferBuilderPluginVariants(): array + { + return [ + SearchHttpConfig::TYPE_SEARCH_HTTP => [ + new ProductClassFacetConfigTransferBuilderPlugin(), + ], + ]; + } +} +``` + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + /** @var array<\Spryker\Client\ProductStorage\Dependency\Plugin\ProductViewExpanderPluginInterface> $plugins */ + $plugins = [ + new ShipmentTypeProductViewExpanderPlugin(), + ]; + + return $plugins; + } +} +``` + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new ProductOfferPreAddToCartPlugin(), + new ServicePointPreAddToCartPlugin(), + new ShipmentTypePreAddToCartPlugin(), + new ServiceDateTimePreAddToCartPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new SelfServicePortalPageRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new SspShipmentTypeItemExpanderPlugin(), + new ProductClassItemExpanderPlugin(), + new ServicePointItemExpanderPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new SspServiceShipmentTypePreReloadItemsPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Product/ProductDependencyProvider.php + +```php + + */ + protected function getProductConcreteAfterCreatePlugins(Container $container): array // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter + { + return [ + new ShipmentTypeProductConcretePostCreatePlugin(), + new ProductClassProductConcretePostCreatePlugin(), + ]; + } + + /** + * @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(), + new ProductClassProductConcreteAfterUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface> + */ + protected function getProductConcreteExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteExpanderPlugin(), + new ProductClassesProductConcreteExpanderPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + */ + protected function getProductConcreteFormEditDataProviderExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteFormEditDataProviderExpanderPlugin(), + new ProductClassProductConcreteFormEditDataProviderExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductFormTransferMapperExpanderPluginInterface> + */ + protected function getProductFormTransferMapperExpanderPlugins(): array + { + return [ + new ShipmentTypeProductFormTransferMapperExpanderPlugin(), + new ProductClassProductConcreteTransferMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormExpanderPluginInterface> + */ + protected function getProductConcreteFormExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteFormExpanderPlugin(), + new ProductClassFormExpanderPlugin(), + ]; + } +} +``` + +
    + + +
    + src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php +|array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataExpanderPluginInterface> + */ + protected function getDataExpanderPlugins(): array + { + $dataExpanderPlugins = []; + $dataExpanderPlugins[SelfServicePortalConfig::PLUGIN_PRODUCT_ABSTRACT_CLASS_DATA] = new ProductClassProductPageDataExpanderPlugin(); + + return $dataExpanderPlugins; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface> + */ + protected function getDataLoaderPlugins(): array + { + return [ + new ProductClassProductPageDataLoaderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface> + */ + protected function getProductAbstractMapExpanderPlugins(): array + { + return [ + new ProductClassProductAbstractMapExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductConcreteStorageCollectionExpanderPlugins(): array + { + return [ + new ShipmentTypeProductConcreteStorageCollectionExpanderPlugin(), + new ProductClassProductConcreteStorageCollectionExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new SspShipmentTypeQuoteExpanderPlugin(), + new ServicePointQuoteExpanderPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderItemExpanderPreSavePlugins(): array + { + return [ + new ScheduleTimeOrderItemExpanderPreSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPluginInterface> + */ + protected function getOrderItemExpanderPlugins(): array + { + return [ + new SspServiceCancellableOrderItemExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsPostSavePluginInterface> + */ + protected function getOrderItemsPostSavePlugins(): array + { + return [ + new ProductClassOrderItemsPostSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new ProductClassOrderExpanderPlugin(), + new SspServiceReschedulableOrderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\SalesExtension\Dependency\Plugin\SalesOrderItemCollectionPreDeletePluginInterface> + */ + protected function getSalesOrderItemCollectionPreDeletePlugins(): array + { + return [ + new SspProductClassSalesOrderItemCollectionPreDeletePlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/SelfServicePortal/SelfServicePortalDependencyProvider.php** + +```php + + */ + protected function getSspAssetManagementExpanderPlugins(): array + { + return [ + new ServiceSspAssetManagementExpanderPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + protected function getProductOfferTableExpanderPlugins(): array + { + return [ + new EditOfferProductOfferTableActionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ServicePointSearch/ServicePointSearchDependencyProvider.php** + +```php + + */ + protected function getServicePointSearchDataExpanderPlugins(): array + { + return [ + new CoordinatesServicePointSearchDataExpanderPlugin(), + ]; + } +} + +``` + +**src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php** + +```php + + */ + protected function getCheckoutMultiShippingAddressesFormExpanderPlugins(): array + { + return [ + new SingleAddressPerShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/AvailabilityStorage/AvailabilityStorageDependencyProvider.php** + +```php + + */ + protected function getAvailabilityStorageStrategyPlugins(): array + { + return [ + new ProductServiceAvailabilityStorageStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageFilterPlugins(): array + { + return [ + new ShipmentTypeServicePointProductOfferStorageFilterPlugin(), + ]; + } +} +``` + +2. Enable the project override to enable the checkout form to handle single addresses per shipment type: + + +
    + src/Pyz/Yves/CustomerPage/Form/CheckoutAddressCollectionForm.php + +```php +add( + static::FIELD_BILLING_SAME_AS_SHIPPING, + CheckboxType::class, + [ + 'required' => false, + 'constraints' => [], + 'validation_groups' => function (FormInterface $form) { + $shippingAddressForm = $form->getParent() + ? $form->getParent()->get(static::FIELD_SHIPPING_ADDRESS) + : null; + + if (!$shippingAddressForm) { + return false; + } + + if (!$this->isDeliverToMultipleAddressesEnabled($shippingAddressForm)) { + return false; + } + + return [static::GROUP_BILLING_SAME_AS_SHIPPING]; + }, + ], + ); + + return $this; + } + + /** + * @param \Symfony\Component\Form\FormEvent $event + * @param \SprykerShop\Yves\CustomerPage\Dependency\Service\CustomerPageToShipmentServiceInterface $shipmentService + * + * @return void + */ + protected function hydrateShippingAddressSubFormDataFromItemLevelShippingAddresses( + FormEvent $event, + CustomerPageToShipmentServiceInterface $shipmentService, + ): void { + $quoteTransfer = $event->getData(); + + if (!($quoteTransfer instanceof QuoteTransfer)) { + return; + } + + $quoteTransfer = $this->executeCheckoutAddressStepPreGroupItemsByShipmentPlugins($quoteTransfer); + + $shipmentGroupCollection = $this->mergeShipmentGroupsByShipmentHash( + $shipmentService->groupItemsByShipment($quoteTransfer->getItems()), + $shipmentService->groupItemsByShipment($quoteTransfer->getBundleItems()), + ); + + $shippingAddressForm = $event->getForm()->get(static::FIELD_SHIPPING_ADDRESS); + + if ($quoteTransfer->getItems()->count() || $quoteTransfer->getBundleItems()->count()) { + $this->setDeliverToMultipleAddressesEnabled($shippingAddressForm); + } + + if ($this->isDeliverToMultipleAddressesEnabled($shippingAddressForm) || $shipmentGroupCollection->count() < 1) { + return; + } + + $shipmentGroupTransfer = $shipmentGroupCollection->getIterator()->current(); + + if (!$shipmentGroupTransfer->getShipment() || !$shipmentGroupTransfer->getShipment()->getShippingAddress()) { + return; + } + + $shippingAddressForm->setData(clone $shipmentGroupTransfer->getShipment()->getShippingAddress()); + } +} +``` + +
    + +**src/Pyz/Yves/CustomerPage/Form/DataProvider/CheckoutAddressFormDataProvider.php** + +```php +productBundleClient->getGroupedBundleItems( + $quoteTransfer->getItems(), + $quoteTransfer->getBundleItems(), + ); + + return count($items) >= 1 + && $this->shipmentClient->isMultiShipmentSelectionEnabled() + && !$this->hasQuoteGiftCardItems($quoteTransfer); + } +} +``` + +**src/Pyz/Client/Permission/PermissionDependencyProvider.php** + +```php +use Spryker\Client\Permission\PermissionDependencyProvider as SprykerPermissionDependencyProvider; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewCompanySspServicePermissionPlugin; +use SprykerFeature\Yves\SelfServicePortal\Plugin\Permission\ViewBusinessUnitSspServicePermissionPlugin; + +class PermissionDependencyProvider extends SprykerPermissionDependencyProvider +{ + protected function getPermissionPlugins(): array + { + return [ + new ViewCompanySspServicePermissionPlugin(), + new ViewBusinessUnitSspServicePermissionPlugin(), + ]; + } +} +``` + +Enable new permission plugins + +```bash +console setup:init-db +``` + +## Demo data for EU region / DE store + +### Add service demo data + +Prepare your data according to your requirements using our demo data: + +**data/import/common/common/shipment.csv** + +```csv +shipment_method_key,name,carrier,taxSetName +in-center-service,Service Center Appointment,Service,Tax Exempt +``` + +**data/import/common/common/shipment_type.csv** + +```csv +key,name,is_active +in-center-service,In-Center Service,1 +``` + +**data/import/common/common/service.csv** + +```csv +key,service_point_key,service_type_key,is_active +s3,sp1,in-center-service,1 +``` + +**data/import/common/common/service_type.csv** + +```csv +name,key +Service Visit,in-center-service +``` + +**data/import/common/common/shipment_method_shipment_type.csv** + +```csv +shipment_method_key,shipment_type_key +in-center-service,in-center-service +``` + +**data/import/common/common/shipment_type_service_type.csv** + +```csv +shipment_type_key,service_type_key +in-center-service,in-center-service +``` + +**data/import/common/DE/shipment_method_store.csv** + +```csv +shipment_method_key,store +in-center-service,DE +``` + +**data/import/common/common/product_to_product_class.csv** + +```csv +sku,product_class_key +service-001-1,service +service-001-1,scheduled +``` + +**data/import/common/common/product_class.csv** + +```csv +key,name +service,Service +scheduled,Scheduled +spare-parts,Spare parts +``` + +**data/import/common/DE/shipment_type_store.csv** + +```csv +shipment_type_key,store_name +in-center-service,DE +delivery,DE +``` + +**data/import/common/DE/shipment_price.csv** + +```csv +shipment_method_key,store,currency,value_net,value_gross +in-center-service,DE,EUR,,0 +in-center-service,DE,CHF,,0 +``` + +**data/import/common/common/product_shipment_type.csv** + +```csv +concrete_sku,shipment_type_key +service-001-1,in-center-service +``` + +### Import product labels for the service products + +Prepare your data according to your requirements using our demo data: + +**data/import/common/DE/product_label_store.csv** + +```csv +name,store_name +Service,DE +Scheduled,DE +Spare parts,DE +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|------------|----------|-----------|--------------|------------------------------------------------------------| +| name | ✓ | string | Service | Product label name (for example, Service, Scheduled, Spare parts). | +| store_name | ✓ | string | DE | Store to which the label is assigned (for example, AT, DE, US). | + + +**data/import/common/common/product_label.csv** + +```csv +name,is_active,is_dynamic,is_exclusive,front_end_reference,valid_from,valid_to,name.en_US,name.de_DE,product_abstract_skus,priority +Service,1,0,0,service,,,Service,Service,"service-001,service-002,service-003,service-004",4 +Scheduled,1,0,0,scheduled,,,Scheduled,Geplant,"service-001,service-002,service-003,service-004",5 +Spare parts,1,0,0,spare-parts,,,Spare parts,Ersatzteile,"service-001,service-002,service-003,service-004",6 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DESCRIPTION | +|-----------------------|----------|------------------------|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| name | ✓ | string | Service | Base (default) label name. Must be unique across labels; used to reference the label in other import files (for example, product_label_store). | +| is_active | ✓ | int (0 or 1) | 1 | Activation flag. 1 = label is active and visible; 0 = inactive (kept for future use). | +| is_dynamic | ✗ | int (0 or 1) | 0 | Marks label as dynamic (rule-driven) when 1. Keep 0 for manually assigned/static labels. | +| is_exclusive | ✗ | int (0 or 1) | 0 | When 1, this label suppresses display of other non-exclusive labels on the same product. | +| front_end_reference | ✗ | string (slug) | service | Front-end identifier/slug usable for CSS hooks, theming, or routing. Should be URL/identifier friendly (lowercase, dashes). | +| valid_from | ✗ | datetime (Y-m-d H:i:s) | 2025-01-01 00:00:00 | Start of validity window. Leave empty for immediate/no start restriction. | +| valid_to | ✗ | datetime (Y-m-d H:i:s) | 2025-12-31 23:59:59 | End of validity window. Leave empty for no expiry. | +| name.en_US | ✓ | string | Service | Localized label name for en_US. Required if the locale is part of the project storefront locales. | +| name.de_DE | ✗ | string | Ersatzteile | Localized label name for de_DE. Add one column per supported locale (pattern: name.{locale}). | +| product_abstract_skus | ✗ | comma-separated list | "service-001,service-002" | List of abstract product SKUs assigned to this label. Empty when using dynamic rules or assigning later. | +| priority | ✗ | int | 4 | Sorting / display priority. Lower or higher precedence depends on project logic (by default lower number = higher priority in many setups). | + + +#### Extend the data import configuration + +**/data/import/local/full_EU.yml** + +```yaml +# ... + +# SelfServicePortal +- data_entity: shipment-type + source: data/import/common/common/shipment_type.csv +- data_entity: service-type + source: data/import/common/common/service_type.csv +- data_entity: service + source: data/import/common/common/service.csv +- data_entity: shipment-method-shipment-type + source: data/import/common/common/shipment_method_shipment_type.csv +- data_entity: shipment-type-service-type + source: data/import/common/common/shipment_type_service_type.csv +- data_entity: shipment-method-store + source: data/import/common/DE/shipment_method_store.csv +- data_entity: product-class + source: data/import/common/common/product_class.csv +- data_entity: product-to-product-class + source: data/import/common/common/product_to_product_class.csv +- data_entity: shipment-type-store + source: data/import/common/DE/shipment_type_store.csv +- data_entity: shipment-price + source: data/import/common/DE/shipment_price.csv +- data_entity: product-shipment-type + source: data/import/common/common/product_shipment_type.csv +``` + +### Register the following data import plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------|-----------------------------------------------------|---------------|----------------------------------------------------------------------| +| ProductShipmentTypeDataImportPlugin | Imports product shipment type relations into persistence. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductClassDataImportPlugin | Imports product classes. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | +| ProductToProductClassDataImportPlugin | Imports product to product class relations. | | SprykerFeature\Zed\SelfServicePortal\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductShipmentTypeDataImportPlugin(), + new ProductClassDataImportPlugin(), + new ProductToProductClassDataImportPlugin(), + ]; + } +} +``` + +
    + src/Pyz/Zed/Console/ConsoleDependencyProvider.php + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_SHIPMENT_TYPE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_CLASS), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . SelfServicePortalConfig::IMPORT_TYPE_PRODUCT_TO_PRODUCT_CLASS), + ]; + } + +} +``` + +
    + +### Import the data + +{% info_block infoBox "Prerequisites" %} + +Before importing the data, make sure you have imported demo data for product concrete with sku **service-001-1**: +- [Import product data](/docs/dg/dev/data-import/latest/importing-product-data-with-a-single-file.html#single-csv-file-for-combined-product-data-import) + +Before importing the data, make sure you have imported demo data for service point with key **sp1**: +- [Import Service Points data](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html#import-service-points) + +{% endinfo_block %} + +```bash +console data:import product-class +console data:import shipment +console data:import product-shipment-type +console data:import shipment-price +console data:import shipment-type +console data:import shipment-type-store +console data:import shipment-method-store +console data:import service +console data:import shipment-type-service-type +console data:import shipment-method-shipment-type +console data:import service-type +console data:import:product-label +console data:import product-to-product-class +``` + +{% info_block warningBox "Verification" %} + +- Make sure the glossary keys have been added to `spy_glossary_key` and `spy_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` + - `spy_product_label` + - `spy_product_label_store` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Catalog** > **Products**. +2. Create an abstract product with a concrete product. +- Add **In-Center Service** and **Delivery** shipment types for the concrete product. +- Add **Service** and **Scheduled** product classes for the concrete product. + +5. Go to **Marketplace** > **Offers**. +6. 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 a sign point to the product offer +- The in-center service shipment type is available + +{% endinfo_block %} + +## Set up widgets + +Set up widgets as follows: + +1. Register the following plugins to enable widgets and plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspServiceMenuItemWidget | Adds a menu item for accessing SSP services in the navigation. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceChangeScheduledTimeLinkWidget | Provides a link to change the scheduled time for a specific service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| ListCartItemsByShipmentTypeWidget | Lists items in the cart grouped by their shipment type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| ServiceListWidget | Display the list of the given service products. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspAddressFormItemsByShipmentTypeWidget | Lists address from items grouped by their shipment type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspProductOfferPriceWidget | Displays the product offer price for the products with a service type. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceCancelWidget | Renders a cancel button for the sales order item on the order details page. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServiceDetectorWidget | Provide a method to determine if the product is a service. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointGeoCodeWidget | Displays the coordinates of the service point. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointNameForItemWidget | Displays the service point name for the cart items. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspServicePointSearchWidget | Displays the service point search modal window. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SspShipmentTypeServicePointSelectorWidget | Displays the shipment type and service point selector. | | SprykerFeature\Yves\SelfServicePortal\Widget | +| SingleAddressPerShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin | Generates a cache key for the related widget. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| AddressFormItemsByShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin | Generates a cache key for the related widget. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceCancelWidgetCacheKeyGeneratorStrategyPlugin | Generates cache key for `SspServiceCancelWidget`. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspServiceChangeScheduledTimeLinkWidgetCacheKeyGeneratorStrategyPlugin | Generates cache key for `SspServiceChangeScheduledTimeLinkWidget`. | | SprykerFeature\Yves\SelfServicePortal\Plugin\ShopApplication | +| SspListMenuItemWidget | Provides a menu item widget for SSP lists in the customer account navigation. | | SprykerFeature\Yves\SelfServicePortal\Widget | + +
    + src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php + + +```php + + */ + protected function getWidgetCacheKeyGeneratorStrategyPlugins(): array + { + return [ + new AddressFormItemsByShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin(), + new SingleAddressPerShipmentTypeWidgetCacheKeyGeneratorStrategyPlugin(), + new SspServiceCancelWidgetCacheKeyGeneratorStrategyPlugin(), + new SspServiceChangeScheduledTimeLinkWidgetCacheKeyGeneratorStrategyPlugin(), + ]; + } +} +``` + +
    + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +console frontend:zed:install-dependencies +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +Set customer permissions for inquiry management: + +1. In the Back Office, go to **Customers** > **Company Roles**. +2. Click **Add Company User Role**. +3. Select a company. +4. Enter a name for the role. +5. In **Unassigned Permissions**, enable the following permissions: + - **View company services** + - **View business unit services** +6. Click **Submit**. +7. Go to **Customers** > **Company Users**. +8. Click **Edit** next to a user. +9. Assign the role you've created to the user. + + +1. On the Storefront, use the search to find the service product you've created. + Make sure the product is available in the catalog. + +2. Click the product to open its details page. Make sure the following applies on the product details page: + + - Delivery and In-Center-Service shipment types are available + - Select In-Center-Service shipment type + - A service point selector is displayed + - A service date and time selector is displayed + +3. Select a service point. +4. Select a service date and time. +5. Add the product to cart. +6. Add several other service and regular products to cart. +7. 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 date and time is displayed. + +9. Place the order. + Make sure the order is places successfully and the order summary includes service-specific details. + +10. 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 + +17. 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. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. 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 + +2. 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. +3. Make changes to a service order. + Make sure the changes are reflected in the customer profile on the Storefront. +4. In the Back Office, add a new service product. + Make sure that this product is displayed on the Storefront. +5. On the Storefront, go to the catalog page. + Make sure you can filter products by product class: scheduled or service. +{% endinfo_block %} + +## Enable Storefront API endpoints + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------|---------------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SspServicesResourceRoutePlugin | Provides the GET endpoint for the service products (booked-services). | | SprykerFeature\Glue\SelfServicePortal\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new SspServicesResourceRoutePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can see the `booked-services` resources for the company user in the request: + +0. As a company user, place an order with a service product. + +2. Get the access token by sending a `POST` request to the token endpoint with the company user credentials. + `POST https://glue.mysprykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": {username}, + "password": {password} + } + } +} +``` + +2. Use the access token to access the `booked-services` endpoint: + +`GET https://glue.mysprykershop.com/booked-services` + +```json +{ + "data": [ + { + "type": "booked-services", + "id": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "attributes": { + "uuid": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "productName": "Emergency Repair", + "scheduledAt": null, + "createdAt": "2025-09-23 11:05:30", + "stateDisplayName": "oms.state.new", + "stateName": "grace period started" + }, + "links": { + "self": "http://glue.eu.spryker.local/booked-services/120b7a51-69e4-54b9-96a6-3b5eab0dfe7a?page[offset]=0&page[limit]=1" + } + } + ], + "links": { + "self": "http://glue.eu.spryker.local/booked-services?page[offset]=0&page[limit]=1" + } +} +``` + +{% endinfo_block %} + +## Set up frontend templates + +For information about setting up frontend templates, see [Set up SSP frontend templates](/docs/pbc/all/self-service-portal/latest/install/ssp-frontend-templates.html). diff --git a/_includes/pbc/all/install-features/202602.0/install-the-uuid-generation-console-feature.md b/_includes/pbc/all/install-features/202602.0/install-the-uuid-generation-console-feature.md new file mode 100644 index 00000000000..30c87f82ff3 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/install-the-uuid-generation-console-feature.md @@ -0,0 +1,88 @@ +This document describes how to install the Uuid Generation Console feature. + +## Prerequisites + +Install the required features: + +| FEATURE | VERSION | INSTALLATION GUIDE | +| - | - | - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/uuid:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY| +| - | - | +| Uuid | vendor/spryker/uuid | + + +{% endinfo_block %} + + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| - | - | - | - | +| UuidGeneratorConfigurationTransfer | class | created | src/Generated/Shared/Transfer/UuidGeneratorConfigurationTransfer.php | +| UuidGeneratorReportTransfer | class | created |src/Generated/Shared/Transfer/UuidGeneratorReportTransfer.php | + +{% endinfo_block %} + + +## 3) Set up console command + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| - | - | - | - | +| UuidGeneratorConsole | Provides the `uuid:generate` console command. | None | \Spryker\Zed\Uuid\Communication\Console\UuidGeneratorConsole | + +**src/Pyz/Glue/Console/ConsoleDependencyProvider.php** + +```php + +src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php + +```php + + */ + protected function getCheckoutAddressStepPreGroupItemsByShipmentPlugins(): array + { + return [ + new MerchantShipmentCheckoutAddressStepPreGroupItemsByShipmentPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that during the checkout steps, items and their shipments have the same merchant reference attached to them. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-marketplace-shipment-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-marketplace-shipment-feature.md new file mode 100644 index 00000000000..c3e03b404df --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-marketplace-shipment-feature.md @@ -0,0 +1,142 @@ +This document describes how to install the Marketplace Shipment feature. + +## Install feature core + +Follow the steps below to install the Marketplace Shipment feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | + + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-shipment:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantShipment | vendor/spryker/merchant-shipment | +| MerchantShipmentGui | vendor/spryker/merchant-shipment-gui | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-|-|-| +| ShipmentConfig::getShipmentHashFields() | Used to group items by shipment using merchant reference. | \Pyz\Service\Shipment | + +**src/Pyz/Service/Shipment/ShipmentConfig.php** + +```php + + */ + public function getShipmentHashFields(): array + { + return array_merge(parent::getShipmentHashFields(), [ShipmentTransfer::MERCHANT_REFERENCE]); + } +} +``` + +{% info_block warningBox "Verification" %} + +Place an order and check that items are grouped by merchant shipment in the Back Office. + +{% endinfo_block %} + +### 3) Set up the database schema and transfer definitions + +Apply the database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-|-|-| +| spy_sales_shipment.merchant_reference | column | created | + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| MerchantShipmentCriteria | class | created | src/Generated/Shared/Transfer/MerchantShipmentCriteria | +| Shipment.merchantReference | property | created | src/Generated/Shared/Transfer/ShipmentTransfer | + +{% endinfo_block %} + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantShipmentOrderItemTemplatePlugin | Shows merchant shipment in shipment section of the ShipmentGui::SalesController | | Spryker\Zed\MerchantShipmentGui\Communication\ShipmentGui | + +**src/Pyz/Zed/ShipmentGui/ShipmentGuiDependencyProvider.php** + +```php + + */ + protected function getShipmentOrderItemTemplatePlugins(): array + { + return [ + new MerchantShipmentOrderItemTemplatePlugin(), + ]; + } +} +``` + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE| INSTALLATION GUIDE | +|-|-|-| +| Marketplace Shipment + Cart | | [Install the Marketplace Shipment + Cart feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-the-marketplace-shipment-cart-feature.html) | +| Marketplace Shipment + Checkout | | [Install the Marketplace Shipment + Checkout feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.html) | +| Marketplace Shipment + Customer | | [Install the Marketplace Shipment + Customer feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-customer-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-category-management-marketplace-merchant-commission.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-category-management-marketplace-merchant-commission.md new file mode 100644 index 00000000000..b7cbd6f2d4d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-category-management-marketplace-merchant-commission.md @@ -0,0 +1,70 @@ +This document describes how to install the Category Management + Marketplace Merchant Commission feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker/category-merchant-commission-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------------|-------------------------------------------------------| +| CategoryMerchantCommissionConnector | vendor/spryker/category-merchant-commission-connector | + +{% endinfo_block %} + + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------| +| CategoryMerchantCommissionItemCollectorRulePlugin | Collects the items whose categories match the provided clause. | | Spryker\Zed\CategoryMerchantCommissionConnector\Communication\Plugin\MerchantCommission | + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new CategoryMerchantCommissionItemCollectorRulePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Import a new merchant commission via data import or GUI import with an item condition defined as a query string with a `category` field. For example, `category = 'cameras-and-camcorders'`. +2. Add a merchant product assigned to the defined category to cart and place the order. + +Make sure the following applies: +- The `commission-calculate` OMS event has been triggered. +- In the `spy_sales_merchant_commission` database table, there's a new record with your merchant commission applied to corresponding sales order item. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-cart-feature.md new file mode 100644 index 00000000000..bfa46ad3ef7 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-cart-feature.md @@ -0,0 +1,139 @@ +This document describes how to install the Marketplace Cart feature. + +## Install feature core + +Follow the steps below to install the Marketplace Cart feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ----------- | ------- | ------------------| +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Threshold | {{page.release_tag}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-cart:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------------- | --------------------- | +| CartNoteMerchantSalesOrderGui | vendor/spryker/cart-note-merchant-sales-order-gui | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| ------------- | ------------- | --------- | +| MerchantSalesOrderMerchantUserGuiConfig::getMerchantSalesOrderDetailExternalBlocksUrls() | Introduces a list of urls for order details page configuration. | src/Pyz/Zed/MerchantSalesOrderMerchantUserGui/MerchantSalesOrderMerchantUserGuiConfig.php | + +```php + + */ + public function getMerchantSalesOrderDetailExternalBlocksUrls(): array + { + return [ + 'cart_note' => '/cart-note-merchant-sales-order-gui/merchant-sales-order/list', + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Ensure that the cart notes are displayed on the order view page when looking at merchant orders in the Back Office. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Cart feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| -------------------- | ----------- | +| Order Threshold | {{page.release_tag}} | +| Cart | {{page.release_tag}} | +| Merchant Portal Core | {{page.release_tag}} | +| Marketplace Order Management | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/cart-note-merchant-portal-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------------------- | ------------------------------------- | +| CartNoteMerchantPortalGui | spryker/cart-note-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up behavior + +Add the following configuration to the project: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | ------------------ | ----------- | ------------------ | +| CartNoteMerchantOrderItemTableExpanderPlugin | Adds CartNote column to Sales tables in MerchantPortal | Marketplace Sales Merchant Portal integrated | Spryker\Zed\CartNoteMerchantPortalGui\Communication\Plugin | + +**src/Pyz/Zed/SalesMerchantPortalGui/SalesMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantOrderItemTableExpanderPlugins(): array + { + return [ + new CartNoteMerchantOrderItemTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `CartNoteMerchantOrderItemTableExpanderPlugin` plugin is set up by opening `http://zed.mysprykershop.com/sales-merchant-portal-gui/orders`. Click on any order and check that the *Cart Note* column is present. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-feature.md new file mode 100644 index 00000000000..e0f452a4ad6 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-feature.md @@ -0,0 +1,855 @@ + + + +This document describes how to install the [Marketplace Inventory Management](/docs/pbc/all/warehouse-management-system/latest/marketplace/marketplace-inventory-management-feature-overview.html) feature. + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-inventory-management:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantStock | vendor/spryker/merchant-stock | +| MerchantStockDataImport | vendor/spryker/merchant-stock-data-import | +| MerchantStockGui | vendor/spryker/merchant-stock-gui | +| ProductOfferStock | vendor/spryker/product-offer-stock | +| ProductOfferStockDataImport | vendor/spryker/product-offer-stock-data-import | +| ProductOfferStockGui | vendor/spryker/product-offer-stock-gui | +| ProductOfferStockGuiExtension | vendor/spryker/product-offer-stock-gui-extension | +| ProductOfferAvailability | vendor/spryker/product-offer-availability | +| ProductOfferAvailabilityStorage | vendor/spryker/product-offer-availability-storage | + +{% endinfo_block %} + + +### 2) Set up the database schema + +1. Adjust the schema definition so entity changes trigger events: + +**src/Pyz/Zed/ProductOfferStock/Persistence/Propel/Schema/spy_product_offer_stock.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +2. Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-|-|-| +| spy_merchant_stock | table | created | +| spy_product_offer_stock | table | created | +| spy_product_offer_availability_storage | table | created | + +{% endinfo_block %} + +### 3) Set up transfer objects + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| MerchantStock | class | Created | src/Generated/Shared/Transfer/MerchantStockTransfer | +| MerchantStockCriteria | class | Created | src/Generated/Shared/Transfer/MerchantStockCriteriaTransfer | +| ProductAvailabilityCriteria | class | Created | src/Generated/Shared/Transfer/ProductAvailabilityCriteriaTransfer | +| ProductConcreteAvailability | class | Created | src/Generated/Shared/Transfer/ProductConcreteAvailabilityTransfer | +| ProductOfferAvailabilityRequest | class | Created | src/Generated/Shared/Transfer/ProductOfferAvailabilityRequestTransfer | +| ProductOfferAvailabilityStorage | class | Created | src/Generated/Shared/Transfer/ProductOfferAvailabilityStorageTransfer | +| ProductOfferStock | class | Created | src/Generated/Shared/Transfer/ProductOfferStockTransfer | +| ProductOfferStockRequest | class | Created | src/Generated/Shared/Transfer/ProductOfferStockRequestTransfer | +| ReservationRequest | class | Created | src/Generated/Shared/Transfer/ReservationRequestTransfer | +| SpyMerchantStockEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantStockEntityTransfer | +| SpyMerchantUserEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantUserEntityTransfer | +| SpyProductOfferAvailabilityStorageEntity | class | Created | src/Generated/Shared/Transfer/SpyProductOfferAvailabilityStorageEntityTransfer | +| SpyProductOfferStockEntity | class | Created | src/Generated/Shared/Transfer/SpyProductOfferStockEntityTransfer | + +{% endinfo_block %} + +### 4) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantStockMerchantExpanderPlugin | Expands `MerchantTransfer` with related stocks. | | Spryker\Zed\MerchantStock\Communication\Plugin\Merchant | +| MerchantStockMerchantPostCreatePlugin | Creates default stock for the merchant. | | Spryker\Zed\MerchantStock\Communication\Plugin\Merchant | +| MerchantStockMerchantFormExpanderPlugin | Expands `MerchantForm` with the form field for merchant warehouses. | | Spryker\Zed\MerchantStockGui\Communication\Plugin\MerchantGui | +| ProductOfferStockProductOfferExpanderPlugin | Expands `ProductOfferTransfer` with product offer stock. | | Spryker\Zed\ProductOfferStock\Communication\Plugin\ProductOffer | +| ProductOfferStockProductOfferPostCreatePlugin | Persists product offer stock on product offer create. | | Spryker\Zed\ProductOfferStock\Communication\Plugin\ProductOffer | +| ProductOfferStockProductOfferPostUpdatePlugin | Persists product offer stock on product offer updated. | | Spryker\Zed\ProductOfferStock\Communication\Plugin\ProductOffer | +| ProductOfferAvailabilityStrategyPlugin | Reads product offer availability. | | Spryker\Zed\ProductOfferAvailability\Communication\Plugin\Availability | +| ProductOfferStockProductOfferViewSectionPlugin | Shows the stock section on the product offer view page in the Back Office. | | Spryker\Zed\ProductOfferStockGui\Communication\Plugin\ProductOffer | +| MerchantStockAclEntityConfigurationExpanderPlugin | Expands the provided ACL entity metadata config transfer object with merchant stock composite data. | | Spryker\Zed\MerchantStock\Communication\Plugin\AclMerchantPortal | +| ProductOfferStockAclEntityConfigurationExpanderPlugin | Expands the provided ACL entity metadata config transfer object with product offer composite data. | | Spryker\Zed\ProductOfferStock\Communication\Plugin\AclMerchantPortal | +| ProductOfferAvailabilityStorageStrategyPlugin | Provides a product offer availability strategy, which defines whether the product offer is available for the current store. | | Spryker\Client\ProductOfferAvailabilityStorage\Plugin\AvailabilityStorage | +| ProductOfferAvailabilityEventResourceBulkRepositoryPlugin | Triggers publish events for all or particular product offer availability (using the ID identifier), which sends them to the `spy_product_offer_availability_storage` table. | | Spryker\Zed\ProductOfferAvailabilityStorage\Communication\Plugin\Event | + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + ... + new MerchantStockAclEntityConfigurationExpanderPlugin(), + new ProductOfferStockAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/AvailabilityStorage/AvailabilityStorageDependencyProvider.php** + +```php + + */ + protected function getAvailabilityStorageStrategyPlugins(): array + { + return [ + ... + new ProductOfferAvailabilityStorageStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + */ + protected function getEventTriggerResourcePlugins(): array + { + return [ + ... + new ProductOfferAvailabilityEventResourceBulkRepositoryPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Merchant/MerchantDependencyProvider.php** + +```php + + */ + protected function getMerchantPostCreatePlugins(): array + { + return [ + new MerchantStockMerchantPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantExtension\Dependency\Plugin\MerchantExpanderPluginInterface> + */ + protected function getMerchantExpanderPlugins(): array + { + return [ + new MerchantStockMerchantExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following actions take place as expected: +- When you retrieve a merchant using `MerchantFacade::get()`, the response transfer contains merchant stocks. +- When you create a merchant in the Back Office, its stock also gets created in the `spy_merchant_stock` table. + +{% endinfo_block %} + +**src/Pyz/Zed/MerchantGui/MerchantGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantFormExpanderPlugins(): array + { + return [ + new MerchantStockMerchantFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you edit a merchant on `http://zed.de.demo-spryker.com/merchant-gui/list-merchant`, the `Warehouses` field is displayed. + +{% endinfo_block %} + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + public function getProductOfferViewSectionPlugins(): array + { + return [ + new ProductOfferStockProductOfferViewSectionPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you view some product offer at `http://zed.de.demo-spryker.com/product-offer-gui/view?id-product-offer={{idProductOffer}}`, you the `Stock` section is displayed. + +{% endinfo_block %} + +**src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php** + +```php + + */ + protected function getProductOfferPostCreatePlugins(): array + { + return [ + new ProductOfferStockProductOfferPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferPostUpdatePluginInterface> + */ + protected function getProductOfferPostUpdatePlugins(): array + { + return [ + new ProductOfferStockProductOfferPostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferExpanderPluginInterface> + */ + protected function getProductOfferExpanderPlugins(): array + { + return [ + new ProductOfferStockProductOfferExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following actions take place as expected: +- When you create a product offer using `ProductOfferFacade::create()` with provided stock data, it persists to `spy_product_offer_stock`. +- When you update a product offer using `ProductOfferFacade::create()` with provided stock data, it updates stock data in `spy_product_offer_stock`. +- When you retrieve a product offer using `ProductOfferFacade::findOne()`, the response data contains info about product offer stocks. + +{% endinfo_block %} + +**src/Pyz/Zed/Availability/AvailabilityDependencyProvider.php** + +```php + + */ + protected function getAvailabilityStrategyPlugins(): array + { + return [ + new ProductOfferAvailabilityStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `AvailabilityFacade::findOrCreateProductConcreteAvailabilityBySkuForStore()` returns not a product but a product offer availability if the product offer reference is passed in the request. + +{% endinfo_block %} + +### 6) Configure export to the key-value store (Redis or Valkey) + +This step publishes tables on change (create, edit) to the `spy_product_offer_availability_storage` and synchronizes the data to the storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferAvailabilityStorageEventSubscriber | Registers listeners that are responsible for publishing product offer availability-related changes to the storage. | | Spryker\Zed\ProductOfferAvailabilityStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductOfferAvailabilityStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Set up publishers + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferAvailabilityProductOfferStoreStoragePublisherPlugin | Synchronizes product offer availability to the storage when the product offer store entity has changed. | | Spryker\Zed\ProductOfferAvailabilityStorage\Communication\Plugin\Publisher\ProductOfferAvailability | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getPublisherPlugins(): array + { + return array_merge( + ... + $this->getProductOfferAvailabilityStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getProductOfferAvailabilityStoragePlugins(): array + { + return [ + new ProductOfferAvailabilityProductOfferStoreStoragePublisherPlugin(), + ]; + } +} +``` + +#### Register the synchronization queue and synchronization error queue + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + QueueNameFoo, (Queue and error queue will be created: QueueNameFoo and QueueNameFoo.error) + * QueueNameBar => [ + * RoutingKeyFoo => QueueNameBaz, // (Additional queues can be defined by several routing keys) + * ], + * + * @see https://www.rabbitmq.com/tutorials/amqp-concepts.html + * + * @return array + */ + protected function getQueueConfiguration(): array + { + return [ + ProductOfferAvailabilityStorageConfig::PRODUCT_OFFER_AVAILABILITY_SYNC_STORAGE_QUEUE, + ]; + } +} +``` + +#### Configure message processors + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all product offer availability messages to sync with the key-value store (Redis or Valkey) storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | + +**src/Pyz/Zed/ProductOfferAvailabilityStorage/ProductOfferAvailabilityStorageConfig.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container) + { + return [ + ProductOfferAvailabilityStorageConfig::PRODUCT_OFFER_AVAILABILITY_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Set up, regenerate, and resync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferAvailabilitySynchronizationDataBulkPlugin | Allows synchronizing the entire storage table content into the storage. | | Spryker\Zed\ProductOfferAvailabilityStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductOfferAvailabilitySynchronizationDataBulkPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following actions take place as expected: +- The command `console sync:data merchant_profile` exports data from the `spy_product_offer_availability_storage` table to the key-value store (Redis or Valkey). +- When a product offer availability entity gets created or updated through ORM, it's exported to the key-value store (Redis or Valkey) accordingly. + +{% endinfo_block %} + +### 7) Import data + +Import the following data. + +#### Import merchant stock data + +Prepare your data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_stock.csv** + +```csv +merchant_reference,stock_name +MER000001,Spryker MER000001 Warehouse 1 +MER000002,Video King MER000002 Warehouse 1 +MER000005,Budget Cameras MER000005 Warehouse 1 +MER000006,Sony Experts MER000006 Warehouse 1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| merchant_reference | ✓ | string | MER000001 | Merchant identifier. | +| stock_name | ✓ | string | Spryker MER000001 Warehouse 1 | Stock identifier. | + +#### Import product offer stock data + +**data/import/common/common/marketplace/product_offer_stock.csv** + +
    +Prepare your data according to your requirements using the demo data: + +```csv +product_offer_reference,stock_name,quantity,is_never_out_of_stock +offer1,Spryker MER000001 Warehouse 1,10,1 +offer2,Video King MER000002 Warehouse 1,0,0 +offer3,Spryker MER000001 Warehouse 1,10,0 +offer4,Video King MER000002 Warehouse 1,0,0 +offer5,Spryker MER000001 Warehouse 1,10,1 +offer6,Video King MER000002 Warehouse 1,10,0 +offer8,Video King MER000002 Warehouse 1,0,0 +offer9,Video King MER000002 Warehouse 1,0,0 +offer10,Video King MER000002 Warehouse 1,0,0 +offer11,Video King MER000002 Warehouse 1,0,0 +offer12,Video King MER000002 Warehouse 1,0,0 +offer13,Video King MER000002 Warehouse 1,0,0 +offer14,Video King MER000002 Warehouse 1,0,0 +offer15,Video King MER000002 Warehouse 1,0,0 +offer16,Video King MER000002 Warehouse 1,0,0 +offer17,Video King MER000002 Warehouse 1,0,0 +offer18,Video King MER000002 Warehouse 1,10,0 +offer19,Video King MER000002 Warehouse 1,10,0 +offer20,Video King MER000002 Warehouse 1,10,0 +offer21,Video King MER000002 Warehouse 1,10,0 +offer22,Video King MER000002 Warehouse 1,10,0 +offer23,Video King MER000002 Warehouse 1,10,0 +offer24,Video King MER000002 Warehouse 1,10,0 +offer25,Video King MER000002 Warehouse 1,10,0 +offer26,Video King MER000002 Warehouse 1,10,0 +offer27,Video King MER000002 Warehouse 1,10,0 +offer28,Video King MER000002 Warehouse 1,10,0 +offer29,Video King MER000002 Warehouse 1,10,0 +offer30,Video King MER000002 Warehouse 1,10,1 +offer31,Video King MER000002 Warehouse 1,10,1 +offer32,Video King MER000002 Warehouse 1,10,1 +offer33,Video King MER000002 Warehouse 1,10,1 +offer34,Video King MER000002 Warehouse 1,5,1 +offer35,Video King MER000002 Warehouse 1,5,1 +offer36,Video King MER000002 Warehouse 1,5,1 +offer37,Video King MER000002 Warehouse 1,5,1 +offer38,Video King MER000002 Warehouse 1,5,1 +offer39,Video King MER000002 Warehouse 1,2,1 +offer40,Video King MER000002 Warehouse 1,2,1 +offer41,Video King MER000002 Warehouse 1,2,1 +offer42,Video King MER000002 Warehouse 1,2,1 +offer43,Video King MER000002 Warehouse 1,2,1 +offer44,Video King MER000002 Warehouse 1,20,1 +offer45,Video King MER000002 Warehouse 1,20,1 +offer46,Video King MER000002 Warehouse 1,20,1 +offer47,Video King MER000002 Warehouse 1,20,1 +offer48,Video King MER000002 Warehouse 1,20,1 +offer49,Budget Cameras MER000005 Warehouse 1,0,1 +offer50,Budget Cameras MER000005 Warehouse 1,0,1 +offer51,Budget Cameras MER000005 Warehouse 1,0,1 +offer52,Budget Cameras MER000005 Warehouse 1,0,1 +offer53,Budget Cameras MER000005 Warehouse 1,0,1 +offer54,Budget Cameras MER000005 Warehouse 1,0,1 +offer55,Budget Cameras MER000005 Warehouse 1,0,1 +offer56,Budget Cameras MER000005 Warehouse 1,0,1 +offer57,Budget Cameras MER000005 Warehouse 1,0,1 +offer58,Budget Cameras MER000005 Warehouse 1,0,1 +offer59,Budget Cameras MER000005 Warehouse 1,0,1 +offer60,Budget Cameras MER000005 Warehouse 1,0,1 +offer61,Budget Cameras MER000005 Warehouse 1,0,1 +offer62,Budget Cameras MER000005 Warehouse 1,0,1 +offer63,Budget Cameras MER000005 Warehouse 1,0,1 +offer64,Budget Cameras MER000005 Warehouse 1,0,1 +offer65,Budget Cameras MER000005 Warehouse 1,0,1 +offer66,Budget Cameras MER000005 Warehouse 1,0,1 +offer67,Budget Cameras MER000005 Warehouse 1,0,1 +offer68,Budget Cameras MER000005 Warehouse 1,0,1 +offer69,Budget Cameras MER000005 Warehouse 1,0,1 +offer70,Budget Cameras MER000005 Warehouse 1,0,1 +offer71,Budget Cameras MER000005 Warehouse 1,0,1 +offer72,Budget Cameras MER000005 Warehouse 1,0,1 +offer73,Budget Cameras MER000005 Warehouse 1,0,1 +offer74,Budget Cameras MER000005 Warehouse 1,0,1 +offer75,Budget Cameras MER000005 Warehouse 1,0,1 +offer76,Budget Cameras MER000005 Warehouse 1,0,1 +offer77,Budget Cameras MER000005 Warehouse 1,0,1 +offer78,Budget Cameras MER000005 Warehouse 1,0,1 +offer79,Budget Cameras MER000005 Warehouse 1,0,1 +offer80,Budget Cameras MER000005 Warehouse 1,0,1 +offer81,Budget Cameras MER000005 Warehouse 1,0,1 +offer82,Budget Cameras MER000005 Warehouse 1,0,1 +offer83,Budget Cameras MER000005 Warehouse 1,0,1 +offer84,Budget Cameras MER000005 Warehouse 1,0,1 +offer85,Budget Cameras MER000005 Warehouse 1,0,1 +offer86,Budget Cameras MER000005 Warehouse 1,0,1 +offer87,Budget Cameras MER000005 Warehouse 1,0,1 +offer88,Budget Cameras MER000005 Warehouse 1,0,1 +offer89,Budget Cameras MER000005 Warehouse 1,0,1 +offer90,Sony Experts MER000006 Warehouse 1,0,1 +offer91,Sony Experts MER000006 Warehouse 1,0,1 +offer92,Sony Experts MER000006 Warehouse 1,0,1 +offer93,Sony Experts MER000006 Warehouse 1,0,1 +offer94,Sony Experts MER000006 Warehouse 1,0,1 +offer95,Sony Experts MER000006 Warehouse 1,0,1 +offer96,Sony Experts MER000006 Warehouse 1,0,1 +offer97,Sony Experts MER000006 Warehouse 1,0,1 +offer98,Sony Experts MER000006 Warehouse 1,0,1 +offer99,Sony Experts MER000006 Warehouse 1,0,1 +offer100,Sony Experts MER000006 Warehouse 1,0,1 +offer101,Sony Experts MER000006 Warehouse 1,0,1 +offer102,Sony Experts MER000006 Warehouse 1,0,1 +offer103,Sony Experts MER000006 Warehouse 1,0,1 +offer169,Sony Experts MER000006 Warehouse 1,0,1 +offer170,Sony Experts MER000006 Warehouse 1,0,1 +offer171,Sony Experts MER000006 Warehouse 1,0,1 +offer172,Sony Experts MER000006 Warehouse 1,0,1 +offer173,Sony Experts MER000006 Warehouse 1,0,1 +offer348,Sony Experts MER000006 Warehouse 1,0,1 +offer349,Sony Experts MER000006 Warehouse 1,0,1 +offer350,Sony Experts MER000006 Warehouse 1,0,1 +offer351,Sony Experts MER000006 Warehouse 1,0,1 +offer352,Sony Experts MER000006 Warehouse 1,0,1 +offer353,Sony Experts MER000006 Warehouse 1,0,1 +offer354,Sony Experts MER000006 Warehouse 1,0,1 +offer355,Sony Experts MER000006 Warehouse 1,0,1 +offer356,Sony Experts MER000006 Warehouse 1,0,1 +offer357,Sony Experts MER000006 Warehouse 1,0,1 +offer358,Sony Experts MER000006 Warehouse 1,0,1 +offer359,Sony Experts MER000006 Warehouse 1,0,1 +offer360,Sony Experts MER000006 Warehouse 1,0,1 +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| product_offer_reference | ✓ | string | offer350 | Product offer identifier. | +| stock_name | ✓ | string | Spryker MER000001 Warehouse 1 | Stock identifier. | +| quantity | ✓ | int | 21 | Amount of available product offers. | +| is_never_out_of_stock | ✓ | int | 1 | Flag that lets you make a product offer always available, ignoring stock quantity. | + +Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantStockDataImportPlugin | Imports merchant stock data into the database. | | Spryker\Zed\MerchantStockDataImport\Communication\Plugin | +| ProductOfferStockDataImportPlugin | Imports product offer stock data into the database. | | Spryker\Zed\ProductOfferStockDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getOmsReservationAggregationPlugins(): array + { + return [ + new ProductOfferOmsReservationAggregationPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\OmsExtension\Dependency\Plugin\OmsReservationWriterStrategyPluginInterface> + */ + protected function getOmsReservationWriterStrategyPlugins(): array + { + return [ + new ProductOfferOmsReservationWriterStrategyPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\OmsExtension\Dependency\Plugin\ReservationPostSaveTerminationAwareStrategyPluginInterface> + */ + protected function getReservationPostSaveTerminationAwareStrategyPlugins(): array + { + return [ + new ProductOfferReservationPostSaveTerminationAwareStrategyPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\OmsExtension\Dependency\Plugin\OmsReservationReaderStrategyPluginInterface> + */ + protected function getOmsReservationReaderStrategyPlugins(): array + { + return [ + new ProductOfferOmsReservationReaderStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure if you add a product offer to the cart, place the order, reserved product offers count changes in the `spy_oms_product_offer_reservation` table. + +Make sure that a product offer is available at PDP if its stock > 0 in the `spy_product_offer_stock` table. + +Make sure that the concrete product availability (in the `spy_availability` table) are not affected when you place an order with a product offer. + +{% endinfo_block %} + +**src/Pyz/Zed/ProductOfferStockGui/ProductOfferStockGuiDependencyProvider.php** + +```php + + */ + protected function getProductOfferStockTableExpanderPlugins(): array + { + return [ + new ProductOfferReservationProductOfferStockTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you view some product offer at `http://zed.de.demo-spryker.com/product-offer-gui/view?id-product-offer={idProductOffer}}`, you can see the `Stock` section. + +Make sure that if you open some product offer in view mode at `http://zed.mysprykershop.com/product-offer-gui/view?id-product-offer={% raw %}{{idProductOffer}}{% endraw %}`, stock table contains the `Reservations` column. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md new file mode 100644 index 00000000000..4e911108507 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md @@ -0,0 +1,57 @@ +This document describes how to install the Marketplace Inventory Management + Packaging Units feature. + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management + Packaging Units feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Packaging Units | {{page.release_tag}} | [Install the Packaging Units feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferPackagingUnitOmsReservationAggregationPlugin | Aggregates reservations for product offers packaging unit. | | Spryker\Zed\ProductOfferPackagingUnit\Communication\Plugin\Oms | + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php + + */ + protected function getOmsReservationAggregationPlugins(): array + { + return [ + new ProductOfferPackagingUnitOmsReservationAggregationPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that availability is calculated properly for the product offers that belong to the product with packaging units. + +- Add such a product offer to the cart. +- Place an order. +- Make sure that `spy_oms_product_offer_reservation` contains a new row, which has reserved the quantity equal to the amount of the bought packaging unit. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md new file mode 100644 index 00000000000..96c2848f5e5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md @@ -0,0 +1,289 @@ + +This document describes how to install Merchant Portal Merchant B2B Contract Requests feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Merchant B2B Contract Requests | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant-contract-requests: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------------|--------------------------------------------------------------| +| MerchantRelationRequestMerchantPortalGui | vendor/spryker/merchant-relation-request-merchant-portal-gui | + +{% endinfo_block %} + +## 2) Set up the configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------|---------------------------------------------------------------------------------------------------------|-------------| +| AclConfig::getInstallerRules() | The default ACL rules that are added to the respective database table after executing `setup:init-db`. | Pyz\Zed\Acl | + +
    +src/Pyz/Zed/Acl/AclConfig.php + +```php +> + */ + public function getInstallerRules(): array + { + $installerRules = parent::getInstallerRules(); + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'merchant-relation-request-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + return $installerRules; + } +} +``` + +
    + + +2. Execute the registered installer plugins: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +- The following page is available for Merchant Portal users: `https://mp.mysprykershop.com/merchant-relation-request-merchant-portal-gui/merchant-relation-requests`. +- Back Office users don't have access to `https://mp.mysprykershop.com/merchant-relation-request-merchant-portal-gui/merchant-relation-requests`. + +{% endinfo_block %} + +## 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|------------------------------------------------|--------|---------|--------------------------------------------------------------------------------------| +| MerchantRelationRequestTableCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestTableCriteriaTransfer | +| MerchantRelationRequestFormActionConfiguration | class | created | src/Generated/Shared/Transfer/MerchantRelationRequestFormActionConfigurationTransfer | + +{% endinfo_block %} + +## 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------------------| +| IsOpenForRelationRequestOnlineProfileMerchantProfileFormExpanderPlugin | Expands `OnlineProfileMerchantProfileForm` with the field that defines the merchant relation request allowance. | | Spryker\Zed\MerchantRelationRequestMerchantPortalGui\Communication\Plugin\MerchantProfileMerchantPortalGui | +| MerchantNotificationOfMerchantRelationRequestCreationMailTypeBuilderPlugin | Builds `MailTransfer` with the data for the merchant notification mail. | | Spryker\Zed\MerchantRelationRequestMerchantPortalGui\Communication\Plugin\Mail | +| MerchantNotificationMerchantRelationRequestPostCreatePlugin | After a merchant relation request is created, sends a notification to the merchant. | | Spryker\Zed\MerchantRelationRequestMerchantPortalGui\Communication\Plugin\MerchantRelationRequest | +| MerchantRelationRequestMerchantRelationshipMerchantDashboardCardExpanderPlugin | Expands the provided `MerchantDashboardCardTransfer` with merchant relation request data. | | Spryker\Zed\MerchantRelationRequestMerchantPortalGui\Communication\Plugin\MerchantRelationshipMerchantPortalGui | + +**src/Pyz/Zed/MerchantProfileMerchantPortalGui/MerchantProfileMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getOnlineProfileMerchantProfileFormExpanderPlugins(): array + { + return [ + new IsOpenForRelationRequestOnlineProfileMerchantProfileFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. In the Merchant Portal, go to **Merchant Profile**. +2. On the **Profile** page, click the **Online Profile** tab. + Make sure the **Allow merchant relation requests** checkbox is displayed. + +{% endinfo_block %} + +**src/Pyz/Zed/MerchantRelationshipMerchantPortalGui/MerchantRelationshipMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationshipMerchantDashboardCardExpanderPlugins(): array + { + return [ + new MerchantRelationRequestMerchantRelationshipMerchantDashboardCardExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal, go to **Dashboard**. On the **Dashboard** page, make sure that in the **B2B Contracts** pane, the **Merchant Relation Requests** section and the **Manage Pending Requests** button are displayed. + +{% endinfo_block %} + +**src/Pyz/Zed\Mail/MailDependencyProvider.php** + +```php + + */ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new MerchantNotificationOfMerchantRelationRequestCreationMailTypeBuilderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantRelationRequest/MerchantRelationRequestDependencyProvider.php** + +```php + + */ + protected function getMerchantRelationRequestPostCreatePlugins(): array + { + return [ + new MerchantNotificationMerchantRelationRequestPostCreatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that, when a merchant relation request is created, the merchant receives a notification email. + +{% endinfo_block %} + +## 5) Configure navigation + +1. Add the `MerchantRelationRequestMerchantPortalGui` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + B2B Contracts + contracts + + + + Merchant Relation Requests + merchant-relation-request-merchant-portal-gui + merchant-relation-requests + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal, make sure the **B2B Contracts** and **Merchant Relation Requests** navigation menu items are displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..b3141d79657 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md @@ -0,0 +1,199 @@ +This document describes how to install Merchant Portal Merchant B2B Contracts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Merchant B2B Contracts | {{page.release_tag}} | [Install the Merchant B2B Contracts feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant-contracts: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------------|--------------------------------------------------------------------| +| MerchantRelationshipMerchantPortalGui | vendor/spryker/merchant-relationship-merchant-portal-gui | +| MerchantRelationshipMerchantPortalGuiExtension | vendor/spryker/merchant-relationship-merchant-portal-gui-extension | + +{% endinfo_block %} + +## 2) Set up the configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------|--------------------------------------------------------------------------------------------------------|-------------| +| AclConfig::getInstallerRules() | The default ACL rules that are added to the respective database table after executing `setup:init-db`. | Pyz\Zed\Acl | + +
    +src/Pyz/Zed/Acl/AclConfig.php + +```php +> + */ + public function getInstallerRules(): array + { + $installerRules = parent::getInstallerRules(); + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'merchant-relationship-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + return $installerRules; + } +} +``` + +
    + +2. Execute the registered installer plugins: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +- The following page is available for Merchant Portal users: `https://mp.mysprykershop.com/merchant-relationship-merchant-portal-gui/merchant-relationship`. +- Back Office users don't have access to `https://mp.mysprykershop.com/merchant-relationship-merchant-portal-gui/merchant-relationship`. + +{% endinfo_block %} + +## 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| Transfer | Type | Event | Path | +|-----------------------------------|-------|---------|-------------------------------------------------------------------------| +| MerchantRelationshipTableCriteria | class | created | src/Generated/Shared/Transfer/MerchantRelationshipTableCriteriaTransfer | + +{% endinfo_block %} + +## 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|--------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------| +| MerchantRelationshipMerchantDashboardCardPlugin | Adds the merchant relation card to the merchant dashboard. | | Spryker\Zed\MerchantRelationshipMerchantPortalGui\Communication\Plugin\DashboardMerchantPortalGui | + +**src/Pyz/Zed/DashboardMerchantPortalGui/DashboardMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getDashboardCardPlugins(): array + { + return [ + new MerchantRelationshipMerchantDashboardCardPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal, go to **Dashboard**. On the **Dashboard** page, make sure the **B2B Contracts** pane is +displayed. + +{% endinfo_block %} + +## 5) Configure navigation + +1. Add the `MerchantRelationshipMerchantPortalGui` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + B2B Contracts + contracts + + + + Merchant Relations + merchant-relationship-merchant-portal-gui + merchant-relationship + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal, make sure **B2B Contracts** and **Merchant Relations** navigation menu items are displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..bd9399ab62d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-commission-feature.md @@ -0,0 +1,2269 @@ +This document describes how to install the Marketplace Merchant Commission feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant-commission:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------------------|-------------------------------------------------------------------------| +| MerchantCommission | vendor/spryker/merchant-commission | +| MerchantCommissionDataExport | vendor/spryker/merchant-commission-data-export | +| MerchantCommissionDataImport | vendor/spryker/merchant-commission-data-import | +| MerchantCommissionGui | vendor/spryker/merchant-commission-gui | +| SalesMerchantCommission | vendor/spryker/sales-merchant-commission | +| SalesMerchantCommissionExtension | vendor/spryker/sales-merchant-commission-extension | +| MerchantSalesOrderSalesMerchantCommission | vendor/spryker/merchant-sales-order-sales-merchant-commission | +| SalesPaymentMerchantSalesMerchantCommission | vendor/spryker/sales-payment-merchant-sales-merchant-commission | + +{% endinfo_block %} + +## 2) Set up configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------| +| MerchantCommissionConfig::isMerchantCommissionPriceModeForStoreCalculationEnabled() | Specifies if `MerchantCommissionConfig::MERCHANT_COMMISSION_PRICE_MODE_PER_STORE` configuration should be used for merchant commission calculation. Using `MerchantCommissionConfig::MERCHANT_COMMISSION_PRICE_MODE_PER_STORE` for calculation is deprecated. | Pyz\Zed\MerchantCommission | +| MerchantCommissionConfig::EXCLUDED_MERCHANTS_FROM_COMMISSION | The list of merchants who aren't subject to commissions. | Pyz\Zed\MerchantCommission | +| RefundConfig::shouldCleanupRecalculationMessagesAfterRefund() | Sanitizes recalculation messages after refund if set to true. | Pyz\Zed\Refund | +| SalesConfig::shouldPersistModifiedOrderItemProperties() | Returns true if order items should be updated during order update. | Pyz\Zed\Sales | + +2. Configure the merchant commission price mode per store and the excluded merchants from the commission: + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionConfig.php** + +```php + + */ + protected const EXCLUDED_MERCHANTS_FROM_COMMISSION = [ + 'MER000001', + ]; + + /** + * @return bool + */ + public function isMerchantCommissionPriceModeForStoreCalculationEnabled(): bool + { + return false; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify that the price modes per store configuration is disabled, place an order and trigger the merchant commission calculation step in OMS. +Merchant commission should be calculated according to the price mode of the order. + +To verify that the merchants who aren't subject to commissions are properly defined, set +the `MerchantCommissionConfig::EXCLUDED_MERCHANTS_FROM_COMMISSION` configuration. +Usually this is used for the marketplace owner. + +{% endinfo_block %} + +3. Configure the cleanup of recalculation messages after a refund: + +**src/Pyz/Zed/Refund/RefundConfig.php** + +```php +> + */ + protected const TAX_DEDUCTION_ENABLED_FOR_STORE_AND_PRICE_MODE = [ + 'DE' => [self::PRICE_MODE_GROSS => true, self::PRICE_MODE_NET => true], + 'AT' => [self::PRICE_MODE_GROSS => false, self::PRICE_MODE_NET => false], + 'US' => [self::PRICE_MODE_GROSS => true, self::PRICE_MODE_NET => true], + ]; +} +``` + +{% info_block warningBox "Verification" %} + +- Make sure the tax deduction is properly configured for the store and price mode for the Merchant Payment Commission by +setting the `SalesPaymentMerchantSalesMerchantCommissionConfig::TAX_DEDUCTION_ENABLED_FOR_STORE_AND_PRICE_MODE` +configuration. +- Create an order with a marketplace payment and verify that the tax deduction is working as expected by checking the +details in the `spy_sales_payment_merchant_payout` and `spy_sales_payment_merchant_payout_reversal` tables. + +{% endinfo_block %} + +### Prepare order state machines for the Merchant Commission process + +In this step, you can customize your order state machine to charge the Merchant Commission commissions. +This step prepares the `DummyPayment` and `MarketplacePayment01` state machines for the Merchant Commission process. + +The `MerchantCommission/Calculate` command calculates the merchant commission for an order. + +1. Define the `DummyMerchantCommission` sub process that executes the `MerchantCommission/Calculate` command: + +**config/Zed/oms/DummySubprocess/DummyMerchantCommission01.xml** + +```xml + + + + + + + + + + + paid + commission calculated + commission-calculate + + + + commission calculated + tax pending + commission-calculated + + + + + + + + + + +``` + +The following is the `DummyPayment01` simplified state machine with the `DummyMerchantCommission` subprocess enabled: + +**config/Zed/oms/DummyPayment01.xml** + +```xml + + + + + + DummyMerchantCommission + + + + + +``` + +2. Define the `MarketplaceMerchantCommission` subprocess that executes the `MerchantCommission/Calculate` command: + +**config/Zed/oms/DummySubprocess/DummyMarketplaceMerchantCommission01.xml** + +```xml + + + + + + + + + + + paid + commission calculated + commission-calculate + + + + commission calculated + merchant split pending + commission-calculated + + + + + + + + + + +``` + +The following is the `MarketplacePayment01` simplified state machine with the `MarketplaceMerchantCommission` subprocess enabled: + +**config/Zed/oms/MarketplacePayment01.xml** + +```xml + + + + + + + DummyMarketplaceMerchantCommission + + + + +``` + +{% info_block warningBox "Verification" %} + +Place an order to trigger the `DummyPayment01` and `MarketplacePayment01` state machines. Make sure the order goes through the steps and the merchant commissions are deducted correctly. + +{% endinfo_block %} + +## 3) Set up database schema and transfer objects + +1. Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------|-------|---------| +| spy_merchant_commission_group | table | created | +| spy_merchant_commission | table | created | +| spy_merchant_commission_amount | table | created | +| spy_merchant_commission_merchant | table | created | +| spy_merchant_commission_store | table | created | + +{% endinfo_block %} + +2. Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------------|----------|---------|----------------------------------------------------------------------------------| +| MerchantCommission | class | Created | src/Generated/Shared/Transfer/MerchantCommissionTransfer | +| MerchantCommissionGroup | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupTransfer | +| MerchantCommissionAmount | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountTransfer | +| MerchantCommissionCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionTransfer | +| MerchantCommissionCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCriteriaTransfer | +| MerchantCommissionConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionConditionsTransfer | +| MerchantCommissionCollectionRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionRequestTransfer | +| MerchantCommissionCollectionResponse | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionResponseTransfer | +| MerchantCommissionAmountCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountCollectionTransfer | +| MerchantCommissionAmountCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountCriteriaTransfer | +| MerchantCommissionAmountConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountConditionsTransfer | +| MerchantCommissionGroupCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupCollectionTransfer | +| MerchantCommissionGroupCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupCriteriaTransfer | +| MerchantCommissionGroupConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupConditionsTransfer | +| MerchantCommissionCalculationRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationRequestTransfer | +| MerchantCommissionCalculationRequestItem | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationRequestItemTransfer | +| MerchantCommissionCalculationResponse | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationResponseTransfer | +| MerchantCommissionCalculationItem | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationItemTransfer | +| MerchantCommissionCalculationTotals | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationTotalsTransfer | +| CollectedMerchantCommission | class | Created | src/Generated/Shared/Transfer/CollectedMerchantCommissionTransfer | +| MerchantCommissionAmountTransformerRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountTransformerRequestTransfer | +| MerchantCommissionAmountFormatRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountFormatRequestTransfer | +| RuleEngineSpecificationProviderRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineSpecificationProviderRequestTransfer | +| RuleEngineSpecificationRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineSpecificationRequestTransfer | +| RuleEngineQueryStringValidationRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineQueryStringValidationRequestTransfer | +| RuleEngineQueryStringValidationResponse | class | Created | src/Generated/Shared/Transfer/RuleEngineQueryStringValidationResponseTransfer | +| RuleEngineClause | class | Created | src/Generated/Shared/Transfer/RuleEngineClauseTransfer | +| MerchantCommissionView | class | Created | src/Generated/Shared/Transfer/MerchantCommissionViewTransfer | +| MerchantCommissionAmountView | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountViewTransfer | +| SalesMerchantCommission | class | Created | src/Generated/Shared/Transfer/SalesMerchantCommissionTransfer | +| Item.merchantCommissionAmountAggregation | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.merchantCommissionAmountFullAggregation | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.merchantCommissionRefundedAmount | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Totals.merchantCommissionTotal | property | created | src/Generated/Shared/Transfer/TotalsTransfer | +| Totals.merchantCommissionRefundedTotal | property | created | src/Generated/Shared/Transfer/TotalsTransfer | + +{% endinfo_block %} + +### 4) Add translations + +1. Append the glossary according to your configuration: + +
    + src/data/import/glossary.csv + +```yaml +merchant_commission.validation.currency_does_not_exist,A currency with the code ‘%code%’ does not exist.,en_US +merchant_commission.validation.currency_does_not_exist,Eine Währung mit dem Code ‘%code%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_description_invalid_length,A merchant commission description must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_description_invalid_length,Die Beschreibung einer Händlerprovision muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_key_exists,A merchant commission with the key ‘%key%’ already exists.,en_US +merchant_commission.validation.merchant_commission_key_exists,Es existiert bereits eine Händlerprovision mit dem Schlüssel ‘%key%’.,de_DE +merchant_commission.validation.merchant_commission_key_invalid_length,A merchant commission key must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_key_invalid_length,Ein Händlerprovisionsschlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_key_is_not_unique,At least two merchant commissions in this request have the same key.,en_US +merchant_commission.validation.merchant_commission_key_is_not_unique,Mindestens zwei Händlerprovisionen in dieser Anfrage haben den gleichen Schlüssel.,de_DE +merchant_commission.validation.merchant_commission_does_not_exist,A merchant commission with the key ‘%key%’ was not found.,en_US +merchant_commission.validation.merchant_commission_does_not_exist,Die Händlerprovision mit dem Schlüssel ‘%key%’ wurde nicht gefunden.,de_DE +merchant_commission.validation.merchant_commission_group_does_not_exist,A merchant commission group was not found.,en_US +merchant_commission.validation.merchant_commission_group_does_not_exist,Es wurde keine Händlerprovisionsgruppe gefunden.,de_DE +merchant_commission.validation.merchant_commission_group_key_does_not_exist,A merchant commission group with the key "%key%" was not found.,en_US +merchant_commission.validation.merchant_commission_group_does_not_exist,Die Händlerprovisionsgruppe mit dem Schlüssel „%key%" wurde nicht gefunden.,de_DE +merchant_commission.validation.merchant_does_not_exist,A merchant with the reference ‘%merchant_reference%’ does not exist.,en_US +merchant_commission.validation.merchant_does_not_exist,Ein Händler mit der Referenz ‘%merchant_reference%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_name_invalid_length,A merchant commission name must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_name_invalid_length,Der Händlerprovisionsname muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_priority_not_in_range,A merchant commission priority must be within a range from %min% to %max%.,en_US +merchant_commission.validation.merchant_commission_priority_not_in_range,Die Priorität der Händlerprovision muss im Bereich von %min% bis %max% liegen.,de_DE +merchant_commission.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +merchant_commission.validation.store_does_not_exist,Ein Shop mit dem Namen ‘%name%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_valid_from_invalid_datetime,A merchant commission ‘valid from’ date is not a valid format.,en_US +merchant_commission.validation.merchant_commission_valid_from_invalid_datetime,Das ‘Gültig von’-Datum ist nicht im gültigen Format.,de_DE +merchant_commission.validation.merchant_commission_valid_to_invalid_datetime,A merchant commission ‘valid to’ date is not a valid format.,en_US +merchant_commission.validation.merchant_commission_valid_to_invalid_datetime,Das ‘Gültig bis’-Datum ist nicht im gültigen Format.,de_DE +merchant_commission.validation.merchant_commission_validity_period_invalid,A merchant commission ‘valid to’ date must be later than the ‘valid from’ date.,en_US +merchant_commission.validation.merchant_commission_validity_period_invalid,Das ‘Gültig bis’-Datum muss nach dem ‘Gültig von’-Datum liegen.,de_DE +merchant_commission.validation.invalid_query_string,The provided query string has an invalid format in %field%.,en_US +merchant_commission.validation.invalid_query_string,Die angegebene Abfragezeichenfolge hat ein ungültiges Format in %field%.,de_DE +merchant_commission.validation.invalid_compare_operator,The provided compare operator is invalid in %field%.,en_US +merchant_commission.validation.invalid_compare_operator,Der angegebene Vergleichsoperator ist ungültig in %field%.,de_DE +``` + +
    + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +## 5) Import data + +To import data follow the steps in the following sections. + +### Import merchant commission data + +1. Prepare merchant commission data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission.csv** + +```csv +key,name,description,valid_from,valid_to,is_active,amount,calculator_type_plugin,merchant_commission_group_key,priority,item_condition,order_condition +mc1,Merchant Commission 1,,2024-01-01,2029-06-01,1,5,percentage,primary,1,item-price >= '500' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc2,Merchant Commission 2,,2024-01-01,2029-06-01,1,10,percentage,primary,2,item-price >= '200' AND item-price < '500' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc3,Merchant Commission 3,,2024-01-01,2029-06-01,1,15,percentage,primary,3,item-price >= '0' AND item-price < '200' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc4,Merchant Commission 4,,2024-01-01,2029-06-01,1,10,percentage,primary,4,,"price-mode = ""GROSS_MODE""" +mc5,Merchant Commission 5,,2024-01-01,2029-06-01,1,,fixed,secondary,4,,"price-mode = ""GROSS_MODE""" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------------|----------|-----------|---------------------------------------------------|-------------------------------------------------| +| key | ✓ | string | mc1 | Unique key of the merchant commission. | +| name | ✓ | string | Merchant Commission 1 | Name of the merchant commission. | +| description | | string | | Description of the merchant commission. | +| valid_from | | date | 2024-01-01 | Start date of the merchant commission validity. | +| valid_to | | date | 2029-06-01 | End date of the merchant commission validity. | +| is_active | ✓ | bool | 1 | Defines if the merchant commission is active. | +| amount | | int | 5 | Amount of the merchant commission. | +| calculator_type_plugin | ✓ | string | percentage | Type of the calculator plugin used. | +| merchant_commission_group_key | ✓ | string | primary | Key of the merchant commission group. | +| priority | ✓ | int | 1 | Priority of the merchant commission. | +| item_condition | | string | item-price >= '500' AND category IS IN 'computer' | Condition for the item. | +| order_condition | | string | "price-mode = ""GROSS_MODE""" | Condition for the order. | + +2. Prepare the merchant commission group data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_group.csv** + +```csv +key,name +primary,Primary +secondary,Secondary +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------|----------|-----------|--------------|----------------------------------------------| +| key | ✓ | string | primary | Unique key of the merchant commission group. | +| name | ✓ | string | Primary | Name of the merchant commission group. | + +3. Prepare the merchant commission amount data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_amount.csv** + +```csv +merchant_commission_key,currency,value_net,value_gross +mc4,EUR,0,50 +mc4,CHF,0,50 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|------------------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| currency | ✓ | string | EUR | Currency for the commission amount. | +| value_net | ✓ | int | 0 | Net value of the merchant commission amount. | +| value_gross | ✓ | int | 50 | Gross value of the merchant commission amount. | + +4. Prepare the merchant commission merchant data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_merchant.csv** + +```csv +merchant_commission_key,merchant_reference +mc4,DE +mc4,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| merchant_reference | ✓ | string | DE | Reference to the merchant. | + +5. Prepare the merchant commission store data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_store.csv** + +```csv +merchant_commission_key,store_name +mc1,DE +mc1,AT +mc2,DE +mc2,AT +mc3,DE +mc3,AT +mc4,DE +mc4,AT +mc5,DE +mc5,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| store_name | ✓ | string | DE | Name of the store. | + +6. Enable the data imports per your configuration. Example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: merchant-commission-group + source: data/import/common/common/marketplace/merchant_commission_group.csv + - data_entity: merchant-commission + source: data/import/common/common/marketplace/merchant_commission.csv + - data_entity: merchant-commission-merchant + source: data/import/common/common/marketplace/merchant_commission_merchant.csv + - data_entity: merchant-commission-amount + source: data/import/common/DE/marketplace/merchant_commission_amount.csv + - data_entity: merchant-commission-amount + source: data/import/common/AT/marketplace/merchant_commission_amount.csv + - data_entity: merchant-commission-store + source: data/import/common/DE/marketplace/merchant_commission_store.csv + - data_entity: merchant-commission-store + source: data/import/common/AT/marketplace/merchant_commission_store.csv +``` + +7. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| MerchantCommissionGroupDataImportPlugin | Imports merchant commission group data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionDataImportPlugin | Imports merchant commission data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionAmountDataImportPlugin | Imports merchant commission amount data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionStoreDataImportPlugin | Imports merchant commission store data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionMerchantDataImportPlugin | Imports merchant commission merchant data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MerchantCommissionGroupDataImportPlugin(), + new MerchantCommissionDataImportPlugin(), + new MerchantCommissionAmountDataImportPlugin(), + new MerchantCommissionStoreDataImportPlugin(), + new MerchantCommissionMerchantDataImportPlugin(), + ]; + } +} +``` + +8. Enable the behaviors by registering the console commands: + +
    + src/Pyz/Zed/Console/ConsoleDependencyProvider.php + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_GROUP), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_AMOUNT), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_MERCHANT), + ]; + + return $commands; + } +} +``` + +
    + +9. Import data: + +```bash +console data:import:merchant-commission-group +console data:import:merchant-commission +console data:import:merchant-commission-amount +console data:import:merchant-commission-store +console data:import:merchant-commission-merchant +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_merchant_commission_group` +- `spy_merchant_commission` +- `spy_merchant_commission_amount` +- `spy_merchant_commission_store` +- `spy_merchant_commission_merchant` + +{% endinfo_block %} + +## 6) Set up behavior + +1. To enable the Marketplace ACL control, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------| +| SalesMerchantCommissionMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with sales merchant commission composite data. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | +| SalesMerchantCommissionAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with sales merchant commission composite data. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getMerchantAclEntityRuleExpanderPlugins(): array + { + return [ + new SalesMerchantCommissionMerchantAclEntityRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new SalesMerchantCommissionAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +2. To enable the Order Management related behavior, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------| +| MerchantCommissionCalculatorPlugin | Recalculates merchant commissions for a given order, updating the `CalculableObjectTransfer` object with the new commission values for items and totals. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Calculation | +| SanitizeMerchantCommissionPreReloadPlugin | Sanitizes merchant commission related fields in quote for the reorder functionality. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | +| UpdateMerchantCommissionTotalsMerchantOrderPostCreatePlugin | Calculates and persists the total merchant commission amounts for a newly created merchant order. | | Spryker\Zed\MerchantSalesOrderSalesMerchantCommission\Communication\Plugin\MerchantSalesOrder | +| SalesMerchantCommissionCalculationCommandByOrderPlugin | Calculates and persists the merchant commissions for a given order, updating the order totals and order items with the calculated commission amounts. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Oms\Command | +| MerchantCommissionRefundPostSavePlugin | Processes the refund of merchant commissions after a refund has been saved, updating the relevant sales merchant commissions and recalculating the order. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Refund | +| MerchantCommissionOrderPostCancelPlugin | Handles the refund of merchant commissions when an order is cancelled, updating the relevant sales merchant commissions and recalculating the order. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Sales | +| UpdateMerchantCommissionTotalsPostRefundMerchantCommissionPlugin | Updates the total and refunded merchant commission amounts in the order totals after a merchant commission refund. | | Spryker\Zed\MerchantSalesOrderSalesMerchantCommission\Communication\Plugin\SalesMerchantCommission; | + +**src/Pyz/Zed/Calculation/CalculationDependencyProvider.php** + +```php + + */ + protected function getOrderCalculatorPluginStack(Container $container): array + { + return [ + new MerchantCommissionCalculatorPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new SanitizeMerchantCommissionPreReloadPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/MerchantSalesOrder/MerchantSalesOrderDependencyProvider.php** + +```php + + */ + protected function getMerchantOrderPostCreatePlugins(): array + { + return [ + new UpdateMerchantCommissionTotalsMerchantOrderPostCreatePlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new SalesMerchantCommissionCalculationCommandByOrderPlugin(), 'MerchantCommission/Calculate'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/Refund/RefundDependencyProvider.php** + +```php + + */ + protected function getRefundPostSavePlugins(): array + { + return [ + new MerchantCommissionRefundPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostCancelPlugins(): array + { + return [ + new MerchantCommissionOrderPostCancelPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SalesMerchantCommission/SalesMerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getPostRefundMerchantCommissionPlugins(): array + { + return [ + new UpdateMerchantCommissionTotalsPostRefundMerchantCommissionPlugin(), + ]; + } +} +``` + +3. To enable the merchant commission rule engine, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| MerchantCommissionItemCollectorRuleSpecificationProviderPlugin | Provides rule specifications for the collection of merchant commission items in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\RuleEngine | +| MerchantCommissionOrderDecisionRuleSpecificationProviderPlugin | Provides rule specifications for decision-making regarding merchant commission orders in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\RuleEngine | +| FixedMerchantCommissionCalculatorPlugin | Calculates merchant commissions based on a fixed amount, transforming and formatting the commission amount for persistence and display. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| PercentageMerchantCommissionCalculatorPlugin | Calculates merchant commissions based on a percentage of the total amount, transforming, rounding, and formatting the commission amount for persistence and display. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| ItemSkuMerchantCommissionItemCollectorRulePlugin | Collects all items that match a given SKU in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| PriceModeMerchantCommissionOrderDecisionRulePlugin | Checks if the price mode in the rule engine matches the one provided in the merchant commission calculation request. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | + +**src/Pyz/Zed/RuleEngine/RuleEngineDependencyProvider.php** + +```php + + */ + protected function getRuleSpecificationProviderPlugins(): array + { + return [ + new MerchantCommissionItemCollectorRuleSpecificationProviderPlugin(), + new MerchantCommissionOrderDecisionRuleSpecificationProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getMerchantCommissionCalculatorPlugins(): array + { + return [ + new FixedMerchantCommissionCalculatorPlugin(), + new PercentageMerchantCommissionCalculatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\RuleEngineExtension\Communication\Dependency\Plugin\CollectorRulePluginInterface> + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new ItemSkuMerchantCommissionItemCollectorRulePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\RuleEngineExtension\Communication\Dependency\Plugin\DecisionRulePluginInterface> + */ + protected function getRuleEngineDecisionRulePlugins(): array + { + return [ + new PriceModeMerchantCommissionOrderDecisionRulePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Place an order with products from different merchants. + +2. In the `spy_sales_merchant_commission` database table, make sure merchants commissions have been applied to each + merchant product in your order. + The `spy_sales_merchant_commission` table should have entries similar to this: + +| id_sales_merchant_commission | uuid | fk_sales_order | fk_sales_order_item | name | amount | refunded_amount | +|------------------------------|------|----------------|---------------------|-------|--------|-----------------| +| 1 | abcd | 123 | 1234 | Comm1 | 10 | 0 | +| 2 | efgh | 124 | 1245 | Comm2 | 5 | 0 | + +In this example, the `fk_sales_order` column corresponds to the sales order ID, `fk_sales_order_item` is the sales order +item ID, `name` is the name of the merchant commission, `amount` is the commission amount applied to that order item, +and `refunded_amount` is the amount of the commission that has been refunded. + +3. To verify the commission calculation, make sure the commission amount for each order item matches the commission + rules you've set up for each merchant. + The commission amounts may vary depending on the commission rules you've set up for each merchant. If the commission + amounts don't match your expectations, review the commission rules in the `spy_merchant_commission` table. + +{% endinfo_block %} + +4. To enable the merchant commission GUI, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|------------------------------------|---------------|-------------------------------------------------------------------------------------| +| DataExportMerchantCommissionExportPlugin | Exports merchant commissions data. | | Spryker\Zed\MerchantCommissionDataExport\Communication\Plugin\MerchantCommissionGui | + +**src/Pyz/Zed/MerchantCommissionGui/MerchantCommissionGuiDependencyProvider.php** + +```php + **Merchant Commission**. +2. On the **Merchant Commission** page, click **Export** + Make sure this exports merchant commissions correctly. + +{% endinfo_block %} + +5. To enable the sales merchant payment commission, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|-------------------------------------------------------------------------|-------------------------------------------------------------------------------------|----------------------------------------------------------------| +| PayoutAmountMerchantPayoutCalculatorPlugin | Calculates the payout amount for the provided sales order item. | | Spryker\Zed\MerchantCommission\Communication\Plugin\RuleEngine | +| PayoutReverseAmountMerchantPayoutCalculatorPlugin | Calculates the payout reverse amount for the provided sales order item. | | | + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant-commission:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------------------------|-------------------------------------------------------------------------| +| MerchantCommission | vendor/spryker/merchant-commission | +| MerchantCommissionDataExport | vendor/spryker/merchant-commission-data-export | +| MerchantCommissionDataImport | vendor/spryker/merchant-commission-data-import | +| MerchantCommissionGui | vendor/spryker/merchant-commission-gui | +| SalesMerchantCommission | vendor/spryker/sales-merchant-commission | +| SalesMerchantCommissionExtension | vendor/spryker/sales-merchant-commission-extension | +| MerchantSalesOrderSalesMerchantCommission | vendor/spryker/merchant-sales-order-sales-merchant-commission | +| SalesPaymentMerchantSalesMerchantCommission | vendor/spryker/sales-payment-merchant-sales-merchant-commission | + +{% endinfo_block %} + +## 2) Set up configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|--------------------------------------------------------------------|--------------------------------------------------------------------|----------------------------| +| MerchantCommissionConfig::MERCHANT_COMMISSION_PRICE_MODE_PER_STORE | Commission price mode configuration for stores in the system. | Pyz\Zed\MerchantCommission | +| MerchantCommissionConfig::EXCLUDED_MERCHANTS_FROM_COMMISSION | The list of merchants who aren't subject to commissions. | Pyz\Zed\MerchantCommission | +| RefundConfig::shouldCleanupRecalculationMessagesAfterRefund() | Sanitizes recalculation messages after refund if set to true. | Pyz\Zed\Refund | +| SalesConfig::shouldPersistModifiedOrderItemProperties() | Returns true if order items should be updated during order update. | Pyz\Zed\Sales | + +2. Configure the merchant commission price mode per store and the excluded merchants from the commission: + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionConfig.php** + +```php + + */ + protected const MERCHANT_COMMISSION_PRICE_MODE_PER_STORE = [ + 'DE' => self::PRICE_MODE_GROSS, + 'AT' => self::PRICE_MODE_NET, + 'US' => self::PRICE_MODE_GROSS, + ]; + + /** + * @var list + */ + protected const EXCLUDED_MERCHANTS_FROM_COMMISSION = [ + 'MER000001', + ]; +} +``` + +{% info_block warningBox "Verification" %} + +To verify that the price modes are properly defined for the stores that will be charging commission from the merchant in +the marketplace, set the `MerchantCommissionConfig::MERCHANT_COMMISSION_PRICE_MODE_PER_STORE` configuration. +The price mode must be set for the stores charging commission from the merchant. + +To verify that the merchants who aren't subject to commissions are properly defined, set +the `MerchantCommissionConfig::EXCLUDED_MERCHANTS_FROM_COMMISSION` configuration. +Usually this is used for the marketplace owner. + +{% endinfo_block %} + +3. Configure the cleanup of recalculation messages after a refund: + +**src/Pyz/Zed/Refund/RefundConfig.php** + +```php +> + */ + protected const TAX_DEDUCTION_ENABLED_FOR_STORE_AND_PRICE_MODE = [ + 'DE' => [self::PRICE_MODE_GROSS => true, self::PRICE_MODE_NET => true], + 'AT' => [self::PRICE_MODE_GROSS => false, self::PRICE_MODE_NET => false], + 'US' => [self::PRICE_MODE_GROSS => true, self::PRICE_MODE_NET => true], + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the tax deduction is properly configured for the store and price mode for the Merchant Payment Commission by +setting the `SalesPaymentMerchantSalesMerchantCommissionConfig::TAX_DEDUCTION_ENABLED_FOR_STORE_AND_PRICE_MODE` +configuration. +Create an order with marketplace payment and verify that the tax deduction is working as expected by checking the +details in the `spy_sales_payment_merchant_payout` and `spy_sales_payment_merchant_payout_reversal` tables. + +{% endinfo_block %} + +### Prepare order state machines for the Merchant Commission process + +In this step, you can customize your order state machine to charge the Merchant Commission commissions. +This step prepares the `DummyPayment` and `MarketplacePayment01` state machine for the Merchant Commission process. + +The `MerchantCommission/Calculate` command calculates the merchant commission for an order. + +1. Define the `DummyMerchantCommission` sub process that executes the `MerchantCommission/Calculate` command: + +**config/Zed/oms/DummySubprocess/DummyMerchantCommission01.xml** + +```xml + + + + + + + + + + + paid + commission calculated + commission-calculate + + + + commission calculated + tax pending + commission-calculated + + + + + + + + + + +``` + +The following is the `DummyPayment01` simplified state machine with the `DummyMerchantCommission` sub process enabled: + +**config/Zed/oms/DummyPayment01.xml** + +```xml + + + + + + DummyMerchantCommission + + + + + +``` + +2. Define the `MarketplaceMerchantCommission` sub process that executes the `MerchantCommission/Calculate` command: + +**config/Zed/oms/DummySubprocess/DummyMarketplaceMerchantCommission01.xml** + +```xml + + + + + + + + + + + paid + commission calculated + commission-calculate + + + + commission calculated + merchant split pending + commission-calculated + + + + + + + + + + +``` + +The following is the `MarketplacePayment01` simplified state machine with the `MarketplaceMerchantCommission` sub +process enabled: + +**config/Zed/oms/MarketplacePayment01.xml** + +```xml + + + + + + + DummyMarketplaceMerchantCommission + + + + +``` + +{% info_block warningBox "Verification" %} + +Place an order with the `DummyPayment01` and `MarketplacePayment01` state machines to verify that the Merchant +Commission process is working as expected. + +{% endinfo_block %} + +## 3) Set up database schema and transfer objects + +1. Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------|-------|---------| +| spy_merchant_commission_group | table | created | +| spy_merchant_commission | table | created | +| spy_merchant_commission_amount | table | created | +| spy_merchant_commission_merchant | table | created | +| spy_merchant_commission_store | table | created | + +{% endinfo_block %} + +2. Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------------|----------|---------|----------------------------------------------------------------------------------| +| MerchantCommission | class | Created | src/Generated/Shared/Transfer/MerchantCommissionTransfer | +| MerchantCommissionGroup | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupTransfer | +| MerchantCommissionAmount | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountTransfer | +| MerchantCommissionCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionTransfer | +| MerchantCommissionCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCriteriaTransfer | +| MerchantCommissionConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionConditionsTransfer | +| MerchantCommissionCollectionRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionRequestTransfer | +| MerchantCommissionCollectionResponse | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCollectionResponseTransfer | +| MerchantCommissionAmountCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountCollectionTransfer | +| MerchantCommissionAmountCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountCriteriaTransfer | +| MerchantCommissionAmountConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountConditionsTransfer | +| MerchantCommissionGroupCollection | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupCollectionTransfer | +| MerchantCommissionGroupCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupCriteriaTransfer | +| MerchantCommissionGroupConditions | class | Created | src/Generated/Shared/Transfer/MerchantCommissionGroupConditionsTransfer | +| MerchantCommissionCalculationRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationRequestTransfer | +| MerchantCommissionCalculationRequestItem | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationRequestItemTransfer | +| MerchantCommissionCalculationResponse | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationResponseTransfer | +| MerchantCommissionCalculationItem | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationItemTransfer | +| MerchantCommissionCalculationTotals | class | Created | src/Generated/Shared/Transfer/MerchantCommissionCalculationTotalsTransfer | +| CollectedMerchantCommission | class | Created | src/Generated/Shared/Transfer/CollectedMerchantCommissionTransfer | +| MerchantCommissionAmountTransformerRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountTransformerRequestTransfer | +| MerchantCommissionAmountFormatRequest | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountFormatRequestTransfer | +| RuleEngineSpecificationProviderRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineSpecificationProviderRequestTransfer | +| RuleEngineSpecificationRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineSpecificationRequestTransfer | +| RuleEngineQueryStringValidationRequest | class | Created | src/Generated/Shared/Transfer/RuleEngineQueryStringValidationRequestTransfer | +| RuleEngineQueryStringValidationResponse | class | Created | src/Generated/Shared/Transfer/RuleEngineQueryStringValidationResponseTransfer | +| RuleEngineClause | class | Created | src/Generated/Shared/Transfer/RuleEngineClauseTransfer | +| MerchantCommissionView | class | Created | src/Generated/Shared/Transfer/MerchantCommissionViewTransfer | +| MerchantCommissionAmountView | class | Created | src/Generated/Shared/Transfer/MerchantCommissionAmountViewTransfer | +| SalesMerchantCommission | class | Created | src/Generated/Shared/Transfer/SalesMerchantCommissionTransfer | +| Item.merchantCommissionAmountAggregation | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.merchantCommissionAmountFullAggregation | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Item.merchantCommissionRefundedAmount | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| Totals.merchantCommissionTotal | property | created | src/Generated/Shared/Transfer/TotalsTransfer | +| Totals.merchantCommissionRefundedTotal | property | created | src/Generated/Shared/Transfer/TotalsTransfer | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +merchant_commission.validation.currency_does_not_exist,A currency with the code ‘%code%’ does not exist.,en_US +merchant_commission.validation.currency_does_not_exist,Eine Währung mit dem Code ‘%code%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_description_invalid_length,A merchant commission description must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_description_invalid_length,Die Beschreibung einer Händlerprovision muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_key_exists,A merchant commission with the key ‘%key%’ already exists.,en_US +merchant_commission.validation.merchant_commission_key_exists,Es existiert bereits eine Händlerprovision mit dem Schlüssel ‘%key%’.,de_DE +merchant_commission.validation.merchant_commission_key_invalid_length,A merchant commission key must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_key_invalid_length,Ein Händlerprovisionsschlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_key_is_not_unique,At least two merchant commissions in this request have the same key.,en_US +merchant_commission.validation.merchant_commission_key_is_not_unique,Mindestens zwei Händlerprovisionen in dieser Anfrage haben den gleichen Schlüssel.,de_DE +merchant_commission.validation.merchant_commission_does_not_exist,A merchant commission with the key ‘%key%’ was not found.,en_US +merchant_commission.validation.merchant_commission_does_not_exist,Die Händlerprovision mit dem Schlüssel ‘%key%’ wurde nicht gefunden.,de_DE +merchant_commission.validation.merchant_commission_group_does_not_exist,A merchant commission group was not found.,en_US +merchant_commission.validation.merchant_commission_group_does_not_exist,Es wurde keine Händlerprovisionsgruppe gefunden.,de_DE +merchant_commission.validation.merchant_commission_group_key_does_not_exist,A merchant commission group with the key "%key%" was not found.,en_US +merchant_commission.validation.merchant_commission_group_does_not_exist,Die Händlerprovisionsgruppe mit dem Schlüssel „%key%" wurde nicht gefunden.,de_DE +merchant_commission.validation.merchant_does_not_exist,A merchant with the reference ‘%merchant_reference%’ does not exist.,en_US +merchant_commission.validation.merchant_does_not_exist,Ein Händler mit der Referenz ‘%merchant_reference%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_name_invalid_length,A merchant commission name must have a length from %min% to %max% characters.,en_US +merchant_commission.validation.merchant_commission_name_invalid_length,Der Händlerprovisionsname muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +merchant_commission.validation.merchant_commission_priority_not_in_range,A merchant commission priority must be within a range from %min% to %max%.,en_US +merchant_commission.validation.merchant_commission_priority_not_in_range,Die Priorität der Händlerprovision muss im Bereich von %min% bis %max% liegen.,de_DE +merchant_commission.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +merchant_commission.validation.store_does_not_exist,Ein Shop mit dem Namen ‘%name%’ existiert nicht.,de_DE +merchant_commission.validation.merchant_commission_valid_from_invalid_datetime,A merchant commission ‘valid from’ date is not a valid format.,en_US +merchant_commission.validation.merchant_commission_valid_from_invalid_datetime,Das ‘Gültig von’-Datum ist nicht im gültigen Format.,de_DE +merchant_commission.validation.merchant_commission_valid_to_invalid_datetime,A merchant commission ‘valid to’ date is not a valid format.,en_US +merchant_commission.validation.merchant_commission_valid_to_invalid_datetime,Das ‘Gültig bis’-Datum ist nicht im gültigen Format.,de_DE +merchant_commission.validation.merchant_commission_validity_period_invalid,A merchant commission ‘valid to’ date must be later than the ‘valid from’ date.,en_US +merchant_commission.validation.merchant_commission_validity_period_invalid,Das ‘Gültig bis’-Datum muss nach dem ‘Gültig von’-Datum liegen.,de_DE +merchant_commission.validation.invalid_query_string,The provided query string has an invalid format in %field%.,en_US +merchant_commission.validation.invalid_query_string,Die angegebene Abfragezeichenfolge hat ein ungültiges Format in %field%.,de_DE +merchant_commission.validation.invalid_compare_operator,The provided compare operator is invalid in %field%.,en_US +merchant_commission.validation.invalid_compare_operator,Der angegebene Vergleichsoperator ist ungültig in %field%.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +## 5) Import data + +To import data follow the steps in the following sections. + +### Import merchant commission data + +{% info_block warningBox "" %} + +Some of the commission rule expressions provided in the following examples are based on optional feature extensions. For commissions to work properly, these extensions need to be enabled: + +- `item-price`: the condition for the order item from the [Install the Marketplace Merchant Commission + Prices feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.html). +- `category`: the condition for the order item from the [Install the Marketplace Merchant Commission + Category Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.html). + +All related extensions are listed in [Install related features](#install-related-features). + +{% endinfo_block %} + +1. Prepare merchant commission data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission.csv** + +```csv +key,name,description,valid_from,valid_to,is_active,amount,calculator_type_plugin,merchant_commission_group_key,priority,item_condition,order_condition +mc1,Merchant Commission 1,,2024-01-01,2029-06-01,1,5,percentage,primary,1,item-price >= '500' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc2,Merchant Commission 2,,2024-01-01,2029-06-01,1,10,percentage,primary,2,item-price >= '200' AND item-price < '500' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc3,Merchant Commission 3,,2024-01-01,2029-06-01,1,15,percentage,primary,3,item-price >= '0' AND item-price < '200' AND category IS IN 'computer',"price-mode = ""GROSS_MODE""" +mc4,Merchant Commission 4,,2024-01-01,2029-06-01,1,10,percentage,primary,4,,"price-mode = ""GROSS_MODE""" +mc5,Merchant Commission 5,,2024-01-01,2029-06-01,1,,fixed,secondary,4,,"price-mode = ""GROSS_MODE""" +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------------|----------|-----------|---------------------------------------------------|-------------------------------------------------| +| key | ✓ | string | mc1 | Unique key of the merchant commission. | +| name | ✓ | string | Merchant Commission 1 | Name of the merchant commission. | +| description | | string | | Description of the merchant commission. | +| valid_from | | date | 2024-01-01 | Start date of the merchant commission validity. | +| valid_to | | date | 2029-06-01 | End date of the merchant commission validity. | +| is_active | ✓ | bool | 1 | Defines if the merchant commission is active. | +| amount | | int | 5 | Amount of the merchant commission. | +| calculator_type_plugin | ✓ | string | percentage | Type of the calculator plugin used. | +| merchant_commission_group_key | ✓ | string | primary | Key of the merchant commission group. | +| priority | ✓ | int | 1 | Priority of the merchant commission. | +| item_condition | | string | item-price >= '500' AND category IS IN 'computer' | Condition for the item. | +| order_condition | | string | price-mode = ""GROSS_MODE"" | Condition for the order. | + + +2. Prepare the merchant commission group data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_group.csv** + +```csv +key,name +primary,Primary +secondary,Secondary +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------|----------|-----------|--------------|----------------------------------------------| +| key | ✓ | string | primary | Unique key of the merchant commission group. | +| name | ✓ | string | Primary | Name of the merchant commission group. | + +3. Prepare the merchant commission amount data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_amount.csv** + +```csv +merchant_commission_key,currency,value_net,value_gross +mc4,EUR,0,50 +mc4,CHF,0,50 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|------------------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| currency | ✓ | string | EUR | Currency for the commission amount. | +| value_net | ✓ | int | 0 | Net value of the merchant commission amount. | +| value_gross | ✓ | int | 50 | Gross value of the merchant commission amount. | + +4. Prepare the merchant commission merchant data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_merchant.csv** + +```csv +merchant_commission_key,merchant_reference +mc4,DE +mc4,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| merchant_reference | ✓ | string | DE | Reference to the merchant. | + +5. Prepare the merchant commission store data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_commission_store.csv** + +```csv +merchant_commission_key,store_name +mc4,DE +mc4,AT +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------| +| merchant_commission_key | ✓ | string | mc4 | Unique key of the merchant commission. | +| store_name | ✓ | string | DE | Name of the store. | + +6. Enable the data imports per your configuration. Example: + +**data/import/local/full_EU.yml** + +```yml + - data_entity: merchant-commission-group + source: data/import/common/common/marketplace/merchant_commission_group.csv + - data_entity: merchant-commission + source: data/import/common/common/marketplace/merchant_commission.csv + - data_entity: merchant-commission-merchant + source: data/import/common/common/marketplace/merchant_commission_merchant.csv + - data_entity: merchant-commission-amount + source: data/import/common/DE/marketplace/merchant_commission_amount.csv + - data_entity: merchant-commission-amount + source: data/import/common/AT/marketplace/merchant_commission_amount.csv + - data_entity: merchant-commission-store + source: data/import/common/DE/marketplace/merchant_commission_store.csv + - data_entity: merchant-commission-store + source: data/import/common/AT/marketplace/merchant_commission_store.csv +``` + +7. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------|--------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| MerchantCommissionGroupDataImportPlugin | Imports merchant commission group data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionDataImportPlugin | Imports merchant commission data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionAmountDataImportPlugin | Imports merchant commission amount data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionStoreDataImportPlugin | Imports merchant commission store data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | +| MerchantCommissionMerchantDataImportPlugin | Imports merchant commission merchant data into the database. | | Spryker\Zed\MerchantCommissionDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MerchantCommissionGroupDataImportPlugin(), + new MerchantCommissionDataImportPlugin(), + new MerchantCommissionAmountDataImportPlugin(), + new MerchantCommissionStoreDataImportPlugin(), + new MerchantCommissionMerchantDataImportPlugin(), + ]; + } +} +``` + +8. Enable the behaviors by registering the console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_GROUP), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_AMOUNT), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_STORE), + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . MerchantCommissionDataImportConfig::IMPORT_TYPE_MERCHANT_COMMISSION_MERCHANT), + ]; + + return $commands; + } +} +``` + +9. Import data: + +```bash +console data:import:merchant-commission-group +console data:import:merchant-commission +console data:import:merchant-commission-amount +console data:import:merchant-commission-store +console data:import:merchant-commission-merchant +``` + +{% info_block warningBox "Verification" %} + +Make sure the entities have been imported to the following database tables: + +- `spy_merchant_commission_group` +- `spy_merchant_commission` +- `spy_merchant_commission_amount` +- `spy_merchant_commission_store` +- `spy_merchant_commission_merchant` + +{% endinfo_block %} + +## 6) Set up behavior + +1. To enable the Marketplace ACL control, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------| +| SalesMerchantCommissionMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with sales merchant commission composite data. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | +| SalesMerchantCommissionAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with sales merchant commission composite data. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getMerchantAclEntityRuleExpanderPlugins(): array + { + return [ + new SalesMerchantCommissionMerchantAclEntityRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new SalesMerchantCommissionAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +2. To enable the Order Management related behavior, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------------------------------------------| +| MerchantCommissionCalculatorPlugin | Recalculates merchant commissions for a given order, updating the `CalculableObjectTransfer` object with the new commission values for items and totals. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Calculation | +| SanitizeMerchantCommissionPreReloadPlugin | Sanitizes merchant commission related fields in quote for the reorder functionality. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\AclMerchantPortal | +| UpdateMerchantCommissionTotalsMerchantOrderPostCreatePlugin | Calculates and persists the total merchant commission amounts for a newly created merchant order. | | Spryker\Zed\MerchantSalesOrderSalesMerchantCommission\Communication\Plugin\MerchantSalesOrder | +| SalesMerchantCommissionCalculationCommandByOrderPlugin | Calculates and persists the merchant commissions for a given order, updating the order totals and order items with the calculated commission amounts. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Oms\Command | +| MerchantCommissionRefundPostSavePlugin | Processes the refund of merchant commissions after a refund has been saved, updating the relevant sales merchant commissions and recalculating the order. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Refund | +| MerchantCommissionOrderPostCancelPlugin | Handles the refund of merchant commissions when an order is cancelled, updating the relevant sales merchant commissions and recalculating the order. | | Spryker\Zed\SalesMerchantCommission\Communication\Plugin\Sales | +| UpdateMerchantCommissionTotalsPostRefundMerchantCommissionPlugin | Updates the total and refunded merchant commission amounts in the order totals after a merchant commission refund. | | Spryker\Zed\MerchantSalesOrderSalesMerchantCommission\Communication\Plugin\SalesMerchantCommission; | + +**src/Pyz/Zed/Calculation/CalculationDependencyProvider.php** + +```php + + */ + protected function getOrderCalculatorPluginStack(Container $container): array + { + return [ + new MerchantCommissionCalculatorPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new SanitizeMerchantCommissionPreReloadPlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/MerchantSalesOrder/MerchantSalesOrderDependencyProvider.php** + +```php + + */ + protected function getMerchantOrderPostCreatePlugins(): array + { + return [ + new UpdateMerchantCommissionTotalsMerchantOrderPostCreatePlugin(), + ]; + } + +} +``` + +**src/Pyz/Zed/Oms/OmsDependencyProvider.php** + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new SalesMerchantCommissionCalculationCommandByOrderPlugin(), 'MerchantCommission/Calculate'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/Refund/RefundDependencyProvider.php** + +```php + + */ + protected function getRefundPostSavePlugins(): array + { + return [ + new MerchantCommissionRefundPostSavePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Sales/SalesDependencyProvider.php** + +```php + + */ + protected function getOrderPostCancelPlugins(): array + { + return [ + new MerchantCommissionOrderPostCancelPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SalesMerchantCommission/SalesMerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getPostRefundMerchantCommissionPlugins(): array + { + return [ + new UpdateMerchantCommissionTotalsPostRefundMerchantCommissionPlugin(), + ]; + } +} +``` + +3. To enable the merchant commission rule engine, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| MerchantCommissionItemCollectorRuleSpecificationProviderPlugin | Provides rule specifications for the collection of merchant commission items in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\RuleEngine | +| MerchantCommissionOrderDecisionRuleSpecificationProviderPlugin | Provides rule specifications for decision-making regarding merchant commission orders in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\RuleEngine | +| FixedMerchantCommissionCalculatorPlugin | Calculates merchant commissions based on a fixed amount, transforming and formatting the commission amount for persistence and display. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| PercentageMerchantCommissionCalculatorPlugin | Calculates merchant commissions based on a percentage of the total amount, transforming, rounding, and formatting the commission amount for persistence and display. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| ItemSkuMerchantCommissionItemCollectorRulePlugin | Collects all items that match a given SKU in the rule engine. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | +| PriceModeMerchantCommissionOrderDecisionRulePlugin | Checks if the price mode in the rule engine matches the one provided in the merchant commission calculation request. | | Spryker\Zed\MerchantCommission\Communication\Plugin\MerchantCommission | + +**src/Pyz/Zed/RuleEngine/RuleEngineDependencyProvider.php** + +```php + + */ + protected function getRuleSpecificationProviderPlugins(): array + { + return [ + new MerchantCommissionItemCollectorRuleSpecificationProviderPlugin(), + new MerchantCommissionOrderDecisionRuleSpecificationProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getMerchantCommissionCalculatorPlugins(): array + { + return [ + new FixedMerchantCommissionCalculatorPlugin(), + new PercentageMerchantCommissionCalculatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\RuleEngineExtension\Communication\Dependency\Plugin\CollectorRulePluginInterface> + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new ItemSkuMerchantCommissionItemCollectorRulePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\RuleEngineExtension\Communication\Dependency\Plugin\DecisionRulePluginInterface> + */ + protected function getRuleEngineDecisionRulePlugins(): array + { + return [ + new PriceModeMerchantCommissionOrderDecisionRulePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured plugins have been registered and are working as expected. + +Place an order with products from different merchants and make sure the following applies: + +- In the `spy_sales_merchant_commission` database table, merchants commissions have been applied to each merchant product in the order. +- The commission amount for each order item matches the commission rules you've set up for each merchant. + The commission amounts may vary depending on the commission rules you've set up for each merchant. If the commission + amounts don't match your expectations, review the commission rules in the `spy_merchant_commission` table. +- The `spy_sales_merchant_commission` table has entries similar to the following: + +| id_sales_merchant_commission | uuid | fk_sales_order | fk_sales_order_item | name | amount | refunded_amount | +|------------------------------|------|----------------|---------------------|-------|--------|-----------------| +| 1 | abcd | 123 | 1234 | Comm1 | 10 | 0 | +| 2 | efgh | 124 | 1245 | Comm2 | 5 | 0 | + +Column definitions in this example: +`fk_sales_order` + Corresponds to the sales order ID. + +`fk_sales_order_item` + Sales order item ID. + +`name` + Name of the merchant commission. + +`amount` + Commission amount applied to that order item. + +`refunded_amount` + Amount of the commission that has been refunded. + +{% endinfo_block %} + +4. To enable the merchant commission GUI, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------|------------------------------------|---------------|-------------------------------------------------------------------------------------| +| DataExportMerchantCommissionExportPlugin | Exports merchant commissions data. | | Spryker\Zed\MerchantCommissionDataExport\Communication\Plugin\MerchantCommissionGui | + +**src/Pyz/Zed/MerchantCommissionGui/MerchantCommissionGuiDependencyProvider.php** + +```php + **Merchant Commission**. +2. On the **Merchant Commission** page, click **Export** + Make sure this exports merchant commissions correctly. + +{% endinfo_block %} + +5. To enable the sales merchant payment commission, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|-------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------------| +| PayoutAmountMerchantPayoutCalculatorPlugin | Calculates the payout amount for the provided sales order item. | | Spryker\Zed\SalesPaymentMerchantSalesMerchantCommission\Communication\Plugin\SalesPaymentMerchant | +| PayoutReverseAmountMerchantPayoutCalculatorPlugin | Calculates the payout reverse amount for the provided sales order item. | | Spryker\Zed\SalesPaymentMerchantSalesMerchantCommission\Communication\Plugin\SalesPaymentMerchant | + + +**src/Pyz/Zed/SalesPaymentMerchant/SalesPaymentMerchantDependencyProvider.php** + +```php + + + + + Marketplace + fa-shopping-basket + + + + Merchant Commission + merchant-commission-gui + list + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure the **Marketplace** > **Merchant Commissions** navigation menu item is displayed. + +{% endinfo_block %} + + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|---------------------------------------------------------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Install the Marketplace Merchant Commission + Category Management feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Category Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.html) | +| Install the Marketplace Merchant Commission + Prices feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Prices feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.html) | +| Install the Marketplace Merchant Commission + Product feature | {{page.release_tag}} | [Install the Marketplace Merchant Commission + Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md new file mode 100644 index 00000000000..ec218ad3e69 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-custom-prices-feature.md @@ -0,0 +1,275 @@ + + +This document describes how to install the Marketplace Merchant Custom Prices feature. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant Custom Prices feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------|------------------|-------------------| +| Merchant Custom Prices | {{page.release_tag}} | [Install the Merchant Custom Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html) | +| Marketplace Merchant Portal Product Management | {{page.release_tag}} | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-merchant-custom-prices:"{{page.release_tag}}" --with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|------------------| +| PriceProduct | vendor/spryker/price-product | +| PriceProductMerchantRelationship | vendor/spryker/price-product-merchant-relationship | +| PriceProductMerchantRelationshipMerchantPortalGui | vendor/spryker/price-product-merchant-relationship-merchant-portal-gui | +| ProductMerchantPortalGui | vendor/spryker/product-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------|----------|---------|------------------| +| PriceProductTableView.idMerchantRelationship | property | Created | src/Generated/Shared/Transfer/PriceProductTableViewTransfer.php | +| PriceProductTableView.merchantRelationshipName | property | Created | src/Generated/Shared/Transfer/PriceProductTableViewTransfer.php | +| MerchantRelationshipFilter.merchantIds | property | Created | src/Generated/Shared/Transfer/MerchantRelationshipFilterTransfer.php | + +{% endinfo_block %} + +### 3) Add Zed translations + +Generate new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------|-----------------|---------------|------------------| +| MerchantRelationshipPreBuildPriceProductGroupKeyPlugin | Extends the logic for the Price Product group key generation. | | Spryker\Service\PriceProductMerchantRelationship\Plugin\PriceProduct | +| MerchantRelationshipVolumePriceProductValidatorPlugin | Validates volume prices. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\PriceProduct | +| MerchantRelationshipPriceProductCollectionDeletePlugin | Removes price product merchant relationships. | | Spryker\Zed\PriceProductMerchantRelationship\Communication\Plugin\PriceProduct | +| MerchantRelationshipPriceProductTableFilterPlugin | Filters price product transfers. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductAbstractTableConfigurationExpanderPlugin | Expands price product abstract table configuration. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductConcreteTableConfigurationExpanderPlugin | Expands price product concrete table configuration. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | +| MerchantRelationshipPriceProductMapperPlugin | Maps merchant relationship data. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | + +
    +src/Pyz/Zed/ProductMerchantPortalGui/ProductMerchantPortalGuiDependencyProvider.php + +```php + + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new MerchantRelationshipPriceProductTableFilterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductAbstractTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductAbstractTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductAbstractTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductConcreteTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductConcreteTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductConcreteTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductMapperPluginInterface> + */ + protected function getPriceProductMapperPlugins(): array + { + return [ + new MerchantRelationshipPriceProductMapperPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Log in to the Merchant Portal with a merchant that has at least one merchant relationship. + +Open any merchant product and make sure that the Prices table contains the "Customer" column for both: abstract and concrete products. + +Make sure that you can filter and sort the price table by Customer column. + +{% endinfo_block %} + +
    +src/Pyz/Service/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPreBuildPriceProductGroupKeyPlugins(): array + { + return [ + new MerchantRelationshipPreBuildPriceProductGroupKeyPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Open any merchant product with a regular price. + +Create a customer-specific price with the same combination of currency and country as the existing price. + +Make sure that there is no validation error. + +{% endinfo_block %} + +
    +src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPriceProductValidatorPlugins(): array + { + return [ + new MerchantRelationshipVolumePriceProductValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductExtension\Dependency\Plugin\PriceProductCollectionDeletePluginInterface> + */ + protected function getPriceProductCollectionDeletePlugins(): array + { + return [ + new MerchantRelationshipPriceProductCollectionDeletePlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that you see the validation error while attempting to set or create the customer price for the volume price. + +Make sure that you can delete the customer price. + +{% endinfo_block %} + + +### 5) Filter out product offer prices + +{% info_block warningBox %} + +This option is only available if you have the [Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) installed. + +{% endinfo_block %} + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | REQUIRED | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|-----------------------------------|---------------|--------------------------------------------------------------------------------| +| PriceProductOfferPriceProductTableFilterPlugin | Maps merchant relationship data. | | | Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui | + +```php +namespace Pyz\Zed\ProductMerchantPortalGui; + +use Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui\PriceProductOfferPriceProductTableFilterPlugin; +use Spryker\Zed\ProductMerchantPortalGui\ProductMerchantPortalGuiDependencyProvider as SprykerProductMerchantPortalGuiDependencyProvider; + +class ProductMerchantPortalGuiDependencyProvider extends SprykerProductMerchantPortalGuiDependencyProvider +{ + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductTableFilterPluginInterface> + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new PriceProductOfferPriceProductTableFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in to the Merchant Portal with a merchant that has at least one merchant relationship and product offer. +2. Open any product that has a product offer. +3. Make sure that the Prices table does not contain product offer prices for both abstract and concrete products. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-feature.md new file mode 100644 index 00000000000..997b109c4f0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-feature.md @@ -0,0 +1,1267 @@ +This document describes how to install the Marketplace Merchant feature. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/base-shop/install-and-upgrade/install-the-merchant-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|-------------------------------------------------| +| MerchantProfile | vendor/spryker/merchant-profile | +| MerchantProfileDataImport | vendor/spryker/merchant-profile-data-import | +| MerchantProfileGui | vendor/spryker/merchant-profile-gui | +| MerchantUser | vendor/spryker/merchant-user | +| MerchantUserGui | vendor/spryker/merchant-user-gui | +| OauthMerchantUser | vendor/spryker/oauth-merchant-user | +| MerchantApp | vendor/spryker/merchant-app | +| MerchantAppMerchantPortalGui | vendor/spryker/merchant-app-merchant-portal-gui | +| SalesPaymentMerchant | vendor/spryker/sales-payment-merchant | +| SalesPaymentMerchantExtension | vendor/spryker/sales-payment-merchant-extension | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Apply database changes, generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------|-------|---------| +| spy_merchant_profile | table | created | +| spy_merchant_user | table | created | + +{% endinfo_block %} + +2. Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have occurred in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------|----------|---------|----------------------------------------------------------------------------------| +| MerchantProfileAddress | class | Created | src/Generated/Shared/Transfer/MerchantProfileAddressTransfer | +| MerchantProfileCollection | class | Created | src/Generated/Shared/Transfer/MerchantProfileCollectionTransfer | +| MerchantProfileCriteria | class | Created | src/Generated/Shared/Transfer/MerchantProfileCriteriaTransfer | +| MerchantProfileGlossaryAttributeValues | class | Created | src/Generated/Shared/Transfer/MerchantProfileGlossaryAttributeValuesTransfer | +| MerchantProfileLocalizedGlossaryAttributes | class | Created | src/Generated/Shared/Transfer/MerchantProfileLocalizedGlossaryAttributesTransfer | +| MerchantUser | class | Created | src/Generated/Shared/Transfer/MerchantUserTransfer | +| MerchantUserCriteria | class | Created | src/Generated/Shared/Transfer/MerchantUserCriteriaTransfer | +| MerchantUserResponse | class | Created | src/Generated/Shared/Transfer/MerchantUserResponseTransfer | +| SpyMerchantProfileEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantProfileEntityTransfer | +| SpyMerchantUserEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantUserEntityTransfer | +| UrlStorage.fkResourceMerchant | property | Created | src/Generated/Shared/Transfer/UrlStorageTransfer | + +{% endinfo_block %} + +### 3) Optional: Set up configuration + +1. [Integrate Glue authentication](/docs/scos/dev/migration-concepts/migrate-to-decoupled-glue-infrastructure/decoupled-glue-infrastructure-integrate-the-authentication.html). + +2. Define the endpoints which merchant users have access to: + +**src/Pyz/Zed/OauthMerchantUser/OauthMerchantUserConfig.php** + +```php + [ + * 'isRegularExpression' => false, + * ], + * '/\/example\/.+/' => [ + * 'isRegularExpression' => true, + * 'methods' => [ + * 'patch', + * 'delete', + * ], + * ], + * ] + * + * @api + * + * @return array + */ + public function getAllowedForMerchantUserPaths(): array + { + return []; + } +} +``` + +3. To enable the Merchant portal installer rules for the Marketplace ACL control, register the following name of the +module: + +
    + src/Pyz/Zed/Acl/AclConfig.php + +```php +> + */ + public function getInstallerRules(): array + { + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'merchant-app-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + return $installerRules; + } +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure there is the **Payment Settings** button in the Merchant Portal navigation. + +{% endinfo_block %} + +4. Enable the message broker worker channels: + +**src/Pyz/Zed/MessageBroker/MessageBrokerConfig.php** + +```php + + */ + public function getDefaultWorkerChannels(): array + { + return [ + 'merchant-commands', + 'merchant-app-events', + ]; + } +} + +``` + +5. Enable order expenses for the merchant payout: + +**src/Pyz/Zed/SalesPaymentMerchant/SalesPaymentMerchantConfig.php** + +```php +> + */ + protected const EXCLUDED_EXPENSE_TYPES_FOR_STORE = [ + 'YOUR_STORE_NAME' => [ShipmentConfig::SHIPMENT_EXPENSE_TYPE], + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Verify that the order expenses are included in the merchant payout process: + +1. Place an order with products from different merchants. +2. Pass the merchant payout stage for the order. + In the `spy_sales_payment_merchant_payout` database table, make sure the merchant payout amounts have been applied to each merchant product in your order. The order expenses should be included in the merchant payout process as a separate entry in the `spy_sales_payment_merchant_payout` database table. +3. Refund the order. + In the `spy_sales_payment_merchant_payout_reversal` database table, make sure the refunded merchant payout amounts have been applied to each merchant product in your order. If there're no merchant order items left for the refund, the refunded order expenses should be included in the merchant payout process as a separate entry in the `spy_sales_payment_merchant_payout_reversal` database table. + +4. Repeat steps 1-3 for a store with excluded expense types and make sure the following applies: +- The order expenses with the excluded expense types are not included in the merchant payout process. +- The order expenses are not included in the merchant payout process as a separate entry in the `spy_sales_payment_merchant_payout` database table. +- The refunded order expenses are not included in the merchant reverse payout process as a separate entry in the `spy_sales_payment_merchant_payout_reversal` database table. + +{% endinfo_block %} + +### 4) Add Zed translations + +Generate new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 5) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------| +| MerchantProfileMerchantBulkExpanderPlugin | Expands merchants with profile data. | | Spryker\Zed\MerchantProfile\Communication\Plugin\Merchant | +| MerchantProfileMerchantPostCreatePlugin | Creates merchant profile on merchant create action. | | Spryker\Zed\MerchantProfile\Communication\Plugin\Merchant | +| MerchantProfileMerchantPostUpdatePlugin | Updates merchant profile on merchant update action.m | | Spryker\Zed\MerchantProfile\Communication\Plugin\Merchant | +| MerchantProfileContactPersonFormTabExpanderPlugin | Adds the tab for editing and creating contact person data to merchant edit and create forms. | | Spryker\Zed\MerchantProfileGui\Communication\Plugin\MerchantGui\Tabs | +| MerchantProfileFormTabExpanderPlugin | Adds the tab for editing and creating merchant profile data to merchant edit and create forms. | | Spryker\Zed\MerchantProfileGui\Communication\Plugin\MerchantGui\Tabs | +| MerchantProfileLegalInformationFormTabExpanderPlugin | Adds the tab for editing and creating merchant legal information to merchant edit and create forms. | | Spryker\Zed\MerchantProfileGui\Communication\Plugin\MerchantGui\Tabs | +| MerchantProfileFormExpanderPlugin | Expands the MerchantForm with merchant profile fields. | | Spryker\Zed\MerchantProfileGui\Communication\Plugin\MerchantGui | +| SyncMerchantUsersStatusMerchantPostUpdatePlugin | Updates merchant users status by merchant status on merchant update. | | Spryker\Zed\MerchantUser\Communication\Plugin\Merchant | +| MerchantUserTabMerchantFormTabExpanderPlugin | Adds an extra tab to merchant edit and create forms for editing and creating merchant user information. | | Spryker\Zed\MerchantUserGui\Communication\Plugin\MerchantGui | +| MerchantUserViewMerchantUpdateFormViewExpanderPlugin | Expands the merchant `FormView` with the data for the merchant user tab. | | Spryker\Zed\MerchantUserGui\Communication\Plugin\MerchantGui | +| MerchantUserTwigPlugin | Adds the 'merchantName' global Twig variable. | | Spryker\Zed\MerchantUser\Communication\Plugin\Twig | +| MerchantAppRequestExpanderPlugin | Adds the MerchantReference to the `AcpRequestRansfer` header when a current merchant user is available. | | Spryker\Zed\MerchantApp\Communication\Plugin\KernelApp | +| MerchantAppOnboardingMessageHandlerPlugin | Handels the merchant onboarding events. | | Spryker\Zed\MerchantApp\Communication\Plugin\MessageBroker | +| MerchantPayoutCommandByOrderPlugin | Sends a synchronous request to the PSP App to perform money transfers to merchants. | | Spryker\Zed\SalesPaymentMerchant\Communication\Plugin\Oms\Command | +| MerchantPayoutReverseCommandByOrderPlugin | Send a synchronous Request to the PSP App to do refund of previously made money transfers to merchants. | | Spryker\Zed\SalesPaymentMerchant\Communication\Plugin\Oms\Command | +| IsMerchantPaidOutConditionPlugin | Checks if the used payment method is configured to support payout. | | Spryker\Zed\SalesPaymentMerchant\Communication\Plugin\Oms\Condition | +| IsMerchantPayoutReversedConditionPlugin | Checks if the used payment method is configured to support reverse payout. | | Spryker\Zed\SalesPaymentMerchant\Communication\Plugin\Oms\Condition | + +
    + src/Pyz/Zed/Merchant/MerchantDependencyProvider.php + +```php + + */ + protected function getMerchantPostCreatePlugins(): array + { + return [ + new MerchantProfileMerchantPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantExtension\Dependency\Plugin\MerchantPostUpdatePluginInterface> + */ + protected function getMerchantPostUpdatePlugins(): array + { + return [ + new MerchantProfileMerchantPostUpdatePlugin(), + new SyncMerchantUsersStatusMerchantPostUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\MerchantExtension\Dependency\Plugin\MerchantBulkExpanderPluginInterface> + */ + protected function getMerchantBulkExpanderPlugins(): array + { + return [ + new MerchantProfileMerchantBulkExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- When you create a merchant using `MerchantFacade::createMerchant()`, its profile also gets created. +- When you update a merchant using `MerchantFacade::updateMerchant()`, its profile also gets updated. +- When you fetch a merchant using `MerchantFacade::findOne()`, its profile data also gets fetched. + +{% endinfo_block %} + +
    src/Pyz/Zed/MerchantGui/MerchantGuiDependencyProvider.php + +```php + + */ + protected function getMerchantFormExpanderPlugins(): array + { + return [ + new MerchantProfileFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantGuiExtension\Dependency\Plugin\MerchantFormTabExpanderPluginInterface> + */ + protected function getMerchantFormTabsExpanderPlugins(): array + { + return [ + new MerchantProfileContactPersonFormTabExpanderPlugin(), + new MerchantProfileFormTabExpanderPlugin(), + new MerchantProfileLegalInformationFormTabExpanderPlugin(), + new MerchantUserTabMerchantFormTabExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantGuiExtension\Dependency\Plugin\MerchantUpdateFormViewExpanderPluginInterface> + */ + protected function getMerchantUpdateFormViewExpanderPlugins(): array + { + return [ + new MerchantUserViewMerchantUpdateFormViewExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantGuiExtension\Dependency\Plugin\MerchantUpdateFormViewExpanderPluginInterface> + */ + protected function getMerchantViewFormViewExpanderPlugins(): array + { + return [ + new MerchantUserViewMerchantUpdateFormViewExpanderPlugin(), + ]; + } + +} + +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that, on the **Edit Merchant: `merchant_id`** and **View Merchant: `merchant_id`** pages in the Back Office, you can see the following tabs: + +- **Contact Person** +- **Merchant Profile** +- **Legal Information** +- **Merchant User** + +{% endinfo_block %} + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new MerchantUserTwigPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `merchantName` global Twig variable is available. + +{% endinfo_block %} + +
    src/Pyz/Zed/KernelApp/KernelAppDependencyProvider.php + +```php + + */ + public function getRequestExpanderPlugins(): array + { + return [ + new MerchantAppRequestExpanderPlugin(), + ]; + } +} +``` + +
    src/Pyz/Zed/MessageBroker/MessageBrokerDependencyProvider.php + +```php + + */ + public function getMessageHandlerPlugins(): array + { + return [ + new MerchantAppOnboardingMessageHandlerPlugin(), + ]; + } +} +``` + +
    src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new MerchantPayoutCommandByOrderPlugin(), 'SalesPaymentMerchant/Payout'); + $commandCollection->add(new MerchantPayoutReverseCommandByOrderPlugin(), 'SalesPaymentMerchant/ReversePayout'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @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 IsMerchantPaidOutConditionPlugin(), 'SalesPaymentMerchant/IsMerchantPaidOut'); + $conditionCollection->add(new IsMerchantPayoutReversedConditionPlugin(), 'SalesPaymentMerchant/IsMerchantPayoutReversed'); + + return $conditionCollection; + }); + + return $container; + } + +} +``` + +2. Based on your payment service provider, integrate the OMS commands and conditions for the merchant payout and reverse payout into your process. + + +{% info_block warningBox "Verification" %} + +Verify that the OMS works as expected for merchant payout and reverse payout commands and conditions: + +1. Place an order with products from different merchants. +2. Pass the merchant payout stage for the order. +3. In the `spy_sales_payment_merchant_payout` database table, make sure the merchant payout amounts have been applied to each merchant product in your order. +4. Refund for the order. +5. In the `spy_sales_payment_merchant_payout_reversal` database table, make sure the refunded merchant payout amounts have been applied to each merchant product in your order. + +{% endinfo_block %} + +#### Optional: Enable the Backend API authentication + +1. [Integrate Glue authentication](/docs/scos/dev/migration-concepts/migrate-to-decoupled-glue-infrastructure/decoupled-glue-infrastructure-integrate-the-authentication.html). + + +2. Register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|------------------------------------------------------|---------------|-----------------------------------------------------------------------| +| MerchantUserTypeOauthScopeAuthorizationCheckerPlugin | Authorizes user by merchant user scopes. | | Spryker\Zed\OauthMerchantUser\Communication\Plugin\OauthUserConnector | +| MerchantUserTypeOauthScopeProviderPlugin | Provides the OAuth scopes related to merchant users. | | Spryker\Zed\OauthMerchantUser\Communication\Plugin\OauthUserConnector | + +**src/Pyz/Zed/OauthUserConnector/OauthUserConnectorDependencyProvider.php** + +```php + + */ + protected function getUserTypeOauthScopeProviderPlugins(): array + { + return [ + new MerchantUserTypeOauthScopeProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthUserConnectorExtension\Dependency\Plugin\UserTypeOauthScopeAuthorizationCheckerPluginInterface> + */ + protected function getUserTypeOauthScopeAuthorizationCheckerPlugins(): array + { + return [ + new MerchantUserTypeOauthScopeAuthorizationCheckerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Authenticate as a merchant user: + +`POST https://glue-backend.mysprykershop.com/token` + +```json +{ + "data": { + "type": "token", + "attributes": { + "grant_type": "password", + "username": {% raw %}{{{% endraw %}username{% raw %}}}{% endraw %}, + "password": {% raw %}{{{% endraw %}password{% raw %}}}{% endraw %}, + } + } +} +``` + +Make sure the output contains the 201 response with a valid token. Make sure that the warehouse user can assess only the +endpoints specified in **src/Pyz/Zed/OauthMerchantUser/OauthMerchantUserConfig.php**. + +{% endinfo_block %} + +### 6) Configure navigation + +1. Add the marketplace section to the navigation: + +
    + config/Zed/navigation.xml + +```xml + + + + + Marketplace + fa-shopping-basket + + + + Merchants + merchant-gui + list-merchant + index + + + + + + Payment Settings + payment + merchant-app-merchant-portal-gui + payment-settings + index + + + + Onboarding + payment + merchant-app-merchant-portal-gui + payment-settings + onboarding + 0 + + + + +``` + +
    + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure there is the **Marketplace** button in the Back Office navigation. +Make sure there is the **Payment Settings** button in the Merchant Portal navigation. + +{% endinfo_block %} + +### 7) Import data + +To import data follow the steps in the following sections. + +#### Import merchant profile data + +1. Prepare merchant profile data according to your requirements using the demo data: + +
    +/data/import/common/common/marketplace/merchant_profile.csv + +```csv +merchant_reference,contact_person_role,contact_person_title,contact_person_first_name,contact_person_last_name,contact_person_phone,banner_url,logo_url,public_email,public_phone,description_glossary_key.en_US,description_glossary_key.de_DE,banner_url_glossary_key.en_US,banner_url_glossary_key.de_DE,delivery_time_glossary_key.en_US,delivery_time_glossary_key.de_DE,terms_conditions_glossary_key.en_US,terms_conditions_glossary_key.de_DE,cancellation_policy_glossary_key.en_US,cancellation_policy_glossary_key.de_DE,imprint_glossary_key.en_US,imprint_glossary_key.de_DE,data_privacy_glossary_key.en_US,data_privacy_glossary_key.de_DE,is_active,fax_number +MER000001,E-Commerce Manager,Mr,Harald,Schmidt,+49 30 208498350,https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png,info@spryker.com,+49 30 234567891,Spryker is the main merchant at the Demo Marketplace.,Spryker ist der Haupthändler auf dem Demo-Marktplatz.,https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png,1-3 days,1-3 Tage,"

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ","

    § 1 Geltungsbereich & Abwehrklausel

    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.

    § 2 Zustandekommen des Vertrages

    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-Email. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.

    § 3 Eigentumsvorbehalt

    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.

    § 4 Fälligkeit

    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.

    ","You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.","Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen. Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Beförderer ist, die letzte Ware in Besitz genommen hat. Sie können dafür das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.","

    Spryker Systems GmbH

    Julie-Wolfthorn-Straße 1
    10115 Berlin
    DE

    Phone: +49 (30) 2084983 50
    Email: info@spryker.com

    Represented by
    Managing Directors: Alexander Graf, Boris Lokschin
    Register Court: Hamburg
    Register Number: HRB 134310

    ","

    Spryker Systems GmbH

    Julie-Wolfthorn-Straße 1
    10115 Berlin
    DE

    Phone: +49 (30) 2084983 50
    Email: info@spryker.com

    Vertreten durch
    Geschäftsführer: Alexander Graf, Boris Lokschin
    Registergericht: Hamburg
    Registernummer: HRB 134310

    ",Spryker Systems GmbH values the privacy of your personal data.,Für die Abwicklung ihrer Bestellung gelten auch die Datenschutzbestimmungen von Spryker Systems GmbH.,1,+49 30 234567800 +MER000002,Country Manager DE,Ms,Martha,Farmer,+31 123 345 678,https://d2s0ynfc62ej12.cloudfront.net/merchant/videoking-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/videoking-logo.png,hi@video-king.nl,+31 123 345 777,"Video King is a premium provider of video equipment. In business since 2010, we understand the needs of video professionals and enthusiasts and offer a wide variety of products with competitive prices. ","Video King ist ein Premium-Anbieter von Videogeräten. Wir sind seit 2010 im Geschäft, verstehen die Bedürfnisse von Videoprofis und -enthusiasten und bieten eine große Auswahl an Produkten zu wettbewerbsfähigen Preisen an. ",https://d2s0ynfc62ej12.cloudfront.net/merchant/videoking-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/videoking-banner.png,2-4 days,2-4 Tage,"

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ","

    § 1 Geltungsbereich & Abwehrklausel

    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.

    § 2 Zustandekommen des Vertrages

    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-Email. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.

    § 3 Eigentumsvorbehalt

    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.

    § 4 Fälligkeit

    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.

    ","You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.","Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen. Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Beförderer ist, die letzte Ware in Besitz genommen hat. Sie können dafür das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.",

    Video King

    Gilzeweg 24
    4854SG Bavel
    NL

    Phone: +31 123 45 6789
    Email: hi@video-king.nl

    Represented by
    Managing Director: Max Mustermann
    Register Court: Amsterdam
    Register Number: 1234.4567

    ,

    Video King

    Gilzeweg 24
    4854SG Bavel
    NL

    Telefon: +31 123 45 6789
    Email: hi@video-king.nl

    Vertreten durch
    Geschäftsführer: Max Mustermann
    Registergericht: Amsterdam
    Registernummer: 1234.4567

    ,Video King values the privacy of your personal data.,Für die Abwicklung ihrer Bestellung gelten auch die Datenschutzbestimmungen von Video King.,1,+31 123 345 733 +MER000006,Brand Manager,Ms,Michele,Nemeth,030/123456789,https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-logo.png,support@sony-experts.com,+49 30 234567691,"Capture your moment with the best cameras from Sony. From pocket-size to professional-style, they all pack features to deliver the best quality pictures. +Discover the range of Sony cameras, lenses and accessories, and capture your favorite moments with precision and style with the best cameras can offer.","Halten Sie Ihren Moment mit den besten Kameras von Sony fest. Vom Taschenformat bis hin zum professionellen Stil bieten sie alle Funktionen, um Bilder in bester Qualität zu liefern. +Entdecken Sie das Angebot an Kameras, Objektiven und Zubehör von Sony und fangen Sie Ihre Lieblingsmomente mit Präzision und Stil mit den besten Kameras ein, die das Unternehmen zu bieten hat.",https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-banner.png,1-3 days,1-3 Tage,"

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ","

    § 1 Geltungsbereich & Abwehrklausel

    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.

    § 2 Zustandekommen des Vertrages

    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-Email. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.

    § 3 Eigentumsvorbehalt

    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.

    § 4 Fälligkeit

    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.

    ","You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.","Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen. Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Beförderer ist, die letzte Ware in Besitz genommen hat. Sie können dafür das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.",

    Sony Experts

    Matthias-Pschorr-Straße 1
    80336 München
    DE

    Phone: 030 1234567
    Email: support@sony-experts.com

    Represented by
    Managing Director: Max Mustermann
    Register Court: Munich
    Register Number: HYY 134306

    ,

    Sony Experts

    Matthias-Pschorr-Straße 1
    80336 München
    DE

    Phone: 030 1234567
    Email: support@sony-experts.com

    Vertreten durch
    Geschäftsführer: Max Mustermann
    Registergericht: München
    Registernummer: HYY 134306

    ,Sony Experts values the privacy of your personal data.,Für die Abwicklung ihrer Bestellung gelten auch die Datenschutzbestimmungen von Sony Experts.,1,+49 30 234567600 +MER000004,,,,,,,,,,,,,,,,,,,,,,,,0, +MER000003,,,,,,,,,,,,,,,,,,,,,,,,0, +MER000007,,,,,,,,,,,,,,,,,,,,,,,,0, +MER000005,Merchandise Manager,Mr,Jason,Weidmann,030/123456789,https://d2s0ynfc62ej12.cloudfront.net/merchant/budgetcameras-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/budgetcameras-logo.png,support@budgetcamerasonline.com,+49 30 234567591,"DSLR and mirrorless cameras are by far the most popular with filmmakers on a tight budget when you can't afford multiple specialist cameras. +Budget Cameras is offering a great selection of digital cameras with the lowest prices.","DSLR- und spiegellose Kameras sind bei Filmemachern mit knappem Budget bei weitem am beliebtesten, wenn sie sich bestimmte Spezialkameras nicht leisten können. +Budget Cameras bietet eine große Auswahl an Digitalkameras mit den niedrigsten Preisen.",https://d2s0ynfc62ej12.cloudfront.net/merchant/budgetcameras-banner.png,https://d2s0ynfc62ej12.cloudfront.net/merchant/budgetcameras-banner.png,2-4 days,2-4 Tage,"

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ","

    § 1 Geltungsbereich & Abwehrklausel

    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.

    § 2 Zustandekommen des Vertrages

    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-Email. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.

    § 3 Eigentumsvorbehalt

    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.

    § 4 Fälligkeit

    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.

    ","You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.","Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen. Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Beförderer ist, die letzte Ware in Besitz genommen hat. Sie können dafür das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.",

    Budget Cameras

    Spitalerstraße 3
    20095 Hamburg
    DE

    Phone: 030 1234567
    Email: support@budgetcamerasonline.com

    Represented by
    Managing Director: Max Mustermann
    Register Court: Hamburg
    Register Number: HXX 134305

    ,

    Budget Cameras

    Spitalerstraße 3
    20095 Hamburg
    DE

    Phone: 030 1234567
    Email: support@budgetcamerasonline.com

    Vertreten durch
    Geschäftsführer: Max Mustermann
    Registergericht: Hamburg
    Registernummer: HXX 134305

    ,Budget Cameras values the privacy of your personal data.,Für die Abwicklung ihrer Bestellung gelten auch die Datenschutzbestimmungen von Budget Cameras.,1,+49 30 234567500 +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|----------------------------------------|----------|-----------|---------------------------------|---------------------------------------------------------------------------| +| merchant_reference | ✓ | String | MER000007 | Merchant identifier. | +| contact_person_role | | String | E-Commerce Manager | Role of the contact person of a merchant. | +| contact_person_title | | String | Mr | The title shown for the contact person of a merchant. | +| contact_person_first_name | | String | Harald | First name of the contact person of a merchant. | +| contact_person_last_name | | String | Schmidt | Last name of the contact person of a merchant. | +| contact_person_phone | | String | 030 234567891a | Phone number of the contact person of a merchant. | +| banner_url | | String | `http://cdn-link/banner.png` | Default banner URL of a merchant if a locale specific one does not exist. | +| logo_url | | String | `http://cdn-link/logo.png` | Logo URL of a merchant. | +| public_email | | String | `email@merchant-domain.com` | Public email for communication of a merchant. | +| public_phone | | String | 030 234567891 | Public phone for communication of a merchant. | +| description_glossary_key.en_US | | String | Lorem ipsum dolor sit amet | Description of a merchant in the en_US locale. | +| description_glossary_key.de_DE | | String | Lorem ipsum dolor sit amet | Description of a merchant in the de_DE locale. | +| banner_url_glossary_key.en_US | | String | `http://cdn-link/en-banner.png` | Locale specific banner URL of a merchant. | +| banner_url_glossary_key.de_DE | | String | `http://cdn-link/en-banner.png` | Locale specific banner URL of a merchant. | +| delivery_time_glossary_key.en_US | | String | 1-3 days | Average delivery time of a merchant in the en_US locale. | +| delivery_time_glossary_key.de_DE | | String | 1-3 days | Average delivery time of a merchant in the de_DE locale. | +| terms_conditions_glossary_key.en_US | | String | Lorem ipsum dolor sit amet | Terms and conditions of a merchant in the en_US locale. | +| terms_conditions_glossary_key.de_DE | | String | Lorem ipsum dolor sit amet | Terms and conditions of a merchant in the de_DE locale. | +| cancellation_policy_glossary_key.en_US | | String | Lorem ipsum dolor sit amet | Cancellation policy of a merchant in the en_US locale. | +| cancellation_policy_glossary_key.de_DE | | String | Lorem ipsum dolor sit amet | Cancellation policy of a merchant in the de_DE locale. | +| imprint_glossary_key.en_US | | String | Lorem ipsum dolor sit amet | Imprint of a merchant in the en_US locale. | +| imprint_glossary_key.de_DE | | String | Lorem ipsum dolor sit amet | Imprint of a merchant in the de_DE locale. | +| data_privacy_glossary_key.en_US | | String | Lorem ipsum dolor sit amet | Data privacy statement of a merchant in the en_US locale. | +| data_privacy_glossary_key.de_DE | | String | Lorem ipsum dolor sit amet | Data privacy statement of a merchant in the de_DE locale. | +| fax_number | | String | 030 234567800 | Fax number of a merchant. | + +2. Prepare merchant profile address data according to your requirements using the demo data: + +**/data/import/common/common/marketplace/merchant_profile_address.csv** + +```csv +merchant_reference,country_iso2_code,country_iso3_code,address1,address2,address3,city,zip_code,longitude,latitude +MER000001,DE,DEU,Julie-Wolfthorn-Straße,1,,Berlin,10115,52.534105,13.384458 +MER000002,NL,,Gilzeweg,24,,Bavel,4854SG,51.558107,4.838470 +MER000006,DE,DEU,Matthias-Pschorr-Straße,1,,München,80336,48.131058,11.547788 +MER000005,DE,DEU,Spitalerstraße,3,,Berlin,10115,, +MER000004,DE,DEU,Caroline-Michaelis-Straße,8,,Hamburg,20095,, +MER000003,DE,DEU,Caroline-Michaelis-Straße,8,,Berlin,10115,, +MER000007,DE,DEU,Caroline-Michaelis-Straße,8,,Berlin,10115,53.552463,10.004663 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|----------|-----------|---------------------------|-------------------------------------------| +| merchant_reference | ✓ | String | MER000006 | Merchant identifier. | +| country_iso2_code | | String | DE | Country ISO-2 code the address exists in. | +| country_iso3_code | | String | DEU | Country ISO-3 code the address exists in. | +| address1 | | String | Caroline-Michaelis-Straße | Address line 1 of a merchant. | +| address2 | | String | 8 | Address line 2 of a merchant. | +| address3 | | String | Second floor | Address line 3 of a merchant. | +| city | | String | Berlin | City address of a merchant. | +| zip_code | | String | 10115 | Zip code address of a merchant. | +| longitude | | String | 52.534105 | Longitude value of a merchant. | +| latitude | | String | 13.384458 | Latitude value of a merchant. | + +3. Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------|----------------------------------------------------------|---------------|------------------------------------------------------------| +| MerchantProfileDataImportPlugin | Imports merchant profile data into the database. | | Spryker\Zed\MerchantProfileDataImport\Communication\Plugin | +| MerchantProfileAddressDataImportPlugin | Imports merchant profile address data into the database. | | Spryker\Zed\MerchantProfileDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + +src/Pyz/Zed/DataImport/Business/Model/MerchantUser/MerchantUserWriterStep.php + +```php +merchantUserFacade = $merchantUserFacade; + } + + protected const MERCHANT_REFERENCE = 'merchant_reference'; + protected const USERNAME = 'username'; + + /** + * @inheritDoc + */ + public function execute(DataSetInterface $dataSet): void + { + $idMerchant = $this->getIdMerchantByReference($dataSet[static::MERCHANT_REFERENCE]); + $idUser = $this->getIdUserByUsername($dataSet[static::USERNAME]); + + $merchantUserTransfer = $this->merchantUserFacade->findMerchantUser( + (new MerchantUserCriteriaTransfer()) + ->setIdUser($idUser) + ->setIdMerchant($idMerchant) + ); + + if (!$merchantUserTransfer) { + $userTransfer = $this->merchantUserFacade->findUser( + (new UserCriteriaTransfer())->setIdUser($idUser) + ); + + $this->merchantUserFacade->createMerchantUser( + (new MerchantUserTransfer()) + ->setIdMerchant($idMerchant) + ->setUser($userTransfer) + ); + } + } + + /** + * @param string $merchantReference + * + * @throws \Pyz\Zed\DataImport\Business\Exception\EntityNotFoundException + * + * @return int + */ + protected function getIdMerchantByReference(string $merchantReference): int + { + $merchantEntity = SpyMerchantQuery::create() + ->findOneByMerchantReference($merchantReference); + + if (!$merchantEntity) { + throw new EntityNotFoundException(sprintf('Merchant with reference "%s" is not found.', $merchantReference)); + } + + return $merchantEntity->getIdMerchant(); + } + + /** + * @param string $username + * + * @throws \Pyz\Zed\DataImport\Business\Exception\EntityNotFoundException + * + * @return int + */ + protected function getIdUserByUsername(string $username): int + { + $userEntity = SpyUserQuery::create() + ->findOneByUsername($username); + + if (!$userEntity) { + throw new EntityNotFoundException(sprintf('User with username "%s" is not found.', $username)); + } + + return $userEntity->getIdUser(); + } +} +``` + +
    + +3. Optional: Add the merchant user import type to full import: + +**src/Pyz/Zed/DataImport/DataImportConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + return [ + static::IMPORT_TYPE_MERCHANT_USER, + ]; + } +} +``` + +4. Enable the merchant user data import command: + +
    +src/Pyz/Zed/DataImport/Business/DataImportBusinessFactory.php + +```php +getDataEntity()) { + case DataImportConfig::IMPORT_TYPE_MERCHANT_USER: + return $this->createMerchantUserImporter($dataImportConfigurationActionTransfer); + default: + return null; + } + } + + /** + * @param \Generated\Shared\Transfer\DataImportConfigurationActionTransfer $dataImportConfigurationActionTransfer + * + * @return \Spryker\Zed\DataImport\Business\Model\DataImporterInterface + */ + public function createMerchantUserImporter(DataImportConfigurationActionTransfer $dataImportConfigurationActionTransfer) + { + $dataImporter = $this->getCsvDataImporterFromConfig( + $this->getConfig()->buildImporterConfigurationByDataImportConfigAction($dataImportConfigurationActionTransfer) + ); + + $dataSetStepBroker = $this->createTransactionAwareDataSetStepBroker(); + $dataSetStepBroker->addStep(new MerchantUserWriterStep( + $this->getMerchantUserFacade() + )); + + $dataImporter->addDataSetStepBroker($dataSetStepBroker); + + return $dataImporter; + } + + /** + * @return \Spryker\Zed\MerchantUser\Business\MerchantUserFacadeInterface + */ + protected function getMerchantUserFacade(): MerchantUserFacadeInterface + { + return $this->getProvidedDependency(DataImportDependencyProvider::FACADE_MERCHANT_USER); + } +} +``` + +
    + +5. Create and prepare your data import configuration files according to your requirements using the demo config + template: + +**data/import/common/marketplace_import_config_EU.yml** + +```yml +version: 0 + +actions: + - data_entity: merchant-user + source: data/import/common/common/merchant_user.csv + - data_entity: merchant-profile + source: data/import/common/common/marketplace/merchant_profile.csv + - data_entity: merchant-profile-address + source: data/import/common/common/marketplace/merchant_profile_address.csv + ``` + +6. Import data: + +```bash +console data:import merchant-user +``` + +{% info_block warningBox "Verification" %} + +Make sure the data has been added to the following tables: + +- `spy_merchant_profile` +- `spy_merchant_profile_address` +- `spy_merchant_user` + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Merchant feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-merchant: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------|---------------------------------------------| +| MerchantProfileWidget | vendor/spryker-shop/merchant-profile-widget | +| MerchantWidget | vendor/spryker-shop/merchant-widget | +| MerchantPage | vendor/spryker-shop/merchant-page | + +{% endinfo_block %} + +### 2) Add translations + +Add Yves translations: + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +merchant.sold_by,Sold by,en_US +merchant.sold_by,Verkauft durch,de_DE +merchant_profile.email,Email Address,en_US +merchant_profile.email,Email,de_DE +merchant_profile.address,Address,en_US +merchant_profile.address,Adresse,de_DE +merchant_profile.phone,Phone,en_US +merchant_profile.phone,Telefon,de_DE +merchant_profile.terms_and_conditions,Terms & Conditions,en_US +merchant_profile.terms_and_conditions,AGB,de_DE +merchant_profile.cancellation_policy,Cancellation Policy,en_US +merchant_profile.cancellation_policy,Widerrufsbelehrung,de_DE +merchant_profile.imprint,Imprint,en_US +merchant_profile.imprint,Impressum,de_DE +merchant_profile.privacy,Data Privacy,en_US +merchant_profile.privacy,Datenschutz,de_DE +merchant_profile.delivery_time,Delivery Time,en_US +merchant_profile.delivery_time,Lieferzeit,de_DE +merchant_profile.shop_merchant_products,Shop Merchant Products,en_US +merchant_profile.shop_merchant_products,Händlerartikel kaufen,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 3) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|----------------------|------------------------------------------------------------------------|---------------|----------------------------------------| +| SoldByMerchantWidget | Shows the list of the offers with their prices for a concrete product. | | SprykerShop\Yves\MerchantWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + SoldByMerchantWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +To verify `SoldByMerchantWidget` has been registered, make sure the **Sold by merchant:** section is displayed on the +Product Details pages. This also requires +the [Marketplace Product feature to be installed](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html). + +{% endinfo_block %} + +### 4) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------|-----------------------------------------------------------------------------------------------|---------------|--------------------------------------| +| MerchantPageResourceCreatorPlugin | Allows accessing a merchant page at `https://mysprykershop.com/merchant/{merchantReference}`. | | SprykerShop\Yves\MerchantPage\Plugin | + +**src/Pyz/Yves/StorageRouter/StorageRouterDependencyProvider.php** + +```php + + */ + protected function getResourceCreatorPlugins(): array + { + return [ + new MerchantPageResourceCreatorPlugin(), + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure merchant profile data is displayed at `https://mysprykershop.com/de/merchant/spryker`. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant API | ✓ | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md new file mode 100644 index 00000000000..0d1522c3717 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md @@ -0,0 +1,97 @@ +This document describes how to install the Marketplace Merchant Portal Core + CMS feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| -------------------- | ---------- | ---------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| CMS | {{page.release_tag}} | [Install the Spryker CMS feature](/docs/pbc/all/content-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | + +## 1) Create merchant restore password email templates + +**src/Pyz/Zed/MerchantUserPasswordResetMail/Presentation/Mail/merchant_restore_password.html.twig** + +```twig +{% raw %}{{ renderCmsBlockAsTwig({% endraw %} +'merchant_restore_password--html', +constant('APPLICATION_STORE'), +mail.locale.localeName, +{% raw %}{mail: mail}) \}\}{% endraw %} +``` + +**src/Pyz/Zed/MerchantUserPasswordResetMail/Presentation/Mail/merchant_restore_password.text.twig** + +```twig +{% raw %}{{ renderCmsBlockAsTwig({% endraw %} +'merchant_restore_password--text', +constant('APPLICATION_STORE'), +mail.locale.localeName, +{% raw %}{mail: mail}) \}\}{% endraw %} +``` + +## 2) Import data + +You can import and enable CMS blocks as described below or do it in the Back Office. + +1. Prepare in import file using the following example: + +
    + data/import/common/common/cms_block.csv + +```csv +block_key,block_name,template_name,template_path,active,placeholder.title.de_DE,placeholder.title.en_US,placeholder.description.de_DE,placeholder.description.en_US,placeholder.link.de_DE,placeholder.link.en_US,placeholder.content.de_DE,placeholder.content.en_US +cms-block-email--merchant_restore_password--html,merchant_restore_password--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"

    {{ 'mail.trans.common.hello_for_first_name' | trans }} {{ mail.user.firstName }} {{ mail.user.lastName}},

    {{ 'mail.trans.merchant.restore_password.title' | trans }}

    {{ 'mail.trans.customer_restore_password.subtitle' | trans }}

    {{ 'mail.trans.customer_restore_password.change_password' | trans }}
    ","

    {{ 'mail.trans.common.hello_for_first_name' | trans }} {{ mail.user.firstName }} {{ mail.user.lastName}},

    {{ 'mail.trans.merchant.restore_password.title' | trans }}

    {{ 'mail.trans.customer_restore_password.subtitle' | trans }}

    {{ 'mail.trans.customer_restore_password.change_password' | trans }}
    " +cms-block-email--merchant_restore_password--text,merchant_restore_password--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,{{ 'mail.trans.common.hello_for_first_name' | trans }} {{ mail.user.firstName }} {{mail.user.lastName}} {{ 'mail.trans.merchant.restore_password.title' | trans }} {{ 'mail.trans.restore_password.subtitle' | trans }} {{ 'mail.trans.restore_password.change_password' | trans }} ({{ mail.resetPasswordLink }}) ,{{ 'mail.trans.common.hello_for_first_name' | trans }} {{ mail.user.firstName }} {{mail.user.lastName}} {{ 'mail.trans.merchant.restore_password.title' | trans }} {{ 'mail.trans.restore_password.subtitle' | trans }} {{ 'mail.trans.restore_password.change_password' | trans }} ({{ mail.resetPasswordLink }}) +``` + +
    + +2. Import CMS blocks: + +```bash +console data:import:cms-block +``` + +3. Prepare data import files per store to enable CMS blocks: + +**data/import/common/AT/cms_block_store.csv** + +```csv +block_key,store_name +cms-block-email--merchant_restore_password--html,AT +cms-block-email--merchant_restore_password--text,AT +``` + +**data/import/common/DE/cms_block_store.csv** + +```csv +block_key,store_name +cms-block-email--merchant_restore_password--html,DE +cms-block-email--merchant_restore_password--text,DE +``` + +**data/import/common/US/cms_block_store.csv** + +```csv +block_key,store_name +cms-block-email--merchant_restore_password--html,US +cms-block-email--merchant_restore_password--text,US +``` + +4. Import CMS blocks per store: + +```bash +console data:import:cms-block-store +``` + +{% info_block warningBox "Verification" %} + +Make sure that the imported data has been added to the following database tables: + +- `spy_cms_block` +- `spy_cms_block_store` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md new file mode 100644 index 00000000000..1379e793b57 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md @@ -0,0 +1,60 @@ +This document describes how to install the Marketplace MerchantPortal Core + Dynamic Store feature. + +## Install feature core + +Follow the steps below to install the Marketplace MerchantPortal Core + Dynamic Store feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| -------------------- | ------- | +| Spryker Core | {{page.release_tag}} | +| Marketplace Merchant Portal Core | {{page.release_tag}} | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| CountryStoreAclEntityConfigurationExpanderPlugin | Expands provided `AclEntityMetadataConfig` transfer object with country store composite data. | None | Spryker\Zed\Country\Communication\Plugin\AclMerchantPortal | +| CurrencyStoreAclEntityConfigurationExpanderPlugin | Expands provided `AclEntityMetadataConfig` transfer object with country store composite data. | None | Spryker\Zed\Country\Communication\Plugin\AclMerchantPortal | +| LocaleStoreAclEntityConfigurationExpanderPlugin |Expands provided `AclEntityMetadataConfig` transfer object with country store composite data. | None | Spryker\Zed\Country\Communication\Plugin\AclMerchantPortal | + + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new CountryStoreAclEntityConfigurationExpanderPlugin(), + new CurrencyStoreAclEntityConfigurationExpanderPlugin(), + new LocaleStoreAclEntityConfigurationExpanderPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure that access to tables `SpyCurrencyStore`, `SpyCountryStore`, `SpyLocaleStore` is allowed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md new file mode 100644 index 00000000000..3e3f89b7e2a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-core-feature.md @@ -0,0 +1,1970 @@ + + + +This document describes how to install the Marketplace Merchant Portal Core feature. + +## Install feature core + +Follow the steps below to install the Merchant Portal Core feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core BO | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Acl | {{page.release_tag}} | [Install the ACL feature](/docs/pbc/all/user-management/latest/base-shop/install-and-upgrade/install-the-acl-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-merchantportal-core:"{{page.release_tag}}" --update-with-dependencies +composer require spryker/security-merchant-portal-gui-extension +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|--------------------------------------------------| +| ZedUi | vendor/spryker/zed-ui | +| GuiTable | vendor/spryker/gui-table | +| AclMerchantPortal | vendor/spryker/acl-merchant-portal | +| MerchantPortalApplication | vendor/spryker/merchant-portal-application | +| MerchantUserPasswordResetMail | vendor/spryker/merchant-user-password-reset-mail | +| Navigation | vendor/spryker/navigation | +| SecurityMerchantPortalGui | vendor/spryker/security-merchant-portal-gui | +| UserMerchantPortalGui | vendor/spryker/user-merchant-portal-gui | +| UserMerchantPortalGuiExtension | spryker/user-merchant-portal-gui-extension | +| SecurityMerchantPortalGuiExtension | spryker/security-merchant-portal-gui-extension | + +{% endinfo_block %} + +### 2) Set up configuration + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|---------------------------| +| GuiTableConfig::getDefaultTimezone() | Defines the default timezone for formatting the `DateTime` data to the ISO 8601 format. | Pyz\Zed\GuiTable | +| AclMerchantPortalConfig::isMerchantToMerchantUserConjunctionByUsernameEnabled() | Defines if the merchant to merchant user conjunction should be generated by using the users' usernames or first and last names. | Pyz\Zed\AclMerchantPortal | +| ZedNavigationConfig::getCacheFilePaths() | Defines the absolute paths to cache files indexed by navigation types. | Pyz\Zed\ZedNavigation | +| ZedNavigationConfig::getRootNavigationSchemaPaths() | Defines the absolute paths to navigation schemas indexed by navigation types. | Pyz\Zed\ZedNavigation | +| ZedNavigationConfig::getNavigationSchemaFileNamePatterns() | Defines the navigation schema file name patters indexed by navigation types. | Pyz\Zed\ZedNavigation | + +**src/Pyz/Zed/GuiTable/GuiTableConfig.php** + +```php + + src/Pyz/Zed/ZedNavigation/ZedNavigationConfig.php + +```php + + */ + public function getCacheFilePaths(): array + { + $cacheFilePaths = parent::getCacheFilePaths(); + $cacheFilePaths[static::NAVIGATION_TYPE_MAIN_MERCHANT_PORTAL] = $this->getCacheDirName() . 'navigation-main-merchant-portal.cache'; + $cacheFilePaths[static::NAVIGATION_TYPE_SECONDARY_MERCHANT_PORTAL] = $this->getCacheDirName() . 'navigation-secondary-merchant-portal.cache'; + + return $cacheFilePaths; + } + + /** + * @return array + */ + public function getRootNavigationSchemaPaths(): array + { + $rootNavigationSchemaPaths = parent::getRootNavigationSchemaPaths(); + $rootNavigationSchemaPaths[static::NAVIGATION_TYPE_MAIN_MERCHANT_PORTAL] = $this->getRootNavigationSchemasDirName() . 'navigation-main-merchant-portal.xml'; + $rootNavigationSchemaPaths[static::NAVIGATION_TYPE_SECONDARY_MERCHANT_PORTAL] = $this->getRootNavigationSchemasDirName() . 'navigation-secondary-merchant-portal.xml'; + + return $rootNavigationSchemaPaths; + } + + /** + * @return array + */ + public function getNavigationSchemaFileNamePatterns(): array + { + $navigationSchemaFileNamePatterns = parent::getNavigationSchemaFileNamePatterns(); + $navigationSchemaFileNamePatterns[static::NAVIGATION_TYPE_MAIN_MERCHANT_PORTAL] = 'navigation-main-merchant-portal.xml'; + $navigationSchemaFileNamePatterns[static::NAVIGATION_TYPE_SECONDARY_MERCHANT_PORTAL] = 'navigation-secondary-merchant-portal.xml'; + + return $navigationSchemaFileNamePatterns; + } +} +``` + +
    + +### 3) Set up the database schema + +1. Set up the database schemas: + +**src/Pyz/Zed/Merchant/Persistence/Propel/Schema/spy_merchant.schema.xml** + +```xml + + + + + + + + + +
    + +
    +``` + +**src/Pyz/Zed/MerchantUser/Persistence/Propel/Schema/spy_merchant_user.schema.xml** + +```xml + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +### 3) Optional: Set up configuration + +1. In `src/Pyz/Zed/SecurityMerchantPortalGui/SecurityMerchantPortalGuiConfig.php`, enable the blocking of recurring attempts to reset password by setting `MERCHANT_PORTAL_SECURITY_BLOCKER_ENABLED` to `true;`. + +2. In `src/Pyz/Zed/SecurityMerchantPortalGui/SecurityMerchantPortalGuiConfig.php`, add the following configuration: + +```php +namespace Pyz\Zed\SecurityMerchantPortalGui; + +use Spryker\Zed\SecurityMerchantPortalGui\SecurityMerchantPortalGuiConfig as SprykerSecurityMerchantPortalGui; + +class SecurityMerchantPortalGuiConfig extends SprykerSecurityMerchantPortalGui +{ + /** + * @var bool + */ + protected const MERCHANT_PORTAL_SECURITY_BLOCKER_ENABLED = true; +} +``` + +### 4) Set up behavior + +Set up the following behaviors. + +#### Integrate the following plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------| +| ZedMerchantUserSecurityPlugin | Sets security firewalls, such as rules and handlers, for Marketplace users. | | Spryker\Zed\SecurityMerchantPortalGui\Communication\Plugin\Security | +| BooleanToStringTwigPlugin | Adds a Twig function for converting boolean to string. | | Spryker\Zed\ZedUi\Communication\Plugin\Twig | +| ZedUiNavigationTwigPlugin | Adds a Twig function for rendering navigation using web components. | | Spryker\Zed\ZedUi\Communication\Plugin | +| MerchantNavigationTypeTwigPlugin | Adds `mainMerchantNavigationType` and `secondaryMerchantNavigationType` Twig global variables. | | Spryker\Zed\MerchantPortalApplication\Communication\Plugin\Twig | +| GuiTableApplicationPlugin | Enables the GuiTable infrastructure for the Back Office. | | Spryker\Zed\GuiTable\Communication\Plugin\Application | +| GuiTableConfigurationTwigPlugin | Adds a Twig function for rendering `GuiTableConfiguration` for the `GuiTable` web component. | | Spryker\Zed\GuiTable\Communication\Plugin\Twig | +| MerchantUserSecurityTokenUpdateMerchantUserPostChangePlugin | Rewrites the Symfony security token for merchant users with `MerchantUser` and without `IS_IMPERSONATOR` roles granted. | | Spryker\Zed\SecurityMerchantPortalGui\Communication\Plugin\UserMerchantPortalGui | +| MerchantPortalConfigurationAclEntityMetadataConfigExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with event behavior composite data. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\AclEntity | +| MerchantAclEntitiesMerchantPostCreatePlugin | Creates an ACL group, ACL role, ACL rules, ACL entity rules, and ACL entity segment for a provided merchant. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\Merchant | +| MerchantUserAclEntitiesMerchantUserPostCreatePlugin | Creates an ACL group, ACL role, ACL rules, ACL entity rules, and ACL entity segment for a provided merchant user. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\MerchantUser | +| AclMerchantPortalMerchantUserRoleFilterPreConditionPlugin | Checks if Symfony security authentication roles should be filtered out. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\MerchantUser | +| MerchantUserUserRoleFilterPlugin | Filters `ROLE_BACK_OFFICE_USER` to prevent a merchant user from logging into the Back Office. | | Spryker\Zed\MerchantUser\Communication\Plugin\SecurityGui | +| ProductViewerForOfferCreationAclInstallerPlugin | Provides `ProductViewerForOfferCreation` roles with rules and groups to create on installation. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\MerchantUser | +| AclGroupMerchantUserLoginRestrictionPlugin | Checks if the merchant user login is restricted. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\SecurityMerchantPortalGui | +| MailMerchantUserPasswordResetRequestStrategyPlugin | Enables reset password functionality for merchant users. | | Spryker\Zed\MerchantUserPasswordResetMail\Communication\Plugin\UserPasswordReset | +| MerchantUserPasswordResetMailTypeBuilderPlugin | Builds the MailTransfer for the merchant password restore email type. | | Spryker\Zed\MerchantUserPasswordResetMail\Communication\Plugin\Mail | + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new ZedUiNavigationTwigPlugin(), + new BooleanToStringTwigPlugin(), + new GuiTableConfigurationTwigPlugin(), + new MerchantNavigationTypeTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Application/ApplicationDependencyProvider.php** + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new GuiTableApplicationPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ZedMerchantUserSecurityPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/UserPasswordReset/UserPasswordResetDependencyProvider.php** + +```php +extend(static::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection + ->add(new MerchantUserPasswordResetMailTypePlugin()); + + return $mailCollection; + }); + + return $container; + } +} +``` + +**src/Pyz/Zed/SecurityGui/SecurityGuiDependencyProvider.php** + +```php + + */ + protected function getUserRoleFilterPlugins(): array + { + return [ + new MerchantUserUserRoleFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that merchant users and users whose ACL group doesn't have a Back Office allowed ACL group reference can't log into the Back Office. + +{% endinfo_block %} + +**src/Pyz/Zed/UserMerchantPortalGui/UserMerchantPortalGuiDependencyProvider.php** + +```php + + */ + public function getMerchantUserPostChangePlugins(): array + { + return [ + new MerchantUserSecurityTokenUpdateMerchantUserPostChangePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/AclEntity/AclEntityDependencyProvider.php** + +```php + + */ + protected function getAclEntityMetadataCollectionExpanderPlugins(): array + { + return [ + new MerchantPortalConfigurationAclEntityMetadataConfigExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Merchant/MerchantDependencyProvider.php** + +```php + + */ + protected function getMerchantPostCreatePlugins(): array + { + return [ + new MerchantAclEntitiesMerchantPostCreatePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantUser/MerchantUserDependencyProvider.php** + +```php + + */ + protected function getMerchantUserPostCreatePlugins(): array + { + return [ + new MerchantUserAclEntitiesMerchantUserPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantUserExtension\Dependency\Plugin\MerchantUserRoleFilterPreConditionPluginInterface> + */ + protected function getMerchantUserRoleFilterPreConditionPlugins(): array + { + return [ + new AclMerchantPortalMerchantUserRoleFilterPreConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that non-merchant users whose ACL group has a Back Office allowed ACL group reference can log into the Back Office. You can check the reference in `AclMerchantPortalConfig::getBackofficeAllowedAclGroupReferences()`. + +{% endinfo_block %} + +**src/Pyz/Zed/Acl/AclDependencyProvider.php** + +```php + + */ + protected function getAclInstallerPlugins(): array + { + return [ + new ProductViewerForOfferCreationAclInstallerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SecurityMerchantPortalGui/SecurityMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantUserLoginRestrictionPlugins(): array + { + return [ + new AclGroupMerchantUserLoginRestrictionPlugin(), + ]; + } +} +``` + +#### Enable Merchant Portal infrastructural plugins + +1. Enable the following infrastructural plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------| +| SessionApplicationPlugin | Registers a session in `Application`. | | Spryker\Zed\Session\Communication\Plugin\Application | +| TwigApplicationPlugin | Registers Twig in `Application`. | | Spryker\Zed\Twig\Communication\Plugin\Application | +| EventDispatcherApplicationPlugin | Extends `EventDispatcher` with `EventDispatcherExtensionPlugins`. | | Spryker\Zed\EventDispatcher\Communication\Plugin\Application | +| LocaleApplicationPlugin | Adds the `Locale` service. | | Spryker\Zed\Locale\Communication\Plugin\Application | +| TranslatorApplicationPlugin | Adds the `Translator` service. | | Spryker\Zed\Translator\Communication\Plugin\Application | +| MessengerApplicationPlugin | Adds the `Messenger` service to the Container. | | Spryker\Zed\Messenger\Communication\Plugin\Application | +| PropelApplicationPlugin | Initializes `PropelOrm` to be used in Zed. | | Spryker\Zed\Propel\Communication\Plugin\Application | +| MerchantPortalRouterApplicationPlugin | Adds the `Router` service. | | Spryker\Zed\Router\Communication\Plugin\Application | +| HttpApplicationPlugin | Sets the trusted proxies and host. Sets the `cookies` service identifier. Adds `HttpKernel`, `RequestStack`, and `RequestContext` to the container. | | Spryker\Zed\Http\Communication\Plugin\Application | +| ErrorHandlerApplicationPlugin | Register the `Whoops` error handler, which provides a pretty error interface when enabled. | | Spryker\Zed\ErrorHandler\Communication\Plugin\Application | +| FormApplicationPlugin | Adds the `form.factory` service, `form.csrf_provider` service, and the global `FORM_FACTORY` service as an alias for `form.factory`. | | Spryker\Zed\Form\Communication\Plugin\Application | +| ValidatorApplicationPlugin | Adds the `validator` service. | | Spryker\Zed\Validator\Communication\Plugin\Application | +| GuiTableApplicationPlugin | Enables the `GuiTable` infrastructure for Zed. | | Spryker\Zed\GuiTable\Communication\Plugin\Application | +| ZedSecurityApplicationPlugin | Adds security applications to `Application`. | | Spryker\Zed\Security\Communication\Plugin\Application | +| ZedUiApplicationPlugin | Adds the `SERVICE_ZED_UI_FACTORY` service. | | Spryker\Zed\ZedUi\Communication\Plugin\Application | +| AclEntityApplicationPlugin | Enables ACL for the whole `Application`. | | Spryker\Zed\AclEntity\Communication\Plugin\Application | + +
    src/Pyz/Zed/MerchantPortalApplication/MerchantPortalApplicationDependencyProvider.php + +```php + + */ + protected function getMerchantPortalApplicationPlugins(): array + { + return [ + new SessionApplicationPlugin(), + new TwigApplicationPlugin(), + new EventDispatcherApplicationPlugin(), + new LocaleApplicationPlugin(), + new TranslatorApplicationPlugin(), + new MessengerApplicationPlugin(), + new PropelApplicationPlugin(), + new MerchantPortalRouterApplicationPlugin(), + new HttpApplicationPlugin(), + new ErrorHandlerApplicationPlugin(), + new FormApplicationPlugin(), + new ValidatorApplicationPlugin(), + new GuiTableApplicationPlugin(), + new ZedSecurityApplicationPlugin(), + new ZedUiApplicationPlugin(), + new AclEntityApplicationPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/MerchantPortalApplication/Communication/Bootstrap/MerchantPortalBootstrap.php** + +```php + + */ + protected function getMerchantPortalRouterPlugins(): array + { + return [ + new MerchantPortalRouterPlugin() + ]; + } +} +``` + +2. Open access to the Merchant Portal login page by default: + +**config/Shared/config_default.php** + +```php + 'security-merchant-portal-gui', + 'controller' => 'login', + 'action' => '*', + 'type' => '*', + ], +]; +``` + +### 3) Add Merchant Portal translations + + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +mail.merchant.restore_password.subject,Neues Passwort für Ihren Spryker Merchant Portal Account,de_DE +mail.merchant.restore_password.subject,New password for your Spryker Merchant Portal account,en_US +mail.merchant.restore_password.text,"""Es wurde ein neues Passwort für Ihren Spryker Merchant Portal Account angefordert. Wenn Sie nicht um um eine Neueinrichtung des Passworts gebeten haben, ignorieren Sie bitte diese Email. Klicken Sie auf den folgedenen Link, um Ihr Passwort zu ändern:""",de_DE +mail.merchant.restore_password.text,"""Somebody has requested a new password for your Spryker Merchant Portal account. If it's not you, just ignore this email. If it's you, follow the link bellow:""",en_US +mail.merchant.restore_password.label,Passwort ändern,de_DE +mail.merchant.restore_password.label,Change Password,en_US +mail.trans.merchant.restore_password.subtitle,"Somebody has requested a new password for your Spryker Merchant Portal account. If it was not you, ignore this email. If it was you, follow the instructions in the button bellow",en_US +mail.trans.merchant.restore_password.subtitle,"Es wurde ein neues Passwort für dein Merchant Portal-Konto angefordert. Wenn du es nicht warst, kannst du diese E-Mail ignorieren. Wenn du es warst, klicke bitte den Knopf unten an:",de_DE +mail.trans.merchant.restore_password.title,New password for your Spryker Merchant Portal account,en_US +mail.trans.merchant.restore_password.title,Neues Passwort für dein Spryker Merchant Portal-Konto,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +3. Add a console command for warming up the Merchant Portal router cache: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new MerchantPortalRouterCacheWarmUpConsole(), + ]; + + return $commands; + } +} +``` + +**config/install/docker.yml** + +```yaml +env: + NEW_RELIC_ENABLED: 0 + +sections: + build: + router-cache-warmup-merchant-portal: + command: 'vendor/bin/console router:cache:warm-up:merchant-portal' +``` + +### 5) Set up transfer objects + +Generate transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------|-------|---------|-------------------------------------------------------------------------------| +| GuiTableDataRequest | class | Created | src/Generated/Shared/Transfer/GuiTableDataRequestTransfer | +| GuiTableConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableConfigurationTransfer | +| GuiTableColumnConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableColumnConfigurationTransfer | +| GuiTableTitleConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableTitleConfigurationTransfer | +| GuiTableDataSourceConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableDataSourceConfigurationTransfer | +| GuiTableRowActionsConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableRowActionsConfigurationTransfer | +| GuiTableBatchActionsConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableBatchActionsConfigurationTransfer | +| GuiTablePaginationConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTablePaginationConfigurationTransfer | +| GuiTableSearchConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableSearchConfigurationTransfer | +| GuiTableFiltersConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableFiltersConfigurationTransfer | +| GuiTableItemSelectionConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableItemSelectionConfigurationTransfer | +| GuiTableSyncStateUrlConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableSyncStateUrlConfigurationTransfer | +| GuiTableEditableConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableEditableConfigurationTransfer | +| GuiTableEditableCreateConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableEditableCreateConfigurationTransfer | +| GuiTableEditableUpdateConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableEditableUpdateConfigurationTransfer | +| GuiTableEditableButton | class | Created | src/Generated/Shared/Transfer/GuiTableEditableButtonTransfer | +| GuiTableEditableUrl | class | Created | src/Generated/Shared/Transfer/GuiTableEditableUrlTransfer | +| GuiTableEditableInitialData | class | Created | src/Generated/Shared/Transfer/GuiTableEditableInitialDataTransfer | +| GuiTableEditableDataError | class | Created | src/Generated/Shared/Transfer/GuiTableEditableDataErrorTransfer | +| GuiTableDataResponse | class | Created | src/Generated/Shared/Transfer/GuiTableDataResponseTransfer | +| GuiTableRowDataResponse | class | Created | src/Generated/Shared/Transfer/GuiTableRowDataResponseTransfer | +| GuiTableDataResponsePayload | class | Created | src/Generated/Shared/Transfer/GuiTableDataResponsePayloadTransfer | +| SelectGuiTableFilterTypeOptions | class | Created | src/Generated/Shared/Transfer/SelectGuiTableFilterTypeOptionsTransfer | +| OptionSelectGuiTableFilterTypeOptions | class | Created | src/Generated/Shared/Transfer/OptionSelectGuiTableFilterTypeOptionsTransfer | +| GuiTableFilter | class | Created | src/Generated/Shared/Transfer/GuiTableFilterTransfer | +| GuiTableRowAction | class | Created | src/Generated/Shared/Transfer/GuiTableRowActionTransfer | +| GuiTableRowActionOptions | class | Created | src/Generated/Shared/Transfer/GuiTableRowActionOptionsTransfer | +| DateRangeGuiTableFilterTypeOptions | class | Created | src/Generated/Shared/Transfer/DateRangeGuiTableFilterTypeOptionsTransfer | +| CriteriaRangeFilter | class | Created | src/Generated/Shared/Transfer/CriteriaRangeFilterTransfer | +| GuiTableBatchAction | class | Created | src/Generated/Shared/Transfer/GuiTableBatchActionTransfer | +| GuiTableBatchActionOptions | class | Created | src/Generated/Shared/Transfer/GuiTableBatchActionOptionsTransfer | +| GuiTableColumnConfiguratorConfiguration | class | Created | src/Generated/Shared/Transfer/GuiTableColumnConfiguratorConfigurationTransfer | +| ZedUiFormResponseAction | class | Created | src/Generated/Shared/Transfer/ZedUiFormResponseActionTransfer | +| Group | class | Created | src/Generated/Shared/Transfer/GroupTransfer | +| Groups | class | Created | src/Generated/Shared/Transfer/GroupsTransfer | +| Role | class | Created | src/Generated/Shared/Transfer/RoleTransfer | +| Roles | class | Created | src/Generated/Shared/Transfer/RolesTransfer | +| Rule | class | Created | src/Generated/Shared/Transfer/RuleTransfer | +| Rules | class | Created | src/Generated/Shared/Transfer/RulesTransfer | +| User | class | Created | src/Generated/Shared/Transfer/UserTransfer | +| AclRoleCriteria | class | Created | src/Generated/Shared/Transfer/AclRoleCriteriaTransfer | +| GroupCriteria | class | Created | src/Generated/Shared/Transfer/GroupCriteriaTransfer | +| NavigationItem | class | Created | src/Generated/Shared/Transfer/NavigationItemTransfer | +| NavigationItemCollection | class | Created | src/Generated/Shared/Transfer/NavigationItemCollectionTransfer | +| AclEntityRule | class | Created | src/Generated/Shared/Transfer/AclEntityRuleTransfer | +| UserCollection | class | Created | src/Generated/Shared/Transfer/UserCollectionTransfer | +| UserConditions | class | Created | src/Generated/Shared/Transfer/UserConditionsTransfer | +| UserCriteria | class | Created | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| AclEntityMetadataConfig | class | Created | src/Generated/Shared/Transfer/AclEntityMetadataConfigTransfer | +| AclEntitySegment | class | Created | src/Generated/Shared/Transfer/AclEntitySegmentTransfer | +| AclEntitySegmentRequest | class | Created | src/Generated/Shared/Transfer/AclEntitySegmentRequestTransfer | +| AclEntityRuleRequest | class | Created | src/Generated/Shared/Transfer/AclEntityRuleRequestTransfer | +| AclEntityRule | class | Created | src/Generated/Shared/Transfer/AclEntityRuleTransfer | +| AclEntityRuleCollection | class | Created | src/Generated/Shared/Transfer/AclEntityRuleCollectionTransfer | +| AclEntitySegmentResponse | class | Created | src/Generated/Shared/Transfer/AclEntitySegmentResponseTransfer | +| AclEntitySegmentCriteria | class | Created | src/Generated/Shared/Transfer/AclEntitySegmentCriteriaTransfer | +| AclEntityRuleCriteria | class | Created | src/Generated/Shared/Transfer/AclEntityRuleCriteriaTransfer | +| AclEntityRuleResponse | class | Created | src/Generated/Shared/Transfer/AclEntityRuleResponseTransfer | +| AclEntityMetadata | class | Created | src/Generated/Shared/Transfer/AclEntityMetadataTransfer | +| AclEntityParentMetadata | class | Created | src/Generated/Shared/Transfer/AclEntityParentMetadataTransfer | +| AclEntityParentConnectionMetadata | class | Created | src/Generated/Shared/Transfer/AclEntityParentConnectionMetadataTransfer | +| AclEntityMetadataCollection | class | Created | src/Generated/Shared/Transfer/AclEntityMetadataCollectionTransfer | +| MerchantResponse | class | Created | src/Generated/Shared/Transfer/MerchantResponseTransfer | +| Merchant | class | Created | src/Generated/Shared/Transfer/MerchantTransfer | +| MerchantError | class | Created | src/Generated/Shared/Transfer/MerchantErrorTransfer | +| MerchantUser | class | Created | src/Generated/Shared/Transfer/MerchantUserTransfer | +| MerchantUserCriteria | class | Created | src/Generated/Shared/Transfer/MerchantUserCriteriaTransfer | +| MerchantUserResponse | class | Created | src/Generated/Shared/Transfer/MerchantUserResponseTransfer | +| Message | class | Created | src/Generated/Shared/Transfer/MessageTransfer | +| MerchantCriteria | class | Created | src/Generated/Shared/Transfer/MerchantCriteriaTransfer | +| UserPasswordResetRequest | class | Created | src/Generated/Shared/Transfer/UserPasswordResetRequestTransfer | +| Mail | class | Created | src/Generated/Shared/Transfer/MailTransfer | +| MailRecipient | class | Created | src/Generated/Shared/Transfer/MailRecipientTransfer | +| MailTemplate | class | Created | src/Generated/Shared/Transfer/MailTemplateTransfer | +| MailSender | class | Created | src/Generated/Shared/Transfer/MailSenderTransfer | +| Navigation | class | Created | src/Generated/Shared/Transfer/NavigationTransfer | +| NavigationCriteria | class | Created | src/Generated/Shared/Transfer/NavigationCriteriaTransfer | +| DuplicateNavigation | class | Created | src/Generated/Shared/Transfer/DuplicateNavigationTransfer | +| NavigationResponse | class | Created | src/Generated/Shared/Transfer/NavigationResponseTransfer | +| NavigationError | class | Created | src/Generated/Shared/Transfer/NavigationErrorTransfer | +| NavigationNode | class | Created | src/Generated/Shared/Transfer/NavigationNodeTransfer | +| NavigationNodeLocalizedAttributes | class | Created | src/Generated/Shared/Transfer/NavigationNodeLocalizedAttributesTransfer | +| NavigationTree | class | Created | src/Generated/Shared/Transfer/NavigationTreeTransfer | +| NavigationTreeNode | class | Created | src/Generated/Shared/Transfer/NavigationTreeNodeTransfer | +| Url | class | Created | src/Generated/Shared/Transfer/UrlTransfer | +| Locale | class | Created | src/Generated/Shared/Transfer/LocaleTransfer | +| LocaleCriteria | class | Created | src/Generated/Shared/Transfer/LocaleCriteriaTransfer | +| LocaleConditions | class | Created | src/Generated/Shared/Transfer/LocaleConditionsTransfer | +| SecurityBlockerConfigurationSettings | class | Created | src/Generated/Shared/Transfer/SecurityBlockerConfigurationSettingsTransfer | +| ZedUiFormResponse | class | Created | src/Generated/Shared/Transfer/ZedUiFormResponseTransfer | + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Merchant Portal Core feature frontend. + +### Prerequisites + +Environment requirements: + +- [Node.js](https://nodejs.org/en/download/package-manager) version 18 or higher. +- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) version 9 or higher. + +Application requirements: if you want to integrate the builder, update the following packages. + +| NAME | VERSION | +|-----------------------------|-----------| +| Discount | >= 9.7.4 | +| Gui | >= 3.30.2 | +| Product Relation | >= 2.4.3 | + +### 1) Install the required modules + +```bash +composer require spryker/dashboard-merchant-portal-gui:"^2.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------------|--------------------------------------------------------| +| DashboardMerchantPortalGui | vendor/spryker/dashboard-merchant-portal-gui | +| DashboardMerchantPortalGuiExtension | vendor/spryker/dashboard-merchant-portal-gui-extension | + +{% endinfo_block %} + + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------|--------|---------|---------------------------------------------------------------------| +| MerchantDashboardCard | object | Created | src/Generated/Shared/Transfer/MerchantDashboardCardTransfer | +| MerchantDashboardActionButton | object | Created | src/Generated/Shared/Transfer/MerchantDashboardActionButtonTransfer | +| MerchantDashboardCard | class | created | src/Generated/Shared/Transfer/MerchantDashboardCardTransfer | +| MerchantDashboardActionButton | class | created | src/Generated/Shared/Transfer/MerchantDashboardActionButtonTransfer | +| Mail | class | created | src/Generated/Shared/Transfer/MailTransfer | +| UserPasswordResetRequest | class | created | src/Generated/Shared/Transfer/UserPasswordResetRequestTransfer | +| User | class | created | src/Generated/Shared/Transfer/UserTransfer | +| MerchantUser | class | created | src/Generated/Shared/Transfer/MerchantUserTransfer | +| MerchantUserCriteria | class | created | src/Generated/Shared/Transfer/MerchantUserCriteriaTransfer | + +{% endinfo_block %} + +### 3) Build the navigation cache + + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure the Merchant Portal navigation has the **Dashboard** menu. + +{% endinfo_block %} + +### 4) Set up marketplace builder configs + +1. Add the following files to the root folder: + +```bash +wget -O angular.json https://raw.githubusercontent.com/spryker-shop/suite/master/angular.json +wget -O nx.json https://raw.githubusercontent.com/spryker-shop/suite/master/nx.json +wget -O .browserslistrc https://raw.githubusercontent.com/spryker-shop/suite/master/.browserslistrc +wget -O .npmrc https://raw.githubusercontent.com/spryker-shop/suite/master/.npmrc +wget -O .stylelintrc.mp.js https://raw.githubusercontent.com/spryker-shop/suite/master/.stylelintrc.mp.js +``` + +2. Rename the default `tsconfig.json` to `tsconfig.base.json` and create `tsconfig.yves.json` and `tsconfig.mp.json`: + +```bash +mv tsconfig.json tsconfig.base.json +wget -O tsconfig.yves.json https://raw.githubusercontent.com/spryker-shop/suite/master/tsconfig.yves.json +wget -O tsconfig.mp.json https://raw.githubusercontent.com/spryker-shop/suite/master/tsconfig.mp.json +wget -O tsconfig.json https://raw.githubusercontent.com/spryker-shop/suite/master/tsconfig.json +``` + +3. In `tslint.json`, add the following paths to exclude: +- `src/Pyz/Zed/*/Presentation/Components/**` +- `vendor/**` +- `**/node_modules/**` + +4. Add the `.eslintrc.mp.json` file: + +```json +wget -O .eslintrc.mp.json https://raw.githubusercontent.com/spryker-shop/suite/master/.eslintrc.mp.json +``` + +5. Install npm dependencies: + +```bash +npm i @angular/animations@~15.0.3 @angular/cdk@~15.0.3 @angular/common@~15.0.3 @angular/compiler@~15.0.3 @angular/core@~15.0.3 @angular/elements@~15.0.3 @angular/forms@~15.0.3 @angular/platform-browser@~15.0.3 @angular/platform-browser-dynamic@~15.0.3 @angular/router@~15.0.3 rxjs@~7.5.7 zone.js@~0.12.0 +``` + +6. Install npm dev dependencies: + +```bash +npm i -D @angular-builders/custom-webpack@~15.0.0 @angular-devkit/build-angular@~15.0.3 @angular-eslint/builder@~15.0.0 @angular-eslint/eslint-plugin@~15.0.0 @angular-eslint/eslint-plugin-template@~15.0.0 @angular-eslint/schematics@~15.0.0 @angular-eslint/template-parser@~15.0.0 @angular/cli@~15.0.3 @angular/compiler-cli@~15.0.3 @angular/language-service@~15.0.3 @babel/plugin-proposal-class-properties@~7.17.12 @babel/plugin-transform-runtime@~7.17.12 @babel/preset-typescript@~7.17.12 @jsdevtools/file-path-filter@~3.0.2 @nrwl/cli@~15.0.7 @nrwl/jest@~15.0.7 @nrwl/workspace@~15.0.7 @spryker/oryx-for-zed@~3.0.0 @types/jest@~28.1.1 @types/node@~14.14.33 @types/webpack@~5.28.0 @typescript-eslint/eslint-plugin@~5.44.0 @@typescript-eslint/parser@~5.44.0 eslint@~8.28.0 eslint-plugin-deprecation@~1.3.3 jest@~28.1.3 jest-environment-jsdom@~28.1.1 jest-preset-angular@~12.2.3 nx@~15.0.7 postcss@~8.4.20 npm-run-all@~4.1.5 rimraf@~3.0.2 ts-jest@~28.0.8 ts-node@~10.9.1 tslib@~2.0.0 typescript@~4.8.4 webpack@~5.74.0 webpack-merge@~5.8.0 +``` + +7. Update `package.json`: + +**package.json** + +```json +{ + "workspaces": [ + "vendor/spryker/*", + "vendor/spryker/*/assets/Zed" + ], + "scripts": { + "mp:build": "ng build", + "mp:build:watch": "ng build --watch", + "mp:build:production": "ng build --configuration production", + "mp:stylelint": "node ./frontend/merchant-portal/stylelint", + "mp:lint": "ng lint", + "mp:test": "ng test", + "mp:clean": "run-s mp:clean:*", + "mp:clean:dist": "rimraf public/MerchantPortal/assets/js", + "mp:update:paths": "node ./frontend/merchant-portal/update-config-paths", + "postinstall": "npm run mp:update:paths" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } +} +``` + +8. For Yves in `frontend/settings.js`, update the `globalSettings.paths` object to point to the updated `tsconfig`: + +**frontend/settings.js** + +```js +const globalSettings = { + ... + paths: { + tsConfig: './tsconfig.yves.json', + ... + } +}; +``` + +9. From the project's root, install Angular CLI: + +```bash +npm i -g @angular/cli@15.0.3 +``` + +{% info_block warningBox "Verification" %} + +Run `ng --version` and make sure the version is 15.0.3. + +{% endinfo_block %} + + +10. Install project dependencies: + +```bash +npm install +``` + +{% info_block infoBox "Troubleshooting" %} + +- Error: `Missing write access to node_modules/mp-profile` +- Solution: Delete the `node_modules/mp-profile` file and create a *folder* with the same name. + +{% endinfo_block %} + + +{% info_block warningBox "Verification" %} + +Check if the marketplace packages are located in the `node_modules/@spryker` folder—for example, `utils`. + +{% endinfo_block %} + + +### 5) Install the marketplace builder + +Add the `merchant-portal` folder and builder files: + +```bash +mkdir frontend/merchant-portal +wget -O frontend/merchant-portal/entry-points.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/entry-points.js +wget -O frontend/merchant-portal/html-transform.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/html-transform.js +wget -O frontend/merchant-portal/jest.config.ts https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/jest.config.ts +wget -O frontend/merchant-portal/jest.preset.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/jest.preset.js +wget -O frontend/merchant-portal/mp-paths.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/mp-paths.js +wget -O frontend/merchant-portal/stylelint.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/stylelint.js +wget -O frontend/merchant-portal/test-setup.ts https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/test-setup.ts +wget -O frontend/merchant-portal/tsconfig.spec.json https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/tsconfig.spec.json +wget -O frontend/merchant-portal/update-config-paths.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/update-config-paths.js +wget -O frontend/merchant-portal/utils.js https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/utils.js +wget -O frontend/merchant-portal/webpack.config.ts https://raw.githubusercontent.com/spryker-shop/suite/master/frontend/merchant-portal/webpack.config.ts +``` + +### 6) Add files for the Merchant Portal entry point + + +**public/MerchantPortal/index.php** + +```php +initialize(); + +$bootstrap = new MerchantPortalBootstrap(); +$bootstrap + ->boot() + ->run(); +``` + +**public/MerchantPortal/maintenance/index.html** + +```html + + + + Spryker Merchant Portal - Maintenance + + + + + + + +
    +
    +
    +                PAGE UNDER CONSTRUCTION!
    +
    +                Come back in a few minutes...
    +                
    +
    +
    + + +``` + +**public/MerchantPortal/maintenance/maintenance.php** + +```php + + + + + ZedUi + + + + + +``` + +**src/Pyz/Zed/ZedUi/Presentation/Components/main.ts** + +```ts +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((error) => console.error(error)); +``` + +**src/Pyz/Zed/ZedUi/Presentation/Components/polyfills.ts** + +```ts +import '@mp/polyfills'; +``` + +{% info_block warningBox "Verification" %} + +Build the Merchant Portal: + +```shell +npm run mp:build +``` + +If the regular build doesn't work, try running a full rebuild: + +```bash +rm -rf node_modules && npm cache clean --force && npm install && npm run mp:build +``` + +{% endinfo_block %} + +### 6) Adjust deployment configs + +To configure the deployment configuration to automatically install and build the Merchant Portal, change frontend dependencies and installation commands in the needed deployment file: + +1. Remove Yves dependency installation commands: `dependencies-install` and `yves-isntall-dependencies`. +2. Add the following console commands: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new MerchantPortalBuildFrontendConsole(), + ]; + + return $commands; + } +} +``` + +3. Add the Merchant Portal build commands: + +- build-static-production: + +```yaml +merchant-portal-build-frontend: + command: 'vendor/bin/console frontend:mp:build -e production' + timeout: 1600 +``` + +- build-static-development: + +```yaml +merchant-portal-build-frontend: + command: 'vendor/bin/console frontend:mp:build' + timeout: 1600 +``` + +### 7) Set up ACL behavior + +Each feature and module with a persistent relation to the merchant must expand the ACL configuration. Based on your built-in features, integrate the required plugins. + +#### Integrate ACL rule plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------------------------------| +| DashboardMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `dashboard-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\DashboardMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| MerchantProfileMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `merchant-profile-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\MerchantProfileMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| ProductOfferMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `product-offer-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\ProductOfferMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| ProductMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `product-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\ProductMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| SalesMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `sales-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\SalesMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| DummyMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `dummy-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\DummyMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| PriceProductMerchantRelationshipMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `price-product-merchant-relationship-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\PriceProductMerchantRelationshipMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| SecurityMerchantPortalGuiMerchantUserAclRuleExpanderPlugin | Adds `security-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\SecurityMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| UserMerchantPortalGuiMerchantUserAclRuleExpanderPlugin | Adds `user-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\UserMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| MerchantRelationshipMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `merchant-relationship-merchant-portal-gui` to list of `AclRules`. | | Spryker\Zed\MerchantRelationshipMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| MerchantRelationRequestMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `merchant-relation-request-merchant-portal-gui` to list of `AclRules`. | | Spryker\Zed\MerchantRelationRequestMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| CommentMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `comment-merchant-portal-gui` to list of `AclRules`. | | Spryker\Zed\CommentMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| MerchantUserMerchantUserAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with the merchant user composite data. | | Spryker\Zed\MerchantUser\Communication\Plugin\AclMerchantPortal | + +#### Integrate ACL entity rule expander plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------|----------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------| +| ProductOfferMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with product offer composite data. | | Spryker\Zed\ProductOffer\Communication\Plugin\AclMerchantPortal | +| ProductMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with product composite data. | | Spryker\Zed\Product\Communication\Plugin\AclMerchantPortal | +| MerchantMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with merchant composite data. | | Spryker\Zed\Merchant\Communication\Plugin\AclMerchantPortal | +| MerchantSalesOrderMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with merchant sales order composite data. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\AclMerchantPortal | +| MerchantProductMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with merchant product composite data. | | Spryker\Zed\MerchantProduct\Communication\Plugin\AclMerchantPortal | +| CurrencyMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with currency composite data. | | Spryker\Zed\Currency\Communication\Plugin\AclMerchantPortal | +| CountryMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with country composite data. | | Spryker\Zed\Country\Communication\Plugin\AclMerchantPortal | +| StoreMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with store composite data. | | Spryker\Zed\Store\Communication\Plugin\AclMerchantPortal | +| LocaleMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with locale composite data. | | Spryker\Zed\Locale\Communication\Plugin\AclMerchantPortal | +| SalesMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with sales composite data. | | Spryker\Zed\Sales\Communication\Plugin\AclMerchantPortal | +| PriceProductMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with price product composite data. | | Spryker\Zed\PriceProduct\Communication\Plugin\AclMerchantPortal | +| ProductImageMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with product image composite data. | | Spryker\Zed\ProductImage\Communication\Plugin\AclMerchantPortal | +| OmsProductOfferReservationMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with OMS product offer reservation composite data. | | Spryker\Zed\OmsProductOfferReservation\Communication\Plugin\AclMerchantPortal | +| OmsMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with OMS composite data. | | Spryker\Zed\Oms\Communication\Plugin\AclMerchantPortal | +| UrlMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with URL composite data. | | Spryker\Zed\Url\Communication\Plugin\AclMerchantPortal | +| RefundMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with refund composite data. | | Spryker\Zed\Refund\Communication\Plugin\AclMerchantPortal | +| CustomerMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with customer composite data. | | Spryker\Zed\Customer\Communication\Plugin\AclMerchantPortal | +| DiscountMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with discount composite data. | | Spryker\Zed\Discount\Communication\Plugin\AclMerchantPortal | +| DiscountPromotionMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with discount promotion composite data. | | Spryker\Zed\DiscountPromotion\Communication\Plugin\AclMerchantPortal | +| MerchantRelationRequestMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with merchant relation request composite data. | | Spryker\Zed\MerchantRelationRequest\Communication\Plugin\AclMerchantPortal | +| MerchantRelationshipMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with merchant relationship composite data. | | Spryker\Zed\MerchantRelationship\Communication\Plugin\AclMerchantPortal | +| CompanyUnitAddressMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with company unit address composite data. | | Spryker\Zed\CompanyUnitAddress\Communication\Plugin\AclMerchantPortal | +| CompanyBusinessUnitMerchantAclEntityRuleExpanderPlugin | Expands a set of `AclEntityRule` transfer objects with company business unit composite data. | | Spryker\Zed\CompanyBusinessUnit\Communication\Plugin\AclMerchantPortal | + +#### Integrate ACL configuration plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------------------|----------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------| +| AclEntityAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\AclEntity\Communication\Plugin\AclMerchantPortal | +| AclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\\Communication\Plugin\AclMerchantPortal | +| AvailabilityAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Availability\Communication\Plugin\AclMerchantPortal | +| CategoryAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Category\Communication\Plugin\AclMerchantPortal | +| CategoryImageAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\CategoryImage\Communication\Plugin\AclMerchantPortal | +| CmsBlockAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\CmsBlock\Communication\Plugin\AclMerchantPortal | +| CommentAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Comment\Communication\Plugin\AclMerchantPortal | +| CompanyBusinessUnitAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\CompanyBusinessUnit\Communication\Plugin\AclMerchantPortal | +| CompanyUnitAddressAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\CompanyUnitAddress\Communication\Plugin\AclMerchantPortal | +| CompanyBusinessUnitModelAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\CompanyBusinessUnit\Communication\Plugin\AclMerchantPortal | +| CountryAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Country\Communication\Plugin\AclMerchantPortal | +| CurrencyAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Currency\Communication\Plugin\AclMerchantPortal | +| DiscountAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Discount\Communication\Plugin\AclMerchantPortal | +| DiscountPromotionAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\DiscountPromotion\Communication\Plugin\AclMerchantPortal | +| GiftCardAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\GiftCard\Communication\Plugin\AclMerchantPortal | +| GlossaryAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Glossary\Communication\Plugin\AclMerchantPortal | +| LocaleAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Locale\Communication\Plugin\AclMerchantPortal | +| MerchantAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Merchant\Communication\Plugin\AclMerchantPortal | +| MerchantCategoryAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantCategory\Communication\Plugin\AclMerchantPortal | +| MerchantProductAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantProduct\Communication\Plugin\AclMerchantPortal | +| MerchantProductOfferAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantProductOffer\Communication\Plugin\AclMerchantPortal | +| MerchantProfileAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantProfile\Communication\Plugin\AclMerchantPortal | +| MerchantRelationshipModelAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantRelationship\Communication\Plugin\AclMerchantPortal | +| MerchantSalesOrderAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\AclMerchantPortal | +| MerchantStockAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantStock\Communication\Plugin\AclMerchantPortal | +| MerchantUserAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\MerchantUser\Communication\Plugin\AclMerchantPortal | +| OmsAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Oms\Communication\Plugin\AclMerchantPortal | +| OmsProductOfferReservationAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\OmsProductOfferReservation\Communication\Plugin\AclMerchantPortal | +| PaymentAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Payment\Communication\Plugin\AclMerchantPortal | +| PriceProductAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\PriceProduct\Communication\Plugin\AclMerchantPortal | +| PriceProductMerchantRelationshipAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\PriceProductMerchantRelationship\Communication\Plugin\AclMerchantPortal | +| PriceProductOfferAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\PriceProductOffer\Communication\Plugin\AclMerchantPortal | +| ProductAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Product\Communication\Plugin\AclMerchantPortal | +| ProductAttributeAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductAttribute\Communication\Plugin\AclMerchantPortal | +| ProductCategoryAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductCategory\Communication\Plugin\AclMerchantPortal | +| ProductImageAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductImage\Communication\Plugin\AclMerchantPortal | +| ProductOfferAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductOffer\Communication\Plugin\AclMerchantPortal | +| ProductOfferStockAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductOfferStock\Communication\Plugin\AclMerchantPortal | +| ProductOfferValidityAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductOfferValidity\Communication\Plugin\AclMerchantPortal | +| ProductOptionAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductOption\Communication\Plugin\AclMerchantPortal | +| ProductSearchAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductSearch\Communication\Plugin\AclMerchantPortal | +| ProductValidityAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\ProductValidity\Communication\Plugin\AclMerchantPortal | +| RefundAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Refund\Communication\Plugin\AclMerchantPortal | +| SalesAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Sales\Communication\Plugin\AclMerchantPortal | +| SalesInvoiceAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\SalesInvoice\Communication\Plugin\AclMerchantPortal | +| SalesOrderThresholdAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\SalesOrderThreshold\Communication\Plugin\AclMerchantPortal | +| ShipmentAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Shipment\Communication\Plugin\AclMerchantPortal | +| StateMachineAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\StateMachine\Communication\Plugin\AclMerchantPortal | +| StockAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Stock\Communication\Plugin\AclMerchantPortal | +| StoreAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Store\Communication\Plugin\AclMerchantPortal | +| TaxAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Tax\Communication\Plugin\AclMerchantPortal | +| UrlAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\Url\Communication\Plugin\AclMerchantPortal | +| UserPasswordResetAclEntityConfigurationExpanderPlugin | Expands the provided `AclEntityMetadataConfig` transfer object with composite data. | | Spryker\Zed\UserPasswordReset\Communication\Plugin\AclMerchantPortal | + +
    src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php + +```php + + */ + protected function getMerchantAclRuleExpanderPlugins(): array + { + return [ + new DashboardMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new MerchantProfileMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new ProductOfferMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new ProductMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new SalesMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new DummyMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new PriceProductMerchantRelationshipMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new MerchantRelationRequestMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new CommentMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + new MerchantRelationshipMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantAclEntityRuleExpanderPluginInterface> + */ + protected function getMerchantAclEntityRuleExpanderPlugins(): array + { + return [ + new ProductOfferMerchantAclEntityRuleExpanderPlugin(), + new ProductMerchantAclEntityRuleExpanderPlugin(), + new MerchantMerchantAclEntityRuleExpanderPlugin(), + new MerchantSalesOrderMerchantAclEntityRuleExpanderPlugin(), + new MerchantProductMerchantAclEntityRuleExpanderPlugin(), + new CurrencyMerchantAclEntityRuleExpanderPlugin(), + new CountryMerchantAclEntityRuleExpanderPlugin(), + new StoreMerchantAclEntityRuleExpanderPlugin(), + new LocaleMerchantAclEntityRuleExpanderPlugin(), + new SalesMerchantAclEntityRuleExpanderPlugin(), + new PriceProductMerchantAclEntityRuleExpanderPlugin(), + new ProductImageMerchantAclEntityRuleExpanderPlugin(), + new OmsProductOfferReservationMerchantAclEntityRuleExpanderPlugin(), + new OmsMerchantAclEntityRuleExpanderPlugin(), + new UrlMerchantAclEntityRuleExpanderPlugin(), + new RefundMerchantAclEntityRuleExpanderPlugin(), + new CustomerMerchantAclEntityRuleExpanderPlugin(), + new DiscountMerchantAclEntityRuleExpanderPlugin(), + new DiscountPromotionMerchantAclEntityRuleExpanderPlugin(), + new MerchantRelationRequestMerchantAclEntityRuleExpanderPlugin(), + new MerchantRelationshipMerchantAclEntityRuleExpanderPlugin(), + new CompanyUnitAddressMerchantAclEntityRuleExpanderPlugin(), + new CompanyBusinessUnitMerchantAclEntityRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantUserAclRuleExpanderPluginInterface> + */ + protected function getMerchantUserAclRuleExpanderPlugins(): array + { + return [ + new SecurityMerchantPortalGuiMerchantUserAclRuleExpanderPlugin(), + new UserMerchantPortalGuiMerchantUserAclRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\MerchantUserAclEntityRuleExpanderPluginInterface> + */ + protected function getMerchantUserAclEntityRuleExpanderPlugins(): array + { + return [ + new MerchantUserMerchantUserAclEntityRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new AclEntityAclEntityConfigurationExpanderPlugin(), + new AclEntityConfigurationExpanderPlugin(), + new AvailabilityAclEntityConfigurationExpanderPlugin(), + new CategoryAclEntityConfigurationExpanderPlugin(), + new CategoryImageAclEntityConfigurationExpanderPlugin(), + new CmsBlockAclEntityConfigurationExpanderPlugin(), + new CommentAclEntityConfigurationExpanderPlugin(), + new CompanyBusinessUnitAclEntityConfigurationExpanderPlugin(), + new CompanyUnitAddressAclEntityConfigurationExpanderPlugin(), + new CompanyBusinessUnitModelAclEntityConfigurationExpanderPlugin(), + new CountryAclEntityConfigurationExpanderPlugin(), + new CurrencyAclEntityConfigurationExpanderPlugin(), + new DiscountAclEntityConfigurationExpanderPlugin(), + new DiscountPromotionAclEntityConfigurationExpanderPlugin(), + new GiftCardAclEntityConfigurationExpanderPlugin(), + new GlossaryAclEntityConfigurationExpanderPlugin(), + new LocaleAclEntityConfigurationExpanderPlugin(), + new MerchantAclEntityConfigurationExpanderPlugin(), + new MerchantCategoryAclEntityConfigurationExpanderPlugin(), + new MerchantProductAclEntityConfigurationExpanderPlugin(), + new MerchantProductOfferAclEntityConfigurationExpanderPlugin(), + new MerchantProfileAclEntityConfigurationExpanderPlugin(), + new MerchantRelationshipModelAclEntityConfigurationExpanderPlugin(), + new MerchantSalesOrderAclEntityConfigurationExpanderPlugin(), + new MerchantStockAclEntityConfigurationExpanderPlugin(), + new MerchantUserAclEntityConfigurationExpanderPlugin(), + new OmsAclEntityConfigurationExpanderPlugin(), + new OmsProductOfferReservationAclEntityConfigurationExpanderPlugin(), + new PaymentAclEntityConfigurationExpanderPlugin(), + new PriceProductAclEntityConfigurationExpanderPlugin(), + new PriceProductMerchantRelationshipAclEntityConfigurationExpanderPlugin(), + new PriceProductOfferAclEntityConfigurationExpanderPlugin(), + new ProductAclEntityConfigurationExpanderPlugin(), + new ProductAttributeAclEntityConfigurationExpanderPlugin(), + new ProductCategoryAclEntityConfigurationExpanderPlugin(), + new ProductImageAclEntityConfigurationExpanderPlugin(), + new ProductOfferAclEntityConfigurationExpanderPlugin(), + new ProductOfferStockAclEntityConfigurationExpanderPlugin(), + new ProductOfferValidityAclEntityConfigurationExpanderPlugin(), + new ProductOptionAclEntityConfigurationExpanderPlugin(), + new ProductSearchAclEntityConfigurationExpanderPlugin(), + new ProductValidityAclEntityConfigurationExpanderPlugin(), + new RefundAclEntityConfigurationExpanderPlugin(), + new SalesAclEntityConfigurationExpanderPlugin(), + new SalesInvoiceAclEntityConfigurationExpanderPlugin(), + new SalesOrderThresholdAclEntityConfigurationExpanderPlugin(), + new ShipmentAclEntityConfigurationExpanderPlugin(), + new StateMachineAclEntityConfigurationExpanderPlugin(), + new StockAclEntityConfigurationExpanderPlugin(), + new StoreAclEntityConfigurationExpanderPlugin(), + new TaxAclEntityConfigurationExpanderPlugin(), + new UrlAclEntityConfigurationExpanderPlugin(), + new UserPasswordResetAclEntityConfigurationExpanderPlugin(), + new MerchantRelationRequestAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Verify that all propel-related entities with the merchant have the allowed or restricted access level according to the ACL configuration. + +{% endinfo_block %} + +## Adjust environment infrastructure + +{% info_block warningBox "Merchant Portal security" %} + +The Merchant Portal should be exposed separately from the Back Office. The Merchant Portal *must not have* OS, DNS name, VirtualHost settings, FileSystem, and service credentials shared with the Back Office. + +{% endinfo_block %} + +To adjust environment infrastructure, take the following steps. + + +### 1) Set up a docker container for the Merchant Portal + +- `MerchantPortal` *must be* placed into its own private subnet and *must have* access to the following: + - Primary database + - Message broker + +- `MerchantPortal` *must not have* access to the following: + - Search and Storage + - Gateway + - Scheduler + +- To set up a docker container, update the needed deploy file. Example: + +
    + deploy.dev.yml + +```yaml +... +image: + ... + node: + version: 18 + npm: 9 +... +groups: + EU: + region: EU + applications: + merchant_portal_eu: + application: merchant-portal + endpoints: + mp.de.spryker.local: + entry-point: MerchantPortal + store: DE + primal: true + services: + session: + namespace: 7 + mp.at.spryker.local: + entry-point: MerchantPortal + store: AT + services: + session: + namespace: 8 + US: + region: US + applications: + merchant_portal_us: + application: merchant-portal + endpoints: + mp.us.spryker.local: + entry-point: MerchantPortal + store: US + services: + session: + namespace: 9 +``` + +
    + +### 2) Create a database user for the Merchant Portal + +- Grant only default CRUD operations: `INSERT`, `DELETE`, `UPDATE`, and `SELECT`. +- Don't grant `ALL PRIVILEGES`, `GRANT OPTION`, `DROP`, `CREATE`, and other admin-related grants. + +Create a user for a MySQL database: + +```mysql +CREATE USER 'merchantportal'@'localhost' IDENTIFIED BY '{your_merchantportal_password}'; // Make sure to change the password +GRANT SELECT, INSERT, UPDATE, DELETE ON your_app_schema.* TO 'merchantportal'@'localhost'; +FLUSH PRIVILEGES; +``` + +### 3) Create Nginx web server configuration + +1. Add Nginx configuration. Example: + +**/etc/nginx/merchant-portal.conf** + +```text +server { + # { Your virtual host settings } + + # Allow /assets/js/mp assets to be served only + location ~ (/assets/js/mp|/favicon.ico|/robots.txt) { + access_log off; + expires 30d; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + try_files $uri =404; + } + + # Allow /marchant-portal-gui pages to be served only + location ~ ^/[a-z-]+-merchant-portal-gui { + add_header X-Server $hostname; + fastcgi_pass { YOUR_FASTCGI_PASS }; + fastcgi_index index.php; + include /etc/nginx/fastcgi_params; + fastcgi_param SCRIPT_NAME /index.php; + fastcgi_param APPLICATION_ENV $application_env; + fastcgi_param APPLICATION_STORE $application_store; + fastcgi_param SCRIPT_FILENAME $document_root/index.php; + + # Credentials of the newly created DB user. + fastcgi_param SPRYKER_DB_USERNAME merchantportal; + fastcgi_param SPRYKER_DB_PASSWORD '{your_merchantportal_password}'; + + + more_clear_headers 'X-Powered-By' 'X-Store' 'X-Locale' 'X-Env' 'Server'; + } +} +``` + +2. Apply the `config:f`: + +```bash +sudo service nginx reload +``` + +{% info_block warningBox "" %} + +Make sure to use environment variables in `config-default.php`: + +**config/Shared/config_default.php** + +```php +> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'user-merchant-portal-gui', + 'dashboard-merchant-portal-gui', + 'security-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $array = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + + return $installerRules; + } +} +``` + + + +2. Register the modules and infrastructural data: + +```shell +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +Make sure the `user-merchant-portal-gui` rule has been added to the `spy_acl_rule` table. + +{% endinfo_block %} + +### 5) Update navigation + +1. Add the `My Account` and `Logout` sections to Merchant Portal navigation: + +**config/Zed/navigation-secondary-merchant-portal.xml** + +```xml + + + + + My Account + user-merchant-portal-gui + my-account + index + + + + Logout + security-merchant-portal-gui + logout + index + danger + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +1. Log into the Merchant Portal. +2. Click the profile picture. +3. In the overlay of the secondary navigation, make sure the **My Account** and **Logout** buttons are displayed. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|-----------------|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| Merchant Portal | ✓ | [Install the Merchant Portal](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-the-merchant-portal.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md new file mode 100644 index 00000000000..3d0a4cc51ad --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md @@ -0,0 +1,211 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Marketplace Merchant Data Import | {{page.release_tag}} | [Install the Marketplace Merchant Data Import feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-data-import:"^2.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------|---------------------------------------------------| +| MerchantProductOfferDataImport | vendor/spryker/merchant-product-offer-data-import | + +{% endinfo_block %} + + +### Add file system configuration + +Add file system configuration for storing merchant files: + +**config/Shared/config_default.php** + +```php +$config[MerchantProductOfferDataImportConstants::FILE_SYSTEM_NAME] = 'merchant-product-offer-data-import-files'; +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'merchant-product-offer-data-import-files' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('S3_MERCHANT_FILES_KEY') ?: '', + 'bucket' => getenv('S3_MERCHANT_FILES_BUCKET') ?: '', + 'secret' => getenv('S3_MERCHANT_FILES_SECRET') ?: '', + 'path' => '/merchant-product-offer-data-import-files', + 'version' => 'latest', + 'region' => getenv('AWS_REGION') ?: 'eu-central-1', + ], +]; +``` + +For local development, you can use the following configuration: + +**config/Shared/config_default-docker.dev.php** + +```php +$config[FileSystemConstants::FILESYSTEM_SERVICE]['merchant-product-offer-data-import-files'] = [ + 'sprykerAdapterClass' => LocalFilesystemBuilderPlugin::class, + 'root' => '/data/data/merchant-product-offer-data-import-files', + 'path' => '', +]; +``` + +## Apply database changes and generate transfer objects + +```bash +vendor/bin/console propel:install +vendor/bin/console transfer:generate +``` + +## Add translations + +Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +## Add configuration + +Enable product offer data import by registering the plugins. + +| PLUGIN | SPECIFICATION | NAMESPACE | +|---------------------------------------------------------------|----------------------------------------------------------------------------------|------------------------------------------------------------------------------------| +| MerchantCombinedProductOfferDataImportPlugin | Adds a type of merchant product offer data import. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImport | +| MerchantCombinedProductOfferMerchantFileValidationPlugin | Validates required headers in merchant combined product offer data import files. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedMerchantProductOfferFileRequestExpanderPlugin | Expands a data import merchant file collection request. | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + 'js/static/merchant-product-offer-data-import/data/files/combined_product_offer.csv', + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + */ + protected function getDashboardCardPlugins(): array + { + return [ + new OffersMerchantDashboardCardPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal, go to **Dashboard**. On the **Dashboard** page, make sure the **Offers** pane is displayed. + +{% endinfo_block %} + + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE |INTEGRATION GUIDE | +| --- | --- | --- | +| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | |[Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md new file mode 100644 index 00000000000..b6617c6faa8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md @@ -0,0 +1,180 @@ + + +This document describes how to install the Marketplace Merchant Portal Product Offer Service Points feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant Portal Product Offer Management | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Marketplace Product Offer + Service Points | {{page.release_tag}} | [Install the Marketplace Product Offer + Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-service-point-merchant-portal-gui:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferServicePointMerchantPortalGui | spryker/product-offer-service-point-merchant-portal-gui | + +{% endinfo_block %} + +## 2) Set up configuration + +Deny Back Office access for Back Office users to the ProductOfferServicePointMerchantPortalGui module. + +**src/Pyz/Zed/Acl/AclConfig.php** + +```php +> + */ + public function getInstallerRules(): array + { + $installerRules = parent::getInstallerRules(); + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'product-offer-service-point-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + return $installerRules; + } +} +``` + +## 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------------------| +| ServiceProductOfferFormExpanderPlugin | Expands `ProductOfferForm` with `Service points` and `Services` fields. | | Spryker\Zed\ProductOfferServicePointMerchantPortalGui\Communication\Plugin\ProductOfferMerchantPortalGui | +| ServiceProductOfferFormViewExpanderPlugin | Expands the `ProductOfferForm` Twig template with the `Services` form section. | | Spryker\Zed\ProductOfferServicePointMerchantPortalGui\Communication\Plugin\ProductOfferMerchantPortalGui | +| ProductOfferServicePointMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds `product-offer-service-point-merchant-portal-gui` to the list of `AclRules`. | | Spryker\Zed\ProductOfferServicePointMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| ServiceAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with service point composite data. | | Spryker\Zed\ServicePoint\Communication\Plugin\AclMerchantPortal | +| ProductOfferServicePointAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with product offer service point composite data. | | Spryker\Zed\ProductOfferServicePoint\Communication\Plugin\AclMerchantPortal | + +**src/Pyz/Zed/ProductOfferMerchantPortalGui/ProductOfferMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getProductOfferFormExpanderPlugins(): array + { + return [ + new ServiceProductOfferFormExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferMerchantPortalGuiExtension\Dependency\Plugin\ProductOfferFormViewExpanderPluginInterface> + */ + protected function getProductOfferFormViewExpanderPlugins(): array + { + return [ + new ServiceProductOfferFormViewExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getMerchantAclRuleExpanderPlugins(): array + { + return [ + new ProductOfferServicePointMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new ServiceAclEntityConfigurationExpanderPlugin(), + new ProductOfferServicePointAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When creating and editing product offers in the Merchant Portal, make sure the following applies: + +- **SERVICE POINT** and **SERVICES** fields are displayed. +- For **SERVICE POINT**, you can search by service points. +- After selecting a service point, you can select services in the **SERVICES** drop-down menu. +- After adding services, you can save the product offer. + + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md new file mode 100644 index 00000000000..dc6d6d465db --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md @@ -0,0 +1,117 @@ + + +This document describes how to install the Marketplace Merchant Portal Product Offer Shipment feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INTEGRATION GUIDE | +|------------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant Portal Product Offer Management | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Product Offer Shipment | {{page.release_tag}} | [Install the Product Offer Shipment feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-shipment-type-merchant-portal-gui:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferShipmentTypeMerchantPortalGui | spryker/product-offer-shipment-type-merchant-portal-gui | + +{% endinfo_block %} + +## 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------------------| +| ShipmentTypeProductOfferFormExpanderPlugin | Expands `ProductOfferForm` with a `shipment-type` form field. | | Spryker\Zed\ProductOfferServicePointMerchantPortalGui\Communication\Plugin\ProductOfferMerchantPortalGui | +| ShipmentTypeProductOfferFormViewExpanderPlugin | Expands the `ProductOfferForm` Twig template with a `shipment-type` form section. | | Spryker\Zed\ProductOfferServicePointMerchantPortalGui\Communication\Plugin\ProductOfferMerchantPortalGui | +| ShipmentTypeAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with shipment type composite data. | | Spryker\Zed\ShipmentType\Communication\Plugin\AclMerchantPortal | +| ProductOfferShipmentTypeAclEntityConfigurationExpanderPlugin | Expands a provided `AclEntityMetadataConfig` transfer object with product offer shipment type composite data. | | Spryker\Zed\ProductOfferShipmentType\Communication\Plugin\AclMerchantPortal | + +**src/Pyz/Zed/ProductOfferMerchantPortalGui/ProductOfferMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getProductOfferFormExpanderPlugins(): array + { + return [ + new ShipmentTypeProductOfferFormExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferMerchantPortalGuiExtension\Dependency\Plugin\ProductOfferFormViewExpanderPluginInterface> + */ + protected function getProductOfferFormViewExpanderPlugins(): array + { + return [ + new ShipmentTypeProductOfferFormViewExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new ShipmentTypeAclEntityConfigurationExpanderPlugin(), + new ProductOfferShipmentTypeAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +When creating and editing product offers in the Merchant Portal, make sure the following applies: + + +1. The **Shipment Types** pane is displayed. +2. All the shipment types in the system are available in the drop-down menu. +3. You can save the product offer after selecting shipment types. + + + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md new file mode 100644 index 00000000000..ed512e4c3a5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md @@ -0,0 +1,78 @@ + + +This document describes how to install the Marketplace Merchant + Product Offer Service Points Availability. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Product Offer Service Points Availability | {{page.release_tag}} | [Install the Product Offer Service Points Availability feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html) | +| Merchant | {{page.release_tag}} | [Install the Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-merchant-product-offer-service-points-availability: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------------------------------|------------------------------------------------------------------------------| +| MerchantProductOfferServicePointAvailability | vendor/spryker/merchant-product-offer-service-point-availability | +| MerchantProductOfferServicePointAvailabilitiesRestApi | vendor/spryker/merchant-product-offer-service-point-availabilities-rest-api | +| MerchantProductOfferServicePointAvailabilityWidget | vendor/spryker-shop/merchant-product-offer-service-point-availability-widget | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +- Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------------------------------|-------|---------|------------------------------------------------------------------------------------------------------| +| ProductOfferServicePointAvailabilityRequestItem | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityRequestItemTransfer | +| ProductOfferServicePointAvailabilityResponseItem | class | created | src/Generated/Shared/Transfer/ProductOfferServicePointAvailabilityResponseItemTransfer | +| RestProductOfferServicePointAvailabilityRequestItemsAttributes | class | created | src/Generated/Shared/Transfer/RestProductOfferServicePointAvailabilityRequestItemsAttributesTransfer | + +- Make sure you can use the `merchantReference` filter when sending requests to the `product-offer-service-point-availabilities` resource. Example: + +`POST https://glue.mysprykershop.com/product-offer-service-point-availabilities` + +```json + { + "data": { + "type": "product-offer-service-point-availabilities", + "attributes": { + "servicePointUuids": [ + "{{service-point-uuid}}" + ], + "serviceTypeUuid": "{{service-type-uuid}}", + "productOfferServicePointAvailabilityRequestItems": [ + { + "productConcreteSku": "{{product-concrete-sku}}", + "productOfferReference": "{{product-offer-reference}}", + "quantity": 1, + "merchantReference": "{{merchant-reference}}" + } + ] + } + } + } +``` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..b8c325dc481 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md @@ -0,0 +1,81 @@ +This document describes how to install the Marketplace Merchant + Promotions & Discounts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-discount-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------|--------------------------------------------| +| MerchantDiscountConnector | vendor/spryker/merchant-discount-connector | + +{% endinfo_block %} + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------|------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------| +| MerchantReferenceDecisionRulePlugin | Defines if a discount can be applied to a cart item with a merchant reference specified. | | Spryker\Zed\MerchantDiscountConnector\Communication\Plugin\Discount | +| MerchantReferenceDiscountableItemCollectorPlugin | Collects cart items with the reference of a merchant to which a discount should be applied. | | Spryker\Zed\MerchantDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new MerchantReferenceDecisionRulePlugin(), + ]); + } + + /** + * @return list<\Spryker\Zed\DiscountExtension\Dependency\Plugin\DiscountableItemCollectorPluginInterface> + */ + protected function getCollectorPlugins(): array + { + return array_merge(parent::getCollectorPlugins(), [ + new MerchantReferenceDiscountableItemCollectorPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `merchant-reference` field. +2. Add a product sold by the merchant you've defined in the discount to cart. + Make sure the discount has been applied. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-feature.md new file mode 100644 index 00000000000..55af898d95e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-feature.md @@ -0,0 +1,1111 @@ + + +This document describes how to install the Marketplace Order Management feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------- | ------ | ---------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| State Machine | {{page.release_tag}} | [State Machine](https://github.com/spryker-feature/state-machine) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | + +## 1) Install required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-order-management:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------- | ------------------- | +| MerchantOms | vendor/spryker/merchant-oms | +| MerchantOmsDataImport | vendor/spryker/merchant-oms-data-import | +| MerchantOmsGui | vendor/spryker/merchant-oms-gui | +| MerchantSalesOrder | vendor/spryker/merchant-sales-order | +| MerchantSalesOrderMerchantUserGui | vendor/spryker/merchant-sales-order-merchant-user-gui | +| MerchantSalesOrderDataExport | vendor/spryker/merchant-sales-order-data-export | +| ProductOfferSales | vendor/spryker/product-offer-sales | +| OmsProductOfferReservation | vendor/spryker/oms-product-offer-reservation | +| ProductOfferReservationGui | vendor/spryker/product-offer-reservation-gui | + +{% endinfo_block %} + +## 2) Set up configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| ------------- | ------------ | ------------ | +| MainMerchantStateMachine | Adds the `MainMerchantStateMachine` configuration. | config/Zed/StateMachine/Merchant/MainMerchantStateMachine.xml | +| MerchantDefaultStateMachine | Adds the `MerchantDefaultStateMachine` configuration. | config/Zed/StateMachine/Merchant/MerchantDefaultStateMachine.xml | +| MarketplacePayment | Adds the `MarketplacePayment` order management system. | config/Zed/oms/MarketplacePayment01.xml | +| Navigation | Adds the navigation configuration. | config/Zed/navigation.xml | +| MerchantOmsConfig | Adds the OMS processes configuration. | src/Pyz/Zed/MerchantOms/MerchantOmsConfig.php | + +
    +src/Pyz/Zed/MerchantOms/MerchantOmsConfig.php + +```php + + */ + public function getMerchantProcessInitialStateMap(): array + { + return array_merge( + parent::getMerchantProcessInitialStateMap(), + [ + static::MAIN_MERCHANT_OMS_PROCESS_NAME => static::MAIN_MERCHANT_STATE_MACHINE_INITIAL_STATE, + ] + ); + } + + /** + * @api + * + * @return array + */ + public function getMerchantOmsProcesses(): array + { + return array_merge( + parent::getMerchantOmsProcesses(), + [ + static::MAIN_MERCHANT_OMS_PROCESS_NAME, + ] + ); + } +} +``` + +
    + +
    +config/Zed/StateMachine/Merchant/MainMerchantStateMachine.xml + +```xml + + + + + + + + + + + + + + + + + + created + new + initiate + + + + new + closed + close + + + + new + canceled + cancel + + + + canceled + closed + close + + + + new + left the merchant location + send to distribution + + + + left the merchant location + arrived at distribution center + confirm at center + + + + arrived at distribution center + shipped + ship + + + + shipped + delivered + deliver + + + + delivered + closed + close + + + + + + + + + + + + + + + + + +``` + +
    + +
    +config/Zed/StateMachine/Merchant/MerchantDefaultStateMachine.xml + +```xml + + + + + + + + + + + + + + + + + created + new + initiate + + + + new + shipped + ship + + + + new + closed + close + + + + new + canceled by merchant + cancel by merchant + + + + canceled by merchant + closed + close + + + + shipped + delivered + deliver + + + + delivered + closed + close + + + + + + + + + + + + + + + +``` + +
    + +
    +config/Zed/oms/MarketplacePayment01.xml + +```xml + + + + + + + + + + + + + + + + + + + new + paid + pay + + + + paid + merchant split pending + + + + paid + paid + + + + merchant split pending + sent to merchant + send to merchant + + + + sent to merchant + canceled + cancel + + + + canceled + refunded + refund + + + + refunded + closed + close + + + + sent to merchant + shipped by merchant + ship by merchant + + + + shipped by merchant + delivered + deliver + + + + delivered + closed + close + + + + + + + + + + + + + + + + +``` + +
    + +**config/Zed/navigation.xml** + +```xml + + + + + + + My orders + merchant-sales-order-merchant-user-gui + index + index + 1 + + + + + + + + Orders + sales + index + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that the Back Office navigation menu has the following items: +- **Marketplace > Orders** +- **Sales > My Orders** + +{% endinfo_block %} + + +## 3) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes trigger events: + +**src/Pyz/Zed/OmsProductOfferReservation/Persistence/Propel/Schema/spy_oms_product_offer_reservation.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --------------- | ---- | ------ | +|spy_merchant.fk_state_machine_process |column |created | +|spy_merchant_sales_order_item.fk_state_machine_item_state | column|created | +|spy_merchant_sales_order | table |created | +|spy_merchant_sales_order_item | table |created | +|spy_merchant_sales_order_totals | table |created | +|spy_sales_expense.merchant_reference | column |created | +|spy_sales_order_item.merchant_reference | column |created | +|spy_sales_order_item.product_offer_reference | column | created | + +Make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --------- | ------- | ----- | ------------- | +| Merchant.fkStateMachineProcess | property | created | src/Generated/Shared/Transfer/MerchantTransfer | +| MerchantOrder | class | created | src/Generated/Shared/Transfer/MerchantOrderTransfer | +| MerchantOrderCriteria | class | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| MerchantOrderCollection | class | created | src/Generated/Shared/Transfer/MerchantOrderCollectionTransfer | +| MerchantOrderItem | class | created | src/Generated/Shared/Transfer/MerchantOrderItemTransfer | +| MerchantOrderItemCriteria | class | created | src/Generated/Shared/Transfer/MerchantOrderItemCriteriaTransfer | +| MerchantOrderItemCollection | class | created | src/Generated/Shared/Transfer/MerchantOrderItemCollectionTransfer | +| MerchantOrderItemResponse | class | created | src/Generated/Shared/Transfer/MerchantOrderItemResponseTransfer | +| MerchantOmsTriggerRequest | class | created | src/Generated/Shared/Transfer/MerchantOmsTriggerRequestTransfer | +| MerchantOmsTriggerResponse | class | created | src/Generated/Shared/Transfer/MerchantOmsTriggerResponseTransfer | +| OmsProductOfferReservationCriteria | class | created| src/Generated/Shared/Transfer/OmsProductOfferReservationCriteriaTransfer | +| OmsProductOfferReservation | class | created| src/Generated/Shared/Transfer/OmsProductOfferReservationTransfer | + +{% endinfo_block %} + +## 4) Add translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +merchant_sales_order.merchant_order_id,Merchant Order ID,en_US +merchant_sales_order.merchant_order_id,Händlerbestell-ID,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +3. Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +## 5) Import data + +1. Prepare your data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_oms_process.csv** + +```csv +merchant_reference,merchant_oms_process_name +MER000001,MainMerchantStateMachine +MER000002,MerchantDefaultStateMachine +MER000006,MerchantDefaultStateMachine +MER000004,MerchantDefaultStateMachine +MER000003,MerchantDefaultStateMachine +MER000007,MerchantDefaultStateMachine +MER000005,MerchantDefaultStateMachine +``` + +|PAREMETER |REQUIRED |TYPE |DATA EXAMPLE | DESCRIPTION | +|---------|---------|---------|---------| ---------| +|merchant_reference | ✓ | string | spryker |String identifier for merchant in the Spryker system. | +|merchant_oms_process_name | ✓ | string | MainMerchantStateMachine | String identifier for the State Machine processes.| + +2. Register the following plugin to enable data import: + +|PLUGIN |SPECIFICATION |PREREQUISITES |NAMESPACE | +|---------|---------|---------|---------| +|MerchantOmsProcessDataImportPlugin | Imports Merchant State Machine data | | Spryker\Zed\MerchantOmsDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + +data/export/config/merchant_order_export_config.yml + +```yaml +version: 1 + +defaults: + filter_criteria: &default_filter_criteria + merchant_order_created_at: + type: between + from: '2020-05-01 00:00:00+09:00' + to: '2021-12-31 23:59:59+09:00' + merchant_order_updated_at: + type: between + from: '2021-01-08 09:00:12+12:00' + to: '2021-12-31 23:59:59+09:00' + +actions: +#Merchant orders data export + - data_entity: merchant-order-expense + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + + - data_entity: merchant-order-expense + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [US] + + - data_entity: merchant-order-item + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + + - data_entity: merchant-order-item + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [US] + + - data_entity: merchant-order + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [DE] + + - data_entity: merchant-order + destination: 'merchants/{merchant_name}/merchant-orders/{data_entity}s_{store_name}_{timestamp}.csv' + filter_criteria: + <<: *default_filter_criteria + store_name: [US] +``` + +
    + +| PARAMETER | | | REQUIRED | POSSIBLE VALUES | DESCRIPTION | +|---|---|---|---|---|---| +| data_entity | | | ✓ | merchant-order merchant-order-item merchant-order-expense | String identifier for data entity that is expected to be exported. | +| filter_criteria | store_name | | ✓ | All existing store names. | An existing store name for the data to filter on. | +| | merchant_order_created_at | from | | Date in format 'YYYY-MM-DD HH:mm:ss HH24:MI' | Date of merchant order creation from which the data needs to be filtered. | +| | | to | | Date in format 'YYYY-MM-DD HH:mm:ss HH24:MI' | Date of merchant order creation up to which the data needs to be filtered. | +| | merchant_order_updated_at | from | | Date in format 'YYYY-MM-DD HH:mm:ss HH24:MI' | Date of merchant order update from which the data needs to be filtered. | +| | | to | | Date in format 'YYYY-MM-DD HH:mm:ss HH24:MI' | Date of merchant order update up to which the data needs to be filtered. | + +2. Register the following plugins to enable data export. + +| PLUGIN | SPECIFICATION | PREREQUISITES| NAMESPACE| +| --------------- | -------------- | ------ | -------------- | +| MerchantOrderDataEntityExporterPlugin | Exports merchant order data. | | Spryker\Zed\MerchantSalesOrderDataExport\Communication\Plugin\DataExport| +| MerchantOrderItemDataEntityExporterPlugin | Exports merchant order items data. | | Spryker\Zed\MerchantSalesOrderDataExport\Communication\Plugin\DataExport | +| MerchantOrderExpenseDataEntityExporterPlugin | Exports merchant order expense data. | |Spryker\Zed\MerchantSalesOrderDataExport\Communication\Plugin\DataExport | + +**src/Pyz/Zed/DataExport/DataExportDependencyProvider.php** + +```php + + */ + protected function getDataEntityExporterPlugins(): array + { + return [ + new MerchantOrderDataEntityExporterPlugin(), + new MerchantOrderItemDataEntityExporterPlugin(), + new MerchantOrderExpenseDataEntityExporterPlugin(), + ]; + } +} +``` + +3. Export data: + +```bash +console data:export --config=merchant_order_export_config.yml +``` + +## 7) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------ | ----------- | ----- | ------------ | +| TriggerEventFromCsvFileConsole | Allows for updating merchant order status via CSV input. | |Spryker\Zed\MerchantOms\Communication\Console | +| EventTriggerMerchantOrderPostCreatePlugin | Triggers new events for newly created merchant orders. | |Spryker\Zed\MerchantOms\Communication\Plugin\MerchantSalesOrder | +| MerchantOmsMerchantOrderExpanderPlugin | Expands merchant order with merchant Oms data, such as item state and manual events. | | Spryker\Zed\MerchantOms\Communication\Plugin\MerchantSalesOrder | +| MerchantStateMachineHandlerPlugin | Wires merchant order updates into the State Machine module. | |Spryker\Zed\MerchantOms\Communication\Plugin\StateMachine | +| MerchantOmsStateOrderItemsTableExpanderPlugin |Expands the order item table with merchant order item state. | | Spryker\Zed\MerchantOmsGui\Communication\Plugin\Sales | +| MerchantOrderDataOrderExpanderPlugin | Expands order data with merchant order details. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\Sales | +| MerchantReferenceOrderItemExpanderPreSavePlugin | Expands order items with merchant references before saving them to the database. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\Sales | +| MerchantReferencesOrderExpanderPlugin | Expands orders with merchant references from order items. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\Sales | +| ProductOfferReferenceOrderItemExpanderPreSavePlugin | Expands order items with product offer references before saving them to the database. | | Spryker\Zed\ProductOfferSales\Communication\Plugin\Sales | +| DeliverMarketplaceOrderItemCommandPlugin | Triggers the `deliver` event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| ShipByMerchantMarketplaceOrderItemCommandPlugin | Triggers the `ship by merchant` event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| CancelMarketplaceOrderItemCommandPlugin | Triggers the `ship by merchant` event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| ShipmentFormTypePlugin | Returns `ShipmentFormType` class name resolution. | | Spryker\Zed\ShipmentGui\Communication\Plugin\Form | +| ItemFormTypePlugin | Returns `ItemFormType` class name resolution. | | Spryker\Zed\ShipmentGui\Communication\Plugin\Form | +| MerchantReferenceShipmentExpenseExpanderPlugin | Expands the expense transfer with merchant references from items. | | Spryker\Zed\MerchantSalesOrder\Communication\Plugin\Shipment | + +**src/Pyz/Zed/MerchantOms/Communication/MerchantOmsCommunicationFactory.php** + +```php +getProvidedDependency(MerchantOmsDependencyProvider::FACADE_OMS); + } +} +``` + +
    +src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + */ + protected function getOrderHydrationPlugins(): array + { + return [ + new MerchantOrderDataOrderExpanderPlugin(), + new MerchantReferencesOrderExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemExpanderPreSavePluginInterface> + */ + protected function getOrderItemExpanderPreSavePlugins(): array + { + return [ + new MerchantReferenceOrderItemExpanderPreSavePlugin(), + new ProductOfferReferenceOrderItemExpanderPreSavePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderItemsTableExpanderPluginInterface> + */ + protected function getOrderItemsTableExpanderPlugins(): array + { + return [ + new MerchantOmsStateOrderItemsTableExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new TriggerEventFromCsvFileConsole(), + ]; + } +} +``` + +
    +src/Pyz/Zed/MerchantSalesOrder/MerchantSalesOrderDependencyProvider.php + +```php + + */ + protected function getMerchantOrderPostCreatePlugins(): array + { + return [ + new EventTriggerMerchantOrderPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\MerchantSalesOrderExtension\Dependency\Plugin\MerchantOrderExpanderPluginInterface> + */ + protected function getMerchantOrderExpanderPlugins(): array + { + return [ + new MerchantOmsMerchantOrderExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/StateMachine/StateMachineDependencyProvider.php** + +```php + + */ + protected function getStateMachineHandlers() + { + return [ + new MerchantStateMachineHandlerPlugin(), + ]; + } +``` + +**src/Pyz/Zed/MerchantOms/Communication/Plugin/Oms/DeliverMarketplaceOrderItemCommandPlugin.php** + +```php + new ShipByMerchantMarketplaceOrderItemCommandPlugin(), + 'MarketplaceOrder/DeliverOrderItem' => new DeliverMarketplaceOrderItemCommandPlugin(), + 'MarketplaceOrder/CancelOrderItem' => new CancelMarketplaceOrderItemCommandPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MerchantSalesOrderMerchantUserGui/MerchantSalesOrderMerchantUserGuiDependencyProvider.php** + +```php + + */ + protected function getShipmentExpenseExpanderPlugins(): array + { + return [ + new MerchantReferenceShipmentExpenseExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantOrderReferenceForItemsWidget::class, + ]; + } + +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: + +- After an order was split, the Merchant State Machine is executed on merchant orders. + +- When retrieving an order in the *Sales* module, it's split by the merchant order and the order state is derived from the Merchant State Machine. + +- After splitting an order into merchant orders, their IDs are displayed on the order details page on the Storefront. + +{% endinfo_block %} + + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE |INTEGRATION GUIDE | +| --- | --- | --- | +| Marketplace Order Management + Order Threshold | |[Install the Marketplace Order Management + Order Threshold feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.html) | +| Marketplace Inventory Management + Order Management | | [Install the Marketplace Inventory Management + Marketplace Order Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md new file mode 100644 index 00000000000..ee3954e5063 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-order-management-order-threshold-feature.md @@ -0,0 +1,40 @@ + + +This document describes how to install the Marketplace Order Management + Order Threshold feature. + +## Install feature core + +Follow the steps below to install the Marketplace Order Management Feature + Order Threshold feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| -------------- | --------- | -------------| +| Order Threshold | {{page.release_tag}} | [Install the Order Threshold feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-sales-order-threshold-gui:"^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------------ | -------------- | +| MerchantSalesOrderThresholdGui | spryker/merchant-sales-order-threshold-gui | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that merchant orders have correct threshold expenses shown in order-overview page in `http://zed.mysprykershop.com/merchant-sales-order-merchant-user-gui/detail?id-merchant-sales-order={% raw %}{{idMerchantSalesOrder}}{% endraw %}` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-approval-process-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-approval-process-feature.md new file mode 100644 index 00000000000..62ea3822528 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-approval-process-feature.md @@ -0,0 +1,174 @@ + + +This document describes how to install the Marketplace Product Approval Process feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product Approval Process feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Product Approval Process | {{page.release_tag}} | [Install the Product Approval Process feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html) | + + +### 1) Install the required modules using Сomposer + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-product-approval-process:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|------------------------------------------------------| +| MerchantProductApproval | vendor/spryker/merchant-product-approval | +| MerchantProductApprovalDataImport | vendor/spryker/merchant-product-approval-data-import | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------------------------|--------|---------| +| spy_merchant.default_product_abstract_approval_status | column | added | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------|----------|----------|-----------------------------------------------------------------------| +| ProductAbstractTransfer | class | created | src/Generated/Shared/Transfer/ProductAbstractTransfer | +| MerchantProductCriteriaTransfer | class | created | src/Generated/Shared/Transfer/MerchantProductCriteriaTransfer | +| MerchantProductTransfer | class | created | src/Generated/Shared/Transfer/MerchantProductTransfer | +| MerchantTransfer | class | created | src/Generated/Shared/Transfer/MerchantTransfer | +| DataImporterReaderConfigurationTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReaderConfigurationTransfer | +| DataImporterConfigurationTransfer | class | created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | +| DataImporterReportTransfer | class | created | src/Generated/Shared/Transfer/DataImporterReportTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Generate new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------| +| MerchantProductApprovalProductAbstractPreCreatePlugin | Expands product abstract transfer with default merchant product approval status when `ProductAbstractTransfer::approvalStatus` is null. | None | Spryker\Zed\MerchantProductApproval\Communication\Plugin\Product | + + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductAbstractPreCreatePlugins(): array + { + return [ + new MerchantProductApprovalProductAbstractPreCreatePlugin(), + ]; + } +} +``` + +### 5) Import data + +Follow the steps to import product approval data: + +1. Prepare data according to your requirements using the following demo data: + +**data/import/common/common/marketplace/merchant_product_approval_status_default.csv** + +```yaml +merchant_reference,approval_status +MER000002,approved +``` + +| COLUMN | Required | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|--------------------|----------|-----------|--------------|---------------------------------------------------------| +| merchant_reference | ✓ | string | MER000002 | Unique merchant identifier. | +| approval_status | ✓ | string | approved | Status (draft, waiting_for_approval, approved, denied). | + +2. Register the following data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------| +| MerchantProductApprovalStatusDefaultDataImportPlugin | Iterates over the data sets and imports merchant default product approval statuses into the database. | None | Spryker\Zed\MerchantProductApprovalDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getCartPreCheckPlugins(Container $container): array + { + return [ + new MerchantProductCartPreCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can't add an item with `merchantReference` and `sku` that do not belong to the same `MerchantProduct`(see `spy_merchant_product_abstract`). + +{% endinfo_block %} + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new MerchantProductPreAddToCartPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you add a merchant product to cart, it has `merchantReference` set. (Can be checked in the `spy_quote` table). + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-feature.md new file mode 100644 index 00000000000..caa954b9909 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-feature.md @@ -0,0 +1,860 @@ + + +This document describes how to install the [Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/marketplace-product-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Marketplace Product feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | -------- | ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-product:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------------- | ------------------------------------ | +| MerchantProduct | vendor/spryker/merchant-product | +| MerchantProductDataImport | vendor/spryker/merchant-product-data-import | +| MerchantProductGui | vendor/spryker/merchant-product-gui | +| MerchantProductSearch | vendor/spryker/merchant-product-search | +| MerchantProductStorage | vendor/spryker/merchant-product-storage | +| MerchantProductWidget | vendor/spryker-shop/merchant-product-widget | + +{% endinfo_block %} + +### 2) Set up the database schema and transfer objects + +1. Adjust the schema definition so that entity changes trigger the events: + +**src/Pyz/Zed/MerchantProduct/Persistence/Propel/Schema/spy_merchant_product_abstract.schema.xml** + +```xml + + + + + + + +
    +
    +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| ----------------------------- | ----- | ------- | +| spy_merchant_product_abstract | table | created | + +{% endinfo_block %} + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ----------------- |----------| ------ |-----------------------------------------------------------------| +| MerchantProductCriteria | class | Created | src/Generated/Shared/Transfer/MerchantProductCriteriaTransfer | +| MerchantProduct | class | Created | src/Generated/Shared/Transfer/MerchantProductTransfer | +| MerchantProductAbstract | class | Created | src/Generated/Shared/Transfer/MerchantProductAbstractTransfer | +| MerchantProductAbstractCollection | class | Created | src/Generated/Shared/Transfer/MerchantProductAbstractCollectionTransfer | +| MerchantProductAbstractCriteria | class | Created | src/Generated/Shared/Transfer/MerchantProductAbstractCriteriaTransfer | +| MerchantProductCollection | class | Created | src/Generated/Shared/Transfer/MerchantProductCollectionTransfer | +| ProductAbstractMerchant | class | Created | src/Generated/Shared/Transfer/ProductAbstractMerchantTransfer | +| MerchantSearchCollection | class | Created | src/Generated/Shared/Transfer/MerchantSearchCollectionTransfer | +| MerchantProductStorage | class | Created | src/Generated/Shared/Transfer/MerchantProductStorageTransfer | +| ProductAbstract.idMerchant | property | Created | src/Generated/Shared/Transfer/ProductAbstractTransfer | +| MerchantProductView | class | Created | src/Generated/Shared/Transfer/MerchantProductViewTransfer | +| PageMap.merchantReferences | property | Created | src/Generated/Shared/Transfer/PageMapTransfer | +| Pagination | class | Created | src/Generated/Shared/Transfer/PaginationTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Configure export to key-value storage and Elasticsearch + +Install the following plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------------------- | ------------------- | --------- | -------------------- | +| Merchant\MerchantProductSearchWritePublisherPlugin | Publishes the product by merchant IDs to ES. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | +| MerchantProduct\MerchantProductSearchWritePublisherPlugin | Publishes the product by merchant product abstract IDs to ES. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | +| MerchantProductSearchPublisherTriggerPlugin | Allows publishing or republishing merchant product search data manually. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\Publisher | +| MerchantUpdatePublisherPlugin | Publishes the product by merchant IDs to key-value storage. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\Merchant | +| MerchantProductWritePublisherPlugin | Publishes the product by merchant product abstract IDs to key-value storage. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher\MerchantProduct | +| MerchantProductPublisherTriggerPlugin | Allows publishing or republishing merchant product storage data manually. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\Publisher | + +
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php + + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new MerchantProductSearchPublisherTriggerPlugin(), + new MerchantProductPublisherTriggerPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that merchant product data appears in the search engine and storage. + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-------------|---------------------|---------------|---------------| +| MerchantProductProductAbstractViewActionViewDataExpanderPlugin | Expands view data for abstract product with merchant data. | | Spryker\Zed\MerchantProductGui\Communication\Plugin\ProductManagement | +| MerchantProductProductAbstractListActionViewDataExpanderPlugin | Expands product list data for abstract product data for merchant filter. | | Spryker\Zed\MerchantProductGui\Communication\Plugin\ProductManagement | +| MerchantProductProductTableQueryCriteriaExpanderPlugin | Expands QueryCriteriaTransfer with QueryJoinTransfer for filtering by idMerchant. | | Spryker\Zed\MerchantProductGui\Communication\Plugin\ProductManagement | +| MerchantProductAbstractMapExpanderPlugin | Adds merchant names to product abstract search data. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\ProductPageSearch | +| MerchantProductPageDataExpanderPlugin | Expands the provided ProductAbstractPageSearch transfer object's data by merchant names. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\ProductPageSearch | +| MerchantProductPageDataLoaderPlugin | Expands ProductPageLoadTransfer object with merchant data. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\ProductPageSearch | +| MerchantProductAbstractStorageExpanderPlugin | Expands product abstract storage data with merchant references. | | Spryker\Zed\MerchantProductStorage\Communication\Plugin\ProductStorage | +| MerchantProductProductAbstractPostCreatePlugin | Creates a new merchant product abstract entity if `ProductAbstractTransfer.idMerchant` is set. | None | Spryker\Zed\MerchantProduct\Communication\Plugin\Product | +| ProductApprovalProductAbstractEditViewExpanderPlugin | Expands view data with abstract product approval status data. | None | Spryker\Zed\ProductApprovalGui\Communication\Plugin\ProductManagement | +| MerchantProductProductAbstractEditViewExpanderPlugin | Expands view data for abstract product with merchant data. | None | Spryker\Zed\MerchantProductGui\Communication\Plugin\ProductManagement | +| MerchantProductProductConcretePageMapExpanderPlugin | Expands `PageMap` transfer object with `merchant_reference`. | | Spryker\Zed\MerchantProductSearch\Communication\Plugin\ProductPageSearch | + +**src/Pyz/Zed/Product/ProductDependencyProvider.php** + +```php + + */ + protected function getProductAbstractPostCreatePlugins(): array + { + return [ + new MerchantProductProductAbstractPostCreatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can create a new product in the Merchant Portal and observe it after creation in the product data table. + +{% endinfo_block %} + +
    src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + +```php + + */ + protected function getProductAbstractViewActionViewDataExpanderPlugins(): array + { + return [ + new MerchantProductProductAbstractViewActionViewDataExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductTableQueryCriteriaExpanderPluginInterface> + */ + protected function getProductTableQueryCriteriaExpanderPluginInterfaces(): array + { + return [ + new MerchantProductProductTableQueryCriteriaExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractListActionViewDataExpanderPluginInterface> + */ + protected function getProductAbstractListActionViewDataExpanderPlugins(): array + { + return [ + new MerchantProductAbstractListActionViewDataExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractEditViewExpanderPluginInterface> + */ + protected function getProductAbstractEditViewExpanderPlugins(): array + { + return [ + new ProductApprovalProductAbstractEditViewExpanderPlugin(), + new MerchantProductProductAbstractEditViewExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that you can filter products by merchants at `https://zed.de.demo-spryker.com/product-management`. + +Make sure that you can see the merchant name at `https://zed.de.demo-spryker.com/product-management/view?id-product-abstract={id-product-abstract}}`. It is applicable only for products that are assigned to some merchant. For details, the [6) Import merchant product data](#import-merchant-product-data) step. + +{% endinfo_block %} + +
    src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + + */ + protected function getDataExpanderPlugins() + { + $dataExpanderPlugins = []; + $dataExpanderPlugins[MerchantProductSearchConfig::PLUGIN_MERCHANT_PRODUCT_DATA] = new MerchantMerchantProductPageDataExpanderPlugin(); + + return $dataExpanderPlugins; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface> + */ + protected function getProductAbstractMapExpanderPlugins(): array + { + return [ + new MerchantProductAbstractMapExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface> + */ + protected function getDataLoaderPlugins() + { + return [ + new MerchantMerchantProductPageDataLoaderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductConcretePageMapExpanderPluginInterface> + */ + protected function getConcreteProductMapExpanderPlugins(): array + { + return [ + new MerchantProductProductConcretePageMapExpanderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the `de_page` Elasticsearch index for any product that belongs (see `spy_merchant_product_abstract`) to active and approved merchant and contains merchant names. Indexes can be accessed by any Elasticsearch client—for example, Kibana. For Docker configuration details, see [Configuring services](/docs/dg/dev/backend-development/messages-and-errors/registering-a-new-service.html). + +{% endinfo_block %} + +**src/Pyz/Zed/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductAbstractStorageExpanderPlugins(): array + { + return [ + new MerchantProductAbstractStorageExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that data contains `merchant_references` for merchant products in `spy_product_abstract_storage`. + +{% endinfo_block %} + +### 6) Import merchant product data + +1. Prepare your data according to your requirements using the demo data: + +
    +data/import/common/common/marketplace/merchant_product.csv + +```yaml +sku,merchant_reference,is_shared +001,MER000001,1 +002,MER000001,1 +003,MER000001,1 +004,MER000001,1 +005,MER000001,1 +006,MER000001,1 +007,MER000001,1 +008,MER000001,1 +009,MER000001,1 +010,MER000001,1 +011,MER000001,1 +012,MER000001,1 +013,MER000001,1 +014,MER000001,1 +015,MER000001,1 +016,MER000001,1 +017,MER000001,1 +018,MER000001,1 +019,MER000001,1 +020,MER000001,1 +021,MER000001,1 +022,MER000001,1 +023,MER000001,1 +024,MER000001,1 +025,MER000001,1 +026,MER000001,1 +027,MER000001,1 +028,MER000001,1 +029,MER000001,1 +030,MER000001,1 +031,MER000001,1 +032,MER000001,1 +033,MER000001,1 +034,MER000001,1 +035,MER000001,1 +036,MER000001,1 +037,MER000001,1 +038,MER000001,1 +039,MER000001,1 +040,MER000001,1 +041,MER000001,1 +042,MER000001,1 +043,MER000001,1 +044,MER000001,1 +045,MER000001,1 +046,MER000001,1 +047,MER000001,1 +048,MER000001,1 +049,MER000001,1 +050,MER000001,1 +051,MER000001,1 +052,MER000001,1 +053,MER000001,1 +054,MER000001,1 +055,MER000001,1 +056,MER000001,1 +057,MER000001,1 +058,MER000001,1 +059,MER000001,1 +060,MER000001,1 +061,MER000001,1 +062,MER000001,1 +063,MER000001,1 +064,MER000001,1 +065,MER000001,1 +066,MER000001,1 +067,MER000001,1 +068,MER000001,1 +069,MER000001,1 +070,MER000001,1 +071,MER000001,1 +072,MER000001,1 +074,MER000001,1 +075,MER000001,1 +076,MER000001,1 +077,MER000001,1 +078,MER000001,1 +079,MER000001,1 +080,MER000001,1 +081,MER000001,1 +082,MER000001,1 +083,MER000001,1 +084,MER000001,1 +085,MER000001,1 +086,MER000001,1 +087,MER000001,1 +088,MER000001,1 +089,MER000001,1 +090,MER000001,1 +091,MER000001,1 +092,MER000001,1 +093,MER000001,1 +094,MER000001,1 +095,MER000001,1 +096,MER000001,1 +097,MER000001,1 +098,MER000001,1 +099,MER000001,1 +100,MER000001,1 +101,MER000001,1 +102,MER000001,1 +103,MER000001,1 +104,MER000001,1 +105,MER000001,1 +106,MER000001,1 +107,MER000001,1 +108,MER000001,1 +109,MER000001,1 +110,MER000001,1 +111,MER000001,1 +184,MER000002,1 +185,MER000002,1 +186,MER000002,1 +187,MER000002,1 +188,MER000002,1 +189,MER000002,1 +190,MER000002,1 +191,MER000002,1 +192,MER000002,1 +193,MER000002,1 +194,MER000002,1 +195,MER000002,1 +196,MER000002,1 +197,MER000002,1 +198,MER000002,1 +199,MER000002,1 +200,MER000002,1 +201,MER000002,1 +202,MER000002,1 +203,MER000002,1 +204,MER000002,1 +205,MER000002,1 +206,MER000002,1 +207,MER000002,1 +208,MER000002,1 +209,MER000002,1 +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| ------------ | ------------ | -------- | --------------- | ------------------------ | +| sku | ✓ | string | 091 | Product identifier. | +| merchant_reference | ✓ | string | roan-gmbh-und-co-k-g | Merchant identifier. | +| is_shared | ✓ | string | 1 | Defines if other merchant can create product offers for this merchant product. | + +2. Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------------ | ----------------- | --------- | -------------------------- | +| MerchantProductDataImportPlugin | Imports merchant product data into the database. | | Spryker\Zed\MerchantProductDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected const PRODUCT_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES = ['id-merchant']; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the filter by merchants is available on the `/product-management` page. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Product feature frontend. + +### 1) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | Prerequisites | NAMESPACE | +| ----------- | ----------- | ---------- | --------- | +| MerchantProductWidget | Displays alternative product. | | SprykerShop\Yves\MerchantProductWidget\Widget | + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantProductWidget::class, + ProductSoldByMerchantWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following is true: +- For the merchant products, you can see the merchant name on the product details page. +- When you add a merchant product to the cart, it has the **Sold By** widget displayed on the cart page. + +{% endinfo_block %} + +### 2) Add Yves translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +merchant_product.message.invalid,Product "%sku%" with Merchant "%merchant_reference%" not found.,en_US +merchant_product.message.invalid,Der Produkt "%sku%" mit dem Händler "%merchant_reference%" ist nicht gefunden.,de_DE +merchant_product.sold_by,Sold by,en_US +merchant_product.sold_by,Verkauft durch,de_DE +product.filter.merchant_name,Merchant,en_US +product.filter.merchant_name,Händler,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| ----------------- | ---------------------- | ------------ | -------------------- | +| MerchantProductMerchantNameSearchConfigExpanderPlugin | Expands facet configuration with merchant name filter. | | Spryker\Client\MerchantProductSearch\Plugin\Search | +| ProductViewMerchantProductExpanderPlugin | Expands ProductView transfer object with merchant reference. | | Spryker\Client\MerchantProductStorage\Plugin\ProductStorage | +| MerchantReferenceQueryExpanderPlugin | Adds filter by merchant reference to query. | | Spryker\Client\MerchantProductSearch\Plugin\Search | + +**src/Pyz/Client/Search/SearchDependencyProvider.php** + +```php + + */ + protected function createSearchConfigExpanderPlugins(Container $container): array + { + $searchConfigExpanderPlugins = parent::createSearchConfigExpanderPlugins($container); + + $searchConfigExpanderPlugins[] = new MerchantProductMerchantNameSearchConfigExpanderPlugin(); + + return $searchConfigExpanderPlugins; + } +} +``` + +**src/Pyz/Client/SearchElasticsearch/SearchElasticsearchDependencyProvider.php** + +```php + + */ + protected function getSearchConfigExpanderPlugins(Container $container): array + { + return [ + new MerchantProductMerchantNameSearchConfigExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you enter the merchant name in the search field, the return list contains merchant products. + +{% endinfo_block %} + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins() + { + return [ + new ProductViewMerchantProductExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the merchant product is selected on the product details page by default. + +{% endinfo_block %} + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +|array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getProductConcreteCatalogSearchQueryExpanderPlugins(): array + { + return [ + new MerchantReferenceQueryExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can filter concrete products by merchant reference while searching by full text. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | - | +| Marketplace Product API | | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | +| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | +| Marketplace Product + Inventory Management | | [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | +| Marketplace Product + Cart | | [Install the Marketplace Product + Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.html) | +| Marketplace Product + Quick Add to Cart | | [Install the Marketplace Product + Quick Add to Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md new file mode 100644 index 00000000000..0e4d6e23250 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md @@ -0,0 +1,65 @@ +This document describes how to install the Marketplace Product + Inventory Management feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product + Inventory Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductAvailabilityAbstractTableQueryCriteriaExpanderPlugin | Expands QueryCriteriaTransfer with QueryJoinTransfer for filtering by idMerchant. | | Spryker\Zed\MerchantProductGui\Communication\Plugin\AvailabilityGui | +| MerchantProductAvailabilityViewActionViewDataExpanderPlugin | Expands view data for product availability with merchant data. | | Spryker\Zed\MerchantProductGui\Communication\Plugin\AvailabilityGui | + +**src/Pyz/Zed/AvailabilityGui/AvailabilityGuiDependencyProvider.php** + +```php + + */ + protected function getAvailabilityViewActionViewDataExpanderPlugins(): array + { + return [ + new MerchantProductAvailabilityViewActionViewDataExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\AvailabilityGuiExtension\Dependency\Plugin\AvailabilityAbstractTableQueryCriteriaExpanderPluginInterface> + */ + protected function getAvailabilityAbstractTableQueryCriteriaExpanderPlugins(): array + { + return [ + new MerchantProductAvailabilityAbstractTableQueryCriteriaExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can filter product availabilities by merchant at `http://zed.de.demo-spryker.com/product-management`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..0bc320b766c --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md @@ -0,0 +1,115 @@ + + +This document describes how to install the Marketplace Product + Marketplace Product Offer feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product + Marketplace Product Offer feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductProductOfferReferenceStrategyPlugin | Allows selecting a merchant product by default on PDP. | | Spryker\Client\MerchantProductStorage\Plugin\ProductOfferStorage | + +{% info_block warningBox "Note" %} + +The order is important. Plugin has to be registered after `ProductOfferReferenceStrategyPlugin`. + +{% endinfo_block %} + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferReferenceStrategyPlugins(): array + { + return [ + new MerchantProductProductOfferReferenceStrategyPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure you can switch between merchant products and product offers on the **Product Details** page. + +Make sure that merchant products selected on the **Product Details** page by default. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Product + Marketplace Product Offer feature front end. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|------------------|--------------|---------------|----------------| +| MerchantProductMerchantProductOfferCollectionExpanderPlugin | Finds merchant product by sku and expands form choices with a merchant product's value. | | SprykerShop\Yves\MerchantProductWidget\Plugin\MerchantProductOfferWidget | + +**src/Pyz/Yves/MerchantProductOfferWidget/MerchantProductOfferWidgetDependencyProvider.php** + +```php + + */ + protected function getMerchantProductOfferCollectionExpanderPlugins(): array + { + return [ + new MerchantProductMerchantProductOfferCollectionExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the offers select field obtained via `MerchantProductOffersSelectWidget` is extended with the corresponding merchant product if it exists. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-cart-feature.md new file mode 100644 index 00000000000..95403307f8f --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-cart-feature.md @@ -0,0 +1,146 @@ + + +This document describes how to install the Marketplace Product Offer + Car feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Cart feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------- | -------- | ------------------| +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------- | ------------- | ----------- | ------------ | +| ProductOfferGroupKeyItemExpanderPlugin | Adds a product offer reference to group key that separates items in the cart. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| ProductOfferCartPreCheckPlugin | Checks if the product offer belongs to the concrete product before adding an item to cart. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | +| FilterInactiveProductOfferPreReloadItemsPlugin | Removes an inactive product offer from cart when reloading it. | | Spryker\Zed\ProductOffer\Communication\Plugin\Cart | + +
    +src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new ProductOfferGroupKeyItemExpanderPlugin(), + ]; + } + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface> + */ + protected function getCartPreCheckPlugins(Container $container): array + { + return [ + new ProductOfferCartPreCheckPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CartExtension\Dependency\Plugin\PreReloadItemsPluginInterface> + */ + protected function getPreReloadPlugins(Container $container): array + { + return [ + new FilterInactiveProductOfferPreReloadItemsPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that inactive product offers get removed from cart on reload. + +Make sure that it's only possible to have items in cart where the product offer reference belongs to the correct concrete product. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Product Offer + Cart feature frontend. + +### Prerequisites + +To start feature integration, overview, and install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ----------- | ---------- | ------------------| +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| - | - | - | - | +| MerchantProductOfferPreAddToCartPlugin | Sets the product offer reference to the item transfer | | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\CartPage | + +**src/Pyz/Yves/CartPage/CartPageDependencyProvider.php** + +```php + + */ + protected function getPreAddToCartPlugins(): array + { + return [ + new MerchantProductOfferPreAddToCartPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the product offer reference (and sold by merchant) is added to the *Cart* page when adding a product offer to cart. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | - | +| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md new file mode 100644 index 00000000000..16f5346a732 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-checkout-feature.md @@ -0,0 +1,98 @@ + + +This document describes how to install the Marketplace Product Offer + Checkout feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Checkout feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | + + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer: "^0.6.1" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| CheckoutExtension | spryker/checkout-extension | +| ProductOffer | spryker/product-offer | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate the transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| CheckoutErrorTransfer | class | Created | src/Generated/Shared/Transfer/CheckoutErrorTransfer | +| CheckoutResponseTransfer | class | Created | src/Generated/Shared/Transfer/CheckoutResponseTransfer | +| ItemTransfer.merchantReference | property | Created | src/Generated/Shared/Transfer/ItemTransfer | + +{% endinfo_block %} + +### 3) Configure checkout pre-condition plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferCheckoutPreConditionPlugin | Blocks checkout if at least one quote item transfer has items with inactive or not approved ProductOffer. | | Spryker/Zed/ProductOffer/Communication/Plugin/Checkout/ProductOfferCheckoutPreConditionPlugin.php | + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container) + { + return [ + new ProductOfferCheckoutPreConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when refreshing the checkout summary page, after changing the `active` or `approved` status of a product offer, the status is reflected accordingly. The checkout button is disabled, and the message is shown at the bottom of the checkout summary page: "Product offer inactive for the product with SKU <`SKU`>". + +You can toggle the offer's `active` status in the Merchant Portal (`Offer visibility`). There's no UI to unset the approval status for an offer yet (only via data-importer: edit `data/import/common/common/marketplace/merchant_product_offer.csv` and execute the `console data:import merchant-product-offer` command). + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..103cab71faf --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-feature.md @@ -0,0 +1,1857 @@ + + +This document describes how to install the [Marketplace Product Offer](/docs/pbc/all/offer-management/latest/marketplace/marketplace-product-offer-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-product-offer:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------------------|--------------------------------------------------| +| MerchantProductOffer | spryker/merchant-product-offer | +| MerchantProductOfferDataImport | spryker/merchant-product-offer-data-import | +| MerchantProductOfferGui | spryker/merchant-product-offer-gui | +| MerchantProductOfferSearch | spryker/merchant-product-offer-search | +| MerchantProductOfferStorage | spryker/merchant-product-offer-storage | +| MerchantProductOfferStorageExtension | spryker/merchant-product-offer-storage-extension | +| ProductOffer | spryker/product-offer | +| ProductOfferExtension | spryker/product-offer-extension | +| ProductOfferGui | spryker/product-offer-gui | +| ProductOfferGuiExtension | spryker/product-offer-gui-extension | +| ProductOfferStorage | spryker/product-offer-storage | +| ProductOfferStorageExtension | spryker/product-offer-storage-extension | +| ProductOfferValidity | spryker/product-offer-validity | +| ProductOfferValidityDataImport | spryker/product-offer-validity-data-import | +| ProductOfferValidityGui | spryker/product-offer-validity-gui | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +1. Adjust the schema definition so that entity changes will trigger events: + +| AFFECTED ENTITY | TRIGGERED EVENTS | +|-------------------------|-------------------------------------------------------------------------------------------------------------------------| +| spy_product_offer | Entity.spy_product_offer.create
    Entity.spy_product_offer.update
    Entity.spy_product_offer.delete | +| spy_product_offer_store | Entity.spy_product_offer_store.create
    Entity.spy_product_offer_store.update
    Entity.spy_product_offer_store.delete | + + +**src/Pyz/Zed/ProductOffer/Persistence/Propel/Schema/spy_product_offer.schema.xml** + +```xml + + + + + + + + + + +
    + + + + + +
    +
    +``` + +2. Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been implemented by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------------------|-------|---------| +| spy_product_concrete_product_offers_storage | table | created | +| spy_product_offer | table | created | +| spy_product_offer_storage | table | created | +| spy_product_offer_store | table | created | +| spy_product_offer_validity | table | created | + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------------|----------|---------|----------------------------------------------------------------------| +| Item.productOfferReference | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| MerchantProductOfferCriteria | class | created | src/Generated/Shared/Transfer/MerchantProductOfferCriteriaTransfer | +| PageMap.merchantReferences | property | created | src/Generated/Shared/Transfer/PageMapTransfer | +| ProductAbstractMerchant.merchantReferences | property | created | src/Generated/Shared/Transfer/ProductAbstractMerchantTransfer | +| ProductOffer | class | created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| ProductOfferCollection | class | created | src/Generated/Shared/Transfer/ProductOfferCollectionTransfer | +| ProductOfferCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferCriteriaTransfer | +| ProductOfferError | class | created | src/Generated/Shared/Transfer/ProductOfferErrorTransfer | +| ProductOfferResponse | class | created | src/Generated/Shared/Transfer/ProductOfferResponseTransfer | +| ProductOfferStorage | class | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| ProductOfferStorageCollection | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCollectionTransfer | +| ProductOfferStorageCriteria | class | created | src/Generated/Shared/Transfer/ProductOfferStorageCriteriaTransfer | +| ProductOfferStore | class | created | src/Generated/Shared/Transfer/ProductOfferStoreTransfer | +| ProductOfferValidity | class | created | src/Generated/Shared/Transfer/ProductOfferValidityTransfer | +| ProductOfferValidityCollection | class | created | src/Generated/Shared/Transfer/ProductOfferValidityCollectionTransfer | +| EventEntity | class | created | src/Generated/Shared/Transfer/EventEntityTransfer | +| ProductConcretePageSearch | class | created | src/Generated/Shared/Transfer/ProductConcretePageSearchTransfer | +| ProductPageSearch.merchantReferences | property | created | src/Generated/Shared/Transfer/ProductPageSearchTransfer | +| ProductPayload.merchantReferences | property | created | src/Generated/Shared/Transfer/ProductPayloadTransfer | +| ProductStorageCriteria.merchantReference | property | created | src/Generated/Shared/Transfer/ProductStorageCriteriaTransfer | +| ProductView.productOfferReference | property | created | src/Generated/Shared/Transfer/ProductViewTransfer | +| Merchant.merchantReference | property | created | src/Generated/Shared/Transfer/MerchantTransfer | +| Merchant.status | property | created | src/Generated/Shared/Transfer/MerchantTransfer | + +{% endinfo_block %} + +### 3) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Configure export to key-value storage and Elasticsearch + +To configure export to key-value storage and Elasticsearch, take the following steps: + +#### Set up publisher plugins + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------------| +| ProductConcreteProductOffersDeletePublisherPlugin | Finds and deletes product concrete offer storage entities by the given concreteSkus. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductConcreteOffers | +| ProductConcreteProductOffersWritePublisherPlugin | Queries all active product offer with the given concreteSkus, stores data as JSON encoded to storage table. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductConcreteOffers | +| ProductConcreteProductOffersStoreWritePublisherPlugin | Publishes product concrete product offers using product offer IDs retrieved from event transfers. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductConcreteOffers | +| ProductConcreteProductOffersStoreDeletePublisherPlugin | Unpublishes product offer reference from `spy_product_concrete_product_offers_storage` by provided `EventEntity.foreign_keys.fk_product_offer` and `EventEntity.foreign_keys.fk_store` transfer properties. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductConcreteOffers | +| ProductOfferDeletePublisherPlugin | Finds and deletes product offer storage entities with the given `productOfferReferences` and sends a delete message to the queue based on module config. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductOffer | +| ProductOfferWritePublisherPlugin | Queries all active product offer with the given productOfferReferences, stores data as JSON encoded to storage table. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductOffer | +| ProductOfferStoreWritePublisherPlugin | Publishes product offers using product offer IDs retrieved from event transfers. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductOffer | +| ProductOfferStoreDeletePublisherPlugin | Unpublishes product offers by provided `EventEntity.foreign_keys.fk_product_offer` and `EventEntity.foreign_keys.fk_store` transfer properties. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher\ProductOffer | +| ProductOfferPublisherTriggerPlugin | Publishes the product offer collection by offset and limit from Persistence. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Publisher | +| MerchantProductConcreteProductOfferWritePublisherPlugin | Retrieves all active product offers by `merchantIds`, publish active product offers data to `ProductConcreteProductOffersStorage`. | | Spryker\Zed\MerchantProductOfferStorage\Communication\Plugin\Publisher\ProductConcreteProductOffer | +| MerchantProductOfferWritePublisherPlugin | Queries all active product offer with the given merchantIds, stores data as JSON encoded to storage table. | | Spryker\Zed\MerchantProductOfferStorage\Communication\Plugin\Publisher\Merchant | +| ProductConcreteWritePublisherPlugin | Publishes concrete products by create, update, and delete product offer events. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\Publisher\ProductOffer | +| ProductConcreteWritePublisherPlugin | Publishes concrete products by create, update, and delete product offer store events. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\Publisher\ProductOfferStore | +| MerchantProductOfferProductConcreteExpanderPlugin | Expands product concrete collection with offers. | | \Spryker\Zed\MerchantProductOffer\Communication\Plugin\Product | + +
    src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +|array> + */ + protected function getPublisherPlugins(): array + { + return array_merge( + $this->getProductOfferStoragePlugins(), + $this->getMerchantProductOfferStoragePlugins(), + $this->getMerchantProductOfferSearchPlugins(), + ); + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getProductOfferStoragePlugins(): array + { + return [ + new ProductConcreteProductOffersDeletePublisherPlugin(), + new ProductConcreteProductOffersWritePublisherPlugin(), + new ProductOfferDeletePublisherPlugin(), + new ProductOfferWritePublisherPlugin(), + new ProductOfferStoreWritePublisherPlugin(), + new ProductOfferStoreDeletePublisherPlugin(), + new ProductConcreteProductOffersStoreWritePublisherPlugin(), + new ProductConcreteProductOffersStoreDeletePublisherPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getMerchantProductOfferStoragePlugins(): array + { + return [ + new MerchantProductConcreteProductOfferWritePublisherPlugin(), + new MerchantProductOfferWritePublisherPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getMerchantProductOfferSearchPlugins(): array + { + return [ + new ProductOfferProductConcreteWritePublisherPlugin(), + new ProductOfferStoreProductConcreteWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new ProductOfferPublisherTriggerPlugin(), + ]; + } +} +``` + +
    + +#### Set up event listeners + +1. Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------|------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------------| +| MerchantProductOfferSearchEventSubscriber | Registers listeners responsible for publishing merchant product offer search to storage. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\Event\Subscriber | +| MerchantSearchEventSubscriber | Registers listeners responsible for publishing merchant search to storage. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new MerchantSearchEventSubscriber()); + $eventSubscriberCollection->add(new MerchantProductOfferSearchEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +2. Register the synchronization queue and synchronization error queue: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + ProductOfferStorageConfig::PRODUCT_OFFER_SYNC_STORAGE_QUEUE, + ]; + } + +} +``` + +#### Configure message processors + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------| +| SynchronizationStorageQueueMessageProcessorPlugin | Configures all merchant product offers to sync with key-value storage and marks messages as failed in case of error. | | Spryker\Zed\Synchronization\Communication\Plugin\Queue | + +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container): array + { + return [ + ProductOfferStorageConfig::PRODUCT_OFFER_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Set up, regenerate, and resync features + +1. Set up the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------|----------------------------------------------------------------------| +| ProductConcreteProductOffersSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the entire storage table content into Storage. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Synchronization | +| ProductOfferSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the entire storage table content into Storage. | | Spryker\Zed\ProductOfferStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new ProductConcreteProductOffersSynchronizationDataBulkRepositoryPlugin(), + new ProductOfferSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +2. Configure synchronization storage: + +**src/Pyz/Zed/ProductOfferStorage/ProductOfferStorageConfig.php** + +```php + + */ + protected function getProductConcreteExpanderPlugins(): array + { + return [ + new MerchantProductOfferProductConcreteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that after setting up the event listeners, the following commands do the following: + +- `console sync:data product_concrete_product_offers` exports data from the `spy_product_concrete_product_offers_storage` table to key-value storage. +- `console sync:data product_offer` exports data from the `spy_product_offer_storage` table to key-value storage. + +Make sure that when the following entities get updated through the ORM, the corresponding key-value storage keys have the correct values. + +| TARGET ENTITY | EXAMPLE EXPECTED DATA IDENTIFIER | EXAMPLE EXPECTED DATA FRAGMENT | +|---------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------| +| ProductOffer | kv:product_offer:offer2 | {"id_product_offer":1,"id_merchant":6,"product_offer_reference":"offer1","merchant_sku":"GS952M00H-Q11"} | +| ProductOffer | kv:product_concrete_product_offers:093_24495843 | ["offer3","offer4"] | + +{% endinfo_block %} + +### 5) Import data + +1. Prepare your data according to your requirements using the demo data: + +
    data/import/common/common/marketplace/merchant_product_offer.csv + +```csv +product_offer_reference,concrete_sku,merchant_reference,merchant_sku,is_active,approval_status +offer1,093_24495843,MER000001,GS952M00H-Q11,1,approved +offer2,090_24495844,MER000002,,1,approved +offer3,091_25873091,MER000001,M9122A0AQ-C11,1,approved +offer4,091_25873091,MER000002,M9122A0AQ-C11,1,approved +offer5,092_24495842,MER000001,TH344E01G-Q11,0,approved +offer6,092_24495842,MER000002,OB054P005-Q11,1,approved +offer7,193_32124735,MER000001,,1,approved +offer8,001_25904006,MER000002,,1,approved +offer9,002_25904004,MER000002,,0,approved +offer10,003_26138343,MER000002,,0,waiting_for_approval +offer11,004_30663302,MER000002,,1,waiting_for_approval +offer12,005_30663301,MER000002,,1,approved +offer13,006_30692993,MER000002,,1,approved +offer14,007_30691822,MER000002,,1,approved +offer15,008_30692992,MER000002,,1,approved +offer16,009_30692991,MER000002,,1,approved +offer17,010_30692994,MER000002,,1,approved +offer18,011_30775359,MER000002,,1,approved +offer19,012_25904598,MER000002,,1,approved +offer20,013_25904584,MER000002,,1,approved +offer21,014_25919241,MER000002,,1,approved +offer22,015_25904009,MER000002,,1,approved +offer23,016_21748907,MER000002,,1,approved +offer24,017_21748906,MER000002,,1,approved +offer25,018_21081477,MER000002,,1,approved +offer26,019_21081473,MER000002,,1,approved +offer27,020_21081478,MER000002,,1,approved +offer28,021_21081475,MER000002,,1,approved +offer29,022_21994751,MER000002,,1,approved +offer30,023_21758366,MER000002,,1,approved +offer31,024_21987578,MER000002,,1,approved +offer32,025_21764665,MER000002,,1,approved +offer33,026_21748904,MER000002,,1,approved +offer34,027_26976107,MER000002,,1,approved +offer35,028_26976108,MER000002,,1,approved +offer36,029_26976109,MER000002,,1,approved +offer37,030_30021698,MER000002,,1,approved +offer38,031_30021637,MER000002,,1,approved +offer39,032_32125551,MER000002,,1,approved +offer40,033_32125568,MER000002,,1,approved +offer41,034_32125390,MER000002,,1,approved +offer42,035_17360369,MER000002,,1,approved +offer43,036_17360368,MER000002,,1,approved +offer44,037_25904011,MER000002,,1,approved +offer45,038_25905593,MER000002,,1,approved +offer46,039_25904010,MER000002,,1,approved +offer47,040_25904665,MER000002,,1,approved +offer48,041_25904691,MER000002,,1,approved +offer49,001_25904006,MER000005,,1,approved +offer50,002_25904004,MER000005,,1,approved +offer51,003_26138343,MER000005,,0,approved +offer52,004_30663302,MER000005,,1,approved +offer53,005_30663301,MER000005,,0,approved +offer54,006_30692993,MER000005,,1,approved +offer55,007_30691822,MER000005,,1,waiting_for_approval +offer56,008_30692992,MER000005,,1,waiting_for_approval +offer57,009_30692991,MER000005,,1,approved +offer58,010_30692994,MER000005,,1,approved +offer59,011_30775359,MER000005,,1,approved +offer60,012_25904598,MER000005,,1,approved +offer61,013_25904584,MER000005,,1,approved +offer62,014_25919241,MER000005,,1,approved +offer63,015_25904009,MER000005,,1,approved +offer64,016_21748907,MER000005,,1,approved +offer65,017_21748906,MER000005,,1,approved +offer66,018_21081477,MER000005,,1,approved +offer67,019_21081473,MER000005,,1,approved +offer68,020_21081478,MER000005,,1,approved +offer69,021_21081475,MER000005,,1,approved +offer70,022_21994751,MER000005,,1,approved +offer71,023_21758366,MER000005,,1,approved +offer72,024_21987578,MER000005,,1,approved +offer73,025_21764665,MER000005,,1,approved +offer74,026_21748904,MER000005,,1,approved +offer75,027_26976107,MER000005,,1,approved +offer76,028_26976108,MER000005,,1,approved +offer77,029_26976109,MER000005,,1,approved +offer78,030_30021698,MER000005,,1,approved +offer79,031_30021637,MER000005,,1,approved +offer80,032_32125551,MER000005,,1,approved +offer81,033_32125568,MER000005,,1,approved +offer82,034_32125390,MER000005,,1,approved +offer83,035_17360369,MER000005,,1,approved +offer84,036_17360368,MER000005,,1,approved +offer85,037_25904011,MER000005,,1,approved +offer86,038_25905593,MER000005,,1,approved +offer87,039_25904010,MER000005,,1,approved +offer88,040_25904665,MER000005,,1,approved +offer89,041_25904691,MER000005,,1,approved +offer90,016_21748907,MER000006,,1,approved +offer91,017_21748906,MER000006,,1,waiting_for_approval +offer92,018_21081477,MER000006,,1,approved +offer93,019_21081473,MER000006,,0,approved +offer94,020_21081478,MER000006,,1,approved +offer95,021_21081475,MER000006,,1,approved +offer96,022_21994751,MER000006,,1,approved +offer97,023_21758366,MER000006,,1,approved +offer98,024_21987578,MER000006,,1,approved +offer99,025_21764665,MER000006,,1,approved +offer100,026_21748904,MER000006,,0,approved +offer101,027_26976107,MER000006,,1,approved +offer102,028_26976108,MER000006,,1,approved +offer103,029_26976109,MER000006,,1,waiting_for_approval +offer169,076_24394207,MER000006,,1,approved +offer170,077_24584210,MER000006,,1,approved +offer171,078_24602396,MER000006,,1,approved +offer172,079_24394211,MER000006,,1,approved +offer173,080_24394206,MER000006,,1,approved +offer348,193_32124735,MER000006,,1,approved +offer349,194_25904145,MER000006,,1,approved +offer350,195_25904159,MER000006,,1,approved +offer351,196_23120327,MER000006,,1,approved +offer352,197_21421718,MER000006,,1,approved +offer353,198_19692589,MER000006,,1,approved +offer354,199_7016823,MER000006,,1,approved +offer355,199_24788780,MER000006,,1,approved +offer356,200_5787536,MER000006,,1,approved +offer357,201_11217755,MER000006,,1,approved +offer358,202_5782479,MER000006,,1,approved +offer359,203_15619960,MER000006,,1,approved +offer360,204_29851280,MER000006,,1,approved +offer402,101_29727910,MER000004,,1,approved +offer403,102_30727008,MER000005,,0,approved +offer404,102_30727008,MER000005,,1,denied +offer405,102_30727008,MER000005,,1,waiting_for_approval +offer410,104_30727010,MER000005,,1,approved +offer411,113_29885591,MER000005,,1,approved +offer412,113_29885591,MER000002,,1,approved +offer413,118_29804739,MER000005,,1,approved +offer414,118_29804739,MER000002,,1,approved +offer415,112_312526171,MER000005,,1,approved +offer416,112_306918001,MER000002,,1,approved +offer417,112_312526191,MER000005,,1,approved +offer418,112_312526172,MER000002,,1,approved +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| product_offer_reference | ✓ | string | offer1 | Product offer identifier that references to this merchant. | +| concrete_sku | ✓ | string | 093_24495843 | Concrete product SKU this product offer is attached to. | +| merchant_reference | ✓ | string | MER000002 | Merchant identifier. | +| merchant_sku | | string | GS952M00H-Q11 | Merchant internal SKU for the product offer. | +| is_active | | boolean | 1 | Product offer status, defaults to 1. | +| approval_status | | string | approved | (*Waiting for Approval* > *Approved* > *Denied*). *Denied* and *Waiting for Approval* statuses mean that the offer is not visible on PDP regardless of Product Offer → Active = true. This can be configured (along with the transition between statuses in `ProductOfferConfig`). If not supplied, `ProductOfferConfig` > `getDefaultStatus` is applied. | + +
    data/import/common/common/marketplace/merchant_product_offer_store.csv + +```csv +product_offer_reference,store_name +offer1,DE +offer2,DE +offer3,DE +offer4,DE +offer6,DE +offer7,DE +offer8,DE +offer9,DE +offer10,DE +offer11,DE +offer12,DE +offer13,DE +offer14,DE +offer15,DE +offer16,DE +offer17,DE +offer18,DE +offer19,DE +offer20,DE +offer21,DE +offer22,DE +offer23,DE +offer24,DE +offer25,DE +offer26,DE +offer27,DE +offer28,DE +offer29,DE +offer30,DE +offer31,DE +offer32,DE +offer33,DE +offer34,DE +offer35,DE +offer36,DE +offer37,DE +offer38,DE +offer39,DE +offer40,DE +offer41,DE +offer42,DE +offer43,DE +offer44,DE +offer45,DE +offer46,DE +offer47,DE +offer48,DE +offer49,DE +offer50,DE +offer51,DE +offer52,DE +offer53,DE +offer54,DE +offer55,DE +offer56,DE +offer57,DE +offer58,DE +offer59,DE +offer60,DE +offer61,DE +offer62,DE +offer63,DE +offer64,DE +offer65,DE +offer66,DE +offer67,DE +offer68,DE +offer69,DE +offer70,DE +offer71,DE +offer72,DE +offer73,DE +offer74,DE +offer75,DE +offer76,DE +offer77,DE +offer78,DE +offer79,DE +offer80,DE +offer81,DE +offer82,DE +offer83,DE +offer84,DE +offer85,DE +offer86,DE +offer87,DE +offer88,DE +offer89,DE +offer90,DE +offer91,DE +offer92,DE +offer93,DE +offer94,DE +offer95,DE +offer96,DE +offer97,DE +offer98,DE +offer99,DE +offer100,DE +offer101,DE +offer102,DE +offer103,DE +offer169,DE +offer170,DE +offer171,DE +offer172,DE +offer173,DE +offer348,DE +offer349,DE +offer350,DE +offer351,DE +offer352,DE +offer353,DE +offer354,DE +offer355,DE +offer356,DE +offer357,DE +offer358,DE +offer359,DE +offer360,DE +offer402,DE +offer403,DE +offer404,DE +offer405,DE +offer410,DE +offer411,DE +offer412,DE +offer413,DE +offer414,DE +offer415,DE +offer416,DE +offer417,DE +offer418,DE +offer2,US +offer4,US +offer6,US +offer7,US +offer8,US +offer9,US +offer10,US +offer11,US +offer12,US +offer13,US +offer14,US +offer15,US +offer16,US +offer17,US +offer18,US +offer19,US +offer20,US +offer21,US +offer22,US +offer23,US +offer24,US +offer25,US +offer26,US +offer27,US +offer28,US +offer29,US +offer30,US +offer31,US +offer32,US +offer33,US +offer34,US +offer35,US +offer36,US +offer37,US +offer38,US +offer39,US +offer40,US +offer41,US +offer42,US +offer43,US +offer44,US +offer45,US +offer46,US +offer47,US +offer48,US +offer49,US +offer50,US +offer51,US +offer52,US +offer53,US +offer54,US +offer55,US +offer56,US +offer57,US +offer58,US +offer59,US +offer60,US +offer61,US +offer62,US +offer63,US +offer64,US +offer65,US +offer66,US +offer67,US +offer68,US +offer69,US +offer70,US +offer71,US +offer72,US +offer73,US +offer74,US +offer75,US +offer76,US +offer77,US +offer78,US +offer79,US +offer80,US +offer81,US +offer82,US +offer83,US +offer84,US +offer85,US +offer86,US +offer87,US +offer88,US +offer89,US +offer90,US +offer91,US +offer92,US +offer93,US +offer94,US +offer95,US +offer96,US +offer97,US +offer98,US +offer99,US +offer100,US +offer101,US +offer102,US +offer103,US +offer169,US +offer170,US +offer171,US +offer172,US +offer173,US +offer348,US +offer349,US +offer350,US +offer351,US +offer352,US +offer353,US +offer354,US +offer355,US +offer356,US +offer357,US +offer358,US +offer359,US +offer360,US +offer1,AT +offer2,AT +offer3,AT +offer4,AT +offer6,AT +offer7,AT +offer8,AT +offer9,AT +offer10,AT +offer11,AT +offer12,AT +offer13,AT +offer14,AT +offer15,AT +offer16,AT +offer17,AT +offer18,AT +offer19,AT +offer20,AT +offer21,AT +offer22,AT +offer23,AT +offer24,AT +offer25,AT +offer26,AT +offer27,AT +offer28,AT +offer29,AT +offer30,AT +offer31,AT +offer32,AT +offer33,AT +offer34,AT +offer35,AT +offer36,AT +offer37,AT +offer38,AT +offer39,AT +offer40,AT +offer41,AT +offer42,AT +offer43,AT +offer44,AT +offer45,AT +offer46,AT +offer47,AT +offer48,AT +offer49,AT +offer50,AT +offer51,AT +offer52,AT +offer53,AT +offer54,AT +offer55,AT +offer56,AT +offer57,AT +offer58,AT +offer59,AT +offer60,AT +offer61,AT +offer62,AT +offer63,AT +offer64,AT +offer65,AT +offer66,AT +offer67,AT +offer68,AT +offer69,AT +offer70,AT +offer71,AT +offer72,AT +offer73,AT +offer74,AT +offer75,AT +offer76,AT +offer77,AT +offer78,AT +offer79,AT +offer80,AT +offer81,AT +offer82,AT +offer83,AT +offer84,AT +offer85,AT +offer86,AT +offer87,AT +offer88,AT +offer89,AT +offer90,AT +offer91,AT +offer92,AT +offer93,AT +offer94,AT +offer95,AT +offer96,AT +offer97,AT +offer98,AT +offer99,AT +offer100,AT +offer101,AT +offer102,AT +offer103,AT +offer169,AT +offer170,AT +offer171,AT +offer172,AT +offer173,AT +offer348,AT +offer349,AT +offer350,AT +offer351,AT +offer352,AT +offer353,AT +offer354,AT +offer355,AT +offer356,AT +offer357,AT +offer358,AT +offer359,AT +offer360,AT +offer402,AT +offer403,AT +offer404,AT +offer405,AT +offer410,AT +offer411,AT +offer412,AT +offer413,AT +offer414,AT +offer415,AT +offer416,AT +offer417,AT +offer418,AT +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|-------------------------------------------------------| +| product_offer_reference | ✓ | string | offer1 | Product Offer reference, unique identifier per Offer. | +| store_name | ✓ | string | DE | The name of the store. | + +**data/import/common/common/marketplace/product_offer_validity.csv** + +```csv +product_offer_reference,valid_from,valid_to +offer1,,2020-01-20 00:00:00.000000 +offer2,,2020-01-20 00:00:00.000000 +offer3,,2020-01-20 00:00:00.000000 +offer4,,2020-01-20 00:00:00.000000 +offer5,2030-01-01 00:00:00.000000, +offer6,2030-01-01 00:00:00.000000, +offer7,2030-01-01 00:00:00.000000, +offer8,2030-01-01 00:00:00.000000, +offer9,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +offer10,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +offer49,,2020-01-20 00:00:00.000000 +offer50,,2020-01-20 00:00:00.000000 +offer51,2030-01-01 00:00:00.000000, +offer52,2030-01-01 00:00:00.000000, +offer53,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +offer54,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +offer90,,2020-01-20 00:00:00.000000 +offer91,,2020-01-20 00:00:00.000000 +offer92,2030-01-01 00:00:00.000000, +offer93,2030-01-01 00:00:00.000000, +offer94,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +offer95,2020-07-01 00:00:00.000000,2025-12-01 00:00:00.000000 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------------| +| product_offer_reference | ✓ | string | offer1 | Unique product offer identifier. | +| valid_from | | String | 2020-01-01 | Date since which the product offer is valid. | +| valid_to | | String | 2020-01-01 | Date till which the product offer is valid. | + +2. Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------|---------------------------------------------------|---------------|----------------------------------------------------------------------------| +| MerchantProductOfferDataImportPlugin | Imports merchant product offer data. | | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImport | +| MerchantProductOfferStoreDataImportPlugin | Imports the product offer to store relation data. | | Spryker\Zed\MerchantProductOfferDataImport\Communication\Plugin\DataImport | +| ProductOfferValidityDataImportPlugin | Imports product offer validity data. | | Spryker\Zed\ProductOfferValidityDataImport\Communication\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new MerchantProductOfferDataImportPlugin(), + new MerchantProductOfferStoreDataImportPlugin(), + new ProductOfferValidityDataImportPlugin(), + ]; + } +} +``` + +**data/import/local/full_EU.yml** + +```yml +version: 0 + +actions: + - data_entity: merchant-product-offer + source: data/import/common/common/marketplace/merchant_product_offer.csv + - data_entity: merchant-product-offer-store + source: data/import/common/DE/merchant_product_offer_store.csv + - data_entity: merchant-product-offer-store + source: data/import/common/AT/merchant_product_offer_store.csv + - data_entity: product-offer-validity + source: data/import/common/common/marketplace/product_offer_validity.csv +``` + +**data/import/local/full_US.yml** + +```yml +version: 0 + +actions: + - data_entity: merchant-product-offer + source: data/import/common/common/marketplace/merchant_product_offer.csv + - data_entity: merchant-product-offer-store + source: data/import/common/US/merchant_product_offer_store.csv + - data_entity: product-offer-validity + source: data/import/common/common/marketplace/product_offer_validity.csv +``` + +Import data: + +```bash +console data:import merchant-product-offer +console data:import merchant-product-offer-store +console data:import product-offer-validity +``` + +{% info_block warningBox "Verification" %} + +Make sure the following is true: +- The product offer data is attached to Merchants in `spy_product_offer` and to Stores in `spy_product_offer_store`. +- The product offer validity data is imported to `spy_product_offer_validity` correctly. + +{% endinfo_block %} + +### 6) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------| +| MerchantProductOfferTableExpanderPlugin | Expands the `ProductOfferGui` product table with merchant data. | | Spryker\Zed\MerchantProductOfferGui\Communication\Plugin | +| MerchantProductOfferViewSectionPlugin | Adds a new merchant section to the `ProductOfferGui` view. | | Spryker\Zed\MerchantProductOfferGui\Communication\Plugin\ProductOfferGui | +| ProductOfferValidityProductOfferViewSectionPlugin | Adds a new validity section to the `ProductOfferGui` view. | | Spryker\Zed\ProductOfferValidityGui\Communication\Plugin\ProductOfferGui | +| MerchantProductOfferListActionViewDataExpanderPlugin | Expands product offer view data with merchant data when showing it in the `ProductOfferGui` module. | | Spryker\Zed\MerchantGui\Communication\Plugin\ProductOffer | +| MerchantReferenceQueryExpanderPlugin | Adds filter by the merchant reference to the search query. | | Spryker\Client\MerchantProductOfferSearch\Plugin\Search | +| MerchantNameSearchConfigExpanderPlugin | Expands facet configuration with the merchant name filter. | | Spryker\Client\MerchantProductOfferSearch\Plugin\Search | +| MerchantProductPageDataExpanderPlugin | Expands the provided `ProductAbstractPageSearch` transfer object's data by merchant names. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\ProductPageSearch | +| MerchantProductPageDataLoaderPlugin | Expands the `ProductPageLoadTransfer` object with merchant data. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\ProductPageSearch | +| MerchantNamesProductAbstractMapExpanderPlugin | Adds merchant names to product abstract search data. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\ProductPageSearch | +| MerchantReferencesProductAbstractsMapExpanderPlugin | Adds merchant references to product abstract search data. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\ProductPageSearch | +| DefaultProductOfferReferenceStrategyPlugin | Sets the default selected product offer in PDP for a concrete product. It selects the first product offer in the list. | ProductViewProductOfferExpanderPlugin | Spryker\Client\ProductOfferStorage\Plugin\ProductOfferStorage | +| ProductOfferReferenceStrategyPlugin | Sets selected product offer in `ProductConcreteTransfer` if one is already selected on PDP. | ProductViewProductOfferExpanderPlugin | Spryker\Client\ProductOfferStorage\Plugin\ProductOfferStorage | +| ProductViewProductOfferExpanderPlugin | Adds product offer data to `ProductViewTransfer` when a retrieving product. | | Spryker\Client\ProductOfferStorage\Plugin\ProductStorage | +| ProductOfferValidityProductOfferPostCreatePlugin | Creates product offer validity dates after the product offer is created. | | Spryker\Zed\ProductOfferValidity\Communication\Plugin\ProductOffer | +| ProductOfferValidityProductOfferPostUpdatePlugin | Updates product offer validity dates after the product offer is updated. | | Spryker\Zed\ProductOfferValidity\Communication\Plugin\ProductOffer | +| ProductOfferValidityProductOfferExpanderPlugin | Expands product offer data with validity dates when the product offer is fetched. | | Spryker\Zed\ProductOfferValidity\Communication\Plugin\ProductOffer | +| ProductOfferValidityConsole | Updates product offers to have the `isActive` flag to be `false` where their validity date is not current anymore. | | Spryker\Zed\ProductOfferValidity\Communication\Console | +| MerchantProductOfferStorageMapperPlugin | Maps Merchant foreign key of `ProductOffer` transfer object to Merchant Id `ProductOfferStorage` transfer object. | | Spryker\Zed\MerchantProductOfferStorage\Communication\Plugin\ProductOfferStorage | +| MerchantProductOfferProductConcretePageMapExpanderPlugin | Expands the provided `PageMap` transfer object with related merchant references. | | Spryker\Zed\MerchantProductOfferSearch\Communication\Plugin\ProductPageSearch | +| MerchantProductOfferShipmentTypeStorageFilterPlugin | Filters out `ProductOfferShipmentTypeCollectionTransfer.productOfferShipmentTypes` with product offers with inactive merchants | Requires `ProductOfferShipmentTypeCollectionTransfer.productOfferShipmentTypes.productOffer` to be set. | Spryker\Zed\MerchantProductOfferStorage\Communication\Plugin\ProductOfferShipmentTypeStorage | + +**src/Pyz/Client/Catalog/CatalogDependencyProvider.php** + +```php +|list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function createCatalogSearchQueryExpanderPlugins(): array + { + return [ + new MerchantReferenceQueryExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\Search\Dependency\Plugin\QueryExpanderPluginInterface>|list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function createSuggestionQueryExpanderPlugins(): array + { + return [ + new MerchantReferenceQueryExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Client\Search\Dependency\Plugin\QueryExpanderPluginInterface>|list<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface> + */ + protected function getProductConcreteCatalogSearchQueryExpanderPlugins(): array + { + return [ + new MerchantReferenceQueryExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/Search/SearchDependencyProvider.php** + +```php + + */ + protected function createSearchConfigExpanderPlugins(Container $container): array + { + $searchConfigExpanderPlugins = parent::createSearchConfigExpanderPlugins($container); + $searchConfigExpanderPlugins[] = new MerchantNameSearchConfigExpanderPlugin(); + + return $searchConfigExpanderPlugins; + } +} +``` + +**src/Pyz/Client/SearchElasticsearch/SearchElasticsearchDependencyProvider.php** + +```php + + */ + protected function getSearchConfigExpanderPlugins(Container $container): array + { + return [ + new MerchantNameSearchConfigExpanderPlugin(), + ]; + } +} +``` + +
    src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php + +```php + + */ + protected function getProductOfferListActionViewDataExpanderPlugins(): array + { + return [ + new MerchantProductOfferListActionViewDataExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferGuiExtension\Dependency\Plugin\ProductOfferTableExpanderPluginInterface> + */ + protected function getProductOfferTableExpanderPlugins(): array + { + return [ + new MerchantProductOfferTableExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferGuiExtension\Dependency\Plugin\ProductOfferViewSectionPluginInterface> + */ + public function getProductOfferViewSectionPlugins(): array + { + return [ + new MerchantProductOfferViewSectionPlugin(), + new ProductOfferValidityProductOfferViewSectionPlugin(), + ]; + } +} +``` + +
    + +
    src/Pyz/Zed/ProductPageSearch/ProductPageSearchDependencyProvider.php + +```php + + */ + protected function getDataExpanderPlugins(): array + { + $dataExpanderPlugins = []; + $dataExpanderPlugins[MerchantProductOfferSearchConfig::PLUGIN_PRODUCT_MERCHANT_DATA] = new MerchantProductPageDataExpanderPlugin(); + + return $dataExpanderPlugins; + } + + /** + * @return list<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataLoaderPluginInterface> + */ + protected function getDataLoaderPlugins(): array + { + return [ + new MerchantProductPageDataLoaderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductAbstractMapExpanderPluginInterface> + */ + protected function getProductAbstractMapExpanderPlugins(): array + { + return [ + new MerchantNamesProductAbstractMapExpanderPlugin(), + new MerchantReferencesProductAbstractsMapExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductConcretePageMapExpanderPluginInterface> + */ + protected function getConcreteProductMapExpanderPlugins(): array + { + return [ + new MerchantProductOfferProductConcretePageMapExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferReferenceStrategyPlugins(): array + { + return [ + new ProductOfferReferenceStrategyPlugin(), + new DefaultProductOfferReferenceStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + return [ + new ProductViewProductOfferExpanderPlugin(), + ]; + } +} +``` + +
    src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php + +```php + + */ + protected function getProductOfferPostCreatePlugins(): array + { + return [ + new ProductOfferValidityProductOfferPostCreatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferPostUpdatePluginInterface> + */ + protected function getProductOfferPostUpdatePlugins(): array + { + return [ + new ProductOfferValidityProductOfferPostUpdatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferExpanderPluginInterface> + */ + protected function getProductOfferExpanderPlugins(): array + { + return [ + new ProductOfferValidityProductOfferExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new ProductOfferValidityConsole(), + ]; + + return $commands; + } +} +``` + +**src/Pyz/Zed/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageMapperPlugins(): array + { + return [ + new MerchantProductOfferStorageMapperPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferShipmentTypeStorage/ProductOfferShipmentTypeStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferShipmentTypeStorageFilterPlugins(): array + { + return [ + new MerchantProductOfferShipmentTypeStorageFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following is true: +- The default product offer is given when retrieving product concrete data. +- The validity data is saved when saving a product offer. +- Merchant and Product Offer Validity sections exist on the product offer view page in `ProductOfferGui`. +- The merchant column is in the Product Offers list, in `ProductOfferGui`. +- The console command invalidates expired product offers and reactivates product offers that are within their validity dates. + +When a merchant gets updated or published, or when a product offer gets published, created, or updated, the corresponding product abstracts get updated in the catalog search pages. + +It means the following: +1. If a merchant gets deactivated, `ProductAbstract` of abstract products that were on the catalog search only because they had a product offer from that merchant get removed. +2. If a product offer gets created, the related `ProductAbstract` that was unavailable on catalog search gets available now. + +{% endinfo_block %} + +### 7) Configure navigation + +1. Add the product offers section to the marketplace section of `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + + + Offers + product-offer-gui + list + index + + + + +``` + +2. Execute the following command: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure that, in Marketplace, the **Offers** menu item is displayed. + +{% endinfo_block %} + +### 8) Set up the Back Office products filter by merchants + +Overwrite `ProductOfferGuiConfig::PRODUCT_OFFER_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES` at the project level and add `id-merchant` to the array: + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiConfig.php** + +```php + + */ + protected const PRODUCT_OFFER_TABLE_FILTER_FORM_EXTERNAL_FIELD_NAMES = [ + 'id-merchant', + ]; +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the filter by merchants is available on the `/product-offer-gui/list` page. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace Product Offer feature frontend. + +### Prerequisites + +To start feature integration, integrate the following features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +If already installed, skip this step. + +{% info_block warningBox "Verification" %} + +Verify that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------------|------------------------------------------------------| +| MerchantProductOfferWidget | spryker-shop/merchant-product-offer-widget | +| MerchantProductOfferWidgetExtension | spryker-shop/merchant-product-offer-widget-extension | +| ProductOfferWidget | spryker-shop/product-offer-widget | + +{% endinfo_block %} + +### 2) Add Translations + +1. Append the glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +merchant_product_offer.view_seller,View Seller,en_US +merchant_product_offer.view_seller,Händler ansehen,de_DE +merchant_product_offer.sold_by,Sold by,en_US +merchant_product_offer.sold_by,Verkauft durch,de_DE +product-offer.info.product-offer-inactive.removed,Inactive item %sku% was removed from your shopping cart.,en_US +product-offer.info.product-offer-inactive.removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +product-offer.info.reference.invalid,Product offer reference not found for product with SKU '%sku%'.,en_US +product-offer.info.reference.invalid,Produktangebotsreferenz für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +product-offer.message.not-active-or-approved,"Product offer not active for product with SKU '%sku%'.",en_US +product-offer.message.not-active-or-approved,"Produktangebot ist inaktiv für Produkt mit SKU '%sku%'.",de_DE +merchant_product_offer_widget.merchant_name,Merchant,en_US +merchant_product_offer_widget.merchant_name,Händler,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### 3) Enable controllers + +Register the following route provider on the Storefront: + +| PROVIDER | NAMESPACE | +|-----------------------------------------------|-----------------------------------------------------------| +| MerchantProductOfferWidgetRouteProviderPlugin | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MerchantProductOfferWidgetRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `yves.mysprykershop.com/merchant-product-offer-widget/merchant-product-offers-select` routes is available for `GET` requests. + +{% endinfo_block %} + +### 4) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-----------------------------------|------------------------------------------------------------------------|---------------|----------------------------------------------------| +| MerchantProductOfferWidget | Shows the list of the offers with their prices for a concrete product. | | SprykerShop\Yves\MerchantProductOfferWidget\Widget | +| MerchantProductOffersSelectWidget | Shows the list of product offers for the concrete product. | | SprykerShop\Yves\MerchantProductOfferWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantProductOfferWidget::class, + MerchantProductOffersSelectWidget::class, + ]; + } +} +``` + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +|-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| MerchantProductOfferWidget | Go to a product concrete details page that has product offers and check if the default offer is selected and the widget is displayed. | +| MerchantProductOffersSelectWidget | Make sure that `ProductConcreteAddWidget` renders the product offers list after performing a product search. | + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|----------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| MerchantProductOfferProductQuickAddFormExpanderPlugin | Expands `ProductQuickAddForm` with `product_offer_reference` hidden field. | | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\ProductSearchWidget | + +**src/Pyz/Yves/ProductSearchWidget/ProductSearchWidgetDependencyProvider.php** + +```php + + */ + protected function getProductQuickAddFormExpanderPlugins(): array + { + return [ + new MerchantProductOfferProductQuickAddFormExpanderPlugin(), + ]; + } +} +``` + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|------------------------------------------------------|----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Combined Product Offer Import | | [Combined Product Offer Import integration](/docs/dg/dev/integrate-and-configure/integrate-combined-product-offer-import.html) | +| Marketplace Product Offer Prices | | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Merchant Portal Product Offer Management | | [Install the Marketplace Product Offer Management feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Marketplace Product Offer API | | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | +| Marketplace Product + Marketplace Product Offer | | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | +| Marketplace Product Offer + Cart | | [Install the Marketplace Product Offer + Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html) | +| Marketplace Product Offer + Checkout | | [Install the Marketplace Product Offer + Checkout feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.html) | +| Marketplace Product Offer + Prices | | [Install the Marketplace Product Offer + Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Product Offer + Quick Add to Cart | | [Install the Marketplace Product Offer + Quick Add to Cart feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-prices-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-prices-feature.md new file mode 100644 index 00000000000..81e5d6a323e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-prices-feature.md @@ -0,0 +1,1182 @@ + + +This document describes how to install the [Marketplace Product Offer Prices](/docs/pbc/all/price-management/latest/marketplace/marketplace-product-offer-prices-feature-overview.html) feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Prices | {{page.release_tag}} |[Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | + + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-product-offer-prices:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| PriceProductOffer | spryker/price-product-offer | +| PriceProductOfferDataImport | spryker/price-product-offer-data-import | +| PriceProductOfferGui | spryker/price-product-offer-gui | +| PriceProductOfferStorage | spryker/price-product-offer-storage | +| PriceProductOfferStorageExtension | spryker/price-product-offer-storage-extension | +| PriceProductOfferVolume | spryker/price-product-offer-volume | +| PriceProductOfferVolumeGui | spryker/price-product-offer-volume-gui | + +{% endinfo_block %} + +### 2) Set up the database schema + +1. Adjust the schema definition so that entity changes trigger events: + +**src/Pyz/Zed/PriceProductOffer/Persistence/Propel/Schema/spy_price_product_offer.schema.xml** + +```xml + + + + + + +
    +
    +``` + +2. Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been implemented by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-|-|-| +| spy_price_product_offer | table | created | +| spy_product_concrete_product_offer_price_storage | table | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| PriceProductOffer | class | created | src/Generated/Shared/Transfer/PriceProductOfferTransfer | +| PriceProductOfferCriteria | class | created | src/Generated/Shared/Transfer/PriceProductOfferCriteriaTransfer | +| PriceProductOfferCollection | class | created | src/Generated/Shared/Transfer/PriceProductOfferCollectionTransfer | +| PriceProductStoreCriteria | class | created | src/Generated/Shared/Transfer/PriceProductStoreCriteriaTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| PriceProductCriteria.productOfferReference | property | created | src/Generated/Shared/Transfer/PriceProductCriteriaTransfer | +| PriceProduct.concreteSku | property | created | src/Generated/Shared/Transfer/PriceProductTransfer | +| PriceProductDimension.productOfferReference | property | created | src/Generated/Shared/Transfer/PriceProductDimensionTransfer | +| PriceProductDimension.idProductOffer | property | created | src/Generated/Shared/Transfer/PriceProductDimensionTransfer | +| PriceProductDimension.idPriceProductOffer | property | created | src/Generated/Shared/Transfer/PriceProductDimensionTransfer | +| ProductOffer.prices | property | created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| PriceProductFilterIdentifier.productOfferReference | property | created | src/Generated/Shared/Transfer/PriceProductFilterIdentifierTransfer | +| ProductOfferStorage.price | property | created | src/Generated/Shared/Transfer/ProductOfferStorageTransfer | +| PriceProductFilter.productOfferReference | property | created |src/Generated/Shared/Transfer/PriceProductFilterTransfer | + +{% endinfo_block %} + +### 3) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Configure export to the key-value store (Redis or Valkey) + +To configure export to the key-value store (Redis or Valkey), take the steps in the following section: + +#### Set up event listeners + +{% info_block infoBox %} + +In this step, you enable publishing of table changes - create, edit, delete to `spy_product_concrete_product_offer_price_storage` and synchronization of data to Storage. + +{% endinfo_block %} + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| PriceProductOfferStorageEventSubscriber | Registers listeners that are responsible for publishing Product Offer Prices to storage. | | Spryker\Zed\PriceProductOfferStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new PriceProductOfferStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +Register the synchronization queue and synchronization error queue: + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container) + { + return [ + PriceProductOfferStorageConfig::PRICE_PRODUCT_OFFER_OFFER_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +Set up publisher: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| PriceProductStoreWritePublisherPlugin | Publishes product offer prices data by update events from the `spy_price_product_store` table. | | Spryker\Zed\PriceProductOfferStorage\Communication\Plugin\Publisher\PriceProductOffer | +| PriceProductOfferPublisherTriggerPlugin | Allows publishing or republishing price product storage data manually. | | Spryker\Zed\PriceProductOfferStorage\Communication\Plugin\Publisher | + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php +getPriceProductOfferStoragePlugins(), + ); + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getPriceProductOfferStoragePlugins(): array + { + return [ + new PriceProductStoreWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new PriceProductOfferPublisherTriggerPlugin(), + ]; + } +} +``` + +#### Set up, regenerate, and resync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| PriceProductOfferSynchronizationDataBulkRepositoryPlugin | Allows synchronizing the entire storage table content into Storage. | | Spryker\Zed\PriceProductOfferStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new PriceProductOfferSynchronizationDataBulkRepositoryPlugin(), + ]; + } +} +``` + +#### Configure the synchronization pool name + +**src/Pyz/Zed/PriceProductOfferStorage/PriceProductOfferStorageConfig.php** + +```php + +An example of the expected data fragment + +```json +[ + { + "id_price_product_offer": "34", + "product_offer_reference": "offer13", + "price_type": "DEFAULT", + "currency": "CHF", + "net_price": "33923", + "gross_price": "37692", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "35", + "product_offer_reference": "offer13", + "price_type": "DEFAULT", + "currency": "EUR", + "net_price": "29498", + "gross_price": "32775", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "36", + "product_offer_reference": "offer13", + "price_type": "ORIGINAL", + "currency": "CHF", + "net_price": "34218", + "gross_price": "38019", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "37", + "product_offer_reference": "offer13", + "price_type": "ORIGINAL", + "currency": "EUR", + "net_price": "29754", + "gross_price": "33060", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "150", + "product_offer_reference": "offer54", + "price_type": "DEFAULT", + "currency": "CHF", + "net_price": "32138", + "gross_price": "35708", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "151", + "product_offer_reference": "offer54", + "price_type": "DEFAULT", + "currency": "EUR", + "net_price": "27945", + "gross_price": "31050", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "152", + "product_offer_reference": "offer54", + "price_type": "ORIGINAL", + "currency": "CHF", + "net_price": "32417", + "gross_price": "36018", + "price_data": "{\"volume_prices\":null}" + }, + { + "id_price_product_offer": "153", + "product_offer_reference": "offer54", + "price_type": "ORIGINAL", + "currency": "EUR", + "net_price": "28188", + "gross_price": "31320", + "price_data": "{\"volume_prices\":null}" + } +] +``` + + + +{% endinfo_block %} + +### 5) Import data + +Prepare your data according to your requirements using the demo data: + +
    data/import/common/common/marketplace/price_product_offer.csv + +```csv +product_offer_reference,price_type,store,currency,value_net,value_gross,price_data.volume_prices +offer2,DEFAULT,DE,EUR,8144,10160,"[{""quantity"":5,""net_price"":6050,""gross_price"":7065}, {""quantity"":10,""net_price"":5045,""gross_price"":6058}, {""quantity"":20,""net_price"":4040,""gross_price"":5052}]" +offer2,DEFAULT,DE,CHF,10866,13184, +offer3,ORIGINAL,DE,EUR,17741,19712, +offer3,DEFAULT,DE,EUR,7741,9712, +offer3,ORIGINAL,DE,CHF,20402,22669, +offer3,DEFAULT,DE,CHF,10402,12669, +offer4,DEFAULT,DE,EUR,27741,29712,"[{""quantity"":6,""net_price"":60500,""gross_price"":70650}, {""quantity"":10,""net_price"":5045,""gross_price"":6058}, {""quantity"":20,""net_price"":4040,""gross_price"":5052}, {""quantity"":25,""net_price"":400,""gross_price"":505}]" +offer4,DEFAULT,DE,CHF,30402,32669, +offer5,ORIGINAL,DE,EUR,15713,17459, +offer5,DEFAULT,DE,EUR,5713,7459, +offer5,DEFAULT,DE,CHF,8070,10000, +offer6,DEFAULT,DE,EUR,25713,27459, +offer6,DEFAULT,DE,CHF,28070,30010, +offer8,DEFAULT,DE,CHF,9832,10925, +offer8,DEFAULT,DE,EUR,475,475,"[{""quantity"":5,""net_price"":150,""gross_price"":1000}, {""quantity"":10,""net_price"":145,""gross_price"":""""}, {""quantity"":20,""net_price"":140,""gross_price"":""""}]" +offer8,ORIGINAL,DE,CHF,12354,13727, +offer8,ORIGINAL,DE,EUR,10743,11936, +offer9,DEFAULT,DE,CHF,9832,10925, +offer9,DEFAULT,DE,EUR,8550,9500, +offer10,DEFAULT,DE,CHF,6392,7102, +offer10,DEFAULT,DE,EUR,5558,6175, +offer10,ORIGINAL,DE,CHF,7866,8740, +offer10,ORIGINAL,DE,EUR,6840,7600, +offer11,DEFAULT,DE,CHF,6883,7648, +offer11,DEFAULT,DE,EUR,5985,6650, +offer12,DEFAULT,DE,CHF,6883,7648, +offer12,DEFAULT,DE,EUR,5985,6650, +offer13,DEFAULT,DE,CHF,33923,37692, +offer13,DEFAULT,DE,EUR,29498,32775, +offer13,ORIGINAL,DE,CHF,34218,38019, +offer13,ORIGINAL,DE,EUR,29754,33060, +offer14,DEFAULT,DE,CHF,33923,37692, +offer14,DEFAULT,DE,EUR,29498,32775, +offer15,DEFAULT,DE,CHF,33923,37692, +offer15,DEFAULT,DE,EUR,29498,32775, +offer16,DEFAULT,DE,CHF,9832,10925, +offer16,DEFAULT,DE,EUR,8550,9500, +offer17,DEFAULT,DE,CHF,34021,37801, +offer17,DEFAULT,DE,EUR,29583,32870, +offer17,ORIGINAL,DE,CHF,35004,38893, +offer17,ORIGINAL,DE,EUR,30438,33820, +offer18,DEFAULT,DE,CHF,35987,39986, +offer18,DEFAULT,DE,EUR,31293,34770, +offer19,DEFAULT,DE,CHF,35987,39986, +offer19,DEFAULT,DE,EUR,31293,34770, +offer20,DEFAULT,DE,CHF,5604,6227, +offer20,DEFAULT,DE,EUR,4873,5415, +offer21,DEFAULT,DE,CHF,4503,5003, +offer21,DEFAULT,DE,EUR,3915,4351, +offer22,DEFAULT,DE,CHF,5900,6555, +offer22,DEFAULT,DE,EUR,5130,5700, +offer22,ORIGINAL,DE,CHF,7866,8740, +offer22,ORIGINAL,DE,EUR,6840,7600, +offer23,DEFAULT,DE,CHF,9832,10925, +offer23,DEFAULT,DE,EUR,8550,9500, +offer24,DEFAULT,DE,CHF,339909,377677, +offer24,DEFAULT,DE,EUR,295573,328415, +offer25,DEFAULT,DE,CHF,34020,37800, +offer25,DEFAULT,DE,EUR,29583,32870, +offer26,DEFAULT,DE,CHF,9832,10925, +offer26,DEFAULT,DE,EUR,8550,9500, +offer27,DEFAULT,DE,CHF,10403,11559, +offer27,DEFAULT,DE,EUR,9046,10051, +offer27,ORIGINAL,DE,CHF,10422,11580, +offer27,ORIGINAL,DE,EUR,9063,10070, +offer28,DEFAULT,DE,CHF,10502,11668, +offer28,DEFAULT,DE,EUR,9132,10146, +offer29,DEFAULT,DE,CHF,25565,28405, +offer29,DEFAULT,DE,EUR,22230,24700, +offer30,DEFAULT,DE,CHF,26277,29195, +offer30,DEFAULT,DE,EUR,22849,25387, +offer31,DEFAULT,DE,CHF,43756,48617, +offer31,DEFAULT,DE,EUR,38048,42275, +offer31,ORIGINAL,DE,CHF,44739,49709, +offer31,ORIGINAL,DE,EUR,38903,43225, +offer32,DEFAULT,DE,CHF,29498,32775, +offer32,DEFAULT,DE,EUR,25650,28500, +offer33,DEFAULT,DE,CHF,4130,4589, +offer33,DEFAULT,DE,EUR,3591,3990, +offer34,DEFAULT,DE,CHF,4819,5354, +offer34,DEFAULT,DE,EUR,4190,4655, +offer34,ORIGINAL,DE,CHF,5113,5681, +offer34,ORIGINAL,DE,EUR,4446,4940, +offer35,DEFAULT,DE,CHF,2950,3278, +offer35,DEFAULT,DE,EUR,2565,2850, +offer36,DEFAULT,DE,CHF,40337,44820, +offer36,DEFAULT,DE,EUR,35076,38973, +offer36,ORIGINAL,DE,CHF,41297,45885, +offer36,ORIGINAL,DE,EUR,35910,39900, +offer37,DEFAULT,DE,CHF,44270,49190, +offer37,DEFAULT,DE,EUR,38496,42773, +offer37,ORIGINAL,DE,CHF,46213,51348, +offer37,ORIGINAL,DE,EUR,40185,44650, +offer38,DEFAULT,DE,CHF,39354,43727, +offer38,DEFAULT,DE,EUR,34221,38023, +offer38,ORIGINAL,DE,CHF,40314,44793, +offer38,ORIGINAL,DE,EUR,35055,38950, +offer39,DEFAULT,DE,CHF,2754,3059, +offer39,DEFAULT,DE,EUR,2394,2660, +offer40,DEFAULT,DE,CHF,2459,2732, +offer40,DEFAULT,DE,EUR,2138,2375, +offer40,ORIGINAL,DE,CHF,2754,3059, +offer40,ORIGINAL,DE,EUR,2394,2660, +offer41,DEFAULT,DE,CHF,30500,33889, +offer41,DEFAULT,DE,EUR,26522,29469, +offer42,DEFAULT,DE,CHF,29249,32499, +offer42,DEFAULT,DE,EUR,25434,28260, +offer43,DEFAULT,DE,CHF,17698,19665, +offer43,DEFAULT,DE,EUR,15390,17100, +offer43,ORIGINAL,DE,CHF,18682,20758, +offer43,ORIGINAL,DE,EUR,16245,18050, +offer44,DEFAULT,DE,CHF,16715,18572, +offer44,DEFAULT,DE,EUR,14535,16150, +offer45,DEFAULT,DE,CHF,15732,17480, +offer45,DEFAULT,DE,EUR,13680,15200, +offer46,DEFAULT,DE,CHF,15633,17370, +offer46,DEFAULT,DE,EUR,13594,15105, +offer47,DEFAULT,DE,CHF,15535,17261,"[{""quantity"":4,""net_price"":null,""gross_price"":36500}, {""quantity"":7,""net_price"":null,""gross_price"":35800}, {""quantity"":17,""net_price"":null,""gross_price"":35200}, {""quantity"":22,""net_price"":null,""gross_price"":30000}]" +offer47,DEFAULT,DE,EUR,13509,15010,"[{""quantity"":4,""net_price"":null,""gross_price"":16500}, {""quantity"":7,""net_price"":null,""gross_price"":15800}, {""quantity"":17,""net_price"":null,""gross_price"":15200}]" +offer47,ORIGINAL,DE,CHF,16869,18743, +offer47,ORIGINAL,DE,EUR,14668,16299, +offer48,DEFAULT,DE,CHF,10206,11341,"[{""quantity"":3,""net_price"":40500,""gross_price"":40650}, {""quantity"":9,""net_price"":40450,""gross_price"":40580}, {""quantity"":17,""net_price"":40400,""gross_price"":40520}]" +offer48,DEFAULT,DE,EUR,8875,9861,"[{""quantity"":3,""net_price"":10500,""gross_price"":10650}, {""quantity"":9,""net_price"":10450,""gross_price"":10580}, {""quantity"":17,""net_price"":10400,""gross_price"":10520}]" +offer49,DEFAULT,DE,CHF,450,450, +offer49,DEFAULT,DE,CHF,9290,10280, +offer49,DEFAULT,DE,CHF,9300,10290, +offer49,DEFAULT,DE,CHF,9315,10350, +offer49,DEFAULT,DE,EUR,450,450, +offer49,DEFAULT,DE,EUR,8030,8930, +offer49,DEFAULT,DE,EUR,8040,8940, +offer49,DEFAULT,DE,EUR,8100,9000, +offer49,ORIGINAL,DE,CHF,11704,13005, +offer49,ORIGINAL,DE,EUR,10178,11308, +offer50,DEFAULT,DE,CHF,9315,10350, +offer50,DEFAULT,DE,EUR,8100,9000, +offer51,DEFAULT,DE,CHF,6056,6728, +offer51,DEFAULT,DE,EUR,5265,5850, +offer51,ORIGINAL,DE,CHF,7452,8280, +offer51,ORIGINAL,DE,EUR,6480,7200, +offer52,DEFAULT,DE,CHF,6521,7245, +offer52,DEFAULT,DE,EUR,5670,6300, +offer53,DEFAULT,DE,CHF,6521,7245, +offer53,DEFAULT,DE,EUR,5670,6300, +offer54,DEFAULT,DE,CHF,32138,35708, +offer54,DEFAULT,DE,EUR,27945,31050, +offer54,ORIGINAL,DE,CHF,32417,36018, +offer54,ORIGINAL,DE,EUR,28188,31320, +offer55,DEFAULT,DE,CHF,32138,35708, +offer55,DEFAULT,DE,EUR,27945,31050, +offer56,DEFAULT,DE,CHF,32138,35708, +offer56,DEFAULT,DE,EUR,27945,31050, +offer57,DEFAULT,DE,CHF,9315,10350, +offer57,DEFAULT,DE,EUR,8100,9000, +offer58,DEFAULT,DE,CHF,32230,35811, +offer58,DEFAULT,DE,EUR,28026,31140, +offer58,ORIGINAL,DE,CHF,33162,36846, +offer58,ORIGINAL,DE,EUR,28836,32040, +offer59,DEFAULT,DE,CHF,34093,37881, +offer59,DEFAULT,DE,EUR,29646,32940, +offer60,DEFAULT,DE,CHF,34093,37881, +offer60,DEFAULT,DE,EUR,29646,32940, +offer61,DEFAULT,DE,CHF,5309,5899, +offer61,DEFAULT,DE,EUR,4617,5130, +offer62,DEFAULT,DE,CHF,4266,4740, +offer62,DEFAULT,DE,EUR,3709,4122, +offer63,DEFAULT,DE,CHF,5589,6210, +offer63,DEFAULT,DE,EUR,4860,5400, +offer63,ORIGINAL,DE,CHF,7452,8280, +offer63,ORIGINAL,DE,EUR,6480,7200, +offer64,DEFAULT,DE,CHF,9315,10350, +offer64,DEFAULT,DE,EUR,8100,9000, +offer65,DEFAULT,DE,CHF,322019,357799, +offer65,DEFAULT,DE,EUR,280017,311130, +offer66,DEFAULT,DE,CHF,32229,35811, +offer66,DEFAULT,DE,EUR,28026,31140, +offer67,DEFAULT,DE,CHF,9315,10350, +offer67,DEFAULT,DE,EUR,8100,9000, +offer68,DEFAULT,DE,CHF,9855,10951, +offer68,DEFAULT,DE,EUR,8570,9522, +offer68,ORIGINAL,DE,CHF,9873,10971, +offer68,ORIGINAL,DE,EUR,8586,9540, +offer69,DEFAULT,DE,CHF,9949,11054, +offer69,DEFAULT,DE,EUR,8651,9612, +offer70,DEFAULT,DE,CHF,24219,26910, +offer70,DEFAULT,DE,EUR,21060,23400, +offer71,DEFAULT,DE,CHF,24894,27658, +offer71,DEFAULT,DE,EUR,21646,24051, +offer72,DEFAULT,DE,CHF,41453,46058, +offer72,DEFAULT,DE,EUR,36045,40050, +offer72,ORIGINAL,DE,CHF,42384,47093, +offer72,ORIGINAL,DE,EUR,36855,40950, +offer73,DEFAULT,DE,CHF,27945,31050, +offer73,DEFAULT,DE,EUR,24300,27000, +offer74,DEFAULT,DE,CHF,3913,4347, +offer74,DEFAULT,DE,EUR,3402,3780, +offer75,DEFAULT,DE,CHF,4565,5072, +offer75,DEFAULT,DE,EUR,3969,4410, +offer75,ORIGINAL,DE,CHF,4844,5382, +offer75,ORIGINAL,DE,EUR,4212,4680, +offer76,DEFAULT,DE,CHF,2795,3105, +offer76,DEFAULT,DE,EUR,2430,2700, +offer77,DEFAULT,DE,CHF,38214,42461, +offer77,DEFAULT,DE,EUR,33230,36922, +offer77,ORIGINAL,DE,CHF,39123,43470, +offer77,ORIGINAL,DE,EUR,34020,37800, +offer78,DEFAULT,DE,CHF,41940,46601, +offer78,DEFAULT,DE,EUR,36470,40522, +offer78,ORIGINAL,DE,CHF,43781,48645, +offer78,ORIGINAL,DE,EUR,38070,42300, +offer79,DEFAULT,DE,CHF,37283,41426, +offer79,DEFAULT,DE,EUR,32420,36022, +offer79,ORIGINAL,DE,CHF,38192,42435, +offer79,ORIGINAL,DE,EUR,33210,36900, +offer80,DEFAULT,DE,CHF,2609,2898, +offer80,DEFAULT,DE,EUR,2268,2520, +offer81,DEFAULT,DE,CHF,2330,2588, +offer81,DEFAULT,DE,EUR,2025,2250, +offer81,ORIGINAL,DE,CHF,2609,2898, +offer81,ORIGINAL,DE,EUR,2268,2520, +offer82,DEFAULT,DE,CHF,28895,32105, +offer82,DEFAULT,DE,EUR,25126,27918, +offer83,DEFAULT,DE,CHF,27710,30789, +offer83,DEFAULT,DE,EUR,24095,26773, +offer84,DEFAULT,DE,CHF,16767,18630, +offer84,DEFAULT,DE,EUR,14580,16200, +offer84,ORIGINAL,DE,CHF,17699,19665, +offer84,ORIGINAL,DE,EUR,15390,17100, +offer85,DEFAULT,DE,CHF,15835,17595, +offer85,DEFAULT,DE,EUR,13770,15300, +offer86,DEFAULT,DE,CHF,14904,16560, +offer86,DEFAULT,DE,EUR,12960,14400, +offer87,DEFAULT,DE,CHF,14810,16456, +offer87,DEFAULT,DE,EUR,12879,14310, +offer88,DEFAULT,DE,CHF,14717,16353,"[{""quantity"":4,""net_price"":35000,""gross_price"":null}, {""quantity"":7,""net_price"":34500,""gross_price"":null}, {""quantity"":17,""net_price"":34000,""gross_price"":null}, {""quantity"":22,""net_price"":29000,""gross_price"":null}]" +offer88,DEFAULT,DE,EUR,12798,14220,"[{""quantity"":4,""net_price"":15000,""gross_price"":null}, {""quantity"":7,""net_price"":14500,""gross_price"":null}, {""quantity"":17,""net_price"":14000,""gross_price"":null}]" +offer88,ORIGINAL,DE,CHF,15981,17757, +offer88,ORIGINAL,DE,EUR,13896,15441, +offer89,DEFAULT,DE,CHF,9669,10744,"[{""quantity"":2,""net_price"":40050,""gross_price"":40065}, {""quantity"":7,""net_price"":40045,""gross_price"":40058}, {""quantity"":18,""net_price"":40040,""gross_price"":40052}]" +offer89,DEFAULT,DE,EUR,8408,9342,"[{""quantity"":2,""net_price"":10050,""gross_price"":10065}, {""quantity"":7,""net_price"":10045,""gross_price"":10058}, {""quantity"":18,""net_price"":10040,""gross_price"":10052}]" +offer90,DEFAULT,DE,CHF,8797,9775, +offer90,DEFAULT,DE,EUR,7650,8500, +offer91,DEFAULT,DE,CHF,304129,337921, +offer91,DEFAULT,DE,EUR,264460,293845, +offer92,DEFAULT,DE,CHF,30439,33821, +offer92,DEFAULT,DE,EUR,26469,29410, +offer93,DEFAULT,DE,CHF,8797,9775, +offer93,DEFAULT,DE,EUR,7650,8500, +offer94,DEFAULT,DE,CHF,9308,10342, +offer94,DEFAULT,DE,EUR,8094,8993, +offer94,ORIGINAL,DE,CHF,9325,10361, +offer94,ORIGINAL,DE,EUR,8109,9010, +offer95,DEFAULT,DE,CHF,9396,10440, +offer95,DEFAULT,DE,EUR,8171,9078, +offer96,DEFAULT,DE,CHF,22874,25415, +offer96,DEFAULT,DE,EUR,19890,22100, +offer97,DEFAULT,DE,CHF,23511,26122, +offer97,DEFAULT,DE,EUR,20444,22715, +offer98,DEFAULT,DE,CHF,39150,43499, +offer98,DEFAULT,DE,EUR,34043,37825, +offer98,ORIGINAL,DE,CHF,40030,44477, +offer98,ORIGINAL,DE,EUR,34808,38675, +offer99,DEFAULT,DE,CHF,26393,29325, +offer99,DEFAULT,DE,EUR,22950,25500, +offer100,DEFAULT,DE,CHF,3695,4106, +offer100,DEFAULT,DE,EUR,3213,3570,"[{""quantity"":5,""net_price"":150,""gross_price"":1000}, {""quantity"":10,""net_price"":145,""gross_price"":""""}, {""quantity"":20,""net_price"":140,""gross_price"":""""}]" +offer101,DEFAULT,DE,CHF,4312,4790,"[{""quantity"":5,""net_price"":150,""gross_price"":1000}, {""quantity"":10,""net_price"":145,""gross_price"":""""}, {""quantity"":20,""net_price"":140,""gross_price"":""""}]" +offer101,DEFAULT,DE,EUR,3749,4165,"[{""quantity"":5,""net_price"":150,""gross_price"":1000}, {""quantity"":10,""net_price"":145,""gross_price"":""""}, {""quantity"":20,""net_price"":140,""gross_price"":null}]" +offer101,ORIGINAL,DE,CHF,4575,5083, +offer101,ORIGINAL,DE,EUR,3978,4420, +offer102,DEFAULT,DE,CHF,2640,2933, +offer102,DEFAULT,DE,EUR,2295,2550, +offer103,DEFAULT,DE,CHF,36091,40102, +offer103,DEFAULT,DE,EUR,31384,34871, +offer103,ORIGINAL,DE,CHF,36950,41055, +offer103,ORIGINAL,DE,EUR,32130,35700, +offer169,DEFAULT,DE,CHF,31417,34908, +offer169,DEFAULT,DE,EUR,27319,30355, +offer170,DEFAULT,DE,CHF,12805,14227, +offer170,DEFAULT,DE,EUR,11135,12371, +offer170,ORIGINAL,DE,CHF,13197,14663, +offer170,ORIGINAL,DE,EUR,11475,12750, +offer171,DEFAULT,DE,CHF,22508,25009, +offer171,DEFAULT,DE,EUR,19573,21747, +offer172,DEFAULT,DE,CHF,37392,41546, +offer172,DEFAULT,DE,EUR,32515,36127, +offer173,DEFAULT,DE,CHF,22183,24647, +offer173,DEFAULT,DE,EUR,19290,21432, +offer173,ORIGINAL,DE,CHF,22874,25415, +offer173,ORIGINAL,DE,EUR,19890,22100, +offer348,DEFAULT,DE,CHF,15831,17590, +offer348,DEFAULT,DE,EUR,13766,15295, +offer349,DEFAULT,DE,CHF,25391,28212, +offer349,DEFAULT,DE,EUR,22079,24532, +offer350,DEFAULT,DE,CHF,34721,38579, +offer350,DEFAULT,DE,EUR,30192,33547, +offer351,DEFAULT,DE,CHF,21942,24379, +offer351,DEFAULT,DE,EUR,19080,21199, +offer352,DEFAULT,DE,CHF,20243,22493, +offer352,DEFAULT,DE,EUR,17603,19559, +offer353,DEFAULT,DE,CHF,5522,6137, +offer353,DEFAULT,DE,EUR,4802,5336, +offer353,ORIGINAL,DE,CHF,6159,6843, +offer353,ORIGINAL,DE,EUR,5355,5950, +offer354,DEFAULT,DE,CHF,28952,32169, +offer354,DEFAULT,DE,EUR,25176,27973, +offer355,DEFAULT,DE,CHF,28952,32169, +offer355,DEFAULT,DE,EUR,25176,27973, +offer356,DEFAULT,DE,CHF,12199,13554, +offer356,DEFAULT,DE,EUR,10608,11786, +offer357,DEFAULT,DE,CHF,17819,19799, +offer357,DEFAULT,DE,EUR,15495,17216, +offer358,DEFAULT,DE,CHF,3447,3831, +offer358,DEFAULT,DE,EUR,2998,3331, +offer358,ORIGINAL,DE,CHF,4399,4888, +offer358,ORIGINAL,DE,EUR,3825,4250, +offer359,DEFAULT,DE,CHF,23438,26042, +offer359,DEFAULT,DE,EUR,20381,22645, +offer359,ORIGINAL,DE,CHF,23754,26393, +offer359,ORIGINAL,DE,EUR,20655,22950, +offer360,DEFAULT,DE,CHF,39337,43707, +offer360,DEFAULT,DE,EUR,34206,38007, +offer402,DEFAULT,DE,EUR,28000,25000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer403,DEFAULT,DE,EUR,27000,24000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer404,DEFAULT,DE,EUR,26000,23000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer405,DEFAULT,DE,EUR,25000,22000,"[{""quantity"":4,""net_price"":15000,""gross_price"":16500}, {""quantity"":7,""net_price"":14500,""gross_price"":15800}, {""quantity"":15,""net_price"":14000,""gross_price"":15200}]" +offer410,DEFAULT,DE,EUR,20000,17000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer411,DEFAULT,DE,EUR,19000,16000,"[{""quantity"":3,""net_price"":10500,""gross_price"":10650}, {""quantity"":9,""net_price"":10450,""gross_price"":10580}, {""quantity"":17,""net_price"":10400,""gross_price"":10520}]" +offer412,DEFAULT,DE,EUR,18000,15000,"[{""quantity"":2,""net_price"":10050,""gross_price"":10065}, {""quantity"":7,""net_price"":10045,""gross_price"":10058}, {""quantity"":18,""net_price"":10040,""gross_price"":10052}]" +offer413,DEFAULT,DE,EUR,17000,14000,"[{""quantity"":4,""net_price"":null,""gross_price"":16500}, {""quantity"":7,""net_price"":null,""gross_price"":15800}, {""quantity"":17,""net_price"":null,""gross_price"":15200}]" +offer414,DEFAULT,DE,EUR,16000,13000,"[{""quantity"":4,""net_price"":15000,""gross_price"":null}, {""quantity"":7,""net_price"":14500,""gross_price"":null}, {""quantity"":17,""net_price"":14000,""gross_price"":null}]" +offer415,DEFAULT,DE,EUR,15000,12000,"[{""quantity"":3,""net_price"":10500,""gross_price"":10650}, {""quantity"":9,""net_price"":10450,""gross_price"":10580}, {""quantity"":17,""net_price"":10400,""gross_price"":10520}]" +offer416,DEFAULT,DE,EUR,14000,11000,"[{""quantity"":2,""net_price"":10050,""gross_price"":10065}, {""quantity"":7,""net_price"":10045,""gross_price"":10058}, {""quantity"":18,""net_price"":10040,""gross_price"":10052}]" +offer417,DEFAULT,DE,EUR,13000,10000,"[{""quantity"":4,""net_price"":null,""gross_price"":16500}, {""quantity"":7,""net_price"":null,""gross_price"":15800}, {""quantity"":17,""net_price"":null,""gross_price"":15200}, {""quantity"":22,""net_price"":null,""gross_price"":10000}]]" +offer418,DEFAULT,DE,EUR,12000,9000,"[{""quantity"":4,""net_price"":15000,""gross_price"":null}, {""quantity"":7,""net_price"":14500,""gross_price"":null}, {""quantity"":17,""net_price"":14000,""gross_price"":null}, {""quantity"":22,""net_price"":9000,""gross_price"":null}]" +offer402,DEFAULT,DE,CHF,48000,43000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer403,DEFAULT,DE,CHF,47000,42000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer404,DEFAULT,DE,CHF,46000,41000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer405,DEFAULT,DE,CHF,45000,40000,"[{""quantity"":2,""net_price"":150,""gross_price"":165}, {""quantity"":7,""net_price"":145,""gross_price"":158}, {""quantity"":17,""net_price"":140,""gross_price"":152}]" +offer410,DEFAULT,DE,CHF,40000,35000,"[{""quantity"":5,""net_price"":150,""gross_price"":165}, {""quantity"":10,""net_price"":145,""gross_price"":158}, {""quantity"":20,""net_price"":140,""gross_price"":152}]" +offer411,DEFAULT,DE,CHF,39000,34000,"[{""quantity"":3,""net_price"":10500,""gross_price"":10650}, {""quantity"":9,""net_price"":10450,""gross_price"":10580}, {""quantity"":17,""net_price"":10400,""gross_price"":10520}]" +offer412,DEFAULT,DE,CHF,38000,33000,"[{""quantity"":2,""net_price"":10050,""gross_price"":10065}, {""quantity"":7,""net_price"":10045,""gross_price"":10058}, {""quantity"":18,""net_price"":10040,""gross_price"":10052}]" +offer413,DEFAULT,DE,CHF,37000,32000,"[{""quantity"":4,""net_price"":null,""gross_price"":16500}, {""quantity"":7,""net_price"":null,""gross_price"":15800}, {""quantity"":17,""net_price"":null,""gross_price"":15200}]" +offer414,DEFAULT,DE,CHF,36000,31000,"[{""quantity"":4,""net_price"":15000,""gross_price"":null}, {""quantity"":7,""net_price"":14500,""gross_price"":null}, {""quantity"":17,""net_price"":14000,""gross_price"":null}]" +offer416,DEFAULT,DE,CHF,34000,29000,"[{""quantity"":3,""net_price"":10500,""gross_price"":10650}, {""quantity"":9,""net_price"":10450,""gross_price"":10580}, {""quantity"":17,""net_price"":10400,""gross_price"":10520}]" +offer417,DEFAULT,DE,CHF,33000,28000,"[{""quantity"":2,""net_price"":10050,""gross_price"":10065}, {""quantity"":7,""net_price"":10045,""gross_price"":10058}, {""quantity"":18,""net_price"":10040,""gross_price"":10052}]" +offer415,DEFAULT,DE,CHF,35000,30000,"[{""quantity"":4,""net_price"":null,""gross_price"":16500}, {""quantity"":7,""net_price"":null,""gross_price"":15800}, {""quantity"":17,""net_price"":null,""gross_price"":15200}]" +offer418,DEFAULT,DE,CHF,32000,27000,"[{""quantity"":4,""net_price"":15000,""gross_price"":null}, {""quantity"":7,""net_price"":14500,""gross_price"":null}, {""quantity"":17,""net_price"":14000,""gross_price"":null}]" +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| product_offer_reference | ✓ | string | offer1 | Product offer reference that will have these prices | +| price_type | ✓ | string | DEFAULT | Sets price type to product offer price | +| store | ✓ | string | DE | Store in which this price will be shown | +| currency | ✓ | string | EUR | Currency of the price | +| value_net | ✓ | number | 8144 | Price of product offer when price mode === NET | +| value_gross | ✓ | number | 10160 | Price of product offer when price mode === GROSS | +| price_data.volume_prices | optional | string | `"[{""quantity"":5,""net_price"":6050,""gross_price"":7065}, {""quantity"":10,""net_price"":5045,""gross_price"":6058}, {""quantity"":20,""net_price"":4040,""gross_price"":5052}]"` | JSON representation of the volume prices, each entry in the JSON array contains quantity at which `gross_price/net_price` will be activated | + +Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| PriceProductOfferDataImportPlugin | Imports Product Offer Price data | | Spryker\Zed\PriceProductOfferDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + +src/Pyz/Zed/ProductOffer/ProductOfferDependencyProvider.php + +```php + + */ + protected function getProductOfferPostCreatePlugins(): array + { + return [ + new PriceProductOfferProductOfferPostCreatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferPostUpdatePluginInterface> + */ + protected function getProductOfferPostUpdatePlugins(): array + { + return [ + new PriceProductOfferProductOfferPostUpdatePlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOfferExtension\Dependency\Plugin\ProductOfferExpanderPluginInterface> + */ + protected function getProductOfferExpanderPlugins(): array + { + return [ + new PriceProductOfferProductOfferExpanderPlugin(), + ]; + } +} +``` + + + +
    +src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPriceDimensionQueryCriteriaPlugins(): array + { + return array_merge(parent::getPriceDimensionQueryCriteriaPlugins(), [ + new PriceProductOfferPriceDimensionQueryCriteriaPlugin(), + ]); + } + + /** + * @return array<\Spryker\Zed\PriceProductExtension\Dependency\Plugin\PriceDimensionConcreteSaverPluginInterface> + */ + protected function getPriceDimensionConcreteSaverPlugins(): array + { + return [ + new PriceProductOfferPriceDimensionConcreteSaverPlugin(), + ]; + } + + /** + * @return array<\Spryker\Service\PriceProductExtension\Dependency\Plugin\PriceProductDimensionExpanderStrategyPluginInterface> + */ + protected function getPriceProductDimensionExpanderStrategyPlugins(): array + { + return [ + new PriceProductOfferPriceProductDimensionExpanderStrategyPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductExtension\Dependency\Plugin\PriceProductValidatorPluginInterface> + */ + protected function getPriceProductValidatorPlugins(): array + { + return [ + new PriceProductVolumeValidatorPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/PriceProductStorage/PriceProductStorageDependencyProvider.php** + +```php + + */ + public function getPriceDimensionStorageReaderPlugins(): array + { + return [ + new PriceProductOfferStorageDimensionPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\PriceProductStorageExtension\Dependency\Plugin\PriceProductFilterExpanderPluginInterface> + */ + protected function getPriceProductFilterExpanderPlugins(): array + { + return [ + new PriceProductOfferStorageFilterExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageExpanderPlugins(): array + { + return [ + new PriceProductOfferStorageExpanderPlugin(), + ]; + } + + /** + * @return \Spryker\Client\ProductOfferStorageExtension\Dependency\Plugin\ProductOfferStorageCollectionSorterPluginInterface + */ + protected function createProductOfferStorageCollectionSorterPlugin(): ProductOfferStorageCollectionSorterPluginInterface + { + return new LowestPriceProductOfferStorageCollectionSorterPlugin(); + } +} + +``` + +**src/Pyz/Service/PriceProduct/PriceProductDependencyProvider.php** + +```php + + */ + protected function getPriceProductDecisionPlugins(): array + { + return array_merge([ + new PriceProductOfferPriceProductFilterPlugin(), + new PriceProductOfferVolumeFilterPlugin(), + ], parent::getPriceProductDecisionPlugins()); + } +} +``` + +
    +src/Pyz/Zed/PriceProductOffer/PriceProductOfferDependencyProvider.php + +```php + + */ + protected function getPriceProductOfferExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductOfferExtension\Dependency\Plugin\PriceProductOfferExpanderPluginInterface> + */ + protected function getPriceProductOfferExpanderPlugins(): array + { + return [ + new PriceProductOfferVolumeExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductOfferExtension\Dependency\Plugin\PriceProductOfferValidatorPluginInterface> + */ + protected function getPriceProductOfferValidatorPlugins(): array + { + return [ + new PriceProductOfferVolumeValidatorPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Client/PriceProductOfferStorage/PriceProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getPriceProductOfferStoragePriceExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + public function getProductOfferViewSectionPlugins(): array + { + return [ + new PriceProductOfferProductOfferViewSectionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following: +- When a product offer is selected, its price is shown as the current price. +- Product offer prices are saved when a product concrete and product offer prices are saved. +- Product offers are first sorted by the lowest price when fetched as a collection with product concrete. +- When a product offer with a volume price is selected, and the selected quantity is over a certain threshold, its volume price is shown instead of the normal price. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| -------------- | -------------------------------- | ----------------- | +| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..75fa229173a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md @@ -0,0 +1,81 @@ +This document describes how to install the Marketplace Product Offer + Promotions & Discounts feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/latest/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-discount-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|-----------------------------------------| +| ProductOfferDiscountConnector | vendor/product-offer-discount-connector | + +{% endinfo_block %} + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------------|--------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------| +| ProductOfferReferenceDecisionRulePlugin | Checks if an item's product offer reference matches the discount's condition. | | Spryker\Zed\ProductOfferDiscountConnector\Communication\Plugin\Discount | +| ProductOfferReferenceDiscountableItemCollectorPlugin | Collects discountable items from the given quote by items' product offer references. | | Spryker\Zed\ProductOfferDiscountConnector\Communication\Plugin\Discount | + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + + */ + protected function getDecisionRulePlugins(): array + { + return array_merge(parent::getDecisionRulePlugins(), [ + new ProductOfferReferenceDecisionRulePlugin(), + ]); + } + + /** + * @return list<\Spryker\Zed\DiscountExtension\Dependency\Plugin\DiscountableItemCollectorPluginInterface> + */ + protected function getCollectorPlugins(): array + { + return array_merge(parent::getCollectorPlugins(), [ + new ProductOfferReferenceDiscountableItemCollectorPlugin(), + ]); + } +} +``` + +{% info_block warningBox "Verification" %} + +1. [Create a discount](/docs/pbc/all/discount-management/latest/base-shop/manage-in-the-back-office/create-discounts.html) and define its condition as a query string with a `product-offer` field. +2. Add a product offer defined in the discount you've created to cart. + Make sure that the discount has been applied to the cart. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..7792cfba5f9 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md @@ -0,0 +1,163 @@ + + +This document describes how to install the Marketplace Product Offer + Quick Add to Cart feature. + +## Install feature frontend + +Follow the steps below to install the Marketplace Product Offer + Quick Add to Cart feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Quick Add to Cart | {{page.release_tag}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | + +### Add translations + +Add translations as follows: + +1. Append glossary for the feature: + +```yaml +quick-order.input-label.merchant,Merchant,en_US +quick-order.input-label.merchant,Händler,de_DE +merchant_search_widget.all_merchants,All Merchants,en_US +merchant_search_widget.all_merchants,Alle Händler,de_DE +merchant_search_widget.merchants,Merchants,en_US +merchant_search_widget.merchants,Händler,de_DE + +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------------- | ------------------ | ------------- | --------------- | +| MerchantSearchWidget | Provides a widget for rendering a merchant filter. | | SprykerShop\Yves\MerchantSearchWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantSearchWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that Quick Order Page contains "Merchant Selector" dropdown with all active merchants. + +{% endinfo_block %} + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|------------|----------------|---------------|----------------| +| MerchantQuickOrderItemMapperPlugin | Maps merchant reference to `QuickOrderItem` transfer. | | SprykerShop\Yves\ProductOfferWidget\Plugin\QuickOrderPage | +| ProductOfferQuickOrderItemMapperPlugin | Maps product offer reference to `QuickOrderItem` transfer. | | SprykerShop\Yves\ProductOfferWidget\Plugin\QuickOrderPage | +| MerchantProductOfferQuickOrderItemExpanderPlugin | Expands the provided `ItemTransfer` with the `ProductOfferStorage` merchant reference. | | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\QuickOrderPage | +| MerchantProductOfferQuickOrderFormColumnPlugin | Adds a new `Merchants` column to the quick order. | | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\QuickOrderPage | +| MerchantProductOfferQuickOrderFormExpanderPlugin | Expands `QuickOrderItemEmbeddedForm` with the `product_offer_reference` form field. | | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\QuickOrderPage | + + +**src/Pyz/Yves/QuickOrderPage/QuickOrderPageDependencyProvider.php** + +```php + + */ + protected function getQuickOrderItemMapperPlugins(): array + { + return [ + new MerchantQuickOrderItemMapperPlugin(), + new ProductOfferQuickOrderItemMapperPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\QuickOrderPageExtension\Dependency\Plugin\QuickOrderFormColumnPluginInterface> + */ + protected function getQuickOrderFormColumnPlugins(): array + { + return [ + new MerchantProductOfferQuickOrderFormColumnPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\QuickOrderPageExtension\Dependency\Plugin\QuickOrderFormExpanderPluginInterface> + */ + protected function getQuickOrderFormExpanderPlugins(): array + { + return [ + new MerchantProductOfferQuickOrderFormExpanderPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\QuickOrderPageExtension\Dependency\Plugin\QuickOrderItemExpanderPluginInterface> + */ + protected function getQuickOrderItemTransferExpanderPlugins(): array + { + return [ + new MerchantProductOfferQuickOrderItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can see `Merchant` additional column, which contains the corresponding merchants product offers after product search by name or sku. + +Make sure that selected product offer reference is transferred to Cart and SoldBy section contains a proper merchant. + +Make sure that selected merchant reference affects search results while retrieving for product by name or sku. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md new file mode 100644 index 00000000000..21ac940e9a0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-offer-service-points-feature.md @@ -0,0 +1,54 @@ + + +This document describes how to install the Marketplace Product Offer + Service Points feature. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Service Points feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Product Offer + Service Points | {{page.release_tag}} | [Install the Product Offer + Service Points feature](/docs/pbc/all/offer-management/latest/unified-commerce/install-features/install-the-product-offer-service-points-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|-----------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------| +| MerchantProductOfferServiceCollectionStorageFilterPlugin | Filters product offer services collection by active and approved merchants. | | Spryker\Zed\MerchantProductOfferStorage\Communication\Plugin\ProductOfferServicePointStorage | + +**src/Pyz/Zed/ProductOfferServicePointStorage/ProductOfferServicePointStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferServiceCollectionStorageFilterPlugins(): array + { + return [ + new MerchantProductOfferServiceCollectionStorageFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the only product offer service with active and approved merchant are published into the key-value store (Redis or Valkey). + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-cart-feature.md new file mode 100644 index 00000000000..beb9be3005c --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-cart-feature.md @@ -0,0 +1,58 @@ + + +This document describes how to install the Marketplace Product Options + Cart feature. + + +## Install feature core + +Follow the steps below to install the Marketplace Product Options + Cart feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductOptionCartPreCheckPlugin | Checks the approval status for the merchant product options. | None | Spryker\Zed\MerchantProductOption\Communication\Plugin\Cart | + + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getCartPreCheckPlugins(Container $container): array + { + return [ + new MerchantProductOptionCartPreCheckPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that validation works correctly with merchants product options in the cart and displays an error in case if any is not approved. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-checkout-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-checkout-feature.md new file mode 100644 index 00000000000..70a8cc6fb47 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-checkout-feature.md @@ -0,0 +1,58 @@ + + +This document describes how to install the Marketplace Product Options + Checkout feature. + + +## Install feature core + +Follow the steps below to install the Marketplace Product Options + Checkout feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductOptionCheckoutPreConditionPlugin | Checks the approval status for merchant product option groups. | None | Spryker\Zed\MerchantProductOption\Communication\Plugin\Checkout | + + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + + */ + protected function getCheckoutPreConditions(Container $container) + { + return [ + new MerchantProductOptionCheckoutPreConditionPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that validation works correctly for merchants product options with not approved status and checkout process does not go to next step. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-feature.md new file mode 100644 index 00000000000..e882d00af3a --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-options-feature.md @@ -0,0 +1,388 @@ +This document describes how to install the [Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/marketplace-product-options-feature-overview.html). + +## Install feature core + +Follow the steps below to install the Marketplace Product Options feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product Options | {{page.release_tag}} | [Install the Product Options feature](https://spryker.atlassian.net/wiki/spaces/DOCS/pages/903151851/EMPTY+Product+Options+Feature+Integration+-+ongoing) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-product-options:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOption | vendor/spryker/merchant-product-option | +| MerchantProductOptionDataImport | vendor/spryker/merchant-product-option-data-import | +| MerchantProductOptionGui | vendor/spryker/merchant-product-option-gui | +| MerchantProductOptionStorage | vendor/spryker/merchant-product-option-storage | + +{% endinfo_block %} + + +### 2) Set up the database schema and transfer objects + +1. Adjust the schema definition to guarantee a unique identifier for each option group: + +**src/Pyz/Zed/DataImport/Persistence/Propel/Schema/spy_product_option.schema.xml** + +```xml + + + + + + + + + +
    +
    + +``` + +2. Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + + +{% info_block warningBox "Verification" %} + +Verify that the following changes have been implemented by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-|-|-| +| spy_merchant_product_option_group | table | created | +| spy_product_option_group.key | column | created | + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| - | - | - | - | +| MerchantProductOptionGroup | class | created | src/Generated/Shared/Transfer/MerchantProductOptionGroupTransfer | +| MerchantProductOptionGroupCriteria | class | created | src/Generated/Shared/Transfer/MerchantProductOptionGroupCriteriaTransfer | +| MerchantProductOptionGroupCollection | class | created | src/Generated/Shared/Transfer/MerchantProductOptionGroupCollectionTransfer | +| MerchantProductOptionGroupConditions | class | created | src/Generated/Shared/Transfer/MerchantProductOptionGroupConditionsTransfer | +| Pagination | class | created | src/Generated/Shared/Transfer/PaginationTransfer | +| ProductOptionGroup.merchant | attribute | created | src/Generated/Shared/Transfer/ProductOptionGroupTransfer | + +{% endinfo_block %} + +### 3) Add translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```yaml +checkout.item.option.pre.condition.validation.error.exists,"Product option of %name% is not available anymore.",en_US +checkout.item.option.pre.condition.validation.error.exists,"Produktoption von %name% ist nicht mehr verfügbar.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### 4) Import data + +1. Prepare your data according to your requirements using the demo data: + +**data/import/common/common/marketplace/merchant_product_option_group.csv** + +```csv +product_option_group_key,merchant_reference,approval_status,merchant_sku +insurance,MER000001,approved,spr-425453 +``` + +2. Add the `product_option_group_key` column to `product_option.csv`: + +**data/import/common/common/product_option.csv** + +```csv +abstract_product_skus,option_group_id,tax_set_name,group_name_translation_key,group_name.en_US,group_name.de_DE,option_name_translation_key,option_name.en_US,option_name.de_DE,sku,product_option_group_key +ilyakubanov marked this conversation as resolved. +"012,013,014,015,016,017,018,019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,084,085,086,087,088,089,090,091,092,093,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,200,201,202,203,204,205",1,Entertainment Electronics,product.option.group.name.warranty,Warranty,Garantie,product.option.warranty_1,One (1) year limited warranty,Ein (1) Jahr begrenzte Garantie,OP_1_year_warranty,warranty +,1,Entertainment Electronics,product.option.group.name.warranty,Warranty,Garantie,product.option.warranty_2,Two (2) year limited warranty,Zwei (2) Jahre begrenzte Garantie,OP_2_year_warranty,warranty +,1,Entertainment Electronics,product.option.group.name.warranty,Warranty,Garantie,product.option.warranty_3,Three (3) year limited warranty,Drei (3) Jahre begrenzte Garantie,OP_3_year_warranty,warranty +"001,002,003,004,005,006,007,008,009,010,011,012,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,083,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214",2,Entertainment Electronics,product.option.group.name.insurance,Insurance,Versicherungsschutz,product.option.insurance,Two (2) year insurance coverage,Zwei (2) Jahre Versicherungsschutz,OP_insurance,insurance +"001,002,003,004,005,006,007,008,009,010,018,019,020,021,022,023,024,025,026,027,028,029,030,031,032,033,034,035,036,037,038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,054,055,056,057,058,059,060,061,062,063,064,065,066,067,068,069,070,071,084,085,086,087,088,089,090,091,092,093,094,095,096,097,098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210",3,Entertainment Electronics,product.option.group.name.gift_wrapping,Gift wrapping,Geschenkverpackung,product.option.gift_wrapping,Gift wrapping,Geschenkverpackung,OP_gift_wrapping,wrapping +``` + +#### Register data importer + +Add merchant product option group import entities to import configuration for all needed application stores: + +**data/import/local/full_EU.yml** + +```yml +version: 0 + +actions: + - data_entity: merchant-product-option-group + source: data/import/common/common/marketplace/merchant_product_option_group.csv +``` + + +**data/import/local/full_US.yml** + +```yml +version: 0 + +actions: + - data_entity: merchant-product-option-group + source: data/import/common/common/marketplace/merchant_product_option_group.csv +``` + + +2. To enable the data import, register the following plugin: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductOptionGroupDataImportPlugin | Validates Merchant reference and inserts merchant product option groups into the datanbase. | None | Spryker\Zed\MerchantProductOptionDataImport\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +filterByName($dataSet[self::KEY_GROUP_NAME_TRANSLATION_KEY]) + ->filterByKey($dataSet[self::KEY_PRODUCT_OPTION_GROUP_KEY]) + ->findOneOrCreate(); + $productOptionGroupEntity + ->setName($dataSet[static::KEY_OPTION_NAME_TRANSLATION_KEY]) + ->setActive($this->isActive($dataSet, $productOptionGroupEntity)) + ->setFkTaxSet($dataSet[TaxSetNameToIdTaxSetStep::KEY_TARGET]) + ->save(); + ... + } +} +``` + +4. Import data: + +```bash +console data:import merchant-product-option-group +``` + +{% info_block warningBox "Verification" %} + +Make sure that the Merchant Product Option Group data is in the `spy_merchant_product_option_group` table. + +{% endinfo_block %} + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductOptionListActionViewDataExpanderPlugin | Expands data with the merchant collection. | None | Spryker\Zed\MerchantGui\Communication\Plugin\ProductOptionGui | +| MerchantProductOptionListTableQueryCriteriaExpanderPlugin | Extends `QueryCriteriaTransfer` with the merchant product option group criteria for expanding default query running in `ProductOptionListTable`. | None | Spryker\Zed\MerchantProductOptionGui\Communication\Plugin\ProductOptionGui | +| MerchantProductOptionGroupExpanderPlugin | Expands a product option group data with the related merchant. | None | Spryker\Zed\MerchantProductOption\Communication\Plugin\ProductOption | +| MerchantProductOptionCollectionFilterPlugin | Filters merchant product option group transfers by approval status and excludes the product options with the not approved merchant groups. | None | Spryker\Zed\MerchantProductOptionStorage\Communication\Plugin\ProductOptionStorage | +| MerchantProductOptionGroupWritePublisherPlugin | Retrieves all abstract product IDs using the merchant product option group IDs from the event transfers. | None | Spryker\Zed\MerchantProductOptionStorage\Communication\Plugin\Publisher\MerchantProductOption | +| MerchantProductOptionGroupPublisherTriggerPlugin | Allows publishing or republishing merchant product option group storage data manually. | None | Spryker\Zed\MerchantProductOptionStorage\Communication\Plugin\Publisher | + + +
    +src/Pyz/Zed/ProductOption/ProductOptionDependencyProvider.php + +```php + + */ + protected function getProductOptionListActionViewDataExpanderPlugins(): array + { + return [ + new MerchantProductOptionListActionViewDataExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOptionGuiExtension\Dependency\Plugin\ProductOptionListTableQueryCriteriaExpanderPluginInterface> + */ + protected function getProductOptionListTableQueryCriteriaExpanderPlugins(): array + { + return [ + new MerchantProductOptionListTableQueryCriteriaExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductOptionExtension\Dependency\Plugin\ProductOptionGroupExpanderPluginInterface> + */ + protected function getProductOptionGroupExpanderPlugins(): array + { + return [ + new MerchantProductOptionGroupExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/ProductOptionStorage/ProductOptionStorageDependencyProvider.php** + +```php + + */ + protected function getProductOptionCollectionFilterPlugins(): array + { + return [ + new MerchantProductOptionCollectionFilterPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/Publisher/PublisherDependencyProvider.php + +```php +getMerchantProductOptionStoragePlugins(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getMerchantProductOptionStoragePlugins(): array + { + return [ + new MerchantProductOptionGroupWritePublisherPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherTriggerPluginInterface> + */ + protected function getPublisherTriggerPlugins(): array + { + return [ + new MerchantProductOptionGroupPublisherTriggerPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure the following is true: +- Merchants can create product option groups and values in the Merchant Portal. +- Merchant product option information is shown on a product details page when it's approved and active. +- Merchant product option information is displayed in the cart, checkout, and user account. +- Merchant product options are a part of the marketplace or merchant order, and all totals are calculated correctly. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| -------------- | -------------------------------- | ----------------- | +| Marketplace Product Options + Cart | | [Install the Marketplace Product Options + Cart feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.html) | +| Marketplace Product Options + Checkout | | [Install the Marketplace Product Options + Checkout feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..596cc973497 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md @@ -0,0 +1,117 @@ +This document describes how to install the Marketplace Product + Quick Add to Cart feature. + +## Install feature frontend + +Follow the steps below to install the Marketplace Product + Quick Add to Cart feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------|-----------------|----------------| +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| +| Quick Add to Cart | {{page.release_tag}} | [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | + +### Add translations + +Add translations as follows: + +1. Append glossary for the feature: + +```yaml +merchant_search_widget.all_merchants,All Merchants,en_US +merchant_search_widget.all_merchants,Alle Händler,de_DE +merchant_search_widget.merchants,Merchants,en_US +merchant_search_widget.merchants,Händler,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------------- | ------------------ | ------------- | --------------- | +| MerchantSearchWidget | Provides a widget to render a merchants filter. | | SprykerShop\Yves\MerchantSearchWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantSearchWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that Quick Order Page contains "Merchant Selector" dropdown with all active merchants. + +Make sure that selected merchant reference affects search results while retrieving for product by name or sku. + +{% endinfo_block %} + +### Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------|---------------|---------------|-----------------| +| MerchantProductQuickOrderItemExpanderPlugin | Expands the provided `ItemTransfer` with merchant reference.| | SprykerShop\Yves\MerchantProductWidget\Plugin\QuickOrderPage | + +**src/Pyz/Yves/QuickOrderPage/QuickOrderPageDependencyProvider.php** + +```php + + */ + protected function getQuickOrderItemTransferExpanderPlugins(): array + { + return [ + new MerchantProductQuickOrderItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that merchant related products are added to cart with the corresponding merchant in "Sold By" section. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-promotions-discounts-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-promotions-discounts-feature.md new file mode 100644 index 00000000000..6d8ac50d5f0 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-promotions-discounts-feature.md @@ -0,0 +1,134 @@ + + +This document describes how to install the Marketplace Promotions & Discounts feature. + +## Install feature core + +Follow the steps below to install the Marketplace Promotions & Discounts feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| - | - | - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | +| Promotions & Discounts | {{page.release_tag}} | [Install the Promotions & Discounts feature](https://github.com/spryker-feature/promotions-discounts) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-promotions-discounts:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| - | - | +| DiscountMerchantSalesOrder | vendor/spryker/discount-merchant-sales-order | +| DiscountMerchantSalesOrderGui | vendor/spryker/discount-merchant-sales-order-gui | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| ------------- | ------------- | --------- | +| MerchantSalesOrderMerchantUserGuiConfig::getMerchantSalesOrderDetailExternalBlocksUrls() | Introduces list of urls of order detail page configuration. | src/Pyz/Zed/MerchantSalesOrderMerchantUserGui/MerchantSalesOrderMerchantUserGuiConfig.php | + +**src/Pyz/Zed/MerchantSalesOrderMerchantUserGui/MerchantSalesOrderMerchantUserGuiConfig.php** + +```php + + */ + public function getMerchantSalesOrderDetailExternalBlocksUrls(): array + { + return [ + 'discount' => '/discount-merchant-sales-order-gui/merchant-sales-order/list', + ]; + } +} +``` + +### 3) Set up the transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| - | - | - | - | +| CalculatedDiscount.fkSalesOrderItem | property | created | src/Generated/Shared/Transfer/CalculatedDiscountTransfer | + +{% endinfo_block %} + +### 4) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 5) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| - | - | - | - | +| DiscountMerchantOrderFilterPlugin | Removes none merchant-related discounts from merchant orders. | | Spryker\Zed\DiscountMerchantSalesOrder\Communication\Plugin | + +**src/Pyz/Zed/MerchantSalesOrder/MerchantSalesOrderDependencyProvider.php** + +```php + + */ + protected function getMerchantOrderFilterPlugins(): array + { + return [ + new DiscountMerchantOrderFilterPlugin(), + ]; + } +} +``` + +--- + + +{% info_block warningBox "Verification" %} + +Make sure that correct discounts are applied to the merchant orders when viewing them in the Back Office. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-return-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-return-management-feature.md new file mode 100644 index 00000000000..62467ca98d8 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-return-management-feature.md @@ -0,0 +1,1033 @@ + + + +This document describes how to install the [Marketplace Return Management](/docs/pbc/all/return-management/latest/marketplace/marketplace-return-management-feature-overview.html) feature. + +## Install feature core + +Follow the steps below to install the Marketplace Return Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Return Management | {{page.release_tag}} | [Install the Return Management feature](/docs/pbc/all/return-management/latest/base-shop/install-and-upgrade/install-the-return-management-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### 1) Install required modules using Composer + +```bash +composer require spryker-feature/marketplace-return-management:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------- | ------------------- | +| MerchantSalesReturn | spryker/merchant-sales-return | +| MerchantSalesReturnGui | spryker/merchant-sales-return-gui | +| MerchantSalesReturnMerchantUserGui | spryker/merchant-sales-return-merchant-user-gui | + +{% endinfo_block %} + +### 2) Set up the configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| ------------- | ------------ | ------------ | +| MainMerchantStateMachine | Adjust `MainMerchantStateMachine` to have the `MerchantReturn` and `MerchantRefund` subprocesses. | config/Zed/StateMachine/Merchant/MainMerchantStateMachine.xml | +| MerchantDefaultStateMachine | Adjust `MerchantDefaultStateMachine` to have the `MerchantReturn` and `MerchantRefund` subprocesses. | config/Zed/StateMachine/Merchant/MerchantDefaultStateMachine.xml | +| MerchantRefund | Add configuration for `MerchantRefund` subprocess in the `Subprocess` folder for the Merchant StateMachine configuration. | config/Zed/StateMachine/Merchant/Subprocess/MerchantRefund.xml | +| MerchantReturn | Add configuration for the `MerchantReturn` subprocess in the `Subprocess` folder for the Merchant StateMachine configuration. | config/Zed/StateMachine/Merchant/Subprocess/MerchantReturn.xml | +| MarketplacePayment | Adjust OMS configuration for the `MarketplacePayment` to have the `MarketplaceReturn` and `MarketplaceRefund` subprocesses. | config/Zed/oms/MarketplacePayment01.xml | +| MarketplaceRefund | Add configuration for the `MarketplaceRefund` subprocess in the `MarketplaceSubprocess` folder for the OMS configuration. | config/Zed/oms/MarketplaceSubprocess/MarketplaceRefund01.xml | +| MarketplaceReturn | Add configuration for `MarketplaceReturn` subprocess in the `MarketplaceSubprocess` folder for the OMS configuration. | config/Zed/oms/MarketplaceSubprocess/MarketplaceReturn01.xml | + +**config/Zed/StateMachine/Merchant/MainMerchantStateMachine.xml** + +```xml + + + + + + MerchantReturn + MerchantRefund + + + + + + + +``` + +**config/Zed/StateMachine/Merchant/MerchantDefaultStateMachine.xml** + +```xml + + + + + + MerchantReturn + MerchantRefund + + + + + + + +``` + +**config/Zed/StateMachine/Merchant/Subprocess/MerchantRefund.xml** + +```xml + + + + + + + + + + + delivered + refunded + refund + + + + returned + refunded + refund + + + + + + + + + +``` + +
    +config/Zed/StateMachine/Merchant/Subprocess/MerchantReturn.xml + +```xml + + + + + + + + + + + + + + shipped + waiting for return + start-return + + + + delivered + waiting for return + start-return + + + + waiting for return + returned + execute-return + + + + waiting for return + return canceled + cancel-return + + + + return canceled + shipped to customer + ship-return + + + + shipped to customer + delivered + deliver-return + + + + + + + + + + + + + +``` + +
    + +**config/Zed/oms/MarketplacePayment01.xml** + +```xml + + + + + + MarketplaceReturn + MarketplaceRefund + + + + + + + +``` + +**config/Zed/oms/MarketplaceSubprocess/MarketplaceRefund01.xml** + +```xml + + + + + + + + + + + delivered + refunded + refund + + + + returned + refunded + refund + + + + + + + + + +``` + +
    +config/Zed/oms/MarketplaceSubprocess/MarketplaceReturn01.xml + +```xml + + + + + + + + + + + + + + shipped by merchant + waiting for return + start-return + + + + delivered + waiting for return + start-return + + + + waiting for return + returned + execute-return + + + + waiting for return + return canceled + cancel-return + + + + return canceled + shipped to customer + ship-return + + + + shipped to customer + delivered + deliver-return + + + + + + + + + + + + + +``` + +
    + +### 3) Set up database schema and transfer objects + +Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------------|--------|---------| +| spy_sales_return.merchant_reference | column | created | + +Make sure that the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------------------|-----------|---------|-------------------------------------------------------------| +| MerchantOrderCriteria.orderItemUuids | attribute | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| MerchantOrderCriteria.withOrder | attribute | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| MerchantOrderCriteria.withItems | attribute | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| MerchantOrderCriteria.merchantOrderReferences | attribute | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| Order.items | attribute | created | src/Generated/Shared/Transfer/MerchantOrderCriteriaTransfer | +| Return.merchantOrders | attribute | created | src/Generated/Shared/Transfer/ReturnTransfer | + +{% endinfo_block %} + +### 4) Add translations + +1. Append glossary for the feature: + +**data/import/common/common/glossary.csv** + +```csv +merchant_sales_return.message.items_from_different_merchant_detected,"There are products from different merchants in your order. You can only return products from one merchant at a time.",en_US +merchant_sales_return.message.items_from_different_merchant_detected,"Diese Bestellung enthält Artikel von verschiedenen Händlern. Sie können nur Artikel von einem Händler zur selben Zeit zurückschicken.",de_DE +merchant_sales_return_widget.create_form.different_merchants_info,There are products from different merchants in your order. You can only return products from one merchant at a time.,en_US +merchant_sales_return_widget.create_form.different_merchants_info,Diese Bestellung enthält Artikel von verschiedenen Händlern. Sie können nur Artikel von einem Händler zur selben Zeit zurückschicken.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. + +{% endinfo_block %} + +### 5) Set up behavior + +1. Enable the following behaviors by adding and registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------------| +| MerchantReturnPreCreatePlugin | Sets merchant reference to the return transfer. | | Spryker\Zed\MerchantSalesReturn\Communication\Plugin\SalesReturn | +| MerchantReturnCreateRequestValidatorPlugin | Checks if each item in the `itemTransfers` has the same merchant reference. | | Spryker\Zed\MerchantSalesReturn\Communication\Plugin | +| MerchantReturnExpanderPlugin | Expands `Return` transfer object with merchant orders. | | Spryker\Zed\MerchantSalesReturn\Communication\Plugin\SalesReturn | +| CancelReturnMarketplaceOrderItemCommandPlugin | Triggers 'cancel-return' event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| DeliverReturnMarketplaceOrderItemCommandPlugin | Triggers 'deliver-return' event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| ExecuteReturnMarketplaceOrderItemCommandPlugin | Triggers 'execute-return' event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| RefundMarketplaceOrderItemCommandPlugin | Triggers 'refund' event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| ReturnMerchantOrderItemCommandPlugin | Triggers 'start-return' event on a marketplace order item, initiate return. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| ShipReturnMarketplaceOrderItemCommandPlugin | Triggers 'ship-return' event on a marketplace order item. | | Pyz\Zed\MerchantOms\Communication\Plugin\Oms | +| MerchantSalesReturnCreateFormHandlerPlugin | Expands `ReturnCreateForm` form with merchant product sub-forms, form data with merchant product data and `ReturnCreateRequestTransfer` with submitted merchant product items. | | Spryker\Zed\MerchantSalesReturnGui\Communication\Plugin\SalesReturnGui | + +**src/Pyz/Zed/SalesReturn/SalesReturnDependencyProvider.php** + +```php + + */ + protected function getReturnExpanderPlugins(): array + { + return [ + new MerchantReturnExpanderPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/MerchantOms/Communication/Plugin/Oms/AbstractTriggerOmsEventCommandPlugin.php + +```php +getFactory()->getMerchantSalesOrderFacade()->findMerchantOrderItem( + (new MerchantOrderItemCriteriaTransfer()) + ->setIdMerchantOrderItem($stateMachineItemTransfer->getIdentifier()) + ); + + if (!$merchantOrderItemTransfer) { + return; + } + + $result = $this->getFactory() + ->getOmsFacade() + ->triggerEventForOneOrderItem($this->getEventName(), $merchantOrderItemTransfer->getIdOrderItem()); + + if ($result === null) { + throw new LogicException(sprintf( + 'Sales Order Item #%s transition for event "%s" has not happened.', + $merchantOrderItemTransfer->getIdOrderItem(), + $this->getEventName() + )); + } + } +} + +``` + +
    + +**src/Pyz/Zed/MerchantOms/Communication/Plugin/Oms/CancelReturnMarketplaceOrderItemCommandPlugin.php** + +```php + +src/Pyz/Zed/MerchantOms/Communication/Plugin/Oms/ReturnMerchantOrderItemCommandPlugin.php + +```php +getFactory()->getMerchantSalesOrderFacade()->findMerchantOrderItem( + (new MerchantOrderItemCriteriaTransfer()) + ->setIdOrderItem($orderItem->getIdSalesOrderItem()) + ); + + if (!$merchantOrderItemTransfer) { + return []; + } + + $merchantOmsTriggerRequestTransfer = (new MerchantOmsTriggerRequestTransfer()) + ->setMerchantOmsEventName(static::EVENT_START_RETURN) + ->addMerchantOrderItem($merchantOrderItemTransfer); + + $transitionCount = $this->getFacade()->triggerEventForMerchantOrderItems($merchantOmsTriggerRequestTransfer); + + if ($transitionCount === 0) { + throw new LogicException(sprintf( + 'Merchant Order Item #%s transition for event "%s" has not happened.', + $merchantOrderItemTransfer->getIdMerchantOrderItem(), + static::EVENT_START_RETURN + )); + } + + $itemTransfer = (new ItemTransfer()) + ->setIdSalesOrderItem($orderItem->getIdSalesOrderItem()); + + $this->getFactory()->getSalesReturnFacade()->setOrderItemRemunerationAmount($itemTransfer); + + return []; + } +} + +``` + + + +**src/Pyz/Zed/MerchantOms/Communication/Plugin/Oms/ShipReturnMarketplaceOrderItemCommandPlugin.php** + +```php + +src/Pyz/Zed/MerchantOms/MerchantOmsDependencyProvider.php + +```php + new RefundMarketplaceOrderItemCommandPlugin(), + 'MarketplaceReturn/CancelReturnForOrderItem' => new CancelReturnMarketplaceOrderItemCommandPlugin(), + 'MarketplaceReturn/DeliverReturnForOrderItem' => new DeliverReturnMarketplaceOrderItemCommandPlugin(), + 'MarketplaceReturn/ExecuteReturnForOrderItem' => new ExecuteReturnMarketplaceOrderItemCommandPlugin(), + 'MarketplaceReturn/ShipReturnForOrderItem' => new ShipReturnMarketplaceOrderItemCommandPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + public function provideCommunicationLayerDependencies(Container $container): Container + { + $container = parent::provideCommunicationLayerDependencies($container); + + $container = $this->addSalesReturnFacade($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + public function addSalesReturnFacade(Container $container): Container + { + $container->set(static::FACADE_SALES_RETURN, function (Container $container) { + return $container->getLocator()->salesReturn()->facade(); + }); + + return $container; + } +} +``` + + + +
    +src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extendCommandPlugins($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendCommandPlugins(Container $container): Container + { + $container->extend(static::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new ReturnMerchantOrderItemCommandPlugin(), 'MerchantOms/ReturnOrderItem'); + + return $commandCollection; + }); + + return $container; + } +} +``` + +
    + +**src/Pyz/Zed/MerchantOms/Communication/MerchantOmsCommunicationFactory.php** + +```php +getProvidedDependency(MerchantOmsDependencyProvider::FACADE_SALES_RETURN); + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify `MerchantReturnPreCreatePlugin`, make sure that when you create a return for merchant order items, the row in `spy_sales_return`, which identifies the new return, has the `spy_sales_return.merchant_reference` field populated. + +To verify `MerchantReturnCreateRequestValidatorPlugin`, make sure that you can't create a return for items from different merchants. + +To verify `MerchantReturnExpanderPlugin`, make sure that you can see merchant order references on the return details page. + +Make sure that when you create and process a return for merchant order items, its statuses are synced between state machines in the following way: + +| MARKETPLACE SM | DEFAULT MERCHANT SM | MAIN MERCHANT SM | +|------------------|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| +| Used by an operator | Used by a third-party merchant. | Used by a main merchant. | +| start-return → waiting for return | start-return (can be started by entering the Return Flow, not manually executable) → waiting for return | start-return (can be started by entering the Return Flow, not manually executable) → waiting for return | +| execute return → returned | execute return (manually executable) → returned | execute return (manually executable) → returned | +| refund → refunded | refund (manually executable) → refunded | refund (manually executable) → refunded | +| cancel return → return canceled | cancel return (manually executable) → return canceled | cancel return (manually executable) → return canceled | +| ship return → shipped to customer | ship return (manually executable) → shipped to customer | ship return (manually executable) → shipped to customer | +| deliver return → delivered | deliver return (manually executable) → delivered | deliver return (manually executable) → delivered | + + +{% endinfo_block %} + +**src/Pyz/Zed/SalesReturnGui/SalesReturnGuiDependencyProvider.php** + +```php + + */ + protected function getReturnCreateTemplatePlugins(): array + { + return [ + new MerchantSalesReturnCreateFormHandlerPlugin(), + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +Make sure when you open any order on `http://backoffice.de.spryker.local/sales-return-gui` containing products from different merchants, you see the message: "You can only return products from one merchant at a time". + +{% endinfo_block %} + +2. Add config for `SalesReturn`: + +**src/Pyz/Zed/SalesReturn/SalesReturnConfig.php** + +```php + + + + + + + My Returns + merchant-sales-return-merchant-user-gui + index + index + 1 + + + + + + + + Returns + sales-return-gui + index + index + 1 + + + + +``` + +Execute the following command: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that in the navigation menu of the Back Office, you can see the menu item **Returns** in the **Marketplace** section and **My Returns** in the **Sales** section. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Marketplace return management feature frontend. + +### 1) Install required modules using Сomposer + +```bash +composer require spryker-feature/marketplace-return-management:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------- | ------------------- | +| MerchantSalesReturnWidget | spryker-shop/merchant-sales-return-widget | + +{% endinfo_block %} + +### 2) Set up widgets + +Set up widgets as follows: + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------- | -------------- | ------ | -------------- | +| MerchantSalesReturnCreateFormWidgetCacheKeyGeneratorStrategyPlugin | Disables widget cache for for the `MerchantSalesReturnCreateFormWidget`. | | SprykerShop\Yves\MerchantSalesReturnWidget\Plugin | +| MerchantSalesReturnCreateFormWidget | Provides "Create Return" only with the items of one merchant order at a time and only for the returnable items. | | SprykerShop\Yves\MerchantSalesReturnWidget\Widget | + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantSalesReturnCreateFormWidget::class, + ]; + } + /** + * @return array<\SprykerShop\Yves\ShopApplicationExtension\Dependency\Plugin\WidgetCacheKeyGeneratorStrategyPluginInterface> + */ + protected function getWidgetCacheKeyGeneratorStrategyPlugins(): array + { + return [ + new MerchantSalesReturnCreateFormWidgetCacheKeyGeneratorStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have been registered by adding the respective code snippets to a Twig template: + +| WIDGET | VERIFICATION | +| ---------------- | ----------------- | +| MerchantSalesReturnCreateFormWidget |
    • 1. To go through the Return flow in the same way as now, on the **Order Details** page, click **Create Return**.
    • 2. Go to the **Create Return** page and create a return only with the items of one merchant order at a time and only for returnable items
    . | + +{% endinfo_block %} + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | - | +| Marketplace Return Management API | | [Install the Marketplace Return Management Glue API](/docs/pbc/all/return-management/latest/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-cart-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-cart-feature.md new file mode 100644 index 00000000000..2f6c66e5ae7 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-cart-feature.md @@ -0,0 +1,86 @@ +This document describes how to install the Marketplace Shipment + Cart feature. + +## Install feature core + +Follow the steps below to install the Marketplace Shipment + Cart feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Cart | {{page.release_tag}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantShipmentItemExpanderPlugin | Expands Cart items with merchant shipment | None | Spryker\Zed\MerchantShipment\Communication\Plugin\Cart | +| MerchantShipmentQuoteExpanderPlugin | Expands Quote items with merchant shipment | None | Spryker\Zed\MerchantShipment\Communication\Plugin\Quote | + +**src/Pyz/Zed/Cart/CartDependencyProvider.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new MerchantShipmentItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteExpanderPlugins(): array + { + return [ + new MerchantShipmentQuoteExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that merchant sold items have a merchant reference attached to their selected shipment. + +Make sure that correct merchant reference is saved in `spy_sales_shipment`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-checkout-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-checkout-feature.md new file mode 100644 index 00000000000..c978de3a84e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shipment-checkout-feature.md @@ -0,0 +1,55 @@ +This document describes how to install the Marketplace Shipment + Checkout feature. + +## Install feature core + +Follow the steps below to install the Marketplace Shipment + Checkout feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------- | ------ | -----------| +| Marketplace Shipment | {{page.release_tag}} | [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/latest/marketplace/install-features/install-marketplace-shipment-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------ | ----------- | ----- | ------------ | +| MerchantShipmentCheckoutPageStepEnginePreRenderPlugin | Copies all item merchant references to their attached shipment merchant reference before rendering checkout steps. | | Spryker\Yves\MerchantShipment\Plugin\CheckoutPage | + +
    +src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php + +```php + + */ + protected function getCheckoutPageStepEnginePreRenderPlugins(): array + { + return [ + new MerchantShipmentCheckoutPageStepEnginePreRenderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that during the checkout steps, items and their shipments have the same merchant reference attached to them. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shopping-lists-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shopping-lists-feature.md new file mode 100644 index 00000000000..a967a5e5ba1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-shopping-lists-feature.md @@ -0,0 +1,511 @@ +This document describes how to install the Marketplace Shopping Lists feature. + +## Install feature core + +Follow the steps below to install the Marketplace Shopping Lists feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Shopping Lists | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-shopping-lists:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferShoppingListWidget | spryker-shop/product-offer-shopping-list-widget | +| ProductOfferShoppingList | spryker/product-offer-shopping-list | +| ProductOfferShoppingListDataImport | spryker/product-offer-shopping-list-data-import | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| MerchantProductCriteria.productConcreteSkus | property | Created | src/Generated/Shared/Transfer/MerchantProductCriteriaTransfer | +| MerchantProductCriteria.productAbstractIds | property | Created | src/Generated/Shared/Transfer/MerchantProductCriteriaTransfer | +| MerchantProductCriteria.productOfferIds | property | Created | src/Generated/Shared/Transfer/MerchantProductCriteriaTransfer | +| ProductOffer.productOfferReference | property | Created | src/Generated/Shared/Transfer/ProductOfferTransfer | +| ProductOfferCollection.productOffers | property | Created | src/Generated/Shared/Transfer/ProductOfferCollectionTransfer | +| ProductOfferCollection.items | property | Created | src/Generated/Shared/Transfer/ShoppingListItemCollectionTransfer | +| ProductOfferCriteria.productOfferReferences | property | Created | src/Generated/Shared/Transfer/ProductOfferCriteriaTransfer | +| ProductConcrete.sku | property | Created | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| ProductConcreteStorage.merchantReference | property | Created | src/Generated/Shared/Transfer/ProductConcreteStorageTransfer | +| ProductView.merchantReference | property | Created | src/Generated/Shared/Transfer/ProductViewTransfer | +| ShoppingListItem | class | Created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItem.merchantReference | property | Created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItem.productOfferReference | property | Created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItem.idProductAbstract | property | Created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItem.sku | property | Created | src/Generated/Shared/Transfer/ShoppingListItemTransfer | +| ShoppingListItemCollection | class | Created | src/Generated/Shared/Transfer/ShoppingListItemCollectionTransfer | +| ShoppingListItemCollection.items | property | Created | src/Generated/Shared/Transfer/ShoppingListItemCollectionTransfer | +| ShoppingListPreAddItemCheckResponse | class | Created | src/Generated/Shared/Transfer/ShoppingListPreAddItemCheckResponseTransfer | + +{% endinfo_block %} + +Run the command to initiate the changes: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} + +Ensure that the following changes have occurred in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------------------------------------| ------ | ------- | +| spy_shopping_list_item.product_offer_reference | column | created | + +{% endinfo_block %} + +### 3) Add translations + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```csv +shopping_list.pre.check.product_offer,Product Offer is not found.,en_US +shopping_list.pre.check.product_offer,Produktangebot wurde nicht gefunden.,de_DE +shopping_list.pre.check.product_offer.approved,Product Offer is not approved.,en_US +shopping_list.pre.check.product_offer.approved,Product Offer ist nicht genehmigt.,de_DE +shopping_list.pre.check.product_offer.is_active,Product Offer is not active.,en_US +shopping_list.pre.check.product_offer.is_active,Produktangebot ist inaktiv.,de_DE +shopping_list.pre.check.product_offer.store_invalid,Product Offer is not equal to the current Store.,en_US +shopping_list.pre.check.product_offer.store_invalid,Das Angebot gleicht nicht dem aktuellen Shop.,de_DE +shopping_list.pre.check.product_merchant_inactive,Merchant is inactive.,en_US +shopping_list.pre.check.product_merchant_inactive,Der Händler ist nicht aktiv.,de_DE +shopping_list.pre.check.product_merchant_not_approved,Merchant is not approved.,en_US +shopping_list.pre.check.product_merchant_not_approved,Der Händler ist nicht bestätigt.,de_DE +shopping_list.pre.check.product.store_invalid,Product is not equal to the current Store.,en_US +shopping_list.pre.check.product.store_invalid,Das Produkt gleicht nicht dem aktuellen Shop.,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Configure export to the key-value store (Redis or Valkey) + +Make changes to the `PublisherDependencyProvider`: + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getProductConcreteStorageCollectionExpanderPlugins(): array + { + return [ + new MerchantProductConcreteStorageCollectionExpanderPlugin(), + ]; + } +} +``` + +### 5) Import data + +Prepare import data according to your requirements using demo data: + +**data/import/common/common/marketplace/product_offer_shopping_list_item.csv** + +```csv +shopping_list_item_key,product_offer_reference +shopping-list-item-key-38,offer2 +shopping-list-item-key-39,offer402 +shopping-list-item-key-40,offer91 +shopping-list-item-key-41,offer404 +shopping-list-item-key-42,offer9 +shopping-list-item-key-43,offer51 +``` + +#### Set up configuration + +Add importer configuration: + +**data/import/local/full_EU.yml** + +```yml +version: 0 + +actions: + - data_entity: product-offer-shopping-list-item + source: data/import/common/common/marketplace/product_offer_shopping_list_item.csv +``` + +Adjust the data import configuration: + +**src/Pyz/Zed/DataImport/DataImportConfig.php** + +```php + + */ + public function getFullImportTypes(): array + { + return [ + ProductOfferShoppingListDataImportConfig::IMPORT_TYPE_PRODUCT_OFFER_SHOPPING_LIST_ITEM, + ]; + } +} +``` + +#### Enable required data import command + +Modify the `ConsoleDependencyProvider.php` file to enable the data import command: + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ProductOfferShoppingListDataImportConfig::IMPORT_TYPE_PRODUCT_OFFER_SHOPPING_LIST_ITEM), + ]; + + return $commands; + } +} +``` + +#### Set up behavior + +Enable the following behavior: + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ShoppingListMerchantWidget::class, + ShoppingListProductOfferWidget::class, + ProductOfferShoppingListWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +| ----------------- |---------------| +| ShoppingListMerchantWidget | Go to the product page. Add concrete product to the shopping list, then login to the admin page. Find a merchant that owns a concrete product and change its state. Refresh shopping list page - item will change its status to 'Currently not available.' | +| ShoppingListProductOfferWidget | Go to the product page containing product offers. Select a product offer. Then open another tab and login to the merchant portal with the merchant's credentials who owns the previously selected product offer, in our case `michele@sony-experts.com`. Find product offer by SKU `offer96`. Change offer availability. Refresh shopping list page - item will change its status to 'Currently not available.' | +| ProductOfferShoppingListWidget | Go to the product page and verify that the merchants' product offers are displayed and items are added to the shopping list with correct merchant names. | + +{% endinfo_block %} + +### Set up behavior + +Enable the following behaviors in Client by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferShoppingListItemMapperPlugin | Maps Product Offer data to `ShoppingListItemTransfer`. | None | Spryker\Client\ProductOfferShoppingList\Plugin\ShoppingList | +| ProductOfferShoppingListItemToItemMapperPlugin | Maps `ShoppingListItemTransfer` transfer properties to `ItemTransfer` transfer properties. | None | Spryker\Client\ProductOfferShoppingList\Plugin\ShoppingList | +| MerchantShoppingListItemToItemMapperPlugin | Maps `ShoppingListItemTransfer` transfer properties to `ItemTransfer` transfer properties. | None | Spryker\Client\Merchant\Plugin\ShoppingList | + +**src/Pyz/Client/ShoppingList/ShoppingListDependencyProvider.php** + +```php + + + */ + protected function getAddItemShoppingListItemMapperPlugins(): array + { + return [ + new ProductOfferShoppingListItemMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\ShoppingListExtension\Dependency\Plugin\ShoppingListItemToItemMapperPluginInterface> + */ + protected function getShoppingListItemToItemMapperPlugins(): array + { + return [ + new ProductOfferShoppingListItemToItemMapperPlugin(), + new MerchantShoppingListItemToItemMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +| ----------------- |----------------------| +| ProductOfferShoppingListItemMapperPlugin | Go to the product details page and select product offer. Add product offer to a shopping list. Open the shopping list and verify that the correct merchant and price are stored. | +| ProductOfferShoppingListItemToItemMapperPlugin | Go to a product details page and add a product offer to the shopping list. Open the shopping list and add the item to the cart. Make sure that the correct offer with its price are added to the cart. | +| MerchantShoppingListItemToItemMapperPlugin | Go to the product details page and add the marketplace product to the shopping list. Open the shopping list and add the item to the cart. Make sure that the correct merchant and price are added to the cart. | + +{% endinfo_block %} + +Enable the following behaviors in Zed by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferShoppingListAddItemPreCheckPlugin | Checks if a product offer exists and refers to the required product. | None | Spryker\Zed\ProductOfferShoppingList\Communication\Plugin\ShoppingList; | +| MerchantProductAddItemPreCheckPlugin | Ensures that the merchant owning the marketplace product is active and approved. | | Spryker\Zed\MerchantProduct\Communication\Plugin\ShoppingList | +| MerchantProductConcreteStorageCollectionExpanderPlugin | Expands `ProductConcreteStorage` transfers with the merchant reference. | None | Spryker\Zed\MerchantProductStorage\Communication\Plugin\ProductStorage | +| MerchantProductOfferAddItemPreCheckPlugin | Ensures that the merchant owning the product offer is active and approved. | | Spryker\Zed\MerchantProductOffer\Communication\Plugin\ShoppingList | +| MerchantProductOfferShoppingListItemBulkPostSavePlugin | Expands a shopping list item that has a product offer with the merchant reference. | | Spryker\Zed\MerchantProductOffer\Communication\Plugin\ShoppingList | +| MerchantProductOfferShoppingListItemCollectionExpanderPlugin | Expands a `ShoppingListItemCollectionTransfer` with merchant data of the product offer. | None | Spryker\Zed\MerchantProductOffer\Communication\Plugin\ShoppingList | +| MerchantProductShoppingListItemBulkPostSavePlugin | Expands a shopping list item with product concrete and its merchant reference. | | Spryker\Zed\MerchantProduct\Communication\Plugin\ShoppingList | +| MerchantProductShoppingListItemCollectionExpanderPlugin | Expands a `ShoppingListItemCollectionTransfer` with merchant data of the marketplace product. | None | Spryker\Zed\MerchantProduct\Communication\Plugin\ShoppingListExtension | +| ProductOfferItemToShoppingListItemMapperPlugin | Maps `ItemTransfer.productOfferReference` transfer property to `ShoppingListItemTransfer.productOfferReference` transfer property. | None | Spryker\Zed\ProductOfferShoppingList\Communication\Plugin\ShoppingList | + +**src/Pyz/Zed/ShoppingList/ShoppingListDependencyProvider.php** + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new ProductOfferShoppingListAddItemPreCheckPlugin(), + new ShoppingListItemProductConcreteHasValidStoreAddItemPreCheckPlugin(), + new MerchantProductOfferAddItemPreCheckPlugin(), + new MerchantProductAddItemPreCheckPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ShoppingListItemCollectionExpanderPluginInterface> + */ + protected function getItemCollectionExpanderPlugins(): array + { + return [ + new MerchantProductOfferShoppingListItemCollectionExpanderPlugin(), + new MerchantProductShoppingListItemCollectionExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ItemToShoppingListItemMapperPluginInterface> + */ + protected function getItemToShoppingListItemMapperPlugins(): array + { + return [ + new ProductOfferItemToShoppingListItemMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ShoppingListExtension\Dependency\Plugin\ShoppingListItemBulkPostSavePluginInterface> + */ + protected function getShoppingListItemBulkPostSavePlugins(): array + { + return [ + new MerchantProductShoppingListItemBulkPostSavePlugin(), + new MerchantProductOfferShoppingListItemBulkPostSavePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following plugins were registered: + +| MODULE | TEST | +| ----------------- |-----------------| +| ProductOfferShoppingListAddItemPreCheckPlugin | Go to a product page containing product offers. Select a product offer. Then open another tab and login to the merchant portal with the merchant's credentials who owns the previously selected product offer, in our case `michele@sony-experts.com`. Find product offer by SKU `offer96`. By changing the product offer by further pressing "Add to shopping list" on the PDP tab, check that product offer validation is enabled. The following cases may be checked:
    1. Offer is not found.
    2. Product offer does not belong to current store.
    3. The product offer is not active.
    4. The product offer is not approved.
    | +| ShoppingListItemProductConcreteHasValidStoreAddItemPreCheckPlugin | Go to the product page and select a concrete product. Then open another tab and log into the Back Office. Find a concrete product selected on PDP by a concrete SKU. Uncheck the current store option on the product edit page. Press "Add to shopping list" on the PDP tab to check that the product store validation is enabled. An error message will appear. | +| MerchantProductOfferAddItemPreCheckPlugin | Go to the product page containing product offers. Select a product offer. Then open another tab and log into the Back office, and find the merchant who owns the previously selected product offer, in our case `michele@sony-experts.com`. By changing the product offer by further pressing "Add to shopping list" on the PDP tab, check that product offer merchant validation is enabled. The following cases may be checked:
    1. The merchant of the product offer is not active
    2. The merchant of the product offer is not approved
    | +| MerchantProductAddItemPreCheckPlugin | Go to the product page and select a concrete product. Then open another tab and log into the admin page. Find the merchant that owns the concrete product and change its state. Press "Add to shopping list" on the PDP tab to check that product merchant status validation is enabled. The following cases may be checked:
    1. The merchant that owns the product is not active
    2. The merchant that owns the product is not approved.
    | +| MerchantProductOfferShoppingListItemCollectionExpanderPlugin | Go to the product page, select the merchant product offer, and add it to the shopping list. Open the shopping list and ensure the "Sold By" field shows the merchant that owns the corresponding product offer. | +| MerchantProductShoppingListItemCollectionExpanderPlugin | Go to the product page, select a marketplace product, and add it to the shopping list. Open the shopping list, and ensure that the "Sold By" field shows the merchant that owns the product. | +| ProductOfferItemToShoppingListItemMapperPlugin | Go to the products page, select a merchant product offer and add it to the cart. Open the cart and press "Add to shopping list." Ensure that the shopping list contains the selected product offers from the correct merchant. | +| MerchantProductShoppingListItemBulkPostSavePlugin | Go to the product details page and add a marketplace product to the shopping list. Open the shopping list and add the item to the cart. Ensure that the correct product and merchant are transferred from the shopping list to the cart. | +| MerchantProductOfferShoppingListItemBulkPostSavePlugin | Go to the product details page and add marketplace product to the shopping list. Open the shopping list and add the item to the cart. Ensure that the correct product and merchant are transferred from the shopping list to the cart. | + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | -| +| Shopping Lists | {{page.release_tag}} | [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | +| Install the Marketplace Shopping Lists Glue API | {{page.release_tag}} | | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-wishlist-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-wishlist-feature.md new file mode 100644 index 00000000000..56e6117645d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-marketplace-wishlist-feature.md @@ -0,0 +1,201 @@ +This document describes how to install the Marketplace Wishlist feature. + + +## Install feature core + +Follow the steps below to install the Marketplace Wishlist feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Product + Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product + Marketplace Product Offer feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.html) | + + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/marketplace-wishlist:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOfferWishlist | vendor/spryker/merchant-product-offer-wishlist | +| MerchantProductWishlist | vendor/spryker/merchant-product-wishlist | + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-|-|-| +| spy_wishlist_item.merchant_reference | column | created | +| spy_wishlist_item.product_offer_reference | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| WishlistItem.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistItemTransfer | +| WishlistItem.merchantReference | property | Created | src/Generated/Shared/Transfer/WishlistItemTransfer | +| WishlistMoveToCartRequest.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistMoveToCartRequestTransfer | +| WishlistMoveToCartRequest.merchantReference | property | Created | src/Generated/Shared/Transfer/WishlistMoveToCartRequestTransfer | +| WishlistItemCriteria.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistItemCriteriaTransfer | +| WishlistItemCriteria.merchantReference | property | Created | src/Generated/Shared/Transfer/WishlistItemCriteriaTransfer | + +{% endinfo_block %} + + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| WishlistProductOfferPostMoveToCartCollectionExpanderPlugin | Expands `WishlistMoveToCartRequestCollection` transfer object with not valid product offers as request items. | None | Spryker\Client\WishlistExtension\Dependency\Plugin | +| WishlistMerchantProductPostMoveToCartCollectionExpanderPlugin | Expands `WishlistMoveToCartRequestCollection` transfer object with not valid marketplace products as request items. | None | Spryker\Client\WishlistExtension\Dependency\Plugin | +| WishlistProductOfferCollectionToRemoveExpanderPlugin | Expands `WishlistItemCollectionTransfer` transfer object with product offer reference. | None | Spryker\Client\WishlistExtension\Dependency\Plugin | +| WishlistMerchantProductCollectionToRemoveExpanderPlugin | Expands `WishlistItemCollection` transfer object with merchant product wishlist items from the `WishlistMoveToCartRequestCollection` transfer object. | None | Spryker\Client\WishlistExtension\Dependency\Plugin | +| MerchantProductWishlistItemRequestExpanderPlugin | Expands `WishlistItem` transfer by provided merchant_reference in params. | None | SprykerShop\Yves\MerchantProductWidget\Plugin\WishlistPage | +| MerchantProductOfferWishlistItemRequestExpanderPlugin | Expands `WishlistItem` transfer by provided `product_offer_reference` in params. | None | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\WishlistPage | +| MerchantProductWishlistItemMetaFormExpanderPlugin | Expands `WishlistItemMetaFormType` with hidden field for 'merchant_reference'. | None | SprykerShop\Yves\MerchantProductWidget\Plugin\WishlistPage | +| MerchantProductOfferWishlistItemMetaFormExpanderPlugin | Expands `WishlistItemMetaFormType` with hidden fields for `merchant_reference` and `product_offer_reference`. | None | SprykerShop\Yves\MerchantProductOfferWidget\Plugin\WishlistPage | +| WishlistMerchantProductPreAddItemPlugin | Expands `WishlistItemMetaFormType` with hidden fields for `merchant_reference` and `product_offer_reference`. | None | Spryker\Zed\MerchantProductWishlist\Communication\Plugin\Wishlist | +| WishlistProductOfferPreAddItemPlugin | Expands `WishlistItemMetaFormType` with hidden fields for `merchant_reference` and `product_offer_reference`. | None | Spryker\Zed\MerchantProductOfferWishlist\Communication\Plugin\Wishlist | + + +**src/Pyz/Client/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistPostMoveToCartCollectionExpanderPlugins(): array + { + return [ + new WishlistProductOfferPostMoveToCartCollectionExpanderPlugin(), + new WishlistMerchantProductPostMoveToCartCollectionExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\WishlistExtension\Dependency\Plugin\WishlistCollectionToRemoveExpanderPluginInterface> + */ + protected function getWishlistCollectionToRemoveExpanderPlugins(): array + { + return [ + new WishlistProductOfferCollectionToRemoveExpanderPlugin(), + new WishlistMerchantProductCollectionToRemoveExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/WishlistPage/WishlistPageDependencyProvider.php** + +```php + + */ + protected function getWishlistItemRequestExpanderPlugins(): array + { + return [ + new MerchantProductWishlistItemRequestExpanderPlugin(), + new MerchantProductOfferWishlistItemRequestExpanderPlugin(), + ]; + } + + /** + * @return array<\SprykerShop\Yves\WishlistPageExtension\Dependency\Plugin\WishlistItemMetaFormExpanderPluginInterface> + */ + protected function getWishlistItemMetaFormExpanderPlugins(): array + { + return [ + new MerchantProductWishlistItemMetaFormExpanderPlugin(), + new MerchantProductOfferWishlistItemMetaFormExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistPreAddItemPlugins(): array + { + return [ + new WishlistMerchantProductPreAddItemPlugin(), + new WishlistProductOfferPreAddItemPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +- Make sure that you can add a product offer to a wishlist and see the product offer data in there. +- Make sure that you can see the merchant information when the merchant product is added to the wishlist. +- Make sure that you can move the wishlist with the product offers to a shopping cart and vice versa. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-category-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-category-feature.md new file mode 100644 index 00000000000..59905b34173 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-category-feature.md @@ -0,0 +1,354 @@ + + +This document describes how to install the Merchant Category feature. + +## Install feature core + +Follow the steps below to install the Merchant Category feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------- | ----- | ---------- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-category:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ----------- | ------------ | +| MerchantCategory | vendor/spryker/merchant-category | +| MerchantCategoryDataImport | vendor/spryker/merchant-category-data-import | + +{% endinfo_block %} + +## 2) Set up database schema + +Adjust the schema definition so that entity changes trigger the events: + +**src/Pyz/Zed/MerchantCategory/Persistence/Propel/Schema/spy_merchant_category.schema.xml** + +```xml + + + + + +
    +
    +``` + +Apply database changes and to generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --------------------- | ----- | ------- | +| spy_merchant_category | table | created | + +{% endinfo_block %} + +### 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| - | - | - | - | +| MerchantCategoryCriteria | object | Created | src/Generated/Shared/Transfer/MerchantCategoryCriteriaTransfer | +| MerchantCategory | object | Created | src/Generated/Shared/Transfer/MerchantCategoryTransfer | +| MerchantSearchCollection | object | Created | src/Generated/Shared/Transfer/MerchantSearchCollectionTransfer | +| MerchantSearch | object | Created | src/Generated/Shared/Transfer/MerchantSearchTransfer | +| DataImporterConfiguration | object | Created | src/Generated/Shared/Transfer/DataImporterConfigurationTransfer | + +{% endinfo_block %} + +### 4) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------|-----------------------------------------------------------------|---------------|----------------------------------------------------------------------------| +| CategoryWritePublisherPlugin | Publishes category node page search data by `SpyCategory` entity events. | | Spryker\Zed\MerchantCategory\Communication\Plugin\Publisher\Category | +| MerchantCategoryMerchantExpanderPlugin | Expands MerchantTransfer with categories. | | Spryker\Zed\MerchantCategory\Communication\Plugin\Merchant | +| MerchantCategoryMerchantSearchDataExpanderPlugin | Expands merchant search data with merchant category keys. | | Spryker\Zed\MerchantCategorySearch\Communication\Plugin\MerchantSearch | +| MerchantCategoryWritePublisherPlugin | Updates merchant categories in search based on category events. | | Spryker\Zed\MerchantSearch\Communication\Plugin\Publisher\MerchantCategory | +| RemoveMerchantCategoryRelationPlugin | Removes merchant categories on category delete. | | Spryker\Zed\MerchantCategory\Communication\Plugin | + + **src/Pyz/Zed/Category/CategoryDependencyProvider.php** + +```php +|array<\Spryker\Zed\CategoryExtension\Dependency\Plugin\CategoryRelationDeletePluginInterface> + */ + protected function getRelationDeletePluginStack(): array + { + $deletePlugins = array_merge( + [ + new RemoveMerchantCategoryRelationPlugin(), + ], + parent::getRelationDeletePluginStack() + ); + return $deletePlugins; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure when you delete category that has a relation to merchant in the Back Office, there is no exception and merchant category removed as well. + +{% endinfo_block %} + +**src/Pyz/Zed/Merchant/MerchantDependencyProvider.php** + +```php + + */ + protected function getMerchantExpanderPlugins(): array + { + return [ + new MerchantCategoryMerchantExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `MerchantFacade::get()` response contains merchant categories. + +{% endinfo_block %} + +**src/Pyz/Zed/MerchantSearch/MerchantSearchDependencyProvider.php** + +```php + + */ + protected function getMerchantSearchDataExpanderPlugins(): array + { + return [ + new MerchantCategoryMerchantSearchDataExpanderPlugin(), + ]; + } +``` + +{% info_block warningBox "Verification" %} + +Make sure that the index data `http://zed.de.spryker.local/search-elasticsearch-gui/maintenance/list-indexes` contains merchant category keys for the merchants assigned to categories. + +{% endinfo_block %} + +**src/Pyz/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getMerchantSearchQueryExpanderPlugins(): array + { + return [ + new MerchantCategoryMerchantSearchQueryExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `MerchantSearchClient::search()` allows filtering merchants by category keys, if an array of categoryKeys is provided as the request parameter. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-opening-hours-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-opening-hours-feature.md new file mode 100644 index 00000000000..b47d5c73d11 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-opening-hours-feature.md @@ -0,0 +1,694 @@ + + +This document describes how to install the Merchant Opening Hours feature. + +## Install feature core + +Follow the steps below to install the Merchant Opening Hours feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| - | - | - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-opening-hours +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: `ModuleExpected DirectoryMerchantOpeningHoursspryker/merchant-opening-hoursMerchantOpeningHoursDataImportspryker/merchant-opening-hours-data-importMerchantOpeningHoursStoragespryker/merchant-opening-hours-storageWeekdaySchedulespryker/weekday-schedule` + +{% endinfo_block %} + +### 2) Set up database schema + +Adjust the schema definition so entity changes will trigger events: + +**src/Pyz/Zed/MerchantOpeningHours/Persistence/Propel/Schema/spy_merchant_opening_hours.schema.xml** + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +**src/Pyz/Zed/MerchantOpeningHoursStorage/Persistence/Propel/Schema/spy_merchant_opening_hours_storage.schema.xml** + +```xml + + + + + + + +
    + +
    +``` + +Generate entity and transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Verify the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| ------------------------------------------ | ---- | ------ | +| spy_merchant_opening_hours_weekday_schedule | table | created | +| spy_merchant_opening_hours_date_schedule | table | created | +| spy_weekday_schedule | table | created | +| spy_date_schedule | table | created | + + +Make sure that the following changes in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ------------------- | ---- | ------ | ---------------------- | +| WeekdaySchedule | class | created | src/Generated/Shared/Transfer/WeekdayScheduleTransfer | +| DataImporterReaderConfiguration | class | created | src/Generated/Shared/Transfer/DataImporterReaderConfigurationTransfer | +| MerchantCriteria | class | created | src/Generated/Shared/Transfer/MerchantCriteriaTransfer | +| MerchantOpeningHoursStorage | class | created | src/Generated/Shared/Transfer/MerchantOpeningHoursStorageTransfer | + +{% endinfo_block %} + +### 3) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Configure export to the key-value store (Redis or Valkey) + +This step publishes change events to `spy_merchant_opening_hours_storage` and synchronizes the data to the storage. + +#### Set up event listeners and publishers + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ----------- | -------------- | ------------- | ------------- | +| MerchantOpeningHoursDateScheduleWritePublisherPlugin | | | Spryker\Zed\MerchantOpeningHoursStorage\Communication\Plugin\Publisher\MerchantOpeningHours | +| MerchantOpeningHoursWeekdayScheduleWritePublisherPlugin | | | Spryker\Zed\MerchantOpeningHoursStorage\Communication\Plugin\Publisher\MerchantOpeningHours | +| MerchantOpeningHoursWritePublisherPlugin | Registers publisher that are responsible for publishing merchant opening hours entity changes to storage. | | Spryker\Zed\MerchantOpeningHoursStorage\Communication\Plugin\Publisher\MerchantOpeningHours | + +**src/Zed/Publisher/PublisherDependencyProvider.php** + +```php + + */ + protected function getProcessorMessagePlugins(Container $container) + { + return [ + MerchantOpeningHoursStorageConfig::MERCHANT_OPENING_HOURS_SYNC_STORAGE_QUEUE => new SynchronizationStorageQueueMessageProcessorPlugin(), + ]; + } +} +``` + +#### Register the synchronization queue and synchronization error queue + +**src/Pyz/Client/RabbitMq/RabbitMqConfig.php** + +```php + + */ + protected function getSynchronizationDataPlugins(): array + { + return [ + new MerchantOpeningHoursSynchronizationDataBulkPlugin(), + ]; + } +} +``` + +#### Configure synchronization pool name + +**src/Pyz/Zed/MerchantOpeningHoursStorage/MerchantOpeningHoursStorageConfig.php** + +```php + +Example expected data fragment + +```json +{ + "weekday_schedule":[ + { + "day":"MONDAY", + "time_from":"07:00:00.000000", + "time_to":"13:00:00.000000" + }, + { + "day":"MONDAY", + "time_from":"14:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"TUESDAY", + "time_from":"07:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"WEDNESDAY", + "time_from":"07:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"THURSDAY", + "time_from":"07:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"FRIDAY", + "time_from":"07:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"SATURDAY", + "time_from":"07:00:00.000000", + "time_to":"20:00:00.000000" + }, + { + "day":"SUNDAY", + "time_from":null, + "time_to":null + } + ], + "date_schedule":[ + { + "date":"2022-01-01", + "time_from":null, + "time_to":null, + "note":"merchant_weekday_schedule.new_year" + }, + { + "date":"2023-12-31", + "time_from":"10:00:00.000000", + "time_to":"17:00:00.000000", + "note":"" + } + ] +} +``` + + + +{% endinfo_block %} + +### 5) Import Merchants Opening Hours data + +Prepare your data according to your requirements using the demo data: + +
    +data/import/common/common/marketplace/merchant_open_hours_date_schedule.csv + +```csv +merchant_reference,date,time_from,time_to,note_glossary_key +MER000001,2022-01-01,,,merchant_weekday_schedule.new_year +MER000001,2022-04-09,,,merchant_weekday_schedule.good_friday +MER000001,2022-04-17,,,merchant_weekday_schedule.easter_sunday +MER000001,2022-04-18,,,merchant_weekday_schedule.easter_monday +MER000001,2022-05-01,,,merchant_weekday_schedule.may_day +MER000001,2022-05-26,,,merchant_weekday_schedule.ascension_of_christ +MER000001,2022-06-05,,,merchant_weekday_schedule.whit_sunday +MER000001,2022-06-06,,,merchant_weekday_schedule.whit_monday +MER000001,2022-06-16,,,merchant_weekday_schedule.corpus_christi +MER000001,2022-10-03,,,merchant_weekday_schedule.day_of_german_unity +MER000001,2022-11-01,,,merchant_weekday_schedule.all_saints_day +MER000001,2022-12-25,,,merchant_weekday_schedule.1st_christmas_day +MER000001,2022-12-26,,,merchant_weekday_schedule.2nd_christmas_day +MER000001,2023-11-27,13:00:00,18:00:00,merchant_weekday_schedule.sunday_opening +MER000001,2023-12-31,10:00:00,17:00:00, +MER000002,2022-01-01,,,merchant_weekday_schedule.new_year +MER000002,2022-04-09,,,merchant_weekday_schedule.good_friday +MER000002,2022-04-17,,,merchant_weekday_schedule.easter_sunday +MER000002,2022-04-18,,,merchant_weekday_schedule.easter_monday +MER000002,2022-05-01,,,merchant_weekday_schedule.may_day +MER000002,2022-05-26,,,merchant_weekday_schedule.ascension_of_christ +MER000002,2022-06-05,,,merchant_weekday_schedule.whit_sunday +MER000002,2022-06-06,,,merchant_weekday_schedule.whit_monday +MER000002,2022-06-16,,,merchant_weekday_schedule.corpus_christi +MER000002,2022-10-03,,,merchant_weekday_schedule.day_of_german_unity +MER000002,2022-11-01,,,merchant_weekday_schedule.all_saints_day +MER000002,2022-12-25,,,merchant_weekday_schedule.1st_christmas_day +MER000002,2022-12-26,,,merchant_weekday_schedule.2nd_christmas_day +MER000006,2022-01-01,,,merchant_weekday_schedule.new_year +MER000006,2022-04-09,,,merchant_weekday_schedule.good_friday +MER000006,2022-04-17,,,merchant_weekday_schedule.easter_sunday +MER000006,2022-04-18,,,merchant_weekday_schedule.easter_monday +MER000006,2022-05-01,,,merchant_weekday_schedule.may_day +MER000006,2022-05-26,,,merchant_weekday_schedule.ascension_of_christ +MER000006,2022-06-05,,,merchant_weekday_schedule.whit_sunday +MER000006,2022-06-06,,,merchant_weekday_schedule.whit_monday +MER000006,2022-06-16,,,merchant_weekday_schedule.corpus_christi +MER000006,2022-10-03,,,merchant_weekday_schedule.day_of_german_unity +MER000006,2022-11-01,,,merchant_weekday_schedule.all_saints_day +MER000006,2022-12-25,,,merchant_weekday_schedule.1st_christmas_day +MER000006,2022-12-26,,,merchant_weekday_schedule.2nd_christmas_day +MER000006,2023-11-27,13:00:00,18:00:00,merchant_weekday_schedule.sunday_opening +MER000006,2023-12-31,10:00:00,17:00:00, +MER000005,2022-01-01,,,merchant_weekday_schedule.new_year +MER000005,2022-04-09,,,merchant_weekday_schedule.good_friday +MER000005,2022-04-17,,,merchant_weekday_schedule.easter_sunday +MER000005,2022-04-18,,,merchant_weekday_schedule.easter_monday +MER000005,2022-05-01,,,merchant_weekday_schedule.may_day +MER000005,2022-05-26,,,merchant_weekday_schedule.ascension_of_christ +MER000005,2022-06-05,,,merchant_weekday_schedule.whit_sunday +MER000005,2022-06-06,,,merchant_weekday_schedule.whit_monday +MER000005,2022-06-16,,,merchant_weekday_schedule.corpus_christi +MER000005,2022-10-03,,,merchant_weekday_schedule.day_of_german_unity +MER000005,2022-11-01,,,merchant_weekday_schedule.all_saints_day +MER000005,2022-12-25,,,merchant_weekday_schedule.1st_christmas_day +MER000005,2022-12-26,,,merchant_weekday_schedule.2nd_christmas_day +MER000005,2023-11-27,13:00:00,18:00:00,merchant_weekday_schedule.sunday_opening +MER000005,2023-12-31,10:00:00,13:00:00, +MER000005,2023-12-31,14:00:00,17:00:00, +``` + +
    + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|---------------------|-----------|-----------|-----------------------------------------------|-----------------------------------------------------------------------------------| +| merchant_reference | ✓ | string | MER000005 | Merchant identifier. | +| date | ✓ | string | 2022-01-01 | Date with special opening hours | +| time_from | | string | 10:00:00 | Time start when the merchant is open on this special date. Empty means open ended | +| time_to | | string | 13:00:00 | Time end when the merchant is open on this special date. Empty means open ended | +| note | | string | merchant_weekday_schedule.day_of_german_unity | Glossary key to show a note next to special opening hours | + +**data/import/common/common/marketplace/merchant_open_hours_week_day_schedule.csv** + +```csv +merchant_reference,week_day_key,time_from,time_to +MER000001,MONDAY,7:00:00,13:00:00 +MER000001,MONDAY,14:00:00,20:00:00 +MER000001,TUESDAY,7:00:00,20:00:00 +MER000001,WEDNESDAY,7:00:00,20:00:00 +MER000001,THURSDAY,7:00:00,20:00:00 +MER000001,FRIDAY,7:00:00,20:00:00 +MER000001,SATURDAY,7:00:00,20:00:00 +MER000001,SUNDAY,, +MER000002,MONDAY,8:00:00,13:00:00 +MER000002,MONDAY,14:00:00,19:00:00 +MER000002,TUESDAY,8:00:00,19:00:00 +MER000002,WEDNESDAY,8:00:00,19:00:00 +MER000002,THURSDAY,8:00:00,19:00:00 +MER000002,FRIDAY,8:00:00,19:00:00 +MER000002,SATURDAY,8:00:00,19:00:00 +MER000002,SUNDAY,, +MER000006,MONDAY,7:00:00,13:00:00 +MER000006,MONDAY,14:00:00,20:00:00 +MER000006,TUESDAY,7:00:00,20:00:00 +MER000006,WEDNESDAY,7:00:00,20:00:00 +MER000006,THURSDAY,7:00:00,20:00:00 +MER000006,FRIDAY,7:00:00,20:00:00 +MER000006,SATURDAY,7:00:00,20:00:00 +MER000006,SUNDAY,, +MER000005,MONDAY,8:00:00,13:00:00 +MER000005,MONDAY,14:00:00,19:00:00 +MER000005,TUESDAY,8:00:00,19:00:00 +MER000005,WEDNESDAY,8:00:00,19:00:00 +MER000005,THURSDAY,8:00:00,19:00:00 +MER000005,FRIDAY,8:00:00,19:00:00 +MER000005,SATURDAY,8:00:00,19:00:00 +MER000005,SUNDAY,, +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| ----------- | ---------- | --------- | ------------ | ---------------- | +| `merchant_reference` | ✓ | string | MER000005 | Merchant identifier. | +| week_day_key | ✓ | `string` | MONDAY | Day of the week to assign opening hours to a merchant.It is an enum in database with the following values:MONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAYSUNDAY. | +| `time_from` | | string | `8:00:00` | Time start when the merchant is open on this week day. Empty means open ended. | +| `time_to` | | string | `19:00:00`| Time end when the merchant is open on this week day. Empty means open ended. | + +Register the following plugins to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| -------------------- | ----------- | ------------- | ------------ | +| MerchantOpeningHoursDateScheduleDataImportPlugin | Imports special dates opening hours into the database. | | Spryker\Zed\MerchantOpeningHoursDataImport\Communication\Plugin | +| MerchantOpeningHoursWeekdayScheduleDataImportPlugin | Imports weekly schedule opening hours into the database. | | Spryker\Zed\MerchantOpeningHoursDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantOpeningHoursWidget::class, + ]; + } +} +``` + +Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following widget was registered: + +| MODULE | TEST | +| ------------- | ------------- | +| MerchantOpeningHoursWidget | Go to a merchant page on the storefront and ensure that merchant working hours are displayed. | + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | - | +| Merchant Opening Hours API | | [Install the Merchant Opening Hours Glue API](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-agent-assist-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-agent-assist-feature.md new file mode 100644 index 00000000000..e87cb839578 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-agent-assist-feature.md @@ -0,0 +1,635 @@ + +This document describes how to install Merchant Portal Agent Assist feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------| ------- | ------------------ | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | + +### 1) Install the required modules + +```bash +composer require spryker-feature/marketplace-agent-assist:"{{page.release_tag}}" spryker/agent-dashboard-merchant-portal-gui:"1.0.0" spryker/agent-security-blocker-merchant-portal-gui:"1.1.0" spryker/agent-security-merchant-portal-gui:"1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------|--------------------------------------------------------------| +| AclMerchantAgent | vendor/spryker/acl-merchant-agent | +| AgentDashboardMerchantPortalGui | vendor/spryker/agent-dashboard-merchant-portal-gui | +| AgentDashboardMerchantPortalGuiExtension | vendor/spryker/agent-dashboard-merchant-portal-gui-extension | +| AgentSecurityBlockerMerchantPortal | vendor/spryker/agent-security-blocker-merchant-portal | +| AgentSecurityBlockerMerchantPortalGui | vendor/spryker/agent-security-blocker-merchant-portal-gui | +| AgentSecurityMerchantPortalGui | vendor/spryker/agent-security-merchant-portal-gui | +| MerchantAgent | vendor/spryker/merchant-agent | +| MerchantAgentGui | vendor/spryker/merchant-agent-gui | + +{% endinfo_block %} + +### Set up the configuration + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|--------------------------| +| AclConstants::ACL_DEFAULT_RULES | Default ACL rules. | Spryker\Shared\Acl | +| AclMerchantAgentConfig::MERCHANT_AGENT_ACL_BUNDLE_ALLOWED_LIST | A collection of bundles a merchant agent has ACL access to. | Pyz\Zed\AclMerchantAgent | +| AclConfig::getInstallerRules() | The default ACL rules that are added to a respective database table after executing `setup:init-db`. | Pyz\Zed\Acl | + +**config/Shared/config_default.php** + +```php + +use Spryker\Shared\Acl\AclConstants; +use Spryker\Shared\AgentSecurityBlockerMerchantPortal\AgentSecurityBlockerMerchantPortalConstants; + +// ACL: Allow or disallow URLs for Zed Admin GUI for ALL users +$config[AclConstants::ACL_DEFAULT_RULES] = [ + [ + 'bundle' => 'agent-security-merchant-portal-gui', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], +]; + +// >>> Security Blocker MerchantPortal agent +$config[AgentSecurityBlockerMerchantPortalConstants::AGENT_MERCHANT_PORTAL_BLOCK_FOR_SECONDS] = 360; +$config[AgentSecurityBlockerMerchantPortalConstants::AGENT_MERCHANT_PORTAL_BLOCKING_TTL] = 900; +$config[AgentSecurityBlockerMerchantPortalConstants::AGENT_MERCHANT_PORTAL_BLOCKING_NUMBER_OF_ATTEMPTS] = 9; + +``` + +
    +src/Pyz/Zed/Acl/AclConfig.php + +```php +> + */ + public function getInstallerRules(): array + { + $installerRules = parent::getInstallerRules(); + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'agent-dashboard-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + return $installerRules; + } +} +``` + +
    + +**src/Pyz/Zed/AclMerchantAgent/AclMerchantAgentConfig.php** + +```php + + */ + protected const MERCHANT_AGENT_ACL_BUNDLE_ALLOWED_LIST = [ + 'agent-dashboard-merchant-portal-gui', + ]; +} +``` + +2. Execute the registered installer plugins: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +- Make sure the page is available: `https://mp.mysprykershop.com/agent-security-merchant-portal-gui/login`. +- Enter incorrect login details for more than nine times within 900 seconds. Make sure this locks you out of the login page for 360 seconds. +- Log in as a merchant agent into the Merchant Portal. Make sure you have access to `https://mp.mysprykershop.com/agent-dashboard-merchant-portal-gui/merchant-users`. +- Make sure Back Office users don't have access to `https://mp.mysprykershop.com/agent-dashboard-merchant-portal-gui/merchant-users`. + +{% endinfo_block %} + +#### Optional: Add a default merchant agent user with the root role + +1. Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|---------------------------------|----------------------------------------------------------------------------|--------------| +| UserConfig::getInstallerUsers() | The default users added to the database after executing `setup:init-db`. | Pyz\Zed\User | +| AclConfig::getInstallerUsers() | Default ACL groups for users. | Pyz\Zed\Acl | + +**src/Pyz/Zed/User/UserConfig.php** + +```php +> + */ + public function getInstallerUsers(): array + { + return [ + // Example data + [ + 'firstName' => 'Agent', + 'lastName' => 'Merchant', + 'password' => 'change123', + 'username' => 'agent-merchant@spryker.com', + 'isMerchantAgent' => 1, + 'localeName' => 'en_US', + ], + ]; + } +} +``` + +**src/Pyz/Zed/Acl/AclConfig.php** + +```php +> + */ + public function getInstallerUsers(): array + { + return [ + 'agent-merchant@spryker.com' => [ + 'group' => AclConstants::ROOT_GROUP, + ], + ]; + } +} +``` + +2. Execute the registered installer plugins: + +```bash +console setup:init-db +``` + +{% info_block warningBox "Verification" %} + +The created Back Office user with the credentials specified in `UserConfig::getInstallerUsers()` can log into the Back Office and Merchant Portal as an agent. + +{% endinfo_block %} + +### Set up database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------|--------| ------- | +| spy_user.is_merchant_agent | column | created | + +Make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ---------- | ------ | ------- | ------ | +| User.isMerchantAgent | property | created | src/Generated/Shared/Transfer/User | + +{% endinfo_block %} + +### Add translations + +1. Append the glossary: + +```csv +agent_security_blocker_merchant_portal_gui.error.account_blocked,"Too many log in attempts from your address. Please wait %minutes% minutes before trying again.",en_US +agent_security_blocker_merchant_portal_gui.error.account_blocked,"Warten Sie bitte %minutes% Minuten, bevor Sie es erneut versuchen.",de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` database tables. + +{% endinfo_block %} + + +### Set up behavior + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------------| +| AgentMerchantPortalSecurityBlockerConfigurationSettingsExpanderPlugin | Expands security blocker configuration settings with agent merchant portal settings. | | Spryker\Client\AgentSecurityBlockerMerchantPortal\Plugin\SecurityBlocker | +| ZedAgentMerchantUserSecurityPlugin | Extends the security service with the AgentMerchantUser firewall. | | Spryker\Zed\AgentSecurityMerchantPortalGui\Communication\Plugin\Security | +| SecurityBlockerAgentMerchantPortalEventDispatcherPlugin | Denies access to an agent after exceeding the limit of failed merchant portal agent login attempts. | | Spryker\Zed\AgentSecurityBlockerMerchantPortalGui\Communication\Plugin\EventDispatcher | +| MerchantAgentAclAccessCheckerStrategyPlugin | Checks if the merchant agent ACL access checker strategy is applicable for a given user and rule. | | Spryker\Zed\AclMerchantAgent\Communication\Plugin\Acl | +| AgentMerchantUserCriteriaExpanderPlugin | Sets `null` for `MerchantUserCriteria.status` and `MerchantUserCriteria.merchantStatus` for Merchant agents. | | Spryker\Zed\AgentSecurityMerchantPortalGui\Communication\Plugin\SecurityMerchantPortalGui | +| MerchantAgentUserQueryCriteriaExpanderPlugin | Expands a user's table query criteria with the `isMerchantAgent` condition. | | Spryker\Zed\MerchantAgent\Communication\Plugin\User | +| MerchantAgentUserFormExpanderPlugin | Expands a user's form with the `is_merchant_agent` checkbox. | | Spryker\Zed\MerchantAgentGui\Communication\Plugin\User | +| MerchantAgentUserTableConfigExpanderPlugin | Expands a user's table with the `isMerchantAgent` column. | | Spryker\Zed\MerchantAgentGui\Communication\Plugin\User | +| MerchantAgentUserTableDataExpanderPlugin | Expands a user's `isMerchantAgent` table column with data. | | Spryker\Zed\MerchantAgent\Communication\Plugin\User | +| BackofficeAllowedAclGroupMerchantUserTableDataExpanderPlugin | Sets `null` to the response data under the `assistUser` keys for users belonging to ACL groups with Back Office access. | | Spryker\Zed\AclMerchantPortal\Communication\Plugin\AgentDashboardMerchantPortalGui | +| MerchantUserTwigPlugin | Adds the `merchantName` Twig global variable. | | Spryker\Zed\MerchantUser\Communication\Plugin\Twig | +| MerchantUserSecurityTokenUpdateMerchantUserPostChangePlugin | Rewrites the Symfony security token for merchant users with `MerchantUser` and without `IS_IMPERSONATOR` roles granted. | | Spryker\Zed\SecurityMerchantPortalGui\Communication\Plugin\UserMerchantPortalGui | + +**src/Pyz/Client/SecurityBlocker/SecurityBlockerDependencyProvider.php** + +```php + + */ + protected function getSecurityBlockerConfigurationSettingsExpanderPlugins(): array + { + return + new AgentMerchantPortalSecurityBlockerConfigurationSettingsExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox %} + +If `SecurityDependencyProvider::getSecurityPlugins()` already contains plugins, add the `ZedAgentMerchantUserSecurityPlugin` as *first* in the list. + +{% endinfo_block %} +**src/Pyz/Zed/Security/SecurityDependencyProvider.php** + +```php + + */ + protected function getSecurityPlugins(): array + { + return [ + new ZedAgentMerchantUserSecurityPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/EventDispatcher/EventDispatcherDependencyProvider.php** + +```php + + */ + protected function getEventDispatcherPlugins(): array + { + return [ + new SecurityBlockerAgentMerchantPortalEventDispatcherPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Acl/AclDependencyProvider.php** + +```php + + */ + protected function getAclAccessCheckerStrategyPlugins(): array + { + return [ + new MerchantAgentAclAccessCheckerStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/SecurityMerchantPortalGui/SecurityMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantUserCriteriaExpanderPlugins(): array + { + return [ + new AgentMerchantUserCriteriaExpanderPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/User/UserDependencyProvider.php + +```php + + */ + protected function getUserFormExpanderPlugins(): array + { + return [ + new MerchantAgentUserFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\UserExtension\Dependency\Plugin\UserTableConfigExpanderPluginInterface> + */ + protected function getUserTableConfigExpanderPlugins(): array + { + return [ + new MerchantAgentUserTableConfigExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\UserExtension\Dependency\Plugin\UserTableDataExpanderPluginInterface> + */ + protected function getUserTableDataExpanderPlugins(): array + { + return [ + new MerchantAgentUserTableDataExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserQueryCriteriaExpanderPluginInterface> + */ + protected function getUserQueryCriteriaExpanderPlugins(): array + { + return [ + new MerchantAgentUserQueryCriteriaExpanderPlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Zed/AgentDashboardMerchantPortalGui/AgentDashboardMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantUserTableDataExpanderPlugins(): array + { + return [ + new BackofficeAllowedAclGroupMerchantUserTableDataExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new MerchantUserTwigPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/UserMerchantPortalGui/UserMerchantPortalGuiDependencyProvider.php** + +```php + + */ + public function getMerchantUserPostChangePlugins(): array + { + return [ + new MerchantUserSecurityTokenUpdateMerchantUserPostChangePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log into the Back Office as a `root` user. +2. Go to **Users** > **Users**. + Make sure there is an **Agent Merchant** column in the **USERS LIST** table. + +3. Next to a user of your choice, click **Edit**. + On the **Edit User** page, make sure there is a **THIS USER IS AN AGENT IN MERCHANT PORTAL** checkbox. + + +4. Click the **THIS USER IS AN AGENT IN MERCHANT PORTAL** checkbox. +5. Click **Update**. + On the **Users** page, make sure the updated user has the `Agent` label in the **Agent Merchant** column. + +6. Go to `https://mp.mysprykershop.com/agent-security-merchant-portal-gui/login`. +7. Log in with the login details of the user you've added the agent merchant role to. + Make sure this opens `https://mp.mysprykershop.com/agent-dashboard-merchant-portal-gui/merchant-users` and there is a **Merchant Users** table. + +- Make sure you can see and assist the users regardless of their status. +- Make sure the **Assist User** button isn't displayed for merchant users with the **root** role. +- Make sure you can assist the users that have the **Assist User** button next to them. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + + +1. Go to `htpps://mp.mysprykershop.com/agent-security-merchant-portal-gui/login`. +2. Enter incorrect login details for more than nine times within 900 seconds. + Make sure you get locked out of the login page for 360 seconds. + +{% endinfo_block %} + +### Configure navigation + +1. Add the `AgentDashboardMerchantPortalGui` section to `navigation.xml`: + +**config/Zed/navigation.xml** + +```xml + + + + + Merchant Users + user-group + agent-dashboard-merchant-portal-gui + merchant-users + index + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Log in as an agent to the Merchant Portal. Make sure there is the **Merchant Users** navigation menu item. + +{% endinfo_block %} + + +## Install feature frontend + +For installing frontend dependencies, follow [Set up the Merchant Portal](/docs/dg/dev/frontend-development/latest/marketplace/set-up-the-merchant-portal.html). + +Once everything has been installed, you can access the UI of Merchant Portal Agent Assist at `$[local_domain]/agent-security-merchant-portal-gui/login`. + +## Optional: Add extra security + +We highly recommend adding an extra layer of security by introducing a VPN, IP whitelisting, or additional authentication for the `https://mp.mysprykershop.com/agent-security-merchant-portal-gui/login` page. diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-data-import-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-data-import-feature.md new file mode 100644 index 00000000000..644e40f8a35 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-data-import-feature.md @@ -0,0 +1,403 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant Portal Data Import feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-portal-data-import:"dev-master" spryker/user:"^3.29.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------|------------------------------------------------| +| DataImportMerchant | vendor/spryker/data-import-merchant | +| DataImportMerchantExtension | vendor/spryker/data-import-merchant-extension | +| DataImportMerchantPortalGui | vendor/spryker/data-import-merchant-portal-gui | +| User | vendor/spryker/user | + +{% endinfo_block %} + +### Generate transfer objects and database changes + +```bash +vendor/bin/console transfer:generate +vendor/bin/console propel:install +``` + +### Add translations + +1. Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +Append glossary according to your configuration: + +**src/data/import/glossary.csv** + +```yaml +data_import_merchant.validation.importer_type_not_supported,Importer type is not supported.,en_US +data_import_merchant.validation.importer_type_not_supported,Der Importertyp wird nicht unterstützt.,de_DE +data_import_merchant.validation.merchant_not_found,Merchant not found.,en_US +data_import_merchant.validation.merchant_not_found,Handelspartner nicht gefunden.,de_DE +data_import_merchant.validation.user_not_found,User not found.,en_US +data_import_merchant.validation.user_not_found,Benutzer nicht gefunden.,de_DE +data_import_merchant.validation.invalid_file_content_type,Invalid file content type.,en_US +data_import_merchant.validation.invalid_file_content_type,Ungültiger Dateityp.,de_DE +merchant_product_data_import.validation.missing_required_header,The required field %header% is missing.,en_US +merchant_product_data_import.validation.missing_required_header,Das erforderliche Feld %header% fehlt.,de_DE +``` + +2. Import data: + +```yaml +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +### Configure navigation + +1. Update Merchant Portal navigation: + + **config/Zed/navigation-main-merchant-portal.xml** + +```xml + + + Data Import + data-import + data-import-merchant-portal-gui + files + index + +``` + +2. Build navigation cache: + +```bash +vendor/bin/console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Merchant Portal, the **Data Import** navigation item is displayed. + +{% endinfo_block %} + +### Add plugins + +Add the following plugins to the dependency providers: + +| PLUGIN | SPECIFICATION | NAMESPACE | +|------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------| +| DataImportMerchantPortalGuiMerchantAclRuleExpanderPlugin | Adds access rules to the Data Import page in Merchant Portal. | Spryker\Zed\DataImportMerchantPortalGui\Communication\Plugin\AclMerchantPortal | +| DataImportMerchantFileAclEntityConfigurationExpanderPlugin | Expands provided `AclEntityMetadataConfig` transfer object with data import merchant file composite data. | Spryker\Zed\DataImportMerchant\Communication\Plugin\AclMerchantPortal | +| DataImportMerchantImportConsole | Reads data import merchant files for data import and runs data imports. Updates import status. | Spryker\Zed\DataImportMerchant\Communication\Console | +| UserDataImportMerchantFileExpanderPlugin | Expands `DataImportMerchantFile` transfers with `User` data. | Spryker\Zed\User\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php** + +```php + + */ + protected function getMerchantAclRuleExpanderPlugins(): array + { + return [ + new DataImportMerchantPortalGuiMerchantAclRuleExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\AclMerchantPortalExtension\Dependency\Plugin\AclEntityConfigurationExpanderPluginInterface> + */ + protected function getAclEntityConfigurationExpanderPlugins(): array + { + return [ + new DataImportMerchantFileAclEntityConfigurationExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportMerchantImportConsole(), + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchant/DataImportMerchantDependencyProvider.php** + +```php + + */ + protected function getDataImportMerchantFileExpanderPlugins(): array + { + return [ + new UserDataImportMerchantFileExpanderPlugin(), + ]; + } +} +``` + +### Sync ACL entity rules + +1. Add new modules to installer rules: + +**src/Pyz/Zed/Acl/AclConfig.php** + +```php +> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'data-import-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $array = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + + return $installerRules; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Run `console setup:init-db`. +2. Verify that the `data-import-merchant-portal-gui` rule has been added to the `spy_acl_rule` table. + +{% endinfo_block %} + +2. Sync ACL entity rules: + +```bash +vendor/bin/console acl-entity:synchronize +``` + + +3. To integrate the feature without a destructive deployment, add the following command to your normal deployment, such as `config/install/production.yml`: + +```yaml +acl: + acl-entity-synchronize: + command: 'vendor/bin/console acl-entity:synchronize -vvv --no-ansi' + stores: true +``` + +### Add Jenkins configuration + + +Add a job to check if there're new files uploaded for data import by merchants. You can change the schedule according to your project needs. + +**config/Zed/cronjobs/jenkins.php** + +```php +$jobs[] = [ + 'name' => 'data-import-merchant-import', + 'command' => '$PHP_BIN vendor/bin/console data-import-merchant:import', + 'schedule' => '* * * * *', + 'enable' => true, +]; +``` + +### Configure behavior + +1. Define file types to allow uploading and importing in the Merchant Portal: + +**src/Pyz/Zed/DataImportMerchant/DataImportMerchantConfig.php** + +```php + + */ + public function getSupportedContentTypes(): array + { + return [ + 'text/csv', + 'application/csv', + 'text/plain', + ]; + } +} +``` + +2. Define import templates for CSV files: + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + */ + public function getDataImportTemplates(): array + { + return [ + 'CSV template Product' => 'js/static/merchant-product-data-import/data/files/combined_product.csv', + ]; + } +} +``` + +## Install feature frontend + +1. In `tsconfig.mp.json`, update `paths`: + +```json +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "paths": { + "@mp/data-import-merchant-portal-gui": ["vendor/spryker/data-import-merchant-portal-gui/mp.public-api.ts"] + } + } +} +``` + +2. In `project.json`, add the new rule to `assets`, that will copy CSV template files into `public/MerchantPortal/assets/js/static/` folder: + +```json +{ + "targets": { + "build": { + "executor": "@angular-builders/custom-webpack:browser", + "options": { + "assets": [ + { + "glob": "*/data/files/**/*", + "input": "vendor/spryker", + "output": "/static/", + "ignore": ["**/.gitkeep"] + } + ] + } + } + } +} +``` + +This example will copy all files from spryker vendor folders where `data/files/` folder is located. + +3. Build the frontend: + +```bash +npm ci +npm run mp:build +``` + +{% info_block warningBox "Verification" %} + +In the Merchant Portal go to **Data Import**. Make sure the data import table is displayed and you can initiate a new import. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-feature.md new file mode 100644 index 00000000000..da41ffda3e1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-feature.md @@ -0,0 +1,390 @@ + + +## Prerequisites + +Environment requirements: +- [Node.js](https://nodejs.org/en/download/package-manager) version 18 or higher. +- [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) version 9 or higher. +- Spryker supported PHP version 8.0 +- Host for Zed application + +Application requirement: [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html). + + +## Install frontend dependencies + +```bash +npm install +``` + +## Build frontend + +```bash +npm run mp:build +``` + +For production: + +```bash +npm run mp:build:production +``` + +## Install feature backend + +Install the needed packages for the Merchant Portal with dependencies. For available list, in the Spryker Git Hub repository, search for [`merchant-portal-gui`](https://github.com/spryker/?q=merchant-portal-gui). + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | + +### Create and connect Merchant Portal users + +1. Create Merchant Portal users using the Back Office; or, if you need users out of the box, add them to `\Pyz\Zed\User\UserConfig::getInstallerUsers()`. Example: + +**src/Pyz/Zed/User/UserConfig.php** + +```php + 'Michele', + 'lastName' => 'Nemeth', + 'password' => 'change123', + 'username' => 'michele@sony-experts.com', + ], + ]; + } +} +``` + +2. Connect users and merchants using using the Back Office or the following data import: + +**data/import/common/common/marketplace/merchant.csv** + +```csv +merchant_key,merchant_reference,merchant_name,registration_number,status,email,is_active,url.de_DE,url.en_US +sony-experts,MER000006,Sony Experts,HYY 134306,approved,michele@sony-experts.com,1,/de/merchant/sony-experts,/en/merchant/sony-experts +``` + +3. To integrate merchant user data import, follow [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html). + +4. Import merchant user data using the following example: + +**data/import/common/common/marketplace/merchant_user.csv** + +```csv +merchant_key,username +sony-experts,michele@sony-experts.com +``` + +5. Import data: + +```bash +console data:import merchant +console data:import merchant-user +``` + +### 3) Adjust the ACL + +By default, all newly created merchants and merchant users automatically have a group, role, and segment with autogenerated names based on `MerchantName`, `MerchantUserName`, and `MerchantPortalKey`. + +1. Adjust `AclConfig` to configure access to Merchant Portal's `*-merchant-portal-gui` pages: +- Give access to merchant users +- Optional: Deny access for admin roles + +To check the available list of packages for the Merchant Portal, in the Spryker GitHub repository, search for [`merchant-portal-gui`](https://github.com/spryker/?q=merchant-portal-gui). + +
    src/Pyz/Zed/Acl/AclConfig.php + +```php +addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + /** + * @param array> $installerRules + * + * @return array> + */ + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'dashboard-merchant-portal-gui', + 'merchant-profile-merchant-portal-gui', + 'product-merchant-portal-gui', + 'product-offer-merchant-portal-gui', + 'security-merchant-portal-gui', + 'sales-merchant-portal-gui', + 'user-merchant-portal-gui', + 'dummy-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + + return $installerRules; + } + + /** + * @return array + */ + public function getInstallerUsers() + { + return [ + 'michele@sony-experts.com' => [], + //this is related to existent username and will be searched into the database + ]; + } +} +``` + +
    + +2. Create users with ACL rules: + +```bash +console setup:init-db +``` + +#### Extend ACL entity metadata configuration + +As an example of extending the `AclEntityMetadata` configuration, you can use the `AclEntityDummyProduct` module. + +Install the module: + +```bash +composer require spryker/acl-entity-dummy-product:"^0.2.0" --update-with-dependencies +``` + +For an example of the `AclEntityMetadataCollection` configuration, use `\Spryker\Zed\AclEntityDummyProduct\Communication\DummyProductAclEntityMetadataConfigExpanderPlugin`: + +```php + + */ + protected function getAclEntityMetadataCollectionExpanderPlugins(): array + { + return [ + new DummyProductAclEntityMetadataConfigExpanderPlugin(), + ]; + } + } +``` + +### 4) Adjust Merchant Portal navigation + +1. To configure the Merchant Portal sidebar, add the installed MP GUI modules to `config/Zed/navigation-main-merchant-portal.xml`. + +
    config/Zed/navigation-main-merchant-portal.xml + +```xml + + + + + Merchant Dashboard + dashboard + dashboard-merchant-portal-gui + dashboard + index + + + + Profile + profile + merchant-profile-merchant-portal-gui + profile + index + + + + Offers + offers + product-offer-merchant-portal-gui + product-offers + index + + + + Create Offer + product-offer-merchant-portal-gui + product-list + index + 0 + + + + + + Orders + orders + sales-merchant-portal-gui + orders + index + + + + Products + offers + product-merchant-portal-gui + products + index + + + + Logout + logout + security-merchant-portal-gui + logout + index + + +``` + +
    + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure the following applies: +- The Merchant Portal navigation contains all configured items. +- Clicking the configured navigation items opens respective pages. +- In `\Pyz\Zed\ZedNavigation\ZedNavigationDependencyProvider`, `\Spryker\Zed\Acl\Communication\Plugin\Navigation\AclNavigationItemCollectionFilterPlugin` is enabled: + +```php + + */ + protected function getNavigationItemCollectionFilterPlugins(): array + { + return [ + new AclNavigationItemCollectionFilterPlugin(), + ]; + } +} +``` + +{% endinfo_block %} + +### 5) Configure firewalls for a dedicated Merchant Portal login + +1. [Upgrade to Symfony 5](/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-5.html). + +2. Install the required modules using Composer: + +```bash +composer remove spryker/auth spryker/auth-mail-connector spryker/auth-mail-connector-extension spryker/authentication-merchant-portal-gui +``` + +3. Install the required modules using Composer: + +```bash +composer require spryker/security-gui:"^1.0.0" spryker/security-merchant-portal-gui:"^1.0.0" spryker/security-system-user:"^1.0.0" spryker/user-password-reset:"^1.0.0" spryker/user-password-reset-extension:"^1.0.0" spryker/user-password-reset-mail:"^1.0.0" --update-with-dependencies +``` + +4. Update the following modules to the latest minor versions: + +| MODULE | DIRECTORY | +|--------------|------------------------------| +| Application | vendor/spryker/application | +| MerchantUser | vendor/spryker/merchant-user | +| Security | vendor/spryker/security | +| Session | vendor/spryker/session | +| User | vendor/spryker/user | +| ZedUi | vendor/spryker/zed-ui | + +3. To integrate the project related code required for Merchant Portal user login, apply the changes from [MR-222 nonsplit to split merge](https://github.com/spryker-shop/suite/pull/681/files). + + +{% info_block warningBox "Verification" %} + +1. Go to `http://mp.de.spryker.local/security-merchant-portal-gui/login`. + Make sure the following login page is displayed: + +![Merchant Portal login](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Feature+Integration+Guides/Marketplace/Merchant+Portal+feature+integration/mp-login.png) + +2. Log in. + This opens the dashboard. Make sure the navigation contains the items you've configured: + +![Merchant Portal dashboard](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Feature+Integration+Guides/Marketplace/Merchant+Portal+feature+integration/mp-dashboard.png) + +{% endinfo_block %} + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|-----------------------------------------------------------------------------------------------------------|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Merchant Portal - Marketplace Merchant | | [Install the Merchant Portal - Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.html) | +| Merchant Portal - Marketplace Product | | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | +| Merchant Portal - Marketplace Order Management | | [Install the Merchant Portal - Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | +| Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management | | [Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.html) | +| Merchant Portal - Marketplace Product + Inventory Management | | [Merchant Portal - Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.html) | +| Merchant Portal - Marketplace Product Options Management | | [Merchant Portal - Marketplace Product Options Management integration](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.html) | +| Merchant Portal - Marketplace Product + Tax | | [Install the Merchant Portal - Marketplace Product + Tax feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md new file mode 100644 index 00000000000..8b1c5e43ee5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md @@ -0,0 +1,65 @@ + +This document describes how to install the Merchant Portal - Marketplace Merchant feature. + +## Install feature core + +Follow the steps below to install the Merchant Portal - Marketplace Merchant feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| -------------------- | ------- | ------------------ | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-profile-merchant-portal-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------------- | --------------- | +| MerchantProfileMerchantPortalGui | vendor/spryker/merchant-profile-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +### 3) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Configure navigation + +Build navigation cache + +Execute the following command: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that the navigation menu of the Merchant Portal has the **Profile** section. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md new file mode 100644 index 00000000000..f67b15101e7 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md @@ -0,0 +1,51 @@ + + +This document describes how to install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature. + +## Prerequisites + +To start feature integration, install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | --------- | ------------| +| Marketplace Merchant Portal Product Offer Management | {{page.release_tag}} | [Install the Marketplace Merchant Portal Product Offer Management feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.html) | +| Merchant Portal - Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Merchant Portal Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | + + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------- | ------------ | ----------- | ------------ | +| ProductOfferMerchantOrderItemTableExpanderPlugin | Expands MerchantOrderItemTable with Merchant SKU and Product offer reference columns configuration. | | Spryker\Zed\ProductOfferMerchantPortalGui\Communication\Plugin\SalesMerchantPortalGui | + +**src/Pyz/Zed/SalesMerchantPortalGui/SalesMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getMerchantOrderItemTableExpanderPlugins(): array + { + return [ + new ProductOfferMerchantOrderItemTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferMerchantOrderItemTableExpanderPlugin` is set up by opening `http://mp.mysprykershop.com/sales-merchant-portal-gui/orders`. Click on any of the orders and check that the *Merchant Reference* and *Product Offer SKU* are present. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md new file mode 100644 index 00000000000..c76c0e32494 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md @@ -0,0 +1,106 @@ + +This document describes how to install the Merchant Portal - Marketplace Order Management feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | --------- | ------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/latest/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/sales-merchant-portal-gui:"^1.2.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------- | --------------- | +| SalesMerchantPortalGui | vendor/spryker/sales-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ------------- | ---- | ------ |---------------- | +| MerchantOrderTableCriteria | class | Created | src/Generated/Shared/Transfer/MerchantOrderTableCriteriaTransfer | +| MerchantOrderItemTableCriteria | class | Created | src/Generated/Shared/Transfer/MerchantOrderItemTableCriteriaTransfer | +| MerchantOrderCounts | class | Created | src/Generated/Shared/Transfer/MerchantOrderCountsTransfer | +| MerchantOrderCollection.pagination | property | Created | src/Generated/Shared/Transfer/MerchantOrderCollectionTransfer | +| MerchantOrder.merchantOrderItemCount | property | Created | src/Generated/Shared/Transfer/MerchantOrderTransfer | +| MerchantOrderItem.product | property | Created | src/Generated/Shared/Transfer/MerchantOrderItemTransfer | +| MerchantOrderItemCollection.pagination | property | Created | src/Generated/Shared/Transfer/MerchantOrderItemCollectionTransfer | + +{% endinfo_block %} + + +### 3) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 4) Set up behavior + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------- | -------------- | ------ | -------------- | +| OrdersMerchantDashboardCardPlugin | Adds Merchant orders card to MerchantDashboard | | Spryker\Zed\SalesMerchantPortalGui\Communication\Plugin | + +**src/Pyz/Zed/DashboardMerchantPortalGui/DashboardMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getDashboardCardPlugins(): array + { + return [ + new ProductsMerchantDashboardCardPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you log in to the Merchant Portal, you can see the Products card on the Dashboard page. + +{% endinfo_block %} + +### 5) Configure navigation + +1. Add a marketplace section to `navigation-main-merchant-portal.xml`: + +**config/Zed/navigation-main-merchant-portal.xml** + +```xml + + + + + Products + products + product-merchant-portal-gui + products + index + + + + Variants + variants + product-merchant-portal-gui + products-concrete + index + + +``` + +2. Update the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the Merchant Portal navigation, **Products** and **Variants** menu items are displayed. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md new file mode 100644 index 00000000000..ba33b2a8fa9 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md @@ -0,0 +1,90 @@ + +This document describes how to install the Merchant Portal - Marketplace Product + Inventory Management feature. + +## Install feature core + +Follow the steps below to install the Merchant Portal - Marketplace Product + Inventory Management feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Merchant Portal Marketplace Product | {{page.release_tag}} | [Install the Merchant Portal - Marketplace Product feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/availability-merchant-portal-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| AvailabilityMerchantPortalGui | spryker/availability-merchant-portal-gui | + +{% endinfo_block %} + + +### 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| TotalProductAvailabilityProductConcreteTableExpanderPlugin | Expands `ProductConcreteTable` with `Available stock` column data. | None | Spryker\Zed\MerchantProduct\Communication\Plugin\Product | + +**src/Pyz/Zed/ProductMerchantPortalGui/ProductMerchantPortalGuiDependencyProvider.php** + +```php + + + */ + protected function getProductConcreteTableExpanderPlugins(): array + { + return [ + new TotalProductAvailabilityProductConcreteTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure the available stock column is displayed in the ProductConcreteTable. + +{% endinfo_block %} + + +### 3) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +### 4) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md new file mode 100644 index 00000000000..14dbd535033 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md @@ -0,0 +1,81 @@ + + +This document describes how to install the Merchant Portal — Marketplace Product Options Management. + +## Install feature core + +Follow the steps below to install the Merchant Portal — Marketplace Product Options Management core. + +### Prerequisites + +To start integration, integrate the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product Options| {{page.release_tag}} | [Install the Marketplace Product Options feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.html) | +| Merchant Portal Marketplace Order Management | {{page.release_tag}} | [Install the Merchant Portal Marketplace Order Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-option-merchant-portal-gui:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOptionMerchantPortalGui | vendor/spryker/product-option-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Add translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| ProductOptionMerchantOrderItemTableExpanderPlugin | Expands `MerchantOrderItemTable` with Product options column settings and data. | None | \Spryker\Zed\ProductOptionMerchantPortalGui\Communication\Plugin\SalesMerchantPortalGui | + +**src/Pyz/Zed/SalesMerchantPortalGui/SalesMerchantPortalGuiDependencyProvider.php** + +```php + + + */ + protected function getProductConcreteTableExpanderPlugins(): array + { + return [ + new ProductOptionMerchantOrderItemTableExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the order item table has product option column settings and displays the correct data in the `http://mp.mysprykershop.com/sales-merchant-portal-gui/item-list` + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md new file mode 100644 index 00000000000..0cada26921d --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md @@ -0,0 +1,91 @@ + +This document describes how to install the Merchant Portal - Marketplace Product + Tax feature. + +## Install feature core + +Follow the steps below to install the Merchant Portal - Marketplace Product + Tax feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Tax | {{page.release_tag}} | [Install the Tax feature](https://github.com/spryker-feature/tax) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/tax-merchant-portal-gui:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| TaxMerchantPortalGui | spryker/tax-merchant-portal-gui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| TaxSetCollection | class | Created | src/Generated/Shared/Transfer/TaxSetCollectionTransfer | +| TaxSet | class | Created | src/Generated/Shared/Transfer/TaxSetTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| TaxProductAbstractFormExpanderPlugin | Expands `ProductAbstractForm` with the *Tax Set* field. | | Spryker\Zed\TaxMerchantPortalGui\Communication\Plugin\ProductMerchantPortalGui | + +**src\Pyz\Zed\ProductMerchantPortalGui\ProductMerchantPortalGuiDependencyProvider.php** + +```php + + */ + protected function getProductAbstractFormExpanderPlugins(): array + { + return [ + new TaxProductAbstractFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure `ProductAbstractForm` has the `TaxSet` field. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-product-data-import-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-product-data-import-feature.md new file mode 100644 index 00000000000..8d693e04a6e --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-portal-product-data-import-feature.md @@ -0,0 +1,295 @@ +This document describes how to install the Marketplace Merchant Portal Data Import feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------------------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Merchant Portal Core feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Merchant Data Import | {{page.release_tag}} | [Install the Marketplace Merchant Data Import feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature) | + +## Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-data-import:"^0.5.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------|----------------------------------------------| +| MerchantProductDataImport | vendor/spryker/merchant-product-data-import | + +{% endinfo_block %} + + +### Add file system configuration + +Add file system configuration for storing merchant files: + +**config/Shared/config_default.php** + +```php +$config[MerchantProductDataImportConstants::FILE_SYSTEM_NAME] = 'merchant-product-data-import-files'; +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + 'merchant-product-data-import-files' => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'key' => getenv('S3_MERCHANT_FILES_KEY') ?: '', + 'bucket' => getenv('S3_MERCHANT_FILES_BUCKET') ?: '', + 'secret' => getenv('S3_MERCHANT_FILES_SECRET') ?: '', + 'path' => '/merchant-product-data-import-files', + 'version' => 'latest', + 'region' => getenv('AWS_REGION') ?: 'eu-central-1', + ], +]; +``` + +For local development, you can use the following configuration: + +**config/Shared/config_default-docker.dev.php** + +```php +$config[FileSystemConstants::FILESYSTEM_SERVICE]['merchant-product-data-import-files'] = [ + 'sprykerAdapterClass' => LocalFilesystemBuilderPlugin::class, + 'root' => '/data/data/merchant-product-data-import-files', + 'path' => '', +]; +``` + +## Generate required transfer objects and database changes + +```bash +vendor/bin/console transfer:generate +vendor/bin/console propel:install +``` + +## Add translations + +Generate a new translation cache: + +```bash +vendor/bin/console translator:generate-cache +``` + +## Add configuration + +Enable product data import by registering the plugin. + +| PLUGIN | SPECIFICATION | NAMESPACE | +|----------------------------------------------------------|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------| +| MerchantCombinedProductDataImportPlugin | Adds a type of merchant product data import. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImport | +| MerchantCombinedProductMerchantFileValidationPlugin | Validates required headers in merchant combined product data import files. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedProductMerchantFileRequestExpanderPlugin | Expands a data import merchant file collection request. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | +| MerchantCombinedProductPossibleCsvHeaderExpanderPlugin | Expands the CSV headers defined in configuration for merchant combined product data import files. | Spryker\Zed\MerchantProductDataImport\Communication\Plugin\DataImportMerchant | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + 'js/static/merchant-product-data-import/data/files/combined_product.csv', + ]; + } +} +``` + +**src/Pyz/Zed/DataImportMerchantPortalGui/DataImportMerchantPortalGuiConfig.php** + +```php + + src/Pyz/Zed/MerchantProductDataImport/MerchantProductDataImportConfig.php + + +```php + + +{% info_block warningBox "Verification" %} + +In the Merchant Portal go to **Data Import**. Make sure the following applies: +- **Product** import type is displayed in import types +- You can download a product data import template labeled as **CSV template Product** + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md new file mode 100644 index 00000000000..60633479257 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-customer-account-management-feature.md @@ -0,0 +1,72 @@ + + +This document describes how to install the Merchant Switcher + Customer Account Management feature. + +## Install feature frontend + +Follow the steps below to install the Marketplace Order Management + Customer Account Management feature frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ------------------ | ----------- | ----------| +| Merchant Switcher | {{page.release_tag}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/latest/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | + +### 1) Set up the transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes were applied in transfer objects. + +| TRANSFER | TYPE | EVENT | PATH | +| ---------------- | --------- | --------- | ------------------------------- | +| ShopContext.merchantReference | attribute | created | src/Generated/Shared/Transfer/ShopContextTransfer | + +{% endinfo_block %} + +### 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE| +| ------------------- | ------------------ | ------------------- |------------------- | +| MerchantSwitchCartAfterCustomerAuthenticationSuccessPlugin | Sets merchant reference value to cookies if a customer's quote contains it, and the quote is not empty. | | SprykerShop\Yves\MerchantSwitcherWidget\Plugin\CustomerPage | + + + +```php + + */ + protected function getAfterCustomerAuthenticationSuccessPlugins(): array + { + return [ + new MerchantSwitchCartAfterCustomerAuthenticationSuccessPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that after customers log in, their selected merchant is not changed and set correctly. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-feature.md new file mode 100644 index 00000000000..b97b0780322 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-feature.md @@ -0,0 +1,300 @@ + + +This document describes how to install the Merchant Switcher feature. + +## Install feature core + +Follow the steps below to install the Merchant Switcher feature. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ---------- | --------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/merchant-switcher --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --------------- | ------------------------ | +| MerchantSwitcher | spryker/merchant-switcher | + +{% endinfo_block %} + +### 2) Set up the transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ------------------ | --- | ---- | ------------------- | +| MerchantSwitchRequest | class | created | src/Generated/Shared/Transfer/MerchantSwitchRequestTransfer | + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Merchant Switcher feature frontend. + +### Prerequisites + +To start feature integration, overview, and install the necessary features: + +| NAME | VERSION | +| ------------ | -------- | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-shop/merchant-switcher-widget --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ----------- | -------------- | +| MerchantSwitcher | spryker/merchant-switcher | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes were applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| ----------- | ---- | ------ | ----------------------- | +| MerchantSwitchRequest | class | created | src/Generated/Shared/Transfer/MerchantSwitchRequestTransfer | + +{% endinfo_block %} + +### 2) Add translations + +Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```yaml +merchant_switcher.message,Switch from %currentMerchant% to %newMerchant%? Because of different availability, not all products may be added to your shopping cart.,en_US +merchant_switcher.message,Wechseln von %currentMerchant% zu %newMerchant%? Aufgrund unterschiedlicher Verfügbarkeit können ggf. nicht alle Produkte in Warenkorb übernommen werden.,de_DE +merchant_switcher.message.product_is_not_available,"Product %product_name% (SKU %sku%) is not available from the selected merchant. Please remove it in order to proceed or switch the merchant.",en_US +merchant_switcher.message.product_is_not_available,"Produkt %product_name% (SKU %sku%) ist beim ausgewählten Händler nicht erhältlich. Bitte diesen Artikel entfernen, um fortzufahren oder den Händler zu wechseln.",de_DE +merchant_switcher.label,My Merchant,en_US +merchant_switcher.label,Mein Händler,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------------- | --------------- | ------------- | ------------ | +| MerchantSwitcherWidgetRouteProviderPlugin | Wires the merchant switch request route to the shop router. | | SprykerShop\Yves\MerchantSwitcherWidget\Plugin\Router | +| MerchantShopContextExpanderPlugin | Adds the merchant reference from cookie to `ShopContext`. | | SprykerShop\Yves\MerchantSwitcherWidget\Plugin\ShopApplication | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MerchantSwitcherWidgetRouteProviderPlugin(), + ]; + } +} +``` + +**src/Pyz/Yves/ShopContext/ShopContextDependencyProvider.php** + +```php + + */ + protected function getShopContextExpanderPlugins(): array + { + return [ + new MerchantShopContextExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Client/SearchElasticsearch/SearchElasticsearchDependencyProvider.php** + +```php + + */ + protected function getSearchConfigExpanderPlugins(Container $container): array + { + return [ + new MerchantNameSearchConfigExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/ProductOfferGui/ProductOfferGuiDependencyProvider.php** + +```php + + */ + protected function getShopContextExpanderPlugins(): array + { + return [ + new MerchantShopContextExpanderPlugin(), + ]; + } +} +``` + +### 4) Set up widgets + +Register the following plugins to enable widgets: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| -------------------- | -------------- | ------------- | --------------------- | +| MerchantSwitcherSelectorFormWidget | Shows a list of merchants that you can switch the shop context in between. | | SprykerShop\Yves\MerchantSwitcherWidget\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + MerchantSwitcherSelectorFormWidget::class, + ]; + } +} +``` + +Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets were registered: + +| MODULE | TEST | +| ------------------- | ------------------------ | +| MerchantSwitcherSelectorFormWidget | Check the top navigation and change the merchant, wait for page reload and the shop context to be changed (default selected product offers). | + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|--------------------------------------------------|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Merchant Switcher + Customer Account Management | | [Install the Merchant Switcher + Customer Account Management feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.html) | +| Merchant Switcher + Wishlist | | [Install the Merchant Switcher + Wishlist feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.html) | diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-wishlist-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-wishlist-feature.md new file mode 100644 index 00000000000..039e1597254 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-merchant-switcher-wishlist-feature.md @@ -0,0 +1,57 @@ + + +This document describes how to install the Merchant Switcher + Wishlist feature. + +## Install feature core + +Follow the steps below to install the Merchant Switcher + Wishlist feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Merchant Switcher | {{page.release_tag}} | [Install the Merchant Switcher feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.html)| +| Marketplace Wishlist | {{page.release_tag}} | [Install the Marketplace Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| SingleMerchantWishlistReloadItemsPlugin | Expands `WishlistItemMetaFormType` with the hidden fields for the `merchant_reference` and the `product_offer_reference`. | | Spryker\Zed\MerchantSwitcher\Communication\Plugin\Wishlist | +| SingleMerchantWishlistItemsValidatorPlugin | Expands `WishlistItemMetaFormType` with the hidden fields for the `merchant_reference` and the `product_offer_reference`. | | Spryker\Zed\MerchantSwitcher\Communication\Plugin\Wishlist | + +```php + + */ + protected function getWishlistReloadItemsPlugins(): array + { + return [ + new SingleMerchantWishlistReloadItemsPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\WishlistItemsValidatorPluginInterface> + */ + protected function getWishlistItemsValidatorPlugins(): array + { + return [ + new SingleMerchantWishlistItemsValidatorPlugin(), + ]; + } +} +``` diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..b2446b36de1 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-prices-marketplace-merchant-commission-feature.md @@ -0,0 +1,70 @@ +This document describes how to install the Prices + Marketplace Merchant Commission feature. + + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | +| Prices | {{page.release_tag}} | [Install the Prices feature](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker/price-product-merchant-commission-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------------|------------------------------------------------------| +| PriceProductMerchantCommissionConnector | vendor/spryker/product-merchant-commission-connector | + +{% endinfo_block %} + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|------------------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------| +| PriceProductMerchantCommissionItemCollectorRulePlugin | Collects items with a unit price that matches the provided clause. | | Spryker\Zed\PriceProductMerchantCommissionConnector\Communication\Plugin\MerchantCommission | + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new PriceProductMerchantCommissionItemCollectorRulePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Import a new merchant commission via data import or GUI import with item condition defined as a query string with an `item-price` field. For example, `item-price >= '500'`. +2. Add a merchant product with the corresponding price to cart and place the order. +3. Make sure the following applies: +- The `commission-calculate` OMS event has been triggered. +- In the `spy_sales_merchant_commission` database table, a record with the merchant commission applied to corresponding sales order item has been created. + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..f7ea99d347f --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/marketplace/install-the-product-marketplace-merchant-commission-feature.md @@ -0,0 +1,69 @@ +This document describes how to install the Product + Marketplace Merchant Commission feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Commission | {{page.release_tag}} | [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker/product-merchant-commission-connector:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------|------------------------------------------------------| +| ProductMerchantCommissionConnector | vendor/spryker/product-merchant-commission-connector | + +{% endinfo_block %} + + +## 2) Set up behavior + +Set up the following behaviors: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|----------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------| +| ProductAttributeMerchantCommissionItemCollectorRulePlugin | Collects items with attributes that match the provided clause. | | Spryker\Zed\ProductMerchantCommissionConnector\Communication\Plugin\MerchantCommission | + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new ProductAttributeMerchantCommissionItemCollectorRulePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Import a new merchant commission via data import or GUI import with an item condition defined as a query string with an *attribute* field. For example, `attribute.brand IS IN 'samsung;sony'`. +2. Add a merchant product with the corresponding product attribute to the cart and place the order. +Make sure the following applies: +- The `commission-calculate` OMS event has been triggered. +- In the `spy_sales_merchant_commission` database table, a record with the merchant commission applied to corresponding sales order item has been added. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/ssp-frontend-templates.md b/_includes/pbc/all/install-features/202602.0/ssp-frontend-templates.md new file mode 100644 index 00000000000..fb4c187cc15 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/ssp-frontend-templates.md @@ -0,0 +1,40 @@ +## Set up frontend templates + +To prevent conflicts with your existing project templates, change or create the following files for SSP features: + + +[`src/Pyz/Yves/CartPage/Theme/default/components/molecules/product-cart-items-list/product-cart-items-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-be7757d682368ef8b6306546d54d41d0eb650dc865fabeddc366a6914bccd74d) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/address-item-form-field-list.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-76f4cad1ff0a953fe0174ace4f4e70e20d2b87a56a8253a224ac3db85517b3c7) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/address-item-form-field-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-be8e8fd1ddf324181d112e1480536cd0516659681bb0b907297b6edbfd733385) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a22a2c2c9e1b24255a3a643095d55019cbccc6d7381f0f6c47e422868423a07c) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form/address-item-form.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e651452fd8b180e34d66c39a6bee497a657a6b9ee82ddd5e242b6fd06be01234) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/validate-next-checkout-step/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-685de07f32e0d3a6e3a25546edb5f95e73bad8a92cc319c068844bbe33fc44aaasf) +[`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/validate-next-checkout-step/validate-next-checkout-step.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e58763a612811b122109b1a3afcccc039fb08d2057a88ec70404fa3c76e09fd3) +[`src/Pyz/Yves/CheckoutPage/Theme/default/templates/page-layout-checkout/page-layout-checkout.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-e7f2dca47c3ea2b3193d2d15870dc265f81774ba7df603fc466247a3a16b06a6) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/address/address.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a4f02c98bc8e983f629cc3e532c61a7db7ba9806206b13ce470b24b78b752ba8) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-ec7eac5ee6a918e5d3f7eded3424177bb700eecdb1ca6eadbe73e305c638dead) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/shipment/shipment.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-3c2cef7d110113aaf077cd014832b1949179177f549c04cdee6519b59044ad1c) +[`src/Pyz/Yves/CheckoutPage/Theme/default/views/summary/summary.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-df1420128913cf96b8668a5ad8afbd663c3c2625cfe5ac75ee78437c2f331fc1) +[`src/Pyz/Yves/ClickAndCollectPageExample/Theme/default/components/molecules/service-point-selector/service-point-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a8dafd3dc7efd5d6ceb4f3ada6faad73709bd544a6de09249a3debccc68107b0) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/address-form-toggler.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-5b5b794ecebc1b7dd0fdae72c51e33f16377adf7ba174fc082770a925b4a3b93) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/address-form-toggler.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-99ab0c750610723968334b5c15b54181b07137be68aee1ec55f740e294e17fa1) +[`src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/address-form-toggler/index.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-11ddabbf6c1635aca0c11e787e9c334dc4e7b6208a036957fc7dad68df6526c1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/service-point-shipment-types/service-point-shipment-types.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a121877cb09b3adf2f9468311f6828f14655d2db035b790b9b818989a46963e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/address-form-items-by-shipment-type/address-form-items-by-shipment-type.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-f37874eccdd9fc18c19ee7888df362c0965e38903474a9b507b2125da341adbe) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/single-address-per-shipment-type/single-address-per-shipment-type.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-d205e0d0f2fe84c935ea96f00e2409f28fd756bd0ae294fa52503c3eb907e9a9) +[`src/Pyz/Yves/ShipmentTypeWidget/Theme/default/components/molecules/shipment-type-toggler/shipment-type-toggler.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-96e8b175f1d8d39479c965bf9211ff0b6f340378dec85ab09e990d13ec897264) +[`src/Pyz/Yves/ServicePointWidget/Theme/default/components/molecules/service-point/service-point.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/668/files?file-filters%5B%5D=.js&file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-9495167856d12408a1da414d94b4987a62bdd6103a54a35f3e31d3f92eeaf01d) + + +[`src/Pyz/Yves/CatalogPage/Theme/default/components/molecules/sort/sort.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-b82014b258cd751113519031eec426902dc873d89a95c80e5027dd99914a8353) +[`src/Pyz/Yves/CatalogPage/Theme/default/components/organisms/filter-section/filter-section.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-fca7e1df593bbf7891861d2a1c43015eff5fbb46a09ec04903d08bd53310cf21) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-finder/asset-finder.ts`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-b37bfae7fc611bc18bfddb693dfd1e57cdc9ffb7cdf83decde931ac3de332c9c) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-finder/asset-finder.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-de4a3705133b93463c213ec2f4b3d482d4dcc4d4b49247631b37ea728fc072e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-list/asset-list.scss`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-052282c197c07f15fb6d729df046f2673c16f6fd0d67c6cff93c4da32dea8ba7) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-list/asset-list.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-7bf406253ca401be2e5a6754c3a01335f3b02ce10a18edc36ce28fc05a9ff9c8) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-selector/asset-selector.scss`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-4d9a709cd47475a2895e45718177e61dd2ce231dc14ad071c9ab1410e5de3f18) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/asset-selector/asset-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-5205fa69d2249f1eb17be5597c177327dd64232d69def1d9af031b01cad894da) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/components/molecules/service-point-shipment-types/service-point-shipment-types.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-a121877cb09b3adf2f9468311f6828f14655d2db035b790b9b818989a46963e1) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/asset-filter/asset-filter.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-1b433d8e0608a26e14b6127ece330851365d965798eec52e45af9b39f0d38b34) +[`src/Pyz/Yves/SelfServicePortal/Theme/default/views/item-asset-selector/item-asset-selector.twig`](https://github.com/spryker-shop/b2b-demo-shop/pull/822/files?file-filters%5B%5D=.scss&file-filters%5B%5D=.ts&file-filters%5B%5D=.twig&show-viewed-files=true#diff-6c9d43b28bcafa509a0e6733627587aa4f29e3f6ae34f311f7b7bac780412694) + diff --git a/_includes/pbc/all/install-features/202602.0/ssp-glossary-data-import.md b/_includes/pbc/all/install-features/202602.0/ssp-glossary-data-import.md new file mode 100644 index 00000000000..c79adcc73f5 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/ssp-glossary-data-import.md @@ -0,0 +1,1850 @@ +This document contains glossaries for Self-Service Portal features. + +**data/import/common/common/glossary.csv** + +```csv +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +service_point_cart.checkout.validation.error,Selected service point "%uuid%" is not available for the store "%store_name%",en_US +service_point_cart.checkout.validation.error,Der ausgewählte Servicepunkt "%uuid%" ist für den Shop "%store_name%" nicht verfügbar,de_DE +service_point_widget.validation.error.service_point_not_selected,Please select service point.,en_US +service_point_widget.validation.error.service_point_not_selected,Bitte Servicestelle auswählen.,de_DE +service_point_widget.validation.error.billing_address_not_provided,Please add billing address manually.,en_US +service_point_widget.validation.error.billing_address_not_provided,Bitte fügen Sie die Rechnungsadresse manuell hinzu.,de_DE +service_point_widget.select_location_action,Select a service shop,en_US +service_point_widget.select_location_action,Wählen Sie eine Servicestelle,de_DE +service_point_widget.change_action,Change,en_US +service_point_widget.change_action,Ändern,de_DE +service_point_widget.select_your_store_title,Select your store,en_US +service_point_widget.select_your_store_title,Wählen Sie Ihren Store,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +shipment_type.name.shipment_type_delivery,Delivery,en_US +shipment_type.name.shipment_type_delivery,Lieferung,de_DE +shipment_type.name.shipment_type_pickup,Pickup,en_US +shipment_type.name.shipment_type_pickup,Abholung,de_DE +shipment_type.validation.shipment_type_entity_not_found,A delivery type entity was not found.,en_US +shipment_type.validation.shipment_type_entity_not_found,Lieferart wurde nicht gefunden.,de_DE +shipment_type.validation.shipment_type_key_exists,A delivery type with the same key already exists.,en_US +shipment_type.validation.shipment_type_key_exists,Es existiert bereits eine Lieferart mit dem gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_is_not_unique,At least two delivery types in this request have the same key.,en_US +shipment_type.validation.shipment_type_key_is_not_unique,Mindestens zwei Lieferarten in dieser Anfrage haben den gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_invalid_length,A delivery type key must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_key_invalid_length,Der Lieferart-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.shipment_type_name_invalid_length,A delivery type name must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_name_invalid_length,Der Lieferart-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +shipment_type.validation.store_does_not_exist,Store mit dem Namen ‘%name%’ existiert nicht.,de_DE +shipment_types_rest_api.error.shipment_type_not_available,Selected delivery type "%name%" is not available.,en_US +shipment_types_rest_api.error.shipment_type_not_available,Die ausgewählte Lieferart "%name%" ist nicht verfügbar.,de_DE +merchant_product_offer.view_seller,View Seller,en_US +merchant_product_offer.view_seller,Händler ansehen,de_DE +merchant_product_offer.sold_by,Sold by,en_US +merchant_product_offer.sold_by,Verkauft durch,de_DE +product-offer.info.product-offer-inactive.removed,Inactive item %sku% was removed from your shopping cart.,en_US +product-offer.info.product-offer-inactive.removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +product-offer.info.reference.invalid,Product offer reference not found for product with SKU '%sku%'.,en_US +product-offer.info.reference.invalid,Produktangebotsreferenz für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +product-offer.message.not-active-or-approved,"Product offer not active for product with SKU '%sku%'.",en_US +product-offer.message.not-active-or-approved,"Produktangebot ist inaktiv für Produkt mit SKU '%sku%'.",de_DE +merchant_product_offer_widget.merchant_name,Merchant,en_US +merchant_product_offer_widget.merchant_name,Händler,de_DE +self_service_portal.asset.selector.label,Assign this item to an asset,en_US +self_service_portal.asset.selector.label,Weise dieses Element einem Vermögenswert zu,de_DE +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.selector.search_placeholder,"Search by name, reference or serial number",en_US +self_service_portal.asset.selector.search_placeholder,"Nach Name, Referenz oder Seriennummer suchen",de_DE +self_service_portal.asset.selector.no_assets_available,No assets available,en_US +self_service_portal.asset.selector.no_assets_available,Keine Assets verfügbar,de_DE +self_service_portal.asset.selector.change,Change,en_US +self_service_portal.asset.selector.change,Ändern,de_DE +self_service_portal.asset.compatibility.compatible,Compatible,en_US +self_service_portal.asset.compatibility.compatible,Kompatibel,de_DE +self_service_portal.asset.compatibility.not_compatible,Not Compatible,en_US +self_service_portal.asset.compatibility.not_compatible,Nicht kompatibel,de_DE +cart.shipping,Versand,de_DE +cart.shipping,Shipping,en_US +self_service_portal.asset.assigned_asset,Zugewiesenes Asset,de_DE +self_service_portal.asset.assigned_asset,Assigned Asset,en_US +self_service_portal.asset.name,Asset Name,de_DE +self_service_portal.asset.name,Asset Name,en_US +self_service_portal.asset.serial_number,Asset Seriennummer,de_DE +self_service_portal.asset.serial_number,Asset Serial number,en_US +self_service_portal.asset.compatibility,Asset Kompatibilität,de_DE +self_service_portal.asset.compatibility,Asset Compatibility,en_US +self_service_portal.service.cancellation.error.no_items,No order items provided.,en_US +self_service_portal.service.cancellation.error.no_items,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.cancel_service,Cancel Service,en_US +self_service_portal.service.cancel_service,Dienstleistung stornieren,de_DE +self_service_portal.service.cancellation.success,Service has been successfully cancelled.,en_US +self_service_portal.service.cancellation.success,Die Dienstleistung wurde erfolgreich storniert.,de_DE +self_service_portal.service.cancellation.error,Failed to cancel the service.,en_US +self_service_portal.service.cancellation.error,Die Stornierung der Dienstleistung ist fehlgeschlagen.,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.validation.status_change_failed,The status change failed.,en_US +self_service_portal.service.validation.status_change_failed,Die Statusänderung ist fehlgeschlagen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View Company Files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View Files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View Business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit Dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der Firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der Geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View Dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum Anzeigen des Dashboards,de_DE +self_service_portal.inquiry.success.created,Inquiry has been submitted successfully,en_US +self_service_portal.inquiry.success.created,Anfrage wurde erfolgreich übermittelt,de_DE +self_service_portal.inquiry.type.label,Type,en_US +self_service_portal.inquiry.type.label,Typ,de_DE +self_service_portal.inquiry.access.denied,Access denied.,en_US +self_service_portal.inquiry.access.denied,Zugriff verweigert.,de_DE +self_service_portal.inquiry.success.canceled,Inquiry has been canceled.,en_US +self_service_portal.inquiry.success.canceled,Die Anfrage wurde storniert.,de_DE +self_service_portal.inquiry.cancel,Cancel inquiry,en_US +self_service_portal.inquiry.cancel,Anfrage stornieren,de_DE +self_service_portal.inquiry.create.select_type,Select type,en_US +self_service_portal.inquiry.create.select_type,Typ auswählen,de_DE +self_service_portal.inquiry.status.pending,Pending,en_US +self_service_portal.inquiry.status.pending,Ausstehend,de_DE +self_service_portal.inquiry.status.in_review,In Review,en_US +self_service_portal.inquiry.status.in_review,In Bearbeitung,de_DE +self_service_portal.inquiry.status.approved,Approved,en_US +self_service_portal.inquiry.status.approved,Genehmigt,de_DE +self_service_portal.inquiry.status.rejected,Rejected,en_US +self_service_portal.inquiry.status.rejected,Abgelehnt,de_DE +self_service_portal.inquiry.status.canceled,Canceled,en_US +self_service_portal.inquiry.status.canceled,Storniert,de_DE +self_service_portal.inquiry.subject.label,Subject,en_US +self_service_portal.inquiry.subject.label,Betreff,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Your inquiry %reference% was rejected.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Ihre Anfrage %reference% wurde abgelehnt.,de_DE +self_service_portal.inquiry.description.label,Description,en_US +self_service_portal.inquiry.description.label,Beschreibung,de_DE +self_service_portal.inquiry.files.label,File Upload,en_US +self_service_portal.inquiry.files.label,Datei-Upload,de_DE +self_service_portal.inquiry.type.general,General,en_US +self_service_portal.inquiry.type.general,Allgemein,de_DE +self_service_portal.inquiry.type.order,Order Claim,en_US +self_service_portal.inquiry.type.order,Bestellreklamation,de_DE +customer.account.ssp_inquiries,Inquiries,en_US +customer.account.ssp_inquiries,Anfragen,de_DE +customer.ssp_inquiries.access_level.placeholder,Select access level,en_US +customer.ssp_inquiries.access_level.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or description",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Beschreibung",de_DE +customer.ssp_inquiries.access_level.company_inquiries,Company inquiries,en_US +customer.ssp_inquiries.access_level.company_inquiries,Firmenanfragen,de_DE +customer.ssp_inquiries.search.label,"Search",en_US +customer.ssp_inquiries.search.label,"Suche",de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or subject",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Betreff",de_DE +customer.ssp_inquiries.access_level.label,Access Level,en_US +customer.ssp_inquiries.access_level.label,Zugriffsebene,de_DE +customer.ssp_inquiries.access_level.my_inquiries,My inquiries,en_US +customer.ssp_inquiries.access_level.my_inquiries,Meine anfragen,de_DE +customer.self_service_portal.inquiry.create_ssp_inquiry,Create inquiry,en_US +customer.self_service_portal.inquiry.create_ssp_inquiry,Anfrage stellen,de_DE +self_service_portal.inquiry.validation.type.invalid,Invalid inquiry type.,en_US +self_service_portal.inquiry.validation.type.invalid,Ungültiger Anfragetyp.,de_DE +self_service_portal.inquiry.list.widget.title,Inquiries,en_US +self_service_portal.inquiry.list.widget.title,Anfragen,de_DE +customer.self_service_portal.inquiry.list,Inquiries,en_US +customer.self_service_portal.inquiry.list,Anfragen,de_DE +self_service_portal.inquiry.file.file_not_found,File not found,en_US +self_service_portal.inquiry.file.file_not_found,Datei wurde nicht gefunden,de_DE +self_service_portal.inquiry.file.mime_type.error,Invalid file format.,en_US +self_service_portal.inquiry.file.mime_type.error,Ungültiger Dateiformat.,de_DE +self_service_portal.inquiry.validation.company_user.not_set,Company user is missing.,en_US +self_service_portal.inquiry.validation.company_user.not_set,Firmenbenutzer fehlt.,de_DE +self_service_portal.inquiry.validation.type.not_set,Inquiry type is missing.,en_US +self_service_portal.inquiry.validation.type.not_set,Anfragetyp fehlt.,de_DE +self_service_portal.inquiry.validation.subject.not_set,Inquiry subject is missing.,en_US +self_service_portal.inquiry.validation.subject.not_set,Betreff der Anfrage fehlt.,de_DE +self_service_portal.inquiry.validation.description.not_set,Inquiry description is missing.,en_US +self_service_portal.inquiry.validation.description.not_set,Anfragebeschreibung fehlt.,de_DE +self_service_portal.inquiry.error.file.format.invalid,An array of files is expected.,en_US +self_service_portal.inquiry.error.file.format.invalid,Ein Array von Dateien wurde erwartet.,de_DE +self_service_portal.inquiry.error.file.count.invalid,Invalid number of files. Maximum number of files: {{ limit }},en_US +self_service_portal.inquiry.error.file.count.invalid,Ungültige Dateianzahl. Maximale Anzahl von Dateien: {{ limit }},de_DE +self_service_portal.inquiry.error.file.size.invalid,"Invalid total file size. The maximum allowed size for all files is %maxSize%, but %size% was uploaded.",en_US +self_service_portal.inquiry.error.file.size.invalid,"Ungültige Gesamtdateigröße. Die maximal zulässige Größe für alle Dateien beträgt %maxSize%, aber es wurde %size% hochgeladen.",de_DE +self_service_portal.inquiry.error.status_change,The status change failed.,en_US +self_service_portal.inquiry.error.status_change,Die Statusänderung ist fehlgeschlagen.,de_DE +self_service_portal.inquiry.submit.button,Submit inquiry,en_US +self_service_portal.inquiry.submit.button,Anfrage senden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +customer.self_service_portal.inquiry.all_ssp_inquiries,Inquiries,en_US +customer.self_service_portal.inquiry.all_ssp_inquiries,Anfragen,de_DE +customer.self_service_portal.inquiry.list.reference,Reference,en_US +customer.self_service_portal.inquiry.list.reference,Referenz,de_DE +customer.self_service_portal.inquiry.list.type,Type,en_US +customer.self_service_portal.inquiry.list.type,Typ,de_DE +customer.self_service_portal.inquiry.list.subject,Subject,en_US +customer.self_service_portal.inquiry.list.subject,Betreff,de_DE +customer.self_service_portal.inquiry.list.owner,Owner,en_US +customer.self_service_portal.inquiry.list.owner,Eingentümer,de_DE +customer.self_service_portal.inquiry.list.date_created,Date,en_US +customer.self_service_portal.inquiry.list.date_created,Datum,de_DE +customer.self_service_portal.inquiry.list.status,Status,en_US +customer.self_service_portal.inquiry.list.status,Status,de_DE +self_service_portal.inquiry.list.filter.type.placeholder,Select type,en_US +self_service_portal.inquiry.list.filter.type.placeholder,Typ auswählen,de_DE +self_service_portal.inquiry.list.filter.type.label,Type,en_US +self_service_portal.inquiry.list.filter.type.label,Typ,de_DE +self_service_portal.inquiry.list.filter.status.placeholder,Select status,en_US +self_service_portal.inquiry.list.filter.status.placeholder,Status auswählen,de_DE +self_service_portal.inquiry.list.filter.status.label,Status,en_US +self_service_portal.inquiry.list.filter.status.label,Status,de_DE +customer.account.no_ssp_inquiries,You do not have inquiries yet.,en_US +customer.account.no_ssp_inquiries,Sie haben noch keine Anfragen.,de_DE +customer.self_service_portal.inquiry.view_ssp_inquiry,View,en_US +customer.self_service_portal.inquiry.view_ssp_inquiry,Ansehen,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen angegeben.,de_DE +self_service_portal.service.validation.order_not_found,Order with ID %id% not found.,en_US +self_service_portal.service.validation.order_not_found,Bestellung mit ID %id% nicht gefunden.,de_DE +self_service_portal.service.validation.no_payment_methods_found,No payment methods found for this order.,en_US +self_service_portal.service.validation.no_payment_methods_found,Keine Zahlungsmethoden für diese Bestellung gefunden.,de_DE +self_service_portal.service.list.search_placeholder,Search,en_US +self_service_portal.service.list.search_placeholder,Search,de_DE +self_service_portal.service.list.search_button,Search,en_US +self_service_portal.service.list.search_button,Suchen,de_DE +self_service_portal.service.list.title,Services,en_US +self_service_portal.service.list.title,Services,de_DE +self_service_portal.service.list.order_reference,Order Reference,en_US +self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +self_service_portal.service.list.product_name,Service Name,en_US +self_service_portal.service.list.product_name,Servicename,de_DE +self_service_portal.service.list.service_sku,SKU,en_US +self_service_portal.service.list.service_sku,SKU,de_DE +self_service_portal.service.list.scheduled_at,Time and Date,en_US +self_service_portal.service.list.scheduled_at,Zeit und Datum,de_DE +self_service_portal.service.list.created_at,Created At,en_US +self_service_portal.service.list.created_at,Erstellt am,de_DE +self_service_portal.service.list.empty,You don't have any services yet.,en_US +self_service_portal.service.list.empty,Sie haben noch keine Services.,de_DE +self_service_portal.service.list.widget.title,Services,en_US +self_service_portal.service.list.widget.title,Services,de_DE +self_service_portal.service.list.state,State,en_US +self_service_portal.service.list.state,Status,de_DE +self_service_portal.service.list.reset_button,Reset,en_US +self_service_portal.service.list.reset_button,Zurücksetzen,de_DE +self_service_portal.service.list.my_services,My Services,en_US +self_service_portal.service.list.my_services,Meine Services,de_DE +self_service_portal.service.list.business_unit_services,Business Unit Services,en_US +self_service_portal.service.list.business_unit_services,Geschäftsbereich Services,de_DE +self_service_portal.service.list.company_services,Company Services,en_US +self_service_portal.service.list.company_services,Firmenservices,de_DE +self_service_portal.service.update_scheduled_time,Change scheduled time,en_US +self_service_portal.service.update_scheduled_time,Geplante Zeit ändern,de_DE +self_service_portal.service.update_scheduled_time.service.sku,SKU,en_US +self_service_portal.service.update_scheduled_time.service.sku,SKU,de_DE +self_service_portal.service.update_scheduled_time.service.name,Name,en_US +self_service_portal.service.update_scheduled_time.service.name,Name,de_DE +self_service_portal.service.update_scheduled_time.service.quantity,Quantity,en_US +self_service_portal.service.update_scheduled_time.service.quantity,Menge,de_DE +self_service_portal.service.update_scheduled_time.service.state,State,en_US +self_service_portal.service.update_scheduled_time.service.state,Status,de_DE +self_service_portal.service.update_scheduled_time.title,Update Service Scheduled Time,en_US +self_service_portal.service.update_scheduled_time.title,Geplante Servicezeit aktualisieren,de_DE +self_service_portal.service.update_scheduled_time.success,Order item rescheduled successfully.,en_US +self_service_portal.service.update_scheduled_time.success,Bestellposition erfolgreich neu geplant.,de_DE +self_service_portal.service.update_scheduled_time.order_item_details,Order Item Details,en_US +self_service_portal.service.update_scheduled_time.order_item_details,Bestellpositionsdetails,de_DE +self_service_portal.service.update_scheduled_time.button.save,Save,en_US +self_service_portal.service.update_scheduled_time.button.save,Speichern,de_DE +self_service_portal.service.update_scheduled_time.button.cancel,Cancel,en_US +self_service_portal.service.update_scheduled_time.button.cancel,Abbrechen,de_DE +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Order item with uuid %uuid% not found.,en_US +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Bestellposition mit UUID %uuid% nicht gefunden.,de_DE +self_service_portal.service.list.field.business_unit,Access Level,en_US +self_service_portal.service.list.field.business_unit,Zugriffsebene,de_DE +self_service_portal.service.list.button.view,View,en_US +self_service_portal.service.list.button.view,Ansehen,de_DE +self_service_portal.company_file.table.header.file_reference,Reference,en_US +self_service_portal.company_file.table.header.file_reference,Referenz,de_DE +self_service_portal.company_file.table.header.file_name,File Name,en_US +self_service_portal.company_file.table.header.file_name,Dateiname,de_DE +self_service_portal.company_file.table.header.file_type,File Format,en_US +self_service_portal.company_file.table.header.file_type,Dateiformat,de_DE +self_service_portal.company_file.table.header.file_created_at,Date Added,en_US +self_service_portal.company_file.table.header.file_created_at,Datum hinzugefügt,de_DE +self_service_portal.company_file.table.header.file_size,Size,en_US +self_service_portal.company_file.table.header.file_size,Größe,de_DE +self_service_portal.company_file.table.header.actions,Actions,en_US +self_service_portal.company_file.table.header.actions,Aktionen,de_DE +self_service_portal.company_file.table.actions.download,Download,en_US +self_service_portal.company_file.table.actions.download,Herunterladen,de_DE +self_service_portal.company_file,Files,en_US +self_service_portal.company_file,Dateien,de_DE +self_service_portal.company_file.view.empty,You do not have any files yet.,en_US +self_service_portal.company_file.view.empty,Sie haben noch keine Dateien.,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Select type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Typ auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.label,Type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.label,Typ,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Date From,en_US +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Datum von,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Date To,en_US +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Datum bis,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Select access level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Zugriffsebene auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.search.label,Search,en_US +self_service_portal.company_file.file_search_filter_form.field.search.label,Suche,de_DE +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Reset All,en_US +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +self_service_portal.company_file.file_search_filter_form.label.active_filters,Active Filters:,en_US +self_service_portal.company_file.file_search_filter_form.label.active_filters,Aktive Filter:,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.ssp_inquiries.date_from,Date from,en_US +customer.ssp_inquiries.date_from,Datum von,de_DE +customer.ssp_inquiries.date_to,Date to,en_US +customer.ssp_inquiries.date_to,Datum bis,de_DE +customer.account.ssp_inquiry.details,Inquiry,en_US +customer.account.ssp_inquiry.details,Anfrage,de_DE +customer.ssp_inquiry.details.reference,Reference,en_US +customer.ssp_inquiry.details.reference,Referenz,de_DE +customer.ssp_inquiry.details.date,Date,en_US +customer.ssp_inquiry.details.date,Datum,de_DE +customer.ssp_inquiry.details.status,Status,en_US +customer.ssp_inquiry.details.status,Status,de_DE +customer.ssp_inquiry.details,Inquiry Details,en_US +customer.ssp_inquiry.details,Anfragedetails,de_DE +customer.ssp_inquiry.details.type,Type,en_US +customer.ssp_inquiry.details.type,Typ,de_DE +customer.ssp_inquiry.details.subject,Subject,en_US +customer.ssp_inquiry.details.subject,Betreff,de_DE +customer.ssp_inquiry.details.description,Description,en_US +customer.ssp_inquiry.details.description,Beschreibung,de_DE +customer.ssp_inquiry.owner,Owner,en_US +customer.ssp_inquiry.owner,Eigentümer,de_DE +customer.ssp_inquiry.details.first_name,First Name,en_US +customer.ssp_inquiry.details.first_name,Vorname,de_DE +customer.ssp_inquiry.details.last_name,Last Name,en_US +customer.ssp_inquiry.details.last_name,Nachname,de_DE +customer.ssp_inquiry.details.email,E-mail,en_US +customer.ssp_inquiry.details.email,E-Mail,de_DE +customer.ssp_inquiry.details.company,Company / Business Unit,en_US +customer.ssp_inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.ssp_inquiry.details.file.name,File name,en_US +customer.ssp_inquiry.details.file.name,Dateiname,de_DE +customer.ssp_inquiry.details.file.size,Size,en_US +customer.ssp_inquiry.details.file.size,Größe,de_DE +customer.ssp_inquiry.details.file.extension,Type,en_US +customer.ssp_inquiry.details.file.extension,Typ,de_DE +customer.ssp_inquiry.details.file.download,Download,en_US +customer.ssp_inquiry.details.file.download,Herunterladen,de_DE +ssp_inquiry.file.unavailable,File is not available,en_US +ssp_inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.details.files,Files,en_US +customer.ssp_inquiry.details.files,Dateien,de_DE +ssp_inquiry.order.create_ssp_inquiry,Inquiry,en_US +ssp_inquiry.order.create_ssp_inquiry,Reklamation,de_DE +ssp_inquiry.order_reference.label,Order Reference,en_US +ssp_inquiry.order_reference.label,Bestellnummer,de_DE +customer.ssp_inquiry.details.order_reference,Order Reference,en_US +customer.ssp_inquiry.details.order_reference,Bestellnummer,de_DE +ssp_inquiry.error.company_user_not_found,Company user not found.,en_US +ssp_inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +ssp_inquiry.type.general-question,General Question,en_US +ssp_inquiry.type.general-question,Allgemeine Frage,de_DE +ssp_inquiry.type.general-ssp_inquiry,General Inquiry,en_US +ssp_inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +ssp_dashboard.index.widget.title,Dashboard,en_US +ssp_dashboard.index.widget.title,Dashboard,de_DE +ssp_dashboard.general.view_all,View All,en_US +ssp_dashboard.general.view_all,Alle anzeigen,de_DE +ssp_dashboard.general.welcome,"Welcome, %name%",en_US +ssp_dashboard.general.welcome,"Willkommen, %name%",de_DE +ssp_dashboard.overview.title,My Overview,en_US +ssp_dashboard.overview.title,Meine Übersicht,de_DE +ssp_dashboard.general.ssp_assets,Assets,en_US +ssp_dashboard.general.ssp_assets,Assets,de_DE +ssp_dashboard.general.inquiries,Pending Inquiries,en_US +ssp_dashboard.general.inquiries,Ausstehende Ansprüche,de_DE +ssp_dashboard.general.services,Planned Services,en_US +ssp_dashboard.general.services,Geplante Services,de_DE +ssp_dashboard.representatives.title,Service Representatives,en_US +ssp_dashboard.representatives.title,Mitarbeiter des Kundendienstes,de_DE +ssp_dashboard.general.no_data,There is no data yet,en_US +ssp_dashboard.general.no_data,Es gibt noch keine Daten,de_DE +ssp_dashboard.general.news,News & Events,en_US +ssp_dashboard.general.news,Nachrichten & Veranstaltungen,de_DE +dashboard.access.denied,Access denied.,en_US +dashboard.access.denied,Zugriff verweigert.,de_DE +customer.account.files,Files,en_US +customer.account.files,Dateien,de_DE +customer.account.no_files,No Files,en_US +customer.account.no_files,Keine Dateien,de_DE +customer.account.no_ssp_booked_services,You do not have booked services yet.,en_US +customer.account.no_ssp_booked_services,Sie haben noch keine gebuchten Services.,de_DE +dashboard.overview.not_applicable,n/a,en_US +dashboard.overview.not_applicable,n/a,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +product.filter.product-class-names,Product Class,en_US +product.filter.product-class-names,Produktklasse,de_DE +customer.account.ssp_services,Services,en_US +customer.account.ssp_services,Services,de_DE +customer.account.no_ssp_services,There are no services at the moment,en_US +customer.account.no_ssp_services,Es gibt derzeit keine Services,de_DE +customer.ssp_service.order.reference,Order Reference,en_US +customer.ssp_service.order.reference,Bestellreferenz,de_DE +customer.ssp_service.customer,Customer,en_US +customer.ssp_service.customer,Kunde,de_DE +customer.ssp_service.company,Company,en_US +customer.ssp_service.company,Unternehmen,de_DE +customer.ssp_service.service,Service,en_US +customer.ssp_service.service,Service,de_DE +customer.ssp_service.created_at,Date created,en_US +customer.ssp_service.created_at,Erstellt am,de_DE +customer.ssp_service.status,Status,en_US +customer.ssp_service.status,Status,de_DE +customer.ssp_service.scheduled_at,Time and Date,en_US +customer.ssp_service.scheduled_at,Zeit und Datum,de_DE +customer.ssp_service.actions,Actions,en_US +customer.ssp_service.actions,Aktionen,de_DE +customer.ssp_service.view_ssp_service,View,en_US +customer.ssp_service.view_ssp_service,Anzeigen,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +ssp_inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +ssp_asset.validation.cannot_delete_own_assignment,You cannot delete your own assignment.,en_US +ssp_asset.validation.cannot_delete_own_assignment,Sie können Ihre eigene Zuweisung nicht löschen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View company files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View my files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Meine dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum anzeigen des dashboards,de_DE +permission.name.ViewCompanySspAssetPermissionPlugin,View company assets,en_US +permission.name.ViewCompanySspAssetPermissionPlugin,Firmen-assets anzeigen,de_DE +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,View business unit assets,en_US +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +permission.name.CreateSspAssetPermissionPlugin,Create assets,en_US +permission.name.CreateSspAssetPermissionPlugin,Assets erstellen,de_DE +permission.name.UpdateSspAssetPermissionPlugin,Update assets,en_US +permission.name.UpdateSspAssetPermissionPlugin,Assets aktualisieren,de_DE +permission.name.UnassignSspAssetPermissionPlugin,Unassign business unit ssp assets,en_US +permission.name.UnassignSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +ssp_dashboard.overview.not_applicable,n/a,en_US +ssp_dashboard.overview.not_applicable,n/a,de_DE +self_service_portal.asset.form.image.description,"Max up to %size%. Allowed file formats %format%",en_US +self_service_portal.asset.form.image.description,"Maximal bis zu %size%. Erlaubte Dateiformate: %format%",de_DE +self_service_portal.asset.validation.name.not_set,Asset name must be provided,en_US +self_service_portal.asset.validation.name.not_set,Der Name des Assets muss angegeben werden,de_DE +self_service_portal.asset.validation.business_unit.not_set,Business unit must be provided,en_US +self_service_portal.asset.validation.business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.company_business_unit.not_set,Company business unit must be provided,en_US +self_service_portal.asset.validation.company_business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.assets_not_provided,No assets were provided,en_US +self_service_portal.asset.validation.assets_not_provided,Es wurden keine Assets bereitgestellt,de_DE +self_service_portal.asset.validation.id_not_provided,Asset ID was not provided,en_US +self_service_portal.asset.validation.id_not_provided,Asset-ID wurde nicht angegeben,de_DE +self_service_portal.asset.validation.not_found,Asset was not found,en_US +self_service_portal.asset.validation.not_found,Asset wurde nicht gefunden,de_DE +self_service_portal.asset.list.widget.title,Assets,en_US +self_service_portal.asset.list.widget.title,Assets,de_DE +self_service_portal.asset.create.title,Create Asset,en_US +self_service_portal.asset.create.title,Asset erstellen,de_DE +self_service_portal.asset.list.title,Assets,en_US +self_service_portal.asset.list.title,Assets,de_DE +self_service_portal.asset.submit.button,Save,en_US +self_service_portal.asset.submit.button,Speichern,de_DE +self_service_portal.asset.success.created,Asset has been successfully created,en_US +self_service_portal.asset.success.created,Asset wurde erfolgreich erstellt,de_DE +self_service_portal.asset.error.create,Asset creation failed,en_US +self_service_portal.asset.error.create,Fehler beim Erstellen des Assets,de_DE +self_service_portal.asset.form.name,Name,en_US +self_service_portal.asset.form.name,Name,de_DE +self_service_portal.asset.form.serial_number,Serial number,en_US +self_service_portal.asset.form.serial_number,Seriennummer,de_DE +self_service_portal.asset.form.note,Note,en_US +self_service_portal.asset.form.note,Notiz,de_DE +self_service_portal.asset.form.image,Image,en_US +self_service_portal.asset.form.image,Bild,de_DE +self_service_portal.asset.form.image.mime_type_error,Invalid file format. Allowed file formats: {{ types }},en_US +self_service_portal.asset.form.image.mime_type_error,Ungültiges Dateiformat. Erlaubte Dateiformate: {{ types }},de_DE +self_service_portal.asset.form.external_image_url,External Image URL,en_US +self_service_portal.asset.form.external_image_url,Externe Bild-URL,de_DE +self_service_portal.asset.form.external_image_url.note,"Note: If no image is uploaded locally, the asset will use the image from the provided URL.",en_US +self_service_portal.asset.form.external_image_url.note,"Hinweis: Wenn kein Bild lokal hochgeladen wird, verwendet das Asset standardmäßig das Bild von der angegebenen URL.",de_DE +self_service_portal.asset.update.title,Edit Asset,en_US +self_service_portal.asset.update.title,Asset bearbeiten,de_DE +self_service_portal.asset.details.reference,Asset Reference,en_US +self_service_portal.asset.details.reference,Asset-Referenz,de_DE +self_service_portal.asset.cancel.button,Cancel,en_US +self_service_portal.asset.cancel.button,Abbrechen,de_DE +self_service_portal.asset.details.created_date,Date added,en_US +self_service_portal.asset.details.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details.owner,Business unit owner,en_US +self_service_portal.asset.details.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details.confirm_delete_title,Confirm delete,en_US +self_service_portal.asset.details.confirm_delete_title,Löschen bestätigen,de_DE +self_service_portal.asset.details.confirm_delete_body,Are you sure you want to delete the image?,en_US +self_service_portal.asset.details.confirm_delete_body,"Sind Sie sicher, dass Sie das Bild löschen möchten?",de_DE +self_service_portal.asset.success.updated,Asset has been successfully updated,en_US +self_service_portal.asset.success.updated,Asset wurde erfolgreich aktualisiert,de_DE +self_service_portal.asset.image.requirements,Upload image requirements,en_US +self_service_portal.asset.image.requirements,Anforderungen für das Hochladen von Bildern,de_DE +self_service_portal.asset.image.upload,Upload Image,en_US +self_service_portal.asset.image.upload,Bild hochladen,de_DE +self_service_portal.asset.details_page.search_service,Search services,en_US +self_service_portal.asset.details_page.search_service,Services suchen,de_DE +self_service_portal.asset.details_page.name,Name,en_US +self_service_portal.asset.details_page.name,Name,de_DE +self_service_portal.asset.details_page.serial_number,Serial number,en_US +self_service_portal.asset.details_page.serial_number,Seriennummer,de_DE +self_service_portal.asset.details_page.note,Note,en_US +self_service_portal.asset.details_page.note,Notiz,de_DE +self_service_portal.asset.details_page.reference,Reference,en_US +self_service_portal.asset.details_page.reference,Referenz,de_DE +self_service_portal.asset.details_page.confirm_unassign_title,Confirm delete,en_US +self_service_portal.asset.details_page.confirm_unassign_title,Löschen bestätigen,de_DE +self_service_portal.asset.details_page.confirm_unassign_body,Unassign this asset from the business unit. Do you want to proceed?,en_US +self_service_portal.asset.details_page.confirm_unassign_body,Möchten Sie dieses Asset wirklich von der Geschäftseinheit entfernen?,de_DE +self_service_portal.asset.details_page.confirm_unassign_in_review,Asset is in Review. You can delete it after it is approved.,en_US +self_service_portal.asset.details_page.confirm_unassign_in_review,"Die Ressource wird überprüft. Du kannst sie löschen, nachdem sie genehmigt wurde.",de_DE +self_service_portal.asset.details_page.unassign,Unassign,en_US +self_service_portal.asset.details_page.unassign,Zuweisung aufheben,de_DE +self_service_portal.inquiry.type.ssp_asset,Asset,en_US +self_service_portal.inquiry.type.ssp_asset,Asset,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset Reference,en_US +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.ssp_asset.details,Asset Details,en_US +customer.self_service_portal.inquiry.ssp_asset.details,Asset-Details,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset not available,en_US +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset nicht verfügbar,de_DE +self_service_portal.asset.error.reference_not_found,Asset reference not found,en_US +self_service_portal.asset.error.reference_not_found,Asset-Referenz nicht gefunden,de_DE +self_service_portal.asset.error.company_user_not_found,Company user not found,en_US +self_service_portal.asset.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +self_service_portal.inquiry.ssp_asset_reference.label,Asset Reference,en_US +self_service_portal.inquiry.ssp_asset_reference.label,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset Name,en_US +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset-Name,de_DE +customer.account.ssp_assets,My Assets,en_US +customer.account.ssp_assets,Meine Assets,de_DE +customer.account.ssp_asset,Asset,en_US +customer.account.ssp_asset,Asset,de_DE +customer.ssp_asset.list.reference,Reference,en_US +customer.ssp_asset.list.reference,Referenz,de_DE +customer.ssp_asset.list.name,Asset Name,en_US +customer.ssp_asset.list.name,Asset-Name,de_DE +customer.ssp_asset.list.serial_number,Serial number,en_US +customer.ssp_asset.list.serial_number,Seriennummer,de_DE +customer.ssp_asset.list.date_added,Date added,en_US +customer.ssp_asset.list.date_added,Hinzugefügt am,de_DE +customer.ssp_asset.view_ssp_asset,View,en_US +customer.ssp_asset.view_ssp_asset,Anzeigen,de_DE +customer.ssp_asset.create.button,Create asset,en_US +customer.ssp_asset.create.button,Asset erstellen,de_DE +customer.account.no_ssp_assets,You do not have any assets yet.,en_US +customer.account.no_ssp_assets,Sie haben noch keine Assets.,de_DE +company.error.company_user_not_found,Company user not found,en_US +company.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.ssp_asset.list.business_unit,Business Unit,en_US +customer.ssp_asset.list.business_unit,Geschäftseinheit,de_DE +customer.ssp_asset.list.image,Image,en_US +customer.ssp_asset.list.image,Bild,de_DE +self_service_portal.asset.details_page.created_date,Date added,en_US +self_service_portal.asset.details_page.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details_page.owner,Business unit owner,en_US +self_service_portal.asset.details_page.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details_page.undefined,Undefined,en_US +self_service_portal.asset.details_page.undefined,Nicht definiert,de_DE +self_service_portal.asset.success.business_unit_relation_updated,Business unit has been successfully unassigned from the asset,en_US +self_service_portal.asset.success.business_unit_relation_updated,Die Zuordnung der Geschäftseinheit zum Asset wurde erfolgreich aufgehoben,de_DE +self_service_portal.asset.details_page.status,Status,en_US +self_service_portal.asset.details_page.status,Status,de_DE +self_service_portal.asset.details.status,Status,en_US +self_service_portal.asset.details.status,Status,de_DE +self_service_portal.asset.status.pending,Pending,en_US +self_service_portal.asset.status.pending,Ausstehend,de_DE +self_service_portal.asset.status.approved,Approved,en_US +self_service_portal.asset.status.approved,Genehmigt,de_DE +self_service_portal.asset.status.in_review,In Review,en_US +self_service_portal.asset.status.in_review,In Überprüfung,de_DE +self_service_portal.asset.status.declined,Declined,en_US +self_service_portal.asset.status.declined,Abgelehnt,de_DE +customer.ssp_asset.list.business_unit,Business Unit Owner,en_US +customer.ssp_asset.list.business_unit,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.information.assigned_bu,Assigned business units,en_US +self_service_portal.asset.information.assigned_bu,Zugewiesene Geschäftseinheiten,de_DE +customer.ssp_asset.filter.scope,Access level,en_US +customer.ssp_asset.filter.scope,Zugriffsebene,de_DE +customer.ssp_asset.filter.scope.placeholder,Select access level,en_US +customer.ssp_asset.filter.scope.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_asset.filter_by_business_unit,My business unit assets,en_US +customer.ssp_asset.filter_by_business_unit,Assets meiner Geschäftseinheit,de_DE +customer.ssp_asset.filter_by_company,Company Assets,en_US +customer.ssp_asset.filter_by_company,Firmenassets,de_DE +self_service_portal.asset.error.cannot_unassign_own_business_unit,You cannot unassign your own business unit from the asset,en_US +self_service_portal.asset.error.cannot_unassign_own_business_unit,Sie können Ihre eigene Geschäftseinheit nicht vom Asset trennen,de_DE +self_service_portal.search_filter_form.label.active_filters,Active filters:,en_US +self_service_portal.search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.search_filter_form.field.reset_all.label,Reset all,en_US +self_service_portal.search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +general.fileUpload.upload,Upload,en_US +general.fileUpload.upload,Hochladen,de_DE +self_service_portal.service.product.no_shipment_types_available,Keine Versandarten für dieses Produkt verfügbar.,de_DE +self_service_portal.service.product.no_shipment_types_available,No shipping types available for this product.,en_US +self_service_portal.service.product.shipment_types,Versandarten,de_DE +self_service_portal.service.product.shipment_types,Shipment Types,en_US +self_service_portal.service.product.select_service_point,Wählen Sie einen Servicepunkt,de_DE +self_service_portal.service.product.select_service_point,Select a service point,en_US +self_service_portal.service.product.service_point_required,Ein Servicepunkt ist für dieses Produkt erforderlich,de_DE +self_service_portal.service.product.service_point_required,A service point is required for this product,en_US +self_service_portal.service.cart_item.service_point.name,Service point,en_US +self_service_portal.service.cart_item.service_point.name,Servicepunkt,de_DE +self_service_portal.service.product.service_date_time,Choose your preferred date and time slot,en_US +self_service_portal.service.product.service_date_time,Wählen Sie Ihr bevorzugtes Datum und Ihre gewünschte Uhrzeit,de_DE +self_service_portal.service.product.label.service_date_time,Service date and time,en_US +self_service_portal.service.product.label.service_date_time,Service-Datum und -Uhrzeit,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +self_service_portal.service.cart_item.scheduled_at,Service Date and time,en_US +self_service_portal.service.cart_item.scheduled_at,Service Datum und Uhrzeit,de_DE +self_service_portal.customer_navigation.title,Self-Service,en_US +self_service_portal.customer_navigation.title,Self-Service,de_DE +customer.customer_navigation.title,Account & Shopping,en_US +customer.customer_navigation.title,Konto und Shopping,de_DE +forms.apply-btn,Apply,en_US +forms.apply-btn,Anwenden,de_DE +customer.account.button.filters,Filters,en_US +customer.account.button.filters,Filter,de_DE +general.fileUpload.description,Maximum of %amount% files (%format%) up to %size%,en_US +general.fileUpload.description,Maximal %amount% Dateien (%format%) bis %size%,de_DE +customer.account.self_service_portal.inquiry.details,Inquiry,en_US +customer.account.self_service_portal.inquiry.details,Anfrage,de_DE +customer.self_service_portal.inquiry.details.reference,Reference,en_US +customer.self_service_portal.inquiry.details.reference,Referenz,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.self_service_portal.inquiry.details.date,Date,en_US +customer.self_service_portal.inquiry.details.date,Datum,de_DE +customer.self_service_portal.inquiry.details.status,Status,en_US +customer.self_service_portal.inquiry.details.status,Status,de_DE +customer.self_service_portal.inquiry.details,Inquiry Details,en_US +customer.self_service_portal.inquiry.details,Anfragedetails,de_DE +customer.self_service_portal.inquiry.details.type,Type,en_US +customer.self_service_portal.inquiry.details.type,Typ,de_DE +customer.self_service_portal.inquiry.details.subject,Subject,en_US +customer.self_service_portal.inquiry.details.subject,Betreff,de_DE +customer.self_service_portal.inquiry.details.description,Description,en_US +customer.self_service_portal.inquiry.details.description,Beschreibung,de_DE +customer.self_service_portal.inquiry.owner,Owner,en_US +customer.self_service_portal.inquiry.owner,Eigentümer,de_DE +customer.self_service_portal.inquiry.details.first_name,First Name,en_US +customer.self_service_portal.inquiry.details.first_name,Vorname,de_DE +customer.self_service_portal.inquiry.details.last_name,Last Name,en_US +customer.self_service_portal.inquiry.details.last_name,Nachname,de_DE +customer.self_service_portal.inquiry.details.email,E-mail,en_US +customer.self_service_portal.inquiry.details.email,E-Mail,de_DE +customer.self_service_portal.inquiry.details.company,Company / Business Unit,en_US +customer.self_service_portal.inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.self_service_portal.inquiry.details.file.name,File name,en_US +customer.self_service_portal.inquiry.details.file.name,Dateiname,de_DE +customer.self_service_portal.inquiry.details.file.size,Size,en_US +customer.self_service_portal.inquiry.details.file.size,Größe,de_DE +customer.self_service_portal.inquiry.details.file.extension,Type,en_US +customer.self_service_portal.inquiry.details.file.extension,Typ,de_DE +customer.self_service_portal.inquiry.details.file.download,Download,en_US +customer.self_service_portal.inquiry.details.file.download,Herunterladen,de_DE +customer.self_service_portal.inquiry.details.files,Files,en_US +customer.self_service_portal.inquiry.details.files,Dateien,de_DE +customer.self_service_portal.inquiry.details.order_reference,Order Reference,en_US +customer.self_service_portal.inquiry.details.order_reference,Bestellnummer,de_DE +self_service_portal.inquiry.error.company_user_not_found,Company user not found.,en_US +self_service_portal.inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +self_service_portal.inquiry.type.general-question,General Question,en_US +self_service_portal.inquiry.type.general-question,Allgemeine Frage,de_DE +self_service_portal.inquiry.type.general-ssp_inquiry,General Inquiry,en_US +self_service_portal.inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +self_service_portal.inquiry.order.create_ssp_inquiry,Inquiry,en_US +self_service_portal.inquiry.order.create_ssp_inquiry,Anfrage,de_DE +self_service_portal.inquiry.order_reference.label,Order Reference,en_US +self_service_portal.inquiry.order_reference.label,Bestellnummer,de_DE +self_service_portal.inquiry.file.unavailable,File is not available,en_US +self_service_portal.inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.create.button,Create inquiry,en_US +customer.ssp_inquiry.create.button,Anfrage stellen,de_DE +ssp_asset.details_page.search_service,Search services,en_US +ssp_asset.details_page.search_service,Services suchen,de_DE +general.confirm.button,Confirm,en_US +general.confirm.button,Bestätigen,de_DE +product_offer_service_point_availability_widget.all_items_not_available,Not available.,en_US +product_offer_service_point_availability_widget.all_items_not_available,Keine der Produkte sind verfügbar.,de_DE +product_offer_service_point_availability_widget.all_items_available,All items are available.,en_US +product_offer_service_point_availability_widget.all_items_available,Alle Produkte sind verfügbar.,de_DE +shipment_type.name.shipment_type_in-center-service,In-Center Service,en_US +shipment_type.name.shipment_type_in-center-service,In-Center-Service,de_DE +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Active filters:,en_US +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.asset.business_unit_unassignment.denied,You cannot unassign business unit from asset.,en_US +self_service_portal.asset.business_unit_unassignment.denied,Sie können die Geschäftseinheit nicht vom Asset trennen.,de_DE +self_service_portal.asset.business_unit_assignment.denied,You cannot assign business unit to asset.,en_US +self_service_portal.asset.business_unit_assignment.denied,Sie können die Geschäftseinheit dem Asset nicht zuweisen.,de_DE +general.fileUpload.mb,MB,en_US +general.fileUpload.mb,MB,de_DE +customer.address.single_address_per_shipment_type,Set same address for all products,en_US +customer.address.single_address_per_shipment_type,Setze gleiche Adresse für alle Produkte,de_DE +service_point_widget.location_label,Location:,en_US +service_point_widget.location_label,Standort:,de_DE +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Filter by Asset,en_US +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Nach Asset filtern,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don’t show Business entity files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don’t show Asset entity files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Einheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_type.company_user,My Files,en_US +self_service_portal.company_file.file_attachment_type.company_user,Meine Dateien,de_DE +self_service_portal.company_file.file_attachment_type.company,Company Files,en_US +self_service_portal.company_file.file_attachment_type.company,Firmendateien,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don't show Asset files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Dateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don't show Business unit files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +customer.account.ssp_booked_services,Booked Services,en_US +customer.account.ssp_booked_services,Gebuchte Services,de_DE +customer.self_service_portal.service.list.product_name,Product Name,en_US +customer.self_service_portal.service.list.product_name,Produktname,de_DE +customer.self_service_portal.service.list.order_reference,Order Reference,en_US +customer.self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +customer.self_service_portal.service.list.scheduled_at,Date and Time,en_US +customer.self_service_portal.service.list.scheduled_at,Datum und Uhrzeit,de_DE +customer.self_service_portal.service.list.status,Status,en_US +customer.self_service_portal.service.list.status,Status,de_DE +ssp_dashboard.general.booked_services,Booked Services,en_US +ssp_dashboard.general.booked_services,Gebuchte Services,de_DE +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,en_US +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,de_DE +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,en_US +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,de_DE +self_service_portal.asset_filter.title,ASSET FILTER,en_US +self_service_portal.asset_filter.title,ASSET FILTER,de_DE +self_service_portal.asset_filter.description,Filter items based on your assets,en_US +self_service_portal.asset_filter.description,Artikel basierend auf Ihren Assets filtern,de_DE +self_service_portal.asset_filter.select_label,Select My Assets,en_US +self_service_portal.asset_filter.select_label,Meine Assets auswählen,de_DE +self_service_portal.asset_filter.serial_label,Serial:,en_US +self_service_portal.asset_filter.serial_label,Seriennummer:,de_DE +self_service_portal.asset_filter.change,Change Asset,en_US +self_service_portal.asset_filter.change,Asset ändern,de_DE +self_service_portal.asset_filter.clear,Clear,en_US +self_service_portal.asset_filter.clear,Löschen,de_DE +self_service_portal.ssp_asset.details_page.catalog,Shop Spare Parts,en_US +catalog.ssp.itemsFound,%num_found% artikel gefunden für %ssp_asset_name%,de_DE +catalog.ssp.itemsFound,%num_found% items found for %ssp_asset_name%,en_US +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.error.attach_to_cart_item,Asset cannot be added to cart.,en_US +self_service_portal.asset.error.attach_to_cart_item,Der Asset kann nicht zum Warenkorb hinzugefügt werden.,de_DE +self_service_portal.ssp_asset.success.attached_to_cart,Asset has been successfully updated for item %sku%.,en_US +self_service_portal.ssp_asset.success.attached_to_cart,Der Asset wurde erfolgreich für Artikel %sku% aktualisiert.,de_DE +global.search.results.no_query,Ergebnisse,de_DE +global.search.results.no_query,Search Results,en_US +self_service_portal.order.service.cancel.title,Cancel Service?,en_US +self_service_portal.order.service.cancel.title,Service stornieren?,de_DE +self_service_portal.order.service.cancel.description,You are about to cancel %name% (SKU: %sku%),en_US +self_service_portal.order.service.cancel.description,Sie sind dabei %name% (SKU: %sku%) zu stornieren,de_DE +self_service_portal.order.service.cancel.keep,Keep Service,en_US +self_service_portal.order.service.cancel.keep,Service behalten,de_DE +self_service_portal.asset.error.not-found,Asset nicht gefunden,de_DE +self_service_portal.asset.error.not-found,Asset not found,en_US +self_service_portal.asset.validation.unknown_error,An unexpected error occurred while processing your asset,en_US +self_service_portal.asset.validation.unknown_error,Beim Verarbeiten Ihres Assets ist ein unerwarteter Fehler aufgetreten.,de_DE +self_service_portal.inquiry.error.not-found,Anfrage nicht gefunden,de_DE +self_service_portal.inquiry.error.not-found,Inquiry not found,en_US +self_service_portal.inquiry.validation.unknown_error,Beim Verarbeiten Ihrer Anfrage ist ein unerwarteter Fehler aufgetreten,de_DE +self_service_portal.inquiry.validation.unknown_error,An unexpected error occurred while processing your inquiry,en_US +service_point.validation.service_point_key_exists,A service point with the same key already exists.,en_US +service_point.validation.service_point_key_exists,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel.,de_DE +service_point.validation.service_point_key_is_not_unique,A service point with the same key already exists in request.,en_US +service_point.validation.service_point_key_is_not_unique,Es existiert bereits eine Servicestelle mit dem gleichen Schlüssel in einer Abfrage.,de_DE +service_point.validation.service_point_key_wrong_length,A service point key must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_key_wrong_length,Ein Servicestellen-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_name_wrong_length,A service point name must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_name_wrong_length,Ein Servicestellen-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.store_does_not_exist,Store with name '%name%' does not exist.,en_US +service_point.validation.store_does_not_exist,Store mit dem Namen '%name%' existiert nicht.,de_DE +service_point.validation.service_point_entity_not_found,Service point entity was not found.,en_US +service_point.validation.service_point_entity_not_found,Servicestelle wurde nicht gefunden.,de_DE +service_point.validation.wrong_request_body,Wrong request body.,en_US +service_point.validation.wrong_request_body,Falscher Anforderungstext.,de_DE +service_point.validation.country_entity_not_found,Country with iso2 code '%iso2Code%' does not exist.,en_US +service_point.validation.country_entity_not_found,Das Land mit dem iso2-Code '%iso2Code%' existiert nicht.,de_DE +service_point.validation.region_entity_not_found,Region with uuid '%uuid%' does not exist for country with iso2 code '%countryIso2Code%'.,en_US +service_point.validation.region_entity_not_found,Region mit uuid '%uuid%' existiert nicht für Land mit iso2-Code '%countryIso2Code%',de_DE +service_point.validation.service_point_address_address1_wrong_length,Service Point Address Input address1 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address1_wrong_length,Service Point Adresse Input address1 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address2_wrong_length,Service Point Address Input address2 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address2_wrong_length,Service Point Adresse Input address2 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_address3_wrong_length,Service Point Address Input address3 must have a length of %min% to %max% characters.,en_US +service_point.validation.service_point_address_address3_wrong_length,Service Point Adresse Input address3 muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_city_wrong_length,A service point address city must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_city_wrong_length,Eine Service Point Adresse Stadt muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_entity_not_found,Service point address entity was not found.,en_US +service_point.validation.service_point_address_entity_not_found,Die Entität Service Point Adresse wurde nicht gefunden.,de_DE +service_point.validation.service_point_address_zip_code_wrong_length,A service point address zip code must have length from %min% to %max% characters.,en_US +service_point.validation.service_point_address_zip_code_wrong_length,Die Postleitzahl einer Service Point Adresse muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_point_address_already_exists,A service point address for the service point already exists.,en_US +service_point.validation.service_point_address_already_exists,Es existiert bereits eine Service Point Adresse für den Service Point.,de_DE +service_point.validation.service_point_uuid_is_not_unique,A service point with the same uuid already exists in request.,en_US +service_point.validation.service_point_uuid_is_not_unique,Ein Service Point mit der gleichen uuid existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_key_exists,A service type with the same key already exists.,en_US +service_point.validation.service_type_key_exists,Ein Service-Typ mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_type_key_wrong_length,A service type key must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_key_wrong_length,Ein Service-Typ-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_key_is_not_unique,A service type with the same key already exists in request.,en_US +service_point.validation.service_type_key_is_not_unique,Ein Service-Typ mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_name_exists,A service type with the same name already exists.,en_US +service_point.validation.service_type_name_exists,Ein Service-Typ mit demselben Namen existiert bereits.,de_DE +service_point.validation.service_type_name_wrong_length,A service type name must have length from %min% to %max% characters.,en_US +service_point.validation.service_type_name_wrong_length,Ein Service-Typ-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_type_name_is_not_unique,A service type with the same name already exists in request.,en_US +service_point.validation.service_type_name_is_not_unique,Ein Service-Typ mit demselben Namen existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_entity_not_found,The service type entity was not found.,en_US +service_point.validation.service_type_entity_not_found,Die Service-Typ-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_poinst_service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_poinst_service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_point.validation.service_key_wrong_length,A service key must have length from %min% to %max% characters.,en_US +service_point.validation.service_key_wrong_length,Ein Service-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +service_point.validation.service_key_is_not_unique,A service with the same key already exists in request.,en_US +service_point.validation.service_key_is_not_unique,Ein Service mit demselben Schlüssel existiert bereits in der Anfrage.,de_DE +service_point.validation.service_type_relation_already_exists,A service with defined relation of service point and service type already exists.,en_US +service_point.validation.service_type_relation_already_exists,Ein Service mit einer definierten Beziehung von Servicepunkt und Service-Typ existiert bereits.,de_DE +service_point.validation.service_type_relation_is_not_unique,A service with defined relation of service pint and service type already exists in request.,en_US +service_point.validation.service_type_relation_is_not_unique,Ein Service mit definierter Beziehung von Servicepunkt und Service-Typ existiert bereits in der Anfrage.,de_DE +service_point.validation.service_entity_not_found,The service entity was not found.,en_US +service_point.validation.service_entity_not_found,Die Service-Entität wurde nicht gefunden.,de_DE +service_point.validation.service_key_immutability,The service key is immutable.,en_US +service_point.validation.service_key_immutability,Der Service-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_type_key_immutability,The service type key is immutable.,en_US +service_point.validation.service_type_key_immutability,Der Service-Typ-Schlüssel ist unveränderlich.,de_DE +service_point.validation.service_key_exists,A service with the same key already exists.,en_US +service_point.validation.service_key_exists,Ein Service mit demselben Schlüssel existiert bereits.,de_DE +service_points_rest_api.error.endpoint_not_found,The endpoint is not found.,en_US +service_points_rest_api.error.endpoint_not_found,Der Endpunkt wurde nicht gefunden.,de_DE +service_points_rest_api.error.service_point_identifier_is_not_specified,The service point identifier is not specified.,en_US +service_points_rest_api.error.service_point_identifier_is_not_specified,Der Servicestellen-Identifikator ist ungültig.,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +service_point_cart.checkout.validation.error,Selected service point "%uuid%" is not available for the store "%store_name%",en_US +service_point_cart.checkout.validation.error,Der ausgewählte Servicepunkt "%uuid%" ist für den Shop "%store_name%" nicht verfügbar,de_DE +service_point_widget.validation.error.service_point_not_selected,Please select service point.,en_US +service_point_widget.validation.error.service_point_not_selected,Bitte Servicestelle auswählen.,de_DE +service_point_widget.validation.error.billing_address_not_provided,Please add billing address manually.,en_US +service_point_widget.validation.error.billing_address_not_provided,Bitte fügen Sie die Rechnungsadresse manuell hinzu.,de_DE +service_point_widget.select_location_action,Select a service shop,en_US +service_point_widget.select_location_action,Wählen Sie eine Servicestelle,de_DE +service_point_widget.change_action,Change,en_US +service_point_widget.change_action,Ändern,de_DE +service_point_widget.select_your_store_title,Select your store,en_US +service_point_widget.select_your_store_title,Wählen Sie Ihren Store,de_DE +service_point_widget.search,"Search for Store, zip code or city...",en_US +service_point_widget.search,"Suche nach Store, PLZ oder Stadt...",de_DE +service_point_widget.select_store_action,Select store,en_US +service_point_widget.select_store_action,Store auswählen,de_DE +service_point_widget.no_results,"Nothing found...",en_US +service_point_widget.no_results,"Nichts gefunden...",de_DE +shipment_type.name.shipment_type_delivery,Delivery,en_US +shipment_type.name.shipment_type_delivery,Lieferung,de_DE +shipment_type.name.shipment_type_pickup,Pickup,en_US +shipment_type.name.shipment_type_pickup,Abholung,de_DE +shipment_type.validation.shipment_type_entity_not_found,A delivery type entity was not found.,en_US +shipment_type.validation.shipment_type_entity_not_found,Lieferart wurde nicht gefunden.,de_DE +shipment_type.validation.shipment_type_key_exists,A delivery type with the same key already exists.,en_US +shipment_type.validation.shipment_type_key_exists,Es existiert bereits eine Lieferart mit dem gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_is_not_unique,At least two delivery types in this request have the same key.,en_US +shipment_type.validation.shipment_type_key_is_not_unique,Mindestens zwei Lieferarten in dieser Anfrage haben den gleichen Schlüssel.,de_DE +shipment_type.validation.shipment_type_key_invalid_length,A delivery type key must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_key_invalid_length,Der Lieferart-Schlüssel muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.shipment_type_name_invalid_length,A delivery type name must have a length from %min% to %max% characters.,en_US +shipment_type.validation.shipment_type_name_invalid_length,Der Lieferart-Name muss eine Länge von %min% bis %max% Zeichen haben.,de_DE +shipment_type.validation.store_does_not_exist,A store with the name ‘%name%’ does not exist.,en_US +shipment_type.validation.store_does_not_exist,Store mit dem Namen ‘%name%’ existiert nicht.,de_DE +shipment_types_rest_api.error.shipment_type_not_available,Selected delivery type "%name%" is not available.,en_US +shipment_types_rest_api.error.shipment_type_not_available,Die ausgewählte Lieferart "%name%" ist nicht verfügbar.,de_DE +merchant_product_offer.view_seller,View Seller,en_US +merchant_product_offer.view_seller,Händler ansehen,de_DE +merchant_product_offer.sold_by,Sold by,en_US +merchant_product_offer.sold_by,Verkauft durch,de_DE +product-offer.info.product-offer-inactive.removed,Inactive item %sku% was removed from your shopping cart.,en_US +product-offer.info.product-offer-inactive.removed,Der inaktive Artikel %sku% wurde aus Ihrem Warenkorb entfernt.,de_DE +product-offer.info.reference.invalid,Product offer reference not found for product with SKU '%sku%'.,en_US +product-offer.info.reference.invalid,Produktangebotsreferenz für Produkt mit SKU '% sku%' nicht gefunden.,de_DE +product-offer.message.not-active-or-approved,"Product offer not active for product with SKU '%sku%'.",en_US +product-offer.message.not-active-or-approved,"Produktangebot ist inaktiv für Produkt mit SKU '%sku%'.",de_DE +merchant_product_offer_widget.merchant_name,Merchant,en_US +merchant_product_offer_widget.merchant_name,Händler,de_DE +self_service_portal.asset.selector.label,Assign this item to an asset,en_US +self_service_portal.asset.selector.label,Weise dieses Element einem Vermögenswert zu,de_DE +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.selector.search_placeholder,"Search by name, reference or serial number",en_US +self_service_portal.asset.selector.search_placeholder,"Nach Name, Referenz oder Seriennummer suchen",de_DE +self_service_portal.asset.selector.no_assets_available,No assets available,en_US +self_service_portal.asset.selector.no_assets_available,Keine Assets verfügbar,de_DE +self_service_portal.asset.selector.change,Change,en_US +self_service_portal.asset.selector.change,Ändern,de_DE +self_service_portal.asset.compatibility.compatible,Compatible,en_US +self_service_portal.asset.compatibility.compatible,Kompatibel,de_DE +self_service_portal.asset.compatibility.not_compatible,Not Compatible,en_US +self_service_portal.asset.compatibility.not_compatible,Nicht kompatibel,de_DE +cart.shipping,Versand,de_DE +cart.shipping,Shipping,en_US +self_service_portal.asset.assigned_asset,Zugewiesenes Asset,de_DE +self_service_portal.asset.assigned_asset,Assigned Asset,en_US +self_service_portal.asset.name,Asset Name,de_DE +self_service_portal.asset.name,Asset Name,en_US +self_service_portal.asset.serial_number,Asset Seriennummer,de_DE +self_service_portal.asset.serial_number,Asset Serial number,en_US +self_service_portal.asset.compatibility,Asset Kompatibilität,de_DE +self_service_portal.asset.compatibility,Asset Compatibility,en_US +self_service_portal.service.cancellation.error.no_items,No order items provided.,en_US +self_service_portal.service.cancellation.error.no_items,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.cancel_service,Cancel Service,en_US +self_service_portal.service.cancel_service,Dienstleistung stornieren,de_DE +self_service_portal.service.cancellation.success,Service has been successfully cancelled.,en_US +self_service_portal.service.cancellation.success,Die Dienstleistung wurde erfolgreich storniert.,de_DE +self_service_portal.service.cancellation.error,Failed to cancel the service.,en_US +self_service_portal.service.cancellation.error,Die Stornierung der Dienstleistung ist fehlgeschlagen.,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen vorhanden.,de_DE +self_service_portal.service.validation.status_change_failed,The status change failed.,en_US +self_service_portal.service.validation.status_change_failed,Die Statusänderung ist fehlgeschlagen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View Company Files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View Files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View Business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit Dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der Firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der Geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View Dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum Anzeigen des Dashboards,de_DE +self_service_portal.inquiry.success.created,Inquiry has been submitted successfully,en_US +self_service_portal.inquiry.success.created,Anfrage wurde erfolgreich übermittelt,de_DE +self_service_portal.inquiry.type.label,Type,en_US +self_service_portal.inquiry.type.label,Typ,de_DE +self_service_portal.inquiry.access.denied,Access denied.,en_US +self_service_portal.inquiry.access.denied,Zugriff verweigert.,de_DE +self_service_portal.inquiry.success.canceled,Inquiry has been canceled.,en_US +self_service_portal.inquiry.success.canceled,Die Anfrage wurde storniert.,de_DE +self_service_portal.inquiry.cancel,Cancel inquiry,en_US +self_service_portal.inquiry.cancel,Anfrage stornieren,de_DE +self_service_portal.inquiry.create.select_type,Select type,en_US +self_service_portal.inquiry.create.select_type,Typ auswählen,de_DE +self_service_portal.inquiry.status.pending,Pending,en_US +self_service_portal.inquiry.status.pending,Ausstehend,de_DE +self_service_portal.inquiry.status.in_review,In Review,en_US +self_service_portal.inquiry.status.in_review,In Bearbeitung,de_DE +self_service_portal.inquiry.status.approved,Approved,en_US +self_service_portal.inquiry.status.approved,Genehmigt,de_DE +self_service_portal.inquiry.status.rejected,Rejected,en_US +self_service_portal.inquiry.status.rejected,Abgelehnt,de_DE +self_service_portal.inquiry.status.canceled,Canceled,en_US +self_service_portal.inquiry.status.canceled,Storniert,de_DE +self_service_portal.inquiry.subject.label,Subject,en_US +self_service_portal.inquiry.subject.label,Betreff,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hello %name%,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.salutation,Hallo %name%,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,The status of your inquiry %reference% has been changed.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.subject,Der Status Ihrer Anfrage %reference% wurde geändert,de_DE +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Your inquiry %reference% was rejected.,en_US +self_service_portal.inquiry.mail.trans.ssp_inquiry_rejected.main_text,Ihre Anfrage %reference% wurde abgelehnt.,de_DE +self_service_portal.inquiry.description.label,Description,en_US +self_service_portal.inquiry.description.label,Beschreibung,de_DE +self_service_portal.inquiry.files.label,File Upload,en_US +self_service_portal.inquiry.files.label,Datei-Upload,de_DE +self_service_portal.inquiry.type.general,General,en_US +self_service_portal.inquiry.type.general,Allgemein,de_DE +self_service_portal.inquiry.type.order,Order Claim,en_US +self_service_portal.inquiry.type.order,Bestellreklamation,de_DE +customer.account.ssp_inquiries,Inquiries,en_US +customer.account.ssp_inquiries,Anfragen,de_DE +customer.ssp_inquiries.access_level.placeholder,Select access level,en_US +customer.ssp_inquiries.access_level.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or description",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Beschreibung",de_DE +customer.ssp_inquiries.access_level.company_inquiries,Company inquiries,en_US +customer.ssp_inquiries.access_level.company_inquiries,Firmenanfragen,de_DE +customer.ssp_inquiries.search.label,"Search",en_US +customer.ssp_inquiries.search.label,"Suche",de_DE +customer.ssp_inquiries.search.placeholder,"Search by reference or subject",en_US +customer.ssp_inquiries.search.placeholder,"Suche nach Referenz oder Betreff",de_DE +customer.ssp_inquiries.access_level.label,Access Level,en_US +customer.ssp_inquiries.access_level.label,Zugriffsebene,de_DE +customer.ssp_inquiries.access_level.my_inquiries,My inquiries,en_US +customer.ssp_inquiries.access_level.my_inquiries,Meine anfragen,de_DE +customer.self_service_portal.inquiry.create_ssp_inquiry,Create inquiry,en_US +customer.self_service_portal.inquiry.create_ssp_inquiry,Anfrage stellen,de_DE +self_service_portal.inquiry.validation.type.invalid,Invalid inquiry type.,en_US +self_service_portal.inquiry.validation.type.invalid,Ungültiger Anfragetyp.,de_DE +self_service_portal.inquiry.list.widget.title,Inquiries,en_US +self_service_portal.inquiry.list.widget.title,Anfragen,de_DE +customer.self_service_portal.inquiry.list,Inquiries,en_US +customer.self_service_portal.inquiry.list,Anfragen,de_DE +self_service_portal.inquiry.file.file_not_found,File not found,en_US +self_service_portal.inquiry.file.file_not_found,Datei wurde nicht gefunden,de_DE +self_service_portal.inquiry.file.mime_type.error,Invalid file format.,en_US +self_service_portal.inquiry.file.mime_type.error,Ungültiger Dateiformat.,de_DE +self_service_portal.inquiry.validation.company_user.not_set,Company user is missing.,en_US +self_service_portal.inquiry.validation.company_user.not_set,Firmenbenutzer fehlt.,de_DE +self_service_portal.inquiry.validation.type.not_set,Inquiry type is missing.,en_US +self_service_portal.inquiry.validation.type.not_set,Anfragetyp fehlt.,de_DE +self_service_portal.inquiry.validation.subject.not_set,Inquiry subject is missing.,en_US +self_service_portal.inquiry.validation.subject.not_set,Betreff der Anfrage fehlt.,de_DE +self_service_portal.inquiry.validation.description.not_set,Inquiry description is missing.,en_US +self_service_portal.inquiry.validation.description.not_set,Anfragebeschreibung fehlt.,de_DE +self_service_portal.inquiry.error.file.format.invalid,An array of files is expected.,en_US +self_service_portal.inquiry.error.file.format.invalid,Ein Array von Dateien wurde erwartet.,de_DE +self_service_portal.inquiry.error.file.count.invalid,Invalid number of files. Maximum number of files: {{ limit }},en_US +self_service_portal.inquiry.error.file.count.invalid,Ungültige Dateianzahl. Maximale Anzahl von Dateien: {{ limit }},de_DE +self_service_portal.inquiry.error.file.size.invalid,"Invalid total file size. The maximum allowed size for all files is %maxSize%, but %size% was uploaded.",en_US +self_service_portal.inquiry.error.file.size.invalid,"Ungültige Gesamtdateigröße. Die maximal zulässige Größe für alle Dateien beträgt %maxSize%, aber es wurde %size% hochgeladen.",de_DE +self_service_portal.inquiry.error.status_change,The status change failed.,en_US +self_service_portal.inquiry.error.status_change,Die Statusänderung ist fehlgeschlagen.,de_DE +self_service_portal.inquiry.submit.button,Submit inquiry,en_US +self_service_portal.inquiry.submit.button,Anfrage senden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +customer.self_service_portal.inquiry.all_ssp_inquiries,Inquiries,en_US +customer.self_service_portal.inquiry.all_ssp_inquiries,Anfragen,de_DE +customer.self_service_portal.inquiry.list.reference,Reference,en_US +customer.self_service_portal.inquiry.list.reference,Referenz,de_DE +customer.self_service_portal.inquiry.list.type,Type,en_US +customer.self_service_portal.inquiry.list.type,Typ,de_DE +customer.self_service_portal.inquiry.list.subject,Subject,en_US +customer.self_service_portal.inquiry.list.subject,Betreff,de_DE +customer.self_service_portal.inquiry.list.owner,Owner,en_US +customer.self_service_portal.inquiry.list.owner,Eingentümer,de_DE +customer.self_service_portal.inquiry.list.date_created,Date,en_US +customer.self_service_portal.inquiry.list.date_created,Datum,de_DE +customer.self_service_portal.inquiry.list.status,Status,en_US +customer.self_service_portal.inquiry.list.status,Status,de_DE +self_service_portal.inquiry.list.filter.type.placeholder,Select type,en_US +self_service_portal.inquiry.list.filter.type.placeholder,Typ auswählen,de_DE +self_service_portal.inquiry.list.filter.type.label,Type,en_US +self_service_portal.inquiry.list.filter.type.label,Typ,de_DE +self_service_portal.inquiry.list.filter.status.placeholder,Select status,en_US +self_service_portal.inquiry.list.filter.status.placeholder,Status auswählen,de_DE +self_service_portal.inquiry.list.filter.status.label,Status,en_US +self_service_portal.inquiry.list.filter.status.label,Status,de_DE +customer.account.no_ssp_inquiries,You do not have inquiries yet.,en_US +customer.account.no_ssp_inquiries,Sie haben noch keine Anfragen.,de_DE +customer.self_service_portal.inquiry.view_ssp_inquiry,View,en_US +customer.self_service_portal.inquiry.view_ssp_inquiry,Ansehen,de_DE +self_service_portal.service.validation.no_order_items_provided,No order items provided.,en_US +self_service_portal.service.validation.no_order_items_provided,Keine Auftragspositionen angegeben.,de_DE +self_service_portal.service.validation.order_not_found,Order with ID %id% not found.,en_US +self_service_portal.service.validation.order_not_found,Bestellung mit ID %id% nicht gefunden.,de_DE +self_service_portal.service.validation.no_payment_methods_found,No payment methods found for this order.,en_US +self_service_portal.service.validation.no_payment_methods_found,Keine Zahlungsmethoden für diese Bestellung gefunden.,de_DE +self_service_portal.service.list.search_placeholder,Search,en_US +self_service_portal.service.list.search_placeholder,Search,de_DE +self_service_portal.service.list.search_button,Search,en_US +self_service_portal.service.list.search_button,Suchen,de_DE +self_service_portal.service.list.title,Services,en_US +self_service_portal.service.list.title,Services,de_DE +self_service_portal.service.list.order_reference,Order Reference,en_US +self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +self_service_portal.service.list.product_name,Service Name,en_US +self_service_portal.service.list.product_name,Servicename,de_DE +self_service_portal.service.list.service_sku,SKU,en_US +self_service_portal.service.list.service_sku,SKU,de_DE +self_service_portal.service.list.scheduled_at,Time and Date,en_US +self_service_portal.service.list.scheduled_at,Zeit und Datum,de_DE +self_service_portal.service.list.created_at,Created At,en_US +self_service_portal.service.list.created_at,Erstellt am,de_DE +self_service_portal.service.list.empty,You don't have any services yet.,en_US +self_service_portal.service.list.empty,Sie haben noch keine Services.,de_DE +self_service_portal.service.list.widget.title,Services,en_US +self_service_portal.service.list.widget.title,Services,de_DE +self_service_portal.service.list.state,State,en_US +self_service_portal.service.list.state,Status,de_DE +self_service_portal.service.list.reset_button,Reset,en_US +self_service_portal.service.list.reset_button,Zurücksetzen,de_DE +self_service_portal.service.list.my_services,My Services,en_US +self_service_portal.service.list.my_services,Meine Services,de_DE +self_service_portal.service.list.business_unit_services,Business Unit Services,en_US +self_service_portal.service.list.business_unit_services,Geschäftsbereich Services,de_DE +self_service_portal.service.list.company_services,Company Services,en_US +self_service_portal.service.list.company_services,Firmenservices,de_DE +self_service_portal.service.update_scheduled_time,Change scheduled time,en_US +self_service_portal.service.update_scheduled_time,Geplante Zeit ändern,de_DE +self_service_portal.service.update_scheduled_time.service.sku,SKU,en_US +self_service_portal.service.update_scheduled_time.service.sku,SKU,de_DE +self_service_portal.service.update_scheduled_time.service.name,Name,en_US +self_service_portal.service.update_scheduled_time.service.name,Name,de_DE +self_service_portal.service.update_scheduled_time.service.quantity,Quantity,en_US +self_service_portal.service.update_scheduled_time.service.quantity,Menge,de_DE +self_service_portal.service.update_scheduled_time.service.state,State,en_US +self_service_portal.service.update_scheduled_time.service.state,Status,de_DE +self_service_portal.service.update_scheduled_time.title,Update Service Scheduled Time,en_US +self_service_portal.service.update_scheduled_time.title,Geplante Servicezeit aktualisieren,de_DE +self_service_portal.service.update_scheduled_time.success,Order item rescheduled successfully.,en_US +self_service_portal.service.update_scheduled_time.success,Bestellposition erfolgreich neu geplant.,de_DE +self_service_portal.service.update_scheduled_time.order_item_details,Order Item Details,en_US +self_service_portal.service.update_scheduled_time.order_item_details,Bestellpositionsdetails,de_DE +self_service_portal.service.update_scheduled_time.button.save,Save,en_US +self_service_portal.service.update_scheduled_time.button.save,Speichern,de_DE +self_service_portal.service.update_scheduled_time.button.cancel,Cancel,en_US +self_service_portal.service.update_scheduled_time.button.cancel,Abbrechen,de_DE +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Order item with uuid %uuid% not found.,en_US +self_service_portal.service.update_scheduled_time.error.order_item_not_found,Bestellposition mit UUID %uuid% nicht gefunden.,de_DE +self_service_portal.service.list.field.business_unit,Access Level,en_US +self_service_portal.service.list.field.business_unit,Zugriffsebene,de_DE +self_service_portal.service.list.button.view,View,en_US +self_service_portal.service.list.button.view,Ansehen,de_DE +self_service_portal.company_file.table.header.file_reference,Reference,en_US +self_service_portal.company_file.table.header.file_reference,Referenz,de_DE +self_service_portal.company_file.table.header.file_name,File Name,en_US +self_service_portal.company_file.table.header.file_name,Dateiname,de_DE +self_service_portal.company_file.table.header.file_type,File Format,en_US +self_service_portal.company_file.table.header.file_type,Dateiformat,de_DE +self_service_portal.company_file.table.header.file_created_at,Date Added,en_US +self_service_portal.company_file.table.header.file_created_at,Datum hinzugefügt,de_DE +self_service_portal.company_file.table.header.file_size,Size,en_US +self_service_portal.company_file.table.header.file_size,Größe,de_DE +self_service_portal.company_file.table.header.actions,Actions,en_US +self_service_portal.company_file.table.header.actions,Aktionen,de_DE +self_service_portal.company_file.table.actions.download,Download,en_US +self_service_portal.company_file.table.actions.download,Herunterladen,de_DE +self_service_portal.company_file,Files,en_US +self_service_portal.company_file,Dateien,de_DE +self_service_portal.company_file.view.empty,You do not have any files yet.,en_US +self_service_portal.company_file.view.empty,Sie haben noch keine Dateien.,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Select type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.placeholder,Typ auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.label,Type,en_US +self_service_portal.company_file.file_search_filter_form.field.type.label,Typ,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Date From,en_US +self_service_portal.company_file.file_search_filter_form.field.date_from.label,Datum von,de_DE +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Date To,en_US +self_service_portal.company_file.file_search_filter_form.field.date_to.label,Datum bis,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Select access level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.placeholder,Zugriffsebene auswählen,de_DE +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.access_level.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.search.label,Search,en_US +self_service_portal.company_file.file_search_filter_form.field.search.label,Suche,de_DE +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Reset All,en_US +self_service_portal.company_file.file_search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +self_service_portal.company_file.file_search_filter_form.label.active_filters,Active Filters:,en_US +self_service_portal.company_file.file_search_filter_form.label.active_filters,Aktive Filter:,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.ssp_inquiries.date_from,Date from,en_US +customer.ssp_inquiries.date_from,Datum von,de_DE +customer.ssp_inquiries.date_to,Date to,en_US +customer.ssp_inquiries.date_to,Datum bis,de_DE +customer.account.ssp_inquiry.details,Inquiry,en_US +customer.account.ssp_inquiry.details,Anfrage,de_DE +customer.ssp_inquiry.details.reference,Reference,en_US +customer.ssp_inquiry.details.reference,Referenz,de_DE +customer.ssp_inquiry.details.date,Date,en_US +customer.ssp_inquiry.details.date,Datum,de_DE +customer.ssp_inquiry.details.status,Status,en_US +customer.ssp_inquiry.details.status,Status,de_DE +customer.ssp_inquiry.details,Inquiry Details,en_US +customer.ssp_inquiry.details,Anfragedetails,de_DE +customer.ssp_inquiry.details.type,Type,en_US +customer.ssp_inquiry.details.type,Typ,de_DE +customer.ssp_inquiry.details.subject,Subject,en_US +customer.ssp_inquiry.details.subject,Betreff,de_DE +customer.ssp_inquiry.details.description,Description,en_US +customer.ssp_inquiry.details.description,Beschreibung,de_DE +customer.ssp_inquiry.owner,Owner,en_US +customer.ssp_inquiry.owner,Eigentümer,de_DE +customer.ssp_inquiry.details.first_name,First Name,en_US +customer.ssp_inquiry.details.first_name,Vorname,de_DE +customer.ssp_inquiry.details.last_name,Last Name,en_US +customer.ssp_inquiry.details.last_name,Nachname,de_DE +customer.ssp_inquiry.details.email,E-mail,en_US +customer.ssp_inquiry.details.email,E-Mail,de_DE +customer.ssp_inquiry.details.company,Company / Business Unit,en_US +customer.ssp_inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.ssp_inquiry.details.file.name,File name,en_US +customer.ssp_inquiry.details.file.name,Dateiname,de_DE +customer.ssp_inquiry.details.file.size,Size,en_US +customer.ssp_inquiry.details.file.size,Größe,de_DE +customer.ssp_inquiry.details.file.extension,Type,en_US +customer.ssp_inquiry.details.file.extension,Typ,de_DE +customer.ssp_inquiry.details.file.download,Download,en_US +customer.ssp_inquiry.details.file.download,Herunterladen,de_DE +ssp_inquiry.file.unavailable,File is not available,en_US +ssp_inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.details.files,Files,en_US +customer.ssp_inquiry.details.files,Dateien,de_DE +ssp_inquiry.order.create_ssp_inquiry,Inquiry,en_US +ssp_inquiry.order.create_ssp_inquiry,Reklamation,de_DE +ssp_inquiry.order_reference.label,Order Reference,en_US +ssp_inquiry.order_reference.label,Bestellnummer,de_DE +customer.ssp_inquiry.details.order_reference,Order Reference,en_US +customer.ssp_inquiry.details.order_reference,Bestellnummer,de_DE +ssp_inquiry.error.company_user_not_found,Company user not found.,en_US +ssp_inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +ssp_inquiry.type.general-question,General Question,en_US +ssp_inquiry.type.general-question,Allgemeine Frage,de_DE +ssp_inquiry.type.general-ssp_inquiry,General Inquiry,en_US +ssp_inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +ssp_dashboard.index.widget.title,Dashboard,en_US +ssp_dashboard.index.widget.title,Dashboard,de_DE +ssp_dashboard.general.view_all,View All,en_US +ssp_dashboard.general.view_all,Alle anzeigen,de_DE +ssp_dashboard.general.welcome,"Welcome, %name%",en_US +ssp_dashboard.general.welcome,"Willkommen, %name%",de_DE +ssp_dashboard.overview.title,My Overview,en_US +ssp_dashboard.overview.title,Meine Übersicht,de_DE +ssp_dashboard.general.ssp_assets,Assets,en_US +ssp_dashboard.general.ssp_assets,Assets,de_DE +ssp_dashboard.general.inquiries,Pending Inquiries,en_US +ssp_dashboard.general.inquiries,Ausstehende Ansprüche,de_DE +ssp_dashboard.general.services,Planned Services,en_US +ssp_dashboard.general.services,Geplante Services,de_DE +ssp_dashboard.representatives.title,Service Representatives,en_US +ssp_dashboard.representatives.title,Mitarbeiter des Kundendienstes,de_DE +ssp_dashboard.general.no_data,There is no data yet,en_US +ssp_dashboard.general.no_data,Es gibt noch keine Daten,de_DE +ssp_dashboard.general.news,News & Events,en_US +ssp_dashboard.general.news,Nachrichten & Veranstaltungen,de_DE +dashboard.access.denied,Access denied.,en_US +dashboard.access.denied,Zugriff verweigert.,de_DE +customer.account.files,Files,en_US +customer.account.files,Dateien,de_DE +customer.account.no_files,No Files,en_US +customer.account.no_files,Keine Dateien,de_DE +customer.account.no_ssp_booked_services,You do not have booked services yet.,en_US +customer.account.no_ssp_booked_services,Sie haben noch keine gebuchten Services.,de_DE +dashboard.overview.not_applicable,n/a,en_US +dashboard.overview.not_applicable,n/a,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +product.filter.product-class-names,Product Class,en_US +product.filter.product-class-names,Produktklasse,de_DE +customer.account.ssp_services,Services,en_US +customer.account.ssp_services,Services,de_DE +customer.account.no_ssp_services,There are no services at the moment,en_US +customer.account.no_ssp_services,Es gibt derzeit keine Services,de_DE +customer.ssp_service.order.reference,Order Reference,en_US +customer.ssp_service.order.reference,Bestellreferenz,de_DE +customer.ssp_service.customer,Customer,en_US +customer.ssp_service.customer,Kunde,de_DE +customer.ssp_service.company,Company,en_US +customer.ssp_service.company,Unternehmen,de_DE +customer.ssp_service.service,Service,en_US +customer.ssp_service.service,Service,de_DE +customer.ssp_service.created_at,Date created,en_US +customer.ssp_service.created_at,Erstellt am,de_DE +customer.ssp_service.status,Status,en_US +customer.ssp_service.status,Status,de_DE +customer.ssp_service.scheduled_at,Time and Date,en_US +customer.ssp_service.scheduled_at,Zeit und Datum,de_DE +customer.ssp_service.actions,Actions,en_US +customer.ssp_service.actions,Aktionen,de_DE +customer.ssp_service.view_ssp_service,View,en_US +customer.ssp_service.view_ssp_service,Anzeigen,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Your inquiry %reference% was approved.,en_US +ssp_inquiry.mail.trans.ssp_inquiry_approved.main_text,Ihre Anfrage %reference% wurde genehmigt.,de_DE +ssp_inquiry.mail.trans.ssp_inquiry_list_page,View Inquiries,en_US +ssp_inquiry.mail.trans.ssp_inquiry_list_page,Anfragen anzeigen,de_DE +ssp_asset.validation.cannot_delete_own_assignment,You cannot delete your own assignment.,en_US +ssp_asset.validation.cannot_delete_own_assignment,Sie können Ihre eigene Zuweisung nicht löschen.,de_DE +permission.name.DownloadCompanyFilesPermissionPlugin,Download file(s) ,en_US +permission.name.DownloadCompanyFilesPermissionPlugin,Datei(en) herunterladen,de_DE +permission.name.ViewCompanyFilesPermissionPlugin,View company files,en_US +permission.name.ViewCompanyFilesPermissionPlugin,Firmendateien anzeigen,de_DE +permission.name.ViewCompanyUserFilesPermissionPlugin,View my files,en_US +permission.name.ViewCompanyUserFilesPermissionPlugin,Meine dateien anzeigen,de_DE +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,View business unit files,en_US +permission.name.ViewCompanyBusinessUnitFilesPermissionPlugin,Geschäftseinheit dateien anzeigen,de_DE +permission.name.CreateSspInquiryPermissionPlugin,Create inquiry,en_US +permission.name.CreateSspInquiryPermissionPlugin,Anfrage stellen,de_DE +permission.name.ViewCompanySspInquiryPermissionPlugin,View company inquiries,en_US +permission.name.ViewCompanySspInquiryPermissionPlugin,Anfragen der firma anzeigen,de_DE +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,View business unit inquiries,en_US +permission.name.ViewBusinessUnitSspInquiryPermissionPlugin,Anfragen der geschäftseinheit anzeigen,de_DE +permission.name.ViewDashboardPermissionPlugin,View dashboard,en_US +permission.name.ViewDashboardPermissionPlugin,Berechtigung zum anzeigen des dashboards,de_DE +permission.name.ViewCompanySspAssetPermissionPlugin,View company assets,en_US +permission.name.ViewCompanySspAssetPermissionPlugin,Firmen-assets anzeigen,de_DE +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,View business unit assets,en_US +permission.name.ViewBusinessUnitSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +permission.name.CreateSspAssetPermissionPlugin,Create assets,en_US +permission.name.CreateSspAssetPermissionPlugin,Assets erstellen,de_DE +permission.name.UpdateSspAssetPermissionPlugin,Update assets,en_US +permission.name.UpdateSspAssetPermissionPlugin,Assets aktualisieren,de_DE +permission.name.UnassignSspAssetPermissionPlugin,Unassign business unit ssp assets,en_US +permission.name.UnassignSspAssetPermissionPlugin,Geschäftseinheit-assets anzeigen,de_DE +ssp_dashboard.overview.not_applicable,n/a,en_US +ssp_dashboard.overview.not_applicable,n/a,de_DE +self_service_portal.asset.form.image.description,"Max up to %size%. Allowed file formats %format%",en_US +self_service_portal.asset.form.image.description,"Maximal bis zu %size%. Erlaubte Dateiformate: %format%",de_DE +self_service_portal.asset.validation.name.not_set,Asset name must be provided,en_US +self_service_portal.asset.validation.name.not_set,Der Name des Assets muss angegeben werden,de_DE +self_service_portal.asset.validation.business_unit.not_set,Business unit must be provided,en_US +self_service_portal.asset.validation.business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.company_business_unit.not_set,Company business unit must be provided,en_US +self_service_portal.asset.validation.company_business_unit.not_set,Die Geschäftseinheit muss angegeben werden,de_DE +self_service_portal.asset.validation.assets_not_provided,No assets were provided,en_US +self_service_portal.asset.validation.assets_not_provided,Es wurden keine Assets bereitgestellt,de_DE +self_service_portal.asset.validation.id_not_provided,Asset ID was not provided,en_US +self_service_portal.asset.validation.id_not_provided,Asset-ID wurde nicht angegeben,de_DE +self_service_portal.asset.validation.not_found,Asset was not found,en_US +self_service_portal.asset.validation.not_found,Asset wurde nicht gefunden,de_DE +self_service_portal.asset.list.widget.title,Assets,en_US +self_service_portal.asset.list.widget.title,Assets,de_DE +self_service_portal.asset.create.title,Create Asset,en_US +self_service_portal.asset.create.title,Asset erstellen,de_DE +self_service_portal.asset.list.title,Assets,en_US +self_service_portal.asset.list.title,Assets,de_DE +self_service_portal.asset.submit.button,Save,en_US +self_service_portal.asset.submit.button,Speichern,de_DE +self_service_portal.asset.success.created,Asset has been successfully created,en_US +self_service_portal.asset.success.created,Asset wurde erfolgreich erstellt,de_DE +self_service_portal.asset.error.create,Asset creation failed,en_US +self_service_portal.asset.error.create,Fehler beim Erstellen des Assets,de_DE +self_service_portal.asset.form.name,Name,en_US +self_service_portal.asset.form.name,Name,de_DE +self_service_portal.asset.form.serial_number,Serial number,en_US +self_service_portal.asset.form.serial_number,Seriennummer,de_DE +self_service_portal.asset.form.note,Note,en_US +self_service_portal.asset.form.note,Notiz,de_DE +self_service_portal.asset.form.image,Image,en_US +self_service_portal.asset.form.image,Bild,de_DE +self_service_portal.asset.form.image.mime_type_error,Invalid file format. Allowed file formats: {{ types }},en_US +self_service_portal.asset.form.image.mime_type_error,Ungültiges Dateiformat. Erlaubte Dateiformate: {{ types }},de_DE +self_service_portal.asset.form.external_image_url,External Image URL,en_US +self_service_portal.asset.form.external_image_url,Externe Bild-URL,de_DE +self_service_portal.asset.form.external_image_url.note,"Note: If no image is uploaded locally, the asset will use the image from the provided URL.",en_US +self_service_portal.asset.form.external_image_url.note,"Hinweis: Wenn kein Bild lokal hochgeladen wird, verwendet das Asset standardmäßig das Bild von der angegebenen URL.",de_DE +self_service_portal.asset.update.title,Edit Asset,en_US +self_service_portal.asset.update.title,Asset bearbeiten,de_DE +self_service_portal.asset.details.reference,Asset Reference,en_US +self_service_portal.asset.details.reference,Asset-Referenz,de_DE +self_service_portal.asset.cancel.button,Cancel,en_US +self_service_portal.asset.cancel.button,Abbrechen,de_DE +self_service_portal.asset.details.created_date,Date added,en_US +self_service_portal.asset.details.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details.owner,Business unit owner,en_US +self_service_portal.asset.details.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details.confirm_delete_title,Confirm delete,en_US +self_service_portal.asset.details.confirm_delete_title,Löschen bestätigen,de_DE +self_service_portal.asset.details.confirm_delete_body,Are you sure you want to delete the image?,en_US +self_service_portal.asset.details.confirm_delete_body,"Sind Sie sicher, dass Sie das Bild löschen möchten?",de_DE +self_service_portal.asset.success.updated,Asset has been successfully updated,en_US +self_service_portal.asset.success.updated,Asset wurde erfolgreich aktualisiert,de_DE +self_service_portal.asset.image.requirements,Upload image requirements,en_US +self_service_portal.asset.image.requirements,Anforderungen für das Hochladen von Bildern,de_DE +self_service_portal.asset.image.upload,Upload Image,en_US +self_service_portal.asset.image.upload,Bild hochladen,de_DE +self_service_portal.asset.details_page.search_service,Search services,en_US +self_service_portal.asset.details_page.search_service,Services suchen,de_DE +self_service_portal.asset.details_page.name,Name,en_US +self_service_portal.asset.details_page.name,Name,de_DE +self_service_portal.asset.details_page.serial_number,Serial number,en_US +self_service_portal.asset.details_page.serial_number,Seriennummer,de_DE +self_service_portal.asset.details_page.note,Note,en_US +self_service_portal.asset.details_page.note,Notiz,de_DE +self_service_portal.asset.details_page.reference,Reference,en_US +self_service_portal.asset.details_page.reference,Referenz,de_DE +self_service_portal.asset.details_page.confirm_unassign_title,Confirm delete,en_US +self_service_portal.asset.details_page.confirm_unassign_title,Löschen bestätigen,de_DE +self_service_portal.asset.details_page.confirm_unassign_body,Unassign this asset from the business unit. Do you want to proceed?,en_US +self_service_portal.asset.details_page.confirm_unassign_body,Möchten Sie dieses Asset wirklich von der Geschäftseinheit entfernen?,de_DE +self_service_portal.asset.details_page.confirm_unassign_in_review,Asset is in Review. You can delete it after it is approved.,en_US +self_service_portal.asset.details_page.confirm_unassign_in_review,"Die Ressource wird überprüft. Du kannst sie löschen, nachdem sie genehmigt wurde.",de_DE +self_service_portal.asset.details_page.unassign,Unassign,en_US +self_service_portal.asset.details_page.unassign,Zuweisung aufheben,de_DE +self_service_portal.inquiry.type.ssp_asset,Asset,en_US +self_service_portal.inquiry.type.ssp_asset,Asset,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset Reference,en_US +customer.self_service_portal.inquiry.details.ssp_asset_reference,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.ssp_asset.details,Asset Details,en_US +customer.self_service_portal.inquiry.ssp_asset.details,Asset-Details,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset not available,en_US +customer.self_service_portal.inquiry.details.ssp_asset_not_available,Asset nicht verfügbar,de_DE +self_service_portal.asset.error.reference_not_found,Asset reference not found,en_US +self_service_portal.asset.error.reference_not_found,Asset-Referenz nicht gefunden,de_DE +self_service_portal.asset.error.company_user_not_found,Company user not found,en_US +self_service_portal.asset.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.self_service_portal.inquiry.create.button,Create inquiry,en_US +customer.self_service_portal.inquiry.create.button,Anfrage stellen,de_DE +self_service_portal.inquiry.ssp_asset_reference.label,Asset Reference,en_US +self_service_portal.inquiry.ssp_asset_reference.label,Asset-Referenz,de_DE +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset Name,en_US +customer.self_service_portal.inquiry.details.ssp_asset_name,Asset-Name,de_DE +customer.account.ssp_assets,My Assets,en_US +customer.account.ssp_assets,Meine Assets,de_DE +customer.account.ssp_asset,Asset,en_US +customer.account.ssp_asset,Asset,de_DE +customer.ssp_asset.list.reference,Reference,en_US +customer.ssp_asset.list.reference,Referenz,de_DE +customer.ssp_asset.list.name,Asset Name,en_US +customer.ssp_asset.list.name,Asset-Name,de_DE +customer.ssp_asset.list.serial_number,Serial number,en_US +customer.ssp_asset.list.serial_number,Seriennummer,de_DE +customer.ssp_asset.list.date_added,Date added,en_US +customer.ssp_asset.list.date_added,Hinzugefügt am,de_DE +customer.ssp_asset.view_ssp_asset,View,en_US +customer.ssp_asset.view_ssp_asset,Anzeigen,de_DE +customer.ssp_asset.create.button,Create asset,en_US +customer.ssp_asset.create.button,Asset erstellen,de_DE +customer.account.no_ssp_assets,You do not have any assets yet.,en_US +customer.account.no_ssp_assets,Sie haben noch keine Assets.,de_DE +company.error.company_user_not_found,Company user not found,en_US +company.error.company_user_not_found,Firmenbenutzer nicht gefunden,de_DE +customer.ssp_asset.list.business_unit,Business Unit,en_US +customer.ssp_asset.list.business_unit,Geschäftseinheit,de_DE +customer.ssp_asset.list.image,Image,en_US +customer.ssp_asset.list.image,Bild,de_DE +self_service_portal.asset.details_page.created_date,Date added,en_US +self_service_portal.asset.details_page.created_date,Hinzugefügt am,de_DE +self_service_portal.asset.details_page.owner,Business unit owner,en_US +self_service_portal.asset.details_page.owner,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.details_page.undefined,Undefined,en_US +self_service_portal.asset.details_page.undefined,Nicht definiert,de_DE +self_service_portal.asset.success.business_unit_relation_updated,Business unit has been successfully unassigned from the asset,en_US +self_service_portal.asset.success.business_unit_relation_updated,Die Zuordnung der Geschäftseinheit zum Asset wurde erfolgreich aufgehoben,de_DE +self_service_portal.asset.details_page.status,Status,en_US +self_service_portal.asset.details_page.status,Status,de_DE +self_service_portal.asset.details.status,Status,en_US +self_service_portal.asset.details.status,Status,de_DE +self_service_portal.asset.status.pending,Pending,en_US +self_service_portal.asset.status.pending,Ausstehend,de_DE +self_service_portal.asset.status.approved,Approved,en_US +self_service_portal.asset.status.approved,Genehmigt,de_DE +self_service_portal.asset.status.in_review,In Review,en_US +self_service_portal.asset.status.in_review,In Überprüfung,de_DE +self_service_portal.asset.status.declined,Declined,en_US +self_service_portal.asset.status.declined,Abgelehnt,de_DE +customer.ssp_asset.list.business_unit,Business Unit Owner,en_US +customer.ssp_asset.list.business_unit,Inhaber der Geschäftseinheit,de_DE +self_service_portal.asset.information.assigned_bu,Assigned business units,en_US +self_service_portal.asset.information.assigned_bu,Zugewiesene Geschäftseinheiten,de_DE +customer.ssp_asset.filter.scope,Access level,en_US +customer.ssp_asset.filter.scope,Zugriffsebene,de_DE +customer.ssp_asset.filter.scope.placeholder,Select access level,en_US +customer.ssp_asset.filter.scope.placeholder,Zugriffsebene auswählen,de_DE +customer.ssp_asset.filter_by_business_unit,My business unit assets,en_US +customer.ssp_asset.filter_by_business_unit,Assets meiner Geschäftseinheit,de_DE +customer.ssp_asset.filter_by_company,Company Assets,en_US +customer.ssp_asset.filter_by_company,Firmenassets,de_DE +self_service_portal.asset.error.cannot_unassign_own_business_unit,You cannot unassign your own business unit from the asset,en_US +self_service_portal.asset.error.cannot_unassign_own_business_unit,Sie können Ihre eigene Geschäftseinheit nicht vom Asset trennen,de_DE +self_service_portal.search_filter_form.label.active_filters,Active filters:,en_US +self_service_portal.search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.search_filter_form.field.reset_all.label,Reset all,en_US +self_service_portal.search_filter_form.field.reset_all.label,Alles zurücksetzen,de_DE +general.fileUpload.upload,Upload,en_US +general.fileUpload.upload,Hochladen,de_DE +self_service_portal.service.product.no_shipment_types_available,Keine Versandarten für dieses Produkt verfügbar.,de_DE +self_service_portal.service.product.no_shipment_types_available,No shipping types available for this product.,en_US +self_service_portal.service.product.shipment_types,Versandarten,de_DE +self_service_portal.service.product.shipment_types,Shipment Types,en_US +self_service_portal.service.product.select_service_point,Wählen Sie einen Servicepunkt,de_DE +self_service_portal.service.product.select_service_point,Select a service point,en_US +self_service_portal.service.product.service_point_required,Ein Servicepunkt ist für dieses Produkt erforderlich,de_DE +self_service_portal.service.product.service_point_required,A service point is required for this product,en_US +self_service_portal.service.cart_item.service_point.name,Service point,en_US +self_service_portal.service.cart_item.service_point.name,Servicepunkt,de_DE +self_service_portal.service.product.service_date_time,Choose your preferred date and time slot,en_US +self_service_portal.service.product.service_date_time,Wählen Sie Ihr bevorzugtes Datum und Ihre gewünschte Uhrzeit,de_DE +self_service_portal.service.product.label.service_date_time,Service date and time,en_US +self_service_portal.service.product.label.service_date_time,Service-Datum und -Uhrzeit,de_DE +product.filter.product-abstract-types,Product Abstract Types,en_US +product.filter.product-abstract-types,Produktabstraktsarten,de_DE +self_service_portal.asset.access.denied,Access denied.,en_US +self_service_portal.asset.access.denied,Zugriff verweigert.,de_DE +self_service_portal.asset.access.status.restricted,Restricted access.,en_US +self_service_portal.asset.access.status.restricted,Eingeschränkter Zugriff.,de_DE +self_service_portal.service.checkout.item_count,Number of Items,en_US +self_service_portal.service.checkout.item_count,Anzahl der Teile,de_DE +ssp-service-management.info.service-without-shipment-type.removed,Service item %sku% without shipment type has been removed,en_US +ssp-service-management.info.service-without-shipment-type.removed,Serviceartikel %sku% ohne Versandart wurde entfernt,de_DE +self_service_portal.service.cart_item.scheduled_at,Service Date and time,en_US +self_service_portal.service.cart_item.scheduled_at,Service Datum und Uhrzeit,de_DE +self_service_portal.customer_navigation.title,Self-Service,en_US +self_service_portal.customer_navigation.title,Self-Service,de_DE +customer.customer_navigation.title,Account & Shopping,en_US +customer.customer_navigation.title,Konto und Shopping,de_DE +forms.apply-btn,Apply,en_US +forms.apply-btn,Anwenden,de_DE +customer.account.button.filters,Filters,en_US +customer.account.button.filters,Filter,de_DE +general.fileUpload.description,Maximum of %amount% files (%format%) up to %size%,en_US +general.fileUpload.description,Maximal %amount% Dateien (%format%) bis %size%,de_DE +customer.account.self_service_portal.inquiry.details,Inquiry,en_US +customer.account.self_service_portal.inquiry.details,Anfrage,de_DE +customer.self_service_portal.inquiry.details.reference,Reference,en_US +customer.self_service_portal.inquiry.details.reference,Referenz,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company,Company Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company,Unternehmensdateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_user,Dateien,de_DE +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Business unit files,en_US +self_service_portal.company_file.file_search_filter_form.field.type.company_business_unit,Geschäftseinheitsdateien,de_DE +customer.self_service_portal.inquiry.details.date,Date,en_US +customer.self_service_portal.inquiry.details.date,Datum,de_DE +customer.self_service_portal.inquiry.details.status,Status,en_US +customer.self_service_portal.inquiry.details.status,Status,de_DE +customer.self_service_portal.inquiry.details,Inquiry Details,en_US +customer.self_service_portal.inquiry.details,Anfragedetails,de_DE +customer.self_service_portal.inquiry.details.type,Type,en_US +customer.self_service_portal.inquiry.details.type,Typ,de_DE +customer.self_service_portal.inquiry.details.subject,Subject,en_US +customer.self_service_portal.inquiry.details.subject,Betreff,de_DE +customer.self_service_portal.inquiry.details.description,Description,en_US +customer.self_service_portal.inquiry.details.description,Beschreibung,de_DE +customer.self_service_portal.inquiry.owner,Owner,en_US +customer.self_service_portal.inquiry.owner,Eigentümer,de_DE +customer.self_service_portal.inquiry.details.first_name,First Name,en_US +customer.self_service_portal.inquiry.details.first_name,Vorname,de_DE +customer.self_service_portal.inquiry.details.last_name,Last Name,en_US +customer.self_service_portal.inquiry.details.last_name,Nachname,de_DE +customer.self_service_portal.inquiry.details.email,E-mail,en_US +customer.self_service_portal.inquiry.details.email,E-Mail,de_DE +customer.self_service_portal.inquiry.details.company,Company / Business Unit,en_US +customer.self_service_portal.inquiry.details.company,Firma / Geschäftseinheit,de_DE +customer.self_service_portal.inquiry.details.file.name,File name,en_US +customer.self_service_portal.inquiry.details.file.name,Dateiname,de_DE +customer.self_service_portal.inquiry.details.file.size,Size,en_US +customer.self_service_portal.inquiry.details.file.size,Größe,de_DE +customer.self_service_portal.inquiry.details.file.extension,Type,en_US +customer.self_service_portal.inquiry.details.file.extension,Typ,de_DE +customer.self_service_portal.inquiry.details.file.download,Download,en_US +customer.self_service_portal.inquiry.details.file.download,Herunterladen,de_DE +customer.self_service_portal.inquiry.details.files,Files,en_US +customer.self_service_portal.inquiry.details.files,Dateien,de_DE +customer.self_service_portal.inquiry.details.order_reference,Order Reference,en_US +customer.self_service_portal.inquiry.details.order_reference,Bestellnummer,de_DE +self_service_portal.inquiry.error.company_user_not_found,Company user not found.,en_US +self_service_portal.inquiry.error.company_user_not_found,Firmenbenutzer nicht gefunden.,de_DE +self_service_portal.inquiry.type.general-question,General Question,en_US +self_service_portal.inquiry.type.general-question,Allgemeine Frage,de_DE +self_service_portal.inquiry.type.general-ssp_inquiry,General Inquiry,en_US +self_service_portal.inquiry.type.general-ssp_inquiry,Allgemeine Anfrage,de_DE +self_service_portal.inquiry.order.create_ssp_inquiry,Inquiry,en_US +self_service_portal.inquiry.order.create_ssp_inquiry,Anfrage,de_DE +self_service_portal.inquiry.order_reference.label,Order Reference,en_US +self_service_portal.inquiry.order_reference.label,Bestellnummer,de_DE +self_service_portal.inquiry.file.unavailable,File is not available,en_US +self_service_portal.inquiry.file.unavailable,Datei ist nicht verfügbar,de_DE +customer.ssp_inquiry.create.button,Create inquiry,en_US +customer.ssp_inquiry.create.button,Anfrage stellen,de_DE +ssp_asset.details_page.search_service,Search services,en_US +ssp_asset.details_page.search_service,Services suchen,de_DE +general.confirm.button,Confirm,en_US +general.confirm.button,Bestätigen,de_DE +product_offer_service_point_availability_widget.all_items_not_available,Not available.,en_US +product_offer_service_point_availability_widget.all_items_not_available,Keine der Produkte sind verfügbar.,de_DE +product_offer_service_point_availability_widget.all_items_available,All items are available.,en_US +product_offer_service_point_availability_widget.all_items_available,Alle Produkte sind verfügbar.,de_DE +shipment_type.name.shipment_type_in-center-service,In-Center Service,en_US +shipment_type.name.shipment_type_in-center-service,In-Center-Service,de_DE +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Active filters:,en_US +ssp_asset_management.ssp_asset_search_filter_form.label.active_filters,Aktive filter:,de_DE +self_service_portal.asset.business_unit_unassignment.denied,You cannot unassign business unit from asset.,en_US +self_service_portal.asset.business_unit_unassignment.denied,Sie können die Geschäftseinheit nicht vom Asset trennen.,de_DE +self_service_portal.asset.business_unit_assignment.denied,You cannot assign business unit to asset.,en_US +self_service_portal.asset.business_unit_assignment.denied,Sie können die Geschäftseinheit dem Asset nicht zuweisen.,de_DE +general.fileUpload.mb,MB,en_US +general.fileUpload.mb,MB,de_DE +customer.address.single_address_per_shipment_type,Set same address for all products,en_US +customer.address.single_address_per_shipment_type,Setze gleiche Adresse für alle Produkte,de_DE +service_point_widget.location_label,Location:,en_US +service_point_widget.location_label,Standort:,de_DE +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Access Level,en_US +self_service_portal.company_file.file_search_filter_form.field.business_entity.label,Zugriffsebene,de_DE +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Filter by Asset,en_US +self_service_portal.company_file.file_search_filter_form.field.ssp_asset_entity.label,Nach Asset filtern,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don’t show Business entity files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don’t show Asset entity files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Einheitsdateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_type.company_user,My Files,en_US +self_service_portal.company_file.file_attachment_type.company_user,Meine Dateien,de_DE +self_service_portal.company_file.file_attachment_type.company,Company Files,en_US +self_service_portal.company_file.file_attachment_type.company,Firmendateien,de_DE +self_service_portal.company_file.file_attachment_type.all,All available files,en_US +self_service_portal.company_file.file_attachment_type.all,Alle verfügbaren Dateien,de_DE +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Don't show Asset files,en_US +self_service_portal.company_file.file_attachment_ssp_asset_type.none,Keine Asset-Dateien anzeigen,de_DE +self_service_portal.company_file.file_attachment_business_type.none,Don't show Business unit files,en_US +self_service_portal.company_file.file_attachment_business_type.none,Keine Geschäftseinheitsdateien anzeigen,de_DE +customer.account.ssp_booked_services,Booked Services,en_US +customer.account.ssp_booked_services,Gebuchte Services,de_DE +customer.self_service_portal.service.list.product_name,Product Name,en_US +customer.self_service_portal.service.list.product_name,Produktname,de_DE +customer.self_service_portal.service.list.order_reference,Order Reference,en_US +customer.self_service_portal.service.list.order_reference,Bestellreferenz,de_DE +customer.self_service_portal.service.list.scheduled_at,Date and Time,en_US +customer.self_service_portal.service.list.scheduled_at,Datum und Uhrzeit,de_DE +customer.self_service_portal.service.list.status,Status,en_US +customer.self_service_portal.service.list.status,Status,de_DE +ssp_dashboard.general.booked_services,Booked Services,en_US +ssp_dashboard.general.booked_services,Gebuchte Services,de_DE +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,en_US +permission.name.ViewCompanySspServicePermissionPlugin,ViewCompanySspServicePermissionPlugin,de_DE +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,en_US +permission.name.ViewBusinessUnitSspServicePermissionPlugin,ViewBusinessUnitSspServicePermissionPlugin,de_DE +self_service_portal.asset_filter.title,ASSET FILTER,en_US +self_service_portal.asset_filter.title,ASSET FILTER,de_DE +self_service_portal.asset_filter.description,Filter items based on your assets,en_US +self_service_portal.asset_filter.description,Artikel basierend auf Ihren Assets filtern,de_DE +self_service_portal.asset_filter.select_label,Select My Assets,en_US +self_service_portal.asset_filter.select_label,Meine Assets auswählen,de_DE +self_service_portal.asset_filter.serial_label,Serial:,en_US +self_service_portal.asset_filter.serial_label,Seriennummer:,de_DE +self_service_portal.asset_filter.change,Change Asset,en_US +self_service_portal.asset_filter.change,Asset ändern,de_DE +self_service_portal.asset_filter.clear,Clear,en_US +self_service_portal.asset_filter.clear,Löschen,de_DE +self_service_portal.ssp_asset.details_page.catalog,Shop Spare Parts,en_US +catalog.ssp.itemsFound,%num_found% artikel gefunden für %ssp_asset_name%,de_DE +catalog.ssp.itemsFound,%num_found% items found for %ssp_asset_name%,en_US +self_service_portal.asset.selector.button,Select asset,en_US +self_service_portal.asset.selector.button,Asset auswählen,de_DE +self_service_portal.asset.modal.header,Assign asset,en_US +self_service_portal.asset.modal.header,Vermögenswert zuweisen,de_DE +self_service_portal.asset.item.button,Assign,en_US +self_service_portal.asset.item.button,Zuweisen,de_DE +self_service_portal.asset.item.serial,Serial,en_US +self_service_portal.asset.item.serial,Seriennummer,de_DE +self_service_portal.asset.error.attach_to_cart_item,Asset cannot be added to cart.,en_US +self_service_portal.asset.error.attach_to_cart_item,Der Asset kann nicht zum Warenkorb hinzugefügt werden.,de_DE +self_service_portal.ssp_asset.success.attached_to_cart,Asset has been successfully updated for item %sku%.,en_US +self_service_portal.ssp_asset.success.attached_to_cart,Der Asset wurde erfolgreich für Artikel %sku% aktualisiert.,de_DE +global.search.results.no_query,Ergebnisse,de_DE +global.search.results.no_query,Search Results,en_US +self_service_portal.order.service.cancel.title,Cancel Service?,en_US +self_service_portal.order.service.cancel.title,Service stornieren?,de_DE +self_service_portal.order.service.cancel.description,You are about to cancel %name% (SKU: %sku%),en_US +self_service_portal.order.service.cancel.description,Sie sind dabei %name% (SKU: %sku%) zu stornieren,de_DE +self_service_portal.order.service.cancel.keep,Keep Service,en_US +self_service_portal.order.service.cancel.keep,Service behalten,de_DE +self_service_portal.asset.error.not-found,Asset nicht gefunden,de_DE +self_service_portal.asset.error.not-found,Asset not found,en_US +self_service_portal.asset.validation.unknown_error,An unexpected error occurred while processing your asset,en_US +self_service_portal.asset.validation.unknown_error,Beim Verarbeiten Ihres Assets ist ein unerwarteter Fehler aufgetreten.,de_DE +self_service_portal.inquiry.error.not-found,Anfrage nicht gefunden,de_DE +self_service_portal.inquiry.error.not-found,Inquiry not found,en_US +self_service_portal.inquiry.validation.unknown_error,Beim Verarbeiten Ihrer Anfrage ist ein unerwarteter Fehler aufgetreten,de_DE +self_service_portal.inquiry.validation.unknown_error,An unexpected error occurred while processing your inquiry,en_US +self_service_portal.asset.validation.status.not_valid,Status is not valid.,en_US +self_service_portal.asset.validation.status.not_valid,Status ist nicht gültig.,de_DE +self_service_portal.asset.business_unit.not_found,Business unit not found.,en_US +self_service_portal.asset.business_unit.not_found,Geschäftseinheit nicht gefunden.,de_DE +self_service_portal.inquiry.validation.ssp_asset_reference_required,Asset reference is required.,en_US +self_service_portal.inquiry.validation.ssp_asset_reference_required,Asset-Referenz ist erforderlich.,de_DE +self_service_portal.inquiry.validation.ssp_asset_reference_not_allowed,Asset reference is not allowed.,en_US +self_service_portal.inquiry.validation.ssp_asset_reference_not_allowed,Asset-Referenz ist nicht erlaubt.,de_DE +self_service_portal.inquiry.validation.order_reference_required,Order reference is required.,en_US +self_service_portal.inquiry.validation.order_reference_required,Bestellreferenz ist erforderlich.,de_DE +self_service_portal.inquiry.validation.order_reference_not_allowed,Order reference is not allowed.,en_US +self_service_portal.inquiry.validation.order_reference_not_allowed,Bestellreferenz ist nicht erlaubt.,de_DE +self_service_portal.inquiry.validation.type_required,Type is required.,en_US +self_service_portal.inquiry.validation.type_required,Typ ist erforderlich.,de_DE +self_service_portal.inquiry.validation.subject_required,Subject is required.,en_US +self_service_portal.inquiry.validation.subject_required,Betreff ist erforderlich.,de_DE +self_service_portal.inquiry.validation.description_required,Description is required.,en_US +self_service_portal.inquiry.validation.description_required,Beschreibung ist erforderlich.,de_DE +``` \ No newline at end of file diff --git a/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-feature.md b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-feature.md new file mode 100644 index 00000000000..8434387aa5c --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-feature.md @@ -0,0 +1,930 @@ + + + +This document describes how to install the Warehouse picking feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Warehouse User Management | {{page.release_tag}} | [Install the Warehouse User Management feature](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html) | +| Order Management | {{page.release_tag}} | [Install the Order Management feature](/docs/pbc/all/order-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Push Notification | {{page.release_tag}} | [Install the Push Notification feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-push-notification-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/latest/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + +## 1) Install the required modules + +1. Install the required modules using Composer: + +```bash +composer require spryker-feature/warehouse-picking: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------|-----------------------------------------------------| +| PickingList | vendor/spryker/picking-list | +| PickingListExtension | vendor/spryker/picking-list-extension | +| PickingListPushNotification | vendor/spryker/picking-list-push-notification | +| PickingListsBackendApi | vendor/spryker/picking-lists-backend-api | +| PickingListsBackendApiExtension | vendor/spryker/picking-lists-backend-api-extension | +| PickingListsUsersBackendApi | vendor/spryker/picking-lists-users-backend-api | +| PickingListsWarehousesBackendApi | vendor/spryker/picking-lists-warehouses-backend-api | + + +{% endinfo_block %} + + +2. Optional: To install the [demo multi-shipment picking strategy](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/warehouse-picking-feature-overview.html#example-of-a-picklist-generation-strategy), install the module: + +```bash +composer require spryker/picking-list-multi-shipment-picking-strategy-example: "^0.2.1" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------------------------------------|---------------------------------------------------------------------| +| PickingListMultiShipmentPickingStrategyExample | vendor/spryker/picking-list-multi-shipment-picking-strategy-example | + + +{% endinfo_block %} + + +3. Optional: To install early access [OAuth authorization](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/warehouse-picking-feature-overview.html#fulfillment-app-oauth), install the module: + +```bash +composer require spryker-eco/authorization-picking-app-backend-api: "^0.2.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +|-----------------------------------|----------------------------------------------------------| +| AuthorizationPickingAppBackendApi | vendor/spryker-eco/authorization-picking-app-backend-api | +| OauthCodeFlow | vendor/spryker/oauth-code-flow | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +1. Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|---------------------------------|--------|---------| +| spy_picking_list | table | created | +| spy_picking_list_item | table | created | +| spy_sales_order_item.uuid | column | created | +| spy_stock.picking_list_strategy | column | created | + +Make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------------------------|----------|---------|-------------------------------------------------------------------------------| +| PickingListCriteria | class | created | src/Generated/Shared/Transfer/PickingListCriteriaTransfer | +| PickingListConditions | class | created | src/Generated/Shared/Transfer/PickingListConditionsTransfer | +| PickingListCollection | class | created | src/Generated/Shared/Transfer/PickingListCollectionTransfer | +| PickingList | class | created | src/Generated/Shared/Transfer/PickingListTransfer | +| PickingListItemCriteria | class | created | src/Generated/Shared/Transfer/PickingListItemCriteriaTransfer | +| PickingListItemConditions | class | created | src/Generated/Shared/Transfer/PickingListItemConditionsTransfer | +| PickingListItemCollection | class | created | src/Generated/Shared/Transfer/PickingListItemCollectionTransfer | +| PickingListItem | class | created | src/Generated/Shared/Transfer/PickingListItemTransfer | +| PickingListCollectionRequest | class | created | src/Generated/Shared/Transfer/PickingListCollectionRequestTransfer | +| PickingListCollectionResponse | class | created | src/Generated/Shared/Transfer/PickingListCollectionResponseTransfer | +| GeneratePickingListsRequest | class | created | src/Generated/Shared/Transfer/GeneratePickingListsRequestTransfer | +| PickingListOrderItemGroup | class | created | src/Generated/Shared/Transfer/PickingListOrderItemGroupTransfer | +| PickingListGenerationFinishedRequest | class | created | src/Generated/Shared/Transfer/PickingListGenerationFinishedRequestTransfer | +| PickingListGenerationFinishedResponse | class | created | src/Generated/Shared/Transfer/PickingListGenerationFinishedResponseTransfer | +| PickingStartedRequest | class | created | src/Generated/Shared/Transfer/PickingStartedRequestTransfer | +| PickingStartedResponse | class | created | src/Generated/Shared/Transfer/PickingStartedResponseTransfer | +| PickingFinishedRequest | class | created | src/Generated/Shared/Transfer/PickingFinishedRequestTransfer | +| PickingFinishedResponse | class | created | src/Generated/Shared/Transfer/PickingFinishedResponseTransfer | +| StockCollection | class | created | src/Generated/Shared/Transfer/StockCollectionTransferTransfer | +| StockConditions | class | created | src/Generated/Shared/Transfer/StockConditionsTransferTransfer | +| PickingListsRequestBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListsRequestBackendApiAttributesTransfer | +| PickingListsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListsBackendApiAttributesTransfer | +| PickingListItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/PickingListItemsBackendApiAttributesTransfer | +| OrderItemsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/OrderItemsBackendApiAttributesTransfer | +| UsersBackendApiAttributes | class | created | src/Generated/Shared/Transfer/UsersBackendApiAttributesTransfer | +| UserResourceCollection | class | created | src/Generated/Shared/Transfer/UserResourceCollectionTransfer | +| WarehousesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/WarehousesBackendApiAttributesTransfer | +| WarehouseResourceCollection | class | created | src/Generated/Shared/Transfer/WarehouseResourceCollectionTransfer | +| Item.uuid | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| User.uuid | property | created | src/Generated/Shared/Transfer/UserTransfer | +| Stock.pickingListStrategy | property | created | src/Generated/Shared/Transfer/StockTransfer | +| PushNotificationCollectionRequest.pickingLists | property | created | src/Generated/Shared/Transfer/PushNotificationCollectionRequestTransfer | + + + +Optional: If you've installed the early access OAuth authorization, make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------|-------|---------| +| spy_oauth_code_flow_auth_code | table | created | + + +Optional: If you've installed the early access OAuth authorization, make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|----------------------------------------|----------|---------|----------------------------------------------------------| +| OauthRequest.responseType | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.redirectUri | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.state | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.code | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.codeChallenge | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| OauthRequest.codeChallengeMethod | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthRequest.codeVerifier | property | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| OauthResponse.state | property | created | src/Generated/Shared/Transfer/OauthResponseTransfer | +| OauthResponse.code | property | created | src/Generated/Shared/Transfer/OauthResponseTransfer | +| ApiTokenAttributes.code | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.clientId | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.redirectUri | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| ApiTokenAttributes.codeVerifier | property | created | src/Generated/Shared/Transfer/ApiTokenAttributesTransfer | +| AuthCodeAttributes.username | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.password | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.responseType | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.clientId | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.scope | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.redirectUri | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.state | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.codeChallenge | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCodeAttributes.codeChallengeMethod | property | created | src/Generated/Shared/Transfer/AuthCodeAttributesTransfer | +| AuthCode.identifier | property | created | src/Generated/Shared/Transfer/AuthCodeTransfer | +| AuthCode.expiresAt | property | created | src/Generated/Shared/Transfer/AuthCodeTransfer | + +{% endinfo_block %} + + +## 3) Set up configuration + +Set up the following configuration. + +### Configure Glue API resources + +To make the `picking-lists` and `picking-list-items` resources protected, adjust the protected paths' configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + '/\/picking-lists.*/' => [ + 'isRegularExpression' => true, + 'methods' => [ + 'patch', + ], + ], + ]; + } +} +``` + +### Configure OMS + +1. Add the `DummyPicking` subprocess that describes the warehouse picking in the system. + +**config/Zed/oms/DummySubprocess/DummyPicking.xml** + +```xml + + + + + + + + + + + + + + + picking list generation scheduled + picking list generation started + generate picking lists + + + + picking list generation started + ready for picking + prepare for picking + + + + ready for picking + picking started + start picking + + + + picking started + picking finished + finish picking + + + + + + + + + + + + +``` + +2. Add the `DummyPicking` subprocess to the `DummyPayment01` process as an example. Consider OMS configuration using the `DummyPayment01` process as an example. + +
    config/Zed/oms/DummyPayment01.xml + +```xml + + + + + + DummyPicking + + + + + + + + + + + + + waiting + picking list generation scheduled + picking list generation schedule + + + + picking finished + exported + finish picking + + + + + + + + + +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Administration > OMS**. +2. Click the `DummyPayment01` process. +3. Make sure the OMS transition diagram shows the transition from `waiting` to `picking list generation scheduled` and from `picking finished` to `exported`. + +{% endinfo_block %} + +### Configure the push notification provider + +Add the configuration: + +**src/Pyz/Zed/PickingListPushNotification/PickingListPushNotificationConfig.php** + +```php +src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + $commandCollection->add(new GeneratePickingListsCommandByOrderPlugin(), 'PickingList/GeneratePickingLists'); + + return $commandCollection; + }); + + return $container; + } + + /** + * @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 IsPickingListGenerationFinishedConditionPlugin(), 'PickingList/isPickingListGenerationFinished'); + $conditionCollection->add(new IsPickingStartedConditionPlugin(), 'PickingList/isPickingStarted'); + $conditionCollection->add(new IsPickingFinishedConditionPlugin(), 'PickingList/isPickingFinished'); + + return $conditionCollection; + }); + + return $container; + } +} +``` + + + +**src/Pyz/Zed/PickingList/PickingListDependencyProvider.php** + +```php + + */ + protected function getPickingListPostCreatePlugins(): array + { + return [ + new PushNotificationPickingListPostCreatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\PickingListExtension\Dependency\Plugin\PickingListPostUpdatePluginInterface> + */ + protected function getPickingListPostUpdatePlugins(): array + { + return [ + new PushNotificationPickingListPostUpdatePlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PushNotification/PushNotificationDependencyProvider.php** + +```php + + */ + protected function getPushNotificationSubscriptionValidatorPlugins(): array + { + return [ + new WarehouseUserPushNotificationSubscriptionValidatorPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php + + */ + protected function getPostSavePlugins(): array + { + return [ + new UnassignPickingListUserPostSavePlugin(), + ]; + } +} +``` + +### Optional: Set up the multi-shipment picking strategy + +If you've installed the demo picking strategy, enable the demo multi-shipment picking strategy plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------|----------------------------------------------------------|---------------|---------------------------------------------------------------------------------------------| +| MultiShipmentPickingListGeneratorStrategyPlugin | Generates picking lists based on a warehouse strategy. | | Spryker\Zed\PickingListMultiShipmentPickingStrategyExample\Communication\Plugin\PickingList | + +**src/Pyz/Zed/PickingList/PickingListDependencyProvider.php** + +```php + + */ + protected function getPickingListGeneratorStrategyPlugins(): array + { + return [ + new MultiShipmentPickingListGeneratorStrategyPlugin(), + ]; + } +} +``` + +### Optional: Set up the OAuth authorization + +If you've installed the OAuth authorization, enable the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------| +| AuthorizeResource | Registers the OAuth `authorize` resource. | | SprykerEco\Glue\AuthorizationPickingAppBackendApi\Plugin\GlueApplication | +| UserAuthCodeOauthRequestGrantTypeConfigurationProviderPlugin | Builds `OauthGrantTypeConfigurationTransfer` from the configuration of `AuthorizationCode` grant type data. | | Spryker\Zed\OauthCodeFlow\Communication\Plugin\Oauth | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new AuthorizeResource(), + ]; + } +} +``` + +**src/Pyz/Zed/Oauth/OauthDependencyProvider.php** + +```php + + */ + protected function getOauthRequestGrantTypeConfigurationProviderPlugins(): array + { + return [ + new UserAuthCodeOauthRequestGrantTypeConfigurationProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Authenticate as a Back Office user with the the OAuth server: + +```http +POST /authorize/ HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 210 + +username={username}&password={password}&response_type=code&client_id={client_id}&state={state}&code_challenge={code_challenge}&code_challenge_method=S256&redirect_uri={redirect_uri} +``` + +| PARAMETER | TYPE | EXAMPLE | DESCRIPTION | +|-----------------------|--------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| username | string | some@user.com | The username of the Back Office user. | +| password | string | some-password | The password of the Back Office user. | +| response_type | string | code | Defines how the authorization server should respond to the client after the resource owner grants the access to the external application. | +| client_id | string | the-client-identifier-can-be-any-string | Public identifier for the client application that is requesting access to a user's resources. | +| state | string | some-random-string | Used to mitigate the risk of cross-site request forgery attacks. | +| code_challenge | string | some-random-string | Used in the Authorization Code Grant flow with a Proof Key for Code Exchange (PKCE) to enhance the security of the authorization process. PKCE is designed to protect against certain types of attacks, especially when the authorization code is exchanged for an access token. | +| code_challenge_method | string | S256 | Used in the Authorization Code Grant flow with PKCE. Defines the method used to transform the `code_verifier` into the `code_challenge` before initiating the authorization request. | +| redirect_uri | string | `https://some-redirect-url` | Used in the authorization request to specify where the authorization server should redirect the user after the user grants or denies permission. | + +For more detailed information about the Authorization (Code Grant flow) Request with PKCE, see to [Authorization Request](https://www.oauth.com/oauth2-servers/pkce/authorization-request/). + + Check that the response contains the 201 response with a code. + +2. Using the code you've retrieved in the previous step, authenticate as a Back Office user: + +```http +POST /token/ HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/x-www-form-urlencoded +Accept: application/json +Content-Length: 1051 + +grant_type=authorization_code&code={code}&client_id={client_id}&code_verifier={code_verifier} +``` + +| Parameter name | Type | Example | Description | +|----------------|--------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| grant_type | string | authorization_code | Specifies the type of grant requested by the client. In this case, it's the Authorization Code Grant flow. | +| code | string | some-code | The authorization code provided by the OAuth server. | +| client_id | string | the-client-identifier-can-be-any-string | Public identifier for the client application that is requesting access to a user's resources. | +| code_verifier | string | some-random-string | A random string generated by the client in the Authorization Code Grant flow with PKCE. It's used to verify the identity of the client when exchanging the authorization code for an access token. | + +Check that the response contains the 201 response with an auth token. Check that you can send requests to protected resources using the auth token. + +{% endinfo_block %} + +### Set up the backend API + +To enable the Backend API, register these plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------------|------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------------| +| PickingListsBackendResourcePlugin | Registers the `picking-lists` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListStartPickingBackendResourcePlugin | Registers the `picking-lists` and `start-picking` resources. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListItemsBackendResourcePlugin | Registers the `picking-list-items` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplication | +| PickingListItemsByPickingListsBackendResourceRelationshipPlugin | Adds the `picking-list-items` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| UsersByPickingListsBackendResourceRelationshipPlugin | Adds the `users` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsUsersBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| WarehousesByPickingListsBackendResourceRelationshipPlugin | Adds the `warehouses` resource as a relationship to the `picking-lists` resource. | | Spryker\Glue\PickingListsWarehousesBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new PickingListsBackendResourcePlugin(), + new PickingListStartPickingBackendResourcePlugin(), + new PickingListItemsBackendResourcePlugin() + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new PickingListItemsByPickingListsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new UsersByPickingListsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LISTS, + new WarehousesByPickingListsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +As a prerequisite, do the following: + +1. [Assign a warehouse to a warhouse user](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.html). +2. Place an order with a product that has the highest stock in the warehouse you've assigned the user to. +3. Obtain the access token of the warehouse user. +4. Use the warehouse user access token as the request header: `Authorization: Bearer {{YOUR_ACCESS_TOKEN}}`. + +Make sure that you can send the following requests: + +- Retrieve picklists: `GET https://glue-backend.mysprykershop.com/picking-lists`. + +- Retrieve picklists with picking list items included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=picking-list-items`. + +- Retrieve picklists with the users information included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=users`. + +- Retrieve picklists with warehouse information included: `GET https://glue-backend.mysprykershop.com/picking-lists?include=warehouses`. + +- Retrieve a picking list: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}`. + +- Start picking: `PATCH https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/start-picking` + +- Retrieve items from a picklist: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items`. + +- Retrieve an item from a picklist: `GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items/{% raw %}{{{% endraw %}picking-list-item-uuid{% raw %}{{{% endraw %}`. + +- Pick one or more items from a picklist: + +`PATCH https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}/picking-list-items/{% raw %}{{{% endraw %}picking-list-item-uuid{% raw %}{{{% endraw %}` + +```json +{ + "data": [ + { + "id": "{{picking-list-item-uuid1}}", + "type": "picking-list-items", + "attributes": { + "numberOfPicked": "{{number of picked}}", + "numberOfNotPicked": "{{number of not picked}}" + } + }, + { + "id": "{{picking-list-item-uuid2}}", + "type": "picking-list-items", + "attributes": { + "numberOfPicked": "{{number of picked}}", + "numberOfNotPicked": "{{number of not picked}}" + } + } + ] +} +``` + +Make sure push notification generation works: + +1. Place an order with a product from the warehouse with the `multi-shipment` picking strategy. +2. In the Back Office, go to **Sales**>**Orders**. +3. On the **Orders** page, next the order you've placed, click **View**. +4. To make the order ready for picking, manually change the state of the order. For instructions, see [Change the state of order items](/docs/pbc/all/order-management-system/latest/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html). + The order state should be **ready for picking**. + +5. Check the `spy_push_notification` database table to ensure that a push notification has been created. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-product-feature.md b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-product-feature.md new file mode 100644 index 00000000000..4d735c0d934 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-picking-product-feature.md @@ -0,0 +1,384 @@ + + + +This document describes how to install the Warehouse picking + [Product](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) feature. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-------------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Warehouse Picking | {{page.release_tag}} | [Install the Warehouse Picking feature](/docs/pbc/all/warehouse-management-system/latest/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + +## 1) Set up behavior + +Enable the following plugins. + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|---------------|--------------------------------------------------------------------------------------------------------| +| ConcreteProductsByPickingListItemsBackendResourceRelationshipPlugin | Adds the `concrete-products` resource as a relationship to the `picking-list-items` resource. | | Spryker\Glue\ProductsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | +| ConcreteProductImageSetsByProductsBackendResourceRelationshipPlugin | Adds the `concrete-product-image-sets` resource as a relationship to the `concrete-products` resource. | | Spryker\Glue\ProductImageSetsBackendApi\Plugin\GlueBackendApiApplicationGlueJsonApiConventionConnector | + + + + +**src/Pyz/Glue/GlueBackendApiApplicationGlueJsonApiConventionConnector/GlueBackendApiApplicationGlueJsonApiConventionConnectorDependencyProvider.php** + +```php +addRelationship( + PickingListsBackendApiConfig::RESOURCE_PICKING_LIST_ITEMS, + new ConcreteProductsByPickingListItemsBackendResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ProductsBackendApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ConcreteProductImageSetsByProductsBackendResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} + + +``` + +{% info_block warningBox "Verification" %} + +Make sure the `concrete-products` and `concrete-product-image-sets` resources are returned as relationships to `picking-list-items` resource. + +`GET https://glue-backend.mysprykershop.com/picking-lists/{% raw %}{{{% endraw %}picking-list-uuid{% raw %}}{{% endraw %}?include=picking-list-items,concrete-products,concrete-product-image-sets` +
    + Response sample +```json +{ + "data": [ + { + "id": "910a4d20-59a3-5c49-808e-aa7038a59313", + "type": "picking-lists", + "attributes": { + "status": "ready-for-picking", + "createdAt": "2023-10-27 13:00:32.000000", + "updatedAt": "2023-10-27 13:00:32.000000" + }, + "relationships": { + "picking-list-items": { + "data": [ + { + "id": "9ac9fd06-f491-506e-b302-0b166786d91c", + "type": "picking-list-items" + }, + { + "id": "54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5", + "type": "picking-list-items" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists/910a4d20-59a3-5c49-808e-aa7038a59313?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + } + ], + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-lists?include=picking-list-items,concrete-products,concrete-product-image-sets" + }, + "included": [ + { + "id": "091_25873091", + "type": "concrete-product-image-sets", + "attributes": { + "imageSets": [ + { + "name": "default", + "locale": "de_DE", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25873091-2214.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25873091-2214.jpg" + } + ] + }, + { + "name": "default", + "locale": "en_US", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25873091-2214.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25873091-2214.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-product-image-sets/091_25873091?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "091_25873091", + "type": "concrete-products", + "attributes": { + "sku": "091_25873091", + "isQuantitySplittable": true, + "isActive": true, + "localizedAttributes": [ + { + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "name": "Sony SmartWatch 3", + "description": "Gear S2 X Atelier Mendini In einer wunderbaren Partnerschaft bringt Alessandro Mendini seinen Geschmack, Humor und Farbsinn in die Gestaltung der Gear S2 ein. Das Ergebnis ist eine Reihe von Zifferblättern und Armbändern, die Ihren persönlichen Stil zum Ausdruck bringen. Die wesentlichen Smartphone-Funktionen sind mit einer einfachen Drehung an der Gear S2 verfügbar. Drehen Sie leicht an der Blende, um lange E-Mails zu durchblättern, eine Karte zu vergrössern oder bei der Musikwiedergabe ein Stück zu überspringen. Mit jeder Drehung wird das Leben noch interessanter und bunter. Mit der Gear S2 können Sie sich sehr leicht um Ihre Gesundheit kümmern. Verfolgen Sie Ihre täglichen Aktivitäten, Ihren Puls und Ihren Wasserkonsum verglichen mit Ihrem Koffeinkonsum. Bleiben Sie fit mit zeitgerechten motivierenden Botschaften. Bleiben Sie auf dem Laufenden und fit. Und wenn es Zeit'st, die Smartwatch wieder aufzuladen, stellen Sie sie einfach auf eine drahtlose Ladestation.", + "isSearchable": true, + "attributes": { + "color": "Weiß" + } + }, + { + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "isSearchable": true, + "attributes": { + "color": "White" + } + } + ], + "imageSets": [ + { + "name": "default", + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "images": [] + }, + { + "name": "default", + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "images": [] + } + ] + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "id": "091_25873091", + "type": "concrete-product-image-sets" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-products/091_25873091?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "9ac9fd06-f491-506e-b302-0b166786d91c", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 0, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "120b7a51-69e4-54b9-96a6-3b5eab0dfe7a", + "sku": "091_25873091", + "quantity": 1, + "name": "Sony SmartWatch 3", + "amountSalesUnit": null, + "amount": null + } + }, + "relationships": { + "concrete-products": { + "data": [ + { + "id": "091_25873091", + "type": "concrete-products" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/9ac9fd06-f491-506e-b302-0b166786d91c?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "066_23294028", + "type": "concrete-product-image-sets", + "attributes": { + "imageSets": [ + { + "name": "default", + "locale": "de_DE", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/gallery/23294028_3275.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + } + ] + }, + { + "name": "default", + "locale": "en_US", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/gallery/23294028_3275.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-product-image-sets/066_23294028?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "066_23294028", + "type": "concrete-products", + "attributes": { + "sku": "066_23294028", + "isQuantitySplittable": true, + "isActive": true, + "localizedAttributes": [ + { + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "name": "Samsung Galaxy S5 mini", + "description": "Ein Kunstwerk Das 5-Zoll-Display des Liquid Jade ist ein ansprechender Anblick. Die HD-Auflösung in Kombination mit der IPS1-Technologie verleiht Videos, Bildern und Web-Inhalten noch mehr Leben. Außerdem lässt das Zero Air Gap-Design alle Bilder gut aussehen – auch bei Sonnenlicht. Der Name sagt alles: ein Smartphone, das ist so schön ist wie Jade. Dank der 7,5 mm flachen und geschwungenen, ergonomischen Oberflächen liegt das Liquid Jade angenehm in der Hand. Die geschwungene Corning® Gorilla® Glass-Display unterstreicht die robuste und doch ansprechende Bauweise des Liquid Jade.", + "isSearchable": true, + "attributes": { + "color": "Blau" + } + }, + { + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices. The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "isSearchable": true, + "attributes": { + "color": "Blue" + } + } + ], + "imageSets": [ + { + "name": "default", + "locale": { + "locale_name": "de_DE", + "id_locale": 46, + "name": null, + "is_active": true + }, + "images": [] + }, + { + "name": "default", + "locale": { + "locale_name": "en_US", + "id_locale": 66, + "name": null, + "is_active": true + }, + "images": [] + } + ] + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "id": "066_23294028", + "type": "concrete-product-image-sets" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/concrete-products/066_23294028?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + }, + { + "id": "54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5", + "type": "picking-list-items", + "attributes": { + "quantity": 1, + "numberOfPicked": 0, + "numberOfNotPicked": 0, + "orderItem": { + "uuid": "14d86bb2-ea23-57ed-904c-eecc63ef10ac", + "sku": "066_23294028", + "quantity": 1, + "name": "Samsung Galaxy S5 mini", + "amountSalesUnit": null, + "amount": null + } + }, + "relationships": { + "concrete-products": { + "data": [ + { + "id": "066_23294028", + "type": "concrete-products" + } + ] + } + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/picking-list-items/54a264b8-dc2b-5a0e-9a78-ae7138e9d0b5?include=picking-list-items,concrete-products,concrete-product-image-sets" + } + } + ] +} +``` +
    + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-user-management-feature.md b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-user-management-feature.md new file mode 100644 index 00000000000..a77c0a34a76 --- /dev/null +++ b/_includes/pbc/all/install-features/202602.0/unified-commerce/install-the-warehouse-user-management-feature.md @@ -0,0 +1,781 @@ + +This document describes how to install the Warehouse User Management feature. + + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Inventory Management | {{page.release_tag}} | [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | + +## 1) Install the required modules + +```bash +composer require spryker-feature/warehouse-user-management: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------|--------------------------------------------| +| OauthWarehouse | vendor/spryker/oauth-warehouse | +| WarehouseOauthBackendApi | vendor/spryker/warehouse-oauth-backend-api | +| WarehouseUser | vendor/spryker/warehouse-user | +| WarehouseUserGui | vendor/spryker/warehouse-user-gui | +| WarehouseUsersBackendApi | vendor/spryker/warehouse-user-backend-api | + +{% endinfo_block %} + +## 2) Set up database schema and transfer objects + +Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|-------------------------------|--------|---------| +| spy_warehouse_user_assignment | table | created | +| spy_stock.uuid | column | created | +| spy_user.is_warehouse_user | column | created | +| spy_user.uuid | column | created | + +Make sure the following changes have been triggered in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-------------------------------------------------|----------|------------|---------------------------------------------------------------------------------------| +| WarehouseUserAssignment | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentTransfer | +| WarehouseUserAssignmentCriteria | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentCriteriaTransfer | +| WarehouseUserAssignmentConditions | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentConditionsTransfer | +| WarehouseUserAssignmentCollection | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentCollectionTransfer | +| WarehouseUserAssignmentCollectionRequest | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentCollectionRequestTransfer | +| WarehouseUserAssignmentCollectionResponse | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentCollectionResponseTransfer | +| WarehouseUserAssignmentCollectionDeleteCriteria | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentCollectionDeleteCriteriaTransfer | +| WarehouseIdentifier | class | created | src/Generated/Shared/Transfer/WarehouseIdentifierTransfer | +| GlueRequestWarehouse | class | created | src/Generated/Shared/Transfer/GlueRequestWarehouseTransfer | +| WarehouseUserAssignmentsBackendApiAttributes | class | created | src/Generated/Shared/Transfer/WarehouseUserAssignmentsBackendApiAttributesTransfer | +| WarehousesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/WarehousesBackendApiAttributesTransfer | +| UserCollection | class | created | src/Generated/Shared/Transfer/UserCollectionTransfer | +| UserConditions | class | created | src/Generated/Shared/Transfer/UserConditionsTransfer | +| OauthScope | class | created | src/Generated/Shared/Transfer/OauthScopeTransfer | +| UserIdentifier | class | created | src/Generated/Shared/Transfer/UserIdentifierTransfer | +| AuthorizationRequest | class | created | src/Generated/Shared/Transfer/AuthorizationRequestTransfer | +| GlueRequestUser | class | created | src/Generated/Shared/Transfer/GlueRequestUserTransfer | +| OauthScope | class | created | src/Generated/Shared/Transfer/OauthScopeTransfer | +| User.uuid | property | created | src/Generated/Shared/Transfer/UserTransfer | +| User.isWarehouseUser | property | created | src/Generated/Shared/Transfer/UserTransfer | +| UserCriteria.userConditions | property | created | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| StockCriteriaFilter.uuids | property | created | src/Generated/Shared/Transfer/StockCriteriaFilterTransfer | +| StockCriteriaFilter.stockIds | property | created | src/Generated/Shared/Transfer/StockCriteriaFilterTransfer | +| Collection | class | deprecated | src/Generated/Shared/Transfer/CollectionTransfer | +| UserCriteria.idUser | property | deprecated | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| UserCriteria.email | property | deprecated | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| UserCriteria.userReference | property | deprecated | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| UserCriteria.withExpanders | property | deprecated | src/Generated/Shared/Transfer/UserCriteriaTransfer | +| StockCriteriaFilter.idStock | property | deprecated | src/Generated/Shared/Transfer/StockCriteriaFilterTransfer | + +{% endinfo_block %} + +## 3) Set up configuration + +1. Optional: To make `warehouse-user-assignments` and `warehouse-tokens` resources protected, adjust the protected paths configuration: + +**src/Pyz/Shared/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorConfig.php** + +```php + + */ + public function getProtectedPaths(): array + { + return [ + '/\/warehouse-user-assignments(?:\/[^\/]+)?\/?$/' => [ + 'isRegularExpression' => true, + ], + '/warehouse-tokens' => [ + 'isRegularExpression' => false, + 'methods' => [ + 'post', + ], + ], + ]; + } +} +``` + + +2. Optional: To give warehouse users access to Backend Glue API endpoints, do the following: + + 1. [Integrate Glue authentication](/docs/scos/dev/migration-concepts/migrate-to-decoupled-glue-infrastructure/decoupled-glue-infrastructure-integrate-the-authentication.html). + + 2. Specify the list of endpoints which warehouse users have access to: + + +
    + src/Pyz/Zed/OauthWarehouseUser/OauthWarehouseUserConfig.php + +```php + [ + * 'isRegularExpression' => false, + * ], + * '/\/example\/.+/' => [ + * 'isRegularExpression' => true, + * 'methods' => [ + * 'patch', + * 'delete', + * ], + * ], + * ] + * + * @api + * + * @return array + */ + public function getAllowedForWarehouseUserPaths(): array + { + return [ + '/\/warehouse-user-assignments(?:\/[^\/]+)?\/?$/' => [ + 'isRegularExpression' => true, + 'methods' => [ + 'get', + 'getCollection', + 'patch', + ], + ], + '/\/picking-lists.*/' => [ + 'isRegularExpression' => true, + 'methods' => [ + 'patch', + ], + ], + '/push-notification-subscriptions' => [ + 'isRegularExpression' => false, + ], + '/warehouse-tokens' => [ + 'isRegularExpression' => false, + 'methods' => [ + 'post', + ], + ], + ]; + } +} +``` + +
    + +3. Optional: To give any type of users access to the backend API endpoints that are protected by the `WarehouseTokenAuthorizationStrategy` strategy, set the following module configuration: + +**src/Pyz/Zed/OauthWarehouse/OauthWarehouseConfig.php** + +```php + + */ + public function getAllowedUserScopes(): array + { + return [ + static::SCOPE_BACK_OFFICE_USER, + static::SCOPE_WAREHOUSE_USER, + ]; + } +} +``` + +## 4) Add translations + +1. Append glossary according to your configuration: + +```csv +warehouse_user_assignment.validation.user_not_found,User not found.,en_US +warehouse_user_assignment.validation.user_not_found,Benutzer nicht gefunden.,de_DE +warehouse_user_assignment.validation.warehouse_not_found,Warehouse not found.,en_US +warehouse_user_assignment.validation.warehouse_not_found,Lager nicht gefunden.,de_DE +warehouse_user_assignment.validation.warehouse_user_assignment_not_found,Warehouse user assignment not found.,en_US +warehouse_user_assignment.validation.warehouse_user_assignment_not_found,Lagerbenutzerzuweisung nicht gefunden.,de_DE +warehouse_user_assignment.validation.too_many_active_warehouse_assignments,User has too many active warehouse assignments.,en_US +warehouse_user_assignment.validation.too_many_active_warehouse_assignments,Dem Benutzer sind zu viele aktive Läger zugewiesen.,de_DE +warehouse_user_assignment.validation.warehouse_user_assignment_already_exists,Warehouse user assignment already exists.,en_US +warehouse_user_assignment.validation.warehouse_user_assignment_already_exists,Lagerbenutzerzuweisung existiert bereits.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +3. To add Zed translations, generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +- Make sure the configured data has been added to the `spy_glossary_key` and `spy_glossary_translation` tables. +- Verify that the translation cache has been built: + 1. In the Back Office, go to **Users > Users**. + 2. For a user of your choice, click **Assign Warehouses**. + Make sure that the **Warehouse User Assignment** table is translatable. + +- Verify that you can switch the language in the Back Office: + 1. Go to **Users > Users**. + 2. For a user of your choice, click **Edit**. + The **Edit User: `USER_NAME`** page opens. + 3. For **INTERFACE LANGUAGE**, select another language. + 4. Click **Update**. + Make sure this opens the list of users with a success message displayed. + +{% endinfo_block %} + +## 5) Set up behavior + +1. Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------| +| WarehouseUserLoginRestrictionPlugin | Restricts access to the Back office for warehouse users. | | Spryker\Zed\WarehouseUser\Communication\Plugin\SecurityGui | +| WarehouseUserAssignmentUserTableActionExpanderPlugin | Expands the **User** table with the **Assign Warehouses** button. | | Spryker\Zed\WarehouseUserGui\Communication\Plugin\User | +| WarehouseUserAssignmentUserFormExpanderPlugin | Expands the User form with the **is_warehouse_user** checkbox. | | Spryker\Zed\WarehouseUserGui\Communication\Plugin\User | +| WarehouseTokenAuthorizationStrategyPlugin | Checks if the request identity is a valid user and warehouse. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Authorization | +| OauthWarehouseInstallerPlugin | Installs the warehouse OAuth scope data. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Installer | +| WarehouseOauthUserProviderPlugin | If `OauthUserTransfer.idWarehouse` is provided, retrieves the warehouse user. If the warehouse user exists, expands `OauthUserTransfer`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | +| WarehouseOauthScopeProviderPlugin | Checks if the grant type is `\Spryker\Zed\OauthWarehouse\OauthWarehouseConfig::WAREHOUSE_GRANT_TYPE`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | +| WarehouseOauthRequestGrantTypeConfigurationProviderPlugin | Checks if the requested OAuth grant type equals to `\Spryker\Zed\OauthWarehouse\OauthWarehouseConfig::WAREHOUSE_GRANT_TYPE` and if the requested application context equals to `GlueBackendApiApplication`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | + +**src/Pyz/Zed/SecurityGui/SecurityGuiDependencyProvider.php** + +```php + + */ + protected function getUserLoginRestrictionPlugins(): array + { + return [ + new WarehouseUserLoginRestrictionPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php + + */ + protected function getUserTableActionExpanderPlugins(): array + { + return [ + new WarehouseUserAssignmentUserTableActionExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserFormExpanderPluginInterface> + */ + protected function getUserFormExpanderPlugins(): array + { + return [ + new WarehouseUserAssignmentUserFormExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Verify the plugins are set up correctly: + +1. In the Back Office, go to **Users > Users**. +2. Initiate creating a user or editing an existing user. +3. Select the **THIS USER IS A WAREHOUSE USER** checkbox. +4. Create or update the user. + On the **Users** page, make sure that the **Assign Warehouses** button is displayed for the user. +5. Log out from the Back Office. +6. Try to log into the Back Office with the warehouse user's login details. + Make sure you can't log in. + +{% endinfo_block %} + +2. Enable the Backend API authorization for warehouse users by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------------------------------------| +| WarehouseTokenAuthorizationStrategyPlugin | Checks if the request identity is a valid user and warehouse. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Authorization | +| OauthWarehouseInstallerPlugin | Installs the warehouse OAuth scope data. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Installer | +| WarehouseOauthUserProviderPlugin | If `OauthUserTransfer.idWarehouse` is provided, retrieves the warehouse user. If the warehouse user exists, expands `OauthUserTransfer`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | +| WarehouseOauthScopeProviderPlugin | Checks if the grant type is `\Spryker\Zed\OauthWarehouse\OauthWarehouseConfig::WAREHOUSE_GRANT_TYPE`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | +| WarehouseOauthRequestGrantTypeConfigurationProviderPlugin | Checks if the requested OAuth grant type equals to `\Spryker\Zed\OauthWarehouse\OauthWarehouseConfig::WAREHOUSE_GRANT_TYPE` and if the requested application context equals to `GlueBackendApiApplication`. | | Spryker\Zed\OauthWarehouse\Communication\Plugin\Oauth | +| WarehouseTokensBackendResourcePlugin | Registers the `warehouse-tokens` resource. | | Spryker\Glue\WarehouseOauthBackendApi\Plugin\GlueBackendApiApplication | +| WarehouseRequestBuilderPlugin | If the warehouse credentials are valid, sets `GlueRequestTransfer.requestWarehouse`. | | Spryker\Glue\WarehouseOauthBackendApi\Plugin\GlueBackendApiApplication | +| WarehouseRequestValidatorPlugin | if a request has the Authorization header, validates if `GlueRequestTransfer.requestWarehouse` is set. | | Spryker\Glue\WarehouseOauthBackendApi\Plugin\GlueBackendApiApplication | +| WarehouseAuthorizationRequestExpanderPlugin | Expands `AuthorizationRequestTransfer.entity` with `GlueRequestWarehouseTransfer`. | | Spryker\Glue\WarehouseOauthBackendApi\Plugin\GlueBackendApiApplicationAuthorizationConnector | +| WarehouseUserRequestValidationPreCheckerPlugin | Checks if `GlueRequestTransfer` has `GlueRequestWarehouseTransfer`. If true, sets `GlueRequestValidationTransfer` as valid. | | Spryker\Glue\WarehouseOauthBackendApi\Plugin\OauthBackendApi | + +
    +src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php + +```php + + */ + protected function getRequestBuilderPlugins(): array + { + return [ + new UserRequestBuilderPlugin(), + new WarehouseRequestBuilderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\RequestValidatorPluginInterface> + */ + protected function getRequestValidatorPlugins(): array + { + return [ + new WarehouseRequestValidatorPlugin(), + ]; + } + + /** + * @return list<\Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceInterface> + */ + protected function getResourcePlugins(): array + { + return [ + new WarehouseTokensBackendResourcePlugin(), + ]; + } +} +``` + +
    + +**src/Pyz/Glue/GlueBackendApiApplicationAuthorizationConnector/GlueBackendApiApplicationAuthorizationConnectorDependencyProvider.php** + +```php + + */ + protected function getAuthorizationRequestExpanderPlugins(): array + { + return [ + new WarehouseAuthorizationRequestExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/OauthBackendApi/OauthBackendApiDependencyProvider.php** + +```php + + */ + protected function getUserRequestValidationPreCheckerPlugins(): array + { + return [ + new WarehouseUserRequestValidationPreCheckerPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Authorization/AuthorizationDependencyProvider.php** + +```php + + */ + protected function getAuthorizationStrategyPlugins(): array + { + return [ + new WarehouseTokenAuthorizationStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Installer/InstallerDependencyProvider.php** + +```php + + */ + public function getInstallerPlugins(): array + { + return [ + new OauthWarehouseInstallerPlugin(), + ]; + } +} +``` + +
    +src/Pyz/Zed/Oauth/OauthDependencyProvider.php + +```php + + */ + protected function getUserProviderPlugins(): array + { + return [ + new WarehouseOauthUserProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthScopeProviderPluginInterface> + */ + protected function getScopeProviderPlugins(): array + { + return [ + new WarehouseOauthScopeProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthExtension\Dependency\Plugin\OauthRequestGrantTypeConfigurationProviderPluginInterface> + */ + protected function getOauthRequestGrantTypeConfigurationProviderPlugins(): array + { + return [ + new WarehouseOauthRequestGrantTypeConfigurationProviderPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +1. In the Back Office, go to **Users > Users**. +2. On the **Users** page, for the user of your choice, click **Edit**. +3. On the **Edit User: `{USER}`** page that opens, select **THIS USER IS A WAREHOUSE USER**. +4. Click **Update**. +5. On the **Users** page, for the user you've edited, click **Assign Warehouses**. + This opens the **Assign Warehouse to User: `{USER_NAME}`** page. +6. In the **Select warehouses to assign** tab, for a warehouse of your choice, select **ASSIGN** and click **Save**. +7. Authenticate as the warehouse user using Glue API: + +```json +POST /access-tokens HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/vnd.api+json +Content-Length: 167 +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": "{USERNAME}", + "password": "{PASSWORD}" + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/token" + } + } +} +``` + +9. Generate a warehouse token with the generated token from the previous step: + +```json +POST /warehouse-tokens HTTP/1.1 +Host: glue-backend.mysprykershop.com +Content-Type: application/vnd.api+json +Content-Length: 165 +{ + "data": { + "type": "warehouse-tokens", + "links": { + "self": "https://glue-backend.mysprykershop.com/warehouse-tokens" + } + } +} +``` + +{% endinfo_block %} + +3. Enable the Backend API resource by registering the plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|-------------------------------------------------------|---------------|------------------------------------------------------------------------| +| WarehouseUserAssignmentsBackendResourcePlugin | Registers the `warehouse-user-assignments` resource. | | Spryker\Glue\WarehouseUsersBackendApi\Plugin\GlueBackendApiApplication | + +
    +src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php + +```php + + */ + protected function getResourcePlugins(): array + { + return [ + new WarehouseUserAssignmentsBackendResourcePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure you can send the following requests: + +- `GET https://glue-backend.mysprykershop.com/warehouse-user-assignments` +- `GET https://glue-backend.mysprykershop.com/warehouse-user-assignments/{% raw %}{{{% endraw %}warehouse-user-assignments-uuid{% raw %}}{{% endraw %}` +- `POST https://glue-backend.mysprykershop.com/warehouse-user-assignments` + +```json +{ + "data": { + "type": "warehouse-user-assignments", + "attributes": { + "userUuid": {% raw %}{{{% endraw %}user-uuid{% raw %}}}{% endraw %}, + "warehouse": { + "uuid": {% raw %}{{{% endraw %}warehouse-uuid{% raw %}}}{% endraw %}, + }, + "isActive": true + } + } +} +``` + +- `PATCH https://glue-backend.mysprykershop.com/warehouse-user-assignments/{% raw %}{{{% endraw %}warehouse-user-assignments-uuid{% raw %}}{{% endraw %}` + +```json +{ + "data" : { + "type" : "warehouse-user-assignments", + "attributes" : { + "isActive": true + } + } +} +``` + +- `DELETE https://glue-backend.mysprykershop.com/warehouse-user-assignments/{% raw %}{{{% endraw %}warehouse-user-assignments-uuid{% raw %}}{{% endraw %}`. + +{% endinfo_block %} + + +### Optional: Enable Backend API authentication + +1. [Integrate Glue authentication](/docs/scos/dev/migration-concepts/migrate-to-decoupled-glue-infrastructure/decoupled-glue-infrastructure-integrate-the-authentication.html). + +2. Registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------------------------------------------------|---------------------------------------------------|---------------|------------------------------------------------------------------------| +| WarehouseUserTypeOauthScopeAuthorizationCheckerPlugin | Authorizes a user by warehouse user scopes. | | Spryker\Zed\OauthWarehouseUser\Communication\Plugin\OauthUserConnector | +| WarehouseUserTypeOauthScopeProviderPlugin | Provides the OAuth scopes related to warehouse users. | | Spryker\Zed\OauthWarehouseUser\Communication\Plugin\OauthUserConnector | + +**src/Pyz/Zed/OauthUserConnector/OauthUserConnectorDependencyProvider.php** + +```php + + */ + protected function getUserTypeOauthScopeProviderPlugins(): array + { + return [ + new WarehouseUserTypeOauthScopeProviderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\OauthUserConnectorExtension\Dependency\Plugin\UserTypeOauthScopeAuthorizationCheckerPluginInterface> + */ + protected function getUserTypeOauthScopeAuthorizationCheckerPlugins(): array + { + return [ + new WarehouseUserTypeOauthScopeAuthorizationCheckerPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +To verify the plugins are set up correctly, authenticate as a warehouse user: + +`POST https://glue-backend.mysprykershop.com/token` + +```json +{ + "data": { + "type": "token", + "attributes": { + "grant_type": "password", + "username": {% raw %}{{{% endraw %}username{% raw %}}}{% endraw %}, + "password": {% raw %}{{{% endraw %}password{% raw %}}}{% endraw %}, + } + } +} +``` + +Make sure the output contains the 201 response with a valid token. Make sure that the warehouse user can assess only the endpoints specified in **src/Pyz/Zed/OauthWarehouseUser/OauthWarehouseUserConfig.php**. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202410.0/install-the-dynamic-multistore-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/install-the-dynamic-multistore-glue-api.md index 6f0ae0440ff..9aa2d5a66d4 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/install-the-dynamic-multistore-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/install-the-dynamic-multistore-glue-api.md @@ -6,7 +6,7 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ## Set up behavior diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-glue-api.md new file mode 100644 index 00000000000..5d7046d980f --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-glue-api.md @@ -0,0 +1,121 @@ +This document describes how to integrate the Marketplace Inventory Management Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-availabilities-rest-api:"^0.4.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferAvailabilitiesRestApi | vendor/spryker/product-offer-availabilities-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestProductOfferAvailabilitiesAttributes | object | Created | src/Generated/Shared/Transfer/RestProductOfferAvailabilitiesAttributesTransfer | + +{% endinfo_block %} + +### 3) Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferAvailabilitiesResourceRoutePlugin | Registers the `product-offer-availabilities` resource. | | Spryker\Glue\ProductOfferAvailabilitiesRestApi\Plugin\GlueApplication | +| ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin | Adds the product-offer-availabilities resource as a relationship of the product-offers resource. | | Spryker\Glue\ProductOfferAvailabilitiesRestApi\Plugin\GlueApplication | + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductOfferAvailabilitiesResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + MerchantProductOffersRestApiConfig::RESOURCE_PRODUCT_OFFERS, + new ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferAvailabilitiesResourceRoutePlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{productOfferReference}}{% endraw %}/product-offer-availabilities`. + +Make sure that `ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin` is set up by sending the request `GET https://glue.mysprykershop.com{% raw %}{{url}}{% endraw %}/product-offers/{% raw %}{{productOfferReference}}{% endraw %}?include=product-offer-availabilities`. The response should include the `product-offer-availabilities` resource along with `product-offers`. + +{% endinfo_block %} + + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|---|---|---| +| Marketplace Inventory Management + Wishlist Glue API | | [Install the Marketplace Inventory Management + Wishlist Glue API](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-glue-api/install-the-marketplace-inventory-management-wishlist-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md index aa6c2cceb7f..011bd19c7a4 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md @@ -11,8 +11,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Marketplace Wishlist | {{page.version}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | -| Marketplace Inventory Management API | {{page.version}} | [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.html) | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Inventory Management API | {{page.release_tag}} | [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-merchant-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-merchant-glue-api.md index a13dee20011..63b463ce3ae 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-merchant-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-merchant-glue-api.md @@ -11,8 +11,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-cart-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-cart-glue-api.md index 4e9e1e9df57..d718ecad277 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-cart-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-cart-glue-api.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | ----------- | ------- | ------------------| -| Cart API | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Marketplace Product API | {{page.version}} | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Marketplace Product API | {{page.release_tag}} | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-glue-api.md index f1bde062705..b999f38dd59 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-glue-api.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Spryker Core | {{page.version}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | -| Marketplace Product | {{page.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| ### 1) Install the required modules @@ -115,4 +115,4 @@ Make sure that when you do a `GET` request to retrieve abstract products that be | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | -------------- | -------------------------------- | ----------------- | -| Marketplace Product + Cart API | | [Install the Marketplace Product + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.html) | +| Marketplace Product + Cart API | | [Install the Marketplace Product + Cart Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md index 93252cd389d..9ed21e426d5 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md @@ -10,9 +10,9 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------------- | ------- | ------------------| -| Cart API | {{page.version}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | -| Marketplace Product Offer API | {{page.version}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | -| Marketplace Inventory Management | {{page.version}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Marketplace Product Offer API | {{page.release_tag}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-glue-api.md index 7b0974ba2a5..51c694d40f3 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-glue-api.md @@ -10,7 +10,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product Offer | {{page.version}} |[Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Marketplace Product Offer | {{page.release_tag}} |[Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | ### 1) Install the required modules @@ -132,7 +132,7 @@ Make sure that `MerchantByMerchantReferenceResourceRelationshipPlugin` is set up | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | -------------- | -------------------------------- | ----------------- | -| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | -| Marketplace Product Offer + Volume Prices API | | [Install the Marketplace Product Offer + Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.html) | -| Marketplace Product Offer + Wishlist API | | [Install the Marketplace Product Offer + Wishlist Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.html) | -| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | +| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | +| Marketplace Product Offer + Volume Prices API | | [Install the Marketplace Product Offer + Volume Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.html) | +| Marketplace Product Offer + Wishlist API | | [Install the Marketplace Product Offer + Wishlist Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.html) | +| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md index 805673d95dc..3548c175157 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md @@ -10,7 +10,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-|-| -| Marketplace Product Offer Prices | {{page.version}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Product Offer Prices | {{page.release_tag}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | ### 1) Install the required modules @@ -122,4 +122,4 @@ Integrate the following related features: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | |---|---|---| -| Marketplace Product Offer Prices + Wishlist Glue API | ✓ | [Install the Marketplace Product Offer Prices + Wishlist Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.html) | +| Marketplace Product Offer Prices + Wishlist Glue API | ✓ | [Install the Marketplace Product Offer Prices + Wishlist Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md new file mode 100644 index 00000000000..793176308ff --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md @@ -0,0 +1,78 @@ +This document describes how to integrate the Marketplace Product Offer Prices + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer Prices API | {{page.release_tag}} |[Install the Product Offer Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductOfferWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product offer prices. | | Spryker\Zed\PriceProductOffer\Communication\Plugin\Wishlist | +| PriceProductOfferVolumeExtractorPlugin | Extracts volume prices from the price product offer collection. | | Spryker\Zed\PriceProductOfferVolume\Communication\Plugin\PriceProductOffer | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductOfferWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PriceProductOffer/PriceProductOfferDependencyProvider.php** + +```php + + */ + protected function getPriceProductOfferExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductOfferWishlistItemExpanderPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +Make sure that `PriceProductOfferVolumeExtractorPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items,selected-product-offers,product-offer-prices`. You should get the product offer volume prices within the `prices` in the response. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md index 7dcfd539e94..e1a12e98c57 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-|-| - | -| Marketplace Product Offer Prices | {{page.version}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | -| Marketplace Product Offer Volume Prices | {{page.version}} | Install the Marketplace Product Offer Volume Prices feature | +| Marketplace Product Offer Prices | {{page.release_tag}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Product Offer Volume Prices | {{page.release_tag}} | Install the Marketplace Product Offer Volume Prices feature | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md new file mode 100644 index 00000000000..35c8ad0722c --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md @@ -0,0 +1,187 @@ +This document describes how to integrate the Marketplace Product Offer + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer API | {{page.release_tag}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-wishlist-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOfferWishlistRestApi | spryker/merchant-product-offer-wishlist-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| WishlistItemRequest.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistItemRequestTransfer | +| RestWishlistItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | +| RestWishlistItemsAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| MerchantProductOfferAddItemPreCheckPlugin | Returns `WishlistPreAddItemCheckResponse.isSuccess=false` if no product offers found by the `WishlistItem.productOfferReference` transfer property. | | Spryker\Zed\MerchantProductOfferWishlist\Communication\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesMapperPlugin | Populates `RestWishlistItemsAttributes.id` with the following pattern: `{WishlistItem.sku}_{WishlistItemTransfer.productOfferReference}`. | | Spryker\Glue\MerchantProductOfferWishlistRestApi\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin | Checks if requested the wishlist item exists in the wishlist item collection. | | Spryker\Zed\MerchantProductOfferWishlistRestApi\Communication\Plugin | +| EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin | Checks if the requested wishlist item exists in the wishlist item collection. | | Spryker\Zed\MerchantProductOfferWishlistRestApi\Communication\Plugin | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resources as relationship by merchant references in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + WishlistsRestApiConfig::RESOURCE_WISHLIST_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +
    src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new MerchantProductOfferAddItemPreCheckPlugin(), + ]; + } + +} +``` + +
    + +
    src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +
    + +
    src/Pyz/Zed/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesDeleteStrategyPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin(), + new EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that `ProductOfferRestWishlistItemsAttributesMapperPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get `attributes` in the response. + +Make sure that `MerchantProductOfferAddItemPreCheckPlugin` is set up by sending the request `POST https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items`. You should have the wishlist item added only when the product has the specified offer reference. + +Make sure that `ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin` and `EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin` are set up by sending the request `DELETE https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items/{% raw %}{{wishlistItemId}}{% endraw %}`. You should get the product offer wishlist item deleted. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-return-management-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-return-management-glue-api.md index da690f775d0..df51d4e36d7 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-return-management-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-return-management-glue-api.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------- | ------ | --------| -| Marketplace Merchant | {{page.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | -| Marketplace Return Management | {{page.version}} | [Install the Marketplace Return Management feature](/docs/pbc/all/return-management/{{page.version}}/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Return Management | {{page.release_tag}} | [Install the Marketplace Return Management feature](/docs/pbc/all/return-management/latest/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.html) | ### 1) Install the required modules using Сomposer diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md index b1b1eddc6d2..41ef94c80ac 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md @@ -10,8 +10,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | - | - | - | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Shopping Lists | {{page.version}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Shopping Lists | {{page.release_tag}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | ### 1) Install the required modules @@ -252,4 +252,4 @@ Response sample: | FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | | - | - | - | -| Marketplace Shopping Lists | {{page.version}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | +| Marketplace Shopping Lists | {{page.release_tag}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-category-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-category-glue-api.md index edf648aa56e..5da96996ca0 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-category-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-category-glue-api.md @@ -12,8 +12,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | ---------------- | ------ | ------------------ | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Marketplace Merchant Category | {{page.version}} | [Install the Marketplace Merchant Category feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant Category | {{page.release_tag}} | [Install the Marketplace Merchant Category feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-opening-hours-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-opening-hours-glue-api.md index bc7889472c6..85d30784118 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-opening-hours-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-merchant-opening-hours-glue-api.md @@ -11,7 +11,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | ----------- | ------ | --------------| -| Merchant Opening Hours | {{page.version}} | [Install the Merchant Opening Hours feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.html) | +| Merchant Opening Hours | {{page.release_tag}} | [Install the Merchant Opening Hours feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.html) | ### 1) Install the required modules diff --git a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md index 52f075ee6ae..8da18314dd7 100644 --- a/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md +++ b/_includes/pbc/all/install-glue-api/202410.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md @@ -11,8 +11,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --------------- | ------- | ---------- | -| Marketplace Wishlist | {{page.version}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | -| Product Prices API | {{page.version}} |[Install the Product Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Product Prices API | {{page.release_tag}} |[Install the Product Prices Glue API](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) | ### 1) Set up behavior diff --git a/_includes/pbc/all/install-glue-api/202602.0/install-the-dynamic-multistore-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/install-the-dynamic-multistore-glue-api.md new file mode 100644 index 00000000000..9aa2d5a66d4 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/install-the-dynamic-multistore-glue-api.md @@ -0,0 +1,176 @@ +This document describes how to install the Dynamic Multistore Glue API. + +## Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core | {{page.release_tag}} | + + +## Set up behavior + + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- |------------------------------------------------------------------------------------------------------------------------------------------------| --- |-----------------------------------------------------------| +| StoreHttpHeaderApplicationPlugin | Retrieves the name of the store from the `Request` parameter or the `Request` header used for the Glue Application. If both are defined, the `Request` parameter has more priority. | | Spryker\Glue\StoresRestApi\Plugin\Application | +| StoreApplicationPlugin | Retrieves the name of the store from the `Request` parameter or the `Request` header used for the Storefront API. If both are defined, the `Request` parameter has more priority. | | Spryker\Glue\StoresApi\Plugin\GlueStorefrontApiApplication | +| StoreApplicationPlugin | Retrieves the name of the store from the `Request` parameter or the `Request` header used for the Storefront API. If both are defined, the `Request` parameter has more priority. | | Spryker\Glue\StoresBackendApi\Plugin\GlueBackendApiApplication | +| LocaleApplicationPlugin | Retrieves locale name from the `Request` header. | | Spryker\Glue\ProductOptionsRestApi\Plugin\GlueApplication | + +{% info_block warningBox "Warning" %} + +`StoreHttpHeaderApplicationPlugin` is deprecated. Use `\Spryker\Glue\StoresApi\Plugin\GlueStorefrontApiApplication\StoreApplicationPlugin` instead. + +{% endinfo_block %} + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + + +```php + + */ + protected function getControllerBeforeActionPlugins(): array + { + return [ + new StoreHttpHeaderApplicationPlugin(), + new LocaleApplicationPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send one of the following requests: + +| ENDPOINT | HEADER | +|-|-| +| `https://glue.mysprykershop.com` | [{"key":"Accept-Language","value":"de_DE"},{"key":"Store","value":"DE"}] | +| `https://glue.mysprykershop.com?_store=DE` | [{"key":"Accept-Language","value":"de_DE"}] | + +Make sure the response contains the following: +- The `content-language` header set to `de_DE`. +- Proper locale and stores header. + +{% endinfo_block %} + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new StoreApplicationPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Send one of the following requests: + +| ENDPOINT | HEADER | +|-|-| +| `https://glue-backend.mysprykershop.com` | [{"key":"Accept-Language","value":"de_DE"},{"key":"Store","value":"DE"}] | +| `https://glue.mysprykershop.com?_store=DE` | [{"key":"Accept-Language","value":"de_DE"}] | + +Make sure you get a response containing the `content-language` header set to `de_DE`. + +Example for testing with the `Store` header: + +```bash +curl --location --request POST 'http://glue-backend.eu.mysprykershop.com/token' \ +--header 'Store: DE' \ +--header 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'grantType=password' \ +--data-urlencode 'username={USERNAME}' \ +--data-urlencode 'password={PASSWORD}' + +``` + +Example for testing with the `store` request parameter: + +```bash +curl --location --request POST 'http://glue-backend.eu.mysprykershop.com/token?_store=DE' \ +--header 'Content-Type: application/x-www-form-urlencoded' \ +--data-urlencode 'grantType=password' \ +--data-urlencode 'username={USERNAME}' \ +--data-urlencode 'password={PASSWORD}' + +``` + +{% endinfo_block %} + + +**src/Pyz/Glue/GlueStorefrontApiApplication/GlueStorefrontApiApplicationDependencyProvider.php** + +```php + + */ + protected function getApplicationPlugins(): array + { + return [ + new HttpApplicationPlugin(), + new StoreApplicationPlugin(), + new LocaleApplicationPlugin(), + ]; +} + +``` + +{% info_block warningBox "Verification" %} + +Send one of the following requests: + +| ENDPOINT | HEADER | +|-|-| +| `https://glue-storefront.mysprykershop.com` | [{"key":"Accept-Language","value":"de_DE"},{"key":"Store","value":"DE"}] | +| `https://glue.mysprykershop.com?_store=DE` | [{"key":"Accept-Language","value":"de_DE"}] | + +Make sure you get a response containing the `content-language` header set to `de_DE` + + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-glue-api.md new file mode 100644 index 00000000000..5d7046d980f --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-glue-api.md @@ -0,0 +1,121 @@ +This document describes how to integrate the Marketplace Inventory Management Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-availabilities-rest-api:"^0.4.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferAvailabilitiesRestApi | vendor/spryker/product-offer-availabilities-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestProductOfferAvailabilitiesAttributes | object | Created | src/Generated/Shared/Transfer/RestProductOfferAvailabilitiesAttributesTransfer | + +{% endinfo_block %} + +### 3) Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferAvailabilitiesResourceRoutePlugin | Registers the `product-offer-availabilities` resource. | | Spryker\Glue\ProductOfferAvailabilitiesRestApi\Plugin\GlueApplication | +| ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin | Adds the product-offer-availabilities resource as a relationship of the product-offers resource. | | Spryker\Glue\ProductOfferAvailabilitiesRestApi\Plugin\GlueApplication | + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductOfferAvailabilitiesResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + MerchantProductOffersRestApiConfig::RESOURCE_PRODUCT_OFFERS, + new ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferAvailabilitiesResourceRoutePlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{productOfferReference}}{% endraw %}/product-offer-availabilities`. + +Make sure that `ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin` is set up by sending the request `GET https://glue.mysprykershop.com{% raw %}{{url}}{% endraw %}/product-offers/{% raw %}{{productOfferReference}}{% endraw %}?include=product-offer-availabilities`. The response should include the `product-offer-availabilities` resource along with `product-offers`. + +{% endinfo_block %} + + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|---|---|---| +| Marketplace Inventory Management + Wishlist Glue API | | [Install the Marketplace Inventory Management + Wishlist Glue API](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-glue-api/install-the-marketplace-inventory-management-wishlist-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md new file mode 100644 index 00000000000..011bd19c7a4 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md @@ -0,0 +1,82 @@ +This document describes how to integrate the Marketplace Inventory Management + Wishlist Glue API feature into a Spryker project. + + +## Install feature core + +Follow the steps below to install the Marketplace Inventory Management + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Inventory Management API | {{page.release_tag}} | [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.html) | + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| AvailabilityWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product concrete availability. | | Spryker\Zed\Availability\Communication\Plugin\Wishlist | +| SellableWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with sellable status. | | Spryker\Zed\Availability\Communication\Plugin\Wishlist | +| ProductAvailabilityRestWishlistItemsAttributesMapperPlugin | Maps availability data to the `RestWishlistItemsAttributes` transfer object. | | Spryker\Glue\ProductAvailabilitiesRestApi\Plugin\Wishlist | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new AvailabilityWishlistItemExpanderPlugin(), + new SellableWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductAvailabilityRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `AvailabilityWishlistItemExpanderPlugin` and `ProductAvailabilityRestWishlistItemsAttributesMapperPlugin` are set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the `quantity` value within the `attributes` in the response. + +Make sure that `SellableWishlistItemExpanderPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get `availability` value within the `attributes` in the response. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-merchant-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-merchant-glue-api.md new file mode 100644 index 00000000000..63b463ce3ae --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-merchant-glue-api.md @@ -0,0 +1,166 @@ + +This document describes how to integrate the Marketplace Merchant Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Merchant Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchants-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantsRestApi | vendor/spryker/merchants-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestMerchantsAttributesTransfer | class | Created | src/Generated/Shared/Transfer/RestMerchantsAttributesTransfer | +| RestMerchantAddressesAttributesTransfer | class | Created | src/Generated/Shared/Transfer/RestMerchantAddressesAttributesTransfer | +| RestMerchantAddressTransfer | class | Created | src/Generated/Shared/Transfer/RestMerchantAddressTransfer | +| RestLegalInformationTransfer | class | Created | src/Generated/Shared/Transfer/RestLegalInformationTransfer | +| RestOrdersAttributesTransfer.merchantReferences | property | Created | src/Generated/Shared/Transfer/RestOrdersAttributesTransfer | +| RestOrderDetailsAttributesTransfer.merchantReferences | property | Created | src/Generated/Shared/Transfer/RestOrderDetailsAttributesTransfer | +| RestOrderItemsAttributesTransfer.merchantReference | property | Created | src/Generated/Shared/Transfer/RestOrderItemsAttributesTransfer | +| MerchantStorageProfileTransfer.description | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.bannerUrl | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.deliveryTime | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.termsConditions | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.cancellationPolicy | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.imprint | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | +| MerchantStorageProfileTransfer.dataPrivacy | property | Created | src/Generated/Shared/Transfer/MerchantStorageProfileTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantsResourceRoutePlugin | Registers the `merchants` resource. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | +| MerchantAddressesResourceRoutePlugin | Registers the `merchant-addresses` resource. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | +| MerchantAddressByMerchantReferenceResourceRelationshipPlugin | Adds the `merchant-addresses` resource as a relationship of the `merchants` resource. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resource as a relationship by merchant reference provided in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | +| MerchantRestUrlResolverAttributesTransferProviderPlugin | Adds functionality for merchant url resolving to UrlRestApi. | | Spryker\Glue\MerchantsRestApi\Plugin\UrlsRestApi | +| MerchantsByOrderResourceRelationshipPlugin | Adds `merchants` resources as relationship by order merchant references. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new MerchantsResourceRoutePlugin(), + new MerchantAddressesResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + MerchantsRestApiConfig::RESOURCE_MERCHANTS, + new MerchantAddressByMerchantReferenceResourceRelationshipPlugin() + ); + + $resourceRelationshipCollection->addRelationship( + OrdersRestApiConfig::RESOURCE_ORDERS, + new MerchantsByOrderResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +**src/Pyz/Glue/UrlsRestApi/UrlsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestUrlResolverAttributesTransferProviderPlugins(): array + { + return [ + new MerchantRestUrlResolverAttributesTransferProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `MerchantsResourceRoutePlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/merchants/{% raw %}{{merchantReference}}{% endraw %}`, `https://glue.mysprykershop.com/merchants`. + +Make sure that the pagination is working by sending the request `GET https://glue.mysprykershop.com/merchants?offset=1&limit=1`. + +Make sure that the `MerchantAddressesResourceRoutePlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/merchants/{% raw %}{{merchantReference}}{% endraw %}/merchant-addresses`. + +Make sure that the `MerchantAddressByMerchantReferenceResourceRelationshipPlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/merchants/{% raw %}{{merchantReference}}{% endraw %}?include=merchant-addresses`. The response should include the `merchant-addresses` resource along with the merchants. + +Make sure that after sending the request `GET https://glue.mysprykershop.com/url-resolver?url={% raw %}{{merchantUrl}{% endraw %}`, the merchant entity type and ID is returned in response. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-cart-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-cart-glue-api.md new file mode 100644 index 00000000000..d718ecad277 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-cart-glue-api.md @@ -0,0 +1,57 @@ + + +This document describes how to integrate the Marketplace Product + Cart Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Cart Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ----------- | ------- | ------------------| +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Marketplace Product API | {{page.release_tag}} | [Install the Marketplace Product Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.html) | + + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantProductCartItemExpanderPlugin | Expands view data for abstract product with merchant data. | | Spryker\Glue\MerchantProductsRestApi\Plugin\CartsRestApi | + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getCartItemExpanderPlugins(): array + { + return [ + new MerchantProductCartItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that you can add a merchant product to the cart using a `POST` request to `http://glue.de.demo-spryker.com/guest-cart-items or http://glue.de.demo-spryker.com/carts/{% raw %}{{idCart}}{% endraw %}/items`. + +Make sure that when you do a `GET` request for the carts with marketplace products, their merchants are returned as well. `http://glue.de.demo-spryker.com/guest-carts/{idCart}?include=guest-cart-items,merchants` or `http://glue.de.demo-spryker.com/carts/{% raw %}{{idCart}}{% endraw %}?include=items,merchants`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-glue-api.md new file mode 100644 index 00000000000..b999f38dd59 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-glue-api.md @@ -0,0 +1,118 @@ + + +This document describes how to integrate the Marketplace Product Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Marketplace Product | {{page.release_tag}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html)| + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-products-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductsRestApi | vendor/spryker/merchant-products-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT| PATH | +|-|-|-|-| +| AbstractProductsRestAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/AbstractProductsRestAttributesTransfer | +| RestCartItemsAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/RestCartItemsAttributesTransfer | +| CartItemRequest.merchantReference | property | Created | src/Generated/Shared/Transfer/CartItemRequestTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds merchants resources as relationship by merchant references in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php +addRelationship( + ProductsRestApiConfig::RESOURCE_ABSTRACT_PRODUCTS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_CART_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + $resourceRelationshipCollection->addRelationship( + CartsRestApiConfig::RESOURCE_GUEST_CARTS_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you do a `GET` request to retrieve abstract products that belong to a specific merchant, it returns products' data together with their merchants `http://glue.de.demo-spryker.com/abstract-products/{% raw %}{{abstractProductSku}}{% endraw %}?include=merchants`. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| -------------- | -------------------------------- | ----------------- | +| Marketplace Product + Cart API | | [Install the Marketplace Product + Cart Glue API](/docs/pbc/all/product-information-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md new file mode 100644 index 00000000000..9ed21e426d5 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-cart-glue-api.md @@ -0,0 +1,105 @@ +This document describes how to integrate the Marketplace Product Offer + Cart Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Cart Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------------- | ------- | ------------------| +| Cart API | {{page.release_tag}} | [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | +| Marketplace Product Offer API | {{page.release_tag}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | +| Marketplace Inventory Management | {{page.release_tag}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | + +### 1) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| - | - | - | +| MerchantProductOfferCartItemMapperPlugin | Maps the merchant product offer reference and merchant reference, coming from the Glue add to cart request, to persistent cart-specific transfer. | Spryker\Zed\MerchantProductOffersRestApi\Communication\Plugin\CartsRestApi | +| MerchantProductOfferCartItemExpanderPlugin | Expands the merchant product offer information with a merchant reference. | Spryker\Glue\MerchantProductOffersRestApi\Plugin\CartsRestApi | +| MerchantProductOfferRestCartItemsAttributesMapperPlugin | Maps merchant product offer reference and merchant reference to items attributes. | Spryker\Glue\MerchantProductOffersRestApi\Plugin\CartsRestApi | + +**src/Pyz/Glue/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestCartItemsAttributesMapperPlugins(): array + { + return [ + new MerchantProductOfferRestCartItemsAttributesMapperPlugin(), + ]; + } + + /** + * @return array<\Spryker\Glue\CartsRestApiExtension\Dependency\Plugin\CartItemExpanderPluginInterface> + */ + protected function getCartItemExpanderPlugins(): array + { + return [ + new MerchantProductOfferCartItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/CartsRestApi/CartsRestApiDependencyProvider.php** + +```php + + */ + protected function getCartItemMapperPlugins(): array + { + return [ + new MerchantProductOfferCartItemMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `MerchantProductOfferCartItemExpanderPlugin` and `MerchantProductOfferCartItemMapperPlugin` are set up by sending the request `POST https://glue.mysprykershop.com/carts/{% raw %}{{cartUuid}}{% endraw %}/items` with the following body and make sure the product has been added to the cart with the offer: + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "091_25873091", + "quantity": "1", + "productOfferReference": "offer3" + } + } +} +``` + +Make sure that `MerchantProductOfferRestCartItemsAttributesMapperPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/carts/{% raw %}{{cartUuid}}{% endraw %}?include=items` to the cart that has an item with a product offer. You should be able to see `productOfferReference` and `merchantReference` attributes among the attributes of the items resource. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-glue-api.md new file mode 100644 index 00000000000..51c694d40f3 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-glue-api.md @@ -0,0 +1,138 @@ +This document describes how to integrate the Marketplace Product Offer Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product Offer | {{page.release_tag}} |[Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offers-rest-api:"^1.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOffersRestApi | spryker/merchant-product-offers-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestProductOffersAttributes | class | Created | src/Generated/Shared/Transfer/RestProductOffersAttributesTransfer | +| PersistentCartChange | class | Created | src/Generated/Shared/Transfer/PersistentCartChangeTransfer | +| RestItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestItemsAttributesTransfer | +| RestItemsAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/RestItemsAttributesTransfer | +| CartItemRequest.productOfferReference | property | Created | src/Generated/Shared/Transfer/CartItemRequestTransfer | +| CartItemRequest.merchantReference | property | Created | src/Generated/Shared/Transfer/CartItemRequestTransfer | +| RestCartItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestCartItemsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOffersResourceRoutePlugin | Registers the `product-offers` resource. | | Spryker\Glue\MerchantProductOffersRestApi\Plugin\GlueApplication | +| ConcreteProductsProductOffersResourceRoutePlugin | Registers the `product-offers` resource with `concrete-products`. | | Spryker\Glue\MerchantProductOffersRestApi\Plugin\GlueApplication | +| ProductOffersByProductConcreteSkuResourceRelationshipPlugin | Registers the `product-offers` resource as a relationship to `concrete-products`. | | Spryker\Glue\MerchantProductOffersRestApi\Plugin\GlueApplication | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resources as relationship by merchant references in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductOffersResourceRoutePlugin(), + new ConcreteProductsProductOffersResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + ProductsRestApiConfig::RESOURCE_CONCRETE_PRODUCTS, + new ProductOffersByProductConcreteSkuResourceRelationshipPlugin() + ); + $resourceRelationshipCollection->addRelationship( + MerchantProductOffersRestApiConfig::RESOURCE_PRODUCT_OFFERS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `ProductOffersResourceRoutePlugin` is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{offerReference}}{% endraw %}`. + +Make sure that `ConcreteProductsProductOffersResourceRoutePlugin` is set up by sending the request `GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{sku}}{% endraw %}/product-offers`. + +Make sure that `ProductOffersByProductConcreteSkuResourceRelationshipPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/concrete-products/{% raw %}{{sku}}{% endraw %}?include=product-offers`. You should get `concrete-products` with all product's `product-offers` as relationships. + +Make sure that `MerchantByMerchantReferenceResourceRelationshipPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{sku}}{% endraw %}?include=merchants`. The response should include the `merchants` resource along with `product-offers`. + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| -------------- | -------------------------------- | ----------------- | +| Marketplace Product Offer + Prices API | | [Install the Marketplace Product Offer + Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | +| Marketplace Product Offer + Volume Prices API | | [Install the Marketplace Product Offer + Volume Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.html) | +| Marketplace Product Offer + Wishlist API | | [Install the Marketplace Product Offer + Wishlist Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.html) | +| Marketplace Product Offer + Cart API | | [Install the Marketplace Product Offer + Cart Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md new file mode 100644 index 00000000000..3548c175157 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-glue-api.md @@ -0,0 +1,125 @@ +This document describes how to integrate the Marketplace Product Offer Prices Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Product Offer Prices | {{page.release_tag}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/product-offer-prices-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| ProductOfferPricesRestApi | spryker/product-offer-prices-rest-api | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Update the database and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `src/Orm/Zed/ProductStorage/Persistence/Base/SpyProductConcreteStorage.php` class contains the `syncPublishedMessageForMappings` public function. + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestProductOfferPriceAttributes | class | Created | src/Generated/Shared/Transfer/RestProductOffersAttributesTransfer | + +{% endinfo_block %} + +### 3) Enable Product Offer Prices resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| ProductOfferPricesResourceRoutePlugin | Registers the `product-offer-prices` resource. | | Spryker\Glue\ProductOfferPricesRestApi\Plugin\GlueApplication | +| ProductOfferPriceByProductOfferReferenceResourceRelationshipPlugin | Registers the `product-offer-prices` resource as a relationship to `product-offers`. | | Spryker\Glue\ProductOfferPricesRestApi\Plugin\GlueApplication | + + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new ProductOfferPricesResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + MerchantProductOffersRestApiConfig::RESOURCE_PRODUCT_OFFERS, + new ProductOfferPriceByProductOfferReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferPricesResourceRoutePlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{offerReference}}{% endraw %}/product-offer-prices`. + +Make sure that the `ProductOfferPriceByProductOfferReferenceResourceRelationshipPlugin` plugin is set up by sending the request `GET https://glue.mysprykershop.com/product-offers/{% raw %}{{offerReference}}{% endraw %}?include=product-offer-prices`. You should get `product-offers` with all product offer's `product-offer-prices` as relationships. + +{% endinfo_block %} + + +## Install related features + +Integrate the following related features: + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +|---|---|---| +| Marketplace Product Offer Prices + Wishlist Glue API | ✓ | [Install the Marketplace Product Offer Prices + Wishlist Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.html) | diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md new file mode 100644 index 00000000000..793176308ff --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-prices-wishlist-glue-api.md @@ -0,0 +1,78 @@ +This document describes how to integrate the Marketplace Product Offer Prices + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer Prices API | {{page.release_tag}} |[Install the Product Offer Prices Glue API](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductOfferWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product offer prices. | | Spryker\Zed\PriceProductOffer\Communication\Plugin\Wishlist | +| PriceProductOfferVolumeExtractorPlugin | Extracts volume prices from the price product offer collection. | | Spryker\Zed\PriceProductOfferVolume\Communication\Plugin\PriceProductOffer | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductOfferWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PriceProductOffer/PriceProductOfferDependencyProvider.php** + +```php + + */ + protected function getPriceProductOfferExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductOfferWishlistItemExpanderPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +Make sure that `PriceProductOfferVolumeExtractorPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items,selected-product-offers,product-offer-prices`. You should get the product offer volume prices within the `prices` in the response. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md new file mode 100644 index 00000000000..e1a12e98c57 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md @@ -0,0 +1,90 @@ +This document describes how to integrate the Offers Volume Prices Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Offer Volume Prices Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-| - | +| Marketplace Product Offer Prices | {{page.release_tag}} | [Install the Marketplace Product Offer Prices feature](/docs/pbc/all/price-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.html) | +| Marketplace Product Offer Volume Prices | {{page.release_tag}} | Install the Marketplace Product Offer Volume Prices feature | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/price-product-offer-volumes-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| PriceProductOfferVolumesRestApi | spryker/price-product-offer-volumes-rest-api | + +{% endinfo_block %} + +### 2) Set up database and transfer objects + +Update the database and generate transfer changes: + +```bash +console transfer:generate +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestProductOfferPriceAttributes.volumePrices | property | Created | src/Generated/Shared/Transfer/RestProductOffersAttributesTransfer | + +{% endinfo_block %} + +### 3) Enable Product Offer Prices resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| RestProductOfferPricesAttributesMapperPlugin | Extends `RestProductOfferPricesAttributesTransfer` with volume price data. | | Spryker\Glue\PriceProductOfferVolumesRestApi\Plugin | + +**src/Pyz/Glue/ProductOfferPricesRestApi/ProductOfferPricesRestApiDependencyProvider.php** + +```php + + */ + protected function getRestProductOfferPricesAttributesMapperPlugins(): array + { + return [ + new RestProductOfferPricesAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferPricesRestApiDependencyProvider` plugin is set up by having product offer volumes over sending the request `GET https://glue.mysprykershop.com//concrete-products/{% raw %}{{concreteProductId}}{% endraw %}?include=product-offers,product-offer-prices`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md new file mode 100644 index 00000000000..35c8ad0722c --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md @@ -0,0 +1,187 @@ +This document describes how to integrate the Marketplace Product Offer + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer API | {{page.release_tag}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-wishlist-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOfferWishlistRestApi | spryker/merchant-product-offer-wishlist-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| WishlistItemRequest.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistItemRequestTransfer | +| RestWishlistItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | +| RestWishlistItemsAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| MerchantProductOfferAddItemPreCheckPlugin | Returns `WishlistPreAddItemCheckResponse.isSuccess=false` if no product offers found by the `WishlistItem.productOfferReference` transfer property. | | Spryker\Zed\MerchantProductOfferWishlist\Communication\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesMapperPlugin | Populates `RestWishlistItemsAttributes.id` with the following pattern: `{WishlistItem.sku}_{WishlistItemTransfer.productOfferReference}`. | | Spryker\Glue\MerchantProductOfferWishlistRestApi\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin | Checks if requested the wishlist item exists in the wishlist item collection. | | Spryker\Zed\MerchantProductOfferWishlistRestApi\Communication\Plugin | +| EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin | Checks if the requested wishlist item exists in the wishlist item collection. | | Spryker\Zed\MerchantProductOfferWishlistRestApi\Communication\Plugin | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resources as relationship by merchant references in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + WishlistsRestApiConfig::RESOURCE_WISHLIST_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +
    src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new MerchantProductOfferAddItemPreCheckPlugin(), + ]; + } + +} +``` + +
    + +
    src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +
    + +
    src/Pyz/Zed/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesDeleteStrategyPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin(), + new EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin(), + ]; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +Make sure that `ProductOfferRestWishlistItemsAttributesMapperPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get `attributes` in the response. + +Make sure that `MerchantProductOfferAddItemPreCheckPlugin` is set up by sending the request `POST https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items`. You should have the wishlist item added only when the product has the specified offer reference. + +Make sure that `ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin` and `EmptyProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin` are set up by sending the request `DELETE https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items/{% raw %}{{wishlistItemId}}{% endraw %}`. You should get the product offer wishlist item deleted. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-return-management-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-return-management-glue-api.md new file mode 100644 index 00000000000..df51d4e36d7 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-return-management-glue-api.md @@ -0,0 +1,109 @@ +This document describes how to integrate the Marketplace Return Management API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Return Management Glue API feature core. + +### Prerequisites + + +Install the required features: + + +| NAME | VERSION | INSTALLATION GUIDE | +| --------- | ------ | --------| +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Return Management | {{page.release_tag}} | [Install the Marketplace Return Management feature](/docs/pbc/all/return-management/latest/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.html) | + +### 1) Install the required modules using Сomposer + + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-sales-returns-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------- | ------------------- | +|MerchantSalesReturnsRestApi | spryker/merchant-sales-returns-rest-api | + +{% endinfo_block %} + + +### 2) Set up transfer objects + + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +| --------- | ------- | ----- | ------------- | +| RestReturnsAttributes.merchantReference | attribute | created |src/Generated/Shared/Transfer/RestReturnsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ------------ | ----------- | ----- | ------------ | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resources as relationship by merchant references in the attributes | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +
    +src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + SalesReturnsRestApiConfig::RESOURCE_RETURNS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } + +} +``` + +
    + +{% info_block warningBox "Verification" %} + + +Make sure that the `MerchantByMerchantReferenceResourceRelationshipPlugin` +plugin is set up by: +1. Sending the request `GET https://glue.mysprykershop.com/returns/{% raw %}{{returnId}}{% endraw %}include=merchants`. + +Verify that the returned data includes `merchant` resource attributes. + +2. Sending the request `GET https://glue.mysprykershop.com/returns`. + +Verify that the returned data includes the `merchantReference`. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md new file mode 100644 index 00000000000..41ef94c80ac --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-marketplace-shopping-lists-glue-api.md @@ -0,0 +1,255 @@ +This document describes how to integrate the Marketplace Shopping Lists feature API into a Spryker project. + +## Install feature core + +Follow the steps below to install Marketplace Shopping Lists API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| - | - | - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Shopping Lists | {{page.release_tag}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-shopping-lists-api require spryker/merchant-product-shopping-lists-api require spryker/product-offer-shopping-lists-rest-api +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOfferShoppingListsRestApi | vendor/spryker/merchant-product-offer-shopping-lists-api | +| MerchantProductShoppingListsRestApi | vendor/spryker/merchant-product-shopping-lists-api | +| ProductOfferShoppingListsRestApi | vendor/spryker/product-offer-shopping-lists-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| RestShoppingListItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer.php | +| MerchantProductOfferShoppingListsRestApi.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer.php | +| MerchantProductOfferShoppingListsRestApi.merchantReference | property | Created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer.php | +| MerchantProductShoppingListsRestApi.merchantReference | property | Created | src/Generated/Shared/Transfer/RestShoppingListItemsAttributesTransfer.php | + +{% endinfo_block %} + +### 3) Set up plugins + +Set up plugins to load additional relations in the shopping list items resource: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-|-|-|-| +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchant` resources as relationship by the product offer reference. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | +| ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin | Adds `product offer availabilities` resources as relationship by the product offer reference. | | Spryker\Glue\ProductOfferAvailabilitiesRestApi\Plugin\GlueApplication | +| ProductOffersByProductOfferReferenceResourceRelationshipPlugin | Adds `product offers` resources as relationship by the product offer reference. | | Spryker\Glue\ProductOffersRestApi\Plugin\GlueApplication | +| ProductOfferPriceByProductOfferReferenceResourceRelationshipPlugin | Adds `product offer prices` resources as relationship the by the product offer reference. | | Spryker\Glue\ProductOfferPricesRestApi\Plugin\GlueApplication | + +
    src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new ProductOfferAvailabilitiesByProductOfferReferenceResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new ProductOffersByProductOfferReferenceResourceRelationshipPlugin(), + ); + + $resourceRelationshipCollection->addRelationship( + ShoppingListsRestApiConfig::RESOURCE_SHOPPING_LIST_ITEMS, + new ProductOfferPriceByProductOfferReferenceResourceRelationshipPlugin(), + ); + + return $resourceRelationshipCollection; + } +} +``` + +
    + +{% info_block warningBox "Verification" %} + +1. Make sure that merchant and offer references are present by sending the `POST` request to `https://glue.mysprykershop.com/shopping-lists/{shoppingListReference}/shopping-list-items` + +Request sample: + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "productOfferReference": "offer360", + "quantity": 1, + "sku": "204_29851280" + } + } +} +``` + +Response sample: + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "5eb9f15f-f127-5929-89ed-c240b41f888e", + "attributes": { + "productOfferReference": "offer360", + "merchantReference": "MER000006", + "quantity": 1, + "sku": "204_29851280" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/cf032865-d1ad-5e27-803a-423bd15ced66/shopping-list-items/5eb9f15f-f127-5929-89ed-c240b41f888e" + } + } +} +``` + +2. Make sure that product offers, product concrete availabilities, product offers' availabilities and merchants are loaded by sending the `GET` request to `https://glue.mysprykershop.com/shopping-lists/{shoppingListReference}?include=concrete-products,shopping-list-items,product-offers,product-offer-availabilities,concrete-product-availabilities,merchants` + +
    Response data sample with the included concrete products, shopping list items, product offers, product offer availabilities, concrete product availabilities, and merchants + +```json +{ + "data": { + "type": "shopping-lists", + "id": "cf032865-d1ad-5e27-803a-423bd15ced66", + "attributes": { + "owner": "Sonia Wagner", + "name": "Laptops", + "numberOfItems": 16, + "updatedAt": "2022-02-14 15:10:08.000000", + "createdAt": "2022-02-14 15:10:08.000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/cf032865-d1ad-5e27-803a-423bd15ced66?include=concrete-products,shopping-list-items,product-offers,product-offer-availabilities,concrete-product-availabilities,merchants" + }, + }, + "included": [ + { + "type": "concrete-product-availabilities", + "id": "134_29759322", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/134_29759322/concrete-product-availabilities" + } + }, + + { + "type": "concrete-product-availabilities", + "id": "204_29851280", + "attributes": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "1.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/204_29851280/concrete-product-availabilities" + } + }, + { + "type": "merchants", + "id": "MER000006", + "attributes": { + "merchantName": "Sony Experts", + "merchantUrl": "/en/merchant/sony-experts", + "contactPersonRole": "Brand Manager", + "contactPersonTitle": "Ms", + "contactPersonFirstName": "Michele", + "contactPersonLastName": "Nemeth", + "contactPersonPhone": "030/123456789", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-logo.png", + "publicEmail": "support@sony-experts.com", + "publicPhone": "+49 30 234567691", + "description": "Capture your moment with the best cameras from Sony. From pocket-size to professional-style, they all pack features to deliver the best quality pictures.Discover the range of Sony cameras, lenses and accessories, and capture your favorite moments with precision and style with the best cameras can offer.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-banner.png", + "deliveryTime": "1-3 days", + "faxNumber": "+49 30 234567600", + "legalInformation": { + "terms": "

    General Terms



    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information



    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to allow us to deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information



    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

    Sony Experts

    Matthias-Pschorr-Straße 1
    80336 München
    DE

    Phone: 030 1234567
    Email: support@sony-experts.com

    Represented by
    Managing Director: Max Mustermann
    Register Court: Munich
    Register Number: HYY 134306

    ", + "dataPrivacy": "Sony Experts values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000006" + } + }, + { + "type": "product-offer-availabilities", + "id": "offer360", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer360/product-offer-availabilities" + } + } + ] +} +``` + +
    + +{% endinfo_block %} + +## Install related features + +| FEATURE | REQUIRED FOR THE CURRENT FEATURE | INSTALLATION GUIDE | +| - | - | - | +| Marketplace Shopping Lists | {{page.release_tag}} | [Install the Marketplace Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html) | diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-category-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-category-glue-api.md new file mode 100644 index 00000000000..5da96996ca0 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-category-glue-api.md @@ -0,0 +1,92 @@ + + +This document describes how to integrate the Merchant Category Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Merchant Category Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ---------------- | ------ | ------------------ | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant Category | {{page.release_tag}} | [Install the Marketplace Merchant Category feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-categories-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| -------------- | ----------------- | +| MerchantCategoriesRestApi | vendor/spryker/merchant-categories-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| -------------- | ---- | ----- | ------------------ | +| RestMerchantsAttributes | object | Created | src/Generated/Shared/Transfer/RestMerchantsAttributes | + +{% endinfo_block %} + +### 3) Enable resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --------------- | -------------- | ------------- | ----------------- | +| MerchantCategoryMerchantRestAttributesMapperPlugin | Maps active categories from `MerchantStorageTransfer` to `RestMerchantsAttributesTransfer`. | | Spryker\Glue\MerchantCategoriesRestApi\Plugin\MerchantsRestApi | + +**src/Pyz/Glue/MerchantsRestApi/MerchantsRestApiDependencyProvider.php** + +```php + + */ + public function getMerchantRestAttributesMapperPlugins(): array + { + return [ + new MerchantCategoryMerchantRestAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you send the request `GET https://glue.mysprykershop.com/merchants`, you can see the category keys and names for merchants assigned to categories. + +Make sure that when you send the request `GET https://glue.mysprykershop.com/merchants?category-keys[]={% raw %}{{some-category-key}}{% endraw %}`, you can see only merchants that belong to the particular category in the response. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-opening-hours-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-opening-hours-glue-api.md new file mode 100644 index 00000000000..85d30784118 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-merchant-opening-hours-glue-api.md @@ -0,0 +1,108 @@ + +This document describes how to integrate the Merchant Opening Hours Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Merchant Opening Hours Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| ----------- | ------ | --------------| +| Merchant Opening Hours | {{page.release_tag}} | [Install the Merchant Opening Hours feature](/docs/pbc/all/merchant-management/latest/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-opening-hours-rest-api:"^1.0.0" +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| ------------------ | ----------------- | +| MerchantOpeningHoursRestApi | spryker/merchant-opening-hours-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| -------------- | ---- | ------ | ------------------ | +| RestMerchantOpeningHoursAttributes | class | Created | src/Generated/Shared/Transfer/RestMerchantOpeningHoursAttributesTransfer | + +{% endinfo_block %} + +### 3) Enable merchant product offers resources and relationships + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| ----------------- | -------------- | --------------- | ---------------- | +| MerchantOpeningHoursResourceRoutePlugin | Registers the `merchant-opening-hours` resource. | | Spryker\Glue\MerchantOpeningHoursRestApi\Plugin\GlueApplication | +| MerchantOpeningHoursByMerchantReferenceResourceRelationshipPlugin | Registers the `merchant-opening-hours` resource as a relationship to the merchants resource. | | Spryker\Glue\MerchantOpeningHoursRestApi\Plugin\GlueApplication | + +**src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php** + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + new MerchantOpeningHoursResourceRoutePlugin(), + ]; + } + + /** + * @param \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface $resourceRelationshipCollection + * + * @return \Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRelationshipCollectionInterface + */ + protected function getResourceRelationshipPlugins( + ResourceRelationshipCollectionInterface $resourceRelationshipCollection + ): ResourceRelationshipCollectionInterface { + $resourceRelationshipCollection->addRelationship( + MerchantsRestApiConfig::RESOURCE_MERCHANTS, + new MerchantOpeningHoursByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `MerchantOpeningHoursByMerchantReferenceResourceRelationshipPlugin` is set up by sending the request `GET https://glue.mysprykershop.comm/merchants/{% raw %}{{merchant-reference}}{% endraw %}?include=merchant-opening-hours`. You should get merchants with all merchant opening hours as relationships. + +{% endinfo_block %} diff --git a/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md new file mode 100644 index 00000000000..8da18314dd7 --- /dev/null +++ b/_includes/pbc/all/install-glue-api/202602.0/marketplace/install-the-prices-marketplace-wishlist-glue-api.md @@ -0,0 +1,78 @@ +This document describes how to integrate the Prices + Marketplace Wishlist Glue API feature into a Spryker project. + + +## Install feature core + +Follow the steps below to install the Prices + Marketplace Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/latest/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Product Prices API | {{page.release_tag}} |[Install the Product Prices Glue API](/docs/pbc/all/price-management/latest/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with prices. | | Spryker\Zed\PriceProduct\Communication\Plugin\Wishlist | +| ProductPriceRestWishlistItemsAttributesMapperPlugin | Maps prices to the `RestWishlistItemsAttributes` transfer object. | | Spryker\Glue\ProductPricesRestApi\Plugin\Wishlist | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductPriceRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductWishlistItemExpanderPlugin` and `ProductPriceRestWishlistItemsAttributesMapperPlugin` are set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +{% endinfo_block %} diff --git a/_layouts/custom_new.html b/_layouts/custom_new.html index fa09de0f4bf..2f7ab52b366 100644 --- a/_layouts/custom_new.html +++ b/_layouts/custom_new.html @@ -67,7 +67,7 @@

    {{ site.data.sidebars[page.sidebar
    -

    {{ page.title }}

    +

    {{ page.title }} {% if page.label == "early-access" %}{% include badge.html type="early-access" %}{% endif %}

    {% if page.summary %}
    {{page.summary}}
    diff --git a/_layouts/page.html b/_layouts/page.html index bb83f17856e..ad05b78b127 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -59,7 +59,7 @@

    {{ site.data.sidebars[page.sidebar
    -

    {{ page.title }}

    +

    {{ page.title }} {% if page.label == "early-access" %}{% include badge.html type="early-access" %}{% endif %}

    diff --git a/_layouts/page_print.html b/_layouts/page_print.html index 9e04604a9cd..fc97cf11da7 100644 --- a/_layouts/page_print.html +++ b/_layouts/page_print.html @@ -3,7 +3,7 @@ comments: true ---
    -

    {{ page.title }}

    +

    {{ page.title }} {% if page.label == "early-access" %}{% include badge.html type="early-access" %}{% endif %}

    diff --git a/_layouts/post.html b/_layouts/post.html index 89e47bf5caa..ee905a12fec 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -4,7 +4,7 @@
    -

    {{ page.title }}

    +

    {{ page.title }} {% if page.label == "early-access" %}{% include badge.html type="early-access" %}{% endif %}

    +Marketplace features removed + +- `spryker-feature/marketplace-agent-assist` +- `spryker-feature/marketplace-cart` +- `spryker-feature/marketplace-comments` +- `spryker-feature/marketplace-merchant-commission` +- `spryker-feature/marketplace-merchant-contract-requests` +- `spryker-feature/marketplace-merchant-contracts` +- `spryker-feature/marketplace-merchant-custom-prices` +- `spryker-feature/marketplace-merchant-order-threshold` +- `spryker-feature/marketplace-merchant-portal-product-management` +- `spryker-feature/marketplace-merchant-portal-product-offer-management` +- `spryker-feature/marketplace-merchant-portal-product-offer-service-points` +- `spryker-feature/marketplace-merchant-portal-product-offer-shipment` +- `spryker-feature/marketplace-merchantportal-core` +- `spryker-feature/marketplace-order-management` +- `spryker-feature/marketplace-packaging-units` +- `spryker-feature/marketplace-product-approval-process` +- `spryker-feature/marketplace-product-options` +- `spryker-feature/marketplace-promotions-discounts` +- `spryker-feature/marketplace-return-management` +- `spryker-feature/marketplace-shopping-lists` +- `spryker-feature/merchant-category` +- `spryker-feature/merchant-opening-hours` +- `spryker-feature/merchant-portal-data-import` +- `spryker-feature/product-approval-process` + +
    + +
    +Marketplace core modules removed + +- `spryker/agent-dashboard-merchant-portal-gui` +- `spryker/agent-security-blocker-merchant-portal-gui` +- `spryker/agent-security-merchant-portal-gui` +- `spryker/availability-merchant-portal-gui` +- `spryker/cart-note-merchant-portal-gui` +- `spryker/category-merchant-commission-connector` +- `spryker/dashboard-merchant-portal-gui` +- `spryker/dummy-marketplace-payment` +- `spryker/merchant-app-merchant-portal-gui` +- `spryker/merchant-categories-rest-api` +- `spryker/merchant-discount-connector` +- `spryker/merchant-opening-hours-rest-api` +- `spryker/merchant-product-offer-shopping-lists-rest-api` +- `spryker/merchant-product-shopping-lists-rest-api` +- `spryker/merchant-products-rest-api` +- `spryker/merchant-profile-merchant-portal-gui` +- `spryker/merchant-sales-returns-rest-api` +- `spryker/merchant-shipments-rest-api` +- `spryker/merchants-rest-api` +- `spryker/multi-factor-auth-merchant-portal` +- `spryker/price-product-merchant-commission-connector` +- `spryker/product-merchant-commission-connector` +- `spryker/product-option-merchant-portal-gui` +- `spryker/sales-merchant-portal-gui` +- `spryker/security-blocker-merchant-portal-gui` +- `spryker/tax-merchant-portal-gui` + +
    + +
    +Directories removed + +- `src/Pyz/Zed/MerchantPortalApplication` +- `src/Pyz/Zed/MerchantSalesOrder` +- `src/Pyz/Zed/MerchantOms` +- `src/Pyz/Zed/Merchant` +- `src/Pyz/Zed/MerchantUser` +- Other marketplace-specific module directories +- `public/MerchantPortal` + +
    + +## Troubleshooting + +### Script fails with "Configuration file not found" error + +Make sure the `uninstall-marketplace-config.json` file is placed in the same directory as the +`uninstall-marketplace-modules.sh` script. + +### Composer removal fails + +If Composer fails to remove packages, try running the removal command manually with additional flags: + +```bash +composer remove --ignore-platform-req=ext-grpc --ignore-platform-req=ext-redis PACKAGE_NAME +``` + +### Application fails to build after uninstallation + +1. Clear all caches: + +```bash +docker/sdk cli console cache:empty-all +``` + +2. Regenerate transfer objects: + +```bash +docker/sdk cli console transfer:generate +``` + +3. Run a full rebuild: + +```bash +docker/sdk prune && docker/sdk boot deploy.dev.yml && docker/sdk up +``` + +### Database errors after uninstallation + +If you encounter database-related errors, you may need to drop and recreate your database: + +```bash +docker/sdk cli console propel:install +``` + +{% info_block warningBox "Warning" %} + +This command drops all existing data. Use it only in development environments or if you have a proper backup. + +{% endinfo_block %} + +## Customizing the uninstallation + +The uninstallation behavior is controlled by the `uninstall-marketplace-config.json` configuration file. You can modify +this file to: + +- Add or remove packages from the uninstallation list +- Adjust which files and directories are processed +- Customize the cleanup operations for specific files + +For detailed information about the configuration file structure and available operations, see +the [UNINSTALL_MAINTENANCE_GUIDE.md](https://github.com/spryker-shop/b2b-demo-marketplace/blob/master/UNINSTALL_MAINTENANCE_GUIDE.md) +file. diff --git a/docs/ca/dev/best-practices/best-practises-jenkins-stability.md b/docs/ca/dev/best-practices/best-practises-jenkins-stability.md index 3f075e15736..2242b1973cc 100644 --- a/docs/ca/dev/best-practices/best-practises-jenkins-stability.md +++ b/docs/ca/dev/best-practices/best-practises-jenkins-stability.md @@ -4,7 +4,7 @@ description: Follow best practices for Jenkins in Spryker Cloud Commerce OS, foc template: best-practices-guide-template redirect_from: - /docs/cloud/dev/spryker-cloud-commerce-os/best-practices/best-practises-jenkins-stability.html -last_updated: Jun 10, 2023 +last_updated: Feb 20, 2026 --- Jenkins fulfills the role of a scheduler in the Spryker applications. It is used to run repetitive console commands and jobs. In Spryker Cloud Commerce OS, the Jenkins instance runs the commands configured directly in its container. This means that, when you run a command like the following one, it's executed within the Jenkins container, utilizing its resources: @@ -27,13 +27,15 @@ Considering some overhead for the operating system, Docker, and Jenkins itself, We recommend profiling your application to understand how much RAM your Jenkins jobs require. A good way to do this is by utilizing XDebug Profiling in your local development environment. Jobs that may have unexpected memory demands are the `queue:worker:start` commands. These commands are responsible for spawning the `queue:task:start` commands, which consume messages from RabbitMQ. Depending on the complexity and configured chunk size of these messages, these jobs can easily consume multiple GBs of RAM. +**Starting with `202512.0`, Spryker includes a resource-aware queue worker that addresses memory management for queue processing at the application level.** It monitors free system memory before spawning each child process, detects memory leaks in its own process, and uses a fixed-size process pool to keep memory consumption predictable. For details on enabling and configuring it, see [Optimizing Jenkins execution with the resource-aware queue worker](/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html). + ## Jenkins executors configuration Jenkins executors let you orchestrate Jenkins jobs and introduce parallel processing. By default, Jenkins instances have two executors configured, similar to local environment setups. You can adjust the executor count and run many console commands in parallel. While this may speed up processing in your application, it increases the importance of understanding the memory utilization profile of your application. For stable job execution, you need to ensure that no parallelized jobs collectively consume more memory than the amount available to the Jenkins container. Also, it's a common practice to set the number of executors equal to the number of CPUs available to Jenkins. Standard environments are equipped with two vCPUs. Configuring more than the standard two executors risks jobs "fighting" for CPU cycles. This severely limits the performance of all jobs running in parallel and potentially introduces instability to the container itself. We recommend sticking to the default executor count or the concurrent job limit recommended in the Spryker Service Description for your package. This ensures the stability of Jenkins and prevents instability and crashes. -If it seems like your project needs more executors because of your job or store count, consider configuring all stores's sync jobs to be processed by one executor. For instructions, see [Reduce Jenkins execution without P&S and data importers refactoring](/docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.html). +If it seems like your project needs more executors because of your job or store count, consider using a single resource-aware worker to process all stores with one executor. For instructions, see [Optimizing Jenkins execution with the resource-aware queue worker](/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html). ## Queue worker configuration diff --git a/docs/ca/dev/connect-a-code-repository.md b/docs/ca/dev/connect-a-code-repository.md index eda760d3d47..71d3060b898 100644 --- a/docs/ca/dev/connect-a-code-repository.md +++ b/docs/ca/dev/connect-a-code-repository.md @@ -44,22 +44,30 @@ We recommend mapping your branches to environments as follows: ### Regular GitHub -1. Log into the AWS management console of the environment you want to connect a repository to. +#### Prerequisites + +To connect a GitHub repository via the GitHub App, ensure that the following requirements are met: + +- You have the **Owner** role for the GitHub repository or the organization. +- If you do not have the Owner role, you can request the installation during the connection process, but an organization owner **must approve** the **AWS Connector for GitHub** app installation before the connection can be used. + +For detailed instructions and permission requirements, see [Create a connection to GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html#connections-create-github-console) in the AWS documentation. + +#### Connect your GitHub repository + +1. Log in to the AWS Management Console for the environment to which you want to connect a repository. 2. Go to **CodePipeline**. -3. One the **Pipelines** page, select the pipeline you want to connect the repository to. -4. On the page of the pipeline, click **Edit**. - This opens the pipeline editing page. +3. On the **Pipelines** page, select the pipeline you want to connect the repository to. +4. On the pipeline page, click **Edit** to open the pipeline editing page. 5. In the **Edit: Source** pane, click **Edit stage**. -6. In the **Spryker_App_Src** section, click the *Edit action* button. - This opens the **Edit action** window. +6. In the **Spryker_App_Src** section, click **Edit action** to open the **Edit action** window. -![edit-action](https://spryker.s3.eu-central-1.amazonaws.com/docs/ca/dev/connect-a-code-repository.md/edit-action.png) +![Edit action dialog in AWS CodePipeline](https://spryker.s3.eu-central-1.amazonaws.com/docs/ca/dev/connect-a-code-repository.md/edit-action.png) -7. For **Action provider**, select **GitHub(via GitHub App)**. -This adds GitHub related fields to the window. -8. For **Connection** choose an existing connection or click **Connect to GitHub** to create a new one and authorize AWS CodePipeline to access your GitHub repository. +7. For **Action provider**, select **GitHub (via GitHub App)**. This adds GitHub-related fields to the window. +8. For **Connection**, choose an existing connection or click **Connect to GitHub** to create a new one and authorize AWS CodePipeline to access your GitHub repository. -![connection](https://spryker.s3.eu-central-1.amazonaws.com/docs/ca/dev/connect-a-code-repository.md/connection.png) +![GitHub connection selection in AWS CodePipeline](https://spryker.s3.eu-central-1.amazonaws.com/docs/ca/dev/connect-a-code-repository.md/connection.png) 9. For **Repository name**, enter and select the repository you want to connect. 10. For **Branch name**, enter and select the branch you want to connect. diff --git a/docs/ca/dev/environment-provisioning.md b/docs/ca/dev/environment-provisioning.md index 3abe9c90097..ec52e1644bb 100644 --- a/docs/ca/dev/environment-provisioning.md +++ b/docs/ca/dev/environment-provisioning.md @@ -1,7 +1,7 @@ --- title: Environment provisioning description: This document explains core concepts that are important to understand before filing an environment provisioning request. -last_updated: Mar 14, 2023 +last_updated: Feb 06, 2026 template: concept-topic-template redirect_from: - /docs/cloud/dev/spryker-cloud-commerce-os/environment-provisioning.html @@ -9,7 +9,7 @@ redirect_from: This document describes the information you need to provide for an environment to be provisioned. -To initiate the environment provisioning, you need to create a support portal case. If you have questions, visit the [Spryker Support Portal](https://support.spryker.com). If you don't have access to the support portal yet, request it through the [request form](https://www.surveymonkey.com/r/XYK5R26) on SurveyMonkey. +To initiate the environment provisioning, you need to create a case for each environment you are entitled to at the [Spryker Support Portal](https://support.spryker.com). If you don't have access to the Spryker Support Portal yet, request it through your Spryker Customer Success Manager. Once you are logged in to the Spryker Support Portal, you can submit an [Infrastructure Change Request/Access Management Case](https://support.spryker.com/s/case-funnel-problem) selecting that you want to "Create a new Environment". The following sections outline the information you need to provide to initiate provisioning of your environment. diff --git a/docs/ca/dev/preparation-for-going-live.md b/docs/ca/dev/preparation-for-going-live.md index 0a08c81a965..f4fb0e874b1 100644 --- a/docs/ca/dev/preparation-for-going-live.md +++ b/docs/ca/dev/preparation-for-going-live.md @@ -1,7 +1,7 @@ --- title: Preparation for going live description: Prepare your Spryker Cloud Commerce OS environment for a successful launch with essential pre-live checks, testing, and configuration steps to ensure smooth deployment. -last_updated: Jan 23, 2023 +last_updated: Jun 27, 2025 template: howto-guide-template originalLink: https://cloud.spryker.com/docs/preparation-for-going-live redirect_from: diff --git a/docs/ca/dev/security/patching-maintenancewindows.md b/docs/ca/dev/security/patching-maintenancewindows.md new file mode 100644 index 00000000000..54ccb58061f --- /dev/null +++ b/docs/ca/dev/security/patching-maintenancewindows.md @@ -0,0 +1,38 @@ +--- +title: Patching and maintenance windows +description: Patching of cloud assets and the maintenance windows. +template: howto-guide-template +last_updated: Feb 18, 2026 +--- + +This document answers the main questions asked by the Spryker Customers with regards to ongoing patching and connected maintenance windows. + +**Will I receive a support ticket or case notification for each patching cycle?** + +No. Customers will not receive individual support tickets or cases in the support portal for each maintenance cycle. All maintenance will take place within the officially announced maintenance windows, as communicated in the customer newsletter and platform status updates. + +**Can I request a custom maintenance window for my environment?** + +Unfortunately, no exceptions or custom maintenance windows can be supported. The patching process is fully automated and standardized across all environments to ensure consistency and reliability. +Maintenance takes place during off-peak hours, specifically 22:00–02:00 depending on the region your environment is deployed. See Spryker Service Description for details. + +**When exactly will patching and restarts occur within the announced window?** + +The specific timeframe for each environment falls within the official maintenance window mentioned above. The process is automated and follows a fixed schedule; it cannot be adjusted or narrowed further. + +**Will patching happen for all customers at once, or in batches?** + +Patching is conducted in batches by environment type to minimize risk and ensure stability: + • Step 1: Non-production environments + • Step 2: Production environments (after at least a one-week gap) +Custom batch assignment or scheduling within a batch is not possible. + +**What downtime or service impact should I expect?** + +The patching primarily affects infrastructure services, and most core services will remain operational. +Only a few components may experience short downtime — for example, Jenkins and RabbitMQ, with interruptions typically lasting 5–10 minutes. +All maintenance actions are fully automated and will execute in the predefined sequence. + +**Whom should I contact if I have concerns or notice issues after maintenance?** + +You can contact your Customer Success Manager or create a support case via the Spryker Support Portal if you experience issues outside the communicated maintenance windows. \ No newline at end of file diff --git a/docs/ca/dev/security/security.md b/docs/ca/dev/security/security.md index 78b10208e8f..2397581fddd 100644 --- a/docs/ca/dev/security/security.md +++ b/docs/ca/dev/security/security.md @@ -1,6 +1,6 @@ --- title: Security -last_updated: Jan 16, 2023 +last_updated: Feb 19, 2026 description: Explains how to check ECR image scan results and generate access keys, and introduces the web application firewall template: concept-topic-template redirect_from: @@ -12,3 +12,5 @@ This section explains how to check ECR image scan results and generate access ke - [Checking ECR image scan results](/docs/ca/dev/security/check-ecr-image-scan-results.html) - [Generating access keys](/docs/ca/dev/security/generate-access-keys.html) - [Web Application Firewall (WAF)](/docs/ca/dev/security/web-application-firewall-waf.html) + +You can also find some details on the [Regular patching activities](/docs/ca/dev/security/patching-maintenancewindows.html) \ No newline at end of file diff --git a/docs/dg/dev/acp/app-composition-platform.md b/docs/dg/dev/acp/app-composition-platform.md index 67931289c92..77c45c529c1 100644 --- a/docs/dg/dev/acp/app-composition-platform.md +++ b/docs/dg/dev/acp/app-composition-platform.md @@ -2,7 +2,7 @@ title: App Composition Platform description: The Spryker App Composition Platform (ACP) offers a composable approach, empowering businesses to tailor software solutions through an app-based system. It promotes flexibility by allowing seamless integration of various apps and services, fitting unique requirements across industries. template: concept-topic-template -last_updated: Dec 15, 2023 +last_updated: Feb 25, 2026 redirect_from: - /docs/aop/user/intro-to-acp/acp-overview.html - /docs/acp/user/intro-to-acp/acp-overview.html @@ -17,6 +17,12 @@ related: link: docs/dg/dev/acp/acp-security-tips.html --- +{% info_block warningBox "Warning" %} + +Spryker App Composition Platform has been discontinued. + +{% endinfo_block %} + App Composition Platform (ACP) enables you to connect, configure, and use the available third-party services with zero or low development effort. For business information about ACP, see [Spryker App Composition Platform](https://spryker.com/app-composition-platform/#/). ACP supports the following integrations: diff --git a/docs/dg/dev/ai/ai-assistants/ai-assistants.md b/docs/dg/dev/ai/ai-assistants/ai-assistants.md index c20eb3c1cca..ef0aa268650 100644 --- a/docs/dg/dev/ai/ai-assistants/ai-assistants.md +++ b/docs/dg/dev/ai/ai-assistants/ai-assistants.md @@ -12,8 +12,9 @@ Before using AI-related tools, consult with your legal department. {% endinfo_block %} -- [AI IDE assistants](/docs/dg/dev/ai/ai-assistants/ai-ide-assistants) -- [Spryker Engineer GPT](/docs/dg/dev/ai/ai-assistants/spryker-engineer-gpt) -- [Spryker K6 Performance Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-k6-performance-assistant-gpt) -- [Spryker DevQA Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-devqa-assistant-gpt) -- [Spryker Cypress E2E Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt) \ No newline at end of file +- [AI IDE assistants](/docs/dg/dev/ai/ai-assistants/ai-ide-assistants.html) +- [Context7 MCP Server](/docs/dg/dev/ai/ai-assistants/context7-mcp-server.html) +- [Spryker Engineer GPT](/docs/dg/dev/ai/ai-assistants/spryker-engineer-gpt.html) +- [Spryker K6 Performance Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-k6-performance-assistant-gpt.html) +- [Spryker DevQA Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-devqa-assistant-gpt.html) +- [Spryker Cypress E2E Assistant GPT](/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt.html) \ No newline at end of file diff --git a/docs/dg/dev/ai/ai-assistants/context7-mcp-server.md b/docs/dg/dev/ai/ai-assistants/context7-mcp-server.md new file mode 100644 index 00000000000..db39802b886 --- /dev/null +++ b/docs/dg/dev/ai/ai-assistants/context7-mcp-server.md @@ -0,0 +1,64 @@ +--- +title: Context7 MCP Server +description: Use Context7 MCP server with Claude for intelligent context search in Spryker public documentation +template: concept-topic-template +--- + +This document describes how to use the Context7 MCP server with Claude to enable intelligent context search across Spryker public documentation. + +Context7 provides an MCP (Model Context Protocol) server that integrates with Claude to give you direct access to up-to-date Spryker documentation. This lets you ask questions and get accurate answers based on the latest Spryker documentation without manually searching through docs. + +## What is Context7 + +Context7 is a documentation search service that provides intelligent context-aware search capabilities through the MCP protocol. The Spryker documentation is available through Context7 at [https://context7.com/spryker/spryker-docs](https://context7.com/spryker/spryker-docs). + +When integrated with Claude, Context7 enables you to: +- Search Spryker documentation using natural language queries +- Get accurate, context-aware answers from the latest documentation +- Quickly find relevant code examples and implementation guides +- Access documentation without leaving your development environment + +## Prerequisites + +- Compatible MCP client installed on your system (Claude Desktop, Claude Code, Windsurf, Cursor or other MCP clients) +- A Context7 account (free registration available) + +## Install Context7 MCP server + +To use Context7, follow these steps: + +1. Register for a free account at [https://context7.com/spryker/spryker-docs](https://context7.com/spryker/spryker-docs). +2. Follow the installation guide provided in the Context7 public documentation to set up the MCP server. + +## Configure documentation sources + +When working on Spryker projects, you can configure Context7 to use only Spryker documentation as the source. This ensures that all responses are based exclusively on official Spryker documentation, improving accuracy and relevance for Spryker-specific questions. + +![Context7 documentation source configuration](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-coding-assistants.md/context7-source.png) + +## Documentation refresh + +The Spryker public documentation in Context7 is NOT automatically re-indexed. + +### Request a manual refresh + +Do not hesitate to request a manual reindex when you need the latest documentation updates. To request a manual refresh: + +1. Log in to your Context7 account. +2. Navigate to the documentation library page. +3. Click the **Create GitHub Issue** button. +4. A pre-filled issue opens on GitHub with all the necessary details. +5. Submit the issue. + +![Context7 manual reindex request](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-coding-assistants.md/context7-reindex.png) + +The Context7 team processes manual refresh requests within 1-2 business days. + +## Benefits + +Using Context7 with Claude for Spryker development provides several benefits: + +- **Context-aware**: Get answers that understand the full context of your questions +- **Time-saving**: Find information faster than traditional documentation browsing +- **Integrated workflow**: Access documentation without leaving your development environment +- **Accurate responses**: All answers are based on official Spryker documentation \ No newline at end of file diff --git a/docs/dg/dev/ai/ai-assistants/lsp-for-claude.md b/docs/dg/dev/ai/ai-assistants/lsp-for-claude.md new file mode 100644 index 00000000000..d40a09d772c --- /dev/null +++ b/docs/dg/dev/ai/ai-assistants/lsp-for-claude.md @@ -0,0 +1,204 @@ +--- +title: Language Server for Claude Code CLI +description: Configure LSP server for code navigation and analysis in Claude Code +last_updated: Jan 12, 2026 +keywords: [ai, coding-assistants, phpactor, intelephense, LSP, language-server-protocol, language-server] +template: howto-guide-template +--- + +This document describes how to set up and use the LSP server with Claude Code CLI for efficient code navigation and analysis. + +## Overview + +**LSP - Language Server Protocol** is a standardized protocol that enables code editors and IDEs to communicate with language servers. +It provides features like code navigation, auto-completion, error detection, and more. +Phpactor and Intelephense are two popular LSP servers for PHP development. +Starting from Claude Code version `2.1.5`, LSP support is built-in and can be extended with plugins. + +**Benefits:** +- Saves token usage by using local code analysis. +- Works faster than searching and analyzing files manually. +- Provides intelligent code navigation and error detection. + +## Installation + +1. Install Language Server (LSP) `Phpactor` following [installation guide](https://phpactor.readthedocs.io/en/master/usage/standalone.html#installation) + +```bash +phpactor -v +``` + +```text +Phpactor 2025.12.21.1 +``` + +2. Ensure Claude Code version is `2.1.5` or higher: + +```bash +claude -v +``` + +```text +2.1.5 (Claude Code) +``` + +3. Enable the `Piebald-AI/claude-code-lsps` Claude Code plugin: + +Follow the [installation guide](https://github.com/Piebald-AI/claude-code-lsps?tab=readme-ov-file#installing-the-plugins). + +or: + +- Run claude +- /plugin marketplace add Piebald-AI/claude-code-lsps +- Type /plugins +- Tab to Marketplaces and find `Piebald-AI/claude-code-lsps` +- Choose `phpactor` plugin for PHP +- Press "i" to install them +- Restart Claude Code + +Check `.claude/settings.local.json`: + +```json +{ + "enabledPlugins": { + "phpactor@claude-code-lsps": true + } +} +``` + +### Index the codebase + +Run the indexing command in your project root: + +```bash +phpactor index:build --reset +``` + +For more information about Phpactor indexer, see [Phpactor indexer](https://phpactor.readthedocs.io/en/master/reference/indexer.html). + +## Supported operations + +Phpactor supports the following LSP operations: + +- `goToDefinition` - Navigate to where a symbol is defined +- `goToImplementation` - Find all implementations of an interface or abstract class +- `findReferences` - Find all usages of a class, method, or property +- `goToTypeDefinition` - Navigate to the type definition of a symbol +- `hover` - Get documentation and type information for a symbol +- `documentSymbol` - Get all symbols (functions, classes, variables) in a file +- `workspaceSymbol` - Search for symbols across the entire workspace +- `documentHighlight` - Highlight all occurrences of a symbol in a document + +The following operations are not supported: +- `prepareCallHierarchy` +- `incomingCalls` +- `outgoingCalls` + +![Phpactor find references](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-coding-assistants.md/phpactor-ref.png) + +## Error detection and validation + +When [configured](https://phpactor.readthedocs.io/en/master/usage/configuration.html) in `.phpactor.json`, Phpactor sends notifications to Claude about: +- Intelligent errors detected by PHPStan +- Code style violations detected by PHP_CodeSniffer +- Formatting issues detected by PHP-CS-Fixer + +Example configuration in `.phpactor.json`: + +```json +{ + "$schema": "/phpactor.schema.json", + "language_server_phpstan.enabled": true, + "php_code_sniffer.enabled": true, + "language_server_php_cs_fixer.enabled": true +} +``` + +Trust project configuration in the project root: + +```bash +phpactor config:trust +``` + +![Phpactor validation](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-coding-assistants.md/phpactor-validatio.png) + +### Additional `CLAUDE.md` instructions + +Additional instructions for using LSP with Claude Code are needed to ensure proper usage since Claude is not aware of LSP capabilities by default. +It is expected to be fixed in future Claude versions. + +Example instructions to include in `CLAUDE.md`: + +```markdown +## LSP Server - MANDATORY + +**CRITICAL: ALWAYS use LSP Server FIRST for code navigation tasks.** +**CRITICAL: ALWAYS use LSP Server FIRST for code Search.** +**CRITICAL: ALWAYS use LSP Server understand the code dependency.** + +- YOU MUST Proactively suggest fixing LSP diagnostic issues as soon as they appear +- YOU MUST Leave code in a working state after every change +- CRITICAL: ALWAYS publish new LSP diagnostic errors as soon as they appear and suggest fixing them +- CRITICAL: ALWAYS display fixed LSP diagnostic errors in the output after every code change +- CRITICAL: LSP diagnostic errors MUST be displayed as LSP diagnostic in the output after every code change + +Spryker uses inheritance often and LSP Server helps to understand the code dependency. + +Before using Search/Glob/Grep/Read to find implementations, references, or definitions: +1. **FIRST try using LSP Server** +2. Only fall back to Search/Glob/Grep if LSP doesn't provide results + +### LSP Operations (phpactor@claude-code-lsps) + +Use these LSP operations for code navigation: +- **`goToImplementation`** - Find all implementations or definitions of an interface or abstract class method +- **`findReferences`** - Find all usages of a class, method, property, constant, or interface +- **`goToDefinition`** - Find where a symbol is defined +- **`goToTypeDefinition`** - Find the type definition of a symbol +- **`hover`** - Get documentation and type information for a symbol +- **`documentSymbol`** - Get all symbols (functions, classes, variables) in a file +- **`workspaceSymbol`** - Search for symbols across the entire workspace + +### When to Use LSP (ALWAYS for these tasks) + +**MANDATORY - Use LSP Server for:** +- Finding interface implementations (e.g., "what plugins implement this interface?") +- Finding class references (e.g., "where is this class used?") +- Finding method/property usages +- Navigating to definitions +- Getting type information and documentation +- Any code navigation task + +**Only use Search/Glob/Grep/Read when:** +- LSP doesn't return results +- Searching for string patterns (not code symbols) +- Searching in non-PHP files +``` + +## Alternative: Intelephense + +Intelephense is an official Claude plugin that provides LSP functionality for PHP. It is a paid (freemium) solution and has not been tested with Spryker projects yet. Feedback is appreciated. + +### Installation + +Install Intelephense globally: + +```bash +npm i -g intelephense +``` + +For more information, see [Intelephense documentation](https://intelephense.com/docs#installation). + +### Configuration + +Enable the plugin in `.claude/settings.local.json`: + +```json +{ + "enabledPlugins": { + "php-lsp@claude-plugins-official": true + } +} +``` + +Or find the `php-lsp` plugin in `/plugins` and enable it. diff --git a/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt.md b/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt.md index 5e1d075a7da..301f641f27b 100644 --- a/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt.md +++ b/docs/dg/dev/ai/ai-assistants/spryker-cypress-e2e-assistant-gpt.md @@ -13,7 +13,7 @@ Before using AI tools, consult with your legal department. {% endinfo_block %} -The Spryker Cypress E2E Assistant, powered by GPT technology, is designed to help developers and QA engineers implement, configure, and optimize Cypress for end-to-end (E2E) testing in Spryker projects. The assistant leverages a knowledge base containing the Spryker Cypress Boilerplate repository and other assets to provide accurate, example-driven guidance, ensuring best practices and optimized testing workflows. +The Spryker Cypress E2E Assistant, powered by GPT technology, is designed to help developers and QA engineers implement, configure, and optimize Cypress for end-to-end (E2E) testing in Spryker projects. The assistant leverages a knowledge base containing the Spryker [Cypress Boilerplate](https://github.com/spryker-projects/cypress-boilerplate) repository and other assets to provide accurate, example-driven guidance, ensuring best practices and optimized testing workflows. ## Use case diff --git a/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.md b/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.md index 0f287b2f13b..5e76581d35c 100644 --- a/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.md +++ b/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.md @@ -2,6 +2,7 @@ title: AI Dev MCP Server description: Set up and configure the Model Context Protocol server for AI assistant integration last_updated: Dec 9, 2025 +label: early-access keywords: ai, mcp, model context protocol, claude, copilot, ai-dev, configuration template: howto-guide-template --- @@ -117,6 +118,14 @@ The AiDev module provides the following built-in tools that AI assistants can us | `getInterfaceMethodsByNamespace` | Retrieves all method signatures, parameters, return types, and PHPDoc for a given interface FQN (Fully Qualified Name). | | `getOmsTransitionsByState` | Retrieves OMS state machine transitions for a specific state. Returns all transitions that start from the given state, optionally filtered by process name. | | `getOrderOmsTransitions` | Retrieves OMS state machine transitions for a specified order from the order's current state. Helps identify the current state and possible transitions. | +| `executeQuery` | Executes read-only database queries (SELECT, SHOW, DESCRIBE, EXPLAIN) for accessing project data without modification capabilities. | +| `getSprykerModules` | Lists all available Spryker modules from project and vendor directories. | +| `getSprykerModuleMap` | Retrieves detailed module metadata including class paths, method signatures, and extension points. | +| `searchAlgoliaDocumentation` | Enables keyword-based Spryker documentation search through Algolia integration. | +| `analyzeCsvFile` | Analyzes CSV file structure without loading full content. Returns headers, row count, and sample rows. Supports optional column analysis with unique values and null counts. | +| `transformCsv` | Transforms and modifies CSV files with three operation modes: APPEND (add new rows), REPLACE (overwrite target), and UPDATE (modify existing rows in-place). Supports column mappings, row filters, value transformations, default values, and automatic backup creation. | +| `deleteCsvRows` | Deletes rows from CSV files based on filter criteria with multiple operators (equals, not_equals, in, not_in, contains, not_contains, starts_with, ends_with, empty, not_empty). Includes safety checks and automatic backup creation. | +| `splitOdsToCsv` | Splits ODS (OpenDocument Spreadsheet) files into separate CSV files per sheet. Skips empty sheets and returns details about created files. Useful for converting Google Sheets exports to Spryker-compatible CSVs. | AI assistants can automatically discover and use these tools when connected to the MCP server. diff --git a/docs/dg/dev/ai/ai-dev/ai-dev-overview.md b/docs/dg/dev/ai/ai-dev/ai-dev-overview.md index 18ddd0f2a0a..c534fe7a1aa 100644 --- a/docs/dg/dev/ai/ai-dev/ai-dev-overview.md +++ b/docs/dg/dev/ai/ai-dev/ai-dev-overview.md @@ -1,7 +1,8 @@ --- -title: AI Dev Overview +title: AI Dev SDK Overview description: Integrate AI development tools and MCP server into your Spryker application last_updated: Dec 9, 2025 +label: early-access keywords: ai, development, mcp, model context protocol, ai-dev, tools, prompts, extension template: howto-guide-template --- @@ -32,20 +33,6 @@ The module includes: - **Built-in Tools**: Pre-configured tools for accessing Spryker transfers, interfaces, and OMS information - **Prompt Generation**: Automatic generation of context-aware prompts from documentation -## Install the AiDev module - -1. Require the package: - -```bash -composer require spryker-sdk/ai-dev --dev -``` - -2. Generate transfers: - -```bash -console transfer:generate -``` - ## Console commands The AiDev module provides two console commands: diff --git a/docs/dg/dev/ai/ai-dev/ai-dev.md b/docs/dg/dev/ai/ai-dev/ai-dev.md new file mode 100644 index 00000000000..15616b48531 --- /dev/null +++ b/docs/dg/dev/ai/ai-dev/ai-dev.md @@ -0,0 +1,104 @@ +--- +title: AI Dev SDK +description: Spryker AI Dev SDK +template: concept-topic-template +redirect_from: + - /docs/dg/dev/ai-dev/ai-dev +--- + +{% info_block warningBox "Warning" %} + +Before you use AI-related tools, consult your legal department. + +{% endinfo_block %} + +## Overview + +When you use AI tools to write code, they rely on general patterns, which leads to mistakes and requires you to repeatedly explain your project structure. + +The AI Dev SDK provides an MCP server, which is a console command that your AI tool runs in your project's Docker container and helps it to increase Spryker-context awareness. MCP (Model Context Protocol) is a standard protocol that lets AI tools request specific information from external sources, similar to how a browser requests data from an API. + +## How it works + +After you install the SDK, [add a simple configuration](/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.html) to your AI tool. When your Spryker project is running, your AI tool can access Spryker-specific information and prompts through the MCP server. + +## Result + +AI generates better code faster and with fewer errors. You spend less time correcting mistakes and explaining Spryker concepts. + +## Key capabilities + +### Faster Spryker-specific answers + +AI can search Spryker documentation instead of requiring you to explain basic concepts or guessing how features work. + +### Smarter code generation + +AI can look up your actual transfer objects, module dependencies, and interface methods so that the generated code matches your project structure instead of relying on assumptions. + +### OMS debugging made easy + +AI can analyze your OMS flows to find possible next states, transitions, conditions, and timeouts for any order or state. This capability is especially helpful when you work with complex OMS schemas. You no longer need to manually follow arrows in large diagrams. + +### Working with complex data imports + +AI can analyze, modify, and transform multi-column CSV files correctly. This task normally requires significant manual effort. + +### Sharing prompts across your team + +The SDK includes access to the Spryker prompt library, and you can add your own project-specific prompts. This means your team can reuse effective prompts instead of everyone writing their own. + +### Database queries + +AI can execute read-only database queries to inspect data when debugging issues. + +### Extensible for your project + +You can extend the MCP server by creating custom plugins (to add new tools) and custom prompts. + +## Install the AI Dev SDK + +### Prerequisites + +Ensure that you have a Spryker project with Composer installed. + +### Installation steps + +1. Require the package as a development dependency: + + ```bash + composer require spryker-sdk/ai-dev --dev + ``` + +2. Generate the transfer objects: + + ```bash + console transfer:generate + ``` + +3. Register the console commands in your `ConsoleDependencyProvider`: + + ```php + use SprykerSdk\Zed\AiDev\Communication\Console\GeneratePromptsConsole; + use SprykerSdk\Zed\AiDev\Communication\Console\McpServerConsole; + + protected function getConsoleCommands(Container $container): array + { + ... + if (class_exists(GeneratePromptsConsole::class)) { + $commands[] = new GeneratePromptsConsole(); + } + + if (class_exists(McpServerConsole::class)) { + $commands[] = new McpServerConsole(); + } + ... + } + ``` + +4. Connect the AI Dev SDK to your AI agent. For detailed configuration instructions, see [Configure the AiDev MCP server](/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.html). + +## Next steps + +- [Configure the AiDev MCP server](/docs/dg/dev/ai/ai-dev/ai-dev-mcp-server.html) - Set up the connection to your AI tool +- [AI Dev SDK Overview](/docs/dg/dev/ai/ai-dev/ai-dev-overview.html) - Learn more about the AI Dev SDK features and capabilities diff --git a/docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.md b/docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.md new file mode 100644 index 00000000000..e9f25dd04d0 --- /dev/null +++ b/docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.md @@ -0,0 +1,316 @@ +--- +title: Conversation History +description: Persist and manage multi-turn conversations with conversation history using database storage +last_updated: Feb 19, 2026 +keywords: foundation, ai, conversation history, conversation, context, database, multi-turn, dialogue +template: howto-guide-template +related: + - title: AiFoundation module Overview + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-module.html + - title: Use structured responses with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html + - title: Use AI tools with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html + - title: AI workflow orchestration with state machines + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.html +--- + +This document describes how to use conversation history with the AiFoundation module to maintain conversation context across multiple interactions, enabling multi-turn conversations where the AI can reference previous messages and provide contextually relevant responses. + +Conversation history is persisted in the database using the `spy_ai_conversation_history` table, ensuring conversations are stored durably and can be retrieved at any time. + +## Overview + +Conversation history enables you to maintain persistent conversation context across multiple interactions. Instead of sending isolated prompts, you can build conversational experiences where the AI remembers previous messages and maintains state throughout an extended dialogue. + +The conversation history feature automatically persists all messages in a conversation to the database. When you include a conversation reference in your prompt request, all exchanges are stored in the `spy_ai_conversation_history` table and automatically included in subsequent requests to maintain context. + +## Prerequisites + +- AiFoundation module installed and configured. For details, see [AiFoundation module Overview](/docs/dg/dev/ai/ai-foundation/ai-foundation-module.html). +- Database configured and migrated to include the `spy_ai_conversation_history` table + +## Key concepts + +### Conversation Reference + +A unique identifier for a conversation. All messages in a conversation are stored together under this reference. You can use any string as a conversation reference, such as a customer ID, session ID, or custom identifier. + +### Context window + +The maximum number of tokens that can be stored in a conversation. Default is 50000 tokens. When a conversation exceeds this limit, the oldest messages are automatically pruned to maintain the window size. + +## Configure conversation history + +Configure the context window for conversation history in your AI configuration. + +### Default configuration + +Update your `config/Shared/config_ai.php`: + +```php + [ + 'provider_name' => AiFoundationConstants::PROVIDER_OPENAI, + 'provider_config' => [ + 'api_key' => getenv('OPENAI_API_KEY'), + 'model' => 'gpt-4', + ], + 'system_prompt' => 'You are a helpful customer support assistant.', + 'conversation_history' => [ + 'context_window' => 100000, // Larger context for complex support cases + ], + ], +]; +``` + +Per-configuration settings take precedence over global defaults. If `conversation_history` is not specified for an AI configuration, it falls back to the global `CONVERSATION_HISTORY_CONTEXT_WINDOW` value. + +{% info_block infoBox "Best practice" %} + +Adjust context window based on expected conversation length and token limits of your AI provider. Large context windows provide better conversation history but require more tokens for each AI request. + +{% endinfo_block %} + +## Use conversation history in conversations + +### Basic multi-turn conversation + +To enable conversation history, include a `conversationReference` in your `PromptRequestTransfer`. All messages are automatically persisted and included in future requests: + +```php +setConversationReference($conversationReference) // Enable conversation history + ->setPromptMessage( + (new PromptMessageTransfer())->setContent($userMessage) + ); + + // The AI automatically has access to conversation history + $response = $this->aiFoundationFacade->prompt($promptRequest); + + if ($response->getIsSuccessful() === true) { + return $response->getMessage()->getContent(); + } + + return 'An error occurred processing your request.'; + } +} +``` + +### Manage conversation history + +Access the complete conversation history at any time: + +```php +setConversationHistoryConditions( + (new ConversationHistoryConditionsTransfer()) + ->setConversationReferences([$conversationReference]) + ); + + $conversationHistoryCollectionTransfer = $this->aiFoundationFacade->getConversationHistoryCollection($conversationHistoryCriteriaTransfer); + $conversationHistories = $conversationHistoryCollectionTransfer->getConversationHistories(); + + if ($conversationHistories->count() === 0) { + return []; + } + + $conversationHistoryTransfer = $conversationHistories->offsetGet(0); + $messages = $conversationHistoryTransfer->getMessages(); + + $formattedMessages = []; + foreach ($messages as $message) { + $formattedMessages[] = [ + 'type' => $message->getType(), // 'user', 'assistant', 'tool_call', 'tool_result' + 'content' => $message->getContent(), + ]; + } + + return $formattedMessages; + } + + public function getMultipleConversations(array $conversationReferences): array + { + $conversationHistoryCriteriaTransfer = (new ConversationHistoryCriteriaTransfer()) + ->setConversationHistoryConditions( + (new ConversationHistoryConditionsTransfer()) + ->setConversationReferences($conversationReferences) + ); + + $conversationHistoryCollectionTransfer = $this->aiFoundationFacade->getConversationHistoryCollection($conversationHistoryCriteriaTransfer); + $conversationHistories = $conversationHistoryCollectionTransfer->getConversationHistories(); + + $result = []; + foreach ($conversationHistories as $conversationHistory) { + $result[$conversationHistory->getConversationReference()] = [ + 'conversation_reference' => $conversationHistory->getConversationReference(), + 'message_count' => $conversationHistory->getMessages()->count(), + 'messages' => array_map(function ($message) { + return [ + 'type' => $message->getType(), + 'content' => $message->getContent(), + ]; + }, $conversationHistory->getMessages()->getArrayCopy()), + ]; + } + + return $result; + } +} +``` + +## API reference + +### AiFoundationFacade + +#### prompt() + +Sends a message in a conversation. If `conversationReference` is provided, the message is stored in conversation history and previous messages are automatically included in the AI's context. + +```php +/** + * @param \Generated\Shared\Transfer\PromptRequestTransfer $promptRequest + * @return \Generated\Shared\Transfer\PromptResponseTransfer + */ +public function prompt(PromptRequestTransfer $promptRequest): PromptResponseTransfer +``` + +**PromptRequestTransfer properties for conversation history:** +- `conversationReference` (string, optional): Enable conversation history by providing a unique conversation identifier +- `aiConfigurationName` (string, optional): Configuration name to use, defaults to `AI_CONFIGURATION_DEFAULT` +- `promptMessage` (PromptMessageTransfer, required): The message to send +- `maxRetries` (int, optional): Number of retry attempts on failure + +#### getConversationHistoryCollection() + +Retrieves conversation history collection based on criteria. Allows filtering conversations by conversation IDs. + +```php +/** + * @param \Generated\Shared\Transfer\ConversationHistoryCriteriaTransfer $conversationHistoryCriteriaTransfer + * @return \Generated\Shared\Transfer\ConversationHistoryCollectionTransfer + */ +public function getConversationHistoryCollection( + ConversationHistoryCriteriaTransfer $conversationHistoryCriteriaTransfer +): ConversationHistoryCollectionTransfer +``` + +**ConversationHistoryCriteriaTransfer properties:** +- `conversationHistoryConditions` (ConversationHistoryConditionsTransfer): Filter conditions for the query + - `conversationReferences` (string[]): List of conversation references to retrieve (IN operation). If empty, returns empty collection. + +**Returns:** ConversationHistoryCollectionTransfer containing: +- `conversationHistories` (ConversationHistoryTransfer[]): Array of conversation histories matching the criteria + - Each ConversationHistoryTransfer contains: + - `conversationReference` (string): The conversation reference + - `messages` (PromptMessageTransfer[]): Array of all messages in the conversation with types (user, assistant, tool_call, tool_result), content, and attachments + +## Message types + +Messages stored in conversation history have different types: + +- `user` - Message sent by the user +- `assistant` - Response from the AI +- `tool_call` - A tool invocation initiated by the AI +- `tool_result` - Result of a tool execution + +Tool-related types are only present when using [AI tools](/docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html) with conversation history. + +## Best practices + +### 1. Use meaningful conversation references + +Choose conversation references that align with your business logic: + +```php +// Good: Clear relationship to entity +$conversationReference = "customer_conversation_{$customerId}_{$timestamp}"; +$conversationReference = "support_ticket_{$ticketId}"; + +// Avoid: Generic IDs that are hard to track +$conversationReference = "conv_123"; +``` + +### 2. Manage conversation cleanup + +Implement your own cleanup strategy for old conversations if needed. Unlike Redis-backed storage with automatic expiration, database-persisted conversations remain indefinitely. Consider creating a scheduled task to delete conversations older than a certain date if storage management is important. + +### 3. Handle large conversations + +Monitor context window usage. If approaching limits, start a new conversation. + +### 4. Secure conversation access + +Validate that users can only access their own conversations by filtering conversation references based on user permissions: + +```php +$conversationHistoryCriteriaTransfer = (new ConversationHistoryCriteriaTransfer()) + ->setConversationHistoryConditions( + (new ConversationHistoryConditionsTransfer()) + ->setConversationReferences($userAuthorizedConversationReferences) // Only user's conversations + ); + +$conversationHistoryCollectionTransfer = $this->aiFoundationFacade->getConversationHistoryCollection($conversationHistoryCriteriaTransfer); +``` + +## Limitations + +- Conversation history is stored in the database and requires the `spy_ai_conversation_history` table to be present +- Conversations persist indefinitely in the database; implement your own cleanup strategy if needed +- Very large conversations may approach the context window limit, requiring new conversation references +- Tool invocations and results are included in history and count toward context window + +## Debugging + +Conversation history messages are persisted in the `spy_ai_conversation_history` database table. You can query the database directly to inspect stored conversations and messages for debugging purposes. diff --git a/docs/dg/dev/ai/ai-foundation/ai-foundation-module.md b/docs/dg/dev/ai/ai-foundation/ai-foundation-module.md index 5b37ad722f6..3be3d9dcf20 100644 --- a/docs/dg/dev/ai/ai-foundation/ai-foundation-module.md +++ b/docs/dg/dev/ai/ai-foundation/ai-foundation-module.md @@ -1,13 +1,39 @@ --- -title: Use the AiFoundation module -description: Integrate AI providers into your Spryker application -last_updated: Dec 4, 2025 -keywords: foundation, ai, neuron, prompt, aiconfiguration, openai, anthropic, bedrock, aws, ollama, gemini, deepseek, huggingface, mistral, grok, azure-openai, agent +title: AiFoundation module Overview +description: Integrate AI foundation providers into the Spryker application +last_updated: Feb 19, 2026 +keywords: foundation, ai, neuron, prompt, aiconfiguration, openai, anthropic, bedrock, aws, ollama, gemini, deepseek, huggingface, mistral, grok, azure-openai, agent, chat history, conversation template: howto-guide-template +label: early-access +related: + - title: Use AI tools with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html + - title: Use structured responses with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html + - title: Manage conversation history with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.html + - title: AI workflow orchestration with state machines + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.html --- This document describes how to integrate and use the AiFoundation module to interact with various AI providers in your Spryker application. The AiFoundation module provides a unified interface for working with multiple AI providers, such as OpenAI, Anthropic Claude, AWS Bedrock, and others. +The AiFoundation module uses a Zed-backed architecture where the client provides a simple interface that delegates all processing to the Zed facade. This design enables centralized management of AI configurations, conversation history persistence, and tool execution. + +## Architecture + +The AiFoundation module uses a two-layer architecture: + +- **Client Layer**: Provides a simple `AiFoundationClientInterface` that serves as the entry point for AI interactions +- **Zed Layer**: Contains the `AiFoundationFacade` that handles all business logic including: + - AI configuration resolution + - Vendor adapter plugin delegation + - Conversation history persistence and retrieval + - Tool execution and invocation tracking + - Structured response validation and mapping + +The client delegates all processing to the Zed facade through a request stub, ensuring centralized management of AI operations and database persistence. + ## Install the AiFoundation module 1. Require the package: @@ -300,7 +326,7 @@ The Ollama data is stored in the `./data/tmp/ollama_data` directory, which you s ], ``` -## Use the AiFoundation client +## Use the AiFoundation facade ### Basic usage @@ -311,12 +337,12 @@ namespace Pyz\Zed\YourModule\Business; use Generated\Shared\Transfer\PromptMessageTransfer; use Generated\Shared\Transfer\PromptRequestTransfer; -use Spryker\Client\AiFoundation\AiFoundationClientInterface; +use Spryker\Zed\AiFoundation\Business\AiFoundationFacadeInterface; class YourBusinessModel { public function __construct( - protected AiFoundationClientInterface $aiFoundationClient + protected AiFoundationFacadeInterface $aiFoundationFacade ) { } @@ -327,7 +353,7 @@ class YourBusinessModel (new PromptMessageTransfer())->setContent($userMessage) ); - $response = $this->aiFoundationClient->prompt($promptRequest); + $response = $this->aiFoundationFacade->prompt($promptRequest); return $response->getMessage()->getContent(); } @@ -345,7 +371,7 @@ $promptRequest = (new PromptRequestTransfer()) (new PromptMessageTransfer())->setContent('Explain Spryker modules') ); -$response = $this->aiFoundationClient->prompt($promptRequest); +$response = $this->aiFoundationFacade->prompt($promptRequest); ``` ### Multiple configurations example @@ -399,6 +425,10 @@ This transfer contains the request data for AI interaction: - `promptMessage` (PromptMessage, required): The message to send to the AI - `aiConfigurationName` (string, optional): The configuration name to use. If not provided, uses `AI_CONFIGURATION_DEFAULT` +- `structuredMessage` (object, optional): A Transfer object that defines the expected response structure for structured responses +- `toolSetName` (string[], optional): Array of tool set names to make available to the AI. For details, see [Use AI tools with the AiFoundation module](/docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html) +- `conversationReference` (string, optional): Unique identifier for multi-turn conversations. When provided, the message is persisted in conversation history and previous messages are automatically included in the request context. For details, see [Manage conversation history with the AiFoundation module](/docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.html) +- `maxRetries` (int, optional): Maximum number of retry attempts for failed requests. Default is 0 ### PromptMessage @@ -413,6 +443,9 @@ This transfer represents a message in the conversation: This transfer contains the AI response: - `message` (PromptMessage): The AI's response message +- `isSuccessful` (bool): Whether the request was successful +- `errors` (array, optional): Array of error messages if the request failed +- `toolInvocations` (ToolInvocation[], optional): Array of tool invocations made by the AI during response generation ### Attachment @@ -423,21 +456,21 @@ This transfer represents a file or image attachment: - `contentType` (string): Content type format (use `AiFoundationConstants::ATTACHMENT_CONTENT_TYPE_URL` or `ATTACHMENT_CONTENT_TYPE_BASE64`) - `mediaType` (string): MIME type (for example, `image/png`, `application/pdf`) -## Roadmap - -The following capabilities are planned for future releases of the AiFoundation module: +### ToolInvocation -### Structured response +This transfer contains information about a tool invocation made by the AI: -Support for requesting and parsing structured responses from AI providers. This will enable AI models to return data in predefined formats (for example, JSON schemas), making it easier to integrate AI responses directly into application workflows and business logic. +- `name` (string): The name of the tool that was invoked +- `arguments` (array): The arguments passed to the tool +- `result` (string): The result returned by the tool execution -### Tool call +### StructuredMessage -Implementation of function calling capabilities, allowing AI models to invoke specific tools or functions during the response generation. This enables more interactive and dynamic AI interactions where the model can query external systems, perform calculations, or execute custom business logic. +Define the expected structure (`structuredMessage` property) of the AI response for structured responses. This is a Spryker Transfer object that you can customize based on your requirements. -### Chat history capabilities +### Conversation History -Support for maintaining conversation context across multiple interactions. This will enable multi-turn conversations where the AI can reference previous messages, maintain state, and provide more contextually relevant responses throughout an extended dialogue. +Conversation history is created by `conversationReference` and persisted in the database using the `spy_ai_conversation_history` table. When you provide a `conversationReference` in a prompt request, all messages are automatically stored and previous messages are retrieved to maintain conversation context. For complete details, see [Manage conversation history with the AiFoundation module](/docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.html). ## About NeuronAI framework diff --git a/docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.md b/docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.md new file mode 100644 index 00000000000..0461a8a4286 --- /dev/null +++ b/docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.md @@ -0,0 +1,617 @@ +--- +title: Use AI tools with the AiFoundation module +description: Extend AI capabilities by providing custom tools that AI models can invoke during conversations +last_updated: Feb 19, 2026 +keywords: foundation, ai, tools, function calling, tool sets, plugins, openai, anthropic, prompt, agent +template: howto-guide-template +related: + - title: AiFoundation module Overview + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-module.html + - title: Use structured responses with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html + - title: AI workflow orchestration with state machines + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.html +--- + +This document describes how to create and use AI tools with the AiFoundation module to extend AI capabilities by providing custom functions that AI models can invoke during conversations. + +## Overview + +AI tool support enables large language models to call custom functions during conversations. Instead of only generating text, AI models can invoke your application's functionality, retrieve data, perform calculations, or trigger business logic. This creates more powerful and interactive AI-powered features. + +The AI model decides when to call tools based on the conversation context. The Zed facade executes tools with appropriate arguments, receives the results, and incorporates them into the response. The AiFoundation module handles the complete tool execution flow automatically. + +## Prerequisites + +- AiFoundation module installed and configured. For details, see [AiFoundation module Overview](/docs/dg/dev/ai/ai-foundation/ai-foundation-module.html). +- Configured AI provider that supports tool calling (OpenAI, Anthropic Claude) + +{% info_block warningBox "Provider compatibility" %} + +Not all AI providers support tool calling. Ensure your configured provider supports this feature. OpenAI and Anthropic Claude have native support for function calling. + +{% endinfo_block %} + +## Use cases + +AI tools are ideal for scenarios where AI needs to interact with your application: + +### Data retrieval + +Enable AI to fetch data from your system: + +```php +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolPluginInterface; +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolParameter; + +// AI can call this tool to get product information +class GetProductInfoTool implements ToolPluginInterface +{ + public const NAME = 'get_product_info'; + + public function getName(): string + { + return static::NAME; + } + + public function getDescription(): string + { + return 'Retrieves product information by SKU'; + } + + public function getParameters(): array + { + return [ + new ToolParameter( + name: 'sku', + type: 'string', + description: 'The product SKU to retrieve information for', + isRequired: true + ), + ]; + } + + public function execute(...$arguments): mixed + { + $sku = $arguments['sku'] ?? null; + $product = $this->getProductClient() + ->getProductBySku($sku); + + return json_encode([ + 'name' => $product->getName(), + 'price' => $product->getPrice(), + 'availability' => $product->getAvailability(), + ]); + } +} +``` + +### Calculations and processing + +Provide specialized calculations: + +```php +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolPluginInterface; +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolParameter; + +// AI can call this tool to calculate shipping costs +class CalculateShippingTool implements ToolPluginInterface +{ + public const NAME = 'calculate_shipping'; + + public function __construct( + private ShippingCalculatorInterface $shippingCalculator + ) { + } + + public function getName(): string + { + return static::NAME; + } + + public function getDescription(): string + { + return 'Calculates shipping cost based on weight, destination, and shipping method'; + } + + public function getParameters(): array + { + return [ + new ToolParameter( + name: 'weight', + type: 'number', + description: 'Package weight in kilograms', + isRequired: true + ), + new ToolParameter( + name: 'destination', + type: 'string', + description: 'Destination country code (e.g., US, DE, FR)', + isRequired: true + ), + new ToolParameter( + name: 'method', + type: 'string', + description: 'Shipping method: standard, express, or overnight', + isRequired: false + ), + ]; + } + + public function execute(...$arguments): mixed + { + $weight = $arguments['weight'] ?? 0; + $destination = $arguments['destination'] ?? ''; + $method = $arguments['method'] ?? 'standard'; + + $cost = $this->shippingCalculator + ->calculate($weight, $destination, $method); + + return (string) $cost; + } +} +``` + +### Business logic execution + +Allow AI to trigger business operations: + +```php +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolPluginInterface; +use Spryker\Zed\AiFoundation\Dependency\Tools\ToolParameter; + +// AI can call this tool to create support tickets +class CreateSupportTicketTool implements ToolPluginInterface +{ + public const NAME = 'create_support_ticket'; + + public function __construct( + private SupportFacadeInterface $supportFacade + ) { + } + + public function getName(): string + { + return static::NAME; + } + + public function getDescription(): string + { + return 'Creates a support ticket with title, description, and priority'; + } + + public function getParameters(): array + { + return [ + new ToolParameter( + name: 'title', + type: 'string', + description: 'Brief title summarizing the issue', + isRequired: true + ), + new ToolParameter( + name: 'description', + type: 'string', + description: 'Detailed description of the issue or request', + isRequired: true + ), + new ToolParameter( + name: 'priority', + type: 'string', + description: 'Priority level: high, medium, or low', + isRequired: false + ), + ]; + } + + public function execute(...$arguments): mixed + { + $title = $arguments['title'] ?? ''; + $description = $arguments['description'] ?? ''; + $priority = $arguments['priority'] ?? 'medium'; + + $ticketId = $this->supportFacade + ->createTicket($title, $description, $priority); + + return sprintf('Ticket created with ID: %s', $ticketId); + } +} +``` + +## Create tool sets + +Tool sets group related tools together. Create a tool set class that implements `ToolSetPluginInterface`. Tool sets are Zed-layer plugins registered in the Zed `AiFoundationDependencyProvider`. + +```php + + */ + protected function getAiToolSetPlugins(): array + { + return [ + new CustomerServiceToolSet(), + new ProductToolSet(), + new OrderToolSet(), + ]; + } +} +``` + +## Use tools in AI requests + +Specify which tool sets to make available to the AI by adding tool set names to your prompt request: + +```php +setAiConfigurationName('openai') + ->setPromptMessage( + (new PromptMessageTransfer())->setContent($customerMessage) + ) + ->addToolSetName(CustomerServiceToolSet::NAME) + ->addToolSetName(OrderToolSet::NAME) + ->setMaxRetries(2); + + $promptResponse = $this->aiFoundationFacade->prompt($promptRequest); + + if ($promptResponse->getIsSuccessful() !== true) { + return 'I apologize, but I encountered an error processing your request.'; + } + + return $promptResponse->getMessage()->getContent(); + } +} +``` + +The AI model has access to all tools from all specified tool sets. + +### Example: Support ticket creation via AI + +Here is a complete example showing how the AI can automatically create support tickets using the CreateSupportTicketTool: + +```php +setPromptMessage( + (new PromptMessageTransfer())->setContent($customerMessage) + ) + ->addToolSetName(CustomerServiceToolSet::NAME) // Includes CreateSupportTicketTool + ->setMaxRetries(2); + + $promptResponse = $this->aiFoundationFacade->prompt($promptRequest); + + if ($promptResponse->getIsSuccessful() !== true) { + throw new Exception('Failed to process customer message'); + } + + // Check if the AI invoked the create support ticket tool + foreach ($promptResponse->getToolInvocations() as $toolInvocation) { + if ($toolInvocation->getName() === 'create_support_ticket') { + $ticketId = $toolInvocation->getResult(); + echo sprintf('Support ticket created: %s', $ticketId); + } + } + + // Send the AI response to the customer + $response = $promptResponse->getMessage()->getContent(); + echo $response; + } +} +``` + +In this example, when the customer sends a message like "I need to report a critical bug", the AI can: +1. Understand the customer's intent +2. Extract the ticket title, description, and priority +3. Invoke the `create_support_ticket` tool through the facade +4. Receive the ticket ID from the tool result +5. Incorporate the ticket information into its response to the customer + +## Handle tool call results + +Tool calls are automatically executed and their results are included in the response: + +```php +$promptResponse = $this->aiFoundationFacade->prompt($promptRequest); + +if ($promptResponse->getIsSuccessful() === true) { + // Get the final AI response + $finalMessage = $promptResponse->getMessage()->getContent(); + + // Access tool invocation information + foreach ($promptResponse->getToolInvocations() as $toolInvocation) { + $toolName = $toolInvocation->getName(); + $toolArguments = $toolInvocation->getArguments(); + $toolResult = $toolInvocation->getResult(); + + // Log or process tool invocations + $this->logger->info(sprintf( + 'AI invoked tool "%s" with arguments: %s. Result: %s', + $toolName, + json_encode($toolArguments), + $toolResult + )); + } +} +``` + +### Tool call flow + +The complete flow when tools are used: + +1. AI receives the prompt and available tools +2. AI decides to call one or more tools +3. AiFoundation automatically executes the tools with provided arguments +4. Tool results are sent back to the AI +5. AI incorporates results and may call additional tools +6. Process continues until AI provides final response +7. Final response and all tool invocations are returned in `ToolInvocationTransfer` objects + +## Best practices + +### Provide clear tool descriptions + +Write descriptions that help the AI understand when and how to use tools: + +```php +// Good: Clear, specific description +public function getDescription(): string +{ + return 'Searches for products by name, category, or SKU. Returns product name, price, and availability status.'; +} + +// Avoid: Vague description +public function getDescription(): string +{ + return 'Product search'; +} +``` + +### Design focused tools + +Create tools with single, well-defined purposes: + +```php +// Good: Focused tool +class GetOrderStatusTool implements ToolPluginInterface +{ + public const NAME = 'get_order_status'; + + public function getName(): string + { + return static::NAME; + } +} + +// Avoid: Tool that does too much +class ManageOrdersTool implements ToolPluginInterface +{ + public function execute(...$arguments): mixed + { + $action = $arguments['action']; // create, update, cancel, status... + // Too many responsibilities + } +} +``` + +### Return structured data + +Return JSON-encoded data for complex results: + +```php +public function execute(...$arguments): mixed +{ + $order = $this->getOrderDetails($arguments['order_id']); + + return json_encode([ + 'order_id' => $order->getOrderId(), + 'status' => $order->getStatus(), + 'total' => $order->getTotal(), + 'items' => $order->getItems(), + 'created_at' => $order->getCreatedAt(), + ]); +} +``` + +### Validate tool arguments + +Always validate arguments before execution: + +```php +public function execute(...$arguments): mixed +{ + $orderId = $arguments['order_id'] ?? null; + + if ($orderId === null || !is_string($orderId)) { + return json_encode([ + 'error' => 'Invalid order_id parameter', + ]); + } + + // Proceed with execution +} +``` + +### Handle errors gracefully + +Return error information in a consistent format: + +```php +public function execute(...$arguments): mixed +{ + try { + $result = $this->performOperation($arguments); + + return json_encode([ + 'success' => true, + 'data' => $result, + ]); + } catch (\Exception $e) { + return json_encode([ + 'success' => false, + 'error' => $e->getMessage(), + 'error_code' => $e->getCode(), + ]); + } +} +``` + +## Security considerations + +- Validate permissions. Always check user permissions before executing sensitive operations; +- Sanitize inputs. Sanitize all inputs before using them in queries or operations; + +## Limitations + +### Provider-specific constraints + +Different AI providers have varying limitations: + +- Maximum number of tools per request +- Maximum tool description length +- Supported parameter types +- Tool execution timeout limits + +### Performance considerations + +Tool execution adds latency to AI requests: + +- Each tool call requires additional round-trip to the AI provider +- Complex tools may take time to execute +- Multiple sequential tool calls increase total response time + +Consider these factors when designing time-sensitive features. + +### Token usage + +Tool definitions and results consume tokens from your AI provider quota. +Monitor token consumption when using tools extensively. + +## Related documentation + +- [AiFoundation module Overview](/docs/dg/dev/ai/ai-foundation/ai-foundation-module.html) +- [Use structured responses with the AiFoundation module](/docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html) \ No newline at end of file diff --git a/docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.md b/docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.md new file mode 100644 index 00000000000..d7c80810191 --- /dev/null +++ b/docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.md @@ -0,0 +1,394 @@ +--- +title: Use structured responses with the AiFoundation module +description: Request and receive structured data from AI providers using Spryker Transfer objects +last_updated: Feb 19, 2026 +keywords: foundation, ai, structured response, transfer, schema, json, openai, anthropic, prompt, validation +template: howto-guide-template +related: + - title: AiFoundation module Overview + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-module.html + - title: Use AI tools with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html + - title: AI workflow orchestration with state machines + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.html + - title: Transfer objects + link: /docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/create-use-and-extend-the-transfer-objects.html +--- + +This document describes how to use structured responses with the AiFoundation module to receive validated, type-safe data from AI providers in the format of Spryker Transfer objects. + +## Overview + +Structured responses enable AI providers to return data in a predefined schema defined by Spryker Transfer objects. Instead of receiving free-form text, you can request the AI to return data that matches your Transfer object structure, making it easier to integrate AI responses directly into your application workflows and business logic. + +The Zed facade handles structured response validation and automatically maps the data to your Transfer object, ensuring type safety and data integrity. The client provides a simple interface to request structured responses, delegating all processing to the Zed backend. + +## Prerequisites + +- AiFoundation module installed and configured. For details, see [AiFoundation module Overview](/docs/dg/dev/ai/ai-foundation/ai-foundation-module.html). +- Transfer objects generated with `console transfer:generate` +- Configured AI provider that supports structured responses (OpenAI, Anthropic Claude) + +{% info_block warningBox "Provider compatibility" %} + +Not all AI providers support structured responses. Ensure your configured provider supports this feature. OpenAI and Anthropic Claude have native support for structured outputs. + +{% endinfo_block %} + +## Use cases + +Structured responses are ideal for scenarios where you need predictable, validated data from AI: + +### Product data extraction + +Extract structured product information from unstructured descriptions: + +```php +// Request AI to extract product attributes +$productDataTransfer = new ProductDataTransfer(); +$response = $this->aiFoundationFacade->prompt( + (new PromptRequestTransfer()) + ->setPromptMessage( + (new PromptMessageTransfer())->setContent($rawProductDescription) + ) + ->setStructuredMessage($productDataTransfer) +); + +/** @var \Generated\Shared\Transfer\ProductDataTransfer $extractedData */ +$extractedData = $response->getStructuredMessage(); +$sku = $extractedData->getSku(); +$price = $extractedData->getPrice(); +``` + +### Customer intent classification + +Classify customer inquiries into predefined categories: + +```php +// Request AI to categorize customer message +$categoryTransfer = new CustomerIntentTransfer(); +$response = $this->aiFoundationFacade->prompt( + (new PromptRequestTransfer()) + ->setPromptMessage( + (new PromptMessageTransfer())->setContent($customerMessage) + ) + ->setStructuredMessage($categoryTransfer) +); + +/** @var \Generated\Shared\Transfer\CustomerIntentTransfer $intent */ +$intent = $response->getStructuredMessage(); +$category = $intent->getCategory(); // 'support', 'sales', 'feedback' +$priority = $intent->getPriority(); // 'high', 'medium', 'low' +``` + +### Content generation with metadata + +Generate content with structured metadata: + +```php +// Request AI to generate content with SEO metadata +$contentTransfer = new ContentWithMetadataTransfer(); +$response = $this->aiFoundationFacade->prompt( + (new PromptRequestTransfer()) + ->setPromptMessage( + (new PromptMessageTransfer())->setContent('Write a product description for ' . $productName) + ) + ->setStructuredMessage($contentTransfer) +); + +/** @var \Generated\Shared\Transfer\ContentWithMetadataTransfer $content */ +$content = $response->getStructuredMessage(); +$description = $content->getDescription(); +$keywords = $content->getKeywords(); // array of strings +$metaDescription = $content->getMetaDescription(); +``` + +## Define Transfer objects for structured responses + +Define Transfer objects in XML that represent the structure you expect from the AI provider. + +### Example: Product analysis Transfer + +Create a Transfer definition file `src/Pyz/Shared/YourModule/Transfer/your_module.transfer.xml`: + +```xml + + + + + + + + + + + + + + + + + + + +``` + +Generate the Transfer classes: + +```bash +console transfer:generate +``` + +This creates `ProductAnalysisTransfer` and `ProductSentimentTransfer` classes in `src/Generated/Shared/Transfer/`. + +## Request structured responses + +Use the `PromptRequestTransfer.structuredMessage` property to specify the Transfer object schema. + +```php +setAiConfigurationName('openai') + ->setPromptMessage( + (new PromptMessageTransfer())->setContent( + sprintf('Analyze this product: %s', $productDescription) + ) + ) + ->setStructuredMessage(new ProductAnalysisTransfer()) + ->setMaxRetries(2); + + $promptResponse = $this->aiFoundationFacade->prompt($promptRequest); + + if ($promptResponse->getIsSuccessful() !== true) { + // Handle errors + $errors = $promptResponse->getErrors(); + throw new AnalysisFailedException('Failed to analyze product'); + } + + /** @var \Generated\Shared\Transfer\ProductAnalysisTransfer $analysis */ + $analysis = $promptResponse->getStructuredMessage(); + + return $analysis; + } +} +``` + +## Handle structured responses + +The AI Foundation validates and maps the response to your Transfer object automatically. + +### Success handling + +When `PromptResponseTransfer.isSuccessful` is `true`, the structured response is available: + +```php +$promptResponse = $this->aiFoundationFacade->prompt($promptRequest); + +if ($promptResponse->getIsSuccessful() === true) { + /** @var \Generated\Shared\Transfer\ProductAnalysisTransfer $analysis */ + $analysis = $promptResponse->getStructuredMessage(); + + // The type matches the Transfer you provided in the request + // Access properties with full type safety + $productName = $analysis->getProductName(); // string + $features = $analysis->getFeatures(); // array + $sentiment = $analysis->getSentiment(); // ProductSentimentTransfer|null + + // Work with nested Transfer objects + if ($sentiment !== null) { + $sentimentScore = $sentiment->getScore(); // float + $sentimentLabel = $sentiment->getLabel(); // string + } +} +``` + +### Retry configuration + +Configure retry attempts for improved reliability: + +```php +$promptRequest = (new PromptRequestTransfer()) + ->setPromptMessage($message) + ->setStructuredMessage($transfer) + ->setMaxRetries(3); // Retry up to 3 times on failure +``` + +The facade automatically retries failed requests up to `maxRetries` times before returning with `isSuccessful = false`. + +## Transfer object property types + +Structured responses support all Spryker Transfer property types: + +### Scalar types + +```xml + + + + + + +``` + +### Arrays + +```xml + + + + +``` + +### Nested Transfer objects + +```xml + + + + + + + + + + + + + + + +``` + +### Collections + +For collections of Transfer objects, use the array notation with `[]`: + +```xml + + + + + + + + +``` + +In code, collections are accessed as `ArrayObject`: + +```php +/** @var \Generated\Shared\Transfer\AnalysisResultTransfer $result */ +$result = $promptResponse->getStructuredMessage(); + +foreach ($result->getProducts() as $product) { + echo $product->getName(); // Each element is ProductDataTransfer +} +``` + +## Best practices + +### Design focused Transfer schemas + +Create Transfer objects specifically for AI responses rather than reusing business logic Transfers: + +```xml + + + + + + + + + + + + + +``` + +### Provide clear property descriptions + +Use descriptions to guide the AI provider: + +```xml + + + + + +``` + +### Validate AI responses + +Always check `isSuccessful` and validate critical data: + +```php +if ($promptResponse->getIsSuccessful() !== true) { + return $this->handleFailure($promptResponse->getErrors()); +} + +/** @var \Generated\Shared\Transfer\ProductAnalysisTransfer $analysis */ +$analysis = $promptResponse->getStructuredMessage(); + +// Validate critical fields +if ($analysis->getPrice() === null || $analysis->getPrice() <= 0) { + throw new InvalidPriceException('AI returned invalid price'); +} +``` + +### Use appropriate retry counts + +Configure retries based on request importance: + +```php +// Critical business logic: more retries +$promptRequest->setMaxRetries(3); + +// Non-critical features: fewer retries +$promptRequest->setMaxRetries(1); +``` + +### Avoid deeply nested Transfer objects + +Prefer flat Transfer structures over deeply nested ones for AI responses. Deeply nested structures increase complexity and make null handling cumbersome. + +## Limitations + +### Provider-specific constraints + +Different AI providers have varying limitations on structured responses: + +- Maximum schema complexity +- Supported data types +- Nesting depth limits +- Array size limits + +Test with your specific provider to understand constraints. + +### Performance considerations + +Structured responses may have higher latency than regular text responses due to validation overhead. Consider this when implementing real-time features. + +### Schema evolution + +Changes to Transfer schemas may affect AI responses. Test thoroughly when modifying Transfer definitions used in production AI requests. \ No newline at end of file diff --git a/docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.md b/docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.md new file mode 100644 index 00000000000..3823e6d48ce --- /dev/null +++ b/docs/dg/dev/ai/ai-foundation/ai-foundation-workflow-state-machine.md @@ -0,0 +1,365 @@ +--- +title: AI workflow orchestration with state machines +description: Learn how to orchestrate multi-step, multi-agent AI workflows using Spryker state machines +last_updated: Feb 19, 2026 +keywords: ai, workflow, state-machine, orchestration, multi-agent, process, command, condition, structured-response +template: howto-guide-template +label: early-access +related: + - title: AiFoundation module overview + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-module.html + - title: Use AI tools with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-tool-support.html + - title: Use structured responses with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-transfer-response.html + - title: Manage conversation history with the AiFoundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-conversation-history.html +--- + +This guide shows you how to build multi-step, multi-agent AI workflows using Spryker state machines. By combining state machines with the AiFoundation module, you can orchestrate complex AI processes where agents execute tasks, make decisions based on results, and trigger subsequent steps. + +## Overview + +Spryker state machines provide a powerful framework for orchestrating AI workflows: + +- **States**: Represent stages in your workflow (for example, "analysis_done", "awaiting_review") +- **Events**: Trigger state transitions (for example, "analyze_agent" executes an AI call) +- **Commands**: Execute AI operations, tool calls, or business logic +- **Conditions**: Evaluate workflow item data to decide the next state (for example, "is_successful?") +- **Context data**: Passed through the workflow to accumulate results and drive decisions + +This creates a directed graph where **conditions act as edges** determining the next state based on AI-generated outputs. + +## Key concepts + +- **Context data**: A key-value array that flows through the state machine, allowing commands to read input and write results for conditions to evaluate +- **Structured response**: AI responses converted to structured data, enabling deterministic decision-making +- **Command plugins**: Execute AI calls and update context with results +- **Condition plugins**: Evaluate context data to determine workflow progression +- **Process name**: Links XML definition to PHP configuration and state machine execution + +## Create a workflow process example + +### 1. Define the state machine XML + +**Example: IntelligentTask01** + +Create `config/Zed/StateMachine/AiWorkflow/IntelligentTask01.xml`: + +```xml + + + + + + + + + + + + + + + + + + + + + + new + analysis done + analyze agent + + + + + analysis done + analysis successful + pass + + + + + analysis done + analysis failed + pass + + + + + analysis failed + new + restart + + + + +``` + +![State machine diagram for the IntelligentTask01 workflow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-foundation/intel-task-01.png) + +### 2. Create command plugins + +**Command plugin example: Analyze data with Oryx Agent** + +```php +loadWorkflowItem($stateMachineItemTransfer); + + $this->executeAnalysis($aiWorkflowItemTransfer); + + $request = (new AiWorkflowItemCollectionRequestTransfer()) + ->setIsTransactional(true) + ->addAiWorkflowItem($aiWorkflowItemTransfer); + + $this->getAiFoundationFacade()->updateAiWorkflowItemCollection($request); + } + + protected function loadWorkflowItem( + StateMachineItemTransfer $stateMachineItemTransfer + ): AiWorkflowItemTransfer { + $idAiWorkflowItem = $stateMachineItemTransfer->getIdentifierOrFail(); + + $aiWorkflowItemConditionsTransfer = (new AiWorkflowItemConditionsTransfer()) + ->addAiWorkflowItemId($idAiWorkflowItem); + + $aiWorkflowItemCriteriaTransfer = (new AiWorkflowItemCriteriaTransfer()) + ->setAiWorkflowItemConditions($aiWorkflowItemConditionsTransfer); + + $aiWorkflowItemCollection = $this->getAiFoundationFacade() + ->getAiWorkflowItemCollection($aiWorkflowItemCriteriaTransfer); + + return $aiWorkflowItemCollection->getAiWorkflowItems()->offsetGet(0); + } + + protected function executeAnalysis(AiWorkflowItemTransfer $aiWorkflowItemTransfer): void + { + $contextData = $aiWorkflowItemTransfer->getContextData(); + $promptMessage = $contextData['prompt'] ?? 'Please analyze this data.'; + + $promptRequestTransfer = (new PromptRequestTransfer()) + ->setPromptMessage($promptMessage); + + $promptResponseTransfer = $this->getAiFoundationFacade()->prompt($promptRequestTransfer); + + $contextData['analysis_result'] = $promptResponseTransfer->getMessage(); + $contextData['success'] = $promptResponseTransfer->getIsSuccessful(); + $contextData['analyzed_at'] = time(); + + $aiWorkflowItemTransfer->setContextData($contextData); + } +} +``` + +### 3. Create condition plugins + +**Condition plugin example: Check Oryx Agent success flag** + +```php +loadWorkflowItem($stateMachineItemTransfer); + + // Read success flag set by command + $contextData = $aiWorkflowItemTransfer->getContextData(); + return $contextData['success'] ?? false; + } +} +``` + +### 4. Register plugins in AiFoundation dependency provider + +```php + new OryxAgentAnalyzeCommandPlugin(), + ]; + } + + protected function getAiWorkflowConditionPlugins(): array + { + return [ + 'OryxAgent/Success' => new OryxAgentSuccessConditionPlugin(), + ]; + } +} +``` + +### 5. Configure active processes + +Create or update `src/Pyz/Zed/AiFoundation/AiFoundationConfig.php`: + +```php + 'new', + ]; + } +} +``` + +### 6. Enable state machine handler + +Update `src/Pyz/Zed/StateMachine/StateMachineDependencyProvider.php`: + +```php + 'check-ai-workflow-conditions', + 'command' => '$PHP_BIN vendor/bin/console state-machine:check-condition AiWorkflow', + 'schedule' => '* * * * *', + 'enable' => true, +]; + +$jobs[] = [ + 'name' => 'check-ai-workflow-timeouts', + 'command' => '$PHP_BIN vendor/bin/console state-machine:check-timeout AiWorkflow', + 'schedule' => '* * * * *', + 'enable' => true, +]; + +$jobs[] = [ + 'name' => 'clear-state-machine-locks', + 'command' => '$PHP_BIN vendor/bin/console state-machine:clear-locks', + 'schedule' => '0 6 * * *', + 'enable' => true, +]; +``` + +### 8. Trigger a workflow with state machine + +To start a workflow, create a workflow item with initial context data and trigger the state machine for it. + +**Create a workflow item and trigger the state machine:** + +```php +setIsTransactional(true) + ->addAiWorkflowItem( + (new AiWorkflowItemTransfer())->setContextData([ + 'prompt' => 'Analyze this data.', + 'status' => 'initialized', + ]), + ); + +$response = $this->aiFoundationFacade->createAiWorkflowItemCollection($request); +$workflowItem = $response->getAiWorkflowItems()->offsetGet(0); + +// 2. Trigger the state machine for the newly created item +$processTransfer = (new StateMachineProcessTransfer()) + ->setProcessName('IntelligentTask01') + ->setStateMachineName(AiFoundationConstants::AI_WORKFLOW_STATE_MACHINE_NAME); + +$this->stateMachineFacade->triggerForNewStateMachineItem($processTransfer, $workflowItem->getIdAiWorkflowItem()); +``` + +**Trigger a manual event:** + +```php +setIdentifier($workflowItem->getIdAiWorkflowItem()) + ->setStateMachineName(AiFoundationConstants::AI_WORKFLOW_STATE_MACHINE_NAME) + ->setProcessName('IntelligentTask01'); + +$this->stateMachineFacade->triggerEvent('restart', $stateMachineItemTransfer); +``` + +## Multi-agent orchestration patterns + +There are many possible patterns for multi-agent orchestration. The following are a couple of examples implemented using the Spryker AiWorkflow state machine. + +### Multi-agent routing workflow + +![Multi-agent routing workflow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-foundation/MultiAgentOrchestration01.png) + +### Multi-agent supervision workflow + +![Multi-agent supervision workflow](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/ai-foundation/SupervisorLoop01.png) + +## Best practices + +- **Keep context simple**: Store only the data that conditions need to evaluate the next step and that subsequent commands need to process +- **Use structured responses**: Convert AI responses to structured data before storing in context +- **Name explicitly**: Use descriptive command and condition names matching the process name +- **Document context schema**: Define what keys each command and condition expects in context data diff --git a/docs/dg/dev/architecture/api-platform.md b/docs/dg/dev/architecture/api-platform.md index 61917532c02..10af0bdaa8d 100644 --- a/docs/dg/dev/architecture/api-platform.md +++ b/docs/dg/dev/architecture/api-platform.md @@ -1,11 +1,15 @@ --- title: API Platform description: Spryker's API Platform integration provides schema-based API resource generation with automatic OpenAPI documentation and the integration of the API Platform Bundle. -last_updated: Nov 24, 2025 +last_updated: Feb 25, 2026 template: concept-topic-template related: - title: How to integrate API Platform link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html + - title: API Platform Configuration + link: docs/dg/dev/architecture/api-platform/configuration.html + - title: Relationships + link: docs/dg/dev/architecture/api-platform/relationships.html - title: Dependency Injection link: docs/dg/dev/architecture/dependency-injection.html --- @@ -26,14 +30,6 @@ API Platform is a framework for building modern APIs based on web standards and Read more about the API Platform project at [api-platform.com](https://api-platform.com/). -{% info_block warningBox "CodeBucket support" %} - -Currently, the API-Platform integration does not support code buckets. When defining resources, use only the Core and Project layers. - -Code bucket support is planned for future releases. - -{% endinfo_block %} - ## Architecture overview ### Resource generation workflow @@ -346,7 +342,7 @@ API Platform generates interactive OpenAPI documentation: - Swagger UI at the root URL `/` for example `http://glue-backend.eu.spryker.local/` -You can disable this interface in production environments by configuring the `api_platform.enable_docs` setting in your configuration files. +You can disable this interface in production environments by configuring the settings in your `api_platform.php` configuration file. For details, see [Disable Swagger UI](/docs/dg/dev/architecture/api-platform/configuration.html#disable-swaggerui-in-production). ### Built-in validation @@ -401,6 +397,28 @@ operations: Each operation can have specific validation rules and security settings. +### Relationships + +Include related resources via the `?include=` query parameter: + +```yaml +includes: + - relationshipName: addresses + targetResource: CustomersAddresses + uriVariableMappings: + customerReference: customerReference +``` + +Request: + +```markdown +GET /customers/customer--35?include=addresses +``` + +Response includes both the customer and related addresses in JSON:API format. No provider code changes required - relationships work automatically through decoration. + +For detailed information, see [Relationships](/docs/dg/dev/architecture/api-platform/relationships.html). + ## Performance ### Cache warming @@ -446,11 +464,15 @@ For detailed implementation guides: - [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) - Setup and configuration - [How to migrate to API Platform](/docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.html) - Migrate endpoints from Glue API +- [API Platform Configuration](/docs/dg/dev/architecture/api-platform/configuration.html) - Configure API Platform settings - [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating your first resource -- [Schemas and Resource Generation](/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html) - Schema syntax reference +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Resource Schemas +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Validation Schemas +- [CodeBucket Support](/docs/dg/dev/architecture/api-platform/code-buckets.html) - Region-specific resources - [Troubleshooting API Platform](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues ## Next steps - [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) +- [CodeBucket Support in API Platform](/docs/dg/dev/architecture/api-platform/code-buckets.html) - [API Platform official documentation](https://api-platform.com/docs/) diff --git a/docs/dg/dev/architecture/api-platform/code-buckets.md b/docs/dg/dev/architecture/api-platform/code-buckets.md new file mode 100644 index 00000000000..7732597d84b --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/code-buckets.md @@ -0,0 +1,665 @@ +--- +title: CodeBucket Support in API Platform +description: Learn how to create and use CodeBucket-specific API resources in Spryker. +last_updated: Jan 8, 2026 +template: concept-topic-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html +--- + +This document explains how to create and use CodeBucket-specific API resources in API Platform. + +## Overview + +CodeBucket support enables API Platform to serve different resource variants based on the runtime `APPLICATION_CODE_BUCKET` environment constant. This allows you to maintain Code Bucket-specific API resources without requiring separate container compilations for each Code Bucket. + +### Use cases + +Use CodeBucket resources when you need: + +- **Code Bucket-specific properties**: EU-specific GDPR fields, tax rates, compliance data +- **Code Bucket-specific validation**: Different validation rules per Code Bucket or country +- **Localized business logic**: Country-specific processing requirements + +### Key benefits + +- **Single container**: Compile once, serve hundreds of CodeBuckets +- **Runtime resolution**: Automatic selection of correct resource variant +- **Graceful fallback**: Base resources used when CodeBucket variant doesn't exist +- **No duplication**: Share common logic while extending for specific needs + +## How CodeBucket resolution works + +### Architecture overview + +API Platform uses a decorator pattern to intercept resource resolution and select the appropriate CodeBucket variant at runtime: + +```MARKDOWN +Request → Symfony Routing → API Platform + ↓ + CodeBucket Decorators + ↓ + ┌──────────────────┴──────────────────┐ + │ │ + Resource Class Resolver Resource Name Collection Factory + (Runtime resolution) (Compile-time filtering) + │ │ + └──────────────────┬──────────────────┘ + ↓ + Selected Resource Variant + (Base or CodeBucket-specific) +``` + +### Runtime resolution flow + +```MARKDOWN +1. Request: GET glue-backend.eu.spryker.local/stores + APPLICATION_CODE_BUCKET = 'EU' + +2. CodeBucketResourceNameCollectionFactory + → Filters resource collection at compile time + → Includes only EU variants or base resources (no conflicts) + +3. CodeBucketResourceClassResolver + → Reads APPLICATION_CODE_BUCKET = 'EU' + → Base class: StoresBackendResource + → Builds variant name: StoresEUBackendResource + → Checks: class_exists('Generated\Api\Backend\StoresEUBackendResource') + → Validates: StoresEUBackendResource::CODE_BUCKET === 'EU' + → Returns: StoresEUBackendResource + +4. API Platform executes with EU-specific resource + → Properties: base + EU-specific fields + → Validations: base + EU-specific rules +``` + +### CodeBucket detection mechanism + +The system identifies CodeBucket resources using three checks: + +1. **Class existence**: `class_exists($codeBucketClassName)` +2. **Constant check**: `defined("$className::CODE_BUCKET")` +3. **Value match**: `constant("$className::CODE_BUCKET") === $currentCodeBucket` + +### Generated CODE_BUCKET constant + +CodeBucket resources automatically get a `CODE_BUCKET` constant during generation: + +```php +// StoresEUBackendResource.php (EU variant) +final class StoresEUBackendResource +{ + public const string CODE_BUCKET = 'EU'; + + // Properties... +} + +// StoresBackendResource.php (base - no constant) +final class StoresBackendResource +{ + // Properties... (no CODE_BUCKET constant) +} +``` + +## Resource naming conventions + +### File naming pattern + +Resource schemas follow the pattern: `{resource-name}.resource.yml` +Validation schemas follow the pattern: `{resource-name}.validation.yml` + +CodeBuckets are specified inside the schema files, not in the filename. + +```MARKDOWN +src/Pyz/Glue/Store/resources/api/backend/ +├── stores.resource.yml # Resource schema (CodeBucket variants defined inside) +└── stores.validation.yml # Validation schema (CodeBucket variants defined inside) +``` + +### Generated class naming pattern + +The generator creates classes following: `{ResourceName}{CodeBucket}{ApiType}Resource` + +| Schema File | CodeBucket (defined in file) | Generated Class | +|-------------|------------------------------|----------------| +| `stores.resource.yml` | None (base) | `StoresBackendResource` | +| `stores.resource.yml` | EU | `StoresEUBackendResource` | +| `stores.resource.yml` | AT | `StoresATBackendResource` | +| `stores.resource.yml` (Storefront) | EU | `StoresEUStorefrontResource` | + +### URL consistency + +All CodeBucket variants share the same URL path, with the Code Bucket defined in the domain: + +- EU: `glue-backend.eu.spryker.local/stores` → `StoresEUBackendResource` +- AT: `glue-backend.at.spryker.local/stores` → `StoresATBackendResource` +- DE: `glue-backend.de.spryker.local/stores` → `StoresBackendResource` (or `StoresDEBackendResource` if variant exists) + +The URL path is identical (`/stores`), but the Code Bucket in the domain determines which resource variant is used. Only the properties, validations, and business logic differ between variants. + +## Creating CodeBucket resources + +### Basic example + +**Step 1: Create base resource** + +`src/Pyz/Glue/Store/resources/api/backend/stores.resource.yml` + +```yaml +resource: + name: Stores + shortName: Store + description: "Store resource" + + provider: "Pyz\\Glue\\Store\\Api\\Backend\\Provider\\StoreBackendProvider" + processor: "Pyz\\Glue\\Store\\Api\\Backend\\Processor\\StoreBackendProcessor" + + operations: + - type: Get + - type: GetCollection + + properties: + idStore: + type: integer + writable: false + identifier: true + + name: + type: string + description: "Store name" + + timezone: + type: string + description: "Store timezone" +``` + +**Step 2: Define CodeBucket variant** + +Within the same `stores.resource.yml` file, define the EU-specific variant by specifying the CodeBucket: + +```yaml +# EU-specific store resource (defined in same file) +resource: + name: Stores + shortName: Store + description: "EU-specific store resource" + codeBucket: EU + + # Same provider and processor as base + provider: "Pyz\\Glue\\Store\\Api\\Backend\\Provider\\StoreBackendProvider" + processor: "Pyz\\Glue\\Store\\Api\\Backend\\Processor\\StoreBackendProcessor" + + operations: + - type: Get + - type: GetCollection + + properties: + idStore: + type: integer + writable: false + identifier: true + + name: + type: string + description: "Store name" + + timezone: + type: string + description: "Store timezone" + + # EU-specific properties + taxRate: + type: number + description: "EU tax rate" + openapiContext: + example: 19.0 + + gdprContactEmail: + type: string + description: "GDPR contact email" + openapiContext: + example: "privacy@example.com" + + vatRegistrationNumber: + type: string + description: "VAT registration number" +``` + +**Step 3: Create validation schemas** + +Within `src/Pyz/Glue/Store/resources/api/backend/stores.validation.yml`, define CodeBucket-specific validation: + +```yaml +post: + taxRate: + - NotBlank + - Range: + min: 0 + max: 100 + + gdprContactEmail: + - NotBlank + - Email + + vatRegistrationNumber: + - NotBlank + - Regex: + pattern: '/^[A-Z]{2}[0-9]{8,12}$/' + message: "Invalid VAT format" +``` + +**Step 4: Generate resources** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate backend +``` + +This generates: +- `src/Generated/Api/Backend/StoresBackendResource.php` (base) +- `src/Generated/Api/Backend/StoresEUBackendResource.php` (with `CODE_BUCKET = 'EU'`) + +**Step 5: Implement Provider with CodeBucket awareness** + +`src/Pyz/Glue/Store/Api/Backend/Provider/StoreBackendProvider.php` + +```php +getStore((int) $uriVariables['idStore'], $operation); + } + + return $this->getStores($operation); + } + + protected function getStore(int $idStore, Operation $operation): ?object + { + $storeTransfer = $this->storeFacade->findStoreById($idStore); + + if ($storeTransfer === null) { + return null; + } + + $resourceClass = $operation->getClass(); + $resource = new $resourceClass(); + $resource->fromArray($storeTransfer->toArray()); + + // Add EU-specific data if this is an EU resource + if (defined("$resourceClass::CODE_BUCKET") && $resourceClass::CODE_BUCKET === 'EU') { + $resource->taxRate = $storeTransfer->getTaxRate(); + $resource->gdprContactEmail = $storeTransfer->getGdprContactEmail(); + $resource->vatRegistrationNumber = $storeTransfer->getVatRegistrationNumber(); + } + + return $resource; + } + + protected function getStores(Operation $operation): array + { + $stores = $this->storeFacade->getAllStores(); + + $resources = []; + foreach ($stores as $storeTransfer) { + $resourceClass = $operation->getClass(); + $resource = new $resourceClass(); + $resource->fromArray($storeTransfer->toArray()); + + if (defined("$resourceClass::CODE_BUCKET") && $resourceClass::CODE_BUCKET === 'EU') { + $resource->taxRate = $storeTransfer->getTaxRate(); + $resource->gdprContactEmail = $storeTransfer->getGdprContactEmail(); + $resource->vatRegistrationNumber = $storeTransfer->getVatRegistrationNumber(); + } + + $resources[] = $resource; + } + + return $resources; + } +} +``` + +## Schema layering with CodeBuckets + +CodeBucket resources support multi-layer schema merging just like base resources. + +### Example: Multi-layer CodeBucket resource + +**Core layer** (vendor): + +```yaml +# vendor/spryker/store/resources/api/backend/stores.resource.yml +resource: + name: Stores + codeBucket: EU + properties: + taxRate: + type: number +``` + +**Project layer**: + +```yaml +# src/Pyz/Glue/Store/resources/api/backend/stores.resource.yml +resource: + name: Stores + codeBucket: EU + properties: + taxRate: + required: true # Override core + companyVatId: + type: string # Project-specific +``` + +**Merged result** (StoresEUBackendResource): + +```yaml +resource: + name: Stores + properties: + taxRate: + type: number + required: true # From project + companyVatId: + type: string # From project +``` + +## Fallback behavior + +### Graceful degradation + +When `APPLICATION_CODE_BUCKET` is set but no matching variant exists, the system falls back to the base resource: + +```MARKDOWN +Scenario: APPLICATION_CODE_BUCKET = 'AT' +Available resources: + - StoresBackendResource (base) + - StoresEUBackendResource (EU variant) + +Result: StoresBackendResource is used (graceful fallback) +No errors, system continues to work +``` + +### No CodeBucket set + +When `APPLICATION_CODE_BUCKET` is not set: + +```MARKDOWN +Available resources: + - StoresBackendResource (base) + - StoresEUBackendResource (EU variant) + - StoresATBackendResource (AT variant) + +Result: StoresBackendResource is used +All CodeBucket variants are excluded from resource collection +``` + +## Resource collection filtering + +### CodeBucketResourceNameCollectionFactory + +This decorator filters the resource collection at compile time to prevent conflicts between base and CodeBucket variants. + +**When APPLICATION_CODE_BUCKET is not set:** +- Include all base resources (no CODE_BUCKET constant) +- Exclude all CodeBucket variants + +**When APPLICATION_CODE_BUCKET is set (example: 'EU'):** +1. Group resources by base class name +2. For each group: + - If EU variant exists → include ONLY the EU variant + - If no EU variant exists → include base resource (fallback) + - Exclude all non-matching CodeBucket variants + +**Example filtering:** + +```MARKDOWN +Available classes: + - StoresBackendResource (base) + - StoresEUBackendResource (EU) + - StoresATBackendResource (AT) + - CustomersBackendResource (base, no variants) + +With APPLICATION_CODE_BUCKET = 'EU': + ✓ StoresEUBackendResource (EU variant exists) + ✗ StoresBackendResource (excluded, EU variant preferred) + ✗ StoresATBackendResource (excluded, wrong CodeBucket) + ✓ CustomersBackendResource (no variant, base used) + +With APPLICATION_CODE_BUCKET = 'DE': + ✓ StoresBackendResource (no DE variant, fallback to base) + ✗ StoresEUBackendResource (excluded, wrong CodeBucket) + ✗ StoresATBackendResource (excluded, wrong CodeBucket) + ✓ CustomersBackendResource (no variant, base used) +``` + +### Benefits of filtering + +- **OpenAPI Generation**: Only the correct variant appears in OpenAPI documentation +- **Route Registration**: Only the correct variant routes are registered +- **No Conflicts**: Base and CodeBucket variants never coexist in routing +- **Performance**: Filtering happens once and is cached + +## Container compilation + +### Single container for all CodeBuckets + +API Platform compiles a single container that contains ALL resources (base and all CodeBucket variants). Runtime resolution selects the correct variant per request. + +**At compile time:** +1. Discover all resource classes in `src/Generated/Api/{ApiType}/` +2. Build metadata for ALL resources (base + all CodeBucket variants) +3. Register routes for ALL resources (all map to same URLs) +4. Cache everything + +**At runtime:** +1. CodeBucket decorators intercept resolution +2. Select correct resource based on `APPLICATION_CODE_BUCKET` +3. Only selected resource is used for that request +4. Different CodeBuckets served from same container + +### Performance characteristics + +- **One-time cost**: Container compilation happens once +- **No overhead**: Runtime resolution uses local cache per request +- **Scalability**: Supports hundreds of CodeBuckets without performance impact + + +## Debugging CodeBucket resources + +### Verify CODE_BUCKET constant generation + +After regenerating resources, verify the constant was added: + +```bash +# Check EU resource has constant +grep "CODE_BUCKET" src/Generated/Api/Backend/StoresEUBackendResource.php +# Expected: public const string CODE_BUCKET = 'EU'; + +# Verify base resource has no constant +grep "CODE_BUCKET" src/Generated/Api/Backend/StoresBackendResource.php +# Expected: no match (empty output) +``` + +### Debug resource resolution + +Use the debug command to inspect which resources are available: + +```bash +# List all resources +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug --list + +# Show specific resource +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug stores --api-type=backend + +# Show merged schema +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug stores --api-type=backend --show-merged + +# Show all contributing source files +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug stores --api-type=backend --show-sources +``` + +### Verify runtime resolution + +Test different CodeBuckets by accessing different domains: + +```bash +# Test EU CodeBucket +curl -X GET http://glue-backend.eu.spryker.local/stores +# Should include: taxRate, gdprContactEmail, vatRegistrationNumber + +# Test AT CodeBucket (if no AT variant exists) +curl -X GET http://glue-backend.at.spryker.local/stores +# Should return base resource (fallback) + +# Test DE CodeBucket +curl -X GET http://glue-backend.de.spryker.local/stores +# Should return base resource or DE-specific variant if available +``` + +## Best practices + +### 1. Keep base resources complete + +The base resource should contain all common properties that work across all CodeBuckets: + +```yaml +# ✅ Good - Base is complete +# stores.resource.yml (base variant) +resource: + name: Stores + properties: + idStore: + type: integer + name: + type: string + timezone: + type: string + +# stores.resource.yml (EU variant - defined in same file) +resource: + name: Stores + codeBucket: EU + properties: + idStore: + type: integer + name: + type: string + timezone: + type: string + taxRate: # EU-specific addition + type: number +``` + +### 2. Use CodeBuckets for true regional differences + +Only create CodeBucket variants when there are genuine regional requirements: + +```yaml +# ✅ Good use cases: +- EU GDPR compliance fields +- Code Bucket-specific tax calculations +- Country-specific validation rules +- Code Bucket-specific business logic + +# ❌ Bad use cases:q +- Language translations (use locales instead) +- Minor field variations (use base resource) +- Temporary feature flags (use feature toggles) +``` + +### 3. Share Provider and Processor logic + +Use the same Provider and Processor classes for base and CodeBucket variants when possible: + +```yaml +# Both use same implementation +resource: + provider: "Pyz\\Glue\\Store\\Api\\Backend\\Provider\\StoreBackendProvider" + processor: "Pyz\\Glue\\Store\\Api\\Backend\\Processor\\StoreBackendProcessor" +``` + +Detect the resource type inside the Provider using the `CODE_BUCKET` constant: + +```php +$resourceClass = $operation->getClass(); +if (defined("$resourceClass::CODE_BUCKET")) { + $codeBucket = $resourceClass::CODE_BUCKET; + // Apply CodeBucket-specific logic +} +``` + +### 4. Document CodeBucket-specific fields + +Clearly document which fields are CodeBucket-specific in your schema descriptions: + +```yaml +gdprContactEmail: + type: string + description: "GDPR contact email (EU-specific requirement for GDPR compliance)" +``` + +### 5. Test fallback behavior + +Always test that your application works correctly when: +- CodeBucket is not set (uses base resource) +- CodeBucket is set but variant doesn't exist (falls back to base) +- CodeBucket variant exists (uses variant) + +## Testing + +CodeBucket resources can be tested using the standard API Platform testing infrastructure. The test environment automatically generates resources before tests execute. + +For detailed testing guidance, see [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html). + +## Troubleshooting + +### Resource not found for CodeBucket + +If you get a "Resource not found" error for a specific CodeBucket: + +1. Verify the schema file naming: `{resource-name}.resource.yml` for resources, `{resource-name}.validation.yml` for validations +2. Verify the CodeBucket is defined inside the schema file +3. Regenerate resources: `docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate backend` +4. Verify the CODE_BUCKET constant exists in the generated class +5. Check that `APPLICATION_CODE_BUCKET` matches the CodeBucket defined in your schema file + +### Wrong resource variant used + +If the wrong variant is being used: + +1. Verify `APPLICATION_CODE_BUCKET` is set correctly in your environment +2. Clear caches: `docker/sdk cli rm -rf data/cache/*` +3. Check that the resource class name follows the pattern: `{Name}{CodeBucket}{ApiType}Resource` +4. Verify the CODE_BUCKET constant value matches `APPLICATION_CODE_BUCKET` + +For more troubleshooting guidance, see [API Platform Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html). + +## Next steps + +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Deep dive into schema syntax +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Define validation rules +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources +- [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html) - Testing your resources +- [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues diff --git a/docs/dg/dev/architecture/api-platform/configuration.md b/docs/dg/dev/architecture/api-platform/configuration.md new file mode 100644 index 00000000000..d385c5c5d51 --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/configuration.md @@ -0,0 +1,114 @@ +--- +title: API Platform Configuration +description: Configure API Platform in Spryker using PHP-based configuration files with environment-specific settings. +last_updated: Jan 27, 2026 +template: howto-guide-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html +--- + +Spryker uses [API Platform's configuration options](https://api-platform.com/docs/core/configuration/#symfony-configuration) with Spryker-specific adaptations for PHP-based configuration and environment control. + +## Configuration file locations + +Configuration files are located in application-specific directories: + +- **GlueBackend:** `config/GlueBackend/packages/api_platform.php` +- **GlueStorefront:** `config/GlueStorefront/packages/api_platform.php` +- **Glue:** `config/Glue/packages/api_platform.php` + +## Spryker-specific differences + +### PHP configuration instead of YAML + +Spryker uses PHP configuration with Symfony's type-safe configuration objects instead of YAML files: + +```php +use Symfony\Config\ApiPlatformConfig; + +return static function (ApiPlatformConfig $apiPlatform, string $env): void { + // Configuration here +}; +``` + +### Environment variable for conditional settings + +The configuration function receives an `$env` parameter for environment-specific behavior: + +```php +return static function (ApiPlatformConfig $apiPlatform, string $env): void { + // Enable developer tools only in development + if ($env === 'dockerdev') { + $apiPlatform->enableSwagger(true); + $apiPlatform->enableSwaggerUi(true); + $apiPlatform->enableReDoc(true); + $apiPlatform->enableDocs(true); + } +}; +``` + +Common environment values: `prod`, `dev`, `dockerdev`, `test` + +## Configuration examples + +### Disable SwaggerUI in production + +Spryker shows the SwaggerUI only in development environments by default. This can be configured with: + +```php +if ($env === 'dockerdev') { + $apiPlatform->enableSwagger(true); + $apiPlatform->enableSwaggerUi(true); + $apiPlatform->enableReDoc(true); + $apiPlatform->enableDocs(true); + } +``` + +### Disable Doctrine integration + +Spryker does not use Doctrine with API Platform: + +```php +$apiPlatform->doctrine()->enabled(false); +$apiPlatform->doctrineMongodbOdm()->enabled(false); +``` + +### Configure resource mapping paths + +Specify where generated API resources are located: + +```php +$apiPlatform->mapping()->paths([ + '%kernel.project_dir%/src/Generated/Api/Backend' +]); +``` + +### Set pagination defaults + +```php +$apiPlatform->defaults()->paginationItemsPerPage(10); + +$apiPlatform->collection() + ->pagination() + ->pageParameterName('page') + ->itemsPerPageParameterName('itemsPerPage'); +``` + +### Configure supported formats + +```php +$apiPlatform->formats('jsonapi', ['mime_types' => ['application/vnd.api+json']]); +$apiPlatform->formats('jsonld', ['mime_types' => ['application/ld+json']]); +$apiPlatform->formats('xml', ['mime_types' => ['application/xml']]); +``` + +## Complete configuration reference + +For all available configuration options and their details, refer to the [API Platform Symfony Configuration documentation](https://api-platform.com/docs/core/configuration/#symfony-configuration). + +The PHP method names in `ApiPlatformConfig` correspond directly to the YAML keys in the official documentation. diff --git a/docs/dg/dev/architecture/api-platform/enablement.md b/docs/dg/dev/architecture/api-platform/enablement.md index 64c6614e958..9a12bff803d 100644 --- a/docs/dg/dev/architecture/api-platform/enablement.md +++ b/docs/dg/dev/architecture/api-platform/enablement.md @@ -1,15 +1,23 @@ --- title: API Platform Enablement description: Learn how to create and enable API Platform resources in your Spryker project. -last_updated: Nov 24, 2025 +last_updated: Jan 22, 2026 template: howto-guide-template related: - title: API Platform link: docs/dg/dev/architecture/api-platform.html - title: How to integrate API Platform link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html - - title: Schemas and Resource Generation - link: docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html + - title: API Platform Configuration + link: docs/dg/dev/architecture/api-platform/configuration.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html + - title: CodeBucket Support + link: docs/dg/dev/architecture/api-platform/code-buckets.html + - title: API Platform Testing + link: docs/dg/dev/architecture/api-platform/testing.html --- This document describes how to create and enable API Platform resources in your Spryker project. @@ -20,7 +28,7 @@ Before creating API resources, ensure you have: - Integrated API Platform as described in [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) - Configured your application's bundle files -- Configured API types in your `spryker_api_platform.php` configuration +- Configured API types as described in [API Platform Configuration](/docs/dg/dev/architecture/api-platform/configuration.html) ## Creating your first API resource @@ -30,7 +38,7 @@ Create a schema file that defines your API resource structure. Schemas should be **Example: Customer resource for Back Office API** -`src/Pyz/Glue/Customer/resources/api/backend/customers.yml` +`src/Pyz/Glue/Customer/resources/api/backend/customers.resource.yml` ```yaml # yaml-language-server: $schema=../../../../../vendor/spryker/api-platform/resources/schemas/api-resource-schema-v1.json @@ -284,7 +292,7 @@ class CustomerBackendProcessor implements ProcessorInterface Run the generation command to create the API resource class: ```bash -docker/sdk cli glue api:generate backend +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate backend ``` This generates: @@ -301,7 +309,6 @@ The generated class includes: ### 6. Register services in the Dependency Injection container Make your Provider and Processor available through dependency injection: - `config/Glue/ApplicationServices.php` ```php @@ -350,6 +357,93 @@ PATCH /customers/{customerReference} DELETE /customers/{customerReference} ``` +## Creating CodeBucket-specific resources + +CodeBucket support enables you to create Code Bucket-specific API resource variants that are resolved at runtime based on the `APPLICATION_CODE_BUCKET` environment constant. + +### When to use CodeBucket resources + +Create CodeBucket variants when you need: +- Code Bucket-specific properties (EU GDPR fields, tax rates, compliance data) +- Code Bucket-specific validation rules (country-specific requirements) +- Country-specific business logic +- Feature variations per Code Bucket + +### Quick example + +**Base resource:** + +`src/Pyz/Glue/Customer/resources/api/backend/customers.resource.yml` + +```yaml +resource: + name: Customers + shortName: Customer + + operations: + - type: Get + - type: Post + + properties: + customerReference: + type: string + identifier: true + email: + type: string + firstName: + type: string +``` + +**EU-specific variant:** + +`src/Pyz/Glue/CustomerEU/resources/api/backend/customers.resource.yml` + +```yaml +resource: + name: Customers + shortName: Customer + codeBucket: EU + + operations: + - type: Get + - type: Post + + properties: + customerReference: + type: string + identifier: true + email: + type: string + firstName: + type: string + + # EU-specific properties + gdprConsentDate: + type: string + description: "Date of GDPR consent" + dataPrivacyOfficerEmail: + type: string + description: "Data privacy officer contact" +``` + +**Generate resources:** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate backend +``` + +This generates: +- `CustomersBackendResource.php` (base) +- `CustomersEUBackendResource.php` (with `CODE_BUCKET = 'EU'`) + +**Runtime behavior:** + +- Request to `glue.eu.spryker.local/customers` → Uses `CustomersEUBackendResource` +- Request to `glue.de.spryker.local/customers` → Uses `CustomersBackendResource` (fallback) +- Request to `glue.at.spryker.local/customers` → Uses `CustomersBackendResource` (or `CustomersATBackendResource` if variant exists) + +For a comprehensive guide including Provider implementation and advanced scenarios, see [CodeBucket Support](/docs/dg/dev/architecture/api-platform/code-buckets.html). + ## API types and use cases Spryker supports multiple API types for different use cases: @@ -413,5 +507,8 @@ docker/sdk cli glue api:debug customers --api-type=backend --show-sources ## Next steps -- [Schemas and Resource Generation](/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html) - Deep dive into schema syntax +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Deep dive into resource schema syntax +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Define validation rules for your resources +- [CodeBucket Support](/docs/dg/dev/architecture/api-platform/code-buckets.html) - Create Code Bucket-specific resources +- [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html) - Learn how to write tests for your API resources - [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues and solutions diff --git a/docs/dg/dev/architecture/api-platform/relationships.md b/docs/dg/dev/architecture/api-platform/relationships.md new file mode 100644 index 00000000000..8ca88f8c636 --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/relationships.md @@ -0,0 +1,239 @@ +--- +title: Relationships +description: Configure and use relationships in API Platform to include related resources. +last_updated: Feb 5, 2026 +template: concept-topic-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html +--- + +The API Platform relationship system enables resources to include related resources via the `?include=` query parameter in JSON:API format. + +## Quick start + +### 1. Define relationships in parent resource + +Add an `includes` section to your parent resource YAML: + +```yaml +# src/Spryker/Customer/resources/api/storefront/customers.resource.yml +resource: + name: Customers + shortName: customers + + includes: + - relationshipName: addresses + targetResource: CustomersAddresses + uriVariableMappings: + customerReference: customerReference +``` + +### 2. Define reverse relationship in child resource + +Add an `includableIn` section to your child resource YAML: + +```yaml +# src/Spryker/Customer/resources/api/storefront/customers-addresses.resource.yml +resource: + name: CustomersAddresses + shortName: customers-addresses + + includableIn: + - resource: Customers + relationshipName: addresses + uriVariableMappings: + customerReference: customerReference +``` + +Both declarations must match for validation to pass. + +### 3. Regenerate container + +```bash +docker/sdk testing -x GLUE_APPLICATION=GLUE_STOREFRONT glue cache:clear +``` + +### 4. Use relationships + +```bash +# Single include +GET /customers/customer--35?include=addresses + +# Multiple includes +GET /customers/customer--35?include=addresses,orders +``` + +## Configuration reference + +### includes section + +Declares what relationships this resource can include. + +**Required properties:** +- `relationshipName`: Name used in `?include=` parameter (for example, `addresses`) +- `targetResource`: Name of the resource to include (for example, `CustomersAddresses`) + +**Optional properties:** +- `uriVariableMappings`: Maps properties from parent to child provider URI variables + +**Example:** + +```yaml +includes: + - relationshipName: addresses + targetResource: CustomersAddresses + uriVariableMappings: + customerReference: customerReference +``` + +### includableIn section + +Declares where this resource can be included. + +**Required properties:** +- `resource`: Name of the parent resource +- `relationshipName`: Must match parent's includes declaration + +**Optional properties:** +- `uriVariableMappings`: Must match parent's includes declaration + +**Example:** + +```yaml +includableIn: + - resource: Customers + relationshipName: addresses + uriVariableMappings: + customerReference: customerReference +``` + +## URI variable mapping + +URI variable mapping passes context from parent resource to child provider. + +**Example flow:** + +1. Parent resource (Customer) has property `customerReference = 'DE--123'` +2. Configuration maps `customerReference: customerReference` +3. Child provider receives `['customerReference' => 'DE--123']` in URI variables +4. Child provider uses this to filter results + +**Multiple mappings:** + +```yaml +uriVariableMappings: + customerReference: customerReference + storeId: storeId + locale: locale +``` + +## Auto-generated properties + +When you define an `includes` relationship, the corresponding property is automatically generated with these defaults: + +| Attribute | Value | Rationale | +|-----------|-------|-----------| +| `type` | `array` | Relationships are collections | +| `writable` | `false` | Relationships are read-only | +| `readable` | `true` | Must be readable for responses | +| `required` | `false` | Relationships are optional | +| `description` | `"Related {targetResource} resources"` | Auto-generated description | + +You can override defaults by manually defining the property: + +```yaml +properties: + addresses: + type: array + writable: false + readable: true + required: false + description: "Customer billing and shipping addresses" +``` + +## Validation + +The system validates relationships during code generation: + +**Bi-directional consistency:** +- Parent's `includes` must match child's `includableIn` +- Relationship names must match +- URI variable mappings must match + +**Resource existence:** +- Target resource must exist +- Referenced properties should exist + +**Example error:** + +```text +Validation Error in customers.resource.yml: + - includes[0].targetResource: Resource "CustomersAddresses" declares + includableIn for "Customers" but uses different relationshipName + "customerAddresses". Expected: "addresses" +``` + +## Response format + +**Request:** + +```http +GET /customers/customer--35?include=addresses +``` + +**Response:** + +```json +{ + "data": { + "type": "customers", + "id": "customer--35", + "attributes": { + "email": "john@example.com", + "firstName": "John" + }, + "relationships": { + "addresses": { + "data": [ + {"type": "addresses", "id": "addr-123"}, + {"type": "addresses", "id": "addr-456"} + ] + } + } + }, + "included": [ + { + "type": "addresses", + "id": "addr-123", + "attributes": { + "address1": "123 Test St", + "city": "Test City" + } + }, + { + "type": "addresses", + "id": "addr-456", + "attributes": { + "address1": "456 Other St", + "city": "Other City" + } + } + ] +} +``` + +## How it works + +1. **RelationshipProviderDecorator** wraps all providers automatically +2. Parses `?include=` parameter from request +3. **ApiPlatformRelationshipResolver** loads relationships via container configuration +4. Maps URI variables from parent to child +5. Calls child provider with mapped variables +6. **JsonApiRelationshipNormalizer** builds JSON:API response with `relationships` and `included` sections + +Providers require no code changes - the system works automatically through decoration. diff --git a/docs/dg/dev/architecture/api-platform/resource-schemas.md b/docs/dg/dev/architecture/api-platform/resource-schemas.md new file mode 100644 index 00000000000..665871f7717 --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/resource-schemas.md @@ -0,0 +1,728 @@ +--- +title: Resource Schemas +description: Understanding API Platform resource schema definitions in Spryker. +last_updated: Feb 5, 2026 +template: concept-topic-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: How to integrate API Platform + link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html + - title: Relationships + link: docs/dg/dev/architecture/api-platform/relationships.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html + - title: CodeBucket Support + link: docs/dg/dev/architecture/api-platform/code-buckets.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: API Platform Testing + link: docs/dg/dev/architecture/api-platform/testing.html +--- + +This document explains how to define API Platform resource schemas in Spryker. + +## Schema file structure + +API Platform uses YAML files to define resource schemas. Resource schemas describe the structure, operations, and behavior of your API resources. + +### Schema location + +Resource schemas must be placed in the `resources/api/{api-type}/` directory within your module: + +```MARKDOWN +src/ +├── Spryker/ +│ └── {Module}/ +│ └── resources/ +│ └── api/ +│ ├── storefront/ +│ │ └── resource-name.yml +│ └── backend/ +│ └── resource-name.yml +├── SprykerFeature/ +│ └── {Feature}/ +│ └── resources/ +│ └── api/ +│ └── backend/ +│ └── resource-name.yml +└── Pyz/ + └── Glue/ + └── {Module}/ + └── resources/ + └── api/ + └── backend/ + └── resource-name.yml +``` + +## CodeBucket resources + +API Platform supports CodeBucket-specific resource variants that are resolved at runtime based on the `APPLICATION_CODE_BUCKET` environment constant. This enables Code Bucket-specific API resources without requiring separate container compilations. + +### CodeBucket schema file naming + +Resource schemas follow the pattern: `{resource-name}.resource.yml` +Validation schemas follow the pattern: `{resource-name}.validation.yml` + +CodeBuckets are specified inside the schema files, not in the filename. + +```MARKDOWN +src/Pyz/Glue/Store/resources/api/backend/ +├── stores.resource.yml # Resource schema (CodeBucket variants defined inside) +└── stores.validation.yml # Validation schema (CodeBucket variants defined inside) +``` + +### Generated class naming + +The generator creates classes following the pattern: `{ResourceName}{CodeBucket}{ApiType}Resource` + +| Schema File | CodeBucket (defined in file) | Generated Class | CODE_BUCKET Constant | +|-------------|------------------------------|----------------|---------------------| +| `stores.resource.yml` | None (base) | `StoresBackendResource` | Not present (base resource) | +| `stores.resource.yml` | EU | `StoresEUBackendResource` | `'EU'` | +| `stores.resource.yml` | AT | `StoresATBackendResource` | `'AT'` | + +### How CodeBucket resolution works + +1. **Schema definition**: Define CodeBucket variants inside schema files using `codeBucket: EU` +2. **Constant generation**: Generator adds `public const string CODE_BUCKET = 'EU';` to variant classes +3. **Runtime resolution**: System reads `APPLICATION_CODE_BUCKET` and selects matching resource class +4. **Graceful fallback**: If no matching variant exists, base resource is used + +### URL consistency + +All CodeBucket variants share the same URL path, with the Code Bucket defined in the domain: + +- EU variant: `glue-backend.eu.spryker.local/stores` → `StoresEUBackendResource` +- AT variant: `glue-backend.at.spryker.local/stores` → `StoresATBackendResource` +- DE variant: `glue-backend.de.spryker.local/stores` → `StoresBackendResource` (or `StoresDEBackendResource` if variant exists) + +The URL path is identical (`/stores`), but the Code Bucket in the domain determines which resource variant is used. Only properties, validations, and business logic differ between variants. + +### When to use CodeBucket resources + +Use CodeBucket variants when you need: +- Code Bucket-specific properties (EU GDPR fields, tax rates) +- Code Bucket-specific validation rules +- Country-specific business logic +- Feature variations per Code Bucket + +For a comprehensive guide including implementation examples, see [CodeBucket Support](/docs/dg/dev/architecture/api-platform/code-buckets.html). + +## Resource schema syntax + +### Minimal example + +```yaml +resource: + name: Products + shortName: Product + description: "Product resource" + + operations: + - type: Get + - type: GetCollection + + properties: + id: + type: integer + writable: false + identifier: true + + name: + type: string +``` + +### Complete example with all options + +```yaml +# yaml-language-server: $schema=../../../../SprykerSdk/Api/resources/schemas/api-resource-schema-v1.json + +resource: + # Resource identification + name: Customers # Internal name (used for schema merging) + shortName: Customer # URL name (becomes /customers) + description: "Customer resource" # OpenAPI description + + # State providers and processors + provider: "Pyz\\Glue\\Customer\\Api\\Backend\\Provider\\CustomerBackendProvider" + processor: "Pyz\\Glue\\Customer\\Api\\Backend\\Processor\\CustomerBackendProcessor" + + # Pagination configuration + paginationEnabled: true + paginationItemsPerPage: 10 + paginationMaximumItemsPerPage: 100 + paginationClientEnabled: true + paginationClientItemsPerPage: true + + # Security + security: "is_granted('ROLE_ADMIN')" + securityPostDenormalize: "is_granted('EDIT', object)" + + # Operations + operations: + - type: Post # Create new resource + - type: Get # Get single resource + - type: GetCollection # Get collection with pagination + - type: Put # Replace entire resource + - type: Patch # Update partial resource + - type: Delete # Delete resource + + # Properties + properties: + idCustomer: + type: integer + description: "The unique identifier of the customer." + writable: false # Read-only property + readable: true # Include in responses (default: true) + + email: + type: string + description: "The email address." + required: true # Required for all operations + openapiContext: + example: "john@example.com" + format: "email" + + firstName: + type: string + description: "First name." + openapiContext: + example: "John" + minLength: 1 + maxLength: 100 + + status: + type: string + description: "Customer status." + openapiContext: + example: "active" + schema: + enum: ["active", "inactive", "pending"] + + customerReference: + type: string + description: "Unique customer reference." + writable: false + identifier: true # Use as URL identifier instead of @id + + dateOfBirth: + type: string + description: "Date of birth." + openapiContext: + format: "date" + example: "1990-01-01" + + isActive: + type: boolean + description: "Active status." + default: true + + creditLimit: + type: number + description: "Credit limit." + openapiContext: + format: "float" + example: 5000.00 +``` + +## Property types + +### Supported types + +| Type | PHP Type | Example | Description | +|------|----------|---------|-------------| +| `string` | `string` | `"John"` | Text values | +| `integer` | `int` | `42` | Whole numbers | +| `number` | `float` | `3.14` | Decimal numbers | +| `boolean` | `bool` | `true` | True/false values | +| `array` | `array` | `["a", "b"]` | Arrays | +| `object` | `object` | `{"key": "value"}` | Nested objects | + +### Property attributes + +#### writable + +Controls if property can be sent in requests (POST/PUT/PATCH): + +```yaml +password: + type: string + writable: true # Can be sent in requests + readable: false # Not included in responses +``` + +#### readable + +Controls if property is included in responses: + +```yaml +idCustomer: + type: integer + writable: false # Cannot be modified + readable: true # Included in responses +``` + +#### identifier + +Marks property as URL identifier: + +```yaml +customerReference: + type: string + identifier: true # URL becomes /customers/{customerReference} +``` + +#### required + +Makes property mandatory (use validation schemas for detailed rules): + +```yaml +email: + type: string + required: true # Must be present +``` + +#### default + +Sets default value: + +```yaml +isActive: + type: boolean + default: true # Defaults to true if not provided +``` + +## Operations + +Define which HTTP operations are available for the resource: + +```yaml +operations: + - type: Get # GET /customers/{id} + - type: GetCollection # GET /customers + - type: Post # POST /customers + - type: Put # PUT /customers/{id} + - type: Patch # PATCH /customers/{id} + - type: Delete # DELETE /customers/{id} +``` + +The operation names map to HTTP methods: +- `post` → POST (create) +- `get` → GET (single resource) +- `getCollection` → GET (collection) +- `put` → PUT (replace) +- `patch` → PATCH (update) +- `delete` → DELETE (remove) + +## Relationships + +Define relationships between resources to enable including related resources via the `?include=` query parameter. + +### includes section + +Declares what relationships this resource can include: + +```yaml +includes: + - relationshipName: addresses + targetResource: CustomersAddresses + uriVariableMappings: + customerReference: customerReference +``` + +**Properties:** +- `relationshipName`: Name used in `?include=` parameter +- `targetResource`: Name of the resource to include +- `uriVariableMappings`: Maps properties from parent to child provider + +### includableIn section + +Declares where this resource can be included: + +```yaml +includableIn: + - resource: Customers + relationshipName: addresses + uriVariableMappings: + customerReference: customerReference +``` + +Both declarations must match for validation to pass. + +For detailed information about relationships, see [Relationships](/docs/dg/dev/architecture/api-platform/relationships.html). + +## Resource generation process + +### Generation workflow + +The resource generation process is organized into distinct phases, each producing result objects for comprehensive error tracking and reporting: + +```MARKDOWN +1. Preparation Phase + ↓ +2. Schema Parsing Phase → ParseResult + - Load validation schemas + - Parse validation rules + - Load resource schemas + - Parse resource definitions + ↓ +3. Schema Merging Phase → MergeResult + - Merge schemas (Core → Feature → Project) + - Track contributing source files + ↓ +4. Validation Phase → ValidationResult + - Validate merged schemas + - Apply validation rules + ↓ +5. Code Generation Phase + - Generate PHP resource classes + - Write files to output directory + ↓ +6. Cache Update +``` + +### Result objects + +Each phase produces result objects that encapsulate both successful outcomes and failures: + +- **ParseResult**: Contains grouped schemas and tracks failed validation files and schema files that could not be parsed +- **MergeResult**: Contains successfully merged schemas and tracks resources that failed to merge +- **ValidationResult**: Contains validated schemas and tracks resources that failed validation with detailed error messages + +This structured approach ensures that errors in one resource do not block the generation of other valid resources, and provides clear feedback about what succeeded and what failed. + +### Multi-layer schema merging + +Spryker automatically merges schemas from multiple layers: + +**Core layer** (lowest priority): + +```yaml +# vendor/spryker/customer/resources/api/backend/customer.yml +resource: + name: Customers + properties: + email: + type: string + firstName: + type: string +``` + +**Feature layer** (medium priority): + +```yaml +# src/SprykerFeature/CRM/resources/api/backend/customer.yml +resource: + name: Customers + properties: + phone: + type: string # Added property +``` + +**Project layer** (highest priority): + +```yaml +# src/Pyz/GLue/Customer/resources/api/backend/customer.yml +resource: + name: Customers + properties: + email: + required: true # Override core definition + customField: + type: string # Project-specific field +``` + +**Merged result:** + +```yaml +resource: + name: Customers + properties: + email: + type: string + required: true # From project layer + firstName: + type: string # From core layer + phone: + type: string # From feature layer + customField: + type: string # From project layer +``` + +### Generated resource class + +The generator creates a complete PHP class with API Platform attributes: + +```php + 'john@example.com'])] + #[Assert\NotBlank(groups: ['customers:create'])] + #[Assert\Email(groups: ['customers:create'])] + public ?string $email = null; + + #[ApiProperty(identifier: true, writable: false)] + public ?string $customerReference = null; + + // Getters, setters, toArray(), fromArray() methods... +} +``` + +## Debugging schemas + +### Debug commands + +```bash +# List all resources +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug --list + +# Show specific resource +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug customers --api-type=backend + +# Show merged schema +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug customers --api-type=backend --show-merged + +# Show contributing source files +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:debug customers --api-type=backend --show-sources + +# Validate schemas without generating +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --validate-only +``` + +### Common schema errors + +The generator validates schemas and provides detailed error messages: + +```bash +# Missing required fields +Error: Resource "customers" is missing required field "name" + +# Invalid operation type +Error: Invalid operation type "INVALID". Must be one of: Get, Post, Put, Patch, Delete, GetCollection + +# Invalid property type +Error: Property "age" has invalid type "int". Must be one of: string, integer, number, boolean, array, object + +# Provider class not found +Error: Provider class "Pyz\Glue\Customer\Api\Backend\Provider\MissingProvider" does not exist +``` + +## Advanced schema features + +### Custom operations + +Define custom operations beyond standard CRUD: + +```yaml +operations: + - type: Post + uriTemplate: "/customers/{id}/activate" + method: "POST" + processor: "Pyz\\Glue\\Customer\\Api\\Backend\\Processor\\CustomerActivationProcessor" +``` + +### Nested resources + +Define relationships between resources: + +```yaml +properties: + addresses: + type: array + description: "Customer addresses" + items: + type: object + properties: + street: + type: string + city: + type: string +``` + +### Security expressions + +Add fine-grained security: + +```yaml +resource: + security: "is_granted('ROLE_ADMIN')" + securityPostDenormalize: "is_granted('EDIT', object)" +``` + +## Generation commands + +### Basic generation + +```bash +# Generate all configured API types +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate + +# Generate specific API type +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate backend +docker/sdk cli GLUE_APPLICATION=GLUE_STOREFRONT glue api:generate storefront + +# Generate with options +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --dry-run # Preview without writing +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --validate-only # Only validate schemas +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --resource=customers # Generate single resource +``` + +### Output + +```bash +Generating API resources for ApiType: backend + +Discovering schema files... +Validating schemas... OK +Merging schemas... OK + +Generating resources: + 10/10 [============================] 100% + +Generated: 10 file(s) +Cache updated + +Done! +``` + +## Schema validation rules + +The generator enforces these rules: + +### Required fields + +Every resource must have: +- `name` - Internal resource name +- `shortName` - URL-friendly name +- At least one `operation` +- At least one `property` + +### Valid operation types + +Only these operation types are allowed: +- `Get` - Retrieve single resource +- `GetCollection` - Retrieve collection +- `Post` - Create resource +- `Put` - Replace entire resource +- `Patch` - Update partial resource +- `Delete` - Delete resource + +### Valid property types + +Only these property types are allowed: +- `string` +- `integer` +- `number` +- `boolean` +- `array` +- `object` + +### Provider/Processor validation + +- Provider/Processor classes must exist +- Classes must implement correct interfaces +- Namespaces must be valid PHP namespaces + +## Best practices + +### 1. Use semantic naming + +```yaml +# ✅ Good +resource: + name: Customers + shortName: Customer + +# ❌ Bad +resource: + name: CustomerData + shortName: cust +``` + +### 2. Document all properties + +```yaml +# ✅ Good +email: + type: string + description: "The customer's email address used for login and notifications" + +# ❌ Bad +email: + type: string +``` + +### 3. Leverage schema merging + +```yaml +# Core: Define base properties +# src/Spryker/Customer/resources/api/backend/customer.yml +resource: + name: Customers + properties: + email: + type: string + +# Project: Only override what's needed +# src/Pyz/Glue/Customer/resources/api/backend/customer.yml +resource: + name: Customers + properties: + email: + required: true # ← Only the difference +``` + +### 4. Use readable/writable correctly + +```yaml +# Read-only fields (IDs, timestamps) +idCustomer: + type: integer + writable: false + +# Write-only fields (passwords) +password: + type: string + readable: false + +# Read-write fields (normal data) +email: + type: string + writable: true + readable: true +``` + +## Next steps + +- [API Platform](/docs/dg/dev/architecture/api-platform.html) - Architecture overview +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Define validation rules +- [CodeBucket Support](/docs/dg/dev/architecture/api-platform/code-buckets.html) - Code Bucket-specific resources +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources +- [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html) - Writing and running tests +- [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues +- [API Platform Documentation](https://api-platform.com/docs/) - Official API Platform docs diff --git a/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.md b/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.md deleted file mode 100644 index 98b3b3a5d1e..00000000000 --- a/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.md +++ /dev/null @@ -1,763 +0,0 @@ ---- -title: Schemas and Resource Generation -description: Understanding API Platform schema definitions and the resource generation process in Spryker. -last_updated: Nov 24, 2025 -template: concept-topic-template -related: - - title: API Platform - link: docs/dg/dev/architecture/api-platform.html - - title: How to integrate API Platform - link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html - - title: API Platform Enablement - link: docs/dg/dev/architecture/api-platform/enablement.html ---- - -This document explains how API Platform schemas are defined and how resources are generated in Spryker. - -## Schema file structure - -API Platform uses YAML files to define resource schemas. Schemas describe the structure, operations, and behavior of your API resources. - -### Schema location - -Schemas must be placed in the `resources/api/{api-type}/` directory within your module: - -```MARKDOWN -src/ -├── Spryker/ -│ └── {Module}/ -│ └── resources/ -│ └── api/ -│ ├── storefront/ -│ │ ├── resource-name.yml -│ │ └── resource-name.validation.yml -│ └── backend/ -│ ├── resource-name.yml -│ └── resource-name.validation.yml -├── SprykerFeature/ -│ └── {Feature}/ -│ └── resources/ -│ └── api/ -│ └── backend/ -│ └── resource-name.yml -└── Pyz/ - └── Glue/ - └── {Module}/ - └── resources/ - └── api/ - └── backend/ - └── resource-name.yml -``` - -### Basic schema structure - -A complete resource schema consists of two files: - -1. **Resource schema** (`{resource-name}.yml`) - Defines structure and operations -2. **Validation schema** (`{resource-name}.validation.yml`) - Defines validation rules - -## Resource schema syntax - -### Minimal example - -```yaml -resource: - name: Products - shortName: Product - description: "Product resource" - - operations: - - type: Get - - type: GetCollection - - properties: - id: - type: integer - writable: false - identifier: true - - name: - type: string -``` - -### Complete example with all options - -```yaml -# yaml-language-server: $schema=../../../../SprykerSdk/Api/resources/schemas/api-resource-schema-v1.json - -resource: - # Resource identification - name: Customers # Internal name (used for schema merging) - shortName: Customer # URL name (becomes /customers) - description: "Customer resource" # OpenAPI description - - # State providers and processors - provider: "Pyz\\Glue\\Customer\\Api\\Backend\\Provider\\CustomerBackendProvider" - processor: "Pyz\\Glue\\Customer\\Api\\Backend\\Processor\\CustomerBackendProcessor" - - # Pagination configuration - paginationEnabled: true - paginationItemsPerPage: 10 - paginationMaximumItemsPerPage: 100 - paginationClientEnabled: true - paginationClientItemsPerPage: true - - # Security - security: "is_granted('ROLE_ADMIN')" - securityPostDenormalize: "is_granted('EDIT', object)" - - # Operations - operations: - - type: Post # Create new resource - - type: Get # Get single resource - - type: GetCollection # Get collection with pagination - - type: Put # Replace entire resource - - type: Patch # Update partial resource - - type: Delete # Delete resource - - # Properties - properties: - idCustomer: - type: integer - description: "The unique identifier of the customer." - writable: false # Read-only property - readable: true # Include in responses (default: true) - - email: - type: string - description: "The email address." - required: true # Required for all operations - openapiContext: - example: "john@example.com" - format: "email" - - firstName: - type: string - description: "First name." - openapiContext: - example: "John" - minLength: 1 - maxLength: 100 - - status: - type: string - description: "Customer status." - openapiContext: - example: "active" - schema: - enum: ["active", "inactive", "pending"] - - customerReference: - type: string - description: "Unique customer reference." - writable: false - identifier: true # Use as URL identifier instead of @id - - dateOfBirth: - type: string - description: "Date of birth." - openapiContext: - format: "date" - example: "1990-01-01" - - isActive: - type: boolean - description: "Active status." - default: true - - creditLimit: - type: number - description: "Credit limit." - openapiContext: - format: "float" - example: 5000.00 -``` - -## Property types - -### Supported types - -| Type | PHP Type | Example | Description | -|------|----------|---------|-------------| -| `string` | `string` | `"John"` | Text values | -| `integer` | `int` | `42` | Whole numbers | -| `number` | `float` | `3.14` | Decimal numbers | -| `boolean` | `bool` | `true` | True/false values | -| `array` | `array` | `["a", "b"]` | Arrays | -| `object` | `object` | `{"key": "value"}` | Nested objects | - -### Property attributes - -#### writable - -Controls if property can be sent in requests (POST/PUT/PATCH): - -```yaml -password: - type: string - writable: true # Can be sent in requests - readable: false # Not included in responses -``` - -#### readable - -Controls if property is included in responses: - -```yaml -idCustomer: - type: integer - writable: false # Cannot be modified - readable: true # Included in responses -``` - -#### identifier - -Marks property as URL identifier: - -```yaml -customerReference: - type: string - identifier: true # URL becomes /customers/{customerReference} -``` - -#### required - -Makes property mandatory (use validation schema for detailed rules): - -```yaml -email: - type: string - required: true # Must be present -``` - -#### default - -Sets default value: - -```yaml -isActive: - type: boolean - default: true # Defaults to true if not provided -``` - -## Validation schema syntax - -Validation schemas define constraints for each operation type. - -### Basic validation - -```yaml -post: - email: - - NotBlank: - message: "Email is required" - - Email: - message: "Invalid email format" - - firstName: - - NotBlank - - Length: - min: 2 - max: 100 - minMessage: "Name must be at least {{ limit }} characters" - maxMessage: "Name cannot exceed {{ limit }} characters" - -patch: - email: - - Optional: - constraints: - - NotBlank - - Email -``` - -### Available validation constraints - -#### String constraints - -```yaml -# Required field -- NotBlank: - message: "This field is required" - -# Email validation -- Email: - message: "Invalid email format" - -# Length validation -- Length: - min: 2 - max: 100 - minMessage: "Too short" - maxMessage: "Too long" - -# Regular expression -- Regex: - pattern: '/^[A-Z][a-z]+$/' - message: "Must start with uppercase letter" - -# Choice from list -- Choice: - choices: ["active", "inactive", "pending"] - message: "Invalid status" - -# URL validation -- Url: - message: "Invalid URL" -``` - -#### Numeric constraints - -```yaml -# Positive number -- Positive: - message: "Must be positive" - -# Range validation -- Range: - min: 0 - max: 100 - notInRangeMessage: "{% raw %}Must be between {{ min }} and {{ max }}{% endraw %}" - -# Greater than -- GreaterThan: - value: 0 - message: "{% raw %}Must be greater than {{ compared_value }}{% endraw %}" -``` - -#### Date constraints - -```yaml -# Date format -- Date: - message: "Invalid date format" - -# DateTime format -- DateTime: - message: "Invalid datetime format" - -# Future date -- GreaterThan: - value: "today" - message: "Must be a future date" -``` - -#### Security constraints - -```yaml -# Password strength -- NotCompromisedPassword: - message: "This password has been leaked in a data breach" - -# Complex password requirements -- Regex: - pattern: '/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$/' - message: "Password must contain uppercase, lowercase, number, and special character" -``` - -### Operation-specific validation - -Define different rules for different operations: - -```yaml -post: - password: - - NotBlank - - Length: - min: 12 - max: 128 - - Regex: - pattern: '/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)/' - message: "Password must contain uppercase, lowercase, and number" - -patch: - password: - - Optional: - constraints: - - Length: - min: 12 - max: 128 - -put: - password: - - NotBlank -``` - -The operation names map to HTTP methods: -- `post` → POST (create) -- `get` → GET (single resource) -- `getCollection` → GET (collection) -- `put` → PUT (replace) -- `patch` → PATCH (update) -- `delete` → DELETE (remove) - -## Resource generation process - -### Generation workflow - -```MARKDOWN -1. Schema Discovery - ↓ -2. Schema Loading (YAML) - ↓ -3. Schema Parsing - ↓ -4. Schema Validation - ↓ -5. Schema Merging (Core → Feature → Project) - ↓ -6. Resource Class Generation - ↓ -7. Cache Update -``` - -### Multi-layer schema merging - -Spryker automatically merges schemas from multiple layers: - -**Core layer** (lowest priority): - -```yaml -# vendor/spryker/customer/resources/api/backend/customer.yml -resource: - name: Customers - properties: - email: - type: string - firstName: - type: string -``` - -**Feature layer** (medium priority): - -```yaml -# src/SprykerFeature/CRM/resources/api/backend/customer.yml -resource: - name: Customers - properties: - phone: - type: string # Added property -``` - -**Project layer** (highest priority): - -```yaml -# src/Pyz/GLue/Customer/resources/api/backend/customer.yml -resource: - name: Customers - properties: - email: - required: true # Override core definition - customField: - type: string # Project-specific field -``` - -**Merged result:** - -```yaml -resource: - name: Customers - properties: - email: - type: string - required: true # From project layer - firstName: - type: string # From core layer - phone: - type: string # From feature layer - customField: - type: string # From project layer -``` - -### Generated resource class - -The generator creates a complete PHP class with API Platform attributes: - -```php - 'john@example.com'])] - #[Assert\NotBlank(groups: ['customers:create'])] - #[Assert\Email(groups: ['customers:create'])] - public ?string $email = null; - - #[ApiProperty(identifier: true, writable: false)] - public ?string $customerReference = null; - - // Getters, setters, toArray(), fromArray() methods... -} -``` - -## Debugging schemas - -### Debug commands - -```bash -# List all resources -docker/sdk cli glue api:debug --list - -# Show specific resource -docker/sdk cli glue api:debug customers --api-type=backend - -# Show merged schema -docker/sdk cli glue api:debug customers --api-type=backend --show-merged - -# Show contributing source files -docker/sdk cli glue api:debug customers --api-type=backend --show-sources - -# Validate schemas without generating -docker/sdk cli glue api:generate --validate-only -``` - -### Common schema errors - -The generator validates schemas and provides detailed error messages: - -```bash -# Missing required fields -Error: Resource "customers" is missing required field "name" - -# Invalid operation type -Error: Invalid operation type "INVALID". Must be one of: Get, Post, Put, Patch, Delete, GetCollection - -# Invalid property type -Error: Property "age" has invalid type "int". Must be one of: string, integer, number, boolean, array, object - -# Provider class not found -Error: Provider class "Pyz\Glue\Customer\Api\Backend\Provider\MissingProvider" does not exist -``` - -## Advanced schema features - -### Custom operations - -Define custom operations beyond standard CRUD: - -```yaml -operations: - - type: Post - uriTemplate: "/customers/{id}/activate" - method: "POST" - processor: "Pyz\\Glue\\Customer\\Api\\Backend\\Processor\\CustomerActivationProcessor" -``` - -### Nested resources - -Define relationships between resources: - -```yaml -properties: - addresses: - type: array - description: "Customer addresses" - items: - type: object - properties: - street: - type: string - city: - type: string -``` - -### Security expressions - -Add fine-grained security: - -```yaml -resource: - security: "is_granted('ROLE_ADMIN')" - securityPostDenormalize: "is_granted('EDIT', object)" -``` - -## Generation commands - -### Basic generation - -```bash -# Generate all configured API types -docker/sdk cli glue api:generate - -# Generate specific API type -docker/sdk cli glue api:generate backend -docker/sdk cli glue api:generate storefront - -# Generate with options -docker/sdk cli glue api:generate --dry-run # Preview without writing -docker/sdk cli glue api:generate --validate-only # Only validate schemas -docker/sdk cli glue api:generate --resource=customers # Generate single resource -``` - -### Output - -```bash -Generating API resources for ApiType: backend - -Discovering schema files... -Validating schemas... OK -Merging schemas... OK - -Generating resources: - 10/10 [============================] 100% - -Generated: 10 file(s) -Cache updated - -Done! -``` - -## Schema validation rules - -The generator enforces these rules: - -### Required fields - -Every resource must have: -- `name` - Internal resource name -- `shortName` - URL-friendly name -- At least one `operation` -- At least one `property` - -### Valid operation types - -Only these operation types are allowed: -- `Get` - Retrieve single resource -- `GetCollection` - Retrieve collection -- `Post` - Create resource -- `Put` - Replace entire resource -- `Patch` - Update partial resource -- `Delete` - Delete resource - -### Valid property types - -Only these property types are allowed: -- `string` -- `integer` -- `number` -- `boolean` -- `array` -- `object` - -### Provider/Processor validation - -- Provider/Processor classes must exist -- Classes must implement correct interfaces -- Namespaces must be valid PHP namespaces - -## Best practices - -### 1. Use semantic naming - -```yaml -# ✅ Good -resource: - name: Customers - shortName: Customer - -# ❌ Bad -resource: - name: CustomerData - shortName: cust -``` - -### 2. Document all properties - -```yaml -# ✅ Good -email: - type: string - description: "The customer's email address used for login and notifications" - -# ❌ Bad -email: - type: string -``` - -### 3. Use operation-specific validation - -```yaml -# ✅ Good - Different rules per operation -post: - password: - - NotBlank - - Length: { min: 12 } - -patch: - password: - - Optional: - constraints: - - Length: { min: 12 } - -# ❌ Bad - Same validation everywhere -password: - required: true -``` - -### 4. Leverage schema merging - -```yaml -# Core: Define base properties -# src/Spryker/Customer/resources/api/backend/customer.yml -resource: - name: Customers - properties: - email: - type: string - -# Project: Only override what's needed -# src/Pyz/Glue/Customer/resources/api/backend/customer.yml -resource: - name: Customers - properties: - email: - required: true # ← Only the difference -``` - -### 5. Use readable/writable correctly - -```yaml -# Read-only fields (IDs, timestamps) -idCustomer: - type: integer - writable: false - -# Write-only fields (passwords) -password: - type: string - readable: false - -# Read-write fields (normal data) -email: - type: string - writable: true - readable: true -``` - -## Next steps - -- [API Platform](/docs/dg/dev/architecture/api-platform.html) - Architecture overview -- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources -- [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues -- [API Platform Documentation](https://api-platform.com/docs/) - Official API Platform docs diff --git a/docs/dg/dev/architecture/api-platform/testing.md b/docs/dg/dev/architecture/api-platform/testing.md new file mode 100644 index 00000000000..fb7282a28c1 --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/testing.md @@ -0,0 +1,1112 @@ +--- +title: API Platform Testing +description: Learn how to write and run tests for your API Platform resources in Spryker. +last_updated: Feb 25, 2026 +template: howto-guide-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html + - title: Troubleshooting + link: docs/dg/dev/architecture/api-platform/troubleshooting.html +--- + +This document describes how to write and run tests for your API Platform resources in your project. + +## Overview + +API Platform provides a comprehensive testing infrastructure built on top of: + +- **Codeception**: Test framework for PHP +- **API Platform Test Client**: Specialized HTTP client for API testing +- **PHPUnit Assertions**: Rich set of assertion methods +- **Test Helpers**: Custom helpers for test data management + +The testing infrastructure supports both Backend and Storefront API types with dedicated base classes and configuration. + +## Test architecture + +### Test class hierarchy + +```bash +AbstractApiTestCase (base class from core) +├── BackendApiTestCase (for Backend API tests) +└── StorefrontApiTestCase (for Storefront API tests) +``` + +### Key components + +| Component | Purpose | +|-----------|---------| +| `AbstractApiTestCase` | Base class providing API Platform integration | +| `BackendApiTestCase` | Pre-configured for Backend API testing | +| `StorefrontApiTestCase` | Pre-configured for Storefront API testing | +| `ApiTestKernel` | Lightweight Symfony kernel for testing | +| `ApiTestAssertionsTrait` | API-specific assertions (from API Platform) | + +### Test helper classes + +The testing infrastructure provides specialized Codeception helpers to streamline test development: + +| Helper Class | Purpose | +|--------------|---------| +| `BootstrapHelper` | Configures application plugin providers for test environments via codeception.yml. Allows different test suites to use different factory implementations without hardcoding dependencies in test infrastructure. | +| `ApiPlatformHelper` | Automatically cleans compiled Symfony test kernel cache after test suites complete. This ensures a clean state between test runs and prevents cache-related test failures. | +| `ApiPlatformConfigBuilder` | Provides a fluent interface for building test-specific API Platform configurations. Useful for creating isolated test scenarios with custom settings. | +| `ApiResourceGeneratorHelper` | Assists with testing resource generation functionality. Provides methods to generate test resources, validate generation output, and clean up generated files. | + +These helpers are automatically available in your test cases through the Codeception actor and provide essential functionality for testing API Platform resources effectively. + +## Setting up your test environment + +### 1. Configure autoloading for generated test resources + +Update your project-level `composer.json` to include the test API namespace: + +`composer.json` (project root) + +```json +{ + "autoload-dev": { + "psr-4": { + "PyzTest\\": "tests/PyzTest/", + "Generated\\TestApi\\": "tests/_data/Api/" + } + } +} +``` + +### 2. Optional: Configure application plugin providers + +If your tests require application plugins to be registered (for example, service providers or middleware), configure the `BootstrapHelper` in your suite's `codeception.yml`: + +`tests/PyzTest/Glue/Customer/BackendApi/codeception.yml` + +```yaml +modules: + enabled: + - \SprykerTest\Shared\Testify\Helper\BootstrapHelper: + applicationPluginProvider: + class: Spryker\Glue\GlueBackendApiApplication\GlueBackendApiApplicationFactory + method: getApplicationPlugins +``` + +For Storefront API tests, use the appropriate factory: + +`tests/PyzTest/Glue/Customer/StorefrontApi/codeception.yml` + +```yaml +modules: + enabled: + - \SprykerTest\Shared\Testify\Helper\BootstrapHelper: + applicationPluginProvider: + class: Spryker\Glue\GlueStorefrontApiApplication\GlueStorefrontApiApplicationFactory + method: getApplicationPlugins +``` + +**Configuration options:** + +- `class`: The fully qualified class name of the factory that provides application plugins +- `method`: The method name to call on the factory (typically `getApplicationPlugins`) + +If no `applicationPluginProvider` is configured, the helper returns an empty array, and tests run without additional application plugins. + +### 3. Create test directory structure + +```bash +tests/ +├── PyzTest/ +│ └── Glue/ +│ └── Customer/ +│ ├── BackendApi/ +│ │ ├── codeception.yml +│ │ └── CustomersBackendApiTest.php +│ └── StorefrontApi/ +│ ├── codeception.yml +│ └── CustomersStorefrontApiTest.php +└── _data/ + └── Api/ + ├── Backend/ + │ └── CustomersBackendResource.php (generated) + └── Storefront/ + └── CustomersStorefrontResource.php (generated) +``` + +### 4. Generate API resources for testing + +The resources and the container are automatically generated right before the test suite runs. + +#### Automatic resource generation and cleanup + +The test infrastructure handles resource lifecycle automatically: + +- **Generation**: Test-specific API resources are generated into `tests/_data/Api/{ApiType}/` before tests execute +- **Cleanup**: The `ApiPlatformHelper` automatically cleans the compiled Symfony test kernel cache after test suites complete +- **Isolation**: Each test suite gets a fresh cache state, preventing cross-test contamination + +This automation ensures that: +- Tests always run against the latest schema definitions +- No manual cache clearing is required between test runs +- Test failures related to stale cache are eliminated + +## Writing Backend API tests + +### Basic test structure + +Backend API tests extend `BackendApiTestCase` and use the `BackendApiTester` tester which gets automatically injected into your tests by Codeception. + +`tests/PyzTest/Glue/Customer/BackendApi/CustomersBackendApiTest.php` + +```php + 'john.doe@example.com', + 'firstName' => 'John', + 'lastName' => 'Doe', + ]; + + // Act + static::createClient()->request('POST', '/customers', ['json' => $customerData]); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains(['email' => 'john.doe@example.com']); + $this->assertJsonContains(['firstName' => 'John']); + $this->assertJsonContains(['lastName' => 'Doe']); + } +} +``` + +### Testing GET operations + +#### Single resource + +```php +public function testGivenExistingCustomerWhenRetrievingViaGetThenCustomerDataIsReturned(): void +{ + // Arrange + $customerTransfer = $this->tester->haveCustomer([ + 'email' => 'existing@example.com', + 'firstName' => 'Jane', + 'lastName' => 'Smith', + ]); + + // Act + static::createClient()->request( + 'GET', + sprintf('/customers/%s', $customerTransfer->getCustomerReference()) + ); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['email' => 'existing@example.com']); + $this->assertJsonContains(['firstName' => 'Jane']); +} +``` + +#### Collection with pagination + +```php +public function testGivenMultipleCustomersWhenRetrievingCollectionViaGetThenAllCustomersAreReturned(): void +{ + // Arrange + $this->tester->haveCustomer(['email' => 'customer1@example.com']); + $this->tester->haveCustomer(['email' => 'customer2@example.com']); + $this->tester->haveCustomer(['email' => 'customer3@example.com']); + + // Act + static::createClient()->request('GET', '/customers'); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['@type' => 'Collection']); + $this->assertJsonContains(['totalItems' => 3]); +} + +public function testGivenPaginationParamsWhenRetrievingCollectionThenPaginatedResultsAreReturned(): void +{ + // Arrange + for ($i = 1; $i <= 15; $i++) { + $this->tester->haveCustomer(['email' => sprintf('customer%d@example.com', $i)]); + } + + // Act + static::createClient()->request('GET', '/customers?page=2&itemsPerPage=5'); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['@type' => 'Collection']); + $this->assertJsonContains(['view' => ['@id' => '/customers?page=2&itemsPerPage=5']]); +} +``` + +### Testing POST operations + +#### Successful creation + +```php +public function testGivenValidDataWhenCreatingCustomerViaPostThenCustomerIsCreatedSuccessfully(): void +{ + // Arrange + $customerData = [ + 'email' => 'new.customer@example.com', + 'firstName' => 'New', + 'lastName' => 'Customer', + ]; + + // Act + $response = static::createClient()->request('POST', '/customers', [ + 'json' => $customerData, + ]); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($customerData); + $this->assertResponseHeaderSame('Content-Type', 'application/ld+json; charset=utf-8'); + + // Verify the resource was created and has an ID + $responseData = $response->toArray(); + $this->assertArrayHasKey('customerReference', $responseData); + $this->assertNotEmpty($responseData['customerReference']); +} +``` + +#### Validation errors + +```php +public function testGivenInvalidDataWhenCreatingCustomerViaPostThenValidationErrorIsReturned(): void +{ + // Arrange + $invalidCustomerData = [ + 'email' => 'invalid-email', // Invalid email format + 'firstName' => '', // Empty first name + ]; + + // Act + static::createClient()->request('POST', '/customers', [ + 'json' => $invalidCustomerData, + ]); + + // Assert + $this->assertResponseStatusCodeSame(422); + $this->assertResponseHeaderSame('Content-Type', 'application/ld+json; charset=utf-8'); + $this->assertJsonContains(['@type' => 'ConstraintViolationList']); + $this->assertJsonContains([ + 'violations' => [ + ['propertyPath' => 'email'], + ['propertyPath' => 'firstName'], + ['propertyPath' => 'lastName'], + ], + ]); +} +``` + +#### Business rule violations + +```php +public function testGivenDuplicateEmailWhenCreatingCustomerViaPostThenErrorIsReturned(): void +{ + // Arrange + $this->tester->haveCustomer(['email' => 'duplicate@example.com']); + + $duplicateData = [ + 'email' => 'duplicate@example.com', + 'firstName' => 'Duplicate', + 'lastName' => 'Customer', + ]; + + // Act + static::createClient()->request('POST', '/customers', [ + 'json' => $duplicateData, + ]); + + // Assert + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains(['@type' => 'Error']); + $this->assertJsonContains(['detail' => 'Customer with this email already exists']); +} +``` + +### Testing PATCH operations + +```php +public function testGivenExistingCustomerWhenUpdatingViaPatchThenCustomerIsUpdatedSuccessfully(): void +{ + // Arrange + $customerTransfer = $this->tester->haveCustomer([ + 'email' => 'update@example.com', + 'firstName' => 'Original', + 'lastName' => 'Name', + ]); + + $updateData = [ + 'firstName' => 'Updated', + 'lastName' => 'Name', + ]; + + // Act + static::createClient()->request( + 'PATCH', + sprintf('/customers/%s', $customerTransfer->getCustomerReference()), + [ + 'json' => $updateData, + 'headers' => [ + 'Content-Type' => 'application/merge-patch+json', + ], + ] + ); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['firstName' => 'Updated']); + $this->assertJsonContains(['email' => 'update@example.com']); // Unchanged +} +``` + +### Testing DELETE operations + +```php +public function testGivenExistingCustomerWhenDeletingViaDeleteThenCustomerIsDeletedSuccessfully(): void +{ + // Arrange + $customerTransfer = $this->tester->haveCustomer([ + 'email' => 'delete@example.com', + ]); + + // Act + static::createClient()->request( + 'DELETE', + sprintf('/customers/%s', $customerTransfer->getCustomerReference()) + ); + + // Assert + $this->assertResponseStatusCodeSame(204); + $this->assertResponseHasNoContent(); +} + +public function testGivenNonExistentCustomerWhenDeletingViaDeleteThen404IsReturned(): void +{ + // Act + static::createClient()->request('DELETE', '/customers/NON-EXISTENT-REFERENCE'); + + // Assert + $this->assertResponseStatusCodeSame(404); +} +``` + +### Testing relationships + +The relationships feature enables resources to include related resources via the `?include=` query parameter. For details on configuring relationships, see [Relationships](/docs/dg/dev/architecture/api-platform/relationships.html). + +#### Testing include parameter + +```php +public function testGivenCustomerWithAddressesWhenRequestingWithIncludeThenAddressesAreIncluded(): void +{ + // Arrange + $customerTransfer = $this->tester->haveCustomer(); + $this->tester->haveAddress(['customerReference' => $customerTransfer->getCustomerReference()]); + $this->tester->haveAddress(['customerReference' => $customerTransfer->getCustomerReference()]); + + // Act + $response = static::createClient()->request( + 'GET', + sprintf('/customers/%s?include=addresses', $customerTransfer->getCustomerReference()) + ); + + // Assert + $this->assertResponseIsSuccessful(); + $data = $response->toArray(); + + // Assert relationships section exists + $this->assertArrayHasKey('relationships', $data['data']); + $this->assertArrayHasKey('addresses', $data['data']['relationships']); + + // Assert included section contains addresses + $this->assertArrayHasKey('included', $data); + $this->assertCount(2, $data['included']); +} +``` + +#### Testing JSON:API structure + +```php +public function testGivenIncludedResourcesWhenRetrievingThenJsonApiStructureIsValid(): void +{ + // Arrange + $customerTransfer = $this->tester->haveCustomer(); + $this->tester->haveAddress(['customerReference' => $customerTransfer->getCustomerReference()]); + + // Act + $response = static::createClient()->request( + 'GET', + sprintf('/customers/%s?include=addresses', $customerTransfer->getCustomerReference()) + ); + + // Assert + $data = $response->toArray(); + + // Verify main resource structure + $this->assertArrayHasKey('data', $data); + $this->assertArrayHasKey('type', $data['data']); + $this->assertArrayHasKey('id', $data['data']); + $this->assertArrayHasKey('attributes', $data['data']); + $this->assertArrayHasKey('relationships', $data['data']); + + // Verify included resources structure + foreach ($data['included'] as $includedResource) { + $this->assertArrayHasKey('type', $includedResource); + $this->assertArrayHasKey('id', $includedResource); + $this->assertArrayHasKey('attributes', $includedResource); + } + + // Verify relationship linkage + $relationshipData = $data['data']['relationships']['addresses']['data']; + foreach ($relationshipData as $linkage) { + $this->assertArrayHasKey('type', $linkage); + $this->assertArrayHasKey('id', $linkage); + } +} +``` + +## Writing Storefront API tests + +### Basic test structure + +Storefront API tests extend `StorefrontApiTestCase` and typically use mocks for read-only operations. + +`tests/PyzTest/Glue/Customer/StorefrontApi/CustomersStorefrontApiTest.php` + +```php + (new CustomerTransfer()) + ->setEmail('customer@example.com') + ->setFirstName('John') + ->setLastName('Doe'), + ]); + + static::getContainer()->set(CustomerClientInterface::class, $customerClientStub); + + // Act + static::createClient()->request('GET', '/customers/me'); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['email' => 'customer@example.com']); + } +} +``` + +### Testing with service mocks + +```php +public function testGivenMultipleCustomersWhenRetrievingCollectionViaGetThenAllCustomersAreReturned(): void +{ + // Arrange + $customerClientStub = Stub::makeEmpty(CustomerClientInterface::class, [ + 'getCustomerCollection' => [ + (new CustomerTransfer())->setEmail('customer1@example.com'), + (new CustomerTransfer())->setEmail('customer2@example.com'), + ], + ]); + + static::getContainer()->set(CustomerClientInterface::class, $customerClientStub); + + // Act + static::createClient()->request('GET', '/customers'); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['@type' => 'Collection']); +} +``` + +## Available assertions + +### HTTP response assertions + +```php +// Status codes +$this->assertResponseIsSuccessful(); // 2xx status code +$this->assertResponseStatusCodeSame(200); // Exact status code +$this->assertResponseStatusCodeSame(201); // Created +$this->assertResponseStatusCodeSame(204); // No content +$this->assertResponseStatusCodeSame(400); // Bad request +$this->assertResponseStatusCodeSame(401); // Unauthorized +$this->assertResponseStatusCodeSame(403); // Forbidden +$this->assertResponseStatusCodeSame(404); // Not found +$this->assertResponseStatusCodeSame(422); // Validation error + +// Headers +$this->assertResponseHasHeader('Content-Type'); +$this->assertResponseHeaderSame('Content-Type', 'application/ld+json; charset=utf-8'); +$this->assertResponseHeaderNotSame('X-Custom-Header', 'value'); + +// Content +$this->assertResponseHasNoContent(); // Empty response body +``` + +### JSON assertions + +```php +// Content matching +$this->assertJsonContains(['email' => 'test@example.com']); +$this->assertJsonContains(['@type' => 'Customer']); +$this->assertJsonContains(['@type' => 'Collection']); + +// Array keys +$responseData = $response->toArray(); +$this->assertArrayHasKey('customerReference', $responseData); +$this->assertArrayNotHasKey('password', $responseData); + +// Validation violations +$this->assertJsonContains(['@type' => 'ConstraintViolationList']); +$this->assertJsonContains([ + 'violations' => [ + ['propertyPath' => 'email'], + ], +]); + +// Collection metadata +$this->assertJsonContains(['totalItems' => 10]); +$this->assertJsonContains(['view' => ['@id' => '/customers?page=1']]); +``` + +### Custom API Platform assertions + +```php +// JSON-LD context +$this->assertJsonContains(['@context' => '/contexts/Customer']); + +// Hydra collections +$this->assertJsonContains(['hydra:totalItems' => 5]); +$this->assertJsonContains(['hydra:member' => []]); + +// IRI matching +$iri = $this->getIriFromResource($resource); +$this->assertMatchesRegularExpression('~^/customers/[A-Z0-9\-]+$~', $iri); +``` + +## Test data management + +### Using Codeception helpers + +Create test data using your project's tester helpers: + +```php +// Create a customer +$customerTransfer = $this->tester->haveCustomer([ + 'email' => 'test@example.com', + 'firstName' => 'John', + 'lastName' => 'Doe', +]); + +// Create multiple customers +for ($i = 1; $i <= 10; $i++) { + $this->tester->haveCustomer([ + 'email' => sprintf('customer%d@example.com', $i), + ]); +} +``` + +### Cleanup strategies + +#### Automatic cleanup (default) + +The test kernel automatically cleans up after each test. No manual cleanup needed. + +#### Manual cleanup (when needed) + +```php +protected function tearDown(): void +{ + // Custom cleanup logic + $this->tester->cleanupCustomers(); + + parent::tearDown(); +} +``` + +## Testing different media types + +### JSON-LD (default) + +```php +public function testJsonLdFormat(): void +{ + static::createClient()->request('GET', '/customers', [ + 'headers' => [ + 'Accept' => 'application/ld+json', + ], + ]); + + $this->assertResponseHeaderSame('Content-Type', 'application/ld+json; charset=utf-8'); + $this->assertJsonContains(['@context' => '/contexts/Customer']); +} +``` + +### JSON:API + +```php +public function testJsonApiFormat(): void +{ + static::createClient()->request('GET', '/customers', [ + 'headers' => [ + 'Accept' => 'application/vnd.api+json', + ], + ]); + + $this->assertResponseHeaderSame('Content-Type', 'application/vnd.api+json; charset=utf-8'); + $this->assertJsonContains(['data' => ['type' => 'Customer']]); +} +``` + +### HAL+JSON + +```php +public function testHalJsonFormat(): void +{ + static::createClient()->request('GET', '/customers', [ + 'headers' => [ + 'Accept' => 'application/hal+json', + ], + ]); + + $this->assertResponseHeaderSame('Content-Type', 'application/hal+json; charset=utf-8'); + $this->assertJsonContains(['_links' => ['self' => ['href' => '/customers']]]); +} +``` + +## Advanced testing patterns + +### Testing with filters + +```php +public function testGivenFilterParamsWhenRetrievingCollectionThenFilteredResultsAreReturned(): void +{ + // Arrange + $this->tester->haveCustomer(['email' => 'active@example.com', 'status' => 'active']); + $this->tester->haveCustomer(['email' => 'inactive@example.com', 'status' => 'inactive']); + + // Act + static::createClient()->request('GET', '/customers?status=active'); + + // Assert + $this->assertResponseIsSuccessful(); + $responseData = static::createClient()->getResponse()->toArray(); + $this->assertCount(1, $responseData['hydra:member']); +} +``` + +### Testing sorting + +```php +public function testGivenSortParamsWhenRetrievingCollectionThenSortedResultsAreReturned(): void +{ + // Arrange + $this->tester->haveCustomer(['lastName' => 'Zulu']); + $this->tester->haveCustomer(['lastName' => 'Alpha']); + $this->tester->haveCustomer(['lastName' => 'Bravo']); + + // Act + static::createClient()->request('GET', '/customers?order[lastName]=asc'); + + // Assert + $this->assertResponseIsSuccessful(); + $responseData = static::createClient()->getResponse()->toArray(); + $members = $responseData['hydra:member']; + + $this->assertEquals('Alpha', $members[0]['lastName']); + $this->assertEquals('Bravo', $members[1]['lastName']); + $this->assertEquals('Zulu', $members[2]['lastName']); +} +``` + +### Testing error scenarios + +```php +public function testGivenMalformedJsonWhenCreatingCustomerViaPostThenBadRequestIsReturned(): void +{ + // Act + static::createClient()->request('POST', '/customers', [ + 'body' => '{invalid-json}', + 'headers' => [ + 'Content-Type' => 'application/json', + ], + ]); + + // Assert + $this->assertResponseStatusCodeSame(400); +} + +public function testGivenUnauthorizedRequestWhenAccessingProtectedResourceThen401IsReturned(): void +{ + // Act + static::createClient()->request('GET', '/customers/me'); + + // Assert + $this->assertResponseStatusCodeSame(401); +} +``` + +## Running tests + +### Run all project tests (slow, not recommended) + +```bash +docker/sdk cli vendor/bin/codecept run +``` + +### Run specific test suite + +```bash +# Run Backend API tests only +docker/sdk cli vendor/bin/codecept run -c path/to/codeception.yml -g BackendApi + +# Run Storefront API tests only +docker/sdk cli vendor/bin/codecept run -c path/to/codeception.yml -g StorefrontApi +``` + +## Codeception configuration + +### Suite configuration + +Configure your test suite's `codeception.yml` to enable the necessary helpers: + +`tests/PyzTest/Glue/Customer/BackendApi/codeception.yml` + +```yaml +suite_namespace: PyzTest\Glue\Customer\BackendApi + +actor: BackendApiTester + +modules: + enabled: + - \SprykerTest\Shared\Testify\Helper\BootstrapHelper: + applicationPluginProvider: + class: Spryker\Glue\GlueBackendApiApplication\GlueBackendApiApplicationFactory + method: getApplicationPlugins + +paths: + tests: . + data: ../../../../../_data + support: _support + output: ../../../../../_output + +settings: + bootstrap: _bootstrap.php + colors: true + memory_limit: 1024M +``` + +**Key configuration points:** + +- **BootstrapHelper**: Provides application plugins for the test kernel. This is optional and can be omitted if your tests do not require application-level dependencies. +- **suite_namespace**: Must match your test suite's PHP namespace +- **actor**: The tester class name (for example, `BackendApiTester`, `StorefrontApiTester`) + +### Helper classes + +Create helper classes to manage test data: + +`tests/PyzTest/Glue/Customer/Helper/CustomerHelper.php` + +```php +fromArray($seed, true) + ->setEmail($seed['email'] ?? sprintf('customer-%s@example.com', uniqid())) + ->setFirstName($seed['firstName'] ?? 'Test') + ->setLastName($seed['lastName'] ?? 'Customer'); + + return $this->getCustomerFacade()->createCustomer($customerTransfer); + } + + protected function getCustomerFacade(): CustomerFacadeInterface + { + return $this->getModule('\\PyzTest\\Shared\\Testify\\Helper\\Environment') + ->getFacade('Customer'); + } +} +``` + +## Best practices + +### 1. Use descriptive test method names + +```php +// ✅ Good +public function testGivenInvalidEmailWhenCreatingCustomerViaPostThenValidationErrorIsReturned(): void + +// ❌ Bad +public function testCreate(): void +``` + +### 2. Follow Arrange-Act-Assert pattern + +```php +public function testExample(): void +{ + // Arrange - Set up test data and preconditions + $data = ['email' => 'test@example.com']; + + // Act - Execute the operation being tested + static::createClient()->request('POST', '/customers', ['json' => $data]); + + // Assert - Verify the results + $this->assertResponseIsSuccessful(); +} +``` + +### 3. Test one thing per test + +```php +// ✅ Good - Tests one specific validation rule +public function testGivenMissingEmailWhenCreatingCustomerThenValidationErrorIsReturned(): void +{ + static::createClient()->request('POST', '/customers', ['json' => []]); + $this->assertJsonContains(['violations' => [['propertyPath' => 'email']]]); +} + +// ❌ Bad - Tests multiple unrelated things +public function testCustomerCreation(): void +{ + // Tests validation, creation, retrieval, update all in one test +} +``` + +### 4. Use meaningful test data + +```php +// ✅ Good +$customerData = [ + 'email' => 'john.doe@example.com', // Realistic email + 'firstName' => 'John', // Realistic name + 'lastName' => 'Doe', +]; + +// ❌ Bad +$customerData = [ + 'email' => 'a@b.c', // Not realistic + 'firstName' => 'x', // Not meaningful + 'lastName' => 'y', +]; +``` + +### 5. Clean up test data appropriately + +```php +// For Backend API tests - use tester helpers for setup +$customer = $this->tester->haveCustomer(['email' => 'test@example.com']); + +// Cleanup happens automatically via test kernel shutdown +``` + +### 6. Test error cases + +```php +// Always test both success and failure scenarios +public function testSuccessfulCreation(): void { /* ... */ } +public function testValidationErrors(): void { /* ... */ } +public function testDuplicateEmail(): void { /* ... */ } +public function testNotFound(): void { /* ... */ } +``` + +### 7. Use constants for repeated values + +```php +class CustomersBackendApiTest extends BackendApiTestCase +{ + private const TEST_EMAIL = 'test@example.com'; + private const TEST_FIRST_NAME = 'John'; + + public function testExample(): void + { + $data = [ + 'email' => self::TEST_EMAIL, + 'firstName' => self::TEST_FIRST_NAME, + ]; + // ... + } +} +``` + +### 8. Group related tests + +```php +/** + * @group PyzTest + * @group Glue + * @group Customer + * @group BackendApi + * @group CustomersBackendApiTest + * @group ValidationTests + */ +class CustomersBackendApiTest extends BackendApiTestCase +{ + // Run only validation tests: + // vendor/bin/codecept run -g ValidationTests +} +``` + +## Troubleshooting + +### Generated resources not found + +**Problem:** Test fails with "Class not found" for generated resource. + +**Solution:** + +1. Verify autoload configuration in `composer.json`: + +```json +{ + "autoload-dev": { + "psr-4": { + "PyzTest\\": "tests/PyzTest/", + "Generated\\TestApi\\": "tests/_data/Api/" + } + } +} +``` + +2. Run composer dump-autoload: + +```bash +docker/sdk cli composer dump-autoload +``` + +### Test kernel boot failures + +**Problem:** Tests fail with kernel boot errors. + +**Solution:** + +Ensure your test case extends the correct base class: + +```php +// For Backend API +use PyzTest\Shared\ApiPlatform\Test\BackendApiTestCase; + +class CustomersBackendApiTest extends BackendApiTestCase +{ + // ... +} + +// For Storefront API +use PyzTest\Shared\ApiPlatform\Test\StorefrontApiTestCase; + +class CustomersStorefrontApiTest extends StorefrontApiTestCase +{ + // ... +} +``` + +### Assertion failures with JSON-LD + +**Problem:** JSON assertions fail with `@context` or `@type` fields. + +**Solution:** + +Use JSON-LD specific assertions: + +```php +// ✅ Correct +$this->assertJsonContains(['@type' => 'Customer']); +$this->assertJsonContains(['@context' => '/contexts/Customer']); + +// ❌ Wrong +$this->assertJsonContains(['type' => 'Customer']); +``` + +### Tester helper not found + +**Problem:** `$this->tester` property shows as undefined. + +**Solution:** + +1. Verify your tester class exists in the correct location +2. Check that the tester is properly type-hinted in your test: + +```php +class CustomersBackendApiTest extends BackendApiTestCase +{ + protected BackendApiTester $tester; // Must be declared +} +``` + +3. Rebuild Codeception actors: + +```bash +docker/sdk cli vendor/bin/codecept build +``` + +## Next steps + +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating API resources +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Resource schema reference +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Validation schema reference +- [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues and solutions +- [Codeception Documentation](https://codeception.com/docs/Introduction) - Codeception framework docs +- [API Platform Testing](https://api-platform.com/docs/symfony/testing/) - Official API Platform testing guide diff --git a/docs/dg/dev/architecture/api-platform/troubleshooting.md b/docs/dg/dev/architecture/api-platform/troubleshooting.md index 6837cc80aa3..56a4ca819b4 100644 --- a/docs/dg/dev/architecture/api-platform/troubleshooting.md +++ b/docs/dg/dev/architecture/api-platform/troubleshooting.md @@ -1,7 +1,7 @@ --- title: Troubleshooting API Platform description: Common issues and solutions when working with API Platform in Spryker. -last_updated: Nov 24, 2025 +last_updated: Dec 21, 2025 template: troubleshooting-guide-template related: - title: API Platform @@ -10,8 +10,12 @@ related: link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html - title: API Platform Enablement link: docs/dg/dev/architecture/api-platform/enablement.html - - title: Schemas and Resource Generation - link: docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: Validation Schemas + link: docs/dg/dev/architecture/api-platform/validation-schemas.html + - title: API Platform Testing + link: docs/dg/dev/architecture/api-platform/testing.html --- This document provides solutions to common issues when working with API Platform in Spryker. @@ -20,7 +24,7 @@ This document provides solutions to common issues when working with API Platform ### Resources not generating -**Symptom:** Running `docker/sdk cli glue api:generate` completes but no resources are created. +**Symptom:** Running `docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate` completes but no resources are created. **Possible causes:** @@ -58,10 +62,10 @@ This document provides solutions to common issues when working with API Platform docker/sdk cli glue api:debug --list # Check schema validation -docker/sdk cli glue api:generate --validate-only +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --validate-only # Force regeneration -docker/sdk cli glue api:generate --force +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --force ``` ### Schema validation errors @@ -97,7 +101,7 @@ docker/sdk cli glue api:generate --force 2. Use `--validate-only` flag for detailed validation: ```bash - docker/sdk cli glue api:generate --validate-only + docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --validate-only ``` 3. Inspect merged schema: @@ -385,7 +389,7 @@ Check for: Preview generation without writing files: ```bash -docker/sdk cli glue api:generate --dry-run +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate --dry-run ``` ## Getting help @@ -432,4 +436,6 @@ If you encounter issues not covered here: - [API Platform](/docs/dg/dev/architecture/api-platform.html) - Overview and concepts - [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) - Setup guide - [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources -- [Schemas and Resource Generation](/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html) - Schema reference +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Resource schema reference +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Validation schema reference +- [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html) - Testing guide diff --git a/docs/dg/dev/architecture/api-platform/validation-schemas.md b/docs/dg/dev/architecture/api-platform/validation-schemas.md new file mode 100644 index 00000000000..8fa01a4c5aa --- /dev/null +++ b/docs/dg/dev/architecture/api-platform/validation-schemas.md @@ -0,0 +1,538 @@ +--- +title: Validation Schemas +description: Understanding API Platform validation schema definitions in Spryker. +last_updated: Dec 21, 2025 +template: concept-topic-template +related: + - title: API Platform + link: docs/dg/dev/architecture/api-platform.html + - title: How to integrate API Platform + link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html + - title: Resource Schemas + link: docs/dg/dev/architecture/api-platform/resource-schemas.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: API Platform Testing + link: docs/dg/dev/architecture/api-platform/testing.html +--- + +This document explains how to define validation rules for API Platform resources in Spryker. + +## Validation schema basics + +Validation schemas define constraints for resource properties per operation type. They are defined in separate YAML files alongside resource schemas. + +### Validation schema location + +Validation schemas must be placed in the same directory as resource schemas, using the `.validation.yml` suffix: + +```MARKDOWN +src/ +└── Pyz/ + └── Glue/ + └── Customer/ + └── resources/ + └── api/ + └── backend/ + ├── customers.yml # Resource schema + └── customers.validation.yml # Validation schema +``` + +### Basic validation syntax + +```yaml +post: + email: + - NotBlank: + message: "Email is required" + - Email: + message: "Invalid email format" + + firstName: + - NotBlank + - Length: + min: 2 + max: 100 + minMessage: "Name must be at least {{ limit }} characters" + maxMessage: "Name cannot exceed {{ limit }} characters" + +patch: + email: + - Optional: + constraints: + - NotBlank + - Email +``` + +## Symfony validation constraints + +API Platform supports all Symfony validation constraints out of the box. + +### String constraints + +```yaml +# Required field +- NotBlank: + message: "This field is required" + +# Email validation +- Email: + message: "Invalid email format" + +# Length validation +- Length: + min: 2 + max: 100 + minMessage: "Too short" + maxMessage: "Too long" + +# Regular expression +- Regex: + pattern: '/^[A-Z][a-z]+$/' + message: "Must start with uppercase letter" + +# Choice from list +- Choice: + choices: ["active", "inactive", "pending"] + message: "Invalid status" + +# URL validation +- Url: + message: "Invalid URL" +``` + +### Numeric constraints + +```yaml +# Positive number +- Positive: + message: "Must be positive" + +# Range validation +- Range: + min: 0 + max: 100 + notInRangeMessage: "{% raw %}Must be between {{ min }} and {{ max }}{% endraw %}" + +# Greater than +- GreaterThan: + value: 0 + message: "{% raw %}Must be greater than {{ compared_value }}{% endraw %}" +``` + +### Date constraints + +```yaml +# Date format +- Date: + message: "Invalid date format" + +# DateTime format +- DateTime: + message: "Invalid datetime format" + +# Future date +- GreaterThan: + value: "today" + message: "Must be a future date" +``` + +### Security constraints + +```yaml +# Password strength +- NotCompromisedPassword: + message: "This password has been leaked in a data breach" + +# Complex password requirements +- Regex: + pattern: '/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$/' + message: "Password must contain uppercase, lowercase, number, and special character" +``` + +## Custom constraint classes (FQCN) + +In addition to Symfony's built-in constraints, you can use Fully Qualified Class Names (FQCNs) to reference custom constraint classes from Spryker modules or third-party packages. + +### Basic FQCN usage + +Reference custom constraints using their fully qualified class name: + +```yaml +post: + email: + - NotBlank + - Email + - \Spryker\Zed\Customer\Business\Validator\UniqueEmail +``` + +**Generated code:** + +```php +use Symfony\Component\Validator\Constraints as Assert; +use Spryker\Zed\Customer\Business\Validator\UniqueEmail; + +#[Assert\NotBlank(groups: ['customers:create'])] +#[Assert\Email(groups: ['customers:create'])] +#[UniqueEmail(groups: ['customers:create'])] +public ?string $email = null; +``` + +### FQCN normalization + +The leading backslash is optional - both formats are supported: + +```yaml +# With leading backslash +- \Spryker\Zed\Customer\Business\Validator\UniqueEmail + +# Without leading backslash (also valid) +- Spryker\Zed\Customer\Business\Validator\UniqueEmail +``` + +Both generate the same code. + +### FQCN with constraint options + +Pass parameters to custom constraints just like Symfony constraints: + +```yaml +post: + email: + - \Spryker\Zed\Customer\Business\Validator\UniqueEmail: + message: "This email address is already registered" + ignoreDeleted: true +``` + +**Generated code:** + +```php +use Spryker\Zed\Customer\Business\Validator\UniqueEmail; + +#[UniqueEmail(message: 'This email address is already registered', ignoreDeleted: true, groups: ['customers:create'])] +public ?string $email = null; +``` + +### Collision handling and automatic aliasing + +When multiple constraints have the same short name, the generator automatically creates aliases to avoid conflicts. + +#### Spryker module collision + +When constraints from different Spryker modules have the same name, the module name is included in the alias: + +```yaml +post: + email: + - \Spryker\Zed\Customer\Business\Validator\Email + - \Spryker\Glue\Product\Business\Validator\Email +``` + +**Generated code:** + +```php +use Spryker\Zed\Customer\Business\Validator\Email as SprykerCustomerEmail; +use Spryker\Glue\Product\Business\Validator\Email as SprykerProductEmail; + +#[SprykerCustomerEmail(groups: ['customers:create'])] +#[SprykerProductEmail(groups: ['customers:create'])] +public ?string $email = null; +``` + +#### Multi-vendor collision + +When constraints from different vendors collide, the vendor name is used as the alias prefix: + +```yaml +post: + value: + - \Spryker\Zed\Validator\NotNull + - \Acme\Validation\NotNull +``` + +**Generated code:** + +```php +use Spryker\Zed\Validator\NotNull as SprykerNotNull; +use Acme\Validation\NotNull as AcmeNotNull; + +#[SprykerNotNull(groups: ['customers:create'])] +#[AcmeNotNull(groups: ['customers:create'])] +public ?string $value = null; +``` + +#### Collision with Symfony constraints + +Symfony constraints always use the `Assert\` prefix and never collide with custom constraints. FQCN constraints are imported separately: + +```yaml +post: + value: + - NotNull # Symfony constraint + - \Spryker\Validator\NotNull # Custom Spryker constraint +``` + +**Generated code:** + +```php +use Symfony\Component\Validator\Constraints as Assert; +use Spryker\Validator\NotNull as SprykerNotNull; + +#[Assert\NotNull(groups: ['customers:create'])] +#[SprykerNotNull(groups: ['customers:create'])] +public ?string $value = null; +``` + +### FQCN in composite constraints + +FQCN constraints work seamlessly in composite constraints like `All`, `Sequentially`, and `Optional`: + +```yaml +post: + items: + - All: + constraints: + - \Spryker\Zed\Product\Business\Validator\ValidSku + - \Spryker\Zed\Stock\Business\Validator\InStock + +patch: + items: + - Optional: + constraints: + - All: + constraints: + - \Spryker\Zed\Product\Business\Validator\ValidSku +``` + +**Generated code:** + +```php +use Spryker\Zed\Product\Business\Validator\ValidSku; +use Spryker\Zed\Stock\Business\Validator\InStock; + +#[Assert\All(constraints: [new ValidSku(), new InStock()], groups: ['customers:create'])] +public array $items = []; +``` + +## Operation-specific validation + +Define different validation rules for different operations: + +```yaml +post: + password: + - NotBlank + - Length: + min: 12 + max: 128 + - Regex: + pattern: '/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)/' + message: "Password must contain uppercase, lowercase, and number" + +patch: + password: + - Optional: + constraints: + - Length: + min: 12 + max: 128 + +put: + password: + - NotBlank +``` + +The operation names map to HTTP methods: +- `post` → POST (create) +- `get` → GET (single resource) +- `getCollection` → GET (collection) +- `put` → PUT (replace) +- `patch` → PATCH (update) +- `delete` → DELETE (remove) + +## Validation constraint deduplication + +The generator automatically deduplicates validation constraints by their signature and groups validation groups together. + +### How deduplication works + +If the same constraint is defined for multiple operations, it will be generated once with combined validation groups: + +```yaml +# Schema definition +post: + name: + - NotBlank + - Length: + max: 100 + +patch: + name: + - NotBlank + - Length: + max: 100 +``` + +**Generated code:** + +```php +// Instead of duplicate constraints: +// #[Assert\NotBlank(groups: ['customers:create'])] +// #[Assert\NotBlank(groups: ['customers:update'])] +// #[Assert\Length(max: 100, groups: ['customers:create'])] +// #[Assert\Length(max: 100, groups: ['customers:update'])] + +// The generator produces: +#[Assert\NotBlank(groups: ['customers:create', 'customers:update'])] +#[Assert\Length(max: 100, groups: ['customers:create', 'customers:update'])] +public ?string $name = null; +``` + +This ensures cleaner generated code while maintaining the same validation behavior across different operations. + +### Deduplication with FQCN constraints + +Deduplication works the same way for FQCN constraints: + +```yaml +post: + email: + - \Spryker\Zed\Customer\Business\Validator\UniqueEmail + +patch: + email: + - \Spryker\Zed\Customer\Business\Validator\UniqueEmail +``` + +**Generated code:** + +```php +#[UniqueEmail(groups: ['customers:create', 'customers:update'])] +public ?string $email = null; +``` + +## Best practices + +### 1. Use operation-specific validation + +```yaml +# ✅ Good - Different rules per operation +post: + password: + - NotBlank + - Length: { min: 12 } + +patch: + password: + - Optional: + constraints: + - Length: { min: 12 } + +# ❌ Bad - Same validation everywhere +password: + required: true +``` + +### 2. Provide meaningful error messages + +```yaml +# ✅ Good +- Email: + message: "Please provide a valid email address" + +- Length: + min: 8 + minMessage: "Password must be at least 8 characters for security" + +# ❌ Bad +- Email +- Length: { min: 8 } +``` + +### 3. Use composite constraints for arrays + +```yaml +# ✅ Good +items: + - All: + constraints: + - NotBlank + - Regex: + pattern: '/^[A-Z0-9]+$/' + +# ❌ Bad - Won't validate array elements +items: + - NotBlank +``` + +### 4. Leverage validation groups + +Validation groups are automatically managed based on operations. Use them to apply different rules for create vs update: + +```yaml +# POST requires password +post: + password: + - NotBlank + +# PATCH allows optional password change +patch: + password: + - Optional: + constraints: + - Length: { min: 12 } +``` + +### 5. Combine Symfony and custom constraints + +```yaml +# ✅ Good - Mix and match as needed +email: + - NotBlank # Symfony + - Email # Symfony + - \Spryker\Zed\Customer\Business\Validator\UniqueEmail # Custom + +# Works perfectly together +``` + +## Validation schema merging + +Just like resource schemas, validation schemas are merged across layers (Core → Feature → Project). + +**Core validation** (vendor): + +```yaml +post: + email: + - NotBlank + - Email +``` + +**Project validation** (Pyz): + +```yaml +post: + email: + - NotBlank + - Email + - \Pyz\Zed\Customer\Business\Validator\CompanyEmailDomain +``` + +**Merged result** (with deduplication): + +```yaml +post: + email: + - NotBlank # Deduplicated from both layers + - Email # Deduplicated from both layers + - \Pyz\Zed\Customer\Business\Validator\CompanyEmailDomain # Added in project layer +``` + +## Next steps + +- [API Platform](/docs/dg/dev/architecture/api-platform.html) - Architecture overview +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Define resource structure +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources +- [API Platform Testing](/docs/dg/dev/architecture/api-platform/testing.html) - Writing and running tests +- [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues +- [Symfony Validation Documentation](https://symfony.com/doc/current/validation.html) - Official Symfony validation docs diff --git a/docs/dg/dev/architecture/architectural-convention.md b/docs/dg/dev/architecture/architectural-convention.md index 467b8a458ec..0a5ebac8a93 100644 --- a/docs/dg/dev/architecture/architectural-convention.md +++ b/docs/dg/dev/architecture/architectural-convention.md @@ -12,7 +12,6 @@ related: link: docs/dg/dev/architecture/modules-and-application-layers.html --- - This document provides an overview of our conventions and guidelines. The technology landscape is ever-evolving, so this document is subject to continuous refinement and improvement. Your feedback and suggestions are highly valued to enhance the accuracy, relevance, and effectiveness of Spryker. We encourage you to contribute your insights and recommendations by submitting changes through our designated channels. @@ -27,7 +26,7 @@ Understanding the development scenarios in which Spryker can be used is crucial - *Project development*: If you are developing a project, you need to adhere to specific project development guidelines to ensure a smooth integration. - *Module development*: Contributing reusable third-party modules, boilerplates, or accelerators requires additional considerations. Because such functionalities are reusable on multiple projects in different contexts, these guidelines are more strict than those for *project development*. -- *Core module development*: When contributing to Spryker modules, there are rules to follow in the module folders. This ensures consistency and compatibility across product lines in the Spryker Framework. These requirements are the the most strict to be reusable on multiple projects in different business verticals, like B2C, B2B, Marketplace, or Unified Commerce. These rules also ensure the stability of the module API used by Spryker development ecosystem and community. +- *Core module development*: When contributing to Spryker modules, there are rules to follow in the module folders. This ensures consistency and compatibility across product lines in the Spryker Framework. These requirements are the most strict to be reusable on multiple projects in different business verticals, like B2C, B2B, Marketplace, or Unified Commerce. These rules also ensure the stability of the module API used by Spryker development ecosystem and community. ### Directive classification @@ -48,7 +47,7 @@ Spryker organizes responsibilities and functionalities over a set of [applicatio The application layers are aggregations of [layers](https://docs.spryker.com/docs/dg/dev/architecture/modules-and-application-layers.html). Some application layers are multi-layered with components organized in layer directories, while others are flat-layered with components merged in the same directory. | APPLICATION LAYER | LAYERING | LAYER | -|-|-| +|-|-|-| | Glue | flat-layered | Communication layer | | Client | flat-layered | Communication layer | | Service | flat-layered | Overarching Business layer | @@ -333,7 +332,7 @@ Used components: The Service application layer is a multipurpose library that's used across various application layers, such as Yves, Client, Glue, or Zed. -A service primarily consists of reusable lightweight stateless business logic components. Because of its deployment across all applications, a service is constrained to accessing data providers that are available universally. For example, the backend database is not accessible from Storefront applications by default. +A service primarily consists of reusable lightweight stateless business logic components. You are not allowed to access any external data sources, and have to rely only on the data that is passed to the called method. ```text [Organization] @@ -857,7 +856,7 @@ No general conventions. - The `Entity manager` class needs to define and implement an interface that holds the specification of each `public` method. - `Entity manager` methods need to receive only [Transfer Objects](#transfer-object) as input parameters. - `Entity manager` methods need to return `void` or the saved object or objects as [Transfer Objects](#transfer-object). --`Entitie manager` needs to use [Entities](#entity) and/or [Query Objects](#query-object) for database operations because raw SQL usage isn't feasible. + -`Entity manager` needs to use [Entities](#entity) and/or [Query Objects](#query-object) for database operations because raw SQL usage isn't feasible.

    @@ -1550,8 +1549,8 @@ The schema file defines the module's tables and columns. Schema files are organi - - + @@ -1797,7 +1796,7 @@ The following rules only apply to the API transfer schema definitions following - Should use the `restRequestParameter` attribute when applicable with either of: `required`, `yes`, or `no`; This is used by the OpenAPI schema generator to show if a field is used in the request and if it is required or not. - Should use the `restResponseParameter` attribute when applicable with either of: `required`, `yes`, or `no`; This is used by the OpenAPI schema generator to show if a field is used in the response and if it is required or not. -Further reading [Document Glue API resources](/docs/dg/dev/glue-api/latest/glue-api-tutorials/document-glue-api-resources.html) +Further reading [Document Glue API resources](/docs/dg/dev/glue-api/202410.0/glue-api-tutorials/document-glue-api-resources.html) @@ -1813,7 +1812,7 @@ Further reading [Document Glue API resources](/docs/dg/dev/glue-api/latest/glue- ```xml - + diff --git a/docs/dg/dev/architecture/architecture-as-code.md b/docs/dg/dev/architecture/architecture-as-code.md new file mode 100644 index 00000000000..81cd25a5e2a --- /dev/null +++ b/docs/dg/dev/architecture/architecture-as-code.md @@ -0,0 +1,244 @@ +--- +title: Architecture as Code +description: Learn how to implement Architecture as Code in your Spryker project using industry standards like arc42, C4 Model, and diagrams-as-code to maintain living, version-controlled documentation. +keywords: Architecture as Code,arc42,C4 Model,diagrams-as-code,diagram +last_updated: Feb 20, 2026 +template: concept-topic-template +related: + - title: Architectural Convention + link: /docs/dg/dev/architecture/architectural-convention.html + - title: Modules and Application Layers + link: /docs/dg/dev/architecture/modules-and-application-layers.html +--- + +Well-documented project architecture enables faster internal and external onboarding, passes audits cleanly and aligns teams on requirements. Without it, your system becomes a black box that only the original developers understand. + +**Architecture as Code** treats architecture documentation like code, similarly to the Infrastructure-as-Code concept. Instead of storing architecture in binary formats or external tools (Word, PowerPoint, Visio, Confluence) that become outdated quickly, you store and maintain architecture documentation in version control alongside your implementation. + +Spryker ships the architecture/ folder with a complete Architecture as Code structure with its demoshop codebase. You can refer to `architecture/README.md` that describes how to work with it. Below, you find all the general information about the structure and principles. We go into the details of each aspect to help you understand and extend this architecture documentation in your project. + +{% info_block infoBox "Existing projects" %} + +If your project is based on a Spryker release before 202602.0, refer to the [Spryker B2B Demo Marketplace](https://github.com/spryker/b2b-demo-marketplace) master branch source code to see how the Architecture as Code structure is implemented and to copy the "architecture/" folder into your project. + +{% endinfo_block %} + +## Why Architecture as Code + +Traditional architecture documentation suffers from several challenges: + +- **Documentation drift** - Binary formats stored separately from code become outdated quickly +- **Version control gaps** - Specialized tools do not integrate with Git workflows +- **Collaboration barriers** - Requires specialized software and binary file merging +- **AI limitations** - AI tools understand code and Markdown effectively but struggle with proprietary formats and binary documents + +Architecture as Code solves these problems: + +- **Version controlled** - Store in Git alongside implementation. Track every change with full history. +- **AI-ready** - Markdown and diagrams-as-code enable AI assistance, automated validation, and intelligent analysis. +- **Standard formats** - Use industry standards (arc42, C4, ADRs, Mermaid) that external teams understand immediately. +- **Collaborative** - Review through pull requests. No special tools required — only a text editor. +- **Living documentation** - Update during development, not after. Documentation evolves with your system. + +## Core Principles + +**Standards over invention** - Use industry-proven formats and standards (arc42, C4, ADRs, Mermaid) instead of custom documentation. + +**Minimal but sufficient** - Start simple. Prioritize clarity and expansion over completeness on day one. + +**Architecture is code** - Write in plain text, store in Git, review through pull requests, deploy automatically. + +## Concepts and Choices + +### arc42 + +[arc42](https://arc42.org/) is a proven template for architecture documentation used globally across industries. + +**Why arc42 fits Spryker projects:** + +Spryker projects vary dramatically in complexity — from simple B2C shops to complex B2B marketplaces with extensive integrations and order management systems. arc42 is flexible enough to cover architecture of any complexity and scales as your Spryker implementation grows. You can start simple with minimal sections and expand as your architecture requires more detail. + +The template includes 12 sections (described below) covering all architectural aspects. Section 4 (Solution Designs) provides RFC-style exploration templates. Section 9 (Architecture Decisions) uses ADRs to document decisions with context and consequences. This workflow — explore with Solution Designs, then document decisions with ADRs — ensures thoughtful architecture evolution. + +### C4 Model + +[C4 Model](https://c4model.com/) provides a hierarchical approach to system visualization with four levels of abstraction. + +**Why C4 fits Spryker architecture:** + +Spryker architecture unfolds naturally through C4 layers — start with the system context, zoom into containers (Yves, Zed, Client, databases, services), then dive deeper into layers and components as needed. This progressive detail matches how Spryker complexity reveals itself. The entire Spryker feature set can be shown using this unfolding approach. + +**Flexibility advantage:** + +You control the depth. Start at C1 (context) and continue only as deep as your documentation needs require. Given limited architect time, this flexibility is essential — stop at the level appropriate for your stakeholders and complexity. + +### Mermaid and PlantUML + +**Mermaid** - Our primary choice for diagramming-as-code: + +- Renders automatically in GitHub and GitLab, and can be rendered via plugins in popular IDEs +- No proprietary tools required +- Covers 90% of diagram needs: flowcharts, sequences, C4 diagrams +- Online editor at [mermaid.live](https://mermaid.live/) for convenient editing and better visualization than most IDEs + +**PlantUML** - For precision when needed: + +- Essential for Entity-Relationship Diagrams where field-level precision matters +- Online editor at [plantuml.com](https://www.plantuml.com/plantuml/) for live editing and preview + +## What Comes Out of the Box + +We provide templates with clear structure and minimal context, plus examples of the most common diagram types (C4, data flow, integration, sequence) and documentation patterns (ADRs, Solution Designs). AI tools work most efficiently when they see the methodology (like arc42), understand the structure, and have examples to follow. This approach enables you to generate architecture documentation much faster with AI assistance. + +Templates provide examples and structural guidance — you should adapt content to your project's context. You do not need to implement all sections immediately; remove or keep unused sections based on your documentation strategy. + +### Folder Structure + +```text +architecture/ +├── 01-introduction-and-goals.md # Requirements, quality goals, stakeholders +├── 02-constraints.md # Technical, organizational constraints +├── 03-system-scope-and-context.md # System boundaries, external interfaces +│ # Includes: External systems and integration tables +├── 04-solution-designs/ # RFC-style exploration documents +│ ├── README.md # Workflow explanation +│ └── sd-000-template.md # Solution design template +├── 05-building-block-view.md # System decomposition +├── 06-runtime-view.md # Behavior and interactions +├── 07-deployment-view.md # Infrastructure topology +├── 08-crosscutting-concepts.md # Patterns spanning components +├── 09-architecture-decisions/ # Architecture decision records +│ ├── README.md # ADR workflow and sources +│ └── adr-000-template.md # ADR template +├── 10-quality-requirements.md # Performance, scalability, testing +│ # Includes: Volume planning, testing strategy +├── 11-risks-and-technical-debt.md # Known issues and mitigation +├── 12-glossary.md # Domain terminology +├── diagrams/ +│ ├── c4/ +│ │ ├── c1-system-context.mmd # System context diagram +│ │ ├── c2-spryker-container.mmd # Container diagram +│ │ └── c3-component-diagram.mmd # Component diagram +│ ├── data-flow/ +│ │ └── product-price-data-flow.mmd # Price data flow example +│ ├── integration/ +│ │ └── product-price-integration.mmd # Integration overview with protocols +│ ├── sequence/ +│ │ ├── api-payment.mmd # Payment flow +│ │ ├── publish-sync.mmd # Publish and Sync process +│ │ └── punchout-greenwing-integration.mmd # PunchOut example +│ └── erd/ # Entity-relationship diagrams (PlantUML) +└── README.md # Quick start and overview +``` + +### Diagram Organization and Best Practices + +You have two approaches to managing diagrams. Choose based on your documentation use case. + +**Approach 1: Inline Diagrams** + +Write diagram code directly in markdown using code fences: + +```mermaid +flowchart LR + A --> B +``` + +**Pros:** Diagrams are visible immediately; self-contained + +**Cons:** Increases file size; duplicates code if reused + +**Approach 2: External Diagram Files** + +Store diagram code in `/diagrams/` folder and reference via links: + +```markdown +[C1 System Context](diagrams/c4/c1-system-context.mmd) +``` + +**Pros:** Single source-of-truth; cleaner markdown; scalable + +**Cons:** Requires clicking to view (less immediate) + +**Choosing Your Approach** + +This template uses **Approach 2** for scalability and maintainability, but projects can mix both — use external files for core views, inline for one-off diagrams. + +**Universal Color Scheme:** + +All diagrams use colors optimized for both light and dark modes: + +- Orange `#E67E22` - Communication layer +- Blue `#2980B9` - Backend services, APIs +- Green `#27AE60` - Web apps, external systems +- Purple `#9B59B6` - Storage (databases, caches) +- Gray `#95A5A6` - Infrastructure + +### Templates and Guidelines + +**Solution Design Template** (`04-solution-designs/sd-000-template.md`): + +- Metadata section (status, date, stakeholders) +- Problem statement +- Goals and requirements +- Proposed solution with diagrams +- Implementation plan +- Trade-offs and alternatives + +**ADR Template** (`09-architecture-decisions/adr-000-template.md`): + +- Standard ADR structure +- Status tracking +- Context, decision, consequences +- Links to related decisions + +**Volume Planning Table** (Section 10): + +Pre-structured table for capacity planning covering: + +- Catalog entities (products, categories, prices) +- Cart constraints +- User load projections +- B2B customers structure +- Marketplace metrics +- Internationalization requirements +- Orders and infrastructure + +## Getting Help + +### Resources + +- **arc42 Documentation**: [https://arc42.org/](https://arc42.org/) +- **C4 Model Guide**: [https://c4model.com/](https://c4model.com/) +- **Mermaid Syntax**: [https://mermaid.js.org/](https://mermaid.js.org/) +- **ADR Guidelines**: [https://adr.github.io/](https://adr.github.io/) + +### Common Questions + +**Q: Do I need to fill in every arc42 section?** + +A: No. Fill in what is relevant for your project. Some sections may remain minimal. + +**Q: Can I add custom sections?** + +A: First, check all 12 arc42 sections — the standard format covers most architectural concerns. If no existing section fits your content, you can add a custom section. Ensure the section purpose is clear and describe it in the README.md file. + +**Q: How detailed should diagrams be?** + +A: For C4 diagrams, follow the levels: Context (high-level), Container (more detail), Component (detailed). For other diagram types (data flow, integration, sequence), follow industry standards for that specific notation. + +**Q: When should I create an ADR vs Solution Design?** + +A: Use Solution Design for exploration. Use ADR for documenting the final decision. + +**Q: Can I use different diagram notations?** + +A: Yes. The choice is yours — we do not limit you to Mermaid or PlantUML. Ensure your notation follows the core principles: viewable by people, understandable by AI tools, and ideally diagrams-as-code (text-based format in version control). + +**Q: Will diagrams-as-code replace whiteboards and visual editing tools?** + +A: No. The art of creating and drawing diagrams — whether on whiteboards, visual tools, or pen and paper — remains valuable. Diagrams-as-code is for documenting what you have drawn and decided. Use whatever tools help you think and collaborate, then capture the final result as code for version control and documentation. + +**Q: Can I use images as diagrams instead of diagrams-as-code?** + +A: Yes, it is better to have image diagrams than no diagrams at all, but understand the trade-off. Hand-drawn or visually edited diagrams often look more polished than generated ones. However, images are not as understandable or generable by AI (at least currently) and lack version control benefits. You can use both: include beautiful images for presentations and stakeholder communication, alongside diagrams-as-code for AI assistance and documentation processes. diff --git a/docs/dg/dev/architecture/architecture.md b/docs/dg/dev/architecture/architecture.md index c6c0cb7a73e..09df77be5a2 100644 --- a/docs/dg/dev/architecture/architecture.md +++ b/docs/dg/dev/architecture/architecture.md @@ -1,13 +1,15 @@ --- title: Architecture description: Explore Spryker's architectural principles, detailing the technical foundation for a scalable, modular ecommerce platform tailored to complex digital ecosystems. -last_updated: Jun 16, 2021 +last_updated: Feb 20, 2026 template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/about-the-architecture-guide originalArticleId: 926005b6-d8c9-4d6a-851a-f3a4f551d0d3 redirect_from: - /docs/scos/dev/architecture/architecture.html related: + - title: Architecture as Code + link: /docs/dg/dev/architecture/architecture-as-code.html - title: Conceptual overview link: docs/dg/dev/architecture/conceptual-overview.html - title: Programming concepts diff --git a/docs/dg/dev/architecture/dependency-injection/troubleshooting.md b/docs/dg/dev/architecture/dependency-injection/troubleshooting.md index d3afc19378c..9867ce4405e 100644 --- a/docs/dg/dev/architecture/dependency-injection/troubleshooting.md +++ b/docs/dg/dev/architecture/dependency-injection/troubleshooting.md @@ -443,9 +443,39 @@ This enables: ## Additional tips +### Clear application cache + +If you encounter container compilation issues or suspect the cache is stale, clear the cache for the affected application. + +**Clear cache for Zed:** + +```bash +docker/sdk cli vendor/bin/console cache:clear +``` + +**Clear cache for Glue API:** + +```bash +docker/sdk cli vendor/bin/glue cache:clear +``` + +**Clear cache for Glue Storefront API:** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_STOREFRONT vendor/bin/glue cache:clear +``` + +**Clear cache for Glue Backend API:** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND vendor/bin/glue cache:clear +``` + +These commands clear the compiled container cache and force a fresh compilation on the next request. + ### Verify container cache -If you suspect the container cache is stale: +If you need to manually inspect or remove specific container cache files: ```bash # Clear the container cache diff --git a/docs/dg/dev/architecture/symfony-bundles.md b/docs/dg/dev/architecture/symfony-bundles.md index 0e2275bda88..9c093820938 100644 --- a/docs/dg/dev/architecture/symfony-bundles.md +++ b/docs/dg/dev/architecture/symfony-bundles.md @@ -21,9 +21,9 @@ This document describes how to use [Symfony Bundles](https://symfony.com/doc/cur ## Registering a bundle -To use a bundle, you need to register it in `config/bundles.php`. +To use a bundle, you need to register it in `config/{APPLICATION}/bundles.php`. For example in `config/Zed/bundles.php` -For example, to use the `FrameworkBundle`, which is required to use the Dependency Injection component, add the following to your `config/bundles.php` file: +For example, to use the `FrameworkBundle`, which is required to use the Dependency Injection component, add the following to your `config/Zed/bundles.php` file: ```php secret('spryker-zed-secret'); + + $framework->assets([ + 'base_path' => '/assets', + ]); + + $framework->test('%kernel.environment%' === 'dockerdev'); +}; + +``` ## Next steps diff --git a/docs/dg/dev/backend-development/back-end-development.md b/docs/dg/dev/backend-development/back-end-development.md index b732339e127..a5678c3f354 100644 --- a/docs/dg/dev/backend-development/back-end-development.md +++ b/docs/dg/dev/backend-development/back-end-development.md @@ -34,3 +34,5 @@ This section contains overviews and instructions for back-end developing on the - [Messages and errors](/docs/dg/dev/backend-development/messages-and-errors/messages-and-errors.html) - [Factory](/docs/dg/dev/backend-development/factory/factory.html) + +- [Composable UI in Back Office](/docs/dg/dev/backend-development/composable-ui/composable-ui.html) diff --git a/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.md b/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.md new file mode 100644 index 00000000000..0701389c359 --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.md @@ -0,0 +1,489 @@ +--- +title: Back Office Composable UI Best Practices +description: Best practices and guidelines for developing Composable UI modules in Spryker Back Office. +template: howto-guide-template +last_updated: Feb 20, 2026 +related: + - title: Composable UI overview + link: docs/dg/dev/backend-development/composable-ui/composable-ui.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: Create a Composable UI module + link: docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document provides best practices and guidelines for developing Composable UI modules based on real-world implementation experience. + +## Configuration design + +### Use meaningful component IDs + +Component IDs are used internally by the Composable UI system to: +- **Reference components** with the `use` keyword, for example, `use: field.customer.email` +- **Override auto-generated components** in partial override mode +- **Enable component reusability** across forms and views + +These IDs are configuration-level identifiers and are not rendered in HTML or exposed to JavaScript. Use a consistent naming convention: + +```yaml +# Good: Clear, namespaced IDs +layout.customer.page +table.customer.list +form.customer.create +form.customer.edit +field.customer.email +action.customer.create +headline.customer.create + +# Avoid: Generic or unclear IDs +layout1 +myTable +form +emailField +``` + +### Prefer composition over duplication + +Reuse components with `use` and `overrides` instead of duplicating configuration: + +```yaml +# Good: Reuse base field with overrides +form.customer.edit: + component: DynamicFormComponent + fields: + - use: field.customer.email + overrides: + value: '${row.email}' + +# Avoid: Duplicating field definition +form.customer.edit: + component: DynamicFormComponent + fields: + - name: 'email' + type: 'email' + label: 'Email' + value: '${row.email}' +``` + +### Keep configurations DRY + +Extract common patterns into reusable components: + +```yaml +# Define field once +field.customer.email: + type: email + label: 'Email' + required: true + validators: { email: true } + +# Reuse in multiple forms with simplified syntax +form.customer.create: + component: DynamicFormComponent + fields: + - use: field.customer.email + - use: field.customer.firstName + submit: + label: 'Create' + url: '/customers' + success: 'Customer created successfully' + error: 'Failed to create customer' + +form.customer.edit: + component: DynamicFormComponent + fields: + - use: field.customer.email + - use: field.customer.firstName + submit: + label: 'Save' + url: '/customers/${row.customerReference}' + success: 'Customer saved successfully' + error: 'Failed to save customer' +``` + +### Organize components logically + +Group related components together in the configuration: + +```yaml +view: + components: + # Layouts first + layout.customer.page: + # ... + + # Then fields + field.customer.email: + # ... + field.customer.firstName: + # ... + + # Then forms + form.customer.create: + # ... + form.customer.edit: + # ... + + # Then tables + table.customer.list: + # ... + + # Then actions + action.customer.create: + # ... + + # Then headlines + headline.customer.create: + # ... +``` + +## API design + +### Use consistent naming + +Follow REST conventions for resource naming: + +| Resource | Endpoint | Description | +|----------|----------|-------------| +| Customers | `/customers` | Customer collection | +| Customer | `/customers/{id}` | Single customer | +| CustomerAddresses | `/customer-addresses` | Address collection | + + +### Configure searchable fields in YAML + +Mark fields as searchable in your entity YAML configuration: + +```yaml +fields: + email: + searchable: true + firstName: + searchable: true + lastName: + searchable: true + customerReference: + searchable: true +``` + +The `AbstractBackendProvider` automatically handles search functionality for all fields marked with `searchable: true`. No additional PHP code is required. + +## Form design + +### Group related fields + +Organize form fields logically: + +```yaml +form.customer.create: + component: DynamicFormComponent + style: + padding: '30px' + fields: + # Personal information + - use: field.customer.salutation + - use: field.customer.firstName + - use: field.customer.lastName + + # Contact information + - use: field.customer.email + - use: field.customer.phone + + # Additional details + - use: field.customer.dateOfBirth + - use: field.customer.company + submit: + label: 'Create' + url: '/customers' + success: 'Customer created successfully' +``` + +### Provide clear validation messages + +Use descriptive validation messages: + +```yaml +# Simplified field definition +field.customer.email: + type: email + label: 'Email Address' + required: true + validators: + email: + message: 'Please enter a valid email address' + +# Or in CRUD mode fields section +fields: + email: + type: email + required: true + searchable: true +``` + +### Handle form submission feedback + +Always provide success and error feedback. Use the simplified syntax: + +```yaml +submit: + label: 'Save' + url: '/customers/${row.customerReference}' # method: PATCH is default for edit + success: 'Customer saved successfully' + error: 'Failed to save customer. Please check your input and try again.' +``` + +## Table design + +### Choose appropriate column types + +Use appropriate column type for each data type: + +```yaml +columns: + - { id: 'reference', title: 'Reference' } + - { id: 'status', title: 'Status', type: 'chip' } + - { id: 'createdAt', title: 'Created', type: 'date', format: 'dd.MM.y' } + - { id: 'thumbnail', title: 'Image', type: 'image' } + - { id: 'price', title: 'Price' } # Format in provider +``` + +### Provide useful filters + +Add filters for commonly searched fields: + +```yaml +filters: + - id: 'status' + title: 'Status' + type: 'select' + datasource: + url: '/statuses' + - id: 'createdAt' + title: 'Created Date' + type: 'date-range' + - id: 'category' + title: 'Category' + type: 'select' + datasource: + url: '/categories' +``` + +### Configure pagination sizes + +Pagination is enabled by default with sizes 5,10, 25. Customize only if needed: + +```yaml +# Custom page sizes (only if default doesn't fit your needs) +pagination: [10, 50, 100] +``` + +## Security + +### Always require authentication + +Set security on all API resources: + +```yaml +resource: + security: "is_granted('IS_AUTHENTICATED_FULLY')" +``` + +### Validate input on the server + +Never trust client-side validation alone: + +```yaml +# validation.yml +properties: + email: + - NotBlank: ~ + - Email: ~ + amount: + - NotBlank: ~ + - Positive: ~ + - LessThanOrEqual: 1000000 +``` + +## API Provider implementation + +### Always use getter methods for Transfer mapping + +**Critical:** When mapping Transfer objects to API resources in Providers, always use getter methods, never `toArray()`: + +```php +// ✅ Correct - reliable data retrieval +protected function mapTransferToResource(AbstractTransfer $transfer): object +{ + return CustomersBackendResource::fromArray([ + 'customerReference' => $transfer->getCustomerReference(), + 'email' => $transfer->getEmail(), + 'firstName' => $transfer->getFirstName(), + 'salutation' => $transfer->getSalutation(), + ]); +} + +// ❌ Wrong - returns null for unmodified fields +protected function mapTransferToResource(AbstractTransfer $transfer): object +{ + $resource = new CustomersBackendResource(); + $resource->fromArray($transfer->toArray()); + return $resource; +} +``` + +**Why:** The `toArray()` method only returns fields that were explicitly modified during the transfer's lifecycle. Unmodified fields return `null`, causing data loss. + +### Extend AbstractBackendProvider + +Use `AbstractBackendProvider` for standardized functionality: + +```php +use Spryker\ApiPlatform\Provider\AbstractBackendProvider; + +class CustomersBackendProvider extends AbstractBackendProvider +{ + protected function provideItem(string $identifier): ?object + { + $transfer = $this->facade->findByReference($identifier); + return $transfer ? $this->mapTransferToResource($transfer) : null; + } + + protected function fetchAllItems(): array + { + return $this->facade->getAllEntities(); + } +} +``` + +### Configure public endpoints correctly + +For reference data endpoints (salutations, countries), omit the `security` property: + +```yaml +# Public endpoint - no authentication required +resource: + name: Salutations + provider: SprykerFeature\Glue\CustomerRelationManagement\Api\Backend\Provider\SalutationsBackendProvider + operations: + - type: GetCollection + +# Protected endpoint - authentication required +resource: + name: Customers + security: "is_granted('IS_AUTHENTICATED_FULLY')" + provider: SprykerFeature\Glue\CustomerRelationManagement\Api\Backend\Provider\CustomersBackendProvider +``` + +## Performance + +### Optimize API queries + +Fetch only required data: + +```php +protected function fetchAllItems(): array +{ + // Use efficient queries with proper indexes + return $this->facade->getCustomersForList(); +} +``` + +### Use appropriate page sizes + +Don't load too much data at once: + +```yaml +paginationItemsPerPage: 10 # Good default +# Avoid: paginationItemsPerPage: 1000 +``` + +### Lazy load related data + +Load related data only when needed: + +```yaml +# In table, show only essential columns +columns: + - { id: 'reference', title: 'Reference' } + - { id: 'name', title: 'Name' } + - { id: 'status', title: 'Status' } + +# Load full details in drawer on row click +rowClick: + drawer: + - use: headline.entity.edit + - use: form.entity.edit +``` + +## Testing + +### Test API endpoints + +Write tests for your API providers and processors: + +```php +public function testGetCollectionReturnsCustomers(): void +{ + // Arrange + $this->createTestCustomers(); + + // Act + $response = $this->get('/customers'); + + // Assert + $this->assertResponseIsSuccessful(); + $this->assertJsonContains(['totalItems' => 3]); +} +``` + +### Test ACL rules + +Verify access control works correctly: + +```php +public function testUnauthorizedUserCannotDelete(): void +{ + // Arrange + $this->loginAsViewer(); + + // Act + $response = $this->delete('/customers/DE--1'); + + // Assert + $this->assertResponseStatusCodeSame(403); +} +``` + +### Validate configuration + +Use schema validation for YAML configurations: + +```bash +vendor/bin/console feature:validate +``` + +## Documentation + +### Document custom components + +Add comments to explain non-obvious configuration: + +```yaml +table.order.list: + component: TableComponent + id: 'order-table' + dataSource: + url: '/orders' + # Custom column configuration for order status + # Status values: pending, processing, shipped, delivered, cancelled + columns: + - id: 'status' + title: 'Status' + type: 'chip' +``` \ No newline at end of file diff --git a/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.md b/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.md new file mode 100644 index 00000000000..9637fc3f8d1 --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.md @@ -0,0 +1,304 @@ +--- +title: Composable UI troubleshooting +description: Solutions for common issues when working with Composable UI modules +template: howto-guide-template +related: + - title: Create a Composable UI module + link: docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html + - title: Entity configuration reference + link: docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html + - title: Composable UI best practices + link: docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html +last_updated: Feb 20, 2026 +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document provides solutions for common issues when developing Composable UI modules. + +## Module doesn't appear in navigation + +**Problem**: After completing all steps, your module is not visible in the Back Office navigation menu. + +**Solutions**: + +1. **Check navigation.xml registration**: + - Verify `config/Zed/navigation.xml` contains your module entry + - Ensure `bundle`, `controller`, and `action` are set correctly: + + ```xml + falcon-ui + feature + index + ``` + +2. **Rebuild navigation cache**: + + ```bash + docker/sdk cli console navigation:build-cache + ``` + +3. **Clear all caches**: + + ```bash + docker/sdk cli console cache:empty-all + ``` + +4. **Check ACL permissions**: + - Log in to Back Office as admin user + - Navigate to Users → Roles + - Verify your role has access to the module + +## Table shows "No data" or empty + +**Problem**: The table loads but shows no data or "No data available" message. + +**Solutions**: + +1. **Check API endpoint is accessible**: + + ```bash + curl -X GET http://glue-backend.your-domain.local/your-entities \ + -H "Authorization: Bearer YOUR_TOKEN" + ``` + + - Should return JSON with data or empty array + - If 404: API resource not registered correctly + - If 401: Authentication issue + +2. **Verify Provider is registered**: + - Check `resources/api/backend/your_entities.resource.yml` has correct `provider` class + - Ensure Provider class exists and extends `AbstractBackendProvider` + +3. **Check database has data**: + - Verify your database table contains records + - Check Provider's `fetchAllItems()` or `provideCollection()` returns data + +4. **Regenerate API resources**: + + ```bash + docker/sdk cli glue api:generate backend + docker/sdk cli console transfer:generate + ``` + +## Forms don't submit or show errors + +**Problem**: Create/Edit forms don't work, show validation errors, or fail silently. + +**Solutions**: + +1. **Check Processor registration**: + - Verify `resources/api/backend/your_entities.resource.yml` has Processor classes for POST/PATCH operations + - Ensure Processor classes exist and implement `ProcessorInterface` + +2. **Check validation rules**: + - Review `resources/api/backend/your_entities.validation.yml` + - Ensure required fields match form configuration + +3. **Check API endpoint URLs**: + - In entity YAML, verify form `submit.url` matches API resource path + - For edit/delete: ensure URL includes identifier, for example, `/your-entities/${row.reference}` + +4. **Check browser console for errors**: + - Open browser DevTools → Console tab + - Look for API request errors (401, 403, 422, 500) + - Check Network tab for failed requests + +## Filters or search don't work + +**Problem**: Table filters or search box don't filter results. + +**Solutions**: + +1. **Verify field configuration in entity YAML**: + + ```yaml + fields: + name: + searchable: true # For search + status: + filterable: true # For filters + ``` + +2. **Check Provider implementation**: + - `AbstractBackendProvider` automatically handles search/filtering + - Ensure your Provider extends `AbstractBackendProvider`, not a custom implementation + +3. **Verify database query supports filtering**: + - Check Facade methods handle filter parameters + - Ensure database columns are indexed for performance + +## Page shows blank or crashes + +**Problem**: Navigating to the module shows a blank page or error. + +**Solutions**: + +1. **Check browser console for JavaScript errors**: + - Open DevTools → Console + - Look for module loading errors or syntax errors in YAML + +2. **Verify entity YAML syntax**: + - Check for YAML indentation errors + - Validate all `use:` references point to existing component IDs + - Ensure all required properties are present + +3. **Rebuild Falcon UI**: + + ```bash + npm run falcon:install && npm run falcon:build + ``` + +4. **Check feature registration**: + - Verify `.spryker/features.yml` contains your module + - Ensure `resources/{your-module}.yml` exists with correct `feature` and `entities` properties + +## Changes to YAML don't appear + +**Problem**: After modifying entity YAML configuration, changes don't reflect in the UI. + +**Solutions**: + +1. **Clear all caches**: + + ```bash + docker/sdk cli console cache:empty-all + docker/sdk cli glue cache:clear + ``` + +2. **Rebuild Falcon UI** (for UI changes): + + ```bash + npm run falcon:build + ``` + +3. **Hard refresh browser**: + - Press `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac) + - Or clear browser cache + +## CRUD mode: Auto-generation doesn't work + +**Problem**: Using CRUD mode with `fields` and `ui.list/create/edit` configuration, but components are not auto-generated. + +**Solutions**: + +1. **Verify CRUD mode is active**: + - Ensure you have `fields:` section defined + - Ensure you have `ui.list`, `ui.create`, or `ui.edit` sections + - If you have `ui.mode: custom`, remove it or change to `ui.mode: crud` + +2. **Check field definitions**: + + ```yaml + fields: + email: + type: email + required: true + ``` + + - All fields referenced in `ui.list.columns` or `ui.create.fields` must be defined + +3. **Clear caches and rebuild**: + + ```bash + docker/sdk cli console cache:empty-all + npm run falcon:build + ``` + +## Partial override doesn't merge correctly + +**Problem**: Using `view.components` to override auto-generated components, but overrides don't apply or replace entire component. + +**Solutions**: + +1. **Use correct component ID**: + - For CRUD mode, component IDs follow pattern: `table.{Entity}.list`, `form.{Entity}.create` + - Entity name must match exactly (case-sensitive) + - Example: `table.Customer.list` for Customer entity + +2. **Deep merge structure**: + + ```yaml + view: + components: + table.customer.list: + pagination: [10, 25, 50] # Only overrides pagination + ``` + + - Only specified properties are overridden + - Parent properties remain auto-generated + +3. **Clear caches after changes**: + + ```bash + docker/sdk cli console cache:empty-all + npm run falcon:build + ``` + +## API returns 401 Unauthorized + +**Problem**: API requests return 401 Unauthorized error. + +**Solutions**: + +1. **Check resource security configuration**: + + ```yaml + resource: + security: "is_granted('IS_AUTHENTICATED_FULLY')" + ``` + + - Ensure this is set for protected endpoints + +2. **Verify OAuth token generation**: + - Check `SecurityGuiConfig::IS_ACCESS_TOKEN_GENERATION_ON_LOGIN_ENABLED = true` + - See [Install Composable UI](/docs/dg/dev/backend-development/composable-ui/install-composable-ui.html) + +3. **Test authentication**: + - Log out and log back into Back Office + - Check browser DevTools → Application → Local Storage for access token + +## Reference data endpoint returns wrong format + +**Problem**: Filter datasource endpoint returns data but filters don't populate. + +**Solutions**: + +1. **Verify resource properties match filter configuration**: + + ```yaml + # Filter expects these field names + datasource: + url: /salutations + valueField: value # Must match resource property + titleField: title # Must match resource property + + # Resource must have matching properties + properties: + value: + type: string + title: + type: string + ``` + +2. **Check Provider returns correct structure**: + + ```php + yield SalutationsBackendResource::fromArray([ + 'value' => 'mr', + 'title' => 'Mr.', + ]); + ``` + +## Need more help + +If your issue is not listed here: + +1. Check browser DevTools Console and Network tabs for errors +2. Review [Entity configuration reference](/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html) for correct YAML syntax +3. Consult [API Platform troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) for API-specific issues +4. Review [Composable UI best practices](/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html) for implementation patterns diff --git a/docs/dg/dev/backend-development/composable-ui/composable-ui.md b/docs/dg/dev/backend-development/composable-ui/composable-ui.md new file mode 100644 index 00000000000..673d9977618 --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/composable-ui.md @@ -0,0 +1,139 @@ +--- +title: Composable UI overview +description: Learn about Spryker's Composable UI - a configuration-driven approach to building Back Office functionality with zero frontend code for standard CRUD operations. +template: concept-topic-template +last_updated: Feb 20, 2026 +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +Composable UI is a development layer for the Spryker Back Office that enables configuration-driven UI generation. It provides a zero-frontend approach for standard CRUD operations, letting developers define the Back Office pages through YAML configuration instead of writing custom JavaScript or markup. + +## Composable UI explained + +Composable UI is an embedded Single Page Application (SPA) called FalconUI, integrated into the existing Spryker Back Office. Each section registered by a Composable UI module is a standalone SPA page that communicates with the Glue Backend API. + +The key components include: + +- **FalconUI**: An Angular-based PWA frontend that renders UI components dynamically based on YAML definitions. +- **Glue Backend API**: REST API layer that handles all data operations between the frontend and backend. +- **API Platform**: Generates REST endpoints and contracts from YAML resource definitions. +- **Angular component library**: Reuses the Merchant Portal component library to maintain a unified tech stack. +- **ACL integration**: Built-in authorization mechanism against REST APIs. + +## Composable UI use cases + +- **Accelerate development**: Build Back Office CRUD features in hours instead of days using declarative YAML configuration—no frontend code required for standard cases. +- **Reduce costs**: Eliminate repetitive boilerplate code with auto-generated APIs and UI components, letting your team focus on business logic. +- **Lower the barrier to entry**: Backend developers can deliver complete Back Office functionality without specialized frontend expertise. +- **Ship faster**: Standard features go from concept to production without custom JavaScript or markup, significantly reducing time-to-market. +- **Ensure consistency**: A unified REST API contract between frontend and backend improves maintainability, testability, and developer experience. + +## Benefits of Composable UI + +Composable UI offers significant advantages for teams building Back Office functionality: +- Faster feature delivery with declarative configuration +- Reduced maintenance overhead through auto-generated components +- Consistent user experience across all CRUD interfaces +- Lower complexity with standardized patterns + +## Architecture overview + +```text +┌─────────────────────────────────────────────────────────────┐ +│ Spryker Back Office (Zed) │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ FalconUI (Angular SPA) │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ +│ │ │ Tables │ │ Forms │ │ Drawers │ │ │ +│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ +│ └───────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + │ HTTP/REST + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Glue Backend API │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ API Platform Resources │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ +│ │ │ Providers │ │ Processors │ │ Validators │ │ │ +│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ +│ └───────────────────────────────────────────────────────┘ │ +│ │ │ +│ ┌───────────────────────────────────────────────────────┐ │ +│ │ SprykerFeature Modules │ │ +│ │ (Customer, Product, Order, etc.) │ │ +│ └───────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +## How it works + +### Configuration loading + +When a user clicks a Composable UI navigation item: + +1. The Back Office triggers a request to fetch the module configuration from the backend. +2. The configuration endpoint returns the YAML-defined UI structure as JSON. +3. The Angular SPA renders the UI based on the retrieved configuration. +4. Configuration is cached in the browser to avoid repeated requests. + +### PWA routing + +Composable UI modules operate as Progressive Web Applications with virtual routing: + +- **Virtual URLs**: The kernel supports PWA-style URLs that don't correspond to physical backend routes. +- **Deep linking**: Navigating to a deep PWA route (for example, `/customer-relation-management/customers/edit/DE--1`) correctly falls back to the module's main route. +- **Browser refresh**: Refreshing on any PWA sub-route works without 404 errors—the kernel serves the SPA shell, which then handles client-side routing. + +### Authentication flow + +1. During Back Office login, the system retrieves an OAuth2 access token. +2. The token is stored in the browser session. +3. All API requests include the token in the `Authorization` header. +4. Token refresh is handled automatically when the token expires. + +## Module structure + +A Composable UI module lives in the `SprykerFeature` namespace and consists of: + +| Directory/File | Purpose | +|----------------|---------| +| `.spryker/features.yml` | Registers the feature and points to its configuration file | +| `resources/{feature}.yml` | Feature definition listing entities | +| `resources/entity/*.yml` | Entity UI configurations (tables, forms, fields, actions) | +| `resources/api/backend/*.resource.yml` | API resource definitions (provider, processor, properties) | +| `resources/api/backend/*.validation.yml` | Validation rules per HTTP method | +| `src/.../Glue/.../Api/Backend/Provider/` | Data providers for read operations | +| `src/.../Glue/.../Api/Backend/Processor/` | Processors for create, update, delete operations | + +## Supported capabilities + +Composable UI supports the following out of the box: + +- **Lists with pagination**: Configurable data tables with sorting and filtering. +- **Search**: Full-text search across configured fields. +- **Filters**: Select, multi-select, date range, and custom filter types. +- **Forms**: Dynamic form generation with validation. +- **CRUD operations**: Create, read, update, and delete via REST endpoints. +- **Drawers and modals**: Slide-out panels for detail views and editing. +- **Navigation integration**: Registration in Back Office navigation via `navigation.xml`. +- **ACL**: Role-based access control at the API level. + +## Limitations + +- **Non-standard UI/UX**: Complex or custom UI scenarios may still require frontend development. +- **Learning curve**: Teams need to adapt to the configuration-driven approach. +- **Not a replacement**: Composable UI is an additional way of delivering features, not a replacement for the existing Back Office UI. + +## Next steps + +- [Install Composable UI](/docs/dg/dev/backend-development/composable-ui/install-composable-ui.html) +- [Create a Composable UI module](/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html) +- [Entity configuration reference](/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html) +- [Extend with custom Angular modules](/docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.html) +- [Best practices](/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html) diff --git a/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.md b/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.md new file mode 100644 index 00000000000..beaad5abec0 --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.md @@ -0,0 +1,940 @@ +--- +title: Create a Composable UI module +description: Step-by-step guide to creating a new Composable UI feature module with YAML-driven Back Office UI. +template: howto-guide-template +last_updated: Feb 20, 2026 +related: + - title: Composable UI overview + link: docs/dg/dev/backend-development/composable-ui/composable-ui.html + - title: API Platform Enablement + link: docs/dg/dev/architecture/api-platform/enablement.html + - title: Entity configuration reference + link: docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html + - title: Composable UI troubleshooting + link: docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document describes how to create a new Composable UI feature module with YAML-driven Back Office UI. + +{% info_block infoBox "Prerequisites" %} + +Before creating a Composable UI module, ensure you have completed: +- [Install Composable UI](/docs/dg/dev/backend-development/composable-ui/install-composable-ui.html) +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Create API resources first + +{% endinfo_block %} + +## Prerequisites + +- Spryker project with Composable UI infrastructure installed +- Basic understanding of YAML configuration +- Familiarity with Spryker module structure + +## Module structure + +Create the following directory structure for your module: + +```text +src/SprykerFeature/{YourModule}/ +├── resources/ +│ ├── {your-module}.yml # Feature definition +│ ├── entity/ +│ │ └── {entity}.yml # Entity UI configuration +│ ├── api/ +│ │ └── backend/ +│ │ ├── {entities}.resource.yml # API resource definition +│ │ └── {entities}.validation.yml # Validation rules +├── src/ +│ └── SprykerFeature/ +│ ├── Glue/ +│ │ └── {YourModule}/ +│ │ └── Api/ +│ │ └── Backend/ +│ │ ├── Provider/ +│ │ │ └── {Entity}BackendProvider.php +│ │ └── Processor/ +│ │ └── {Entity}BackendProcessor.php +│ └── Zed/ +│ └── {YourModule}/ +│ └── Application/ +│ └── zed.entry.ts # Optional: Custom Angular modules +├── composer.json +└── README.md +``` + +**Note**: The `zed.entry.ts` file is only required if you need to register custom Angular modules or components. For standard YAML-driven UI, this file is not needed. See [Extend with custom Angular modules](/docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.html) for details. + +## Step 1: Register the feature module + +Register your feature module in `.spryker/features.yml`: + +```yaml +features: + YourModule: + url: src/SprykerFeature/YourModule +``` + +This file registers all Composable UI feature modules in your project. Each feature entry includes: +- **Key** (for example, `YourModule`): Feature name in PascalCase +- **url**: Relative path to the feature module directory + +Example with multiple features: + +```yaml +features: + CustomerRelationManagement: + url: src/SprykerFeature/CustomerRelationManagement + ProductManagement: + url: src/SprykerFeature/ProductManagement + YourModule: + url: src/SprykerFeature/YourModule +``` + +## Step 2: Create the feature definition + +Create `resources/{your-module}.yml` to define your feature: + +```yaml +feature: YourModule + +entities: + - YourEntity + - AnotherEntity +``` + +### Feature definition properties + +| Property | Required | Description | +|----------|----------|-------------| +| `feature` | Yes | Module name in PascalCase | +| `entities` | Yes | List of entities managed by this module | + +## Step 2: Create the entity configuration + +Create `resources/entity/{entity}.yml` for each entity. + +For detailed reference of all available components, fields, and configuration options, see [Entity configuration reference](/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html). + +### Option A: Auto-generated mode (recommended) + +For standard CRUD operations, use the simplified auto-generated mode: + +
    +Auto-generated mode example + +```yaml +entity: YourEntity + +navigation: + title: 'Your Entities' + +fields: + reference: + readonly: true + searchable: true + + name: + required: true + searchable: true + + status: + type: select + required: true + datasource: + url: /statuses + filterable: true + + description: + searchable: true + + createdAt: + type: date + label: Created At + format: dd.MM.y + filterable: true + +ui: + list: + columns: + - reference + - name + - status + - description + - createdAt + rowAction: edit + + create: + fields: + - name + - status + - description + + edit: + fields: + - name + - status + - description +``` + +
    + +This automatically generates table, forms, buttons, and all UI components. + +### Option B: Custom mode (for advanced use cases) + +For full control over UI components, use custom mode: + +
    +Custom mode example + +```yaml +entity: YourEntity + +navigation: + title: 'Your Entities' + +ui: + mode: custom + +view: + layout: + use: layout.your-entity.page + + components: + layout.your-entity.page: + component: LayoutComponent + id: 'page-layout' + virtualRoute: 'root' + className: 'page-layout' + contains: + actions: + - use: action.your-entity.create + content: + - use: table.your-entity.list + + # Field definitions + field.your-entity.name: + label: 'Name' + required: true + + field.your-entity.status: + type: select + label: 'Status' + required: true + datasource: + url: '/statuses' + + field.your-entity.description: + label: 'Description' + + field.your-entity.reference: + type: hidden + + # Headlines + headline.your-entity.create: + component: HeadlineComponent + level: 'h3' + style: + background-color: 'var(--spy-white)' + padding: '15px 30px' + contains: + content: 'Create New Entity' + + headline.your-entity.edit: + component: HeadlineComponent + level: 'h3' + style: + background-color: 'var(--spy-white)' + padding: '15px 30px' + contains: + content: 'Update ${row.name} Entity' + actions: + - use: form.your-entity.delete + + # Forms + form.your-entity.create: + component: DynamicFormComponent + style: + padding: '30px' + fields: + - use: field.your-entity.name + - use: field.your-entity.status + - use: field.your-entity.description + submit: + label: 'Create' + url: '/your-entities' + success: 'The entity is created.' + error: 'Failed to create entity.' + + form.your-entity.edit: + component: DynamicFormComponent + style: + padding: '30px' + fields: + - use: field.your-entity.name + - use: field.your-entity.status + - use: field.your-entity.description + submit: + label: 'Save' + url: '/your-entities/${row.reference}' + success: 'The entity is saved.' + error: 'Failed to save entity.' + + form.your-entity.delete: + component: DynamicFormComponent + slot: 'actions' + fields: + - use: field.your-entity.reference + submit: + label: 'Delete' + url: '/your-entities/${row.reference}' + variant: 'critical' + success: 'The entity is deleted.' + error: 'Failed to delete entity.' + + # Action button + action.your-entity.create: + component: ButtonActionComponent + contains: + content: 'Create Entity' + action: + type: 'drawer' + drawer: + - use: headline.your-entity.create + - use: form.your-entity.create + + # Data table + table.your-entity.list: + component: TableComponent + id: 'your-entity-table' + dataSource: + url: '/your-entities' + columns: + - { id: 'reference', title: 'Reference' } + - { id: 'name', title: 'Name' } + - { id: 'status', title: 'Status' } + - { id: 'description', title: 'Description' } + - id: 'createdAt' + title: 'Created At' + type: 'date' + format: 'dd.MM.y' + filters: + - id: 'status' + title: 'Status' + type: 'select' + datasource: + url: '/statuses' + - { id: 'createdAt', title: 'Created', type: 'date-range' } + pagination: [10, 20, 50] + search: 'Search entities...' + rowClick: + drawer: + - use: headline.your-entity.edit + - use: form.your-entity.edit +``` + +
    + +## Step 3: Register navigation + +Add your module to the Back Office navigation in `config/Zed/navigation.xml`. + +{% info_block warningBox "Troubleshooting" %} + +If your module doesn't appear in navigation after completing this step, see [Module doesn't appear in navigation](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#module-doesnt-appear-in-navigation). + +{% endinfo_block %} + +```xml + + + + + Your Module + fa-cube + + + + Your Entities + falcon-ui + feature + index + /your-module/your-entity + + + + +``` + +Navigation structure: +- **bundle**: Always `falcon-ui` for Composable UI modules +- **controller**: Always `feature` for Composable UI modules +- **action**: Always `index` +- **uri**: Route path `/{module-name}/{entity-name}` in kebab-case +- **icon**: Optional FontAwesome icon class +- **pages**: Nested items for each entity + +## Step 4: Create API resources + +Create API resources for your entities following the [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) guide. + +For Composable UI modules, place API resources in: + +```text +src/SprykerFeature/YourModule/resources/api/backend/ +├── your_entities.resource.yml +└── your_entities.validation.yml +``` + +### Implement Provider with AbstractBackendProvider + +Composable UI modules should extend `AbstractBackendProvider` for standardized data fetching with built-in search, filtering, and pagination: + +**src/SprykerFeature/YourModule/src/SprykerFeature/Glue/YourModule/Api/Backend/Provider/YourEntitiesBackendProvider.php**: + +
    +Provider implementation example + +```php +yourModuleFacade->findByReference($identifier); + + if (!$entityTransfer) { + return null; + } + + return $this->mapTransferToResource($entityTransfer); + } + + protected function mapTransferToResource(AbstractTransfer $transfer): object + { + return YourEntitiesBackendResource::fromArray([ + 'id' => $transfer->getId(), + 'name' => $transfer->getName(), + 'description' => $transfer->getDescription(), + 'status' => $transfer->getStatus(), + 'createdAt' => $transfer->getCreatedAt(), + ]); + } +} +``` + +
    + +#### Search and filtering configuration + +Search and filtering are configured in your entity YAML file using field properties: + +**Searchable fields** - mark fields with `searchable: true`: + +```yaml +fields: + name: + searchable: true + description: + searchable: true +``` + +- When users type in the search box, the table sends `GET /your-entities?search=keyword` +- `AbstractBackendProvider` automatically searches across all `searchable: true` fields + +**Filterable fields** - mark fields with `filterable: true`: + +```yaml +fields: + status: + type: select + filterable: true + + createdAt: + type: date + filterable: true +``` + +- User selects "Active" in status filter → `GET /your-entities?filter[status]=active` +- User selects date range → `GET /your-entities?filter[createdAtFrom]=2024-01-01&filter[createdAtTo]=2024-12-31` +- `AbstractBackendProvider` automatically applies these filters to database queries + +**Built-in capabilities** - `AbstractBackendProvider` automatically handles: +- **Pagination**: `?page=2&itemsPerPage=20` +- **Search**: Full-text search across `searchable: true` fields +- **Filtering**: Field-based filtering with automatic null handling +- **Date ranges**: Supports `From`/`To` suffixes (for example, `createdAtFrom`, `createdAtTo`) + +### Optional: Implement Processors for write operations + +If your module needs create, update, or delete operations, implement separate Processors for each operation. + +#### Create base Processor with mapping logic + +**src/SprykerFeature/YourModule/src/SprykerFeature/Glue/YourModule/Api/Backend/Processor/AbstractYourEntitiesProcessor.php**: + +
    +AbstractProcessor implementation + +```php +getName() !== null) { + $entityTransfer->setName($resource->getName()); + } + if ($resource->getDescription() !== null) { + $entityTransfer->setDescription($resource->getDescription()); + } + if ($resource->getStatus() !== null) { + $entityTransfer->setStatus($resource->getStatus()); + } + + return $entityTransfer; + } + + protected function mapTransferToResource(YourEntityTransfer $entityTransfer): YourEntitiesBackendResource + { + return YourEntitiesBackendResource::fromArray([ + 'reference' => $entityTransfer->getReference(), + 'name' => $entityTransfer->getName(), + 'description' => $entityTransfer->getDescription(), + 'status' => $entityTransfer->getStatus(), + 'createdAt' => $entityTransfer->getCreatedAt(), + ]); + } +} +``` + +
    + +#### Create Processor (POST) + +**src/SprykerFeature/YourModule/src/SprykerFeature/Glue/YourModule/Api/Backend/Processor/CreateYourEntityProcessor.php**: + +
    +CreateProcessor implementation + +```php + + */ +class CreateYourEntityProcessor extends AbstractYourEntitiesProcessor implements ProcessorInterface +{ + public function process( + mixed $data, + Operation $operation, + array $uriVariables = [], + array $context = [] + ): YourEntitiesBackendResource { + $entityTransfer = $this->mapResourceToTransfer($data); + $responseTransfer = $this->yourModuleFacade->createEntity($entityTransfer); + + if (!$responseTransfer->getIsSuccess()) { + $errors = []; + foreach ($responseTransfer->getErrors() as $error) { + $errors[] = $error->getMessage(); + } + + throw new BadRequestHttpException('Failed to create entity: ' . implode(', ', $errors)); + } + + return $this->mapTransferToResource($responseTransfer->getEntityOrFail()); + } +} +``` + +
    + +#### Update Processor (PATCH) and Delete Processor (DELETE) + +Create `UpdateYourEntityProcessor.php` and `DeleteYourEntityProcessor.php` following the same pattern as CreateProcessor: + +- **UpdateYourEntityProcessor**: Calls `$this->yourModuleFacade->updateEntity()`, extracts entity reference from `$uriVariables['reference']`, returns updated resource +- **DeleteYourEntityProcessor**: Calls `$this->yourModuleFacade->deleteEntity()`, returns `void` (no content response) + +#### Register Processors in resource configuration + +In `resources/api/backend/your_entities.resource.yml`, specify which Processor handles each operation. + +For detailed API resource configuration options, see [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html). + +```yaml +resource: + name: YourEntities + shortName: YourEntity + description: Your entity management API + + provider: SprykerFeature\Glue\YourModule\Api\Backend\Provider\YourEntitiesBackendProvider + + paginationItemsPerPage: 10 + + security: "is_granted('IS_AUTHENTICATED_FULLY')" + + operations: + - type: Post + processor: SprykerFeature\Glue\YourModule\Api\Backend\Processor\CreateYourEntityProcessor + - type: Get + - type: GetCollection + - type: Patch + processor: SprykerFeature\Glue\YourModule\Api\Backend\Processor\UpdateYourEntityProcessor + - type: Delete + processor: SprykerFeature\Glue\YourModule\Api\Backend\Processor\DeleteYourEntityProcessor + + properties: + reference: + type: string + description: Unique reference + identifier: true + + name: + type: string + description: Entity name + required: true + + description: + type: string + description: Entity description + + status: + type: string + description: Entity status + + createdAt: + type: string + description: Creation date + writable: false +``` + +**Key points**: +- Each operation (POST, PATCH, DELETE) has its own Processor class +- All Processors extend `AbstractYourEntitiesProcessor` for shared mapping logic +- Processors implement `ProcessorInterface` from API Platform +- `process()` method handles the operation +- Error handling and Response transfers +- Processors are registered per operation in resource YAML +- `security` property applies to all operations (authentication required for POST, PATCH, DELETE) + +### Configure API security + +API resources should be protected with authentication to ensure only authorized users can access them. + +#### Add authentication requirement + +In your resource YAML, add the `security` property: + +```yaml +resource: + name: YourEntities + shortName: YourEntity + + security: "is_granted('IS_AUTHENTICATED_FULLY')" +``` + +**What it does**: +- `security: "is_granted('IS_AUTHENTICATED_FULLY')"` requires users to be authenticated with a valid OAuth token +- Unauthenticated requests return `401 Unauthorized` +- Only users logged into Back Office can access this API + +**Why it's needed**: +- Protects sensitive business data from unauthorized access +- Ensures audit trail - all actions are tied to authenticated users +- Enables ACL (Access Control List) rules per user role + +**Authentication flow**: +1. User logs into Back Office +2. System generates OAuth access token (if `SecurityGuiConfig::IS_ACCESS_TOKEN_GENERATION_ON_LOGIN_ENABLED = true`, see [Install Composable UI](/docs/dg/dev/backend-development/composable-ui/install-composable-ui.html)) +3. Frontend sends token in `Authorization: Bearer {token}` header +4. API validates token before processing request + +### Optional: Create reference data endpoints for filters + +If your table has filters with dynamic options from API (like salutations, statuses, categories), create reference data endpoints. + +#### When to use + +In your entity YAML, when you have a filter with HTTP datasource: + +```yaml +# In auto-generated mode +fields: + salutation: + type: select + filterable: true + datasource: + url: /salutations # This endpoint needs to be created + +# Or in custom mode +filters: + - id: 'salutation' + type: 'select' + datasource: + url: '/salutations' +``` + +#### Create reference data Provider + +**src/SprykerFeature/YourModule/src/SprykerFeature/Glue/YourModule/Api/Backend/Provider/SalutationsBackendProvider.php**: + +
    +Reference data Provider example + +```php + 'mr', 'title' => 'Mr.'], + ['value' => 'mrs', 'title' => 'Mrs.'], + ['value' => 'ms', 'title' => 'Ms.'], + ['value' => 'dr', 'title' => 'Dr.'], + ]; + + foreach ($salutations as $salutation) { + yield SalutationsBackendResource::fromArray($salutation); + } + } +} +``` + +
    + +**For database-driven options**: + +```php +protected function provideCollection(): iterable +{ + $statusTransfers = $this->yourModuleFacade->getStatusList(); + + foreach ($statusTransfers as $statusTransfer) { + yield SalutationsBackendResource::fromArray([ + 'value' => $statusTransfer->getKey(), + 'title' => $statusTransfer->getLabel(), + ]); + } +} +``` + +#### Create reference data resource + +**resources/api/backend/salutations.resource.yml**: + +```yaml +resource: + name: Salutations + shortName: Salutation + description: Salutation options for filters + + provider: SprykerFeature\Glue\YourModule\Api\Backend\Provider\SalutationsBackendProvider + + # No security property = public endpoint (accessible without authentication) + + operations: + - type: GetCollection + + properties: + value: + type: string + description: Option value + identifier: true + + title: + type: string + description: Option display text +``` + +**Key points**: +- Reference data endpoints typically use only `GetCollection` operation (no POST/PATCH/DELETE) +- Resource properties must match the `valueField` and `titleField` specified in your filter configuration + +**Response example**: + +
    +JSON response + +```json +{ + "@context": "\/contexts\/Salutation", + "@id": "\/salutations", + "@type": "Collection", + "totalItems": 5, + "member": [ + { + "@id": "\/salutations\/1", + "@type": "Salutation", + "id": 1, + "value": "Mr", + "title": "Mr" + }, + { + "@id": "\/salutations\/2", + "@type": "Salutation", + "id": 2, + "value": "Mrs", + "title": "Mrs" + }, + { + "@id": "\/salutations\/3", + "@type": "Salutation", + "id": 3, + "value": "Dr", + "title": "Dr" + }, + { + "@id": "\/salutations\/4", + "@type": "Salutation", + "id": 4, + "value": "Ms", + "title": "Ms" + }, + { + "@id": "\/salutations\/5", + "@type": "Salutation", + "id": 5, + "value": "n\/a", + "title": "n\/a" + } + ] +} +``` + +
    + +## Step 5: Generate API resources + +Generate API resource classes from your YAML definitions: + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND glue api:generate +``` + +This generates resource classes in `src/Generated/Api/Backend/`. + +## Step 6: Build and verify + +1. Generate transfers: + +```bash +docker/sdk cli console transfer:generate +``` + +2. Build navigation cache: + +```bash +docker/sdk cli console navigation:build-cache +``` + +3. Build the Falcon UI: + +```bash +npm run falcon:install && npm run falcon:build +``` + +4. Clear caches: + +```bash +docker/sdk cli console cache:empty-all +docker/sdk cli glue cache:clear +``` + +{% info_block warningBox "Troubleshooting" %} + +If changes don't appear after rebuilding, see [Changes to YAML don't appear](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#changes-to-yaml-dont-appear). + +{% endinfo_block %} + +## Step 7: Configure ACL permissions + +Composable UI modules automatically integrate with Spryker's ACL (Access Control List) system. You can manage user permissions for your module in the Back Office. + +For detailed information about ACL configuration and best practices, see [Install the ACL feature](/docs/pbc/all/user-management/{{site.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html). + +## Verification + +1. **Check navigation**: Log in to the Back Office and verify your module appears in the navigation menu. + - If module is not visible, see [Module doesn't appear in navigation](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#module-doesnt-appear-in-navigation) + +2. **Test the list page**: + - Navigate to your module + - Verify the table displays with correct columns + - Test pagination, search, and filters + - If table shows "No data", see [Table shows "No data" or empty](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#table-shows-no-data-or-empty) + - If filters/search don't work, see [Filters or search don't work](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#filters-or-search-dont-work) + +3. **Test CRUD operations**: + - Create a new entity using the drawer form + - Edit an existing entity + - Delete an entity + - Verify success notifications appear + - If forms don't submit, see [Forms don't submit or show errors](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html#forms-dont-submit-or-show-errors) + +4. **Check API endpoints**: + + ```bash + # List all entities + curl -X GET http://glue-backend.your-domain.local/your-entities \ + -H "Authorization: Bearer YOUR_TOKEN" + + # Create entity + curl -X POST http://glue-backend.your-domain.local/your-entities \ + -H "Authorization: Bearer YOUR_TOKEN" \ + -H "Content-Type: application/ld+json" \ + -d '{"name":"Test Entity"}' + ``` + +## Troubleshooting + +If you encounter issues while creating or working with your Composable UI module, see [Composable UI troubleshooting](/docs/dg/dev/backend-development/composable-ui/composable-ui-troubleshooting.html) for solutions to common problems. + +## Next steps + +- [Entity configuration reference](/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html) - Complete YAML configuration guide +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Detailed API Platform resource configuration +- [Composable UI best practices](/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html) - Implementation patterns diff --git a/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.md b/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.md new file mode 100644 index 00000000000..d9b3b250a11 --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.md @@ -0,0 +1,857 @@ +--- +title: Entity configuration reference +description: Complete reference for Composable UI entity YAML configuration with detailed explanations and examples. +template: howto-guide-template +related: + - title: Composable UI overview + link: docs/dg/dev/backend-development/composable-ui/composable-ui.html + - title: Create a Composable UI module + link: docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html +last_updated: Feb 20, 2026 +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document explains how to configure entity UI using YAML files in Composable UI modules. + +## Overview + +An entity configuration file is a YAML file that describes the entire UI for one entity (like Customer, Product, Order). The file is located at `resources/entity/{entity}.yml` in your module. + +Composable UI supports **three configuration formats**: + +| Format | Description | Use case | +|--------|-------------|----------| +| **Auto-generated** | Minimal configuration, UI is fully generated | Standard CRUD operations | +| **Partial override** | Auto-generated base with specific customizations | CRUD with minor tweaks | +| **Custom mode** | Full manual control over every component | Complex or non-standard UIs | + +### Choosing the right format + +```text +┌─────────────────────────────────────────────────────────────────┐ +│ Do you need standard CRUD? │ +└─────────────────────────────────────────────────────────────────┘ + │ + ┌───────────────┴───────────────┐ + ▼ ▼ + YES NO + │ │ + ▼ ▼ +┌─────────────────────────┐ ┌─────────────────────────┐ +│ Do you need to tweak │ │ Custom mode │ +│ pagination, headlines, │ │ (full manual control) │ +│ or specific fields? │ └─────────────────────────┘ +└─────────────────────────┘ + │ + ┌─────────┴─────────┐ + ▼ ▼ + YES NO + │ │ + ▼ ▼ +┌─────────────┐ ┌─────────────┐ +│ Partial │ │ Auto- │ +│ override │ │ generated │ +└─────────────┘ └─────────────┘ +``` + +--- + +## Format 1: Auto-generated + +The simplest format. Define fields and UI sections—the system generates everything else. + +### Complete example + +
    +Auto-generated mode example + +```yaml +entity: Customer + +navigation: + title: 'Customers' + +fields: + customerReference: + readonly: true + searchable: true + + email: + type: email + required: true + searchable: true + + firstName: + required: true + searchable: true + + lastName: + required: true + searchable: true + + salutation: + type: select + required: true + datasource: + url: /salutations + filterable: true + + dateOfBirth: + type: date + + createdAt: + type: date + label: Registration Date + format: dd.MM.y + filterable: true + + reference: + type: hidden + label: reference + +ui: + list: + columns: + - customerReference + - email + - salutation + - firstName + - lastName + - createdAt + rowAction: edit + + create: + fields: + - email + - firstName + - lastName + - salutation + + edit: + fields: + - email + - firstName + - lastName + - createdAt + - salutation +``` + +
    + +### What gets auto-generated + +From this configuration, the system automatically creates: + +- **Table** with 6 columns, pagination (5, 10, 20), and search +- **Filters** for `salutation` and `createdAt` (fields with `filterable: true`) +- **"Create" button** that opens a drawer with 4 fields +- **Row click** opens edit drawer with 5 fields and delete button +- **All forms** have validation, success/error notifications, and proper actions + +### Structure breakdown + +#### `entity` + +The entity name in **singular form**. Maps to: +- API resource: `/customers` (plural) +- Database table: `spy_customer` + +#### `navigation` + +```yaml +navigation: + title: 'Customers' # Title shown in breadcrumbs +``` + +#### `fields` + +Define all fields used in forms and tables: + +```yaml +fields: + fieldName: + type: string # Field type (default: string) + label: 'Field Label' # Display label (auto-generated if not specified) + required: true # Required in forms + readonly: true # Cannot be edited + searchable: true # Included in table search + filterable: true # Adds filter to table + format: dd.MM.y # Display format for dates + datasource: # For select fields + url: /options +``` + +**Field types:** + +| Type | Description | Form control | +|------|-------------|--------------| +| `string` | Text (default) | Text input | +| `email` | Email with validation | Email input | +| `date` | Date value | Date picker | +| `select` | Dropdown selection | Select with options | +| `hidden` | Not visible | Hidden input | +| `number` | Numeric value | Number input | +| `textarea` | Multi-line text | Text area | +| `checkbox` | Boolean value | Checkbox | +| `toggle` | On/off switch | Toggle switch | +| `radio` | Single selection | Radio buttons | + +#### `ui` + +Define what appears in list, create, and edit views: + +```yaml +ui: + list: + columns: [field1, field2, field3] # Columns to show in table + rowAction: edit # Action on row click + + create: + fields: [field1, field2] # Fields in create form + + edit: + fields: [field1, field2, field3] # Fields in edit form +``` + +--- + +## Format 2: Partial override + +Start with auto-generated configuration, then override specific components. + +### Complete example + +
    +Partial override example + +```yaml +entity: Customer + +navigation: + title: 'Customers (Partial Override)' + +fields: + customerReference: + readonly: true + searchable: true + + email: + type: email + required: true + searchable: true + + firstName: + required: true + searchable: true + + lastName: + required: true + searchable: true + + salutation: + type: select + required: true + datasource: + url: /salutations + filterable: true + + createdAt: + type: date + label: Registration Date + format: dd.MM.y + filterable: true + +ui: + list: + columns: + - customerReference + - email + - salutation + - lastName + - createdAt + rowAction: edit + + create: + fields: + - email + - firstName + - lastName + - salutation + + edit: + fields: + - email + - firstName + - lastName + - createdAt + - salutation + +# Override specific components +view: + components: + headline.customer.edit: + style: + background-color: 'var(--spy-red)' + contains: + content: 'Custom: Update ${row.customerReference} Customer' + + table.customer.list: + pagination: [25, 50, 100] + search: 'Search by name or email...' +``` + +
    + +### How it works + +1. **System generates all components** from `fields` and `ui` sections +2. **You add `view.components`** with only the parts you want to change +3. **Deep merge** combines your overrides with auto-generated components +4. **Result**: Only specified properties are overridden + +### Component IDs for overrides + +Auto-generated components have predictable IDs: + +| Component | ID Pattern | Example | +|-----------|------------|---------| +| Table | `table.{entity}.list` | `table.customer.list` | +| Create form | `form.{entity}.create` | `form.customer.create` | +| Edit form | `form.{entity}.edit` | `form.customer.edit` | +| Create headline | `headline.{entity}.create` | `headline.customer.create` | +| Edit headline | `headline.{entity}.edit` | `headline.customer.edit` | +| Field | `field.{entity}.{fieldName}` | `field.customer.email` | + +### Common overrides + +**Custom pagination:** + +```yaml +view: + components: + table.customer.list: + pagination: [25, 50, 100] +``` + +**Custom search placeholder:** + +```yaml +view: + components: + table.customer.list: + search: 'Search customers...' +``` + +**Custom headline styling:** + +```yaml +view: + components: + headline.customer.edit: + style: + background-color: 'var(--spy-red)' + contains: + content: 'Edit: ${row.customerReference}' +``` + +--- + +## Format 3: Custom mode + +Full manual control over every UI component. Uses a simplified syntax. + +### Complete example + +
    +Custom mode example + +```yaml +entity: Customer + +navigation: + title: 'Customers (Custom)' + +ui: + mode: custom + +view: + layout: + use: layout.customer.page + + components: + # ═══════════════════════════════════════════════════════════ + # LAYOUT + # ═══════════════════════════════════════════════════════════ + layout.customer.page: + component: LayoutComponent + id: 'page-layout' + virtualRoute: 'root' + className: 'page-layout' + contains: + actions: + - use: action.customer.create + content: + - use: table.customer.list + + # ═══════════════════════════════════════════════════════════ + # FIELDS + # ═══════════════════════════════════════════════════════════ + field.customer.email: + type: email + label: 'Email' + required: true + searchable: true + + field.customer.firstName: + label: 'First Name' + required: true + searchable: true + + field.customer.lastName: + label: 'Last Name' + required: true + searchable: true + + field.customer.salutation: + type: select + label: 'Salutation' + required: true + datasource: + url: '/salutations' + + field.customer.registrationDate: + type: date + label: 'Registration Date' + + field.customer.reference: + type: hidden + + # ═══════════════════════════════════════════════════════════ + # HEADLINES + # ═══════════════════════════════════════════════════════════ + headline.customer.create: + component: HeadlineComponent + level: 'h3' + style: + background-color: 'var(--spy-white)' + padding: '15px 30px' + contains: + content: 'Create New Customer' + + headline.customer.edit: + component: HeadlineComponent + level: 'h3' + style: + background-color: 'var(--spy-white)' + padding: '15px 30px' + contains: + content: 'Update ${row.customerReference} Customer' + actions: + - use: form.customer.delete + + # ═══════════════════════════════════════════════════════════ + # FORMS + # ═══════════════════════════════════════════════════════════ + form.customer.create: + component: DynamicFormComponent + style: + padding: '30px' + fields: + - use: field.customer.email + - use: field.customer.firstName + - use: field.customer.lastName + - use: field.customer.salutation + submit: + label: 'Create' + url: '/customers' + success: 'The customer is created.' + error: 'Failed to create customer.' + + form.customer.edit: + component: DynamicFormComponent + style: + padding: '30px' + fields: + - use: field.customer.email + - use: field.customer.firstName + - use: field.customer.lastName + - use: field.customer.registrationDate + - use: field.customer.salutation + submit: + label: 'Save' + url: '/customers/${row.customerReference}' + success: 'The customer is saved.' + error: 'Failed to save customer.' + + form.customer.delete: + component: DynamicFormComponent + slot: 'actions' + fields: + - use: field.customer.reference + submit: + label: 'Delete' + url: '/customers/${row.customerReference}' + variant: 'critical' + success: 'The customer is deleted.' + error: 'Failed to delete customer.' + + # ═══════════════════════════════════════════════════════════ + # BUTTON + # ═══════════════════════════════════════════════════════════ + action.customer.create: + component: ButtonActionComponent + contains: + content: 'Create Customer' + action: + type: 'drawer' + drawer: + - use: headline.customer.create + - use: form.customer.create + + # ═══════════════════════════════════════════════════════════ + # TABLE + # ═══════════════════════════════════════════════════════════ + table.customer.list: + component: TableComponent + id: 'customer-table' + dataSource: + url: '/customers' + columns: + - { id: 'customerReference', title: 'Reference' } + - { id: 'email', title: 'Email' } + - { id: 'salutation', title: 'Salutation' } + - { id: 'firstName', title: 'First Name' } + - { id: 'lastName', title: 'Last Name' } + - id: 'registrationDate' + title: 'Registration Date' + type: 'date' + format: 'dd.MM.y' + filters: + - id: 'salutation' + title: 'Salutation' + type: 'select' + datasource: + url: '/salutations' + - { id: 'registrationDate', title: 'Registered', type: 'date-range' } + pagination: [5, 10, 20] + search: 'Search customers...' + rowClick: + drawer: + - use: headline.customer.edit + - use: form.customer.edit +``` + +### Structure breakdown + +#### Required settings + +```yaml +ui: + mode: custom # Enables custom mode + +view: + layout: + use: layout.customer.page # Entry point component + + components: + # All components defined here +``` + +
    + +#### Component types + +| Component | Purpose | +|-----------|---------| +| `LayoutComponent` | Page container with slots for actions and content | +| `TableComponent` | Data table with columns, filters, pagination | +| `DynamicFormComponent` | Forms for create, edit, delete | +| `HeadlineComponent` | Headers with optional action buttons | +| `ButtonActionComponent` | Action buttons that open drawers | + +For a complete list of available components and their inputs, see the [Spryker UI Components Library](https://spy-storybook.web.app/). + +#### Component inputs + +**Important:** Available inputs vary by component. Check the [Spryker UI Components Library](https://spy-storybook.web.app/) to see which inputs each component supports. + +**Common examples:** + +```yaml +# HeadlineComponent - 'level' input for heading size +headline.customer.edit: + component: HeadlineComponent + level: 'h3' + +# TableComponent - pagination and search +table.customer.list: + component: TableComponent + pagination: [10, 25, 50] + search: 'Search...' + +# DynamicFormComponent - fields and submit +form.customer.edit: + component: DynamicFormComponent + fields: + - use: field.customer.email + submit: + label: 'Save' + url: '/customers/${row.id}' +``` + +#### Component slots with `contains` + +The `contains` keyword defines content for component **slots**. Each component type has different available slots. + +**Syntax:** + +```yaml +contains: + content: 'text content' # Simple text + action: # Or nested components + - use: {component-id} +``` + +```yaml +# LayoutComponent - has 'actions' and 'content' slots +layout.customer.page: + component: LayoutComponent + contains: + actions: + - use: action.customer.create + content: + - use: table.customer.list + +# ButtonActionComponent - has 'content' slot +action.customer.create: + component: ButtonActionComponent + contains: + content: 'Create Customer' + +# TagComponent - has 'label' slot +tag.customer.create: + component: TagComponent + contains: + label: 'Tag Customer' +``` + +**Important:** Available slots vary by component. Check the [Spryker UI Components Library](https://spy-storybook.web.app/) to see which slots each component supports. + +#### Component references with `use` + +The `use` keyword references a component defined elsewhere in `view.components`. This enables: +- **Reusability**: Define a component once, use it in multiple places +- **Composition**: Build complex UIs by combining smaller components +- **Overrides**: Modify specific properties when reusing + +**Syntax:** + +```yaml +- use: {component-id} # Reference by component ID + overrides: # Optional: override specific properties + property: 'new value' +``` + +**How it works:** +1. Define components in `view.components` with unique IDs, for example, `field.customer.email`, `form.customer.edit` +2. Reference them using `use: {component-id}` +3. The system replaces `use` with the full component definition at runtime + +**Examples:** + +```yaml +# In form fields - reference field components +fields: + - use: field.customer.email # Use as-is + - use: field.customer.firstName + overrides: + value: '${row.firstName}' # Override specific property + +# In drawers - reference headline and form components +rowClick: + drawer: + - use: headline.customer.edit # First component in drawer + - use: form.customer.edit # Second component in drawer + +# In layout slots - reference action buttons and tables +contains: + actions: + - use: action.customer.create # Button in actions slot + content: + - use: table.customer.list # Table in content slot +``` + +**Component ID naming convention:** +- `field.{entity}.{fieldName}` - Form fields, for example, `field.customer.email` +- `form.{entity}.{action}` - Forms, for example, `form.customer.create`, `form.customer.edit` +- `headline.{entity}.{action}` - Headlines, for example, `headline.customer.edit` +- `table.{entity}.list` - Tables, for example, `table.customer.list` +- `action.{entity}.{action}` - Action buttons, for example, `action.customer.create` +- `layout.{entity}.page` - Page layouts, for example, `layout.customer.page` + +#### Variable interpolation + +Use `${row.fieldName}` to insert values from the current table row: + +```yaml +# In URLs +url: '/customers/${row.customerReference}' + +# In headlines +content: 'Edit ${row.customerReference}' + +# In field values +overrides: + value: '${row.email}' +``` + +--- + +## Reference + +### Field types + +| Type | Description | Example | +|------|-------------|---------| +| `string` | Text input (default) | Name, description | +| `email` | Email with validation | Email address | +| `date` | Date picker | Birth date, created date | +| `select` | Dropdown with options | Status, category | +| `hidden` | Not visible to user | IDs, references | +| `number` | Numeric input | Age, quantity | +| `textarea` | Multi-line text | Description, notes | +| `checkbox` | Boolean checkbox | Subscribe, agree to terms | +| `toggle` | On/off switch | Active, enabled | +| `radio` | Radio button group | Gender, priority | + +### Field properties + +| Property | Type | Description | +|----------|------|-------------| +| `type` | string | Field type | +| `label` | string | Display label | +| `required` | boolean | Required in forms | +| `readonly` | boolean | Cannot be edited | +| `searchable` | boolean | Included in table search | +| `filterable` | boolean | Adds filter to table | +| `format` | string | Display format, for example, `dd.MM.y` | +| `datasource` | object | Dynamic options from API (for select fields) | +| `options` | array | Static options (for select/radio fields) | + +### Select field options + +For select fields, you can provide options in two ways: + +**Static options** (defined in YAML): + +```yaml +fields: + salutation: + type: select + label: 'Salutation' + options: + - { value: 'mr', title: 'Mr' } + - { value: 'mrs', title: 'Mrs' } + - { value: 'ms', title: 'Ms' } +``` + +**Dynamic options** (fetched from API): + +```yaml +fields: + salutation: + type: select + label: 'Salutation' + datasource: + url: '/salutations' + valueField: 'value' # Optional, default: 'value' + titleField: 'title' # Optional, default: 'title' +``` + +Use `options` for small, static lists. Use `datasource` when options come from the database or need to be dynamic. + +### Validators + +| Validator | Description | Example | +|-----------|-------------|---------| +| `required: true` | Field must have value | All required fields | +| `email: true` | Valid email format | Email fields | +| `minLength: N` | Minimum string length | `minLength: 3` | +| `maxLength: N` | Maximum string length | `maxLength: 100` | +| `min: N` | Minimum number | `min: 0` | +| `max: N` | Maximum number | `max: 100` | +| `pattern: 'regex'` | Regex pattern | `pattern: '^[A-Z]+$'` | + +### HTTP methods + +| Operation | Method | URL pattern | +|-----------|--------|-------------| +| Create | `POST` | `/entities` | +| Update | `PATCH` | `/entities/${row.id}` | +| Delete | `DELETE` | `/entities/${row.id}` | + +--- + +## Troubleshooting + +### Form doesn't pre-fill in edit mode + +Add `overrides` with `${row.fieldName}`: + +```yaml +fields: + - use: field.customer.email + overrides: + value: '${row.email}' +``` + +### Table row click doesn't open drawer + +Add `rowClick` (custom mode) or `rowAction: edit` (auto-generated): + +```yaml +# Auto-generated +ui: + list: + rowAction: edit + +# Custom mode +rowClick: + drawer: + - use: headline.customer.edit + - use: form.customer.edit +``` + +### Table doesn't refresh after form submit + +Ensure `refresh-table` action is included (automatic in simplified syntax): + +```yaml +submit: + success: 'Saved!' # Includes close-drawer and refresh-table by default +``` + +### Date shows raw timestamp + +Add `type: date` and `format`: + +```yaml +columns: + - id: 'createdAt' + title: 'Created' + type: 'date' + format: 'dd.MM.y' +``` + +--- + +## Next steps + +- [Create a Composable UI module](/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html) +- [Composable UI best practices](/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html) +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) diff --git a/docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.md b/docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.md new file mode 100644 index 00000000000..aec7820e8ed --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/extend-composable-ui-with-custom-angular-modules.md @@ -0,0 +1,409 @@ +--- +title: Extend Composable UI with custom Angular modules +description: Learn how to extend Composable UI with custom Angular components and modules for advanced use cases. +template: howto-guide-template +related: + - title: Composable UI overview + link: docs/dg/dev/backend-development/composable-ui/composable-ui.html + - title: Entity configuration reference + link: docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html +last_updated: Feb 20, 2026 +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document describes how to extend Composable UI with custom Angular components when the standard configuration-driven approach doesn't meet your requirements. + +## When to extend + +Consider custom Angular development when you need: + +- Complex UI interactions not supported by standard components +- Custom visualizations (charts, graphs, maps) +- Integration with third-party JavaScript libraries +- Highly specialized business logic in the UI + +{% info_block warningBox "Consider alternatives first" %} + +Before creating custom components, verify that the requirement cannot be met using: +- Standard component configuration options +- Component composition with slots +- Custom CSS styling + +{% endinfo_block %} + +## Falcon UI architecture + +Composable UI uses Falcon UI, an Angular-based SPA that renders configuration-driven components. Understanding its architecture helps when extending. + +### Directory structure + +```text +src/SprykerFeature/FalconUi/src/SprykerFeature/Zed/FalconUi/Presentation/Application/ +├── app/ +│ ├── core/ # Core services and utilities +│ │ ├── interceptors/ # HTTP interceptors +│ │ ├── services/ # Shared services +│ │ └── table-filters/ # Custom table filter components +│ ├── modules/ # Feature modules +│ └── ui-lib-internal-extends/ # Component extensions +├── main.ts # Application bootstrap +├── styles.less # Global styles +└── angular.json # Angular configuration +``` + +### Key concepts + +- **Component Builder**: Renders components based on YAML configuration +- **Dynamic Forms**: Form generation from configuration +- **Table Module**: Data tables with filtering, pagination, and actions +- **Interceptors**: Handle authentication and error responses + +## Creating a custom component + +### Step 1: Create the component + +Create a new component in the appropriate directory: + +```typescript +// app/custom-components/my-chart/my-chart.component.ts +import { Component, Input, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'falcon-my-chart', + standalone: true, + imports: [CommonModule], + template: ` +
    + +
    + `, + styles: [` + .my-chart-container { + width: 100%; + height: 300px; + } + `] +}) +export class MyChartComponent implements OnInit { + @Input() config?: { + type: string; + dataUrl: string; + options?: Record; + }; + + ngOnInit(): void { + if (this.config?.dataUrl) { + this.loadChartData(); + } + } + + private loadChartData(): void { + // Implement chart data loading and rendering + } +} +``` + +### Step 2: Register the component + +Register your component with the Component Builder: + +```typescript +// app/modules/custom-components.module.ts +import { NgModule } from '@angular/core'; +import { MyChartComponent } from '../custom-components/my-chart/my-chart.component'; + +// Register with component builder +export const CUSTOM_COMPONENTS = { + 'MyChartComponent': MyChartComponent, +}; + +@NgModule({ + imports: [MyChartComponent], + exports: [MyChartComponent], +}) +export class CustomComponentsModule { } +``` + +### Step 3: Use in configuration + +Reference your custom component in entity YAML: + +```yaml +view: + components: + chart.sales.overview: + component: MyChartComponent + inputs: + config: + type: 'line' + dataUrl: '/api/sales/statistics' + options: + showLegend: true +``` + +## Creating a custom table filter + +### Step 1: Create the filter component + +```typescript +// app/core/table-filters/table-filter-custom.component.ts +import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TableFilterComponent, TableFilterBase } from '@spryker/table.feature.filters'; + +export interface TableFilterCustom extends TableFilterBase { + type: 'custom'; + typeOptions: { + placeholder?: string; + // Add custom options + }; +} + +@Component({ + selector: 'falcon-table-filter-custom', + standalone: true, + imports: [CommonModule], + template: ` +
    + + +
    + `, +}) +export class TableFilterCustomComponent implements TableFilterComponent { + @Input() config?: TableFilterCustom; + @Input() value?: string; + @Output() valueChange = new EventEmitter(); + + filterValue: string = ''; + + ngOnInit(): void { + this.filterValue = this.value || ''; + } + + onValueChange(event: Event): void { + const value = (event.target as HTMLInputElement).value; + this.filterValue = value; + this.valueChange.emit(value); + } +} +``` + +### Step 2: Register the filter + +Add the filter to the table module configuration: + +```typescript +// app/modules/table.module.ts +import { TableFilterCustomComponent } from '../core/table-filters/table-filter-custom.component'; + +// In the module configuration +TableFiltersFeatureModule.withFilterComponents({ + select: TableFilterSelectComponent, + 'date-range': TableFilterDateRangeComponent, + 'custom': TableFilterCustomComponent, // Add custom filter +}), +``` + +### Step 3: Use in configuration + +```yaml +table.entity.list: + component: TableComponent + dataSource: + url: '/entities' + filters: + - id: 'myField' + title: 'My Filter' + type: 'custom' + placeholder: 'Enter value...' +``` + +## Creating a custom form control + +### Step 1: Create the control component + +```typescript +// app/core/dynamic-forms/reactive-controls/color-picker/color-picker.component.ts +import { Component, forwardRef } from '@angular/core'; +import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'falcon-color-picker', + standalone: true, + imports: [CommonModule], + template: ` +
    + + {{ value }} +
    + `, + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ColorPickerComponent), + multi: true, + }, + ], +}) +export class ColorPickerComponent implements ControlValueAccessor { + value: string = '#000000'; + disabled: boolean = false; + + private onChange: (value: string) => void = () => {}; + private onTouched: () => void = () => {}; + + writeValue(value: string): void { + this.value = value || '#000000'; + } + + registerOnChange(fn: (value: string) => void): void { + this.onChange = fn; + } + + registerOnTouched(fn: () => void): void { + this.onTouched = fn; + } + + setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + onColorChange(event: Event): void { + const value = (event.target as HTMLInputElement).value; + this.value = value; + this.onChange(value); + this.onTouched(); + } +} +``` + +### Step 2: Register the control + +Register with the dynamic forms system to use in YAML configuration. + +### Step 3: Use in configuration + +```yaml +field.product.color: + type: 'color-picker' + label: 'Product Color' +``` + +**Note:** For custom form controls, use the registered control name as the `type` value. The system will look up the control in the dynamic forms registry. + +## Extending existing components + +### Override component behavior + +Create an extended version of an existing component: + +```typescript +// app/ui-lib-internal-extends/extended-table.component.ts +import { Component } from '@angular/core'; +import { TableComponent } from '@spryker/table'; + +@Component({ + selector: 'falcon-extended-table', + template: ` + +
    + +
    + + `, +}) +export class ExtendedTableComponent extends TableComponent { + exportData(): void { + // Custom export functionality + } +} +``` + +## Building and deploying + +### Development build + +```bash +npm run falcon:build +``` + +### Production build + +```bash +npm run falcon:build:production +``` + +### Watch mode for development + +```bash +npm run falcon:build:watch +``` + +## Best practices + +### 1. Follow Angular conventions + +- Use standalone components when possible +- Implement proper change detection strategies +- Handle component lifecycle correctly + +### 2. Maintain compatibility + +- Ensure custom components work with the Component Builder +- Follow the same input/output patterns as standard components +- Test with different configuration scenarios + +### 3. Keep components focused + +- Each component should have a single responsibility +- Extract reusable logic into services +- Use composition over inheritance + +### 4. Document custom components + +- Add JSDoc comments to component inputs +- Create usage examples in configuration +- Document any limitations or requirements + +### 5. Test thoroughly + +- Write unit tests for custom components +- Test integration with the Component Builder +- Verify behavior with different configurations + +## Troubleshooting + +### Component not rendering + +1. Verify the component is registered correctly +2. Check the browser console for errors +3. Verify the component selector matches the configuration + +### Inputs not received + +1. Check that `@Input()` decorators are present +2. Verify input names match the configuration +3. Check for typos in the YAML configuration + +### Styles not applied + +1. Verify styles are included in the component +2. Check for CSS specificity issues +3. Use `::ng-deep` carefully for child component styling diff --git a/docs/dg/dev/backend-development/composable-ui/install-composable-ui.md b/docs/dg/dev/backend-development/composable-ui/install-composable-ui.md new file mode 100644 index 00000000000..a21c447ff7d --- /dev/null +++ b/docs/dg/dev/backend-development/composable-ui/install-composable-ui.md @@ -0,0 +1,360 @@ +--- +title: How to integrate Composable UI +description: Integrate Composable UI to enable YAML-driven Back Office interface with auto-generated CRUD operations. +template: howto-guide-template +last_updated: Feb 20, 2026 +related: + - title: Composable UI overview + link: docs/dg/dev/backend-development/composable-ui/composable-ui.html + - title: How to integrate API Platform + link: docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html + - title: Create a Composable UI module + link: docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html +--- + +{% info_block warningBox "Beta" %} + +Composable UI is currently in beta and intended for internal use. This functionality is under active development, and there is no backward compatibility guarantee at this time. We do not recommend using it in production projects until it reaches a stable release. + +{% endinfo_block %} + +This document describes how to integrate Composable UI into your Spryker project to enable configuration-driven Back Office UI with auto-generated CRUD operations. + +## Prerequisites + +Ensure that your project meets the following prerequisites: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| API Platform | {{site.version}} | [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) | + +{% info_block warningBox "Required" %} + +API Platform integration is required before installing Composable UI. Complete the [How to integrate API Platform](/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.html) guide first. + +{% endinfo_block %} + +## Install feature core + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/kernel-feature spryker/falcon-ui spryker/composable-backoffice-ui --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| KernelFeature | vendor/spryker/kernel-feature | +| FalconUi | vendor/spryker/falcon-ui | +| ComposableBackofficeUi | vendor/spryker/composable-backoffice-ui | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +vendor/bin/console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| AccessTokenError | class | created | src/Generated/Shared/Transfer/AccessTokenErrorTransfer | +| AccessTokenResponse | class | created | src/Generated/Shared/Transfer/AccessTokenResponseTransfer | +| GlueAuthenticationRequestContext | class | created | src/Generated/Shared/Transfer/GlueAuthenticationRequestContextTransfer | +| OauthAccessTokenValidationRequest | class | created | src/Generated/Shared/Transfer/OauthAccessTokenValidationRequestTransfer | +| OauthRequest | class | created | src/Generated/Shared/Transfer/OauthRequestTransfer | +| SprykerFeature | class | created | src/Generated/Shared/Transfer/SprykerFeatureTransfer | +| SprykerFeatureCollection | class | created | src/Generated/Shared/Transfer/SprykerFeatureCollectionTransfer | +| SprykerFeatureCriteria | class | created | src/Generated/Shared/Transfer/SprykerFeatureCriteriaTransfer | +| SprykerFeaturesBackendApiAttributes | class | created | src/Generated/Shared/Transfer/SprykerFeaturesBackendApiAttributesTransfer | +| SprykerFeatureValidationResult | class | created | src/Generated/Shared/Transfer/SprykerFeatureValidationResultTransfer | +| User | class | created | src/Generated/Shared/Transfer/UserTransfer | + +{% endinfo_block %} + +### 3) Set up configuration + +#### Configure Falcon UI backend API domain + +Configure the Glue Backend API domain for Falcon UI communication. + +**config/Shared/config_default.php**: + +```php + + */ + protected function getResponseFormatterPlugins(): array + { + return [ + new CorsResponseFormatterPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/EventDispatcher/EventDispatcherDependencyProvider.php**: + +```php + + */ + protected function getBackendEventDispatcherPlugins(): array + { + return [ + new CorsEventDispatcherPlugin(), + ]; + } +} +``` + +#### Configure Twig for Falcon UI + +Add the Falcon UI Twig plugin to provide configuration variables to templates. + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php**: + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new FalconUiConfigTwigPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Project-level template override" %} + +If your project has overridden the `src/Pyz/Zed/Gui/Presentation/Layout/layout.twig` template, ensure it includes the `{% raw %}{% block layout %}{% endraw %}` block required for Composable UI: + +```twig +{% raw %} +{% block layout %} + {# Composable UI content renders here #} +{% endblock %} +{% endraw %} +``` + +Without this block, Composable UI pages will not render correctly. Check the core `src/Spryker/Gui/src/Spryker/Zed/Gui/Presentation/Layout/layout.twig` template for the exact implementation. + +{% endinfo_block %} + +#### Configure Zed Router + +Add the Falcon UI route provider to enable Composable UI pages in Back Office. + +**src/Pyz/Zed/Router/RouterDependencyProvider.php**: + +```php + + */ + protected function getBackofficeRouterPlugins(): array + { + return [ + new SprykerFeatureRouterPlugin(), + ]; + } +} +``` + +#### Register console commands + +Add KernelFeature console commands for feature validation and debugging. + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php**: + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + // KernelFeature commands + new FeatureDumpConsole(), + new FeatureValidateConsole(), + ]; + } +} +``` + +Available commands: +- `feature:dump` - Display all registered features and their configurations +- `feature:validate` - Validate feature configurations for errors + +### 5) Build frontend + +#### Install frontend dependencies + +Add the Falcon UI npm scripts to your root `package.json`: + +```json +{ + "scripts": { + "falcon:install": "cd src/Spryker/FalconUi/src/Spryker/Zed/FalconUi/Presentation/Application && npm install", + "falcon:build": "cd src/Spryker/FalconUi/src/Spryker/Zed/FalconUi/Presentation/Application && npm run build", + "falcon:build:production": "cd src/Spryker/FalconUi/src/Spryker/Zed/FalconUi/Presentation/Application && npm run build:prod", + "falcon:build:watch": "cd src/Spryker/FalconUi/src/Spryker/Zed/FalconUi/Presentation/Application && npm run build:watch", + "falcon:serve": "cd src/Spryker/FalconUi/src/Spryker/Zed/FalconUi/Presentation/Application && npm run serve" + } +} +``` + +#### Build the frontend application + +Build the Falcon UI application: + +```bash +npm run falcon:build +``` + +For production builds: + +```bash +npm run falcon:build:production +``` + +{% info_block warningBox "Verification" %} + +Make sure the Falcon UI assets are built: + +```bash +ls -la public/Backoffice/assets/js/ | grep falcon +``` + +You should see compiled JavaScript and CSS files. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +1. Log in to the Back Office. +2. Verify that Composable UI feature modules appear in the navigation menu. +3. Click on a Composable UI page and verify it loads without errors. + +{% endinfo_block %} + + +## Next steps + +After integrating Composable UI, you can: + +- [Create a Composable UI module](/docs/dg/dev/backend-development/composable-ui/create-a-composable-ui-module.html) - Build your first feature module with navigation and ACL +- [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Create API resources for your entities +- [Entity configuration reference](/docs/dg/dev/backend-development/composable-ui/entity-configuration-reference.html) - Configure UI components +- [Composable UI best practices](/docs/dg/dev/backend-development/composable-ui/composable-ui-best-practices.html) - Implementation patterns diff --git a/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md b/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md index 04c53ef5d13..434a86467e5 100644 --- a/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md +++ b/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.md @@ -1,500 +1,387 @@ --- -title: Optimizing Jenkins execution -description: Optimize Jenkins execution for cronjobs in Spryker's backend. Enhance task automation performance and improve the efficiency of your ecommerce platform. -last_updated: Jul 15, 2023 +title: Optimizing Jenkins execution with the resource-aware queue worker +description: Learn how to enable and configure the resource-aware queue worker for optimized, stable background job processing in Spryker. +last_updated: Feb 24, 2026 template: howto-guide-template redirect_from: -- /docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-costs-without-refactoring.html - + - /docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-costs-without-refactoring.html + - /docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.html +related: + - title: Cronjobs + link: docs/dg/dev/backend-development/cronjobs/cronjobs.html + - title: "Best practices: Jenkins stability" + link: docs/ca/dev/best-practices/best-practises-jenkins-stability.html + - title: Jenkins operational best practices + link: docs/ca/dev/best-practices/jenkins-operational-best-practices.html + - title: Stable Workers + link: docs/dg/dev/backend-development/cronjobs/stable-workers.html + - title: Configure event queues + link: docs/dg/dev/backend-development/data-manipulation/event/configure-event-queues.html + - title: Infrastructure and worker configuration guidelines + link: docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.html --- +Spryker ships a **resource-aware queue worker** (`ResourceAwareQueueWorker`) that replaces the default queue worker with a production-grade implementation focused on system stability and efficient resource utilization. It is available starting from the `202512.0` release. -Our out-of-the-box (OOTB) system requires a specific command (Worker - `queue:worker:start`) to be continuously running for each store to process queues and ensure the propagation of information. In addition to this command, there are other commands such as OMS processing, import, export, and more. When these processes are not functioning or running slowly, there is a delay in data changes being reflected on the frontend, causing dissatisfaction among customers and leading to disruption of business processes. +This document explains the problem it solves, how to enable and configure it, how it works internally, and how to back-port the concept to older Spryker versions. -By default, our system has a limit of two Jenkins executors for each environment. This limit's usually not a problem for single-store setups, but it becomes a potentially critical issue when there are multiple stores. Without increasing this limit, processing becomes slow because only two Workers are scanning queues and running tasks at a time, while other Workers for different stores have to wait. On top of this, even when some stores don't have messages to process, we still need to run a Worker just for scanning purposes, which occupies Jenkins executors, CPU time, and memory. +## Problem -Increasing the number of processes per queue can lead to issues such as Jenkins hanging, crashing, or becoming unresponsive. Although memory consumption and CPU utilization are not generally high (around 20-30%), there can be spikes in memory consumption because of a random combination of several workers simultaneously processing heavy messages for multiple stores. +The default Spryker system requires a `queue:worker:start` command to be continuously running for each store to process queues. In multi-store setups, this creates several challenges: -There are two potential solutions to address this problem: application optimization and better background job orchestration. +- **Jenkins executor exhaustion**: By default, Jenkins has two executors. With multiple stores, workers compete for executor slots, causing delays in content publishing. +- **Unpredictable memory consumption**: Multiple workers processing heavy messages simultaneously can spike memory usage, causing crashes or out-of-memory (OOM) conditions. +- **No resource awareness**: The default worker spawns child processes based on message presence, without considering available system resources. +- **Per-store overhead**: Even stores with empty queues occupy an executor slot for scanning. -## Solution +## Solution overview -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/OneWorker-diagram.png) +The resource-aware queue worker replaces per-store workers with a single worker that manages a fixed-size process pool and monitors system resources before spawning child processes. -The solution described here is targeted at small to medium projects but can be improved and applied universally. However, it wasn't fully tested in such conditions. +![Resource-aware queue worker diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/OneWorker-diagram.png) -The proposed solution is to use one Worker (`queue:worker:start`) for all stores, regardless of the number of stores. Instead of executing these steps for one store within one process and having multiple processes for multiple stores, we can have one process that scans all queues for all stores and spawns child processes the same way as the OOTB solution. However, instead of determining the number of processes based on the presence of a single message, we can analyse the total number of messages in the queue to make an informed decision on how many processes should be launched at any given moment. +Key features: -## The process pool +- **Process pool**: A fixed-size array (default 5) of concurrent processes shared across all queues and stores, providing predictable resource consumption. +- **Memory monitoring**: Checks available system memory before spawning each child process, preventing OOM conditions. +- **Memory leak detection**: Tracks its own memory growth and exits gracefully when a leak is detected, allowing Jenkins to restart it cleanly. +- **Dynamic queue prioritization**: Intelligent strategy that prioritizes queues based on message volume and configurable modes (publish-first, sync-first, biggest-first). +- **Comprehensive statistics**: Tracks cycles, process counts, error rates, and queue-level metrics for operational visibility. +- **Graceful shutdown**: Handles Unix signals for clean termination and waits for child processes to complete. -In computer science, a pool refers to a collection of resources that are kept in memory and ready to use. In this context, we have a fixed-sized pool (fixed-size array) where new processes are only ran if there is space available among the other running processes. This approach allows us to have better control over the number of processes launched by the OOTB solution, resulting in more predictable memory consumption. +## Enabling the resource-aware queue worker -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/NewWorker+Flow.png) +### Prerequisites -We define the total number of simultaneously running processes for the entire setup on the EC2 instance level. This makes it easier to manage, as we can monitor the average memory consumption for the process pool. If it's too low, we can increase the pool size, and if it's too high, we can decrease it. Additionally, we check the available memory (RAM) and prevent spawning additional processes if it's too low, ensuring system stability. Execution statistics provide valuable insights for decision-making, including adjusting the pool size or scaling the EC2 instance up or down. +- `spryker/queue` >= 1.22.0 +- `spryker/rabbit-mq` >= 2.21.1 +- `spryker/queue-extension` >= 1.1.0 +- RabbitMQ as the queue adapter. To verify this, check the following two configuration points in your project: + 1. In `config/Shared/config_default.php`, the default queue adapter must be set to `RabbitMqAdapter`: -The following parameters exist: + ```php + use Spryker\Client\RabbitMq\Model\RabbitMqAdapter; + use Spryker\Shared\Queue\QueueConfig; + use Spryker\Shared\Queue\QueueConstants; -- pool size (default 5-10) -- free memory buffer - minimum amount of RAM (MB) the system should have in order to spawn a new child process (default 750mb) + $config[QueueConstants::QUEUE_ADAPTER_CONFIGURATION_DEFAULT] = [ + QueueConfig::CONFIG_QUEUE_ADAPTER => RabbitMqAdapter::class, + QueueConfig::CONFIG_MAX_WORKER_NUMBER => 1, + ]; + ``` -## Worker statistics and logs + 2. In `src/Pyz/Client/Queue/QueueDependencyProvider.php`, the `createQueueAdapters()` method must return the RabbitMQ adapter: -With the proposed solution, we gather better statistics to understand the health of the worker and make informed decisions. We can track the number of tasks executed per queue/store, the distribution of error codes, cycles, and various metrics related to skipping cycles, cooldown, available slots, and memory limitations. These statistics help us monitor performance, identify bottlenecks, and optimize resource allocation. + ```php + protected function createQueueAdapters(Container $container): array + { + return [ + $container->getLocator()->rabbitMq()->client()->createQueueAdapter(), + ]; + } + ``` -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-log.png) +To verify the installed versions: -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-summary.png) +```bash +composer show spryker/queue spryker/rabbit-mq spryker/queue-extension +``` -## Error logging +### Step 1: Register the metrics plugin -In addition to statistics, we also capture the output of children's processes in the standard output of the main worker process. This simplifies troubleshooting by providing logs with store and queue names. +Register the `RabbitMqQueueMetricsReaderPlugin` in your `QueueDependencyProvider` to supply queue metrics (message counts, batch sizes) to the worker: -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-error-log.png) +**src/Pyz/Zed/Queue/QueueDependencyProvider.php** -## Edge cases and limitation +```php -Child processes are killed at the end of each minute, which means those batches that were in progress will be abandoned and will return to the source queue to be processed during the next run. While we didn't notice any issues with this approach, note that this is still an experimental approach and may or may not change in the future. The recommendation to mitigate this is to use smaller batches to ensure children processes are running within seconds or up to 10s (rough estimate), to reduce the number of messages that will be retried. +use Spryker\Zed\RabbitMq\Communication\Plugin\Queue\RabbitMqQueueMetricsReaderPlugin; -## Implementation +class QueueDependencyProvider extends SprykerQueueDependencyProvider +{ + /** + * @return array<\Spryker\Zed\QueueExtension\Dependency\Plugin\QueueMetricsReaderPluginInterface> + */ + protected function getQueueMetricsReaderPlugins(): array + { + return [ + new RabbitMqQueueMetricsReaderPlugin(), + ]; + } +} +``` +### Step 2: Enable via configuration -There are two methods possible for implementing this: +Add the following to `config/Shared/config_default.php`: -1. Applying a patch, although it may require conflict resolution since it's applied on the project level and each project may have unique customizations already in place. See the attached diffs for an example implementation. [Here's a diff](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/one-worker.diff). +```php +use Spryker\Shared\Queue\QueueConstants; -```bash -git apply one-worker.diff +// Enable the resource-aware worker +$config[QueueConstants::RESOURCE_AWARE_QUEUE_WORKER_ENABLED] = (bool)getenv('RESOURCE_AWARE_QUEUE_WORKER_ENABLED') ?: true; ``` -2. Integrating it manually, using the patch as a source and the following sections as guide. +You can also enable it per environment using the `RESOURCE_AWARE_QUEUE_WORKER_ENABLED` environment variable. +### Step 3: Configure a single Jenkins job -### A new Worker implementation +Replace per-store `queue:worker:start` jobs with a single job: -This is a custom implementation, which doesn't extend anything and is built based on the ideas described above. +```php +// config/Zed/cronjobs/jenkins.php +$jobs[] = [ + 'name' => 'queue-worker', + 'command' => '$PHP_BIN vendor/bin/console queue:worker:start', + 'schedule' => '* * * * *', + 'enable' => true, + 'stores' => ['DE'], // Use any one store/region as the entry point +]; +``` -The new implementation provides such features as: -- spawns only single process per loop iteration -- checks free system memory before each launch -- ignores processes limits per queue in favour of one limit of simultaneously running processes (process pool size) -- doesn't wait for child processes to finish. This is not elegant solution, but it works and there are few recommendations on how to mitigate potential risks related to that -- it also gathers statistics and processes output for build a summary report at the end of each Worker invocation (check the patch for details) +The resource-aware worker automatically processes queues for all stores and regions. -The main components of the solution are +## Configuration reference -- NewWorker custom worker implementation -- SystemResourcesManager - a class to provide system and worker's own memory information -- Strategy - several implementations possible, a class decides which queue will be next for processing, depending on any custom logic, we have implemented two - - `\Pyz\Zed\Queue\Business\Strategy\OrderedQueuesStrategy` strategy which processes queues in the order these were defined in `\Pyz\Zed\Queue\QueueDependencyProvider::getProcessorMessagePlugins`, - - `\Pyz\Zed\Queue\Business\Strategy\BiggestFirstStrategy` - processes those queues which have the biggest amount of messages first -- QueueScanner component - scannes queues to get such information as amount of messages to provide this info to a Strategy -- custom RabbitMQ client to expose [queue_declare](https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare) method to the Business layer code, this method returns queue statistics for existing queue and does not change anything in a queue. -- slightly modified `\Spryker\Zed\Queue\Business\Process\ProcessManager` - to store information about a queue in a context of store +All configuration constants are defined in `Spryker\Shared\Queue\QueueConstants`. They can be set in `config/Shared/config_default.php` and overridden with environment variables where supported. -
    -src/Pyz/Zed/Queue/Business/Worker/NewWorker.php +### Core settings -```php -class NewWorker implements WorkerInterface -{ - // ... - /** - * @var \SplFixedArray<\Symfony\Component\Process\Process> - */ - protected SplFixedArray $processes; - // ... +| Constant | Environment variable | Type | Default | Description | +|:--------------------------------------|:--------------------------------------|:-----------------------|:--------|:----------------------------------------------------------------------------------------------------------------------------------| +| `RESOURCE_AWARE_QUEUE_WORKER_ENABLED` | `RESOURCE_AWARE_QUEUE_WORKER_ENABLED` | boolean | `false` | Enables the resource-aware worker. When turned off, the default worker is used. | +| `QUEUE_WORKER_MAX_THRESHOLD_SECONDS` | `QUEUE_WORKER_MAX_THRESHOLD_SECONDS` | integer (seconds) | `59` | Maximum runtime per worker invocation. Set to slightly under one minute so Jenkins can restart the worker on the next cron cycle. | +| `QUEUE_WORKER_INTERVAL_MILLISECONDS` | `QUEUE_WORKER_INTERVAL_MILLISECONDS` | integer (milliseconds) | `1000` | Minimum delay between spawning consecutive child processes. Lower values (100-500) increase throughput at the cost of CPU. | - public function __construct(...) - { - // ... - // can be configured in config and/or using environment variable QUEUE_ONE_WORKER_POOL_SIZE, - // average recommended values are 5-10 - // defines how many PHP processes (`queue:task:start QUEUE-NAME`) allowed to run simultaneously - // within NewWorker regardless of number of stores or queues - $this->processes = new SplFixedArray($this->queueConfig->getQueueWorkerMaxProcesses()); - } +### Process pool settings - public function start(string $command, array $options = []): void - { - // env var - QUEUE_WORKER_MAX_THRESHOLD_SECONDS - // default is 60 seconds, 1 minute, it's safe to have it as 1 hour instead - $maxThreshold = $this->queueConfig->getQueueWorkerMaxThreshold(); - - // minimum interval after starting one process before executing another - // config - QUEUE_WORKER_INTERVAL_MILLISECONDS, default is 1000 - 1s, recommended value = 100, 0.1s - $delayIntervalMilliseconds = $this->queueConfig->getQueueWorkerInterval(); - - // when false - there will be an exception thrown if the Worker can't read the system memory info - // otherwise - memory info will be returned as 0, so the system will continue to work, but not launching processes - // because it'll think there is no memory available - // QUEUE_WORKER_IGNORE_MEM_READ_FAILURE, default = false - $shouldIgnoreZeroMemory = $this->queueConfig->shouldIgnoreNotDetectedFreeMemory(); - - $startTime = microtime(true); - $lastStart = 0; - $maxMemGrowthFactor = 0; - - while (microtime(true) - $startTime < $maxThreshold) { - if (!$this->sysResManager->isEnoughResources($shouldIgnoreZeroMemory)) { - // optional logging here - continue; - } - - $freeIndex = $this->removeFinishedProcesses(); - if ($freeIndex === null) { - // any optional logging here for the case when there are no slots available - } elseif ((microtime(true) - $lastStart) * 1000 > $delayIntervalMilliseconds) { - $lastStart = microtime(true); - $this->executeQueueProcessingStrategy($freeIndex); - } else { - // any optional logging for cooldown period - } - - $ownMemGrowthFactor = $this->sysResManager->getOwnPeakMemoryGrowth(); - $maxMemGrowthFactor = max($ownMemGrowthFactor, $maxMemGrowthFactor); - - // QUEUE_WORKER_MEMORY_MAX_GROWTH_FACTOR, 50 by default - // measures how much Worker own memory consumption increased after first iteration - // when more than 50% - it's considered a memory leak and Worker will finish its operation - // allowing Jenkins to run Worker again - if ($ownMemGrowthFactor > $this->queueConfig->maxAllowedWorkerMemoryGrowthFactor()) { - $this->logger->emergency(sprintf('Worker memory grew more than %d%%, probably a memory leak, exiting', $ownMemGrowthFactor)); - break; - } - } - - // to re-scan previously logged processes and update stats - $this->removeFinishedProcesses(); - $this->processManager->flushIdleProcesses(); - - // here you can have any summary logging/stats, similar as we have in the patch - } +| Constant | Environment variable | Type | Default | Description | +|:--------------------------------------------------------------|:-----------------------------|:-----------------------|:--------|:----------------------------------------------------------------------------------------| +| `QUEUE_WORKER_MAX_PROCESSES` | `QUEUE_WORKER_MAX_PROCESSES` | integer | `5` | Maximum number of concurrent child processes across all queues and stores. Range: 5-10. | +| `QUEUE_WORKER_PROCESSES_COMPLETE_TIMEOUT` | - | integer (seconds) | `300` | Maximum time to wait for child processes to complete after the main loop ends. | +| `QUEUE_WORKER_CHECK_PROCESSES_COMPLETE_INTERVAL_MILLISECONDS` | - | integer (milliseconds) | `1000` | Interval for checking whether child processes have completed during the shutdown wait. | - // ... +### Memory management settings - /** - * Removes finished processes from the processes fixed array - * Returns the first index of the array that is available for new processes - * - * @return int|null - */ - protected function removeFinishedProcesses(): ?int - { - $freeIndex = -1; - $runningProcCount = 0; +| Constant | Environment variable | Type | Default | Description | +|:-------------------------------------------|:-------------------------------------------|:---------------------|:--------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `QUEUE_WORKER_FREE_MEMORY_BUFFER` | `QUEUE_WORKER_FREE_MEMORY_BUFFER` | integer (megabytes) | `750` | Minimum free system memory required before spawning a new child process. | +| `QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT` | `QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT` | integer (seconds) | `5` | Timeout for reading system memory information from `/proc/meminfo`. | +| `QUEUE_WORKER_IGNORE_MEMORY_READ_FAILURE` | - | boolean | `false` | When `true`, treats unreadable memory as "enough memory" instead of throwing an exception. | +| `QUEUE_WORKER_MEMORY_MAX_GROWTH_FACTOR` | - | integer (percentage) | `50` | Maximum allowed worker memory growth before the worker exits to prevent memory leaks. For example, `50` means the worker exits if its own memory consumption grows by more than 50% from the initial baseline. | - foreach ($this->processes as $idx => $process) { - if (!$process) { - $freeIndex = $freeIndex >= 0 ? $freeIndex : $idx; - continue; - } +### Queue prioritization settings - if ($process->isRunning()) { - $runningProcCount++; - continue; - } +| Constant | Type | Default | Description | +|:------------------------------------------------------|:------------------|:--------|:------------------------------------------------------------------------------------------------------------------------------------------| +| `QUEUE_PROCESSING_WORKER_DYNAMIC_MODE` | integer (bitmask) | `0` | Controls queue prioritization modes. Modes can be combined using bitwise OR. See [Queue processing strategy](#queue-processing-strategy). | +| `QUEUE_PROCESSING_BIG_QUEUE_THRESHOLD_BATCHES_AMOUNT` | integer | `100` | Number of batches that defines the threshold for a queue to be considered "big" for prioritization purposes. | +| `QUEUE_PROCESSING_LIMIT_OF_PROCESSES_PER_QUEUE` | integer | `10` | Maximum number of concurrent processes per individual queue. | - unset($this->processes[$idx]); // won't affect foreach - $freeIndex = $freeIndex >= 0 ? $freeIndex : $idx; +### Example configuration - // any custom logging here - } +**config/Shared/config_default.php** - return $runningProcCount === $this->processes->count() ? null : $freeIndex; - } +```php +use Spryker\Shared\Queue\QueueConstants; - // ... +// Enable the resource-aware worker +$config[QueueConstants::RESOURCE_AWARE_QUEUE_WORKER_ENABLED] = (bool)getenv('RESOURCE_AWARE_QUEUE_WORKER_ENABLED') ?: true; - /** - * Strategy defines which queue to return for processing, - * it can have any other custom dependencies to make a decision. - * - * Strategy can be different, we can inject some smart strategy - * which will delegate actual processing to another one depending on something, e.g. store operation times or time zones, etc. - * - * @param int $freeIndex - * - * @return void - */ - protected function executeQueueProcessingStrategy(int $freeIndex): void - { - $queueTransfer = $this->queueProcessingStrategy->getNextQueue(); - if (!$queueTransfer) { - // logging - return; - } - - $process = $this->processManager->triggerQueueProcess( - sprintf( - 'APPLICATION_STORE=%s %s %s', - $queueTransfer->getStoreName(), - QueueWorkerConsole::QUEUE_RUNNER_COMMAND, - $queueTransfer->getQueueName(), - ), - sprintf('%s.%s', $queueTransfer->getStoreName(), $queueTransfer->getQueueName()), - ); - - $this->processes[$freeIndex] = $process; - } +// Process pool +$config[QueueConstants::QUEUE_WORKER_MAX_PROCESSES] = 10; + +// Memory management +$config[QueueConstants::QUEUE_WORKER_FREE_MEMORY_BUFFER] = (int)getenv('QUEUE_WORKER_FREE_MEMORY_BUFFER') ?: 750; +$config[QueueConstants::QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT] = (int)getenv('QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT') ?: 5; - // ... +// Timing +$config[QueueConstants::QUEUE_WORKER_MAX_THRESHOLD_SECONDS] = 59; +$config[QueueConstants::QUEUE_WORKER_INTERVAL_MILLISECONDS] = 1000; + +// Process completion +$config[QueueConstants::QUEUE_WORKER_PROCESSES_COMPLETE_TIMEOUT] = 600; ``` -
    +## How it works -### System Resource Manager +### Main execution loop -Available free system memory measured before spawning each child process. -The system should always have spare resources, because each `queue:task:start ...` command can consume different amount of resources, which is not easily predictable. -Because of this, this buffer must be set with such limitations in mind. +When `queue:worker:start` is executed with the resource-aware worker enabled, the following flow runs for the configured threshold duration (default 59 seconds): -- to accomodate a new process it's going to launch -- to leave space for any sporadic memory consumption change of already running processes +![Resource-aware worker flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/NewWorker+Flow.png) -
    -src/Pyz/Zed/Queue/Business/SystemResources/SystemResourcesManager.php +1. **Cycle start**: The worker increments cycle counter. +2. **Process scan**: Iterates through the process pool to detect completed processes, free slots, and log errors from failed processes. +3. **Memory check**: Reads free system memory from `/proc/meminfo`. If free memory is below the configured buffer, the cycle is skipped. +4. **Slot check**: If no free process slot is available, the cycle is skipped. +5. **Cooldown check**: If the minimum delay between spawns has not elapsed, the cycle is skipped. +6. **Process spawn**: The queue processing strategy selects the next queue. A child process (`queue:task:start `) is spawned and placed into the free slot. +7. **Memory leak check**: The worker compares its own current memory usage against the initial baseline. If growth exceeds the configured threshold, the worker exits gracefully. +8. **Shutdown**: After the main loop, the worker waits for all remaining child processes to complete (up to the configured timeout), then logs statistics. -```php -class SystemResourcesManager implements SystemResourcesManagerInterface -{ - // ... +### Process pool - /** - * Executed frequently in a loop within X minutes - * We have a choice on what to do in case we failed to determine free memory (e.g. 0) - * A. consider we have NO free memory, so no processes will run - * B. consider it as a critical issue and throw an error - * ... - */ - public function enoughResources(bool $shouldIgnore = false): bool - { - $freeMemory = $this->getFreeMemory(); - if ($freeMemory === 0 && !$shouldIgnore) { - throw new RuntimeException('Could not detect free memory and configured not to ignore that.'); - } - - // can be configured from config and/or environment variable - QUEUE_WORKER_FREE_MEMORY_BUFFER, in megabytes - // default recommended value - 750 MB - return $freeMemory > $this->queueConfig->getFreeMemoryBuffer(); - } +The process pool is a fixed-size array (`SplFixedArray`) where each slot holds a reference to a running child process. This design provides: - /** - * Read and parse system memory info - */ - public function getFreeMemory(): int - { - $memory = $this->readSystemMemoryInfo(); - if (!preg_match_all('/(Mem\w+[l|e]):\s+(\d+)/msi', $memory, $matches, PREG_SET_ORDER)) { - return 0; - } +- **Predictable concurrency**: At most N processes run simultaneously, regardless of the number of stores or queues. +- **Predictable memory consumption**: Since the pool size is fixed, you can estimate maximum memory usage as `pool_size * max_memory_per_task + worker_overhead`. +- **Efficient slot reuse**: Completed processes free their slots immediately for new work. - $free = round((int)$matches[1][2] ?? 0) / 1024; - $available = round((int)$matches[2][2] ?? 0) / 1024; +### System resource monitoring - return (int)max($free, $available); - } +The `SystemResourcesManager` provides two key capabilities: - /** - * By how much own Worker memory consumption increased after first method invocation - * @return int % of initial Worker consumption - */ - public function getOwnPeakMemoryGrowth(): int - { - if (!$this->ownInitialMemoryConsumption) { - $this->ownInitialMemoryConsumption = memory_get_peak_usage(true); - } +**Free memory detection** reads `/proc/meminfo` (with a fallback to `cat /proc/meminfo` via subprocess) and returns the maximum of `MemFree` and `MemAvailable` in megabytes. Before every process spawn, the worker checks whether free memory exceeds the configured buffer. - $diffNow = memory_get_peak_usage(true) - $this->ownInitialMemoryConsumption; +**Worker memory growth tracking** captures the initial `memory_get_peak_usage()` on first invocation and calculates the percentage growth on each subsequent check. If growth exceeds the configured factor (default 50%), the worker exits gracefully. Since Jenkins restarts it on the next cron cycle, this effectively prevents indefinite memory leaks. - return $diffNow <= 0 ? 0 : (int)round(100 * $diffNow / $this->ownInitialMemoryConsumption); - } +### Queue processing strategy - /** - * @return string - */ - private function readSystemMemoryInfo(): string - { - // - $memoryReadProcessTimeout = $this->queueConfig->memoryReadProcessTimeout(); - $memory = @file_get_contents('/proc/meminfo') ?? ''; +The `DynamicOrderQueueProcessingStrategy` combines multiple prioritization modes to determine which queue to process next. It scans all queues for all stores, calculates a priority score for each, and returns them in priority order. - return $memory ?? 0; - } -``` +**Available modes** (combinable via bitwise OR): -
    +| Mode | Value | Behavior | +|:---------------------|:------|:-----------------------------------------------------------------| +| Default order | `0` | Processes queues in definition order | +| Prefer publish | `2` | Prioritizes publish queues | +| Prefer sync | `4` | Prioritizes sync queues | +| Prefer big | `8` | Prioritizes queues with more than the configured batch threshold | +| Prefer small | `16` | Prioritizes queues below the batch threshold | +| Prefer default store | `32` | Prioritizes the default store's queues | +| Prefer fast | `64` | Prioritizes fast-processing queues | +| Prefer slow | `128` | Prioritizes slow-processing queues | +| Only preferred | `256` | Restricts processing to only preferred queues | -### QueueScanner +**Queues with fewer messages than one batch size receive the lowest priority** to avoid wasting process slots on near-empty queues. -This component is responsible for reading information about queues, mainly - amount of messages. -Key feature here - is cooldown period of default 5 seconds, it means that if all queues are empty, it won't re-scan those right await but will wait (non blocking) until cooldown timeout passes. Obviously it'll add up to 5s delay when new messages appear, but it won't be noticable, and as soon as there are always some messages present - the cooldown timeout is not applied. +**Per-queue process limits** prevent any single queue from monopolizing the entire pool. The `QUEUE_PROCESSING_LIMIT_OF_PROCESSES_PER_QUEUE` constant caps how many concurrent processes target the same queue. -
    -src/Pyz/Zed/Queue/Business/QueueScanner.php +The strategy also supports **runtime dynamic settings updates** through `DynamicSettingsUpdaterPluginInterface` plugins, allowing modes and thresholds to be adjusted during execution based on external signals. -```php -class QueueScanner implements QueueScannerInterface -{ - // ... +## Worker statistics and logs - public function scanQueues(array $storeTransfers = [], int $emptyScanCooldownSeconds = 5): ArrayObject - { - // ... +The resource-aware worker collects comprehensive statistics during each invocation and prints a summary at the end. - $sinceLastScan = microtime(true) - $this->lastScanAt; - $lastEmptyScanTimeoutPassed = $this->lastScanWasEmpty && ($sinceLastScan > $emptyScanCooldownSeconds); +![Worker statistics log](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-log.png) - if (!$this->lastScanWasEmpty || $lastEmptyScanTimeoutPassed) { - $queueList = $this->directScanQueues($storeTransfers); +**Cycle metrics**: - $this->lastScanAt = microtime(true); - $this->lastScanWasEmpty = $queueList->count() === 0; +- Total cycles executed +- Skip cycles (throttled due to resource constraints) +- Empty cycles (no messages in any queue) +- No-slot cycles (all process pool slots are busy) +- No-memory cycles (insufficient free system memory) +- Cooldown cycles (minimum spawn interval not yet elapsed) - return $queueList; - } +**Process metrics**: - return new ArrayObject(); - } +- Total processes spawned +- Failed processes (non-zero exit code) +- Maximum concurrent processes observed - /** - * @param array<\Generated\Shared\Transfer\StoreTransfer> $storeTransfers - * - * @return \ArrayObject<\Generated\Shared\Transfer\QueueTransfer> - */ - protected function directScanQueues(array $storeTransfers): ArrayObject - { - // ... - $queuesPerStore = new ArrayObject(); - foreach ($storeTransfers as $storeTransfer) { - foreach ($this->queueNames as $queueName) { - - $queueMessageCount = $this->mqClient->getQueueMetrics( - $queueName, - $storeTransfer->getName(), - )['messageCount'] ?? 0; - - if ($queueMessageCount === 0) { - continue; - } - - $queuesPerStore->append((new QueueTransfer()) - ->setQueueName($queueName) - ->setStoreName($storeTransfer->getName()) - ->setMsgCount($queueMessageCount) - ->setMsgToChunkSizeRatio(1), // default value - ); - - // ... - } - } - - return $queuesPerStore; - } +**Queue metrics**: - // ... -``` +- Per-queue task counts +- Per-store or per-region task counts +- Error distribution by exit code -
    +**Success rate** is calculated as `(spawned - failed) / spawned * 100%`. -### Customized process manager +![Worker statistics summary](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-summary.png) -The idea here is simple - just to add store code as a prefix to a queue name, and without additional code modifications - it'll work with all queues/stores combinations correctly within one Worker. +### Error logging -
    -src/Pyz/Zed/Queue/Business/Process/ProcessManager.php +Output from failed child processes is captured in the main worker's standard output, including the command line, standard output, and error output. This simplifies troubleshooting by providing all relevant information in one log stream. -```php -class ProcessManager extends SprykerProcessManager implements ProcessManagerInterface -{ - public function triggerQueueProcessForStore(string $storeCode, string $command, string $queue): Process - { - return $this->triggerQueueProcess($command, $this->getStoreBasedQueueName($storeCode, $queue)); - } +![Error logging](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-error-log.png) - public function getBusyProcessNumberForStore(string $storeCode, string $queueName): int - { - return $this->getBusyProcessNumber($this->getStoreBasedQueueName($storeCode, $queueName)); - } +Use the `-vvv` flag when running `queue:worker:start` to see detailed debug-level output, including per-cycle memory and timing information. - protected function getStoreBasedQueueName(string $storeCode, string $queueName): string - { - return sprintf('%s.%s', $storeCode, $queueName); - } -} -``` +## Tuning recommendations -
    +### Process pool size -### Simple ordered strategy +Start with the default of 5 and adjust based on observation: -And really simple, yet useful - a simple ordered strategy to define any logic to return the next queue to process. It uses a custom `\Pyz\Zed\Queue\Business\Strategy\CountBasedIterator` which provides some additional optional sorting/repeating benefits for more complex strategies, but without additional configuration - works as a simple [ArrayIterator](https://www.php.net/manual/en/class.arrayiterator.php). +- **Increase** if statistics show frequent no-slot cycles and your system has available memory and CPU. +- **Decrease** if you observe memory pressure, OOM conditions, or high CPU contention. +- A good starting point is 1-2 processes per available CPU core. -To discover alternative use cases for a Strategy component, feel free to investigate the previously mentioned `\Pyz\Zed\Queue\Business\Strategy\BiggestFirstStrategy` which you can find in the attached patch. +### Free memory buffer -
    -src/Pyz/Zed/Queue/Business/Strategy/OrderedQueuesStrategy.php +The default 750 MB works for most environments. Adjust based on your host's total RAM and per-task memory consumption: -```php -class OrderedQueuesStrategy implements QueueProcessingStrategyInterface -{ - // ... +- **Small hosts (4 GB RAM)**: Use 512-750 MB. +- **Large hosts (8+ GB RAM)**: You can increase the pool size while keeping the buffer at 750 MB. +- The buffer must accommodate: the memory needed by the next spawned process, plus headroom for memory spikes in already running processes. - /** - * @param \Pyz\Zed\Queue\Business\QueueScannerInterface $queueScanner - * @param \Psr\Log\LoggerInterface $logger - */ - public function __construct(QueueScannerInterface $queueScanner, LoggerInterface $logger) - { - $this->queueScanner = $queueScanner; - $this->currentIterator = new CountBasedIterator(new ArrayIterator()); - } +### Spawn interval - /** - * @return \Generated\Shared\Transfer\QueueTransfer|null - */ - public function getNextQueue(): ?QueueTransfer - { - if (!$this->currentIterator->valid()) { - $queuesPerStore = $this->getQueuesWithMessages(); - $this->currentIterator = new CountBasedIterator($queuesPerStore->getIterator()); - } +The default 1000 ms (1 second) is conservative. For latency-sensitive environments: - /** @var \Generated\Shared\Transfer\QueueTransfer|null $queueTransfer */ - $queueTransfer = $this->currentIterator->current(); - $this->currentIterator->next(); +- Lower to 100-500 ms for faster throughput. +- Higher values reduce CPU overhead from the worker's main loop. - return $queueTransfer; - } +### Monitoring - /** - * @return \ArrayObject - */ - protected function getQueuesWithMessages(): ArrayObject - { - return $this->queueScanner->scanQueues(); - } -``` +Use the worker statistics to identify bottlenecks: -
    +- **High no-memory cycles**: Reduce pool size or increase instance memory. +- **High no-slot cycles**: Increase pool size if resources allow. +- **High empty cycles**: Queues are mostly idle; the worker is working as expected. +- **Failed processes**: Investigate the error output for root causes (memory limits, database connection issues). +{% info_block warningBox "Performance monitoring" %} -## Use cases for this solution +Instance performance also depends on other jobs running on Jenkins, such as data import and custom plugins. These can affect the overall performance and runtime of your Publish and Synchronize processes. Always analyze them with [Application Performance Monitoring](/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic) or [local profiling](/docs/scos/dev/tutorials-and-howtos/howtos/howto-setup-xdebug-profiling.html). -Currently, this solution proved to be useful for multi-store setup environments with more than 2 stores operated within a single AWS region, although projects with only two stores can benefit from this solution as well. +{% endinfo_block %} -At the same time, it's worth mentioning that it does not make sense to apply this customization for a single-store setup. Although there are no drawbacks, it won't provide any significant benefits in performance, just better logging. +## Backporting to older Spryker versions -- In summary, this HowTo can be applied to multi-store setup with at least 2 stores within one AWS region to gain such benefits as potential cost reduction from scaling down a Jenkins instance, or to speed Publish and Synchronize processing instead. +If you are on a Spryker version prior to `202512.0` and cannot upgrade, you can implement the resource-aware worker concept at the project level. This section provides a high-level guide for the approach. -- it can't help much for single-store setups or for multi-store setup where each store is hosted in a different AWS region. +{% info_block warningBox "Unsupported customization" %} +The following is a project-level customization and is not officially supported by Spryker. The built-in `ResourceAwareQueueWorker` in `202512.0` supersedes this approach. Upgrade when possible. -## Summary +{% endinfo_block %} -The proposed solution was developed was tested in a project environment. It has shown positive results, with significant improvements in data-import processing time. While this solution is suitable for small to medium projects, it has the potential to be applied universally. Code Examples can be found in the attached diff files that show the implementation in a project. +### Required components +1. **Custom Worker class**: Implement `WorkerInterface` with a fixed-size process pool (`SplFixedArray`), a main loop bounded by a time threshold, and free memory checks before each process spawn. The worker should iterate through its pool to detect completed processes and reuse freed slots. -{% info_block warningBox "Performance monitoring" %} -Keep in mind that instance performance also depends on other jobs, such as data import and custom plugins. These jobs can significantly affect the overall performance and runtime of your Publish and Synchronize processes. Therefore, always analyze them with [Application Performance Monitoring](/docs/dg/dev/sdks/the-docker-sdk/202307.0/configure-services.html#new-relic) or [local application profiling](https://docs.spryker.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-setup-xdebug-profiling.html). -{% endinfo_block %} +2. **System resources manager**: Create a class that reads `/proc/meminfo` to determine free system memory and tracks the worker's own memory growth using `memory_get_peak_usage(true)`. + +3. **Queue scanner**: Build a component that queries RabbitMQ for message counts per queue per store. Implement a cooldown period (for example, 5 seconds) to avoid repeatedly scanning empty queues. + +4. **Queue processing strategy**: Implement a strategy interface with a `getNextQueue()` method. A simple ordered strategy iterates through queues; a more advanced strategy can prioritize based on message volume. + +5. **Process manager extension**: Extend the Spryker `ProcessManager` to prefix queue names with store codes, enabling a single worker to distinguish processes across stores. + +6. **RabbitMQ metrics exposure**: Expose the RabbitMQ `queue_declare` passive method to the business layer, allowing the scanner to read queue statistics without modifying queue state. + +### Integration + +Wire the components through a custom `QueueBusinessFactory`: + +- Override `createWorker()` to return your custom worker based on a config flag. +- Register the custom factory in the project-level `QueueDependencyProvider`. +- Configure a single Jenkins job instead of per-store jobs. + +### Configuration + +Define project-level constants for pool size, memory buffer, memory read timeout, and memory growth threshold, mirroring the constants described in [Configuration reference](#configuration-reference). + +## Stable workers + +For Spryker PaaS environments, **Stable Workers** provide an alternative approach to background job optimization. Both the resource-aware queue worker and Stable Workers address the same core problems (memory management, process isolation, and stability), but they differ in scope: + +- **Resource-aware queue worker**: Runs within Jenkins or any scheduler. Manages its own process pool and memory monitoring. Suitable for self-hosted, isolated, or non-Jenkins setups. +- **Stable Workers**: A PaaS-managed service using Amazon ECS with configurable capacity providers and Auto Scaling Groups. Provides infrastructure-level isolation and scaling. + +Both solutions can coexist. Stable Workers handle P&S workloads while the resource-aware queue worker can manage other queue-based jobs on Jenkins. + +For more details, see [Stable Workers](/docs/dg/dev/backend-development/cronjobs/stable-workers.html). diff --git a/docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.md b/docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.md deleted file mode 100644 index 724a2f92b84..00000000000 --- a/docs/dg/dev/backend-development/cronjobs/reduce-jenkins-execution-costs-without-p&s-and-data-importers-refactoring.md +++ /dev/null @@ -1,493 +0,0 @@ ---- -title: Reduce Jenkins execution without P&S and data importers refactoring -description: Learn how to reduce Jenkins execution costs in Spryker's backend without refactoring P&S and data importers. Optimize cronjob processes for better performance. -last_updated: Jul 15, 2023 -template: howto-guide-template -redirect_from: -- /docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-costs-without-refactoring.html ---- - -By default, the system requires the `queue:worker:start` command to be continuously running for each store to process queues and ensure the propagation of information. In addition to this command, there are other commands such as OMS processing, import, export, and more. When these processes aren't functioning or running slowly, there is a delay in data changes being reflected on the frontend, causing dissatisfaction among customers and leading to disruption of business processes. - -By default, Spryker has a limit of two Jenkins executors for each environment. This limit's usually not a problem for single-store setups, but it can be a critical issue when there are multiple stores. Without increasing this limit, processing becomes slow because only two Workers are scanning queues and running tasks at a time, while other Workers for different stores have to wait. On top of this, even when some stores don't have messages to process, we still need to run a Worker just for scanning purposes, which occupies Jenkins executors, CPU time, and memory. - -Increasing the number of processes per queue can lead to issues such as Jenkins hanging, crashing, or becoming unresponsive. Although memory consumption and CPU usage aren't generally high (around 20-30%), there can be spikes in memory consumption because of a random combination of several workers simultaneously processing heavy messages for multiple stores. - -There are two potential solutions to address this problem that can be implemented simultaneously: application optimization and better background job orchestration. - -## Application optimization - -For details on the application optimization, see the following documents: -- [Performance guidelines](https://docs.spryker.com/docs/scos/dev/guidelines/performance-guidelines/performance-guidelines.html) -- [Troubleshooting performance issues](https://docs.spryker.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html) - -## Background job orchestration - -The background job orchestration implies using one Worker (`queue:worker:start`) for all stores, regardless of the number of stores. Instead of executing these steps for one store within one process and having multiple processes for multiple stores, you can have one process that scans all queues for all stores and spawns child processes the same way as the default solution. However, instead of determining the number of processes based on the presence of a single message, you can analyze the total number of messages in the queue to make an informed decision on how many processes should be launched at any given moment. - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/OneWorker-diagram.png) - -The background job orchestration solution proved to be useful for multi-store setup environments with more than two stores operated within a single AWS region, although projects with only two stores can benefit from this solution as well. When you have at least two stores within one AWS region, the background job orchestration can potentially help reduce costs from scaling down a Jenkins instance or to speed up Publish and Synchronize processing instead. - -However, it doesn't make sense to apply this customization for a single-store setup or for a multi-store setup where each store is hosted in a different AWS region. Although there are no drawbacks, it won't provide any significant benefits in performance but rather just enhance logging. - -The background job orchestration solution was developed and tested in a project environment. It has shown positive results, with significant improvements in data-import processing time. While this solution is suitable for small to medium projects, it has the potential to be applied universally. However, it hasn't been fully tested in such conditions. - - -{% info_block warningBox "Performance monitoring" %} - -Keep in mind that instance performance also depends on other jobs, such as data import and custom plugins. These jobs can significantly affect the overall performance and runtime of your Publish and Synchronize processes. Therefore, always analyze them with [Application Performance Monitoring](/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic) or [local application profiling](/docs/scos/dev/tutorials-and-howtos/howtos/howto-setup-xdebug-profiling.html). - -{% endinfo_block %} - - -### The process pool - -A pool refers to a collection of resources that are kept in memory and ready to use. In this context, there is a fixed-size pool or array where new processes are only run if there is space available among the other running processes. This approach enables better control over the number of processes launched by the default solution, resulting in more predictable memory consumption. - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/NewWorker+Flow.png) - -We define the total number of simultaneously running processes for the entire setup on the EC2 instance level. This makes it easier to manage, as we can monitor the average memory consumption for the process pool. If it's too low, we can increase the pool size, and if it's too high, we can decrease it. Additionally, we check the available memory (RAM) and prevent spawning additional processes if it's too low, ensuring system stability. Execution statistics provide valuable insights for decision-making, including adjusting the pool size or scaling the EC2 instance up or down. - -The following parameters exist: - -- Pool size (default is 5-10) -- Free memory buffer - minimum amount of RAM (MB) the system should have in order to spawn a new child process (default is 750 MB) - -### Worker statistics and logs - -With the background job orchestration solution, we gather better statistics to understand the health of the Worker and make informed decisions. We can track the number of tasks executed per queue or store, the distribution of error codes, cycles, and various metrics related to skipping cycles, cooldown, available slots, and memory limitations. These statistics help us monitor performance, identify bottlenecks, and optimize resource allocation. - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-log.png) - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-summary.png) - -### Error logging - -In addition to statistics, we also capture the output of children's processes in the standard output of the main worker process. This simplifies troubleshooting by providing logs with store and queue names. - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/stats-error-log.png) - -### Edge cases and limitation - -Child processes are killed at the end of each minute, which means those batches that were in progress will be abandoned and will return to the source queue to be processed during the next run. While we didn't notice any issues with this approach, keep in mind that this is still an experimental approach and may or may not change in the future. The recommendation to mitigate this is to use smaller batches to ensure children processes are running within seconds or up to roughly 10 seconds, to reduce the number of messages that will be retried. - -## Background job orchestration solution implementation - -There are two ways to implement the background job orchestration: - -1. Applying a patch, although it may require conflict resolution since it's applied on the project level, and each project may have unique customizations already in place. See [these diffs](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/tutorials-and-howtos/howtos/howto-reduce-jenkins-execution-cost-without-refactoring/one-worker.diff) for an example implementation. - -```bash -git apply one-worker.diff -``` - -2. Integrating it manually, using the patch as a source and the following sections as guide. - - -### A new Worker implementation - -This is a custom implementation, which doesn't extend anything and is built based on the ideas described in the previous sections. - -The new worker implementation provides such features as: -- Spawns only a single process per loop iteration. -- Checks free system memory before each launch. -- Ignores processes limits per queue in favor of one limit of simultaneously running processes (process pool size). -- Doesn't wait for child processes to finish. This isn't an elegant solution, but it works, and there are some recommendations on how to mitigate potential risks related to that. -- It gathers statistics and processes output for building a summary report at the end of each Worker invocation. Check the patch for details. - -The main components of the solution are: - -- NewWorker custom worker implementation. -- SystemResourcesManager - a class to provide the system and worker memory information. -- Strategy - several implementations possible, a class decides which queue is next for processing, depending on any custom logic. We have implemented two: - - `\Pyz\Zed\Queue\Business\Strategy\OrderedQueuesStrategy` strategy which processes queues in the order these were defined in `\Pyz\Zed\Queue\QueueDependencyProvider::getProcessorMessagePlugins`. - - `\Pyz\Zed\Queue\Business\Strategy\BiggestFirstStrategy` - first processes those queues which have the biggest amount of messages. -- QueueScanner component - scans queues to get such information as amount of messages to provide this info to a strategy. -- Custom RabbitMQ client to expose the [queue_declare method](https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare) to the Business layer code. This method returns queue statistics for the existing queue and doesn't change anything in a queue. -- Slightly modified `\Spryker\Zed\Queue\Business\Process\ProcessManager` to store information about a queue in the context of a store. - -
    -src/Pyz/Zed/Queue/Business/Worker/NewWorker.php - -```php -class NewWorker implements WorkerInterface -{ - // ... - /** - * @var \SplFixedArray<\Symfony\Component\Process\Process> - */ - protected SplFixedArray $processes; - // ... - - public function __construct(...) - { - // ... - // can be configured in config and/or using environment variable QUEUE_ONE_WORKER_POOL_SIZE, - // average recommended values are 5-10 - // defines how many PHP processes (`queue:task:start QUEUE-NAME`) allowed to run simultaneously - // within NewWorker regardless of number of stores or queues - $this->processes = new SplFixedArray($this->queueConfig->getQueueWorkerMaxProcesses()); - } - - public function start(string $command, array $options = []): void - { - // env var - QUEUE_WORKER_MAX_THRESHOLD_SECONDS - // default is 60 seconds, 1 minute, it's safe to have it as 1 hour instead - $maxThreshold = $this->queueConfig->getQueueWorkerMaxThreshold(); - - // minimum interval after starting one process before executing another - // config - QUEUE_WORKER_INTERVAL_MILLISECONDS, default is 1000 - 1s, recommended value = 100, 0.1s - $delayIntervalMilliseconds = $this->queueConfig->getQueueWorkerInterval(); - - // when false - there will be an exception thrown if the Worker can't read the system memory info - // otherwise - memory info will be returned as 0, so the system will continue to work, but not launching processes - // because it'll think there is no memory available - // QUEUE_WORKER_IGNORE_MEM_READ_FAILURE, default = false - $shouldIgnoreZeroMemory = $this->queueConfig->shouldIgnoreNotDetectedFreeMemory(); - - $startTime = microtime(true); - $lastStart = 0; - $maxMemGrowthFactor = 0; - - while (microtime(true) - $startTime < $maxThreshold) { - if (!$this->sysResManager->isEnoughResources($shouldIgnoreZeroMemory)) { - // optional logging here - continue; - } - - $freeIndex = $this->removeFinishedProcesses(); - if ($freeIndex === null) { - // any optional logging here for the case when there are no slots available - } elseif ((microtime(true) - $lastStart) * 1000 > $delayIntervalMilliseconds) { - $lastStart = microtime(true); - $this->executeQueueProcessingStrategy($freeIndex); - } else { - // any optional logging for cooldown period - } - - $ownMemGrowthFactor = $this->sysResManager->getOwnPeakMemoryGrowth(); - $maxMemGrowthFactor = max($ownMemGrowthFactor, $maxMemGrowthFactor); - - // QUEUE_WORKER_MEMORY_MAX_GROWTH_FACTOR, 50 by default - // measures how much Worker own memory consumption increased after first iteration - // when more than 50% - it's considered a memory leak and Worker will finish its operation - // allowing Jenkins to run Worker again - if ($ownMemGrowthFactor > $this->queueConfig->maxAllowedWorkerMemoryGrowthFactor()) { - $this->logger->emergency(sprintf('Worker memory grew more than %d%%, probably a memory leak, exiting', $ownMemGrowthFactor)); - break; - } - } - - // to re-scan previously logged processes and update stats - $this->removeFinishedProcesses(); - $this->processManager->flushIdleProcesses(); - - // here you can have any summary logging/stats, similar as we have in the patch - } - - // ... - - /** - * Removes finished processes from the processes fixed array - * Returns the first index of the array that is available for new processes - * - * @return int|null - */ - protected function removeFinishedProcesses(): ?int - { - $freeIndex = -1; - $runningProcCount = 0; - - foreach ($this->processes as $idx => $process) { - if (!$process) { - $freeIndex = $freeIndex >= 0 ? $freeIndex : $idx; - continue; - } - - if ($process->isRunning()) { - $runningProcCount++; - continue; - } - - unset($this->processes[$idx]); // won't affect foreach - $freeIndex = $freeIndex >= 0 ? $freeIndex : $idx; - - // any custom logging here - } - - return $runningProcCount === $this->processes->count() ? null : $freeIndex; - } - - // ... - - /** - * Strategy defines which queue to return for processing, - * it can have any other custom dependencies to make a decision. - * - * Strategy can be different, we can inject some smart strategy - * which will delegate actual processing to another one depending on something, e.g. store operation times or time zones, etc. - * - * @param int $freeIndex - * - * @return void - */ - protected function executeQueueProcessingStrategy(int $freeIndex): void - { - $queueTransfer = $this->queueProcessingStrategy->getNextQueue(); - if (!$queueTransfer) { - // logging - return; - } - - $process = $this->processManager->triggerQueueProcess( - sprintf( - 'APPLICATION_STORE=%s %s %s', - $queueTransfer->getStoreName(), - QueueWorkerConsole::QUEUE_RUNNER_COMMAND, - $queueTransfer->getQueueName(), - ), - sprintf('%s.%s', $queueTransfer->getStoreName(), $queueTransfer->getQueueName()), - ); - - $this->processes[$freeIndex] = $process; - } - - // ... -``` - -
    - -### System resource manager - -Available free system memory is measured before spawning each child process. -The system should always have spare resources, because each `queue:task:start ...` command can consume different amount of resources, which isn't easily predictable. -Because of this, this buffer must be set with the following limitations in mind: - -- To accommodate a new process it's going to launch. -- To leave space for any sporadic memory consumption change of already running processes. - -
    -src/Pyz/Zed/Queue/Business/SystemResources/SystemResourcesManager.php - -```php -class SystemResourcesManager implements SystemResourcesManagerInterface -{ - // ... - - /** - * Executed frequently in a loop within X minutes - * We have a choice on what to do in case we failed to determine free memory (e.g. 0) - * A. consider we have NO free memory, so no processes will run - * B. consider it as a critical issue and throw an error - * ... - */ - public function enoughResources(bool $shouldIgnore = false): bool - { - $freeMemory = $this->getFreeMemory(); - if ($freeMemory === 0 && !$shouldIgnore) { - throw new RuntimeException('Could not detect free memory and configured not to ignore that.'); - } - - // can be configured from config and/or environment variable - QUEUE_WORKER_FREE_MEMORY_BUFFER, in megabytes - // default recommended value - 750 MB - return $freeMemory > $this->queueConfig->getFreeMemoryBuffer(); - } - - /** - * Read and parse system memory info - */ - public function getFreeMemory(): int - { - $memory = $this->readSystemMemoryInfo(); - if (!preg_match_all('/(Mem\w+[l|e]):\s+(\d+)/msi', $memory, $matches, PREG_SET_ORDER)) { - return 0; - } - - $free = round((int)$matches[1][2] ?? 0) / 1024; - $available = round((int)$matches[2][2] ?? 0) / 1024; - - return (int)max($free, $available); - } - - /** - * By how much own Worker memory consumption increased after first method invocation - * @return int % of initial Worker consumption - */ - public function getOwnPeakMemoryGrowth(): int - { - if (!$this->ownInitialMemoryConsumption) { - $this->ownInitialMemoryConsumption = memory_get_peak_usage(true); - } - - $diffNow = memory_get_peak_usage(true) - $this->ownInitialMemoryConsumption; - - return $diffNow <= 0 ? 0 : (int)round(100 * $diffNow / $this->ownInitialMemoryConsumption); - } - - /** - * @return string - */ - private function readSystemMemoryInfo(): string - { - // - $memoryReadProcessTimeout = $this->queueConfig->memoryReadProcessTimeout(); - $memory = @file_get_contents('/proc/meminfo') ?? ''; - - return $memory ?? 0; - } -``` - -
    - -### QueueScanner - -The QueueScanner component is responsible for reading information about queues, primarily the amount of messages they contain. Its key feature is a default cooldown period of 5 seconds. This cooldown period ensures that if all queues are empty, the component won't immediately rescan them but will instead wait without blocking until the cooldown timeout elapses. While this may introduce a five-second delay when new messages appear, it will not be noticeable. Furthermore, since there are always some messages available, the cooldown timeout isn't applied. - -
    -src/Pyz/Zed/Queue/Business/QueueScanner.php - -```php -class QueueScanner implements QueueScannerInterface -{ - // ... - - public function scanQueues(array $storeTransfers = [], int $emptyScanCooldownSeconds = 5): ArrayObject - { - // ... - - $sinceLastScan = microtime(true) - $this->lastScanAt; - $lastEmptyScanTimeoutPassed = $this->lastScanWasEmpty && ($sinceLastScan > $emptyScanCooldownSeconds); - - if (!$this->lastScanWasEmpty || $lastEmptyScanTimeoutPassed) { - $queueList = $this->directScanQueues($storeTransfers); - - $this->lastScanAt = microtime(true); - $this->lastScanWasEmpty = $queueList->count() === 0; - - return $queueList; - } - - return new ArrayObject(); - } - - /** - * @param array<\Generated\Shared\Transfer\StoreTransfer> $storeTransfers - * - * @return \ArrayObject<\Generated\Shared\Transfer\QueueTransfer> - */ - protected function directScanQueues(array $storeTransfers): ArrayObject - { - // ... - $queuesPerStore = new ArrayObject(); - foreach ($storeTransfers as $storeTransfer) { - foreach ($this->queueNames as $queueName) { - - $queueMessageCount = $this->mqClient->getQueueMetrics( - $queueName, - $storeTransfer->getName(), - )['messageCount'] ?? 0; - - if ($queueMessageCount === 0) { - continue; - } - - $queuesPerStore->append((new QueueTransfer()) - ->setQueueName($queueName) - ->setStoreName($storeTransfer->getName()) - ->setMsgCount($queueMessageCount) - ->setMsgToChunkSizeRatio(1), // default value - ); - - // ... - } - } - - return $queuesPerStore; - } - - // ... -``` - -
    - -### Customized process manager - -ProcessManager adds store code as a prefix to a queue name. It works correctly with all combinations of queues and stores within one Worker and doesn't require additional code modifications. - -
    -src/Pyz/Zed/Queue/Business/Process/ProcessManager.php - -```php -class ProcessManager extends SprykerProcessManager implements ProcessManagerInterface -{ - public function triggerQueueProcessForStore(string $storeCode, string $command, string $queue): Process - { - return $this->triggerQueueProcess($command, $this->getStoreBasedQueueName($storeCode, $queue)); - } - - public function getBusyProcessNumberForStore(string $storeCode, string $queueName): int - { - return $this->getBusyProcessNumber($this->getStoreBasedQueueName($storeCode, $queueName)); - } - - protected function getStoreBasedQueueName(string $storeCode, string $queueName): string - { - return sprintf('%s.%s', $storeCode, $queueName); - } -} -``` - -
    - -### Simple ordered strategy - -The OrderedQueuesStrategy component defines logic to return the next queue to process. It uses a custom `\Pyz\Zed\Queue\Business\Strategy\CountBasedIterator`, which provides some additional optional sorting or repeating benefits for more complex strategies, but without additional configuration - it works as a simple [ArrayIterator](https://www.php.net/manual/en/class.arrayiterator.php). - -To discover alternative use cases for a Strategy component, you can investigate [\Pyz\Zed\Queue\Business\Strategy\BiggestFirstStrategy](#a-new-worker-implementation). - -
    -src/Pyz/Zed/Queue/Business/Strategy/OrderedQueuesStrategy.php - -```php -class OrderedQueuesStrategy implements QueueProcessingStrategyInterface -{ - // ... - - /** - * @param \Pyz\Zed\Queue\Business\QueueScannerInterface $queueScanner - * @param \Psr\Log\LoggerInterface $logger - */ - public function __construct(QueueScannerInterface $queueScanner, LoggerInterface $logger) - { - $this->queueScanner = $queueScanner; - $this->currentIterator = new CountBasedIterator(new ArrayIterator()); - } - - /** - * @return \Generated\Shared\Transfer\QueueTransfer|null - */ - public function getNextQueue(): ?QueueTransfer - { - if (!$this->currentIterator->valid()) { - $queuesPerStore = $this->getQueuesWithMessages(); - $this->currentIterator = new CountBasedIterator($queuesPerStore->getIterator()); - } - - /** @var \Generated\Shared\Transfer\QueueTransfer|null $queueTransfer */ - $queueTransfer = $this->currentIterator->current(); - $this->currentIterator->next(); - - return $queueTransfer; - } - - /** - * @return \ArrayObject - */ - protected function getQueuesWithMessages(): ArrayObject - { - return $this->queueScanner->scanQueues(); - } -``` - -
    diff --git a/docs/dg/dev/backend-development/data-manipulation/event/configure-event-queues.md b/docs/dg/dev/backend-development/data-manipulation/event/configure-event-queues.md index 58634047bd2..42b02c5dc06 100644 --- a/docs/dg/dev/backend-development/data-manipulation/event/configure-event-queues.md +++ b/docs/dg/dev/backend-development/data-manipulation/event/configure-event-queues.md @@ -1,7 +1,7 @@ --- title: Configure event queues description: Configure event queues in Spryker to manage asynchronous tasks effectively. Optimize backend performance by organizing event-driven workflows with ease. -last_updated: Jun 16, 2021 +last_updated: Feb 20, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/event-configure-q originalArticleId: c4cf6639-48cd-4fb3-a595-09764433f7af @@ -253,62 +253,29 @@ $config[QueueConstants::QUEUE_WORKER_PROCESSES_COMPLETE_TIMEOUT] = 600; // 10 mi ## Metrics and resource-aware worker configuration -This section explains the purpose and recommended tuning for the RabbitMq metrics plugin and the resource-aware queue worker configuration options referenced above. +Starting with `202512.0`, Spryker ships a resource-aware queue worker that uses queue metrics and system resource monitoring to make intelligent decisions about process spawning. The configuration keys referenced above (`RESOURCE_AWARE_QUEUE_WORKER_ENABLED`, `QUEUE_WORKER_FREE_MEMORY_BUFFER`, `QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT`, `QUEUE_WORKER_MAX_PROCESSES`, `QUEUE_WORKER_PROCESSES_COMPLETE_TIMEOUT`) control this worker's behavior. ### RabbitMqQueueMetricsReaderPlugin -- Purpose: Supplies RabbitMQ-specific runtime metrics (for example queue depth: ready/unacknowledged counts, consumer counts, throughput indicators) to the resource-aware queue worker. -- Applicability: Only relevant when using the `RabbitMqAdapter`. Register the plugin via `getQueueMetricsExpanderPlugins()` in your `QueueDependencyProvider` to enable metric collection. -- Effect: Enables metric-driven decisions by the resource-aware worker (scale up when queues grow, avoid starting new workers when memory/broker constraints are detected). -- Recommendation: Enable this plugin if you run RabbitMQ and want automatic adaptation of worker processes to real load for current settings. - -### Configuration keys - -- `QueueConstants::QUEUE_WORKER_INTERVAL_MILLISECONDS` - - Type / unit: integer (milliseconds) - - Example/default: 1000 (example in file), default 1000 - - Purpose: Polling interval for the scheduler loop that evaluates metrics and makes scaling/dispatch decisions. - - Recommendation: Use 1000ms for most systems; lower (100–500ms) for latency-sensitive environments with available CPU; increase to reduce scheduler overhead. - -- `QueueConstants::QUEUE_WORKER_MAX_THRESHOLD_SECONDS` - - Type / unit: integer (seconds) - - Example/default: 60 - - Purpose: Time window used when evaluating worker saturation and queue backlog thresholds (decides when tasks are considered long-running or when queues are accumulating work). - - Recommendation: 60s is a sensible default. Increase for long-running jobs, decrease for short, quick tasks. - -- `QueueConstants::RESOURCE_AWARE_QUEUE_WORKER_ENABLED` - - Type / unit: boolean - - Example/default: `(bool)getenv('RESOURCE_AWARE_QUEUE_WORKER_ENABLED') ?? false` - - Purpose: Toggle resource-aware behavior. When enabled, workers use external metrics and thresholds to decide how many processes to run and when to throttle. - - Recommendation: Enable when RabbitMQ + metrics plugin are available and you want dynamic scaling; disable for simple/static setups. - -- `QueueConstants::QUEUE_WORKER_FREE_MEMORY_BUFFER` - - Type / unit: integer (megabytes) - - Example/default: `(int)getenv('QUEUE_WORKER_FREE_MEMORY_BUFFER') ?: 750` - - Purpose: Memory safety buffer in MB. Prevents launching new workers if available free memory falls below this value. - - Recommendation: Tune based on host RAM and per-worker memory usage. For small hosts (4GB) use 512–1024MB; for larger hosts adjust proportionally. - -- `QueueConstants::QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT` - - Type / unit: integer (seconds) - - Example/default: `(int)getenv('QUEUE_WORKER_MEMORY_READ_PROCESS_TIMEOUT') ?: 5` - - Purpose: Interval/timeout used when sampling worker process memory usage for resource-aware decisions. - - Recommendation: 5s is a good balance between responsiveness and sampling overhead; increase if sampling is costly. - -- `QueueConstants::QUEUE_WORKER_MAX_PROCESSES` - - Type / unit: integer (process count) - - Example/default: 10 (example in file), default 5 - - Purpose: Upper limit of concurrent worker processes spawned across all queues/stores. - - Recommendation: Start conservatively (for example number of CPU cores) and increase according to CPU, memory and workload characteristics. - -- `QueueConstants::QUEUE_WORKER_PROCESSES_COMPLETE_TIMEOUT` - - Type / unit: integer (seconds) - - Example/default: 600 (10 minutes) - - Purpose: Grace period to wait for worker processes to finish current tasks before termination/recycling. - - Recommendation: Set to accommodate the longest expected job runtime plus margin; shorter timeouts make recycling more aggressive. - -### Quick tuning tips - -1. When enabling `RESOURCE_AWARE_QUEUE_WORKER_ENABLED`, also register `RabbitMqQueueMetricsReaderPlugin` so the worker receives broker metrics. -2. Tune `QUEUE_WORKER_MAX_PROCESSES` against CPU cores and available memory to avoid resource exhaustion. -3. Use environment variables for per-environment tuning (staging vs production). -4. Lower `QUEUE_WORKER_INTERVAL_MILLISECONDS` for faster reaction at the cost of higher CPU; increase `QUEUE_WORKER_FREE_MEMORY_BUFFER` to protect systems with limited RAM. +Register the `RabbitMqQueueMetricsReaderPlugin` in your `QueueDependencyProvider` to supply RabbitMQ queue metrics (message counts, batch sizes) to the resource-aware worker: + +```php +// src/Pyz/Zed/Queue/QueueDependencyProvider.php + +use Spryker\Client\RabbitMq\Plugin\Queue\RabbitMqQueueMetricsReaderPlugin; + +class QueueDependencyProvider extends SprykerQueueDependencyProvider +{ + /** + * @return array<\Spryker\Client\QueueExtension\Dependency\Plugin\QueueMetricsReaderPluginInterface> + */ + protected function getQueueMetricsReaderPlugins(): array + { + return [ + new RabbitMqQueueMetricsReaderPlugin(), + ]; + } +} +``` + +For the full configuration reference, architecture details, tuning recommendations, and backporting guidance, see [Optimizing Jenkins execution with the resource-aware queue worker](/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html). diff --git a/docs/dg/dev/backend-development/data-manipulation/queue/queue.md b/docs/dg/dev/backend-development/data-manipulation/queue/queue.md index 9129f339ace..6543d7d1adf 100644 --- a/docs/dg/dev/backend-development/data-manipulation/queue/queue.md +++ b/docs/dg/dev/backend-development/data-manipulation/queue/queue.md @@ -163,7 +163,6 @@ use Spryker\Zed\Queue\QueueDependencyProvider as SprykerQueueDependencyProvider; class QueueDependencyProvider extends SprykerQueueDependencyProvider { - protected function getProcessorMessagePlugins(Container $container) { return [ diff --git a/docs/dg/dev/ci.md b/docs/dg/dev/ci.md new file mode 100644 index 00000000000..aa49fcd475a --- /dev/null +++ b/docs/dg/dev/ci.md @@ -0,0 +1,161 @@ +--- +title: Continuous Integration +description: Continuous Integration configuration and validation commands for Spryker projects to ensure code quality, stability, and upgradability. +last_updated: February 24, 2026 +template: concept-topic-template +keywords: CI, continuous integration, automated testing, code quality, GitHub Actions, project stability, upgradability, validation, static analysis, architecture sniffer, codeception, phpstan +--- + +Continuous Integration (CI) is essential for maintaining code quality, project stability, and upgradability in Spryker projects. This document lists all validation commands from the Spryker demo shop CI pipeline that you can run locally before committing code. + +## Importance of CI for Spryker projects + +All CI checks are mandatory for: +- **Project stability**: Prevents breaking changes from reaching production +- **Code quality**: Enforces coding standards and architectural patterns +- **Upgradability**: Ensures compatibility with Spryker core updates +- **Early issue detection**: Catches bugs, security vulnerabilities, and violations before deployment + +Skipping CI checks leads to technical debt, integration issues, and costly refactoring. + +## Reference CI implementation + +The Spryker B2B Demo Marketplace includes a comprehensive GitHub Actions CI workflow: [.github/workflows/ci.yml](https://github.com/spryker-shop/b2b-demo-marketplace/blob/master/.github/workflows/ci.yml). + +{% info_block warningBox "Warning" %} +This CI configuration is specific to the demo shop only and may not be applicable to the project. +However, it can be used as an example following recommendations described below. +{% endinfo_block %} + +It is recommended to review all available CI workflows in the [Spryker workflows directory](https://github.com/spryker-shop/b2b-demo-marketplace/tree/master/.github/workflows) and adapt the relevant ones for the project. +Not all workflows may be applicable to the specific requirements, so select and configure only those that align with the project needs. + +For instructions on setting up CI in different repositories, see the following documents: +- [Azure Pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-azure-pipelines.html) +- [Bitbucket Pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-bitbucket-pipelines.html) +- [GitHub Actions](/docs/ca/dev/configure-deployment-pipelines/configure-github-actions.html) +- [GitLab Pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-gitlab-pipelines.html) + +## Validation commands + +Use these commands to validate the code before merging it to the main branch. + +### Security scanning + +**Credential leak detection** + +```bash +# Using TruffleHog (install separately) +trufflehog filesystem . --log-level=2 --results=verified +``` + +### Code validation + +**Schema and transfer validation** + +```bash +# Validate Propel schemas +vendor/bin/console propel:schema:validate +vendor/bin/console propel:schema:validate-xml-names + +# Validate transfer objects +vendor/bin/console transfer:validate +``` + +### Static code analysis + +**Code style checks** + +```bash +# PHP code style (PHPMD) +vendor/bin/console code:sniff:style + +# Architecture sniffer (Spryker conventions) +vendor/bin/phpmd src/ text vendor/spryker/architecture-sniffer/src/ruleset.xml +``` + +**Static analysis** + +```bash +# PHPStan (type checking and analysis at level 6) +vendor/bin/phpstan analyze -l 6 -c phpstan.neon src/ + +# Spryker Evaluator (upgradability and compatibility checks) +vendor/bin/evaluator evaluate --format=compact +``` + +### Frontend validation + +**JavaScript and CSS checks** + +```bash + +# Yves (storefront) validation +npm run yves:stylelint +npm run yves:lint + +# Code formatting +npm run formatter + +# Marketplace frontend validation +npm run mp:lint +npm run mp:stylelint +npm run mp:test +``` + +### Extending CI with Project Architecture Sniffer + +The [Project Architecture Sniffer](/docs/dg/dev/sdks/sdk/development-tools/project-architecture-sniffer.html) enforces Spryker architectural standards and detects violations. + +Add the following step to your GitHub Actions workflow file (`.github/workflows/ci.yml`): + +```yaml +- name: Architecture Sniffer + run: vendor/bin/phpmd src/Pyz/ text vendor/spryker/project-architecture-sniffer/src/ruleset.xml --minimumpriority 3 +``` + +## Automated testing + +### Functional and Unit tests + +Run functional tests in the CI environment: + +```bash +docker/sdk testing codecept run -c codeception.ci.functional.yml +``` + +Functional tests are recommended for all Spryker projects to cover custom business logic in facades, clients, services, plugins, and others. +They can also be used as a form of unit testing to ensure the code behaves as expected. +For detailed information on how to build functional tests, see [Testing Guidelines](/docs/dg/dev/guidelines/testing-guidelines/testing-guidelines.html). + +### End-to-end tests + +**Cypress (Recommended)** + +Cypress is the **recommended and preferred approach** for end-to-end (E2E) testing in Spryker projects. +The Spryker Cypress boilerplate provides a modern, comprehensive testing framework for UI testing with superior debugging capabilities and developer experience. +For detailed information on setting up and running Cypress tests, see [Cypress Testing](/docs/dg/dev/guidelines/testing-guidelines/cypress-testing.html). + +**API tests (Glue RestApi) with Codecept** + +Run API tests in the CI environment: + +```bash +docker/sdk testing codecept run -c codeception.api.yml +``` + +API tests are based on the PHP Codecept framework and test endpoints with groups `@Glue` and `@EndToEnd`. +These tests validate the REST API responses, data integrity, and endpoint behavior. +This approach can still be used as is, since it is based on PHP and does not require adding new frameworks or stacks to the project. + +**Presentation Acceptance tests with Codecept** + +Run acceptance tests in the CI environment: + +```bash +docker/sdk testing codecept run -c codeception.acceptance.yml +``` + +Acceptance tests are based on the PHP Codecept framework and test the presentation layer of the application with groups `@Presentation`. +These tests validate user interactions, page rendering, and business logic flows from the user's perspective. + diff --git a/docs/dg/dev/data-import/202602.0/creating-data-importers.md b/docs/dg/dev/data-import/202602.0/creating-data-importers.md new file mode 100644 index 00000000000..6bb0b196d45 --- /dev/null +++ b/docs/dg/dev/data-import/202602.0/creating-data-importers.md @@ -0,0 +1,449 @@ +--- +title: Creating data importers +description: The following article describes how to build your own DataImport for a specific type. All steps in this article are built on real life example for importing product images. +last_updated: Jun 16, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/ht-data-import +originalArticleId: e149b582-49ef-4816-beb7-c29fa41581cf +redirect_from: + - /docs/scos/dev/data-import/202404.0/creating-a-data-importer.html + - /docs/scos/dev/data-import/202204.0/creating-a-data-importer.html +--- + +The following article describes how to build your data importer for a specific type. All steps in this article are built on the real-life example for importing product images. + +{% info_block infoBox "File Import Formats" %} + +Currently, we only support CSV as a format for file imports out of the box. However, you can create your own file reader if you want to use a different format. + +{% endinfo_block %} + +## Prerequisites + +Before you start creating a data importer, you need to know what data it should include. We recommend you start by checking out the respective database tables you want to fill with data. The image below shows the table relation for product images. +![Database schema](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/HowTo+Add+New+DataImport+Type/product_image_import_database_schema.png) + +From this schema, you can easily identify the data columns you need for your import file. So the relevant fields to fill are: + +- name (spy_product_image_set) +- external_url_large (spy_product_image) +- external_url_small (spy_product_image) +- fk_locale (spy_product_image_set) +- fk_product (spy_product_image_set) +- fk_product_abstract (spy_product_image_set) + +{% info_block infoBox "Info" %} + +All `fk_*` fields are foreign keys to other database tables. We can not know the id's of the related entities so we need to fill in those fields with a unique identifier. + +{% endinfo_block %} + +For the database field `fk_locale`, we will use the name of the locale for which we need the id–for example, `de_DE`. This value will then be used later to fetch the id for the given locale name. +We will use the same technique for the `fk_product` and `fk_product_abstract` fields. + +{% info_block infoBox "" %} + +To identify the data for your import file, you can also check out the .csv files of individual data importers. You can find the import file details in [Packaged Business Capabilities](/docs/pbc/all/pbc.html). + +{% endinfo_block %} + +Now that you know what data your import file should include, you can proceed with the first step of creating a data importer: creating an import file. + +## Create an import file + +Since only CSV format is supported for import out of the box, we will start with creating a .csv file in any preferred editor. + +Your CSV file for the product images import will contain the following header columns: + +- image_set_name +- external_url_large +- external_url_small +- locale +- concrete_sku +- abstract_sku + +Now, you can start to fill in some data into the new file. We recommend adding only a couple of entries to check after the first import run if all needed data is imported. + +Once you populate all columns, your CSV file should be similar to this one: +![CSV file](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/HowTo+Add+New+DataImport+Type/product_image_import_csv_file_example.png) + +Save the new file under `data/import/*`. + +That's it - your import file is ready. Now you have to configure the data importer. + +## Configure the data importer + +Every import type needs its own `DataImporterConfiguration`. To add it, open the `DataImportConfig` class and add a constant for the import type. + +{% info_block infoBox %} + +The constant is used to identify an import type. More information about it will follow later in this article. In our case we will use const `IMPORT_TYPE_PRODUCT_IMAGE = 'product-image';`. + +{% endinfo_block %} + +You also need to define the new data importer in the [configuration YML file](/docs/dg/dev/data-import/{{page.version}}/importing-data-with-a-configuration-file.html). Add the following lines to the `/data/import/config/full_import_config.yml` configuration file: + +```yml +actions: + ... + - data_entity: product-image + source: data/import/icecat_biz_data/product_image.csv +``` + +where: + +- `data_entity` represents the name of your data importer; +- `source` indicates the path to your `.csv` file with data to import. + +## Create a writer step + +{% info_block infoBox "Steps" %} + +(Each importer needs at least one step to write the data from the file to a database. You can add as many steps as you need to your `DataSetStepBroker`. + +{% endinfo_block %} + +First, we will create a new class called `ProductImageWriterStep` in `"*/Zed/DataImport/Business/Model/ProductImage/"` with this content: + +**ProductImageWriterStep** + +```php +getCsvDataImporterFromConfig( + $this->getConfig()->buildImporterConfigurationByDataImportConfigAction($dataImportConfigurationActionTransfer) + ); + + $dataSetStepBroker = $this->createTransactionAwareDataSetStepBroker(ProductImageWriterStep::BULK_SIZE); + $dataSetStepBroker + ->addStep(new ProductImageWriterStep()); + + $dataImporter->addDataSetStepBroker($dataSetStepBroker); + + return $dataImporter; +} +``` + +2. Add the new DataImporter in `DataImportBusinessFactory::getDataImporterByType()`: + +```php +public function getDataImporterByType(DataImportConfigurationActionTransfer $dataImportConfigurationActionTransfer): ?DataImporterInterface +{ + switch ($dataImportConfigurationActionTransfer->getDataEntity()) { + ... + case DataImportConfig::IMPORT_TYPE_PRODUCT_IMAGE: + return $this->createProductImageImporter($dataImportConfigurationActionTransfer); + } +} +``` + +In the `DataImportBusinessFactory::getImporter()` we now add the new `DataImporter` with `$dataImporterCollection->addDataImporter($this->createProductImageImporter())`. + +3. Register a new console command in `ConsoleDependencyProvider` to allow execution of the import command from the console. Since the `DataImport` module brings a generic console command which can be used several times to add a console command for each data import type, you only need to register it once as follows: + +```php +/** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Symfony\Component\Console\Command\Command[] + */ +public function getConsoleCommands(Container $container) +{ + $commands = [ + new DataImportConsole(), + ... + new DataImportConsole(DataImportConsole::DEFAULT_NAME . ':' . DataImportConfig::IMPORT_TYPE_PRODUCT_IMAGE), + ... + ]; +} +``` + +Now you have a new console command `data:import:product-image` available. When you run `vendor/bin/console` you will see a new entry: `data:import:product-image This command executes your "product-image" importer.` + +## Execute the data importer + +As mentioned in the previous step, the DataImport module brings a generic command which can be used several times. You need to at least register it once without a constructor argument. + +{% info_block infoBox "Info" %} + +This command will execute all the `DataImporter` registered in your `full_import_config.yml` one by one. + +{% endinfo_block %} + +As you already made it in the example above, you can add the command with a new name over and over again. This brings in the ability to execute only a specific data importer. + +When you now execute `vendor/bin/console data:import:product-image` you will see the debug output from the `ProductImageWriterStep`. + +There are a lot of options that you can set for an import. If you need to debug one specific line of an import file, you can use offset and limit like this `vendor/bin/console data:import:product-image -o 43 -l 1`. + +{% info_block infoBox "Info" %} + +This will then only execute the data set at potion 43 of your import file. + +{% endinfo_block %} + +The `DataImporter` catches exceptions by default and continues to import data. In development mode, you can use the throw-exception option to throw the occurred exception instead of catching it. + +{% info_block infoBox "Info" %} + +There are a couple more options, you can see them when you execute `vendor/bin/console data:import:product-image -h`, the console command will then print the help page for the given command. + +{% endinfo_block %} + +## Finalize the data importer + +We have made sure that the data importer can be executed, but we only print a debug message right now. We need to do some additional things to really save some data. Follow the steps below to finalize your data importer. + +### 1. Convert logical identifier to foreign keys + +As mentioned in the [Prerequisites](#prerequisites), we can not use foreign keys in our import file - we need a logical identifier that can now be used to get the foreign key of a related entity. + +There are several ways of how we can get the logical identifier. One of them is to add a new step–for example, `LocaleNameToIdLocaleStep`. However, in our case, it's better to use a Repository, which provides us with a getter to retrieve the `id_locale` by its name. We will take this approach and do the following: + +1. Add `LocaleRepository` to get the foreign key of a locale by its name: + +```php +loadLocaleMap(); + } + + return static::$localeMap[$locale]; + } + + /** + * @return void + */ + private function loadLocaleMap() + { + $localeCollection = SpyLocaleQuery::create() + ->select([SpyLocaleTableMap::COL_ID_LOCALE, SpyLocaleTableMap::COL_LOCALE_NAME]) + ->find(); + + foreach ($localeCollection as $locale) { + static::$localeMap[$locale[SpyLocaleTableMap::COL_LOCALE_NAME]] = $locale[SpyLocaleTableMap::COL_ID_LOCALE]; + } + } + +} +``` + +This `Repository` is very simple but does what we need right now. + +2. Add the following code, as we need to change our `ProductImageWriterStep` to use it: + +```php +/** + * @var \Pyz\Zed\DataImport\Business\Model\Locale\Repository\LocaleRepositoryInterface + */ +protected $localeRepository; + +/** + * @param \Pyz\Zed\DataImport\Business\Model\Locale\Repository\LocaleRepositoryInterface $localeRepository + */ +public function __construct(LocaleRepositoryInterface $localeRepository) +{ + $this->localeRepository = $localeRepository; +} +``` + +Now, we need to inject this new Repository into our `ProductImageWriterStep` inside of the business factory. +{% info_block infoBox "Info" %} + +When this is done we can use it like this: `$idLocale = $this->localeRepository->getIdLocaleByLocale($dataSet[static::KEY_LOCALE]);` + +{% endinfo_block %} + +We need to add a similar `Repository` to retrieve the **ID** of an abstract or concrete product by its SKU. This is then also added to our `ProductImageWriterStep` as already done with `LocaleRepository`. + +### 2. Find or create entities + +We will now create the `spy_product_image_set`, `spy_product_image`, `spy_product_image_set_to_product_image` and entities. + +With the first run of an importer, all entities are new and we need to do an insert. When the importer is executed more than once, it updates the existing entities. To execute this approach, we use Propel's `findOrCreate()` method. Do the following: + +1. Find or create `spy_product_image_set`. Add the following code to the `ProductImageWriterStep`: + +```php +/** + * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet + * + * @return \Orm\Zed\ProductImage\Persistence\SpyProductImageSet + */ +protected function findOrCreateImageSet(DataSetInterface $dataSet) +{ + $idLocale = $this->getIdLocaleByLocale($dataSet); + + $query = SpyProductImageSetQuery::create() + ->filterByName($dataSet[static::KEY_IMAGE_SET_NAME]) + ->filterByFkLocale($idLocale); + + if (!empty($dataSet[static::KEY_ABSTRACT_SKU])) { + $idProductAbstract = $this->productRepository->getIdProductAbstractByAbstractSku($dataSet[static::KEY_ABSTRACT_SKU]); + $query->filterByFkProductAbstract($idProductAbstract); + } + + if (!empty($dataSet[static::KEY_CONCRETE_SKU])) { + $idProduct = $this->productRepository->getIdProductByConcreteSku($dataSet[static::KEY_CONCRETE_SKU]); + $query->filterByFkProduct($idProduct); + } + + $productImageSetEntity = $query->findOneOrCreate(); + if ($productImageSetEntity->isNew() || $productImageSetEntity->isModified()) { + $productImageSetEntity->save(); + } + + return $productImageSetEntity; +} + +/** + * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet + * + * @return int + */ +protected function getIdLocaleByLocale(DataSetInterface $dataSet) +{ + $idLocale = null; + + if (!empty($dataSet[static::KEY_LOCALE])) { + $idLocale = $this->localeRepository->getIdLocaleByLocale($dataSet[static::KEY_LOCALE]); + } + + return $idLocale; +} +``` + +We want to allow `fk_locale` to be null. Either `fk_product` or `fk_product_abstract` must be set. For performance reasons, we save the entity only when it's new or modified. + +2. Find or create the `spy_product_image` by adding the following code to the `ProductImageWriterStep`: + +```php +/** + * We expect that the large URL is the unique identifier for an image. + * + * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet + * + * @return \Orm\Zed\ProductImage\Persistence\SpyProductImage + */ +protected function findOrCreateImage(DataSetInterface $dataSet) +{ + $productImageEntity = SpyProductImageQuery::create() + ->filterByExternalUrlLarge($dataSet[static::KEY_EXTERNAL_URL_LARGE]) + ->findOneOrCreate(); + + $productImageEntity + ->setExternalUrlSmall($dataSet[static::KEY_EXTERNAL_URL_SMALL]); + + if ($productImageEntity->isNew() || $productImageEntity->isModified()) { + $productImageEntity->save(); + } + + return $productImageEntity; +} +``` + +3. Add the relation `spy_product_image_set_to_product_image` by adding the following code to `ProductImageWriterStep`: + +```php +/** + * @param \Orm\Zed\ProductImage\Persistence\SpyProductImageSet $imageSetEntity + * @param \Orm\Zed\ProductImage\Persistence\SpyProductImage $productImageEntity + * + * @return void + */ +protected function updateOrCreateImageToImageSetRelation(SpyProductImageSet $imageSetEntity, SpyProductImage $productImageEntity) +{ + $productImageSetToProductImageEntity = SpyProductImageSetToProductImageQuery::create() + ->filterByFkProductImageSet($imageSetEntity->getIdProductImageSet()) + ->filterByFkProductImage($productImageEntity->getIdProductImage()) + ->findOneOrCreate(); + + $productImageSetToProductImageEntity + ->setSortOrder(0); + + if ($productImageSetToProductImageEntity->isNew() || $productImageSetToProductImageEntity->isModified()) { + $productImageSetToProductImageEntity->save(); + } +} +``` + +### 3. Fill the Execute Method + +```php +/** + * @param \Spryker\Zed\DataImport\Business\Model\DataSet\DataSetInterface $dataSet + * + * @return void + */ +public function execute(DataSetInterface $dataSet) +{ + $imageSetEntity = $this->findOrCreateImageSet($dataSet); + $productImageEntity = $this->findOrCreateImage($dataSet); + + $this->updateOrCreateImageToImageSetRelation($imageSetEntity, $productImageEntity); +} +``` + +## 7. Run the importer + +That's it! Now when you run the console command `vendor/bin/console data:import:product-image`, you will see an output similar to this one: + +![Importer command](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/HowTo+Add+New+DataImport+Type/product_image_import_console_output.png) diff --git a/docs/dg/dev/data-import/202512.0/data-import-optimization-guidelines.md b/docs/dg/dev/data-import/202602.0/data-import-optimization-guidelines.md similarity index 99% rename from docs/dg/dev/data-import/202512.0/data-import-optimization-guidelines.md rename to docs/dg/dev/data-import/202602.0/data-import-optimization-guidelines.md index 86da742bc8f..dea8a592ba7 100644 --- a/docs/dg/dev/data-import/202512.0/data-import-optimization-guidelines.md +++ b/docs/dg/dev/data-import/202602.0/data-import-optimization-guidelines.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/dataimporter-speed-optimization originalArticleId: a2e441c4-b1e9-43d4-8641-b4d2ff1e26f9 redirect_from: + - /docs/dg/dev/data-import/202512.0/data-import-optimization-guidelines.html - /docs/scos/dev/data-import/202404.0/data-importer-speed-optimization.html - /docs/scos/dev/data-import/202204.0/data-importer-speed-optimization.html --- diff --git a/docs/dg/dev/data-import/202602.0/data-import.md b/docs/dg/dev/data-import/202602.0/data-import.md new file mode 100644 index 00000000000..f2b211aa630 --- /dev/null +++ b/docs/dg/dev/data-import/202602.0/data-import.md @@ -0,0 +1,22 @@ +--- +title: Data import +description: Learn how to import data from other systems into your Spryker Cloud Commerce OS based project +last_updated: Sep 7, 2022 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/data-import/202404.0/data-import.html + - /docs/scos/dev/data-import/202108.0/data-import-categories/catalog-setup/products/products.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/commerce-setup/commerce-setup.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/merchandising-setup/product-merchandising/product-merchandising.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/merchandising-setup/merchandising-setup.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/about-data-import-categories.html + - /docs/scos/dev/data-import/202204.0/data-import.html +--- + +- [Importing data with a configuration file](/docs/dg/dev/data-import/{{page.version}}/importing-data-with-a-configuration-file.html) +- [Demo Shop data import](/docs/dg/dev/data-import/{{page.version}}/setting-up-shop-data.html) +- [Creating a data importer](/docs/dg/dev/data-import/{{page.version}}/creating-data-importers.html) +- [Importing product data with a single file](/docs/dg/dev/data-import/{{page.version}}/importing-product-data-with-a-single-file.html) +- [Data importers overview and implementation](/docs/dg/dev/data-import/{{page.version}}/data-importers-implementation.html) +- [Importing data with the queue data importer](/docs/dg/dev/data-import/{{page.version}}/importing-data-with-the-queue-data-importer.html) +- [Data importer speed optimization](/docs/dg/dev/data-import/{{page.version}}/data-import-optimization-guidelines.html) diff --git a/docs/dg/dev/data-import/202602.0/data-importers-implementation.md b/docs/dg/dev/data-import/202602.0/data-importers-implementation.md new file mode 100644 index 00000000000..c0ad2104f1a --- /dev/null +++ b/docs/dg/dev/data-import/202602.0/data-importers-implementation.md @@ -0,0 +1,311 @@ +--- +title: Data importers implementation +description: This article includes the list of data importers provided in Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/data-importers-review-implementation +originalArticleId: de408e22-7a9b-40ee-a4db-449a86b48f83 +redirect_from: + - /docs/scos/dev/data-import/202404.0/data-importers-overview-and-implementation.html + - /docs/scos/dev/back-end-development/data-manipulation/data-ingestion/data-importers/data-importers-overview-and-implementation.html + - /docs/scos/dev/data-import/202204.0/data-importers-overview-and-implementation.html +--- + +Currently, there are the following importers in Spryker Commerce OS: + +- Product Alternative Importer **(Beta)** - **B2B/B2C** +- Product Discontinued Importer **(Beta)** - **B2B/B2C** +- Product Packaging Unit Importer **(Beta)** - **B2B/B2C** +- Combined Product - **B2B/B2C** +- Company Importer **(Beta)** - **B2B/B2C** +- Company Business Unit Importer **(Beta)** - **B2B/B2C** +- Company Unit Address Importer **(Beta)** - **B2B/B2C** +- Company Unit Address Label Importer **(Beta)** - **B2B/B2C** +- Company User on Behalf Importer **(Beta)** - **B2B/B2C** +- Multi-Cart Importer **(Beta)** - **B2B/B2C** +- Shared Cart Importer **(Beta)** - **B2B/B2C** +- Shopping List Importer **(Beta)** - **B2B/B2C** +- Shopping List Company Business Unit Importer **(Beta)** - **B2B/B2C** +- Shopping List Company User Importer **(Beta)** - **B2B/B2C** +- Shopping List Item Importer **(Beta)** -**B2B/B2C** +- Product Abstract Importer - **B2B/B2C** +- Product Abstract Store Importer - **B2B/B2C** +- Product Concrete Importer - **B2B/B2C** +- Product Price Importer - **B2B/B2C** +- Product Image Importer - **B2B/B2C** +- Product Stock Importer - **B2B/B2C** +- Product Review Importer - **B2B/B2C** +- Product Relation Importer - **B2B/B2C** +- Product Attribute Key Importer - **B2B/B2C** +- Product Group Importer - **B2B/B2C** +- Product Label Importer - **B2B/B2C** +- Product Management Attribute Importer - **B2B/B2C** +- Product Option Importer - **B2B/B2C** +- Product Option Price Importer - **B2B/B2C** +- Product Relation Importer - **B2B/B2C** +- Product Search Attribute Importer - **B2B/B2C** +- Product Search Attribute Map Importer - **B2B/B2C** +- Product Set Importer - **B2B/B2C** +- Category Template Importer - **B2B/B2C** +- CMS Block Importer - **B2B/B2C** +- CMS Block Category Importer - **B2B/B2C** +- CMS Block Category Position Importer - **B2B/B2C** +- CMS Block Store Importer - **B2B/B2C** +- CMS Page Importer - **B2B/B2C** +- CMS Slot Templates Importer - **B2B/B2C** +- CMS Slots Importer - **B2B/B2C** +- CMS Slot-Block Relationship Importer - **B2B/B2C** +- CMS Template Importer - **B2B/B2C** +- Abstract Product List Content Item Importer - **B2B/B2C** +- Product Set Content Item Importer - **B2B/B2C** +- Banner Content Item Importer - **B2B/B2C** +- Company Unit Address Label Relation Importer - **B2B/B2C** +- Currency Importer - **B2B/B2C** +- Customer Importer - **B2B/B2C** +- Discount Importer - **B2B/B2C** +- Discount Amount Importer - **B2B/B2C** +- Discount Store Importer - **B2B/B2C** +- Discount Voucher Importer - **B2B/B2C** +- Glossary Importer - **B2B/B2C** +- Navigation Importer - **B2B/B2C** +- Navigation Node Importer - **B2B/B2C** +- Order Source Importer - **B2B/B2C** +- Shipment Importer - **B2B/B2C** +- Shipment Price Importer - **B2B/B2C** +- Stock Importer - **B2B/B2C** +- Tax Importer - **B2B/B2C** +- Payment Method Importer - **B2B/B2C** +- Shipment Store Importer - **B2B/B2C** + +Each of the importers can be executed one by one with the separate command (for example, `./vendor/bin/console data:import:product-abstract`). + +However, if you want to execute specific import types **in bulk**, you can create a `config.yml` configuration file with the following structure: + +```yml +action: + - data_entity: company + ... + - data_entity: product-abstract + source: data/import/icecat_biz_data/product_abstract.csv + ... + ``` + + where: + +- `data_entity` represents the name of your data importer. +- `source` describes the path to your CSV file with data to import. If the source is not specified, then CSV file defined in the module's `Config` will be used. + +Then you can run the `./vendor/bin/console data:import --config=path/to/config.yml` command to import all the data from the `config.yml` file. See [Importing Data](/docs/dg/dev/data-import/{{page.version}}/importing-data-with-a-configuration-file.html) for more details about this and other import commands you can use. + +On the project level, you can set a default configuration file path in `DataImportConfig::getDefaultYamlConfigPath()` so this file will be used when `--config` option is not specified, for example, when you run the `./vendor/bin/console data:import` command. + +Be advised that some of the importers are related to the data that is imported by another one. For example, *Product Concrete Importer* will not work if there are no abstract products in a database because a particular product cannot exist without an abstract. The same goes for all data with relations. Therefore, make sure to check the database relations or dependencies in [Execution Order of Data Importers in Demo Shop](/docs/dg/dev/data-import/{{page.version}}/execution-order-of-data-importers.html) before running the importers. + +## Implementation + +Currently, we have two approaches to data importers. Most of the importers are project-based, but there are a few module-based importers. The main difference is the way the importer should be enabled. + +**Modular Data Importers (coming from vendor):** + +- Product Alternative Importer **(Beta)** +- Product Discontinued Importer **(Beta)** +- Product Packaging Unit Importer **(Beta)** +- Company Importer **(Beta)** +- Company Business Unit Importer **(Beta)** +- Company Unit Address Importer **(Beta)** +- Company Unit Address Label Importer **(Beta)** +- Company User on Behalf Importer **(Beta)** +- Multi-Cart Importer **(Beta)** +- Shared Cart Importer **(Beta)** +- Shopping List Importer **(Beta)** +- Shopping List Company Business Unit Importer **(Beta)** +- Shopping List Company User Importer **(Beta)** +- Shopping List Item Importer **(Beta)** +- CMS Slot Templates Importer +- CMS Slots Importer +- CMS Slot-Block Relationship Importer +- Stock Importer **(Beta)** +- Payment Method Importer **(Beta)** +- Shipment Importer **(Beta)** +- Shipment Price Importer **(Beta)** +- Shipment Store Importer **(Beta)** + +To use a module-based importer, add it to the plugin stack. See the example below. + +```php +getCsvDataImporterFromConfig($this->getConfig()->getOrderSourceDataImporterConfiguration()); + + $dataSetStepBroker = $this->createTransactionAwareDataSetStepBroker(); + //Add step + $dataSetStepBroker->addStep(new OrderSourceWriterStep()); + + $dataImporter->addDataSetStepBroker($dataSetStepBroker); + + return $dataImporter; + } +} +``` + +2. Call this method using the `DataImportBusinessFactory::getDataImporterByType()` method: + +```php +getDataEntity()) { + ... + case DataImportConfig::IMPORT_TYPE_ORDER_SOURCE: + return $this->createOrderSourceImporter($dataImportConfigurationActionTransfer); + } +} +``` + +That's it. Your data importer is now appended to the DataImport module. + +Also, there are **bulk importers** that can be used if you have a huge amount of data to import, and existing importers may be slow. + +Bulk importers were implemented only on the project level and they are currently compatible only with a PostgreSQL database. + +The bulk importers are as follows: + +- Product Abstract Importer +- Product Abstract Store Importer +- Product Concrete Importer +- Product Price Importer +- Product Image Importer +- Product Stock Importer + +You can enable a bulk importer in `Pyz\Zed\DataImport\Business\DataImportBusinessFactory`: + +```php + vendor/your-company-name/product-category/src/YourCompanyName/Zed/ProductCategory/Communication/Plugin/ProductManagement/ProductCategoryProductTableConfigurationExpanderPlugin.php @@ -89,13 +122,13 @@ class ProductCategoryProductTableConfigurationExpanderPlugin extends AbstractPlu -2. Wire the plugin in the `\Pyz\Zed\ProductManagement\ProductManagementDependencyProvider::getProductTableConfigurationExpanderPlugins()` method. +6. Wire the plugin in the `\Pyz\Zed\ProductManagement\ProductManagementDependencyProvider::getProductTableConfigurationExpanderPlugins()` method. {% info_block warningBox "Verification" %} In the Back Office, go to **Catalog**>**Products**. Make sure the **Categories** column is displayed in the table. {% endinfo_block %} -3. Create a plugin to provide data for the **Categories** column: +7. Create a plugin to provide data for the **Categories** column:
    vendor/your-company-name/product-category/src/YourCompanyName/Zed/ProductCategory/Communication/Plugin/ProductManagement/ProductCategoryProductTableDataBulkExpanderPlugin.php @@ -164,7 +197,7 @@ class ProductCategoryProductTableDataBulkExpanderPlugin extends AbstractPlugin i
    -4. Wire the plugin in the `\Pyz\Zed\ProductManagement\ProductManagementDependencyProvider::getProductTableDataBulkExpanderPlugins()` method. +8. Wire the plugin in the `\Pyz\Zed\ProductManagement\ProductManagementDependencyProvider::getProductTableDataBulkExpanderPlugins()` method. {% info_block warningBox "Verification" %} @@ -172,7 +205,6 @@ In the Back Office, go to **Catalog**>**Products**. Make sure relevant data is d {% endinfo_block %} -Your module is created. ## Next step diff --git a/docs/dg/dev/developing-standalone-modules/test-the-compatibility-of-standalone-modules.md b/docs/dg/dev/developing-standalone-modules/test-the-compatibility-of-standalone-modules.md index 61380c33492..05c55a9eab5 100644 --- a/docs/dg/dev/developing-standalone-modules/test-the-compatibility-of-standalone-modules.md +++ b/docs/dg/dev/developing-standalone-modules/test-the-compatibility-of-standalone-modules.md @@ -8,11 +8,11 @@ template: howto-guide-template To test a third-party module's compatibility with a Spryker Demo Shop, follow the steps: 1. From one of the following, choose one Demo Shop to test the compatibility of your module with: - +- [B2B Demo Marketplace](https://github.com/spryker-shop/b2b-demo-marketplace) - [B2C Demo Shop](https://github.com/spryker-shop/b2c-demo-shop) - [B2B Demo Shop](https://github.com/spryker-shop/b2b-demo-shop) - [B2C Demo Marketplace](https://github.com/spryker-shop/b2c-demo-marketplace) -- [B2B Demo Marketplace](https://github.com/spryker-shop/b2b-demo-marketplace) + 2. Pull the latest version of the Demo Shop you've selected. 3. Install your module using Composer. diff --git a/docs/dg/dev/development-getting-started-guide.md b/docs/dg/dev/development-getting-started-guide.md index faff618cd48..e9362b2eed2 100644 --- a/docs/dg/dev/development-getting-started-guide.md +++ b/docs/dg/dev/development-getting-started-guide.md @@ -1,7 +1,7 @@ --- title: Development getting started guide description: This is a step-by-step checklist that you can follow through all the stages of working with Spryker. -last_updated: July 11, 2022 +last_updated: Feb 20, 2026 template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/dev-getting-started originalArticleId: 79b50d48-6f09-45b0-9e4a-f372e274d462 @@ -15,174 +15,113 @@ This document helps you get started with the Spryker Cloud Commerce OS. It has b ## 1. Install Spryker -Spryker Demo Shops are a good starting point for any project. They are shipped with different sets of components, which are specific to respective business models. Demo Shops are fully functional and can be used for both demonstrative purposes as well as as a boilerplate for a new project. Though each shop comes with pre-selected components, Spryker offers hundreds of additional modules which you can add late. - +Spryker Demo Shops are a good starting point for any project. They are shipped with different sets of components, which are specific to respective business models. Demo Shops are fully functional and can be used for both demonstrative purposes as well as boilerplate for a new project. Though each shop comes with pre-selected components, Spryker offers hundreds of additional modules that you can add later. You can choose from the following options: - -- [B2C Demo Shop](/docs/about/all/b2c-suite.html) +- [Marketplace B2B Demo Shop](/docs/about/all/spryker-marketplace/marketplace-b2b-suite.html) - [B2B Demo Shop](/docs/about/all/b2b-suite.html) - [Marketplace B2C Demo Shop](/docs/about/all/spryker-marketplace/marketplace-b2c-suite.html) -- [Marketplace B2B Demo Shop](/docs/about/all/spryker-marketplace/marketplace-b2b-suite.html) +- [B2C Demo Shop](/docs/about/all/b2c-suite.html) You can run Spryker on MacOS, Linux, and Windows with WSL1 or WSL2. For installation instructions, see [Set up Spryker locally](/docs/dg/dev/set-up-spryker-locally/set-up-spryker-locally.html). -### Configure the local environment - -To configure the local environment, change the following attributes in `deploy.dev.yml`: - -- Namespace: this helps to avoid issues when you have two or more projects with the same names. -- Regions. -- Stores. -- Domains for the local environment. -- Domains for the services like RabbitMQ and Jenkins: this helps to keep all project links together. - -For more information about deploy files, see [Deploy file](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html). - -### Update the `readme.md` file - -- Update the project installation description. -- Update the repository link. -- Remove any unused information, like Vagrant installation instructions if DevVM was not used. -- Consider moving the production information further down to make it easier for new developers to understand how to use the project. - -## 2. Manage modules - -A Spryker module is a single-function unit that has well-defined dependencies and can be updated independently. [Composer](/docs/dg/dev/set-up-spryker-locally/manage-dependencies-with-composer.html) is used for installing and managing module dependencies. - -To define your strategy when implementing updates, learn about our [module and feature release process](/docs/about/all/releases/product-and-code-releases.html). - - -You will use the following commands to manage modules with Composer: - -- Install the dependencies listed in `composer.json`: - -```bash -composer install -``` - -- Update all the installed modules: - -```bash -composer update "spryker/*" -``` - -We recommend updating modules weekly to ensure you have the latest fixes. We also recommend [subscribing to our release notes newsletter](https://now.spryker.com/release-notes) to stay up to date with the improvements. - -- Update a specific module: +## 2. Configure development tools -```bash -composer update "spryker/{MODULE_NAME}" -``` - -You can keep track of new module versions using the [composer-versions-check](https://github.com/Soullivaneuh/composer-versions-check) addon. - -- Add a new module: - -```bash -composer require "spryker/module-name"`. -``` +Spryker offers a set of [development tools](/docs/dg/dev/development-tools.html) that make it easier to work with the project: DockerSdk, Xdebug, WebProfiler, Code Quality Tools, and more. -To learn about the module versioning approach in Spryker, see [Semantic Versioning: Major vs. Minor vs. Patch Release](/docs/dg/dev/architecture/module-api/semantic-versioning-major-vs.-minor-vs.-patch-release.html). +Spryker also provides [AI tools](/docs/dg/dev/ai/ai-dev/ai-dev-overview.html) and instructions to speed up development and make it easier. These AI-powered assistants can help you with code generation, testing, and troubleshooting. -## 3. Configure the environment +## 3. Configure repository and Continuous Integration -1. Define how to manage the settings in the configuration files with [Configuration management](/docs/dg/dev/backend-development/data-manipulation/configuration-management.html). -2. [Configure services](/docs/dg/dev/integrate-and-configure/configure-services.html). -3. [Configure Elasticsearch](/docs/pbc/all/search/{{site.version}}/base-shop/tutorials-and-howtos/configure-elasticsearch.html). -4. [Configure queue](/docs/dg/dev/backend-development/data-manipulation/queue/queue.html). -5. [Configure stores](/docs/dg/dev/internationalization-and-multi-store/set-up-multiple-stores.html#configure-stores). -6. [Set up cronjobs](/docs/dg/dev/backend-development/cronjobs/cronjobs.html). +Push the demo shop to your own repository. For instructions on cloning from a specific branch and pushing to a different remote repository, see [this guide](https://medium.com/@satriajanaka09/clone-pull-from-specific-branch-in-remote-repository-and-then-push-to-a-different-remote-851032f99560). -### Clean up store configuration +To configure the Continuous Integration, see [Configure CI](/docs/dg/dev/ci.html). -If you chose to start with one store, clean up the configuration of the unneeded stores in the following files: +## 4. Configure your IDE -- `config/install/*` -- `data/import/*` -- `deploy.dev.yml` -- `config_default.php` -- `src/SprykerConfig/CodeBucketConfig.php` +You can use any IDE that supports PHP and JavaScript/TypeScript for Spryker development. When you start developing a project, you need to restart it quite often. IDE indexing can slow down this process. +To improve performance, exclude cache and generated files from indexing in your IDE. -### Clean up modules +### PhpStorm -1. Go through the modules that came with the Demo Shop you've installed. -2. Come up with the list of modules you actually need. -3. Remove unnecessary modules by following module upgrade guides in a backwards fashion. - -### Clean up data import - -- In `data/import`, remove the files of the unneeded stores. +In PhpStorm, to disable cache indexing, right-click the folder and select **Mark Directory As > Excluded**. +It is safe to disable cache indexing for the following directories: +- `data/cache` +- `data/tmp` +- `public/(Yves/Zed/Marketlace)/assets` +- `.angular/cache` +- `src/Generated/(Yves/Zed/Marketlace)/Twig` +- `src/Generated/Yves/Router` -- Change the default config in `DataImportConfig::getDefaultYamlConfigPath()`. +A couple of plugins for PhpStorm from the community are recommended: +![phpstorm plugins](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/spryker-phpstorm-plugins.png) -- Define the needed stores in `CodeBucketConfig::getCodeBuckets()`. +## 5. Explore Spryker Documentation -## 4. Configure CI +To learn about Spryker architecture, different parts of the Client, Shared, Zed, and Yves folders, and their different layers, see the following documents: +- [Architecture](/docs/dg/dev/architecture/architecture.html). +- [Architecture as Code](/docs/dg/dev/architecture/architecture-as-code.html) - document your project architecture using industry standards. +- [Guidelines](/docs/dg/dev/guidelines/guidelines.html). +- [Backend development](/docs/dg/dev/backend-development/back-end-development.html) +- [Frontend development](/docs/dg/dev/frontend-development/latest/frontend-development.html) +- [Keep project good for upgrade](/docs/dg/dev/sdks/sdk/customization-strategies-and-upgradability.html) -Continuous Integration (CI) is a development practice where each part of the code can be verified by an automated build and automated tests. This allows for good code quality and makes sure new features don't break the existing functionality. For instructions on setting up CI in different repositories, see the following documents: -- [Deployment pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-azure-pipelines.html) -- [Customizing deployment pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-bitbucket-pipelines.html) -- [GitHub Actions](/docs/ca/dev/configure-deployment-pipelines/configure-github-actions.html) -- [Configuring GitLab pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-gitlab-pipelines.html) -- [Azure Pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-azure-pipelines.html) -- [Configuring Bitbucket Pipelines](/docs/ca/dev/configure-deployment-pipelines/configure-bitbucket-pipelines.html) +To find relevant documentation for your project, use the [search](/search.html). +![search](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/search+page.png) -## 5. Configure checkers +## 6. Configure project -To keep your code clean, we recommend using code checkers. +### Configure project namespace -### Code sniffer +Use your own project namespace. +By default, project code is stored in the `src/Pyz` directory. +You can create your own namespace, such as `src/BestProject`, to keep your code fully separated from the Demo Shop. +This separation simplifies applying Demo Shop updates. -Before running any code sniffer, we recommend updating it to the latest version. When updating, make sure to update `composer.json`: +1. Change the namespace in `composer.json`: ```json -composer update spryker/code-sniffer slevomat/coding-standard --with-dependencies +{ + "autoload": { + "psr-4": { + "BestProject\\": "src/BestProject/" + } + } +} ``` -On the project level, you add your own rules and exclude the default rules. - -- To activate a new rule, check out the full list of rules at [Slevomat Coding Standard](https://github.com/slevomat/coding-standard). -- To disable a rule, update the configuration. The following example excludes the rule that makes annotations for constructors and methods required: +2. Change the namespace configurations in `config/Shared/config_default.php`: -```yaml - - - +```php +$config[KernelConstants::PROJECT_NAMESPACE] = 'BestProject'; +$config[KernelConstants::PROJECT_NAMESPACES] = [ + 'BestProject', + 'Pyz', +]; ``` -### PHPStan - -When using PHPStan, we recommend version 1.2.* or later. These versions help you avoid memory and other issues. - -You can enable PHPStan on project level by enabling rule level 6: - -```yaml -vendor/bin/phpstan analyze -l 6 -c phpstan.neon src/ -``` - -## 6. Configure PhpStorm indexation - -When you start developing a project, you need to reset it quite often. PhpStorm indexing can slow it down. - -To disable cache indexing, in the PhpStorm, right-click the folder and select **Mark Directory As > Excluded**. +3. Extend FE builder paths to include your own namespace following [Extend builder paths (custom namespaces)](/docs/dg/dev/frontend-development/latest/yves/frontend-builder-for-yves.html#extend-builder-paths-custom-namespaces). -It is safe to disable cache indexing for the following files: +More information about [upgradability](/docs/dg/dev/sdks/sdk/customization-strategies-and-upgradability). -- `data/cache` -- `data/tmp` -- `public/(Yves/Zed/Marketlace)/assets` - -## 7. Configure debugging +### Configure the local environment +To configure the local environment, change the following attributes in `deploy.dev.yml`: +- Namespace: this helps to avoid issues when you have two or more projects with the same names. +- Regions. +- Stores. +- Domains for the local environment. +- Domains for the services like RabbitMQ and Jenkins: this helps to keep all project links together. +![Deploy namespace](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/deploy-namespace.png) -Before you start developing, you need to set up and get to know your debugging environment. To learn how to configure debugging, see [Configuring debugging](/docs/dg/dev/set-up-spryker-locally/configure-after-installing/configure-debugging/configure-debugging.html). +For more information about deploy files, see [Deploy file](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file.html). +### Update the `readme.md` file -## 8. Explore Spryker architecture +- Update the project installation description. +- Update the repository link. +- Remove any unused information, like Vagrant installation instructions if DevVM was not used. +- Consider moving the production information further down to make it easier for new developers to understand how to use the project. -To learn about Spryker architecture, different parts of the Client, Shared, Zed, and Yves folders, and their different layers, see the following documents: +## 7. Next steps -- [Conceptual overview](/docs/dg/dev/architecture/conceptual-overview.html): application layers and code structure. -- [Modules and layers](/docs/dg/dev/architecture/modules-and-application-layers.html): layers and how various functionality is encapsulated in modules. -- [Programming concepts](/docs/dg/dev/architecture/programming-concepts.html): Spryker building blocks contained in the application layers. -- [Technology stack](/docs/dg/dev/architecture/technology-stack.html): technologies used. +For advanced project configuration, including managing modules, cleaning up modules, and configuring services, see [Post-Installation Configuration](/docs/dg/dev/post-installation-configuration.html). diff --git a/docs/dg/dev/development-tools.md b/docs/dg/dev/development-tools.md new file mode 100644 index 00000000000..b4856cc5cd1 --- /dev/null +++ b/docs/dg/dev/development-tools.md @@ -0,0 +1,161 @@ +--- +title: Development tools +description: Complete suite of development tools provided by Spryker for debugging, profiling, code quality assurance, and AI-assisted development. +last_updated: December 15, 2025 +template: concept-topic-template +keywords: development tools, debugging, profiling, code quality, static analysis, xdebug, web profiler, phpstan, architecture sniffer, ai assistant +--- + +Spryker provides a comprehensive suite of development tools that cover every aspect of the development lifecycle—from debugging and performance profiling to code quality assurance and AI-assisted development. These integrated tools ensure developers have everything needed to build, maintain, and scale high-quality e-commerce applications efficiently. + +## Why development tools are essential + +Modern e-commerce development demands robust tooling to manage complexity, ensure code quality, and maintain high performance. Quality development tools provide: + +- **Faster debugging**: Identify and fix issues quickly with proper debugging and profiling tools +- **Code quality**: Maintain high standards through automated static analysis and architectural validation +- **Performance optimization**: Profile application performance and identify bottlenecks before they reach production +- **Developer productivity**: Accelerate development with AI-assisted coding and automated quality checks +- **Upgradability**: Ensure your project follows best practices, making upgrades smoother and less risky +- **Team consistency**: Enforce coding standards and architectural patterns across the entire development team + +Without proper development tools, projects accumulate technical debt, suffer from performance issues, and become increasingly difficult to maintain and upgrade. + +## Spryker's complete development toolkit + +Spryker provides an integrated ecosystem of development tools, eliminating the need to search for, evaluate, and configure third-party solutions. All tools are pre-configured to work seamlessly with Spryker's architecture and development workflow. + +### Debugging tools + +**Xdebug integration** + +Spryker includes Xdebug support for interactive debugging and profiling: + +- **Step-through debugging**: Set breakpoints, inspect variables, and trace code execution +- **Performance profiling**: Identify slow functions and performance bottlenecks + +Documentation: +- [Configure Xdebug](/docs/dg/dev/set-up-spryker-locally/configure-after-installing/configure-debugging/configure-debugging.html) +- [Set up XDebug profiling](/docs/dg/dev/set-up-spryker-locally/configure-after-installing/configure-debugging/set-up-xdebug-profiling.html) + +### Performance profiling tools + +**WebProfiler** + +WebProfiler is available for all Spryker application layers: + +- [Web Profiler Widget for Yves](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html) - Storefront profiling +- [Web Profiler for Backend Gateway](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html) - API Gateway profiling +- [Web Profiler for Zed](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html) - Back Office profiling + +### Code quality tools + +Spryker provides a complete suite of code quality tools tailored to e-commerce development and Spryker's architecture: + +**PHPStan - Static analysis** + +PHPStan performs type checking and code analysis to catch bugs before runtime: + +- Type safety validation +- Dead code detection +- Incorrect method calls identification +- Configuration: Pre-configured for Spryker projects at level 6 + +[PHPStan documentation](/docs/dg/dev/sdks/sdk/development-tools/phpstan.html) + +**Code Sniffer - Code style enforcement** + +Ensures consistent code formatting and adherence to coding standards: + +- PSR-12 compliance +- Spryker-specific coding standards +- Automatic code style fixing capabilities +- IDE integration for real-time feedback + +[Code Sniffer documentation](/docs/dg/dev/sdks/sdk/development-tools/code-sniffer.html) + +**Architecture Sniffer - Spryker architecture validation** + +Validates that your code follows Spryker's architectural patterns and conventions: + +- Layer separation enforcement (Yves, Zed, Client, Service) +- Module dependency validation +- Plugin architecture compliance +- Facade pattern adherence + +[Architecture Sniffer documentation](/docs/dg/dev/sdks/sdk/development-tools/architecture-sniffer.html) + +**Project Architecture Sniffer - Project-specific validation** + +Extends Architecture Sniffer with project-level rules and best practices: + +- Project-specific architectural patterns +- Custom business logic validation +- Integration pattern compliance +- Upgradability checks + +[Project Architecture Sniffer documentation](/docs/dg/dev/sdks/sdk/development-tools/project-architecture-sniffer.html) + +**Evaluator - Upgradability and compatibility checks** + +Validates project compatibility with Spryker core and checks upgrade readiness: + +- Core module compatibility validation +- Deprecated feature detection +- Breaking change identification +- Upgrade path recommendations + +[Evaluator tool documentation](/docs/dg/dev/guidelines/keeping-a-project-upgradable/run-the-evaluator-tool.html) + +### AI-assisted development tools + +Spryker embraces AI technology to accelerate development and improve code quality: + +**AI Assistant** + +AI-powered development assistance for Spryker projects: + +- Code generation for Spryker modules and patterns +- Best practice recommendations +- Documentation lookup and integration assistance +- Common task automation + +[AI Assistant documentation](/docs/dg/dev/ai/ai-assistants/ai-assistants.html) + +**AI Dev Tool** + +Advanced AI development capabilities integrated into the development workflow: + +- Intelligent code suggestions +- Architectural pattern guidance +- Automated refactoring recommendations +- Context-aware documentation + +[AI Dev Tool documentation](/docs/dg/dev/ai/ai-dev/ai-dev-overview.html) + +## Integrated development workflow + +All Spryker development tools work together seamlessly: + +1. **Write code** with AI Assistant guidance +2. **Debug issues** using Xdebug integration +3. **Profile performance** with WebProfiler +4. **Validate quality** with Code Sniffer, PHPStan, and Architecture Sniffers +5. **Check upgradability** with Evaluator +6. **Run in CI** with automated validation pipelines + +This integrated approach ensures consistent quality across the entire development process. + +## Best practices + +To maximize the value of development tools: + +1. **Run tools locally**: Catch issues before pushing to CI +2. **Configure IDE integration**: Get real-time feedback while coding +3. **Use WebProfiler proactively**: Profile performance during development, not just when issues arise +4. **Review Evaluator output regularly**: Stay informed about upgrade compatibility +5. **Leverage AI tools**: Speed up development with AI-assisted code generation +6. **Enforce in CI**: Make quality checks mandatory in pull request pipelines +7. **Update regularly**: Keep development tools up-to-date to benefit from new features and improvements + +Spryker provides everything developers need to build, maintain, and scale world-class e-commerce applications—no additional tooling required. \ No newline at end of file diff --git a/docs/dg/dev/frontend-development/202602.0/create-angular-modules.md b/docs/dg/dev/frontend-development/202602.0/create-angular-modules.md new file mode 100644 index 00000000000..7608cb731c1 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/create-angular-modules.md @@ -0,0 +1,98 @@ +--- +title: Create Angular modules +last_updated: Jan 17, 2023 +description: This document shows how to create a new Angular module with the application +template: howto-guide-template +redirect_from: + - /docs/marketplace/dev/howtos/how-to-create-a-new-module-with-application.html + - /docs/scos/dev/tutorials-and-howtos/howtos/howto-create-an-angular-module-with-application.html + +--- + +This document describes how to create an Angular module with the application. + +Reasons to create a module: + +- Create Angular and web components on the project level. +- Extend an existing core Angular module on the project level. +- Override an existing core Angular module on the project level. + +## 1) Create an Angular module scaffolding structure + +Based on [Project structure document, Module structure section](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/marketplace-frontend-project-and-module-structure.html#module-structure), create the scaffolding structure for the module. +The module can contain its own set of Twig web components. + +## 2) Register an Angular module + +To register components, you need to create a special Angular module. `components.module.ts` contains the list of all Angular components exposed as web components. + +1. Register web components: + +```ts +// Registration +import { NgModule } from '@angular/core'; +import { WebComponentsModule } from '@spryker/web-components'; + +import { SomeComponentComponent } from './some-component/some-component.component'; +import { SomeComponentModule } from './some-component/some-component.module'; + +@NgModule({ + imports: [ + WebComponentsModule.withComponents([SomeComponentComponent]), + SomeComponentModule, + ], + providers: [], +}) +export class ComponentsModule {} +``` + +2. Register `ComponentsModule` to the entire modules list inside `entry.ts`: + +```ts +import { registerNgModule } from '@mp/zed-ui'; + +import { ComponentsModule } from './app/components.module'; + +registerNgModule(ComponentsModule); +``` + +By registering and rebuilding this Angular module, a new JS bundle is created, which needs to be manually added to the Twig page in order to load web components. + +{% info_block warningBox %} + +Angular component names are prefixed with `web-` when registered as web components. Example: + +```ts +import { Component } from '@angular/core'; + +@Component({ + selector: 'mp-some-component', + ..., +}) +export class SomeComponentComponent {} + +// After web component registration selector looks like if we use this component as web inside a twig file: +'web-mp-some-component' +``` + +```twig +{%- raw -%} +{% extends '@ZedUi/Layout/merchant-layout-main.twig' %} + +{% block headTitle %} + {{ 'Module title' | trans }} +{% endblock %} + +{% block content %} + +{% block content %} + +{% block footerJs %} + {{ view.importJsBundle('module-name', importConfig) }} + + {{ parent() }} +{% endblock %} +{% endraw %} +``` + +{% endinfo_block %} diff --git a/docs/dg/dev/frontend-development/202512.0/define-twig-tag.md b/docs/dg/dev/frontend-development/202602.0/define-twig-tag.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/define-twig-tag.md rename to docs/dg/dev/frontend-development/202602.0/define-twig-tag.md diff --git a/docs/dg/dev/frontend-development/202512.0/frontend-development.md b/docs/dg/dev/frontend-development/202602.0/frontend-development.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/frontend-development.md rename to docs/dg/dev/frontend-development/202602.0/frontend-development.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/angular-components.md b/docs/dg/dev/frontend-development/202602.0/marketplace/angular-components.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/marketplace/angular-components.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/angular-components.md index 59509c03793..d0c05f666d7 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/angular-components.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/angular-components.md @@ -47,35 +47,35 @@ To define output, you have to use `@Output` angular decorator, which marks a cla ### Hooks for the component -`constructor` +`constructor` It is invoked when Angular creates a component or directive by calling new on the class. -`ngOnChanges` +`ngOnChanges` Every time an input property of the component is changed, this method is called. -`ngOnInit` +`ngOnInit` Invoked when the given component has been initialized. This hook is only called once after the first `ngOnChanges`. -`ngDoCheck` +`ngDoCheck` Invoked when the change detector of the given component is invoked. It lets you implement your own change detection algorithm for the given component. -`ngOnDestroy` +`ngOnDestroy` This method is invoked just before Angular destroys the component. Use this hook to unsubscribe observables and detach event handlers to avoid memory leaks. ### Hooks for the component's children -`ngAfterContentInit` +`ngAfterContentInit` Invoked after Angular performs any content projection into the component's view (see the previous lecture on Content Projection for more info). To get more info about content query, see the official documentation [ContentChildren](https://angular.io/api/core/ContentChildren), [ContentChild](https://angular.io/api/core/ContentChild). -`ngAfterContentChecked` +`ngAfterContentChecked` Invoked each time the content of the given component has been checked by Angular's change detection mechanism. -`ngAfterViewInit` +`ngAfterViewInit` Invoked when the component's view has been fully initialized. To get more info about the content query see official documentation [ViewChildren](https://angular.io/api/core/ViewChildren), [ViewChild](https://angular.io/api/core/ViewChild). -`ngAfterViewChecked` +`ngAfterViewChecked` Invoked each time the view of the given component has been checked by Angular's change detection mechanism. ## Component metadata @@ -86,25 +86,25 @@ In addition to containing or pointing to the template, the `@Component` metadata ### Main properties -`selector` +`selector` It is the CSS selector that identifies the component in a template. It corresponds to the HTML tag that is included in the parent component. You can create your own HTML tag. However, the same has to be included in the parent component. -`template` +`template` It is an inline-defined template for the view. The template defines some markup. The markup could typically include some headings or paragraphs that are displayed in the UI. -`templateUrl` +`templateUrl` It is the URL for the external file containing the template for the view. -`styles` +`styles` These are inline-defined styles to be applied to the component's view. -`styleUrls` +`styleUrls` List of URLs to the stylesheets to be applied to the component's view. -`providers` +`providers` It is an array where certain services for the component can be registered. -`animations` +`animations` Animations for the components can be listed. You can find a full list of component metadata properties in the [official documentation](https://angular.io/api/core/Component). diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/angular-services.md b/docs/dg/dev/frontend-development/202602.0/marketplace/angular-services.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/angular-services.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/angular-services.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/building-the-merchant-portal-frontend.md b/docs/dg/dev/frontend-development/202602.0/marketplace/building-the-merchant-portal-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/building-the-merchant-portal-frontend.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/building-the-merchant-portal-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/extending-the-merchant-portal-frontend.md b/docs/dg/dev/frontend-development/202602.0/marketplace/extending-the-merchant-portal-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/extending-the-merchant-portal-frontend.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/extending-the-merchant-portal-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend-project-and-module-structure.md b/docs/dg/dev/frontend-development/202602.0/marketplace/marketplace-frontend-project-and-module-structure.md similarity index 95% rename from docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend-project-and-module-structure.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/marketplace-frontend-project-and-module-structure.md index b7c348b8b68..b77bf502606 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend-project-and-module-structure.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/marketplace-frontend-project-and-module-structure.md @@ -4,6 +4,7 @@ description: This document provides details about the structure of the frontend template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend-project-and-module-structure.html - /docs/marketplace/dev/front-end/202212.0/project-structure.html - /docs/scos/dev/front-end-development/202204.0/marketplace/project-structure.html - /docs/scos/dev/front-end-development/202404.0/marketplace/project-structure.html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend.md b/docs/dg/dev/frontend-development/202602.0/marketplace/marketplace-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/marketplace-frontend.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/marketplace-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/set-up-the-merchant-portal.md b/docs/dg/dev/frontend-development/202602.0/marketplace/set-up-the-merchant-portal.md similarity index 95% rename from docs/dg/dev/frontend-development/202512.0/marketplace/set-up-the-merchant-portal.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/set-up-the-merchant-portal.md index ad92269daf2..f2958cd75ae 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/set-up-the-merchant-portal.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/set-up-the-merchant-portal.md @@ -19,7 +19,7 @@ This document provides details about how to set up the Spryker Merchant Portal. To start using Merchant Portal, install Spryker Demo Shop: -1. For the Marketplace project installation, use [this repository](https://github.com/spryker-shop/suite). +1. For the Marketplace project installation, use [this repository](https://github.com/spryker-shop/suite). 2. [Install the project](/docs/dg/dev/set-up-spryker-locally/set-up-spryker-locally.html). @@ -31,7 +31,7 @@ To build Merchant Portal, install or update the following tools: ## Overview -The main environmental differences between the existing frontends (Yves, Zed) and Merchant Portal are the following: +The main environmental differences between the existing frontends (Yves, Zed) and Merchant Portal are the following: - Minimum Node.js version is v18. - Minimum npm version is v9. diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-autocomplete.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-autocomplete.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-autocomplete.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-autocomplete.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-button-action.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-button-action.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-button-action.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-button-action.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-chip.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-chip.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-chip.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-chip.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-date.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-date.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-date.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-date.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-dynamic.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-dynamic.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-dynamic.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-dynamic.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md index e9b45654ce6..a0d3d55a99f 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.md @@ -4,6 +4,7 @@ description: This document provides details about the Table Column Type extensio template: concept-topic-template last_updated: Jan 11, 2024 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-column-types/ - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-column-type-extension/table-column-type-extension.html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-image.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-image.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-image.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-image.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-input.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-input.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-input.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-input.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-list.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-list.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-list.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-list.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-select.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-select.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-select.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-select.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-text.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-text.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-column-type-extension/table-column-type-text.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-column-type-extension/table-column-type-text.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-configuration.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-configuration.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-configuration.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-configuration.md index 32567f475da..f1d664c311d 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-configuration.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-configuration.md @@ -4,6 +4,7 @@ description: This document provides details about the table configuration. template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: +- /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-configuration.html - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-configuration.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-configuration.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-configuration.html diff --git a/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-design.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-design.md new file mode 100644 index 00000000000..a1a07678855 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-design.md @@ -0,0 +1,289 @@ +--- +title: Table Design +description: This document describes the Table Design in the Components Library. +template: concept-topic-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/marketplace/dev/front-end/202212.0/table-design/ + - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-design.html + - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-design.html + +--- + +This document describes the Table Design in the Components Library. + +## Overview + +A *Table Component* is an arrangement of data in rows and columns, or possibly in a more complex structure (with sorting, filtering, pagination, row selections, infinite scrolling). +It is an essential building block of a user interface. + +A basic Table Component is `` where `config` is: +- `dataSource`—the Datasource configuration from which the data is taken. +- `columns`—an array of columns configuration. + +```ts +const config: TableConfig = { + dataSource: { + // transforms input data via Data Transformer service + type: DatasourceType, + transform?: DataTransformerConfig, + }, + columns: [ + { id: 'col1', title: 'Column #1' }, + { id: 'col2', title: 'Column #2' }, + { id: 'col3', title: 'Column #3' }, + ], +}; +``` + +## Architecture + +Check out the table architecture diagram for better understanding: + +![Table Architecture](https://spryker.s3.eu-central-1.amazonaws.com/docs/Marketplace/dev+guides/Front-end/table-architecture.svg) + +### Configuration + +A Table Component is configured via [Table Configuration](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-configuration.html) that sets up how the table should behave and look like. + +### Datasources + +To render data, the Table must receive it via [Datasources](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/ui-components-library/datasources/datasources.html) +that are registered by the user and then configured using the Table Configuration. + +### Features + +Every other piece of functionality is extracted into the [Table Feature](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-feature-extension/table-feature-extension.html): + +- A *Table Feature* is an Angular Component that encapsulates a specific extension of the Core Table. +- Core Table contains specific placeholders in its view that Table Feature may target to render its piece of UI. +- Most of the common table functionality already exists as the Table Feature and may be used in the project. + +To use a Feature component, register an Angular Module that implements the `ModuleWithFeature` interface in the Root Module +using `TableModule.withFeatures()` under the key that serves as its configuration key: + +```ts +@NgModule({ + imports: [ + TableModule.withFeatures({ + pagination: () => import('@spryker/table.feature.pagination').then( + (m) => m.TablePaginationFeatureModule, + ), + }), + ], +}) +export class AppModule {} +``` + +### Columns + +Columns in a Table are defined by the [Column Type](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-column-type-extension/table-column-type-extension.html) and rendered within the columns (text, image, link). +A new Column Type may be created and registered to the table. + +A Column component must implement `TableColumn` interface with the defined config and then be registered to the Root Module via `TableModule.withColumnComponents()`: + +```ts +@NgModule({ + imports: [ + TableModule.withColumnComponents({ + text: TableColumnTextComponent, + }), + + // Table Column Type Modules + TableColumnTextModule, + ], +}) +export class AppModule {} +``` + +### Filters + +A Table Component does not contain any filters a table usually has (filtering, searching). +The Core Table Component has just a view of the columns and data and has built-in sorting. + +To use [Filter components](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-filter-extension/table-filter-extension.html), the Table Module must implement a specific interface (TableConfig) and then be registered to the Root Module via `TableModule.withFilterComponents()`: + +```ts +@NgModule({ + imports: [ + TableFiltersFeatureModule.withFilterComponents({ + select: TableFilterSelectComponent, + }), + + // Table Filter Modules + TableFilterSelectModule, + ], +}) +export class AppModule {} +``` + +### Actions + +There is a way to trigger some [Actions](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/ui-components-library/actions/ui-components-library-actions.html) while user interacts with the Table. + +A few common Table Features that can trigger actions are available in the UI library: + +- [Row actions](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-feature-extension/table-feature-row-actions.html)—renders a dropdown menu that contains actions applicable to the table row and on click triggers an Action which must be registered. +- [Batch actions](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-feature-extension/table-feature-batch-actions.html)—allows triggering batch/multiple actions from rows. + +## Interfaces + +The following interfaces are intended for the Table configuration: + +```ts +export interface TableColumn extends Partial { + id: string; + title: string; + displayKey?: string; + width?: string; + multiRenderMode?: boolean; + multiRenderModeLimit?: number; + emptyValue?: string; + sortable?: boolean; + searchable?: boolean; +} + +export interface TableColumnTypeDef { + type?: TableColumnType; + typeOptions?: TableColumnTypeOptions; + typeChildren?: TableColumnTypeDef[]; + typeOptionsMappings?: TableColumnTypeOptionsMappings; +} + +export interface TableColumnTypeOptions { + [key: string]: any; +} + +interface TableColumnTypeOptionsMappings { + // Map of option values to new values + [optionName: string]: Record; +} + +export interface TableColumnTypeRegistry { + // Key is type string—value is type config class + 'layout-flat': LayoutFlatConfig; +} + +export type TableColumnType = keyof TableColumnTypeRegistry; + +export interface TableHeaderContext { + config: TableColumn; + i: number; +} + +export interface TableColumnContext extends AnyContext { + value: TableDataValue; + displayValue?: unknown; + row: TableDataRow; + config: TableColumn; + i: number; + j: number; +} + +export interface TableColumnTplContext extends TableColumnContext { + $implicit: TableColumnContext['value']; +} + +export interface TableColumnComponent { + config?: C; + context?: TableColumnContext; +} + +export type TableColumnComponentDeclaration = { + [P in keyof TableColumnTypeRegistry]?: Type>; +}; + +export type TableColumns = TableColumn[]; + +export type TableDataValue = unknown | unknown[]; + +export type TableDataRow = Record; + +export interface TableData { + data: T[]; + total: number; + page: number; + pageSize: number; +} + +export interface TableConfig { + dataSource: DatasourceConfig; + columnsUrl?: string; + columns?: TableColumns; + + // Features may expect it's config under it's namespace + [featureName: string]: TableFeatureConfig | unknown; +} + +export type ColumnsTransformer = ( + cols: TableColumns, +) => Observable; + +export type TableDataConfig = Record; + +export interface SortingCriteria { + sortBy?: string; + sortDirection?: 'asc' | 'desc'; +} + +export type TableEvents = Record void) | undefined>; + +export interface TableComponent { + tableId?: string; + config?: TableConfig; + events: TableEvents; + config$: Observable; + columns$: Observable; + data$: Observable; + isLoading$: Observable; + tableId$: Observable; + features$: Observable[]>; + tableElementRef: ElementRef; + injector: Injector; + updateRowClasses(rowIdx: string, classes: Record): void; + setRowClasses(rowIdx: string, classes: Record): void; + on(feature: string, eventName?: string): Observable; + findFeatureByName(name: string): Observable; + findFeatureByType( + type: Type, + ): Observable; +} + +export enum TableFeatureLocation { + top = 'top', + beforeTable = 'before-table', + header = 'header', + headerExt = 'header-ext', + beforeRows = 'before-rows', + beforeColsHeader = 'before-cols-header', + beforeCols = 'before-cols', + cell = 'cell', + afterCols = 'after-cols', + afterColsHeader = 'after-cols-header', + afterRows = 'after-rows', + afterTable = 'after-table', + bottom = 'bottom', + hidden = 'hidden', +} + +export interface TableRowActionRegistry { + // Key is action string—value is action options type +} + +export type TableRowAction = keyof TableRowActionRegistry; + +export interface TableRowActionHandler { + handleAction(actionEvent: TableActionTriggeredEvent): void; +} + +export interface TableRowActionsDeclaration { + [type: string]: TableRowActionHandler; +} + +export interface TableRowClickEvent { + row: TableDataRow; + event: Event; +} +``` diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md similarity index 94% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md index 156c5704ee7..65e53cf4d05 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.md @@ -4,6 +4,7 @@ description: This document provides details about the Table Feature Batch Action template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-features/.html - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-feature-extension/table-feature-batch-actions.html @@ -43,10 +44,10 @@ Check out an example usage of the Table Feature Batch Actions in the `@spryker/t Component configuration: -- `enabled`—enables the feature via the config. -- `noActionsMessage`—error message text. +- `enabled`—enables the feature via the config. +- `noActionsMessage`—error message text. - `actions`—an array with actions that are displayed in the top bar, and their type of the registered [action](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/ui-components-library/actions/ui-components-library-actions.html). -- `rowIdPath`—gets a row `id` via the column `id` (in the following example, `Sku` column). +- `rowIdPath`—gets a row `id` via the column `id` (in the following example, `Sku` column). - `availableActionsPath`—path to an array with available action IDs in the top bar (supports nested objects using dot notation for ex. `prop.nestedProp`). ```html @@ -63,10 +64,10 @@ Component configuration: noActionsMessage: 'No available actions for selected rows', rowIdPath: 'sku', availableActionsPath: 'path.to.actions', - }, + }, itemSelection: { enabled: true, - }, + }, }" > diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-editable.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-editable.md similarity index 93% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-editable.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-editable.md index c80dfdc0c83..de956dbe633 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-editable.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-editable.md @@ -41,9 +41,9 @@ Check out an example usage of the Table Feature Editable in the `@spryker/table` Component configuration: -- `columns`—an array with the config for every editable column. -- `create`—an object with the config for the added rows. -- `update`—an object with the config for the existing rows. +- `columns`—an array with the config for every editable column. +- `create`—an object with the config for the added rows. +- `update`—an object with the config for the existing rows. - `disableRowKey`—disables the row that contains the mentioned column `id` (see the following example). ```html @@ -56,7 +56,7 @@ Component configuration: create: { ... }, update: { ... }, disableRowKey: 'col', - }, + }, }" > @@ -64,24 +64,24 @@ Component configuration: Take a closer look at all the options available. -- `columns`—only required properties are listed; the entire interface can be found in [Table Design](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-design.html#interfaces) document: - - `id`—a cell `id`. - - `type`—a cell `type`. - - `typeOptions`–to learn more about the column types available, see [Column Type](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-column-type-extension/table-column-type-extension.html): - - `value`—sets the default value to the newly added row's cell. +- `columns`—only required properties are listed; the entire interface can be found in [Table Design](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-design.html#interfaces) document: + - `id`—a cell `id`. + - `type`—a cell `type`. + - `typeOptions`–to learn more about the column types available, see [Column Type](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/table-design/table-column-type-extension/table-column-type-extension.html): + - `value`—sets the default value to the newly added row's cell. -- `create`: +- `create`: - `addButon`—this object holds the `Add button` configuration such as `title`, `icon`, and `size`. - `cancelButon`—an object with the `Cancel button` configuration like `title` and `icon`. - - `disableForCols`—an array with the cell `ids` to be disabled. - - `formInputName`—creates an `input[type=hidden]` element with the specific name. - - `initialData`—initials data for cells and objects with errors for rows and cells. + - `disableForCols`—an array with the cell `ids` to be disabled. + - `formInputName`—creates an `input[type=hidden]` element with the specific name. + - `initialData`—initials data for cells and objects with errors for rows and cells. - `update`: - - `url`—a request url. - - `saveButon`—an object with the `Save button` configuration such as `title` and `icon` (displayed in the `update` popup). - - `cancelButon`—an object with the `Cancel button` configuration such as `title` and `icon` (displayed in the `update` popup). - - `disableForCols`—an array with the cell `ids` to be disabled. + - `url`—a request url. + - `saveButon`—an object with the `Save button` configuration such as `title` and `icon` (displayed in the `update` popup). + - `cancelButon`—an object with the `Cancel button` configuration such as `title` and `icon` (displayed in the `update` popup). + - `disableForCols`—an array with the cell `ids` to be disabled. ```html @@ -156,7 +156,7 @@ declare module '@spryker/table' { editable: () => import('@spryker/table.feature.editable').then( (m) => m.TableEditableFeatureModule, - ), + ), }), ], }) diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-extension.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-extension.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-extension.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-extension.md index f5bed7fde55..e758bcbd1fc 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-extension.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-extension.md @@ -4,6 +4,7 @@ last_updated: Jun 07, 2021 description: This document provides details about the Table Feature extension in the Components Library. template: concept-topic-template redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-extension.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-features/ - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-feature-extension/table-feature-extension.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-feature-extension/table-feature-extension.html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md similarity index 95% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md index 863b68748d3..660f7b3d88a 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-pagination.md @@ -42,8 +42,8 @@ Check out an example usage of the Table Feature Pagination in the `@spryker/tabl Component configuration: -- `enabled`—enables the feature via config. -- `sizes`—an array of numbers of table rows that needs to be displayed per page. +- `enabled`—enables the feature via config. +- `sizes`—an array of numbers of table rows that needs to be displayed per page. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md similarity index 92% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md index 0f2be251bf0..3c6896c6a47 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.md @@ -4,6 +4,7 @@ description: This document provides details about the Table Feature Row Actions template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-features/table-feature-row-actions.html - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-feature-extension/table-feature-row-actions.html @@ -42,11 +43,11 @@ Check out an example usage of the Table Feature Row Actions in the `@spryker/tab Component configuration: -- `enabled`—enables the feature via config. -- `actions`—an array with actions that are displayed in the drop down menu and their type of registered [action](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/ui-components-library/actions/ui-components-library-actions.html). +- `enabled`—enables the feature via config. +- `actions`—an array with actions that are displayed in the drop down menu and their type of registered [action](/docs/dg/dev/frontend-development/{{page.version}}/marketplace/ui-components-library/actions/ui-components-library-actions.html). - `click`—indicates which action is used for clicking the table row by its `id`. -- `rowIdPath`—is used for the `rowId` action context. -- `availableActionsPath`—path to an array with the available action IDs in the table data row (supports nested objects using dot notation for ex. `prop.nestedProp`). +- `rowIdPath`—is used for the `rowId` action context. +- `availableActionsPath`—path to an array with the available action IDs in the table data row (supports nested objects using dot notation for ex. `prop.nestedProp`). ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-search.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-search.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-search.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-search.md index 4a3972650f8..85bc46ed161 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-search.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-search.md @@ -54,7 +54,7 @@ Component configuration: enabled: true, placeholder: 'Search', forceAlwaysVisible: false, - }, + }, }" > diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md index bef29b50264..ce99c631e69 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-selectable.md @@ -53,7 +53,7 @@ Component configuration: columns: [ ... ], itemSelection: { enabled: true, - }, + }, }" > diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-settings.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-settings.md similarity index 94% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-settings.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-settings.md index 69e4138caff..35bdace6e48 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-settings.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-settings.md @@ -41,8 +41,8 @@ Check out an example usage of the Table Feature Settings in the `@spryker/table` Component configuration: -- `enabled`—enables the feature via config. -- `tableId`—`id` of the table that syncs with the table toolbar settings (also can be assigned to the table via HTML). +- `enabled`—enables the feature via config. +- `tableId`—`id` of the table that syncs with the table toolbar settings (also can be assigned to the table via HTML). ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md index b603653e6f3..6aafee1bda8 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-sync-state.md @@ -42,7 +42,7 @@ Check out an example usage of the Table Feature Sync State in the `@spryker/tabl Component configuration: - `enabled`—enables the feature via config. -- `tableId`—an `id` of the table that syncs the state of the table with the browser URL (also can be assigned to the table via HTML). +- `tableId`—an `id` of the table that syncs the state of the table with the browser URL (also can be assigned to the table via HTML). ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-title.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-title.md similarity index 95% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-title.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-title.md index ca10bedcfd8..b348cc3b810 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-title.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-title.md @@ -41,8 +41,8 @@ Check out an example usage of the Table Feature Title in the `@spryker/table` co Component configuration: -- `enabled`—enables the feature via config. -- `title`—a table title text. +- `enabled`—enables the feature via config. +- `title`—a table title text. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-total.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-total.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-total.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-total.md index 2031c347635..aafe3a11a6c 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-feature-extension/table-feature-total.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-feature-extension/table-feature-total.md @@ -43,7 +43,7 @@ Check out an example usage of the Table Feature Total in the `@spryker/table` co Component configuration: -- `enabled`—enables the feature via config. +- `enabled`—enables the feature via config. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md similarity index 93% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md index 8bdee06b5c3..8c3aed37dbf 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-date-range.md @@ -27,8 +27,8 @@ Check out an example usage of the Table Filter Date Range in the `@spryker/table Component configuration: -- `enabled`—enables the filter via config. -- `items`—an array with config for each filter date-range. +- `enabled`—enables the filter via config. +- `items`—an array with config for each filter date-range. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-extension.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-extension.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-extension.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-extension.md index 0dabcb768f6..e845214477f 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-extension.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-extension.md @@ -4,6 +4,7 @@ last_updated: Oct 21, 2022 description: This document provides details about the Table Filter extension in the Сomponents Library. template: concept-topic-template redirect_from: + - /docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-extension.html - /docs/marketplace/dev/front-end/202212.0/table-design/table-filters/ - /docs/scos/dev/front-end-development/202204.0/marketplace/table-design/table-filter-extension/table-filter-extension.html - /docs/scos/dev/front-end-development/202404.0/marketplace/table-design/table-filter-extension/table-filter-extension.html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-select.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-select.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-select.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-select.md index 2be26be96ab..4c071bbaad8 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-select.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-select.md @@ -28,8 +28,8 @@ Check out an example usage of the Table Filter Select in the `@spryker/table` co Component configuration: -- `enabled`—enables the filter via config. -- `items`—an array with the configuration for each filter select. +- `enabled`—enables the filter via config. +- `items`—an array with the configuration for each filter select. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md similarity index 95% rename from docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md index 0ed81cc4e9b..58b28ef9010 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/table-design/table-filter-extension/table-filter-tree-select.md @@ -26,8 +26,8 @@ Check out an example usage of the Table Filter Tree Select in the `@spryker/tabl Component configuration: -- `enabled`—enables the filter via config. -- `items`—an array with config for each filter tree-select. +- `enabled`—enables the filter via config. +- `items`—an array with config for each filter tree-select. ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-close-drawer.md b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-close-drawer.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-close-drawer.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-close-drawer.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-confirmation.md b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-confirmation.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-confirmation.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-confirmation.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-drawer.md b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-drawer.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-drawer.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-drawer.md diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-http.md b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-http.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-http.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-http.md index 608a9b99cff..a1fc9ec44ce 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/actions/actions-http.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/actions/actions-http.md @@ -41,9 +41,9 @@ Check out an example usage of the Actions HTTP. Service configuration: -- `type`—an action type. -- `url`—an action request URL. -- `method`—an action request method (`GET` by default). +- `type`—an action type. +- `url`—an action request URL. +- `method`—an action request method (`GET` by default). ```html diff --git a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md rename to docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md index 6ef0bc837ff..0c92ddff928 100644 --- a/docs/dg/dev/frontend-development/202512.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md +++ b/docs/dg/dev/frontend-development/202602.0/marketplace/ui-components-library/data-transformers/data-transformer-collate/collate-data-transformer-data-configurators/collate-data-transformer-data-configurators.md @@ -25,7 +25,7 @@ Data Transformer Data Configurators are used in the Datasource service. ` element, but this is configurable to make the component reusable in other contexts—for example, inside a cart entry component. The product title component relies on a controller to get the context and associated product data. The product title `name` is mapped from the product data. +2. `ProductController` uses finds out the relevant *context* for the component and resolves the product qualifier (SKU) in order to make the right request. Whenever the product data is resolved, an update to the DOM is requested. This is actually done in `AsyncStateController`, which is left out on this diagram. The `ProductController` controller uses `ProductService` to resolve the product data. + `ProductService` is a business service that controls the application state for the product. It makes sure that multiple requests for the same product do not result in multiple requests to the backend. `ProductService` delegates the actual loading of the data to `ProductAdapter`. +3. `ProductAdapter` integrates with the backend, by creating an HTTP request. The `ProductAdapter` knows the backend endpoint and it's contract so that it can create the right request. The `ProductAdapter` delegates actual HTTP requests to the `HttpService`. + When an alternative backend is integrated, the `ProductAdapter` can be replaced. The adapter converts the API data model to the client-side model in case of a mismatch. This is done by using normalizers. +4. `HttpService` is a small wrapper that is used to provide additional features such as support for interceptors. + +## Updating data in the DOM + +While observables and RxJS operators provide a great setup for an in-memory reactive system, it doesn't synchronize this to the UI automatically. Each JavaScript framework comes with its own concept and techniques for updating the UI. The method of choice contributes significantly to the performance and user experience of the application. + +Oryx has a standardized library of web components and uses [Lit](https://lit.dev) to develop those components. Lit can update only the mutable parts of the components, and maintains the static parts unchanged. This results in a highly efficient rendering performance. + +Oryx offers the `@asyncState` decorator for Lit components, which simplifies the use of reactive streams and reduces code complexity. However, if you are integrating Oryx into a different web framework, use the reactive patterns of that particular framework. + +## Next steps + +[Reactive components](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/reactive-components.html) diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/oryx-integration-of-backend-apis.md b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/oryx-integration-of-backend-apis.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/oryx-integration-of-backend-apis.md rename to docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/oryx-integration-of-backend-apis.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactive-components.md b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactive-components.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactive-components.md rename to docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactive-components.md index 9a121de6168..45c382931dd 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactive-components.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactive-components.md @@ -4,6 +4,7 @@ description: Reactive components are built with Lit template: concept-topic-template last_updated: Jul 11, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactive-components.html - /docs/scos/dev/front-end-development/202404.0/oryx/reactivity/reactive-components.html - /docs/scos/dev/front-end-development/202404.0/oryx/architecture/reactivity/reactive-components.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactivity.md b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactivity.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactivity.md rename to docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactivity.md index 41dd61e717b..32a1070850e 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactivity.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/reactivity.md @@ -4,6 +4,7 @@ description: Reactivity enables real-time updates template: concept-topic-template last_updated: Apr 3, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/reactivity.html - /docs/scos/dev/front-end-development/202404.0/oryx/reactivity/reactivity.html - /docs/scos/dev/front-end-development/202404.0/oryx/architecture/reactivity/reactivity.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/signals.md b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/signals.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/signals.md rename to docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/signals.md index d01b7dd50ca..388cab69516 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/signals.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/architecture/reactivity/signals.md @@ -4,6 +4,7 @@ description: Signals are reactivity API for components in Oryx. template: concept-topic-template last_updated: Jul 11, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/architecture/reactivity/signals.html - /docs/scos/dev/front-end-development/202404.0/oryx/reactivity/signals.html - /docs/scos/dev/front-end-development/202404.0/oryx/architecture/reactivity/signals.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-environment.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-environment.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-environment.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-environment.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-feature.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-feature.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-feature.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-feature.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md index e45bce2935d..a545551df9c 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.md @@ -4,6 +4,7 @@ description: Orchestration of the Oryx Application template: concept-topic-template last_updated: Oct 24, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.html - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-application-orchestration/oryx-application-orchestration.html - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-plugins.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-plugins.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application-plugins.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application-plugins.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-application-orchestration/oryx-application.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-application-orchestration/oryx-application.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-feature-sets.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-feature-sets.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-feature-sets.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-feature-sets.md index 8e5755959ad..b760c0ce39a 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-feature-sets.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-feature-sets.md @@ -4,6 +4,7 @@ description: Feature sets are collections of standard features last_updated: May 24, 2023 template: concept-topic-template redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/building-applications/oryx-feature-sets.html - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-feature-sets.html - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/oryx-feature-sets.html diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-presets.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-presets.md new file mode 100644 index 00000000000..ab3bfc84b56 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/oryx-presets.md @@ -0,0 +1,100 @@ +--- +title: "Oryx: Presets" +description: Presets are used to install predefined applications +template: concept-topic-template +last_updated: Apr 4, 2023 +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-presets.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/oryx-presets.html + +--- + + +The [presets package](https://www.npmjs.com/package/@spryker-oryx/presets) contains standard feature sets and resources that are used to create sample applications without writing [boilerplate](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/oryx-boilerplate.html). Presets might be too opinionated to use for a production application, but they let you get started quickly. + +Presets are typically used to demonstrate or try out Oryx applications. In production applications, the boilerplate is set up in a more optimized way, by leaving out the features that are not used. + +## Dependencies + +Presets are provided in a separate [npm package](https://www.npmjs.com/package/@spryker-oryx/oryx-presets.html). + +The standard boilerplate uses the presets as the single package to install Oryx applications. To simplify the installation, the preset application contains dependencies on *all* [Oryx npm packages](https://www.npmjs.com/org/spryker-oryx). Because a production application is unlikely to use all the packages, it makes sense to leave out the unneeded ones. + +## Feature sets + +A feature set contains a group of features that can be added with a single reference. A good example of using a feature set is provided in the boilerplate code: + +```ts +import { appBuilder } from "@spryker-oryx/core"; +import { storefrontFeatures } from "@spryker-oryx/presets/storefront"; + +export const app = appBuilder().withFeature(storefrontFeatures).create(); +``` + +The `storefrontFeatures` feature set contains a list of features that exposes all the available storefront features: + +```ts +export const storefrontFeatures: AppFeature[] = [ + productFeature, + cartFeature, + checkoutFeature, + userFeature, + ... +``` + +Feature sets also contain static experience data. Experience data includes the structure and layout of the components of an application, such as pages and sections. By utilizing the static experience data provided by the presets, you don't need to set up any boilerplate code. Moreover, we avoid hardcoded page structures which enables personalized experiences. + +For more information about feature sets, see [Feature sets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-feature-sets.html). + +## Themes + +A *theme* represents the global visual appearance of an application, including typography, colors, and other specific design elements, such as the color of a form field's placeholder. Themes are built with [design tokens](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-design-tokens.html), which are configurable values that are used in CSS properties. Configuring these design tokens lets you customize a theme and align the application and its components with your brand identity or specific design requirements. + +To apply a theme to your Oryx application, you can import it from the preset package and use it during the application setup: + +```ts +import { appBuilder } from "@spryker-oryx/core"; +import { storefrontFeatures } from "@spryker-oryx/presets/storefront"; +import { storefrontTheme } from '@spryker-oryx/themes'; + +export const app = appBuilder() + .withFeature(storefrontFeatures) + .withTheme(storefrontTheme) + .create(); +``` + +Themes help maintain a consistent and coherent visual experience throughout your application. They provide a centralized way to manage and apply design tokens, ensuring a unified look and feel across components and screens. + +## Resources + +Most web applications use a `/public` folder to host static resources. This requires a folder in the boilerplate code or a process to generate it, which is not easy to upgrade over time. + +Resources are an alternative approach, which allows for lazy loading of web resources into Oryx applications. The most common example of a resource is an image or icon. + +Resources are lazily loaded, so that the runtime performance is not affected when a lot of resources are used. + +You can add resources to your application with the `appBuilder()` API: + +```ts +import { appBuilder } from '@spryker-oryx/core'; + +const app = appBuilder() + .withFeatures(...), + .withResources(myResources); + .create(); +``` + +As an application developer, you might want to create your own resources: + +```ts +import { ResourceGraphic } from '@spryker-oryx/experience'; + +const myResources: Resources = { + logo: { + source: () => import('my-logo').then((m) => m.default), + }, + otherImg: { + source: () => import('my-other-img').then((m) => m.default), + }, +}; +``` diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-color-system.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-color-system.md new file mode 100644 index 00000000000..74e40f0f415 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-color-system.md @@ -0,0 +1,138 @@ +--- +title: "Oryx: Color system" +description: Color design tokens are used for a consistent design system throughout the components in Oryx applications +last_updated: July 9, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/styling/oryx-color-system.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/styling/oryx-color-system.html + +--- + + + + +An important part of the application user interface is the colors. Colors are used everywhere throughout components and are important for a good user experience. To ensure that you can adjust the colors to your needs throughout the application, a configurable color system is provided. + +The color system lets you set up the color values globally as well as override them per component. Components do not define *values* for colors directly in their CSS but use [design tokens](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-design-tokens.html). Design tokens are (CSS) variables that are provided by themes, which you can customize in your project. + +The color system comes with semantic color types and a consistent number of color steps. This results in a consistent naming system throughout all the components. The actual colors for those groups are not relevant to the color system and are part of the theme configuration. This lets you configure the colors in a global theme. + +## Color palette + +The color palette provides a number of colors that you can use to quickly set up an Oryx application with the colors of your choice. This is particularly useful to demonstrate and experience how consistently the color system is applied across all components. All colors in the color palette are fully accessible by default, both in light and dark modes. + +To enable you to create fully accessible colors, we added a third-party open-source library: [Radix](https://www.radix-ui.com/docs/colors/palette-composition/scales). Radix contains a wide range of colors and neutrals that can be configured in Oryx. Spryker green and gray are the only custom colors on top of the Radix color system. + +### Color contrast + +Color contrast is an important accessibility feature. When colors do not have enough contrast, users with limited sight might not be able to use the experience to its full extent. + +Color contrast is based on two colors. The color system provides 13 color shades which can be used to create enough contrast. The Oryx design system and the application components are fully equipped to provide enough contrast, even if you configure an alternative color from the palette. However, if you provide a custom color, you should test its accessibility. + +### Color mode + +Colors can be provided for both light and dark modes. The dark mode is another important feature for accessibility and is supported by all colors in the color palette. Oryx applications can automatically adapt to the device mode, but you can also use the `ColorModeSelectorComponent` component to let the user manage the color mode manually. + +## Semantic color types + +There are eight semantic color types used in Oryx components: + +| TYPE | DESCRIPTION | +| --------- | ------------------ | +| Primary | Typically represents the brand color of a website. This color is used as the call-to-action color in many components. | +| Secondary | Additional accent color that can be used for more color-full experiences. Oryx components rarely use the secondary color. | +| Neutral | Also known as "grays". The neutrals are used for the layout—for example, as a divider or background color. The Radix color system provides different neutrals that pair nicely with the color of choice, also known as "natural pairing". | +| Highlight | Used to highlight elements. | +| Success | One of the `AlertType` colors that is used in components that are driven by `AlertType`—for example, notification. | +| Info | Similar to Success. | +| Warning | Similar to Success. | +| Error | Similar to Success. | + +## Color steps + +Each color type comes in 13 values, also known as steps. Components might not use all the steps of a color, but there are enough to provide enough nuance and create accessible experiences. + +The steps count from 0 to 12. In light mode, the steps go from light to dark: the higher the number, the darker the color. In dark mode, this is reversed. + +The Radix color system provides 15 color scales that are designed with a white foreground text and 5 bright scales for black foreground text. The foreground color is provided by step 0. For the bright colors, this color is black, while for the other colors, it's white. In dark mode, this is reversed. + +The color values can be of any supported color in the web platform, such as named colors like `red` or `blue`, hex color, HCL, or RBA. Oryx doesn't interfere with the provided colors but uses them as-is. + +## Configure colors from the color palette + +To change the colors in an Oryx application, you can configure the colors using the color palette. This is convenient and the recommended approach to quickly try out the color system. + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { colorPalette } from "@spryker-oryx/experience"; + +appBuilder().withTheme({ + designTokens: [ + { + color: { + primary: colorPalette.colors.sky, + secondary: colorPalette.grays.slate, + }, + }, + ], +}); +``` + +## Configure custom colors + +If your exact color of choice is not provided by the pallette, you can configure it using an extended configuration. + +```ts +import { appBuilder } from "@spryker-oryx/application"; + +appBuilder().withTheme({ + designTokens: [ + { + color: { + primary: { + light: { + 0: "lightblue", + 1: "blue", + // etc, up to 12 + }, + dark: { + 0: "blue", + 1: "lightblue", + // etc, up to 12 + }, + }, + }, + }, + ], +}); +``` + +{% info_block infoBox "Light and dark mode colors" %} + +Even though it's optional, we recommend providing both the light and dark mode colors, which are used if your application supports both modes. + +{% endinfo_block %} + +## Color design tokens + + +Each color type and its values are provided as a *design token*. [Design tokens](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-design-tokens.html) are provided as CSS variables to the root of the application. The color design tokens follow a consistent naming pattern to improve the integration into your components: + + +`--oryx-color-[type]-[step]` + +For example, if you create a solid button with an accessible foreground text color, you can do the following: + +```css +button { + color: var(--oryx-color-primary-0); + background: var(--oryx-color-primary-9); +} + +button:hover { + background-color: var(--oryx-color-primary-10); +} +``` + +The example shows the usage of design tokens in CSS. The primary color is defined for the default state of the the button background color. When the user hovers over the button, the 400 color shade is used. It works consistently with all colors. The buttons have a white foreground color on a colorful background. In case the background color is bright, the foreground color becomes black. diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-design-tokens.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-design-tokens.md new file mode 100644 index 00000000000..94d4667ddcb --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-design-tokens.md @@ -0,0 +1,55 @@ +--- +title: "Oryx: Design tokens" +description: Design tokens provide a centralized and consistent approach for styling components in Oryx applications. +last_updated: July 24, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/styling/oryx-design-tokens.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/styling/oryx-design-tokens.html + +--- + + + +Design tokens provide a powerful system for achieving consistent and customizable styles throughout an Oryx application. They are extensively used inside the [color system](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-color-system.html), typography, icons, and many more. Ensuring a clean separation between styles and components, design tokens make it easier to manage and maintain the application's design system. This document focuses on the structure and usage of design tokens in Oryx. + +## CSS variables + +Design tokens are provided as CSS variables in the application code. The variables follow a structured naming convention to ensure consistency. To avoid naming conflicts with third-party variables, they are prefixed with `oryx` and are written in kebab-case. + +The variables are written in the root element of the application, the `oryx-app` component by default. The variables are inherited by all descendants of the root component. This makes it convenient to access the variables throughout the entire application. At the same time, they can be overridden at any element in the application. + +If you like to reuse the variables outside the root element of the application, or if you are not using the `oryx-app` as the root, you can bootstrap the application using an alternative root: + +```ts +import { appBuilder } from "@spryker-oryx/core"; + +appBuilder().withAppOptions({ components: { root: "body" } }); +``` + +## Usage of design tokens + +Design tokens are used extensively throughout Oryx components to achieve a consistent and cohesive visual experience. Instead of hardcoding style values directly in component CSS, design tokens are used as CSS variables to define the styles. This way, you can easily change the visual appearance of the entire application by adjusting the corresponding design token values. + +The following example shows how to avoid hardcoded style values by using design tokens: + +```css +.button { + background-color: var(--oryx-color-primary-9); + font-size: var(--oryx-typography-h1-size); +} +``` + +The CSS variables are inherited throughout all descendants, but you can override the value anywhere in the DOM tree. The following example shows how to override a design token anywhere in the DOM. + +```html +
    + +
    +``` + +## Themes + +Design tokens are organized in themes. The Oryx [preset package](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html) provides standard themes to get you started. You can use a standard theme, customize a standard theme, or create your own. + + diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-icon-system.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-icon-system.md new file mode 100644 index 00000000000..feebd438e81 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-icon-system.md @@ -0,0 +1,201 @@ +--- +title: "Oryx: Icon system" +description: Icons are used for a consistent design system throughout components in Oryx applications +last_updated: July 29, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/styling/oryx-icon-system.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/styling/oryx-icon-system.html + +--- + +Icons provide clear visual cues, enhance user interactions, and save screen space. Oryx offers a sophisticated icon system that ensures a consistent design across all components of an application. + +## Icon component + +Icons are rendered using `IconComponent`, a design system component designed for this purpose. To display an icon, use the `type` attribute to specify the icon's name: + +```html + +``` + +`IconComponent` can render icons using either an icon font or SVG. When rendered as SVG, icons are displayed in a 24x24 pixels viewport. + +## Icon sizes + +The icon system is standardized around the 24x24 pixels format. Icons can be scaled to fit alternative sizes with three pre-defined sizes available: + +| SIZE | DESCRIPTION | PIXELS | +|-|-|-| +| `xs` | Extra small | 16x16 | +| `md` | Medium | 20x20 | +| `lg` | Large | 24x24 | + +To maintain consistency, `IconComponent` provides the `--oryx-icon-size` CSS variable, which applies to both font-based and SVG-based icons. This feature enables you to control icon sizes throughout UI effortlessly, ensuring icons remain clear and sharp across different contexts and devices. + +You can control the icon size through the `size` attribute or by providing the CSS variable. If both the size attribute and the CSS variable are used, the CSS variable takes precedence. + +```html + + +
    + +
    +``` + +## Font-based icons versus SVG icons + +Oryx supports both font-based icons and SVG icons, letting you choose the most suitable approach for each icon in your application. + +### Font-based icons + +Font-based icons are a popular choice because of their ease of use and the availability of a wide range of icons. They offer great quality and scalability, staying sharp at various sizes. Additionally, font-based icons can be easily colored using CSS, seamlessly integrating with UI themes. + +Oryx leverages [Material symbols](https://fonts.google.com/icons) and [Font Awesome icons](https://fontawesome.com/). However, you can also add other icon fonts. Material Symbols are built with Variable fonts, enabling developers to edit font characteristics like line weight and fill through CSS. + +When using font-based icons, make sure to consider the potential impact on performance. Since all icons in the font are loaded at once, it may affect the initial page loading time. Proper optimization strategies are essential to mitigate this issue. + +### SVG icons + +SVG icons offer several advantages, including the ability to load icons individually or in sprite sheets, which optimizes HTTP requests and improves performance. Server-side rendering of SVG icons results in optimal output for performance, leading to faster loading times. Being vector-based, SVG icons maintain their quality and sharpness at various sizes, making them ideal for responsive designs. Like font-based icons, SVG icons can also be colored using CSS, enabling seamless integration with UI themes. + +Compared to font-based icons, creating and maintaining SVG icons requires more intricate design work. Developers need to find balance between icon complexity and performance to ensure a smooth user experience. + +### Image icons + +Oryx does not provide support for using images as icons. Images lack scalability and often become pixelated or blurry when resized, making them unsuitable for responsive design and different screen sizes. Moreover, images are fixed in size, limiting their versatility and adaptability to various UI elements. In contrast, the font-based and SVG icon techniques provide better performance and customization options, making them the preferred choice for icons. + +## Icon colors + +In Oryx, icons are seamlessly integrated into the main Document Object Model (DOM), which means they can inherit colors from ancestor HTML elements. To customize an icon's color, you can use standard CSS or leverage the [color system](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-color-system.html). If no explicit color is provided, the icon inherits its color from the parent element. + +Here's an example of how to apply colors using standard CSS or the `--oryx-icon-color` variable: + +```html + + +
    + +
    + +
    +
    +``` + +## Variable font styles + +When using Material Symbols, you can configure the adjustable variable font styles of the icons: + +- fill +- weight +- grade +- optical size + +Additionally, you can configure the direction of icons. For more details, see [Configuring icons for right-to-left](#configuring-icons-for-right-to-left). + +### Global configuration + +You can provide the variable font styles globally using [design tokens](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-design-tokens.html): + +```ts +import { appBuilder } from "@spryker-oryx/application"; + +export const app = appBuilder().withTheme({ + designTokens: [ + { + icon: { + weight: "100", + fill: "1", + grade: "0", + optical: "48", + }, + }, + ], +}); +``` + +### CSS properties + +Alternatively, you can configure the variable font styles for parts of the DOM by creating CSS properties in the stylesheet. Custom CSS properties are inherited by all descendants, making it easy to configure variable fonts for a DOM tree with a single style rule: + +```html +
    + +
    + +
    +
    +``` + +### Individual icon styling + +You can also style the variable font for an individual icon by specifying style rules for a single icon type: + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { materialDesignIcons } from "@spryker-oryx/resources"; + +export const app = appBuilder().withTheme({ + icons: { + resource: materialDesignIcons, + resources: [ + { + resource: { + id: materialDesignIcons.id, + styles: { fill: 1 }, + }, + types: ["person"], + }, + ], + }, +}); +``` + +### Configuring icons for right-to-left + +Icon libraries are typically created for left-to-right (LTR), but when they're used in right-to-left (RTL), some icons much flip to reflect the layout. This only affects icons that express a direction, such as arrow icons. + +Oryx supports [directionality](/docs/dg/dev/frontend-development/{{page.version}}/oryx/internationalization/oryx-directionality.html). To ensure that icons flip accordingly, the icon style configuration needs to have `direction` set to `true`. The following example shows how the forward icon is configured to flip in the RTL mode. + +```ts +export const materialDesignIcons: IconMapper = { + id: "material-icons", + mapping: { + [IconTypes.Forward]: { + text: "chevron_right", + styles: { direction: true }, + }, + }, +}; +``` + +## Icon configuration + +You can configure one or multiple icon resources per theme. An icon resource can contain a reference to a font or provide SVG-based icons. + +Here's an example of configuring a theme that uses `materialDesignIcons` for all icons, except for the cart icon, which is configured with a specific mapping: + +```ts +export const customTheme: Theme = { + icons: { + resource: materialDesignIcons, + resources: [ + { + svg: true, + mapping: { + [IconTypes.Cart]: () => import("./icons/cart").then((s) => s.default), + }, + }, + ], + }, +}; +``` + +You can use the theme in the `appBuilder` configuration, on top of an existing theme, or as the main theme: + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { materialDesignIcons, storefrontIcons } from "@spryker-oryx/resources"; + +export const app = appBuilder().withTheme(customTheme).create(); +``` diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-applications/styling/oryx-responsive-design.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-responsive-design.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-applications/styling/oryx-responsive-design.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-responsive-design.md diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-typography.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-typography.md new file mode 100644 index 00000000000..4872009098a --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-applications/styling/oryx-typography.md @@ -0,0 +1,113 @@ +--- +title: "Oryx: Typography" +description: Typography design tokens are used for a consistent design system through the components in Oryx applications +last_updated: July 9, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/styling/oryx-typography.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/styling/oryx-typography.html + +--- + + + +Typography is an important part of the look and feel of a web page. It contributes to the readability of text but also defines how page structure is perceived. Big headers typically go first and are perceived as more important, whereas smaller text seems less important. + +The typography system lets you set up font size, weight, and line height globally. Components don't define *values* for fonts directly in their CSS but use *design tokens* to connect to the font values. Design tokens are CSS variables that you can configure in your project implementation. + +Like all design tokens, the typography system is configurable by themes, so that selecting of a certain theme applies a unique set of typography settings to all components. + +## Global font settings + +Oryx is based on web components, using the shadow DOM. The shadow DOM doesn't leak out any styles outside a component, and components don't inherit styles from ancestor elements. However, there are a few exceptions. Font face and size, line height and color are the few CSS properties that cascade down the shadow DOM. This lets you define those rules high up in the DOM tree. + +Because most design system components inherit typography from ancestor elements, you can provide the basis typography configuration in the root of the application. Oryx applications use the `` component, which provides this setup: + +```css +:host { + font-family: var(--oryx-typography-body-font); + font-weight: var(--oryx-typography-body-weight); + line-height: var(--oryx-typography-body-line); +} +``` + +The values are based on design tokens, whcih can be configured in a theme. Themes provide a mechanism to have screen size specific tokens, which enables the components to have different typography for small, medium, and large screens. + +{% info_block infoBox "" %} + +Setting the *root font size* is an exception in Oryx. Oryx avoids opinions about the root element and only provides styles to the `oryx-app` component. However, the `rem` unit requires the root font size to be set up in a web page. To ensure a configurable approach, Oryx uses `ThemeMetaInitializer` to accomplish this. + +{% endinfo_block %} + + + +## Relative font size and line height + +Application themes in Oryx are typically configured with relative sizes for font and line height, using `rem` or `em` units. In web development, using `rem` for font size and `em` for line height offers a flexible and proportional approach to typography. These units ensure consistent and harmonious typography throughout the components on a page. + +### `rem` for font size + +The `rem` unit, short for *root em*, is relative to the root font size of a document. By defining the root font size, all other font sizes specified using `rem` adapt proportionally. + +For example, if the font size token of an `h3` is set to `1.2rem`, and the root font size is `15px`, the calculated font size for the `h3` becomes `18px`: `1.2 * 15`. + +Using `rem` for font size provides several benefits: + +1. Consistency: font sizes scale consistently across elements, maintaining proportional typography. +2. Accessibility: users can adjust the overall font size in their browser settings without affecting layout or readability. +3. Easy maintenance: adjusting the root font size automatically cascades changes to all elements using `rem`, reducing manual adjustments. + +### `em` for line height + +The `em` unit, short for *element em*, is relative to the font size of the current element. When line height is defined using `em`, the value is multiplied by the font size to determine the final line height. + +For example, if the line height token of an `h3` is set to `1.5em`, and the font size is `18px`, the calculated line height for the `h3` becomes `27px`: `1.5 * 18`. The font size can be driven by a `rem` unit, and the browser calculates the rem value of the font size before calculating the line height. + +Using `em` for line height offers the following advantages: + +1. Proportional line heights: `em` adjusts line height proportionally to the font size, ensuring visually harmonious typography. +2. Vertical rhythm: `em` helps maintain a consistent vertical rhythm, creating a visually cohesive design. +3. Flexible adjustments: modifying the font size of an element automatically adjusts its line height, facilitating quick and consistent changes. + +## Headings + +HTML supports heading elements up to level 6: `

    `, `

    `, `

    `, etc. Screen readers and crawlers use headings to better understand the content and their coherence. + +Oryx provides a number of heading and paragraph styles that are used in the design system and components: + +- body +- small +- h1, h2, h3, h4, h5, h6 +- subtitle +- subtitle-small +- bold +- caption + +Each style of components and elements below is configurable by design tokens, using the following variables for h1. Examples: + +- `--oryx-typography-h1-size` +- `--oryx-typography-h1-weight` +- `--oryx-typography-h1-line` + +The headings get `margin: 0` to avoid any clashes in the component layout. + +### Semantic HTML structure versus UI + +The semantic usage of heading elements, like h1 or h2, defines the structure, which crawlers and screen readers use to interpret the content. This enables easier content navigation, especially for those with limited sight; screen readers guide and let them skip sections that are not of interest. Consequently, if the structure is not well formatted, for example, when `h3` is followed by an `h5`, it's considered a violation of accessibility best practices. + +A valid structure, however, might conflict with the UI design. UI designers use the headings in combination with the layout, which means that their options are more advanced compared to the structure only. UI designers tend to ignore the structure and favor layout options to emphasize sections of a page. + +For example, in a two-column layout, content in both sections has the same visual weight. However, in a left-to-right context, the content on the left is automatically more important. + +To allow for a solution that can cope with both the right semantic structure and the visual design, heading elements might be styled with conflicting heading style rules. The following is an example: + +

    Cart totals

    + + +The `Cart totals` heading has a structure of `h2`, while the visual appearance uses the h3 design tokens. This might look upside down, but it's intentionally done to have both a compliant and attractive UI. diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-building-components.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-building-components.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-building-components.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-building-components.md diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-component-types.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-component-types.md new file mode 100644 index 00000000000..b1eabadc727 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-component-types.md @@ -0,0 +1,57 @@ +--- +title: "Oryx: Component types" +description: Oryx components compared to Atomic Design +last_updated: Sept 23, 2023 +template: concept-topic-template +redirect_from: +- /docs/scos/dev/front-end-development/202404.0/oryx/building-components/oryx-component-types.html + +--- + +Oryx applications are built completely out of components. Whether it's a page or a section of the page or a button, they're all components. + +Oryx supports three types of components: + +- Design system components: highly reusable components that are used to build consistent user interfaces (UIs). +- Domain components: functional components that are concerned with a specific *domain*, like the product or cart domains. +- Composition components: containers that are used to render pages or sections by providing a list of components and their layout. + +Even though Oryx does not implement [Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/), the component types can be roughly mapped to the Atomic Design levels: + +| Atomic Design level | Oryx Component | Examples | +| ------------------- | ------------------------ | ------------------------------ | +| Atoms | Design system components | Button, form element | +| Molecules | Domain components | Product images, cart entry | +| Organisms | Compositions | Product carousel, product list | +| Templates | Composition references | Header, footer | +| Pages | Compositions | Product page, Cart page | + +## Design system components + +The Oryx design system offers a collection of highly reusable components that are essential for building a consistent and visually appealing UI. These components are agnostic of the application's context and serve as the building blocks for domain components. + +Design system components ensure a consistent and cohesive visual language across the application. The components do not interact with application logic directly. Because they don't know anything about their surroundings, they're considered fairly "dumb". They are used by domain components, which provide them with properties and dispatch events that can be used by the outer components. + +You can configure and customize design system components or replace them with your own. This enables you to build the required visual language throughout the application. Any reference to a design system component, like ``, is resolved by your custom version regardless of where it's used. + +Design system components are available in the `ui` package: `@spryker-oryx/ui`. They do not depend on any application logic, except for the integration of localized messages. + +## Domain components + +Oryx functionality is organized in domains. Domain packages contain functional components, also know as *domain components*. For example, all product-related components are organized in the product package. + +Domain components leverage the design system components to ensure a consistent UI/UX. The design system components are integrated with inputs (properties), and all of their events are handled by domain components. + +Domain components integrate with domain services to obtain and update the application state. The services handle the integration with backend APIs and application state management. In a single page application experience, domain components need to support [reactivity](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/reactivity.html) to ensure the application state is reflected immediately after it's changed. The complexity of reactivity is avoided as much as possible in components by using [signals](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html). To avoid repeating the boilerplate code that is required for each domain component, domains often provide a mixin. The mixin provides the required properties and signals that can be used by the components. + +Each domain package contains associated domain components. Product components, for example, are part of the `@spryker-oryx/ui` package. The components use a consistent naming convention for class and element names. For example, the Product Title component, is named `ProductTitleComponent` and can be used with the `` element. To avoid clashes with other frameworks, the elements are prefixed with `oryx-`. + +## Composition components + +Compositions are simple containers of components that are used to organize components on a page or a page section. The list of components and their options is configurable. The configurable approach allows for dynamic experiences that can be used to personalize or split-test experiences. + +Because of this generic approach, all pages and their compositions are rendered as a single component only: `CompositionComponent` (``). The composition component iterates over a list of components and applies layout and options to it. + +To better understand the concepts of pages and compositions, see [Pages](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-pages.html) and [Compositions](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-compositions.html). + +If you want to customize the application with your own pages, there's no need to follow the concept of compositions. You can create page-specific components, like `ProductDetailPageComponent`, and use them instead of using experience data. diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-implementing-components.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-implementing-components.md new file mode 100644 index 00000000000..80f10a7649d --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-implementing-components.md @@ -0,0 +1,205 @@ +--- +title: "Oryx: Implementing components" +description: Learn how to create an Oryx component +last_updated: Sept 20, 2023 +template: concept-topic-template +redirect_from: +- /docs/scos/dev/front-end-development/202404.0/oryx/building-components/oryx-implementing-components.html + +--- + +Oryx components are web components built with [Lit](https://lit.dev). Lit's a lightweight open-source framework from Google that's used to build highly efficient web components. Web components can be created with any framework or even with vanilla HTML, CSS, and JavaScript. You can use any other framework instead of Lit. However, some Oryx utilities, like [signals](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html) and component mixins, are available only with Lit. + +## Implementing a component + +This document describes how to implement a component using Lit. Lit's standard concepts are not covered. To learn more about them, see [Components overview](https://lit.dev/docs/components/overview/). + +We use the product *ID* component as an example. It is a simple component that shows the basic concepts. The component already exists in the Oryx product package. + +In Oryx, components are organized in folders, like `src/product/id`, with some component logic located in separate files. However, you can create a component as a single file. To allow for lazy loading of the component, you still need to separate out its definition. + +### 1. Creating a component class + +Oryx components are based on the Web Components standard. One of the features of web components are custom elements. Custom elements are class-based elements that extend from `HTMLElement`. Lit provides `LitElement` as a base class to extend from when you create a custom element. + +```ts +import { LitElement, TemplateResult } from "lit"; + +export class ProductIdComponent extends LitElement { + protected override render(): TemplateResult { + return html`

    The product id...

    `; + } +} +``` + +Oryx components follow the naming convention for class names: `[Domain][Feature]Component`. In the example of the `ProductIdComponent` component, `Domain` is `Product`, and `Feature` is `Id`. + +{% info_block infoBox %} + +Oryx is built in TypeScript with strict typing configuration. This ensures high-quality standards and a good developer experience. If you use TypeScript in your code, which is optional, you define the typing configuration in `.tsconfig`. + +{% endinfo_block %} + +### 2. Integrating backend data + +In this step, you're going to resolve the product data and render the `id` field of the data. The product data comes from the backend API and is loaded asynchronously. Once the data is loaded, it's part of the *application state*. The state might change over time—for example, when a user navigates from one product page to another. To be able to render the state efficiently, the component must support [reactivity](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/reactivity.html). + +Oryx provides standard [application layers](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/key-concepts-of-reactivity.html#application-layers) to load and resolve the backend data. The service layer is intended to be used by components, and product components interact with `ProductService`. The integration with the product service and reactivity is simplified by using `ProductMixin`. Mixins provide component properties and methods, which you can use in components. + +{% info_block infoBox "Inheritance versus composition" %} + +While component classes extend from a base class, Oryx mostly avoids inheritance and uses the *composition* design pattern. Not all the component logic can be composed, which is why mixins are used. + +{% endinfo_block %} + +The following example shows how to extend from `ProductMixin` and consume the product data. + +```ts +import { LitElement, TemplateResult } from "lit"; +import { ProductMixin } from "@spryker-oryx/product"; + +export class ProductIdComponent extends ProductMixin(LitElement) { + protected override render(): TemplateResult { + return html`id: ${this.$product()?.id}`; + } +} +``` + +This code shows the ease of use, but there's a lot going on in the background: + +1. The product *context* (sku) is resolved from the URL or any of the component's ancestor DOM elements, depending on where the component is used. When the component is used inside a product card or cart entry, the `sku` is added as an attribute. When the component is used on the Product Details Page, the `sku` is resolved from the URL. The current locale and currency are used as additional context. When the context is changing, the product data is reloaded automatically. +2. `ProductService` is used to resolve the product data from the application state. When the product is not yet loaded from the backend, the service uses the `ProductAdapter` adapter to fetch the data. The HTTP response is converted to meet the client-side product model. *Command and Query*, Oryx's state management solution, prevents data reloading unless explicitly requested. +3. The `$product` signal subscribes to the application state using `ProductService`. Whenever the product state is changed, the [signal](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html) updates the associated DOM elements that are affected by the data. + +The preceding steps are a commonly used pattern across all Oryx domain components. It ensures efficient consumption of backend APIs and rendering of DOM elements. + +### 3. Configuring a component + +Oryx components can be made configurable with options. [Component options](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-components/oryx-managing-component-options.html) can be provided statically to the application or load from a backend API. Component options enable components to be reusable across different business models. For example, a component can render different results based on the provided option: `true` for a B2C application, but `false` for a B2B application. + +Component options are resolved by `ContentMixin`, similar to how `ProductService` resolves the product data. You can combine multiple mixins in a component implementation—for example: + +```ts +import { resolve } from "@spryker-oryx/di"; +import { ContentMixin } from "@spryker-oryx/experience"; +import { ProductMixin } from "@spryker-oryx/product"; + +interface ProductIdOptions { + myOption?: boolean; +} + +export class ProductIdComponent extends ProductMixin( + ContentMixin(LitElement) +) { + protected override render(): TemplateResult { + const { myOption } = this.$options(); + + if (!myOption) return; + + return html`id: ${this.$product()?.id}`; + } +} +``` + +You can provide default options in the component, in feature sets, or in the application. For more details, see [Component options](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-components/oryx-managing-component-options.html). + +### 4. Styling the component DOM + +Oryx components are styled with standard CSS. The components have a separate DOM attached using the open [shadow DOM](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM). The shadow DOM encapsulates the styles so that they cannot *leak* into other components and prevents global styles from cascading down to the component. + +Styling components in the shadow DOM is a big topic we recommend studying separately. However, there are a few things to know when it comes to Oryx and styling components: + +- Design system components are provided in the UI package. Components like `` or `` are used to ensure a common visual language. They can be customized. If your components use the design system as much as possible, you have a consistent design language throughout your application. +- While web components styles do not leak in other components, the font style rules like `font-face` or `font-size` do cascade into web components, no matter how deep they are nested. Standard font rules are provided therefor in the `` component. The [typography](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-typography.html) design tokens are used to ensure consistent styling. +- Custom properties, also known as CSS variables, cascade into web components, which is why the application theme is based on CSS variables. See [Design tokens](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-design-tokens.html) for more information. +- Oryx uses configurable breakpoints to set up the screen size for responsive designs. To avoid hardcoded breakpoints in the component styles, you can configure screen-specific styles in the component definition as described in the following sections. +- You can use Oryx themes and provide component styles for a specific theme. Similarly to breakpoint-specific styles, you can configure styles for a theme. +- Oryx provides an [icon system](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/styling/oryx-icon-system.html) that you can leverage in your components. + +### 5. Localizing messages + +Components often require some text labels or aria labels to guide the user. To support multiple locales, you can leverage [localization](/docs/dg/dev/frontend-development/{{page.version}}/oryx/internationalization/oryx-localization.html). + +Localizations are resolved asynchronously, and require the UI to be rerendered whenever they're loaded or reloaded. `ContentMixin`, which you've used earlier to integrate the component options, provides access to the `i18n` directive. The `i18n` directive is available as a class method. The following example shows how to use it: + +```ts +protected render(): TemplateResult | void { + return html`${this.i18n('cart.add-to-cart')}`; +} +``` + +If you do not use `ContentMixin`, you can use `I18nMixin` instead. If you choose to not use mixins, you can integrate the `i18n` directive directly. + +### 6. Using services inside the component + +You've seen how `ProductMixin` resolves the product data and hides the integration with the `ProductService`. It is also common to use services directly in components. Oryx *injects* services using [dependency injection (DI)](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/dependency-injection/dependency-injection.html). DI provides decoupling of components and shared business logic. This is a common design pattern that separates concerns and lets you customize services without touching the components or other depending services. + +The Oryx DI container is used to register and resolve services using a token. You can read more about resolving services in [Dependency Injection: Using services](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/dependency-injection/dependency-injection-using-services.html). The following example shows how the pricing service is resolved. + +```ts +import { resolve } from "@spryker-oryx/di"; +import { ProductMixin } from "@spryker-oryx/product"; +import { PricingService } from "@spryker-oryx/site"; +import { LitElement } from "lit"; + +export class ProductIdComponent extends ProductMixin(LitElement) { + protected pricingService = resolve(PricingService); +} +``` + +You can now use the pricing service API in the component. Service methods always return observables (using [RxJS](https://www.learnrxjs.io/)), so that the service can be lazy loaded and the response can be used by [signals](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html) to update the DOM efficiently. + +### 7. Configuring the component for server-side rendering and hydration + +If your application needs to be indexed by crawlers, such as Google Search or Pinterest, the application needs to be [server-side rendered](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/oryx-server-side-rendering.html). + +When a component is server-side rendered, some of the browser APIs are not available. Most commonly known are the `window` and `document` objects. Take this into account when implementing custom components. + +Oryx renders pages on the server and returns the minimum amount of JavaScript needed. A component doesn't need JavaScript initially, but when a user start interacting with it, or when the component needs to reflect a certain application state, additional JavaScript needs to be loaded. Loading the component logic at the client side is called *hydration*. Because the component logic is loaded over the network and initialized in the application, hydration is costly. Additionally, the component might need to fetch data from a backend API. Oryx therefore tries to avoid or delay hydration till it's needed. + +When developing a component, you need to configure the hydration trigger using the `@hydrate` decorator that can take an event or context. The following example shows how to set up the component to be hydrated when the context is changed: + +```ts +import { resolve } from "@spryker-oryx/di"; +import { ProductMixin } from "@spryker-oryx/product"; +import { hydrate } from "@spryker-oryx/utilities"; + +@hydrate({ context: ProductContext.SKU }) +export class ProductIdComponent extends ProductMixin(LitElement) { + // ... +} +``` + +Alternatively, you can configure hydration to be triggered by a specific event: + +```ts +@hydrate({ event: ["mouseover", "focus"] }) +export class ProductIdComponent extends ProductMixin(LitElement) { + // ... +} +``` + +## Registering the component definition + +The component implementation you've started building in the previous section is not imported anywhere in your application. You need to register the [component definition](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-components/oryx-providing-component-definitions.html) so that the application can get hold of it, whenever it needs to render the component. + +In the example below, you see how the component is registered inline in the appBuilder. However, we recommend creating a component definition in a separate file and maintain it in the component folder. + +```ts +import { appBuilder } from "@spryker-oryx/application"; + +export const app = appBuilder().withComponents([ + { + name: "oryx-product-id", + impl: () => import("./components/product/id.component"), + }, +]); +``` + +## Using the component in the page structure + +After you've implemented and registered the component, you can use it in the application. For example, in a [page](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-pages.html) or [composition](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-compositions.html), or inside CMS content. + +If you build your first component, you might want to skip creating custom pages altogether, and just see the component in action. You can quickly merge the component into an existing page structure. For example, add the component before or after an existing component. For more details, see [Oryx: Pages](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-pages.html). + +Also, you can merge the component into an existing page structure. For example, before or after an existing component or inside (prepend or append) the components of an existing composition. diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-integrating-components.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-integrating-components.md new file mode 100644 index 00000000000..1c2a83403bf --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-integrating-components.md @@ -0,0 +1,57 @@ +--- +title: "Oryx: Integrating components" +description: Oryx Components are build as web components +last_updated: Sept 20, 2023 +template: concept-topic-template +redirect_from: +- /docs/scos/dev/front-end-development/202404.0/oryx/building-components/oryx-integrating-components.html + +--- + +Oryx components are *framework agnostic*, so they can be used in other web frameworks. + +Oryx components are build as [web components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components). Web components are a suite of standard web technologies supported by most browser vendors. The purpose of web components is to provide components in isolation so that they can easily integrate with other web technologies. + +## Integrating Oryx components with other web frameworks + +Thanks to the web-component-based architecture, Oryx components integrate with any web framework. You can integrate them with component frameworks, such as [React](https://react.dev/), [Vue.js](https://vuejs.org/), or [Angular](https://angular.io/). + +You can also integrate Oryx components inside frontend meta frameworks, like [Next.js](https://nextjs.org/), [Nuxt.js](https://nuxt.com/), or [Astro](https://astro.build/). + +{% info_block infoBox %} +While the integration of Oryx components is relatively straightforward, Spryker does not provide production-ready integration boilerplate code. + +The integration of the [server-side rendering](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/oryx-server-side-rendering.html) part might be quite complex. +{% endinfo_block %} + +## Integrating Oryx components with content management systems + +Oryx can render content from other systems, like a headless content management system (CMS). More importantly, Oryx components can render inside the content provided by a CMS. + +When rich content, like markdown, contains Oryx components, the components are rendered as is together with the content. This allows for rich content integrations, like rendering a carousel of upsell products in the middle of storytelling content. + +You can use Oryx components inside rich content from an external CMS. The content is rendered inside Oryx, but any Oryx components inside the content are rendered transparently. This does not require any integration effort. + +The following example shows Oryx components next to standard markdown. + +```markdown +## Markdown example with an integrate Oryx Product images + +Lorem ipsum dolor sit amet, consectetur adipiscing elit... + + + +Duis aute irure dolor in reprehenderit in voluptate velit... +``` + +The next example shows the integration of compositions with layout. We use the product list component with a configuration to render it in a carousel. + +```markdown +## Markdown example with a carousel of products + +Lorem ipsum dolor sit amet, consectetur adipiscing elit... + + + +Duis aute irure dolor in reprehenderit in voluptate velit... +``` diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-managing-component-options.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-managing-component-options.md new file mode 100644 index 00000000000..6a1dd2177c9 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-managing-component-options.md @@ -0,0 +1,145 @@ +--- +title: "Oryx: Managing components options" +description: Components Options provide reusable components cross business models +last_updated: Sept 19, 2023 +template: concept-topic-template +redirect_from: +- /docs/scos/dev/front-end-development/202404.0/oryx/building-components/oryx-managing-component-options.html + +--- + +Oryx components support configurable options to make the components reusable in different business contexts. Component options are JavaScript objects that can be configured as part of the application configuration or added by providing an attribute. To ensure a good developer experience, each component type can provide an interface for the options. + +To show the usage of component options, we use the tax message ("incl. vat") that is rendered on `ProductPriceComponent`. The tax message might not be useful for all businesses. For example, in a b2c context, the message might not be required. You can configure the message to be loaded conditionally. + +## Setting up component options + +Component options are provided by a TypeScript interface. This ensures a good developer experience when implementing a component and configuring the application. The component option interface is defined in a separate `*.model.ts` file in Oryx components, but there's no strict rule to follow. + +```ts +export interface ProductPriceOptions { + /** + * Indicates whether to show tax message for the price. + */ + enableTaxMessage?: boolean; +} +``` + +To resolve component options in new components, you can use `ContentMixin`. `ContentMixin` provides a type-safe `$option` [signal](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html) that guarantees efficient usage of the options. + +Oryx provides the `ContentMixin` mixin to work with component options. You can use the mixin to hand in the option interface. The following example shows how mixin is used to define the options. + +```ts +export class ProductPriceComponent extends ContentMixin( + LitElement +) { + // use the $options() signal in your code +} +``` + +## Configuring component options + +There are different ways to configure component options. Components can have default option values that are used as a fallback in case no values are provided. [Feature sets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-feature-sets.html) can provide values for a specific business context. As an application developer, you can provide customized values, either for all component instances in the application configuration or by providing options per instance in the experience data. You can also override the options when using components in your code. + +The approaches to set up the values are detailed in the following sections. + +### Default component option values + +To avoid hardcoded default values in the component code, components can have default values for their options. Oryx provides a `@defaultOptions` decorator that components can use to set up the values. The decorated values are used by the `ContentMixin` and are transparent for the component developer. + +The default values are used as a fallback in case there are no specific values configured. Whenever more specific values are configured at a feature set or application, the default options are neglected. + +```ts +@defaultOptions({ + enableTaxMessage: true, +}) +export class ProductPriceComponent extends ContentMixin( + LitElement +) { + // ... +} +``` + +### Configuring feature set component options + +Default component options can be overridden in feature sets. [Feature sets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-feature-sets.html) simplify the setup of a specific business model, such as B2B or B2C. Besides providing page structures with components, feature sets can also add component configurations. The feature set configurations override default component values. + +### Configuring application-driven component options + +You can customize default component values and feature set values in the application configuration. The configuration is used every time the component is used in the application. + +The following example shows how to configure an application using `appBuilder`. + +```ts +export const app = appBuilder() + // ... + .withOptions({ + "oryx-product-price": { + enableTaxMessage: false, + }, + }) + .create(); +``` + +For more information, see [Application orchestration](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.html). + +### Configuring component option values in experience data + +The default options, feature set configurations, and application configurations are applied to the Component type. The options provided in the experience data are applied to a specific instance in the experience data structure. + +In the following configuration, you see a part of the experience data that sets the `enableSalesLabel` option to `false`. This configuration is only applied to the instance. This configuration does not affect the component when it's used elsewhere. + +```ts +{ + type: 'oryx-composition', + components: [ + { + type: 'oryx-product-price', + options: { enableSalesLabel: false }, + }, + ] +} +``` + +For more information about creating and customizing experience data, see [Oryx: Pages](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-pages.html). + +### Configuring hardcoded component options + +When using components in code, options can be provided using the `options` attribute. The options attribute is resolved automatically by `ContentMixin` that most domain components use. + +The following example shows how component options are written in the component `options` attribute. When options are added by an attribute, the web component specs require stringified JSON. [Lit](https://lit.dev) provides a convenient property mapping shown in the example below. + +```ts +protected override render(): TemplateResult { + + const options: ProductPriceOptions = { + enableSalesLabel: false; + } + return html``; +} +``` + +## Using component options + +To use component options asynchronously, it's important to observe the options and react to updates in the component UI. Oryx provides a [reactive](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/reactivity.html) framework with observable data streams that can update the UI using [signals](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/reactivity/signals.html). To simplify the integration in the component logic, `ContentMixin` provides the `$options` signal that can be called in the render logic or other signals. + +The following code shows how to use the `$options` signal. Because of the component option interface, the usage of the signal is type safe. + +```ts +@defaultOptions({ + enableTaxMessage: true, +}) +export class ProductPriceComponent extends ContentMixin( + LitElement +) { + protected override render(): TemplateResult { + return html` ... ${this.renderTaxMessage()} ... `; + } + + protected renderTaxMessage(): TemplateResult | void { + if (!this.$options().enableTaxMessage) return; + + return html`...`; + } +} +``` diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-providing-component-definitions.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-providing-component-definitions.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-providing-component-definitions.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-providing-component-definitions.md index 530a4e2c05d..fcd09039634 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-providing-component-definitions.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-components/oryx-providing-component-definitions.md @@ -4,6 +4,7 @@ description: Components are registered in an Oryx application by a definition fi last_updated: Sept 19, 2023 template: concept-topic-template redirect_from: +- /docs/dg/dev/frontend-development/202512.0/oryx/building-components/oryx-providing-component-definitions.html - /docs/scos/dev/front-end-development/202404.0/oryx/building-components/oryx-providing-component-definitions.html --- diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-compositions.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-compositions.md new file mode 100644 index 00000000000..b8100d30a8d --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-compositions.md @@ -0,0 +1,97 @@ +--- +title: "Oryx: Compositions" +description: Compositions are used to organize components and provide layout in Oryx applications +last_updated: June 8, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-compositions.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-pages/oryx-compositions.html + +--- + + + +Compositions in Oryx are a tool for organizing components and defining their layout. It removes page-specific layout concerns from the component implementation, which makes the components less opinionated and more reusable. + +## Overview of compositions + +A composition contains a list of components that are rendered in the DOM in their specific order. A composition itself is a component, which means that you can easily create nested composition structures. In fact, a page itself is a composition. + +Compositions take a data-driven approach, letting you configure the composition using external data sources. This approach offers several potential benefits: + +- Avoid hard-coded page layout: By using data to configure compositions, you can avoid hardcoding the page layout in your application code. Instead, you can define the structure and layout of your pages using external data, making it more flexible and easier to customize. + +- Upgradable composition: A configurable data set is easier to upgrade. Instead of upgrading to a hardcoded component structure, you can select an alternative data set that will hold new components. This makes it easier to *opt in* to alternative compositions. + +- No-code customizations: The data-driven approach enables no-code customizations of the compositions. With the use of a What You See Is What You Get (WYSIWYG) tool, non-technical users can easily modify a composition by adjusting the data configuration without the need to edit the underlying code. + +- Split testing of data sets: Data-driven compositions enable split testing of different data sets. This means that you can create alternative data configurations and perform A/B testing to compare their impact on user experience and performance. This provides valuable insights for optimizing your application. + +- Personalization of data sets: The data-driven approach enables the personalization of a data set based on various criteria like user profiling, location, or time. You can tailor the composition data to provide personalized experiences to different target groups, enhancing user engagement and satisfaction. + +- Alternative data sets per screen size: Oryx compositions support the configuration of alternative data sets based on screen sizes. You can define different experiences for different devices, such as mobile, tablet, and desktop. By adapting a data set based on screen size, you optimize the user experience. + +The data-driven approach in Oryx compositions empowers you to dynamically configure the structure, layout, and content of your application based on external data sources. This flexibility enables easy customization, experimentation, and personalization, leading to enhanced user experiences and improved performance. + +## Configuring compositions with data + +To utilize the data-driven approach, you can provide the composition data using static-experience data or by loading the data from an external source like a backend API. For an example of how the static–experience data is provided, see [Feature sets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-feature-sets.html). + +The data configuration for a composition typically includes information about the components: their order, layout rules, styling options, and any other properties relevant to the composition. + +By separating the data configuration from the code, you can easily update and manage the composition without modifying the underlying application code. This promotes a more efficient development process and enables non-technical stakeholders to contribute to the composition customization. + +## Nested compositions + +Compositions can be nested. When you need to put in an additional structure for the organization and layout of a section, you can use a nested composition. A good example of nested compositions is the footer of an e-commerce storefront. The footer typically comes with a lot of links. The links are organized in groups, like self-service links, legal, and social. For a good experience, the groups have a layout assigned to them, to put them on the left or right, top or bottom of the footer. + +## HTML produced by composition structure + +The HTML produced by the composition component represents the composition hierarchy and defines the rendering order of components. Understanding the generated DOM structure is important for working effectively with compositions. The DOM structure is based on the experience data provided for each composition. It reflects the composition hierarchy and the components included in the compositions. The following is an example of a login page composition: + +```ts +export const loginPage = { + type: "Page", + meta: { ... }, + options: { ... }, + components: [ + { + type: "oryx-auth-login", + options: { + data: { + rules: [{ width: "50%", margin: "auto" }], + }, + }, + }, + ], +}; +``` + +Based on the composition data, which only holds a single component, the following HTML is generated: + +```html + + + + +``` + +When the data structure does not provide a unique ID, a `uid` is autogenerated. The example shows the need to have a `uid`, as the data-driven styles are bound to elements with those UIDs. Nested compositions are added to the DOM, similar to other components. The following example shows the components of the *Cart* page: + +```html + + + + + + + +``` + +To learn more about Oryx presets and feature sets, which often work hand in hand with compositions, see [Presets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html) and [Feature sets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-feature-sets.html). diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-pages.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-pages.md new file mode 100644 index 00000000000..a1a9d0516cd --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-pages.md @@ -0,0 +1,200 @@ +--- +title: "Oryx: Creating pages" +description: Pages can be created from a data set or custom components +last_updated: Aug 1, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-pages.html + - /docs/scos/dev/front-end-development/202404.0/oryx/building-pages/oryx-pages.html + +--- + +In Oryx, pages are essential building blocks of web applications. They represent different sections or views within an application and can be created using a data-driven approach. This approach lets you define the composition and layout of pages using external data sources, making it easier to maintain, customize, and optimize your application. + +Oryx provides standard pages, like home, login, or search page, in [application presets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html). Using presets gets you up and running fast. This document shows you how to provide custom pages or apply small customization on top of the standard preset pages. + +## Understanding pages and compositions + +Pages in Oryx are represented as [compositions](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-compositions.html), which are collections of components organized in a specific order. Compositions enable you to define the structure and layout of pages without hardcoding them in the code. This [separation of concerns](https://en.wikipedia.org/wiki/Separation_of_concerns) makes your components more reusable and less tied to specific pages. + +Oryx leverages a data-driven approach for creating pages, letting you configure the composition and content of pages using external data sources. For the advantages and technical details, see [Compositions](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-compositions.html). + +## Creating pages with page components + +While Oryx promotes the data-driven approach for creating pages, you can create page components and assign them directly to routes. + +## Creating pages by data + +The `Page` component type is used to create pages. A page is defined as a composition that can hold other compositions and components. Here's an example of a page defined as a composition: + +```ts +export const cartPage: ExperienceComponent = { + id: "cart-page", + type: "Page", + meta: { + title: "Cart Page", + description: "Cart Page Description", + }, + options: { + // add component options here + }, + components: [ + // add your components here + ], +}; +``` + +### Configuring content for a route + +You can configure the matching URL of a page using the `meta.route` field. This lets you define which URL the page should be rendered on. + +Here's an example of how to configure the route of a page: + +```ts +export const cartPage: ExperienceComponent = { + id: "cart-page", + type: "Page", + meta: { + route: "/cart", + }, +}; +``` + +In this example, the `route` field is set to `/cart`, so the page is rendered when the `/cart` URL is visited. + +{% info_block infoBox "Routing" %} + +Changing the route of a page content is not changing the related route. To change a route, you need to configure the [routing](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-pages/oryx-routing.html). + +{% endinfo_block %} + +## Customizing pages and page content + +Oryx enables you to provide custom experience data or change the existing data of pages. This gives you the flexibility to tailor the compositions to specific needs and business requirements. + +### Providing custom data + +You can provide custom experience data using Oryx's [dependency injection system](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/dependency-injection/dependency-injection-providing-services.html). + +A small utility function is available from the experience package to add custom data: + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { provideExperienceData } from "@spryker-oryx/experience"; +import { customPage } from "./custom/page"; + +export const app = appBuilder() + .withProviders([provideExperienceData(customData)]) + .create(); +``` + +### Custom data + +The data that you can provide is typed in the `ExperienceComponent` type. You can create a page structure by leveraging compositions, layout, and existing components in a standard way. + +The following example shows how a single text component is added to the structure. + +```ts +const customHomePage: ExperienceComponent = { + type: "oryx-content-text", + content: { data: { text: "

    Home page

    " } }, +}; +``` + +The following example shows a more complex variation, where the text component is wrapped inside a composition and is rendered in a grid layout: + +```ts +const customHomePage: ExperienceComponent = { + type: "oryx-composition", + id: "home-hero", + options: { + rules: [ + { + layout: "grid", + }, + ], + }, + components: [ + { + type: "oryx-content-text", + content: { data: { text: "

    Home page

    " } }, + }, + ], +}; +``` + +### Merge selector + +To replace existing content provided by [presets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html), you need to define the content that you want to merge and, optionally, the merge strategy. + +The selected content is defined by the `merge.selector` field. The following example shows how the provided data replaces the home page. + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { provideExperienceData } from "@spryker-oryx/experience"; + +export const app = appBuilder() + .withProviders([ + provideExperienceData({ + merge: { + selector: "#home-page", + }, + type: "oryx-content-text", + content: { data: { text: "

    Home page

    " } }, + }) + ]) + .create(); +``` + +Selectors use the following syntax: + +- Select a page with the `#` prefix—for example, `#home-page`. +- Select a component globally by `id`—for example, `my-composition`. +- Select components by `id` or `tag`—for example, `oryx-product-title`. +- Chain selects, using the dot notation—for example, `#home-page.my-composition.oryx-product-title`. +- Skip parts of the component tree—for example, `#home-page.oryx-product-title` rather than `#home-page.my-composition.oryx-product-title`. + +Using this syntax gives you the flexibility to apply changes in multiple, any, or specific pages. + +### Merge strategies + +When you do not provide a merge `type`, by default, the selected component is replaced. Alternative types can be configured in the `merge.type` field. + +The following example shows how to *merge* content in an existing component. + +```ts +import { appBuilder } from "@spryker-oryx/application"; +import { provideExperienceData } from "@spryker-oryx/experience"; + +export const app = appBuilder() + .withProviders([ + provideExperienceData({ + merge: { + selector: "site-logo", + type: "patch", + }, + content: { + data: { + graphic: null, + image: + "https://www.coca-colacompany.com/content/dam/company/us/en/the-coca-cola-company-logo.svg", + }, + }, + }) + ]) + .create(); +``` + +The merge types are given by the `ExperienceDataMergeType` enumeration, which is exported in the [@spryker-oryx/experience](https://www.npmjs.com/package/@spryker-oryx/experience) package. + +The following table gives an overview of the various merge types. + +| STRATEGY | DESCRIPTION | +| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `replace` | Replaces the selected element with the given content. This is the default strategy. | +| `patch` | Patches the selected component with the given component. This includes both the component options and content. All data, except for arrays, is deep-merged. | +| `remove` | Removes the selected component. | +| `before` | Adds the content before the selected component. | +| `after` | Adds the content after the selected component. | +| `append` | Adds the content after the last component of the composition components. If the selected component is not a composition, the custom component is not merged. | +| `prepend` | Adds the content before the first component of the composition components. If the selected component is not a composition, the custom component is not merged. | diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/building-pages/oryx-routing.md b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-routing.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/oryx/building-pages/oryx-routing.md rename to docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-routing.md index a3d54b0e637..829f060b161 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/building-pages/oryx-routing.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/building-pages/oryx-routing.md @@ -4,6 +4,7 @@ description: template: concept-topic-template last_updated: May 25, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/building-pages/oryx-routing.html - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-routing.html - /docs/scos/dev/front-end-development/202404.0/oryx/building-pages/oryx-routing.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/contribute-to-oryx.md b/docs/dg/dev/frontend-development/202602.0/oryx/contribute-to-oryx.md similarity index 96% rename from docs/dg/dev/frontend-development/202512.0/oryx/contribute-to-oryx.md rename to docs/dg/dev/frontend-development/202602.0/oryx/contribute-to-oryx.md index 3fc0055c951..6b9264f6d50 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/contribute-to-oryx.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/contribute-to-oryx.md @@ -25,7 +25,7 @@ Code that gets merged into master must be compatible with the latest minor relea 1. Fork the [Oryx repository](https://github.com/oryx-frontend/oryx). 2. Create a brunch based on the master. -3. Run `npm install` in the repository root. +3. Run `npm install` in the repository root. 4. Add your changes. For more details, see [Development workflow](#development-workflow) 5. If you've added code that should be tested, add tests. 6. Create a PR. Provide a clear and concise description of your changes in the PR's description. @@ -47,10 +47,10 @@ Useful commands: - Styles: `npx nx run-many --target=stylelint --all --parallel=2` - Unit tests: - Run all tests: `npx nx run-many --target=test --all --parallel=2` - - Run tests for a specific package: `npx nx run :test` + - Run tests for a specific package: `npx nx run :test` - e2e tests: - Run all tests in production mode: `npm run sf:e2e:headless:ci` - - Open Cypress test runner: `npm run sf:e2e:open` + - Open Cypress test runner: `npm run sf:e2e:open` ## Next steps diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-boilerplate.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-boilerplate.md new file mode 100644 index 00000000000..664dc8065df --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-boilerplate.md @@ -0,0 +1,154 @@ +--- +title: "Oryx: Boilerplate" +description: Create maintainable and upgradeable applications using the Oryx boilerplate +last_updated: Apr 3, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-boilerplate.html + - /docs/scos/dev/front-end-development/202404.0/oryx/getting-started/oryx-boilerplate.html + +--- + + +Boilerplate refers to the *template* code that is used to generate application code which can be further customized. At first sight, changing boilerplate is convenient as the code is at hand, generated in your project repository. However, when upgrading to newer versions of the original code, it becomes challenging. If you customized the boilerplate code and want to reapply a new version of the boilerplate, you have to merge the customizations with the new version during every update. This is a time-consuming and error-prone process that can slow down your development process and increase the risk of bugs. + +The Oryx boilerplate is provided in the [Composable Frontend repository](https://github.com/spryker/oryx-starter). + +## How we prevent boilerplate code + +In Oryx, we use the following tactics to prevent boilerplate code: + +1. Bootstrap the application from [npm packages](https://www.npmjs.com/org/spryker-oryx) instead of source. +2. Expose a function to set up the [app orchestrator](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-application-orchestration/oryx-application-orchestration.html) conveniently. +3. Provide [presets](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html) for the standard application setup, including the feature sets and UI themes. +4. Provide the source code in a [public repository](https://github.com/spryker/oryx) to enable developers to read the source code. +5. Provide configurable components and business logic. +6. Allow for customizations with [dependency injection](/docs/dg/dev/frontend-development/{{page.version}}/oryx/architecture/dependency-injection/dependency-injection.html). + +By using these tactics, we greatly reduced the amount of boilerplate code required in Oryx projects. This simplifies maintaining and upgrading code over time, and lets you focus on building features instead of maintaining the underlying framework. + +### NPM Packages + +One of the biggest sources of boilerplate code in a project is the application logic. In Oryx, we separated out all the application logic into individual packages that are [distributed on npm](https://www.npmjs.com/org/spryker-oryx). These packages include components, business logic, and integrations to the Spryker APIs. + +By separating out the application logic, we eliminated the boilerplate code from your projects. Instead of writing code to handle basic functionality, you can install the needed packages and use it in your code. And because the packages are distributed on npm and published with [Semantic Versioning](https://semver.org/), you can be confident that upgrading to a new version of the framework won't break your code. + +### Presets + +Another source of boilerplate code is the configuration required to get your application up and running. To simplify this process, we introduced the concept of presets in Oryx. + +The [preset packages](https://www.npmjs.com/package/@spryker-oryx/oryx-presets.html) provide configurations and data structures that are designed to get your project up and running quickly without providing a lot of configuration yourself. Presets can be considered as "demo applications", as they typically represent a demo application for a specific business model, like a B2C Demo Shop. By using presets, you can quickly configure an application without writing any code. This is useful for starting the first project, running a demo, or for testing things out. + +### appBuilder + +Finally, we provide an appBuilder function that can be used to set up your application in just a few lines of code. This function takes care of all the boilerplate code, including loading presets and configuring your application environment. By using `appBuilder()`, you can avoid writing boilerplate code and focus on building the features. + +## The minimal boilerplate code + +When you create a project in Oryx, there is a small amount of boilerplate code by default. This boilerplate code is designed to provide the basic structure and configuration for your application, and can be customized as needed. + +The boilerplate contains the following files, with the server side rendering (SSR) files being optional. + + + +```text +oryx-app/ +├── src +│ ├──app.ts +│ └──index.html +├── package.json +├── server/ (optional) +│ ├──render.ts +│ └──server.ts +``` + + + +The following is a breakdown of the different bits of the boilerplate code. + +### `package.json` + +`package.json` contains all the dependencies of the project. To simplify the dependency management, all dependencies are pulled through a single preset package. The preset package contains dependencies to all available Oryx packages. This might not be the most optimal setup over time, as it might contain a lot of "dead code", but it's a convenient starting point. As you are getting experienced with Oryx, you can consider creating a narrowed down list of dependencies. + +That being said, having unused dependencies in your project does *not* affect the build time or run time of your project. It is only an overhead during the installation process. + +The bare minimum `package.json` includes the following dependencies: + +```json +{ + ... + "dependencies": { + "@spryker-oryx/presets": "^1.0.0", + "@spryker-oryx/themes": "^1.0.0" + }, + "devDependencies": { + "vite": "^4.0.0" + } + ... +} +``` + +{% info_block infoBox %} + +We recommend fronting the dependencies with a caret notation (`^`), so that the latest *minor* release is pulled on each installation. + +{% endinfo_block %} + + +Vite is the recommended build system, but you can use alternative build systems. For more details, see [Set up Oryx](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/set-up-oryx.html). + +### `index.html` + +`index.html` contains two lines of boilerplate code to bootstrap the application: + +1. The `root-app` element. +2. An import of the `app.ts` module. + +Both the `root-app` element and the `app.ts` module can be replaced with custom alternatives. + +While `index.html` can have a few more details, the following is the required bare minimum: + +```html + + + + + + +``` + +Oryx can be installed and used next to other applications' code. You could therefore have other elements and code that are not related to Oryx. + +### `app.ts` + +`app.ts` contains the bootstrap code of the application. The application can be bootstrapped with `appBuilder`, a function that configures the application. While the configuration of `appBuilder` can be fine-tuned to small details, the following is the bare minimum setup: + +```ts +import { appBuilder } from '@spryker-oryx/application'; +import { storefrontFeatures } from '@spryker-oryx/presets/storefront'; +import { storefrontTheme } from '@spryker-oryx/themes'; + +export const app = appBuilder() + .withFeature(storefrontFeatures) + .withTheme(storefrontTheme) + .withEnvironment(import.meta.env) + .create(); +``` + +This configuration uses a standard *feature set* and *theme*. The feature set and theme are opinionated and might not be the production setup you're looking for, but it's a great starting point. + +### SSR boilerplate + +If you're using SSR in your application, you need to build and serve the application with different code. The boilerplate provides a minimum customizable setup to accomplish this: + +- `server/render.ts`: Renders the initial HTML content for your application on the server. +- `server/server.ts`: Sets up the server and handles incoming requests. + +If you use Vite, in `package.json`, you can add an npm script to build and serve the SSR server: + +```json +"scripts": { + "build:ssr": "vite build -c vite.config.server.ts", + "serve:ssr": "ts-node --experimentalSpecifierResolution node --esm server/server", +} +``` diff --git a/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-packages.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-packages.md new file mode 100644 index 00000000000..c93de2b7990 --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-packages.md @@ -0,0 +1,113 @@ +--- +title: "Oryx: Packages" +description: Use Oryx packages from npm to ensure you can easily upgrade to newer versions. +last_updated: Apr 19, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-packages.html + - /docs/scos/dev/front-end-development/202404.0/oryx/getting-started/oryx-packages.html + +--- + + + +The Oryx code base is publicly [available on Github](https://github.com/spryker/oryx/) and the code is published on [npmjs.com](https://www.npmjs.com/). Npm is a widely used registry for npm packages, which is used by package managers, like npm, yarn, deno, or bun, to install dependencies in an application. + +The dependencies are typically configured in the [package.json](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) file of an application. + +Oryx packages are distributed under the [spryker-oryx](https://www.npmjs.com/org/spryker-oryx) organization. Each time a new version is published, the version number is bumped. For more information on the versioning strategy, see [Versioning](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/oryx-versioning.html). + +We recommend [installing](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/set-up-oryx.html) the packages rather than cloning the source code from the Oryx repository. By depending on packages, you can easily upgrade them to later versions. + +The Oryx framework relies on its own packages and third-party dependencies to provide a robust development experience. This document describes how Oryx manages these packages to ensure stability, security, and flexibility. + +## Oryx Packages + +While packages are distributed as a flat list, there is an architectural hierarchy. The hierarchy protects from cyclic dependencies. Packages inside a layer can depend on sibling packages inside the layer without any issues. Packages never depend on a layer above. + +While the package layering might be irrelevant during your development, it might help you to better understand the package dependencies. The following diagram shows four package layers. The top layer is the [boilerplate application](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/oryx-boilerplate.html), which is set up using a [preset](/docs/dg/dev/frontend-development/{{page.version}}/oryx/building-applications/oryx-presets.html). + +{% include diagrams/oryx/packages.md %} + +### Template packages + +The template layer contains packages that can be used as quick starters for demos and projects. Templated packages follow semantic versioning and ensure upgradability. Some packages in the template layer, like presets, are opinionated and might not be used inside your final setup. Their main purpose is to quickly get up and running a standard frontend application. + +| PACKAGES | LOCATION | +| ---------------------------------------------------------------------- | --------------------------- | +| | | +| [Application](https://www.npmjs.com/package/@spryker-oryx/application) | `@spryker-oryx/application` | +| [Presets](https://www.npmjs.com/package/@spryker-oryx/presets) | `@spryker-oryx/presets` | +| [Labs](https://www.npmjs.com/package/@spryker-oryx/labs) | `@spryker-oryx/labs` | +| [Themes](https://www.npmjs.com/package/@spryker-oryx/themes) | `@spryker-oryx/themes` | +| [Resources](https://www.npmjs.com/package/@spryker-oryx/resources) | `@spryker-oryx/resources` | + +{% info_block infoBox %} + +The Labs package is an exception. It consists of experimental or demo functionality and is not recommended to be used in production. + +{% endinfo_block %} + +### Domain packages + +Domain packages provide components and service logic for certain domains. Organizing packages in domains improves the developer experience by making it easy to understand where to find a certain component or service. For example, the `product` domain package contains all product-related components, as well as product services and adapters that integrate with Spryker APIs. + +| PACKAGES | LOCATION | +| ---------------------------------------------------------------- | ------------------------ | +| [Cart](https://www.npmjs.com/package/@spryker-oryx/cart) | `@spryker-oryx/cart` | +| [Checkout](https://www.npmjs.com/package/@spryker-oryx/checkout) | `@spryker-oryx/checkout` | +| [Content](https://www.npmjs.com/package/@spryker-oryx/content) | `@spryker-oryx/content` | +| [Order](https://www.npmjs.com/package/@spryker-oryx/order) | `@spryker-oryx/order` | +| [Picking](https://www.npmjs.com/package/@spryker-oryx/picking) | `@spryker-oryx/picking` | +| [Product](https://www.npmjs.com/package/@spryker-oryx/product) | `@spryker-oryx/product` | +| [Search](https://www.npmjs.com/package/@spryker-oryx/search) | `@spryker-oryx/search` | +| [Site](https://www.npmjs.com/package/@spryker-oryx/site) | `@spryker-oryx/site` | +| [User](https://www.npmjs.com/package/@spryker-oryx/user) | `@spryker-oryx/user` | + +### Platform packages + +The platform layer contains the core packages of the Oryx framework. They provide the infrastructure to the whole system. + +| PACKAGES | LOCATION | +| ---------------------------------------------------------------------------------- | --------------------------------- | +| [Auth](https://www.npmjs.com/package/@spryker-oryx/auth) | `@spryker-oryx/auth` | +| [Core](https://www.npmjs.com/package/@spryker-oryx/core) | `@spryker-oryx/core` | +| [Experience](https://www.npmjs.com/package/@spryker-oryx/experience) | `@spryker-oryx/experience` | +| [Form](https://www.npmjs.com/package/@spryker-oryx/form) | `@spryker-oryx/form` | +| [I18n](https://www.npmjs.com/package/@spryker-oryx/I18n) | `@spryker-oryx/i18n` | +| [Indexed-db](https://www.npmjs.com/package/@spryker-oryx/indexed-db) | `@spryker-oryx/indexed-db` | +| [Offline](https://www.npmjs.com/package/@spryker-oryx/offline) | `@spryker-oryx/offline` | +| [Push-notification](https://www.npmjs.com/package/@spryker-oryx/push-notification) | `@spryker-oryx/push-notification` | +| [Router](https://www.npmjs.com/package/@spryker-oryx/router) | `@spryker-oryx/router` | + +### Base packages + +The base layer contains packages that serve as utilities to all layers above. An important part of the base layer is the design system package (UI). + +| PACKAGES | LOCATION | +| ------------------------------------------------------------------ | ------------------------- | +| [UI](https://www.npmjs.com/package/@spryker-oryx/ui) | `@spryker-oryx/ui` | +| [Utilities](https://www.npmjs.com/package/@spryker-oryx/utilities) | `@spryker-oryx/utilities` | +| [DI](https://www.npmjs.com/package/@spryker-oryx/di) | `@spryker-oryx/di` | + +## Managing third-party dependencies + +Oryx follows a careful approach when incorporating third-party components. Third-party components are included only when they bring significant value to projects. This approach involves minimizing unnecessary dependencies and thoroughly assessing their worth to prevent issues like outdated packages, vulnerabilities, and compatibility problems that may disrupt code stability. + +We conduct regular inspections of third-party components to check for updates and compatibility, identify and fix vulnerabilities. Attention is also given to optimizing bundle size and performance to maintain applications fast and responsive. + +To continue innovating and keep the ecosystem healthy, we follow the guidelines: + +- Avoid unnecessary third party dependencies: minimize the use of third-party dependencies to mitigate risks and maintain control over the ecosystem. + +- Evaluate dependencies carefully: before adding a new third-party dependency, we carefully evaluate its risks and benefits, considering factors such as maintenance, community support, security track record, and adherence to semantic versioning. + +- Use semantic versioning and caret (^) notation in `package.json`: this ensures compatibility and allows for seamless updates without introducing breaking changes. Ideally, versions only include the major version number, so that the minor and patch are controlled by application owners and can be updated over time. Example: `"lit": "^2.0.0"`. + +- Avoid shipping lock files in the boilerplate: Lock files, like `package-lock.json`, are not included in the Oryx boilerplate to let application developers benefit from the latest versions of dependencies when creating their projects. + +- Use peer dependencies: enables application owners to choose specific versions of dependencies while maintaining compatibility with the framework. + +- Document version resolutions: when known security concerns or significant improvements can only be solved with a breaking change to the dependencies, we add *version resolutions* to the Oryx documentation. Application owners can change their `package.json` accordingly to override specific dependencies. + +By following these guidelines, Oryx aims to maintain a stable and secure ecosystem while providing flexibility for application developers to choose the versions of dependencies that suit their needs. diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-supported-browsers.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-supported-browsers.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-supported-browsers.md rename to docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-supported-browsers.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-technology.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-technology.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-technology.md rename to docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-technology.md diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-versioning.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-versioning.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-versioning.md rename to docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-versioning.md index 66f7b648ead..26a90f0f3a1 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-versioning.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/oryx-versioning.md @@ -4,6 +4,7 @@ description: Oryx framework uses semantic versioning to ensure stability template: concept-topic-template last_updated: Mar 3, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/getting-started/oryx-versioning.html - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-versioning.html - /docs/scos/dev/front-end-development/202404.0/oryx/getting-started/oryx-versioning.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/set-up-oryx.md b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/set-up-oryx.md similarity index 93% rename from docs/dg/dev/frontend-development/202512.0/oryx/getting-started/set-up-oryx.md rename to docs/dg/dev/frontend-development/202602.0/oryx/getting-started/set-up-oryx.md index 72d22376fba..6c2440fb86b 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/getting-started/set-up-oryx.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/getting-started/set-up-oryx.md @@ -4,6 +4,7 @@ description: Learn how to set up Oryx using a boilerplate project last_updated: Apr 3, 2023 template: howto-guide-template redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/getting-started/set-up-oryx.html - /docs/scos/dev/front-end-development/202404.0/oryx/set-up-oryx.html - /docs/scos/dev/front-end-development/202404.0/oryx/getting-started/set-up-oryx.html @@ -18,7 +19,7 @@ This document describes how to set up an environment for developing in the Oryx ## Install Oryx with the boilerplate project -1. Clone the boilerplate project and install dependencies. +1. Clone the boilerplate project and install dependencies. ```shell git clone https://github.com/spryker/composable-frontend && \ diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-directionality.md b/docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-directionality.md similarity index 97% rename from docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-directionality.md rename to docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-directionality.md index 498aa0c4561..af7490e665d 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-directionality.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-directionality.md @@ -4,6 +4,7 @@ description: Learn how Oryx supports both right-to-left (RTL) and left-to-right last_updated: November 6, 2023 template: concept-topic-template redirect_from: +- /docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-directionality.html - /docs/scos/dev/front-end-development/202404.0/oryx/internationalization/oryx-directionality.html --- diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-localization.md b/docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-localization.md similarity index 98% rename from docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-localization.md rename to docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-localization.md index 0fd6b679be8..3e062cbfebc 100644 --- a/docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-localization.md +++ b/docs/dg/dev/frontend-development/202602.0/oryx/internationalization/oryx-localization.md @@ -4,6 +4,7 @@ description: Localizations are decoupled from component implementations template: concept-topic-template last_updated: July 23, 2023 redirect_from: + - /docs/dg/dev/frontend-development/202512.0/oryx/internationalization/oryx-localization.html - /docs/scos/dev/front-end-development/202404.0/oryx/oryx-localization.html - /docs/scos/dev/front-end-development/202404.0/oryx/building-applications/oryx-localization.html - /docs/scos/dev/front-end-development/202404.0/oryx/internationalization/oryx-localization.html diff --git a/docs/dg/dev/frontend-development/202512.0/oryx/oryx.md b/docs/dg/dev/frontend-development/202602.0/oryx/oryx.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/oryx/oryx.md rename to docs/dg/dev/frontend-development/202602.0/oryx/oryx.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/adding-and-using-external-libraries-in-yves.md b/docs/dg/dev/frontend-development/202602.0/yves/adding-and-using-external-libraries-in-yves.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/adding-and-using-external-libraries-in-yves.md rename to docs/dg/dev/frontend-development/202602.0/yves/adding-and-using-external-libraries-in-yves.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/atomic-frontend.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/atomic-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/atomic-frontend.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/atomic-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/customizing-spryker-frontend.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/customizing-spryker-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/customizing-spryker-frontend.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/customizing-spryker-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-suite-product-details-page.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-suite-product-details-page.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/frontend-customization-example-suite-product-details-page.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/frontend-customization-example-suite-product-details-page.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/integrate-jquery-into-atomic-frontend.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/integrate-jquery-into-atomic-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/integrate-jquery-into-atomic-frontend.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/integrate-jquery-into-atomic-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/integrate-react-into-atomic-frontend.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/integrate-react-into-atomic-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/integrate-react-into-atomic-frontend.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/integrate-react-into-atomic-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/creating-components.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/creating-components.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/creating-components.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/creating-components.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/extending-components.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/extending-components.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/extending-components.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/extending-components.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/overriding-components.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/overriding-components.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/overriding-components.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/overriding-components.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/using-components.md b/docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/using-components.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/atomic-frontend/managing-components/using-components.md rename to docs/dg/dev/frontend-development/202602.0/yves/atomic-frontend/managing-components/using-components.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/custom-twig-functions-for-yves.md b/docs/dg/dev/frontend-development/202602.0/yves/custom-twig-functions-for-yves.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/custom-twig-functions-for-yves.md rename to docs/dg/dev/frontend-development/202602.0/yves/custom-twig-functions-for-yves.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/frontend-assets-building-and-loading.md b/docs/dg/dev/frontend-development/202602.0/yves/frontend-assets-building-and-loading.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/frontend-assets-building-and-loading.md rename to docs/dg/dev/frontend-development/202602.0/yves/frontend-assets-building-and-loading.md diff --git a/docs/dg/dev/frontend-development/202602.0/yves/frontend-builder-for-yves.md b/docs/dg/dev/frontend-development/202602.0/yves/frontend-builder-for-yves.md new file mode 100644 index 00000000000..2341b2b4cda --- /dev/null +++ b/docs/dg/dev/frontend-development/202602.0/yves/frontend-builder-for-yves.md @@ -0,0 +1,205 @@ +--- +title: Frontend builder for Yves +description: This article provides information about how to prepare assets (CSS, js, images, etc.) for different namespaces and their themes. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/front-end-builder-for-yves +originalArticleId: 53c433b1-ae5f-4887-9435-ac716c632347 +redirect_from: + - /docs/scos/dev/front-end-development/202404.0/yves/front-end-builder-for-yves.html + - /docs/scos/dev/front-end-development/frontend-builder-for-yves.html + - /docs/scos/dev/front-end-development/yves/front-end-builder-for-yves.html +--- + +This article provides information about how to prepare assets, like CSS, js or images, for different namespaces and their themes. + +## Commands + +The builder has several modes to build frontend: + +- `npm run yves`—builds assets in the development mode with all the namespaces and themes. +- `npm run yves:watch`—builds assets in the watch mode. It will be watching for CSS and JS files and rebuilding the assets immediately after all the namespaces and themes are changed. +- `npm run yves:production`—builds assets in the production mode (minified files, remove comments, etc.) for all namespaces and themes. +- `npm run yves:help`—displays all available parameters for building. + +## Parameters + +- `-n or --namespace `—generates the assets for all themes of this ``. To generate several namespaces, use this parameter several times. For example, `npm run yves -- -n DE -n US`. +- `-t or --theme `—generates assets for all the namespaces which contain ``. To generate several themes, use this parameter several times. For example, `npm run yves -- -t default -t red-theme` +- `-c or --config `—ability to define the path to the config JSON file that overwrites the default config JSON file. +- `-i or --info`—displays a list of namespaces with all the available themes. + +## Configuring + +To enable the multi-theme in Yves, add the`\SprykerShop\Shared\ShopUi\ShopUiConstants::YVES_ASSETS_URL_PATTERN` configuration. + +It supports using the `%theme%` key that will be replaced with the current theme for the Twig module configuration. + +Example: +`$config[\SprykerShop\Shared\ShopUi\ShopUiConstants::YVES_ASSETS_URL_PATTERN] = sprintf('/assets/%s/%s/', $CURRENT_STORE, '%theme%');` + +Config for the frontend builder is placed at `/config/Yves/frontend-build-config.json`, but you can change this path using the command with `-c` or `--config` parameter, for example: + +`npm run yves -- -c /path/to/config.json` + +The config file should contain the following data: + +```json +{ + + "path": "assets/%namespace%/%theme%/", // pattern of the path to the public assets + + "namespaces": [ // the array of the namespaces + + { + + "moduleSuffix": "DE", // a special suffix for the module which will be rendered for the current namespace + + "namespace": "DE", // the name of namespace + + "themes": ["red-theme", "new-year-theme"], // an array of the themes which will be rendered for this namespace, if the additional themes aren't needed - should leave an empty array + + "defaultTheme": "default" // the reqired default theme + + } + + ] + +} +``` + +## Twig templates + +To specify the theme in a multi-theme environment for twig templates, use TwigConfig. You can overwrite `getYvesThemeName` as follows: + +**Shared/TwigDE/TwigConfig.php** + +```php +/Yves/**/*` are not compiled. +- You place component extensions outside `/src/Pyz`. + +If you do not register the namespace, the builder ignores its entry points when you run `npm run yves`. + +### Update `frontend/settings.js` + +1. Register the new namespace path in the builder configuration: + +```js +paths: { + core: './vendor/spryker-shop', + eco: './vendor/spryker-eco', + project: './src/Pyz', + // ... + newNamespace: './PATH_TO_YOUR_FOLDER', + // ... +}, +``` + +2. Include the namespace in all relevant `dirs` arrays that are responsible for entry discovery: + +```js +dirs: [ + join(globalSettings.context, paths.core), + join(globalSettings.context, paths.eco), + join(globalSettings.context, paths.project), + // ... + join(globalSettings.context, paths.newNamespace), + // ... +], +``` + +3. Add the namespace to the `componentStyles` section: + +```js +componentStyles: { + dirs: [ + join(globalSettings.context, paths.core), + join(globalSettings.context, paths.eco), + join(globalSettings.context, paths.project), + // ... + join(globalSettings.context, paths.newNamespace), + // ... + ], +} +``` + +### Directory order and override behavior + +The order of directories in the `dirs` arrays directly affects override behavior. + +- Paths that you define later in the array have higher priority. +- SCSS and component styles that load later override styles from earlier paths if the selectors have the same specificity. + + +### Javascript + +Besides components, the part of the webpack build is `vendor.ts` and `app.ts` files. + +`vendor.ts` (`/src/Pyz/Yves/ShopUi/Theme/default/vendor.ts`) is used to import global external libraries `app.ts` (`/src/Pyz/Yves/ShopUi/Theme/default/app.ts`) that invoke bootstrap function initializing the Spryker Shop frontend application. + +{% info_block warningBox "Note" %} + +You can overwrite these files in your own namespace and/or theme. + +{% endinfo_block %} + +### SCSS + +All components in the Core level provide global mixin for every level, so you can include them into Eco and Project levels. + +Besides the components, you can find SCSS files with global classes, mixins, variables like `basic.scss`, `util.scss`, `shared.scss`. The order of including these files you can find here `/frontend/configs/development.js`. diff --git a/docs/dg/dev/frontend-development/202512.0/yves/implement-image-optimization.md b/docs/dg/dev/frontend-development/202602.0/yves/implement-image-optimization.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/implement-image-optimization.md rename to docs/dg/dev/frontend-development/202602.0/yves/implement-image-optimization.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/multi-theme.md b/docs/dg/dev/frontend-development/202602.0/yves/multi-theme.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/multi-theme.md rename to docs/dg/dev/frontend-development/202602.0/yves/multi-theme.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/yves-frontend.md b/docs/dg/dev/frontend-development/202602.0/yves/yves-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/yves-frontend.md rename to docs/dg/dev/frontend-development/202602.0/yves/yves-frontend.md diff --git a/docs/dg/dev/frontend-development/202512.0/yves/yves-multi-themes.md b/docs/dg/dev/frontend-development/202602.0/yves/yves-multi-themes.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/yves/yves-multi-themes.md rename to docs/dg/dev/frontend-development/202602.0/yves/yves-multi-themes.md diff --git a/docs/dg/dev/frontend-development/202512.0/zed/custom-twig-functions-for-zed.md b/docs/dg/dev/frontend-development/202602.0/zed/custom-twig-functions-for-zed.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/zed/custom-twig-functions-for-zed.md rename to docs/dg/dev/frontend-development/202602.0/zed/custom-twig-functions-for-zed.md diff --git a/docs/dg/dev/frontend-development/202512.0/zed/oryx-for-zed.md b/docs/dg/dev/frontend-development/202602.0/zed/oryx-for-zed.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/zed/oryx-for-zed.md rename to docs/dg/dev/frontend-development/202602.0/zed/oryx-for-zed.md diff --git a/docs/dg/dev/frontend-development/202512.0/zed/overriding-webpack-js-scss-for-zed-on-the-project-level.md b/docs/dg/dev/frontend-development/202602.0/zed/overriding-webpack-js-scss-for-zed-on-the-project-level.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/zed/overriding-webpack-js-scss-for-zed-on-the-project-level.md rename to docs/dg/dev/frontend-development/202602.0/zed/overriding-webpack-js-scss-for-zed-on-the-project-level.md diff --git a/docs/dg/dev/frontend-development/202512.0/zed/zed-frontend.md b/docs/dg/dev/frontend-development/202602.0/zed/zed-frontend.md similarity index 100% rename from docs/dg/dev/frontend-development/202512.0/zed/zed-frontend.md rename to docs/dg/dev/frontend-development/202602.0/zed/zed-frontend.md diff --git a/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.md b/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.md new file mode 100644 index 00000000000..e2bc85e8507 --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.md @@ -0,0 +1,344 @@ +--- +title: APM — New Relic based troubleshooting +description: Learn how to use New Relic APM to troubleshoot performance issues in Spryker applications by reviewing metrics, analyzing traces, and identifying bottlenecks. +last_updated: Feb 26, 2026 +template: concept-topic-template +related: + - title: Monitoring + link: docs/dg/dev/guidelines/performance-guidelines/monitoring.html + - title: Troubleshooting performance issues + link: docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html + - title: New Relic transactions grouping by queue names + link: docs/dg/dev/guidelines/performance-guidelines/elastic-computing/new-relic-transaction-grouping-by-queue-names.html + - title: N+1 problem + link: docs/dg/dev/troubleshooting/troubleshooting-performance-issues/n+1-problem.html +--- + +Each performance degradation or downtime can be assessed based on metrics and data points that allow narrowing down the possible faulty components and identifying exact bottlenecks that require attention and change. + +{% info_block infoBox "Info" %} + +While this guide focuses primarily on using New Relic for most troubleshooting scenarios (which already covers 80–90% of typical cases), keep in mind that sometimes the root cause lies outside the application layer. In such situations, complementary data sources—such as AWS CloudWatch metrics, application logs, or visible application behavior (for example, browser-level errors or delays)—may provide additional helpful context. These sources are optional and should only be reviewed if New Relic does not fully explain the issue. + +{% endinfo_block %} + +## Why math matters: navigating performance metrics + +To effectively troubleshoot a Spryker application using New Relic, you must look beyond "average" response times. In a complex e-commerce environment, averages are often deceptive; they mask the experience of frustrated users by smoothing out significant outliers. To gain a true architectural view of system health, rely on **percentiles** and **statistical aggregates**. These are not just mathematical jargon; they are tools that categorize your traffic by user experience. + +- **The Median (P50):** This is the literal middle of your data. If your P50 is 200ms, it means exactly half of your users are experiencing speeds faster than that, and half are slower. It represents the "typical" user experience. +- **P95 and P99 (The "Tail"):** These represent the 95th and 99th percentiles, respectively. If your P99 is 5 seconds, it means 1% of your users—perhaps those with massive shopping carts or complex B2B pricing rules—are waiting a grueling five seconds (or more) for a page to load. In APM, focus on these "tails" because that is where the most critical performance bottlenecks and infrastructure strains are hidden. +- **Maximum (Max):** This is the single slowest request recorded. While often ignored as a "one-off" glitch, in a Spryker context, a high Max can indicate a specific worker timeout or a deadlock in the database that could eventually cascade into a full system outage. + +Understanding these distributions lets you stop optimizing for the "average" and start solving for the "worst-case," ensuring that even your most complex transactions remain performant. + +## The approach + +The approach used at Spryker is "top to bottom" and, in short, can be described in the following points: + +1. **Identify and review the high-level application component that misbehaves**—for example: Yves, Zed, Backend-Gateway, or Glue API. +2. **Review top-level application metrics** over the period of the last 1-7 days or during the period when the problem was observed. Such metrics may include: New Relic Apdex, average response time, error rate, and top 5 slowest transactions, top 5 slowest DB queries. +3. **For each of the top X slowest transactions**, open a few example traces and review the execution call stack to identify the exact reasons for the problem—for example, DB query or slow component in a loop, or too many (hundreds to thousands) quick calls repeated in a loop within one request. +4. **Based on the evidence found in New Relic**, proceed with code optimization or infrastructure changes to fix the problem or remove the bottleneck. + +Last but not least, repeat the process over and over again. After each change (be it infrastructure or code), iteration is the key here. Some problems may not be visible while others (bigger ones) are at the top (iceberg analogy). + +## 1. New Relic entities + +The Spryker setup consists of several applications. It is important to understand on a high level which application may work slowly, or inefficiently, or is responsible for the problem that you are trying to solve. Sometimes it is easy—customers complaining about it, sometimes not, but usually it makes sense to start from an app that is an "entry point" to the Spryker stack from the internet. + +### Spryker architecture + +Spryker applications that are the first ones to handle incoming traffic usually are: Yves (or Glue API or Marketplace) then Backend-Gateway, then Zed/the Back Office, then background jobs (Jenkins). + +Architecture documentation about Spryker applications can be found here: +- [Conceptual overview](/docs/dg/dev/architecture/conceptual-overview.html) +- [Marketplace Application composition](/docs/dg/dev/architecture/marketplace-architecture/marketplace-application-composition.html) + +### Spryker - New Relic integration + +New Relic uses its own concept of "Applications" referred to as **Entities**. These act as logical containers for transactions and traces, and in the Spryker setup they effectively serve as aliases for Spryker application names. + +Spryker integrates with New Relic through the community module **spryker-eco/new-relic**: [GitHub - spryker-eco/new-relic](https://github.com/spryker-eco/new-relic) ("eco" stands for "ecosystem"; see also [Eco modules](/docs/integrations/eco-modules.html)). + +This module provides several useful features out of the box: + +- **Per-application trace separation**—transactions and traces are grouped into different New Relic entities for each Spryker application (for example, Yves, Zed, Backend Gateway). +- **URL-based transaction naming**—transactions are named based on the URL segment (for example, "catalog", "search"), instead of all being grouped under a generic index.php. +- **CLI command-based transaction naming**—commands such as `queue:worker:start` or `oms:check-conditions` are named explicitly, instead of all being grouped under a generic vendor/console. + +How New Relic groups incoming traces into Entities depends on the configuration provided by the Spryker New Relic eco module. The default configuration works well and is summarized in the tables below. To highlight the effect of the module, the comparison tables show how New Relic groups transactions **with** and **without** the spryker-eco/new-relic module enabled. + +**New Relic default configuration (eco module is not present or not configured):** + +
    + +| NR Entity | Description | +| --- | --- | +| {project-name}-{env-name}-newrelic-app | Default Entity name coming from PHP's NR configuration | + +
    + +**Spryker/New Relic configuration (eco module installed and wired-in):** + +
    + +| NR Entity | Description | +| --- | --- | +| {project-name}-{env-name}-newrelic-app | Default Entity name coming from PHP's NR configuration, captures backend-gateway transactions, sometimes also Backoffice and CLI transactions. | +| YVES-{store-name} ({env-name}) | Yves | +| GLUE-{store-name} ({env-name}) | Glue, for example GLUE-US (docker.production) | +| ZED-{store-name} ({env-name}) | Zed / Backoffice | +| MERCHANT_PORTAL-{store-name} ({env_name}) | Merchant Portal | + +
    + +### How to integrate New Relic + +Minor adjustments are necessary on a project level to get the full benefit from the Spryker New Relic eco module: + +- Install the module and configure Spryker apps (Yves, Zed, etc) as separate New Relic entities: [Configure services](/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic). +- Grouping console commands in New Relic by names: [New Relic transactions grouping by queue names](/docs/dg/dev/guidelines/performance-guidelines/elastic-computing/new-relic-transaction-grouping-by-queue-names.html). + +With proper integration, as described in the above-mentioned documentation articles, New Relic "Entities" within an account look like this: + +Main New Relic screen after login. Highlighted with red: Account selector and "Services - APM" list of New Relic entities: + +![Main New Relic screen after login with account selector and Services - APM list](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-main-screen.png) + +New Relic "APM & Services" list and APM account selector: + +![APM and Services list and APM account selector](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-apm-services-list.png) + +## 2. Review high-level metrics (1–7 day window) + +As described in [The approach](#the-approach) section, each New Relic Entity (application) has a set of the most important metrics that are shown for each transaction, and some of them for an Entity as a whole. + +These metrics let you quickly get an idea of application performance state and assess how good or bad it is, and whether or not deeper investigation or intervention is required. + +| Metric | Where in NR | What it tells you | +| --- | --- | --- | +| [Apdex](https://docs.newrelic.com/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction/) | Summary page | Overall user satisfaction score calculated by New Relic. | +| Avg response time | Summary page | Average response time, including all very fast and very long queries that may be rare. Gives high level understanding of the "temperature", but does not answer the questions like "are there problems" or "what is the impact". | +| [Error rate %](https://docs.newrelic.com/docs/errors-inbox/errors-inbox/) | Summary page > Errors, or "Errors (errors inbox)" in the left menu | Spryker sends only PHP-generated exceptions to New Relic. Ideally, there should be no errors at all, but if it is low and does not affect much of requests, maybe the problem is not that critical. | +| Throughput (rpm) | Summary page | Information on traffic volume (the average value and the graph over the period) allows to correlate potential performance problems with increased traffic or refuting this correlation. | +| Top 5 slowest transactions | Transactions > Sort by "Most time consuming" | Where is the time being spent the most. Calculated as the number of requests multiplied by the average response time. | +| Top 5 slowest DB queries | Databases > Sort by "Most time consuming" | DB bottlenecks. | + +New Relic Summary page with Apdex, response time, throughput, and error rate: + +![New Relic Summary page with Apdex, response time, throughput, error rate](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-summary-page.png) + +Transactions page sorted by "Most time consuming" — look for the top 5: + +![Transactions page sorted by Most time consuming](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-transactions-page.png) + +Databases tab sorted by "Most time consuming". For the Yves app it is mostly Redis/ValKey, for the Back Office or Gateway — RDS SQL queries: + +![Databases tab sorted by Most time consuming](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-databases-tab.png) + +### Web transactions vs CLI + +{% info_block infoBox "Tip" %} + +Check Web transactions vs Non-web (CLI) separately—CLI includes schedulers, consumers, data importers. A slow CLI job does not affect storefront Apdex, but can exhaust DB connections or CPU. Sometimes, there could be options like "Custom" and "Uri", which are other views on web requests and are not used much within Spryker applications monitoring. + +{% endinfo_block %} + +The Web/non-web toggle is at the top of almost every page: + +![Web and non-web toggle at the top of almost every page](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-web-nonweb-toggle.png) + +### Thresholds - How to decide what to analyze + +At this point, you may be distracted by the amount of available data and unsure which transactions to investigate deeper. + +Official documentation for how to diagnose transactions with an explanation about different sorting options is available here: [Diagnose slow transactions](https://docs.newrelic.com/docs/apm/apm-ui-pages/monitoring/transactions-page-find-specific-performance-problems/). + +There is no single "golden rule" here in terms of exact numbers, but there is an approach that helps to prioritize: + +1. **Start by checking the top 3 to 5 for each of those lists:** + - **"Most time-consuming"**—combined metric of the number of requests per transaction with an average duration, meaning how long (in % of the selected period) the app was processing that particular transaction time. The top 5 are good candidates for further analysis. + - **"Slowest"**—slightly different perspective of transactions sorted by average response time over the period. The top 5 in this list are the second priority, because here the amount of requests is not taken into account, meaning that a transaction which is slow on average may not produce that big an impact that would justify further investigation. + - **"Highest error rate"**—transactions that have the highest % of errors out of all registered requests. Ideally, there should be no errors (uncaught exceptions), but in real life application, there are always some errors happening; the problem is—how many? + +The "Sort by" dropdown lets you switch between those sorting modes: + +![The Sort by dropdown to switch between sorting modes](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-sort-by-dropdown.png) + +2. **Review the top indicators**—for each transaction (from the candidates defined in the previous step), click on each one and check: + 1. Average response time—gives an idea of how good it is on average, but not that useful, because you may have too broad a spectrum of response times, for example from a few dozen milliseconds to even a minute. + 2. Median—it is 50th percentile, it means half of the requests were faster and the other half—slower. + 3. 95th, 99th percentile—how fast were 95% and 99% of all requests. + 4. Average error rate and [Apdex](https://docs.newrelic.com/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction/). + +Transaction statistics — high-level performance indicators. The same data can be collected by executing a New Relic query provided in the [Useful New Relic query](#useful-new-relic-query) section below for multiple transactions: + +![Transaction statistics - high-level performance indicators](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-transaction-statistics.png) + +3. Now, depending on business needs, priorities, and time available, you may decide which transactions are the most critically affected in terms of poor performance. That approach of reviewing summaries helps to save time on avoiding analyses where it is not necessary and concentrate on problems that are really impactful (if any). You can translate those metrics to more human language as: + 1. Median (half of all requests, 50%) response time is above 2 seconds. + 2. **95%** of requests are faster than X1 seconds (New Relic metric P95 showing the time bucket that 95% of all requests fall into, for example, number of requests that are faster than X seconds). + 3. **99%** of requests are faster than X2 seconds (P99, 99th percentile, 99% of requests faster than ... seconds). + 4. **Only 4%** of requests are in a range from X1 to X2. + 5. While the maximum response times visible for sampled transactions in the **Traces** section may be to even bigger numbers, for example, X3 seconds, you know that **only 1%** of requests fall into this range from X2 to X3, because you know what the 99% boundary is. + +{% info_block infoBox "Advice" %} + +The provided numbers are just examples. Exact thresholds should be discussed according to project quality requirements to assess how critical it is. Despite "the faster the better", in real-life projects, it is not always viable to spend resources on optimizing 1% of all requests that are slower than some acceptable number like 1.5 seconds. + +{% endinfo_block %} + +## 3. Drill into traces + +There is a good official guide explaining how to read and analyze transactions in New Relic: [Diagnose slow transactions](https://docs.newrelic.com/docs/apm/apm-ui-pages/monitoring/transactions-page-find-specific-performance-problems/). + +After the previous step, you should already have an idea of which apps and which transactions do not perform as well as desired and by how much. + +The next step is to go deeper into actual Spans (the components of a Trace) to understand where the actual bottlenecks are and why it happens. Despite the unique nature of each project, most of the performance-related issues are coming from a limited set of bad practices or patterns described below. + +| Pattern | What you see in a Trace | Likely cause | +| --- | --- | --- | +| One huge/slow DB query | Single span 2+ seconds | Missing index, full table scan | +| Hundreds of small DB calls | 50–1000+ identical or similar short spans | N+1 query—loop hitting DB per item | +| Extreme outliers | P99 is 5x+ larger than P95 | Conditional code paths, rare data shapes | +| Timeouts | MAX is 10x+ larger than P99 | Infrastructure hang, PHP-FPM starvation | +| Slow external call | HTTP/external span taking seconds | Third-party timeout (payment, search) | +| High app time, low DB | 90% time in app spans, a few DB calls | CPU-bound: hydration, serialization, rendering | +| High DB ratio, few queries | 50% DB time, <20 SQL queries | Heavy unoptimized queries, lack of "cached" information in the key-value storage. | + +Slow external request — in this case, a query to the OpenSearch search engine. The two most popular reasons are heavy custom queries or undersized infrastructure for the workload/traffic: + +![Slow external request trace](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-slow-external-request.png) + +Example of quick operations processed in a loop many times. Such a case may also be about DB queries, HTTP requests, or any heavy logic: + +![Example of quick operations processed in a loop many times](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-loop-operations.png) + +### When there are no outliers + +Sometimes, when examining a slow example trace, you may notice there is no single outlier—all components (spans) are more or less taking the same time to execute. + +**What it means (most likely):** + +- A compute node is overwhelmed or undersized for the task. +- Misconfigured application on a ground base level—for example: Composer autoload is not optimized, URL or class cache is not built, etc. +- Short period of multiple events overlapping, such as: deployment (old containers were removed, while new ones are not yet handling the load), bot activity, wrong configuration. +- Last option: all the logic is not efficient and is heavy (seldom). + +## 4. Errors Inbox + +When the error rate is elevated: + +1. Go to Errors Inbox and group by error message. +2. Check first/last seen—does it ring a bell, is it something that appeared after the recent deploy? +3. Open example occurrences and review the stack trace. +4. Correlate with deploy events (known from AWS, communication with a development team, or other sources). + +The error inbox and "Group by" dropdown help you understand what kind of errors happen most often and where: + +![The error inbox and Group by dropdown](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-errors-inbox.png) + +**A few useful tips:** + +- Uncheck `error.message`—it is a full message that may contain lots of details and unique content such as hashes, which does not allow for effective grouping. `error.class` provides enough high-level information for grouping. +- Sometimes it is beneficial to add such attributes as: + - `request_uri`—to understand where an error happens more often, potentially spotting problematic pages. + - `request.headers.referrer`—where the requesting client came from before the error. + - `request.headers.userAgent`—to check whether most of the errors are generated by one or a few user agents like bots or scanners. +- There is no strict threshold here, look for any outliers. + +Clicking on each error title from the "Error Inbox" screen leads to the detailed Error information page, showing useful context: + +- When was the first and last time the error happened. +- Transaction URLs where it happens the most. +- Stack trace showing the exact execution path in an app that led to the error. +- Occurrences over the period—how often it repeats. + +Detailed example of a captured exception with detailed information: + +![Detailed example of the captured exception with detailed information](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-error-detail.png) + +## 5. Iterate (Iceberg analogy) + +After fixing the top bottlenecks: + +- Re-run previous steps within 24–48 hours. +- The next bottleneck becomes more visible after the biggest one is removed, due to how APM tools are sampling and filtering traces. +- Track progress: compare Apdex and P95 week-over-week. + +## Useful New Relic query + +Almost on each page in New Relic, there is a tab at the bottom called "Query your data" which lets you execute New Relic queries (NR query language similar to SQL) against a selected account and application: + +![New Relic Query your data tab](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-query-your-data.png) + +New Relic query and results table. The "Chart type" selector lets you view results as a table, graph, JSON, or CSV: + +![New Relic Query results table with Chart type selector](https://spryker.s3.eu-central-1.amazonaws.com/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting/newrelic-query-results.png) + +The following NRQL query provides a full metrics snapshot for transactions: + +```sql +-- NRQL: Full metrics snapshot +SELECT + count(*) as 'request_count', + average(duration) as 'avg_duration', + percentile(duration, 50, 95, 99, 99.9) as 'duration_percentiles', + max(duration) as 'max_duration', + average(databaseDuration) as 'avg_db_duration', + percentile(databaseDuration, 50, 95, 99) as 'db_percentiles', + max(databaseDuration) as 'max_db_duration', + average(databaseCallCount) as 'avg_db_calls', + max(databaseCallCount) as 'max_db_calls', + average(externalDuration) as 'avg_external_duration', + percentile(externalDuration, 95, 99) as 'external_percentiles', + filter(count(*), WHERE error IS true) as 'error_count', + apdex(duration, t: 0.5) + FROM Transaction + WHERE appName = '{APP_NAME}' -- auto-complete, helps based on selected account + SINCE 7 days ago + FACET name + LIMIT 20 +``` + +Replace `{APP_NAME}` with the actual New Relic Entity name for your application. + +## Bottleneck detection rules (quick reference) + +When looking at New Relic dashboards, use these rules of thumb to quickly identify where the "smoke" is coming from. Think of these as diagnostic shortcuts rather than rigid math equations. + +**How to read these tables:** + +- **P95/P99/max:** Focus on these to see the "worst-case" reality for your users. +- **The Ratio:** If one part of the bar chart (span)—for example, database query—takes up more than half the time, that is your primary bottleneck. +- **The "N+1" Check:** In Spryker, strive for lean requests. If you see dozens of database (RDS, Redis/ValKey or ElasticSearch/OpenSearch) queries for a single page load, look for missing "Eager Loading" in your Query Containers, mget requests for key-value or restructuring search queries to retrieve data from one query instead of multiple. + +### User experience and scale + +| Red Flag | Trigger | What is likely happening | +| --- | --- | --- | +| The "Sluggish" Route | P95 is over 1s | The vast majority of users are feeling a delay. The code path is generally inefficient. | +| High Impact Bottleneck | Slow speeds affecting >10% of traffic | This is your top priority. A popular page (like Homepage or Catalog) is slowing down the whole site. | +| The rare events | P99 is 5x slower than P95 | Only a few users are hit, but they are hit hard. Likely a rare "edge case" or a very specific, huge B2B customer account or inefficient logic that is triggered rarely. | + +### Database and data strategy + +| Red Flag | Trigger | What is likely happening | +| --- | --- | --- | +| Database Heavy | DB takes up >50% of total request time | Your PHP code is waiting on the database. You likely need better indexes or query optimization. | +| The "N+1" Trap | More than 50 DB calls per request | **Classic Spryker Issue:** You are likely fetching items in a loop instead of using a Join or a multi-get. | +| Cache Miss Storm | High DB time, but very few DB calls | The DB is working hard on just a few things. Data that *should* be in Redis/Key-Value is fetched from backend-gateway, forcing a slow DB lookup. | + +### Infrastructure and external services + +| Red Flag | Trigger | What is likely happening | +| --- | --- | --- | +| Infrastructure Hang | Max time is 10x slower than P99 | Can mean that PHP-FPM is reaching its limit under the load, or rare edge cases. | +| Third-Party Calls | External calls >70% of time + Errors | It is not your code; it is the payment provider, ERP, or shipping API that is failing or lagging. But you have the power of moving this logic to a background job. | +| Resource Exhaustion | High App time, but NO DB or External calls | The server is "thinking" too hard. Likely heavy Twig rendering or complex price calculations hitting CPU close to limits. | + +## Resources + +- [New Relic Apdex - Explanation and How to use](https://docs.newrelic.com/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction/) +- [Troubleshooting performance issues](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html) diff --git a/docs/dg/dev/guidelines/performance-guidelines/bot-control.md b/docs/dg/dev/guidelines/performance-guidelines/bot-control.md index ccd08d1babc..903bfc5e90f 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/bot-control.md +++ b/docs/dg/dev/guidelines/performance-guidelines/bot-control.md @@ -40,6 +40,12 @@ Filter out IP ranges based on geoip databases, user agents, URLs, or any combina The most efficient, dynamic, and feature-rich solutions are tools like **Akamai, Cloudflare**-like services for bot control, not only to granularly control official bots (for example social networks and commercial LLMs), but also those unofficial - crawlers, scanners, and malicious ones. +{% info_block infoBox "Bot traffic amplifies compression misconfigurations" %} + +When a CDN or traffic management solution is deployed in front of Spryker, unfiltered bot traffic increases the volume of origin pull requests. If HTTP response compression is not properly configured between the CDN and the Spryker frontend container, each bot request triggers a full uncompressed response over the public network. This can significantly increase data transfer volume and response latency. Configuring both bot filtering *and* proper compression headers is essential. For details, see [CDN and traffic management integration](/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html). + +{% endinfo_block %} + ## The problem with nginx-based solutions It requires a custom nginx configuration, which leads to the necessity of creating a custom [docker/sdk](https://github.com/spryker/docker-sdk) branch and using it in the cloud environment. But that approach **moves the responsibility** of maintaining this branch from Spryker to a partner or customer (for updates, upgrades, etc). diff --git a/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.md b/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.md new file mode 100644 index 00000000000..71f7067acd3 --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.md @@ -0,0 +1,217 @@ +--- +title: CDN and traffic management integration +description: Learn how to configure CDN and traffic management solutions like Akamai or Cloudflare to work correctly with Spryker's nginx compression, and how to avoid unnecessary data transfer overhead. +last_updated: Feb 11, 2026 +template: concept-topic-template +related: + - title: Deploy file reference + link: docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html + - title: Infrastructure and worker configuration guidelines + link: docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.html + - title: Frontend performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.html + - title: Bot control + link: docs/dg/dev/guidelines/performance-guidelines/bot-control.html +--- + +When a CDN or traffic management solution (for example, Akamai, Cloudflare, or Fastly) sits in front of a Spryker application, HTTP response compression must be correctly coordinated between the CDN and the Spryker frontend container. Misconfiguration can result in responses leaving the infrastructure uncompressed, which significantly increases data transfer volume, response latency, and infrastructure overhead. + +This document explains the request flow, how compression negotiation works, common pitfalls, and how to configure both sides for optimal performance. + +## Request flow with a CDN + +When a CDN is deployed in front of a Spryker application, the request flow is as follows: + +```text +Client browser ──► CDN (Akamai/Cloudflare/...) ──► Load Balancer (ALB/NLB) ──► Frontend (Nginx) ──► Application (PHP-FPM) +``` + +1. The **client browser** sends a request with `Accept-Encoding: gzip, deflate, br`, indicating supported compression encodings. +2. The **CDN** terminates the client connection and makes an *origin pull* request to the load balancer. The `Accept-Encoding` header the CDN sends on origin pulls depends on the CDN configuration and may differ from the client's original header. +3. The **load balancer** (AWS ALB/NLB) passes the request through to the frontend container. Load balancers do not compress responses. +4. The **Frontend (Nginx)** container either serves a static asset or proxies the request to an application container (Yves, Zed, Glue, or others) through FastCGI. Based on the `Accept-Encoding` header received, the Frontend container compresses the response before sending it back. + +{% info_block warningBox "The frontend container is the compression point" %} + +The frontend (Nginx) container configured through the `assets:` section in the deploy file is responsible for compressing both static assets and dynamic application responses. This is the only compression point within the Spryker infrastructure. Load balancers (AWS ALB/NLB) do not compress responses. If the frontend container is not configured to allow compression, all responses leave the infrastructure uncompressed even if client (browser or CDN) supports compression, increasing data transfer volume over the public network between the origin and the CDN. + +{% endinfo_block %} + +## How compression negotiation works + +HTTP compression relies on content negotiation between the client and the server using two headers: + +- **`Accept-Encoding`** (request header): the client tells the server which compression encodings it supports (for example, `gzip`, `br`, `deflate`). +- **`Content-Encoding`** (response header): the server tells the client which encoding was applied to the response body. + +When a CDN sits between the client and the origin, there are two separate negotiation cycles: + +1. **Client to CDN**: the browser sends `Accept-Encoding: gzip, deflate, br`. The CDN may serve a cached compressed response directly. +2. **CDN to origin (origin pull)**: the CDN sends its own `Accept-Encoding` header to the origin. This header depends on the CDN's configuration, not the client's request. + +### Common pitfall: CDN does not request compression from origin + +Many CDNs, by default, do not forward the client's `Accept-Encoding` header to the origin, or they send a limited version. For example: + +- A CDN might send `Accept-Encoding: gzip` but not include `br` (Brotli). +- A CDN might strip the `Accept-Encoding` header entirely on origin pulls. + +In these scenarios, even if the Spryker frontend container has Brotli enabled, it never activates because no origin request asks for it. The CDN then receives an uncompressed response, compresses it itself (using gzip), and delivers it to the client. While the client receives a compressed response, the data between the origin and the CDN flows uncompressed, which means: + +- All data flows uncompressed over the public network between the origin and the CDN edge, increasing data transfer volume and response latency. +- For typical e-commerce HTML pages, uncompressed responses can be 10-30x larger than compressed ones, significantly increasing infrastructure overhead. +- The CDN must spend CPU resources compressing every origin response. + +{% info_block infoBox "CDN caching and bot filtering reduce the impact" %} + +A properly configured CDN mitigates the impact of uncompressed origin responses through two mechanisms: + +- **Caching**: The CDN caches responses at the edge. Subsequent requests for the same page are served from the cache without an origin pull, so the uncompressed transfer only happens on cache misses or cache refreshes. +- **Bot filtering**: CDN-level bot management reduces the volume of origin pulls by filtering out unwanted bot traffic before it reaches the origin. + +However, if the CDN is not configured to cache effectively (for example, low cache hit rates for dynamic pages) or does not filter bot traffic, the origin handles a high volume of requests. In this case, every origin pull transmits uncompressed data over the public network, which has the same effect as having no CDN at all for data transfer volume and latency. Properly configuring both compression *and* CDN caching and bot filtering is essential for optimal performance. + +{% endinfo_block %} + +## Configuring the CDN for optimal compression + +### Required: forward Accept-Encoding to origin + +Configure the CDN to send `Accept-Encoding: br, gzip, deflate` on all origin pull requests. This lets the Spryker frontend container compress responses at the origin, reducing data transfer through the load balancer. + +#### Akamai + +In the Akamai Property Manager, configure the origin server behavior: + +1. In the **Origin Server** behavior, verify that the **Allow Clients To Send** setting includes `Accept-Encoding`. +2. Add a **Modify Outgoing Request Header** rule that sets or appends the `Accept-Encoding` header: + - **Action**: Modify + - **Header Name**: `Accept-Encoding` + - **Header Value**: `br, gzip, deflate` +3. In the **Content Compression** behavior, set **Enable Compression** to *on* and verify **Brotli Support** is enabled. + +{% info_block infoBox "Akamai and Brotli" %} + +By default, Akamai may not include `br` in the `Accept-Encoding` header on origin pulls. This means Brotli compression configured in the Spryker frontend container does not activate, even though it is available. Explicitly configuring Akamai to request Brotli from the origin can improve compression ratios significantly compared to gzip alone. + +{% endinfo_block %} + +#### Cloudflare + +Cloudflare automatically handles compression between the client and Cloudflare's edge. For origin-to-edge compression: + +1. In the **Speed** > **Optimization** settings, verify that compression is enabled. +2. Cloudflare respects the origin's `Content-Encoding` header. Make sure the Spryker frontend container has compression enabled (both gzip and Brotli) so that Cloudflare receives pre-compressed responses. +3. Under **Network**, review the request headers Cloudflare sends to the origin and confirm `Accept-Encoding` includes `br, gzip`. + +#### Other CDN providers + +For other CDN or traffic management solutions, verify the following in the provider's configuration: + +- The `Accept-Encoding` header on origin requests includes `br, gzip, deflate`. +- The CDN does not strip or modify the `Content-Encoding` response header from the origin. +- The CDN does not re-compress already-compressed responses (double compression). + +### Required: configure Spryker compression + +In the deploy file, enable both gzip and Brotli compression with `static: true` to compress both static assets and dynamic responses: + +```yaml +assets: + image: spryker/nginx-brotli:latest + mode: production + compression: + gzip: + static: true + level: 5 + brotli: + static: true + level: 5 +``` + +{% info_block warningBox "Avoid static: only for dynamic content" %} + +Setting `static: only` disables on-the-fly compression. With this setting, only pre-compressed static files (`.gz`, `.br`) are served compressed. Dynamic responses from PHP applications (HTML pages, API responses, JSON) are sent uncompressed. If a CDN is in front of the application, this means all dynamic content leaves the infrastructure uncompressed, increasing data transfer volume and response latency. + +Use `static: true` to enable compression for both static and dynamic content. + +{% endinfo_block %} + +For details on all compression options, see [Deploy file reference - assets](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html). + +## Verifying compression is working + +### Test origin compression directly + +To verify that the Spryker frontend container compresses responses correctly, send requests directly to the load balancer, bypassing the CDN: + +**Test Brotli compression:** + +```bash +curl -s -o /dev/null \ + -H "Accept-Encoding: br" \ + -H "Host: www.your-shop.com" \ + -D - https://your-alb-endpoint.region.elb.amazonaws.com/your-page | grep -i content-encoding +``` + +**Test gzip compression:** + +```bash +curl -s -o /dev/null -w "Size: %{size_download} bytes\nContent-Encoding: " \ + -H "Accept-Encoding: gzip" \ + -H "Host: www.your-shop.com" \ + -D - https://your-alb-endpoint.region.elb.amazonaws.com/your-page | grep -i content-encoding +``` + +**Test without compression:** + +```bash +curl -s -o /dev/null -w "Size: %{size_download} bytes\n" \ + -H "Accept-Encoding: identity" \ + -H "Host: www.your-shop.com" \ + https://your-alb-endpoint.region.elb.amazonaws.com/your-page +``` + +**Expected results:** + +- With `Accept-Encoding: br`, the response should include `Content-Encoding: br` and be significantly smaller (typically 20-40x compression for HTML). +- With `Accept-Encoding: gzip`, the response should include `Content-Encoding: gzip` and be approximately 7-10x smaller. +- Without compression, the response is the full uncompressed size. + +If the Brotli or gzip test returns the same size as the uncompressed test, compression is not active and needs to be configured. + +### Verify CDN-to-origin compression + +Check your CDN's analytics or logs to verify what `Accept-Encoding` header is sent on origin pulls and what `Content-Encoding` is received from the origin: + +- **Akamai**: Use the Akamai Diagnostic Tools or enable origin debug headers. +- **Cloudflare**: Check the `cf-cache-status` and origin response headers in the dashboard. + +## Understanding compression impact on different response types + +Not all response types benefit equally from compression. Understanding the traffic composition helps prioritize optimization: + +| Response type | Typical compression ratio (gzip) | Typical compression ratio (Brotli) | Notes | +| --- | --- | --- | --- | +| HTML pages | 7-10x | 20-40x | Largest impact. HTML pages from Yves (product pages, category pages, search results) are typically the biggest contributor to data transfer volume. | +| JSON/API responses | 5-10x | 10-20x | Glue API responses and AJAX calls benefit significantly. | +| CSS/JS (pre-built) | 3-5x | 4-7x | Usually served from pre-compressed files with `static: true` or `static: only`. | +| Images (JPEG, PNG, WebP) | 1x (no benefit) | 1x (no benefit) | Already compressed formats. Do not apply HTTP compression to images. | +| SVG | 3-5x | 5-10x | XML-based, compresses well. | + +{% info_block infoBox "Dynamic responses dominate data transfer" %} + +In typical e-commerce deployments, dynamically generated HTML pages account for the vast majority of response data volume, while static assets (JS, CSS, images) contribute a relatively small share. This is because static assets are often cached by the CDN after the first request, while HTML pages are generated on each origin pull. Ensuring compression is active for dynamic responses is critical for reducing data transfer overhead and response latency. + +{% endinfo_block %} + +## Best practices summary + +| Practice | Description | +| --- | --- | +| Enable both gzip and Brotli | Configure both engines with `static: true` in the deploy file. Use `spryker/nginx-brotli:latest` image. | +| Use `static: true`, not `static: only` | Ensure dynamic responses are compressed on the fly, not only pre-compressed static files. | +| Configure CDN to send `Accept-Encoding: br, gzip, deflate` | Verify the CDN sends compression headers on origin pulls. Do not assume the client's headers are forwarded. | +| Verify compression with direct ALB tests | Bypass the CDN and test compression directly against the load balancer to confirm nginx is compressing. | +| Prefer Brotli over gzip when possible | Brotli provides significantly better compression ratios, especially for HTML content, reducing data transfer volume further. | +| Review CDN cache behavior | Ensure the CDN caches compressed variants correctly. The `Vary: Accept-Encoding` header (automatically added by nginx) is required for correct caching. | diff --git a/docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.md new file mode 100644 index 00000000000..49791b986f2 --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.md @@ -0,0 +1,837 @@ +--- +title: Custom code performance guidelines +description: Learn how to implement performant custom code in Spryker, including caching strategies, background processing, external system integration, and Quote calculator optimization. +last_updated: Dec 16, 2025 +template: concept-topic-template +related: + - title: General performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html + - title: Architecture performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html + - title: External HTTP requests + link: docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html + - title: Key-Value storage performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.html + - title: Database performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.html +--- + +Custom code implementations are where many performance issues originate. While Spryker provides a performant foundation, custom features can introduce bottlenecks if not designed properly. These guidelines help you implement high-performance custom functionality in Spryker projects. + +## Cache heavy logic appropriately + +Caching is a powerful optimization tool, but choosing the right caching strategy and storage location is critical for performance and maintainability. + +### Choosing cache storage + +Different data types require different caching approaches: + +**1. Key-Value storage (Redis or Valkey):** + +**Best for:** +- Frequently accessed data needed across multiple requests +- Data that changes occasionally (minutes to hours) +- Small to medium-sized values (<1MB) +- Data needed by multiple application instances + +**Example use cases:** +- Product prices and stock availability +- Customer session data +- API rate limiting counters +- Feature flags and configuration + +```php +// ✅ Good: Cache frequently accessed product data +public function getProductData(string $sku): array +{ + $cacheKey = "product:data:{$sku}"; + $ttl = 3600; // 1 hour + + $data = $this->storageClient->get($cacheKey); + if ($data === null) { + $data = $this->fetchProductFromRemoteLocation($sku); // or heavy processing, e.g. images processing, etc + $this->storageClient->setex($cacheKey, $ttl, json_encode($data)); + return $data; + } + + return json_decode($data, true); +} +``` + +**2. Database tables (persistent cache):** + +**Best for:** +- Pre-computed aggregations and reports +- Data that changes infrequently (hours to days) +- Large datasets that would exhaust memory cache (for example hundreds of gigabytes and more) +- Historical data requiring complex queries + +**Example use cases:** +- Customer order statistics +- Inventory reservation tables +- Pre-calculated shipping rates + +```php +// ✅ Good: Maintain aggregation table for complex calculations +public function updateCustomerOrderStatistics(int $customerId): void +{ + $stats = SpyCustomerStatisticsQuery::create() + ->filterByFkCustomer($customerId) + ->findOneOrCreate(); + + $orderData = SpySalesOrderQuery::create() + ->filterByFkCustomer($customerId) + ->select(['TotalOrders', 'TotalSpent', 'AverageOrderValue']) + ->withColumn('COUNT(*)', 'TotalOrders') + ->withColumn('SUM(grand_total)', 'TotalSpent') + ->withColumn('AVG(grand_total)', 'AverageOrderValue') + ->findOne(); + + $stats->fromArray($orderData); + $stats->setUpdatedAt(new DateTime()); + $stats->save(); +} +``` + +**3. Filesystem cache:** + +Warning: it is important to remember that the filesystem is NOT shared between services and containers. +Each application (Yves, the Back Office, Glue, etc.) and each container (even within the same application, for example, Yves) has its own independent filesystem layer on top of the base Docker image. However, files created during the Docker image build process are part of the base image itself and are shared across all containers and services using that image. + +Using the [Flysystem](https://github.com/thephpleague/flysystem) abstraction layer (PHP library) - it is easy to store files on a remote shared locations, such as S3 buckets or similar cloud storages. + +**Best for:** +- Generated assets (compiled CSS, optimized images) +- Large computed results that don't fit in memory +- Data that rarely changes (days to weeks) +- Static content that can be regenerated + +**Example use cases:** +- Twig template compilation cache, generated during base Docker image build process +- Composer autoloader cache +- Generated configuration files +- Compiled translation files + + +### Cache invalidation strategies + +**1. Time-based expiration (TTL):** + +The simplest approach - cache expires after fixed time: + +```php +// Good for data that becomes stale predictably +$this->storageClient->setex("prices:{$sku}", 300, $priceData); // 5 minutes +``` + +**Best for:** +- Data with predictable staleness tolerance +- External API responses +- Computed values without direct update triggers + +**2. Event-driven invalidation:** + +Invalidate cache when underlying data changes by explicitly removing stale cache record. + +```php +// Event listener that invalidates cache on data changes +class CustomCacheInvalidationListener +{ + public function handleDataUpdate(EntityTransfer $entityTransfer): void + { + // Invalidate relevant cache entries + // ... custom logic to build a cache key + + $this->storageClient->delete($cacheKey); + } +} + +// Register listener to trigger on entity updates +protected function getEventListenerCollection(EventCollectionInterface $eventCollection): EventCollectionInterface +{ + // event name may be selected based on Propel entity based event names, check underlying Propel entity classes for exact names + + $eventCollection->addListener('Entity.entity.update', new CustomCacheInvalidationListener()); + return $eventCollection; +} +``` + +**Best for:** +- Data synchronized with database records +- Critical data requiring immediate consistency +- Cache that must reflect real-time changes + +**3. Write-through cache:** + +Update cache simultaneously with data update. We recommend updating cache only after the data is saved to prevent cases of cache reflecting not saved data. + +```php +// ✅ Good: Update cache when writing data +public function updateProductPrice(string $sku, float $price): void +{ + // Update database + $product = SpyProductQuery::create() + ->filterBySku($sku) + ->findOne(); + $product->setPrice($price); + $product->save(); + + // Update cache immediately + $cacheKey = "product:price:{$sku}"; + $this->storageClient->setex($cacheKey, 3600, $price); +} +``` + +This example is a simplified version of what Publish & Sync does, but omitting the queue system. In high-load environments, this approach can also be beneficial for some entities. + +**Best for:** +- Data requiring high read performance +- Frequently updated values +- Scenarios where cache misses are expensive + +### Cache anti-patterns + +**❌ Caching without expiration:** + +```php +// Bad: Cached data never expires +$this->storageClient->set("user:preferences:{$userId}", $prefs); +``` + +**❌ Caching entire large objects:** + +```php +// Bad: Caching 10MB order with all related data +$this->storageClient->set("order:full:{$id}", serialize($orderWithAllRelations)); +``` + +**✅ Better: Cache specific attributes:** + +```php +// Good: Cache only needed data for 5 minutes +$orderSummary = [ + 'id' => $order->getIdSalesOrder(), + 'total' => $order->getGrandTotal(), + 'status' => $order->getFkOmsOrderStatus(), +]; +$this->storageClient->setex("order:summary:{$id}", 300, json_encode($orderSummary)); +``` + +**❌ Over-caching rarely accessed data:** + +```php +// Bad: Caching data accessed once per week +$this->storageClient->setex("admin:report:monthly", 86400, $hugeReport); +``` + +## Avoid heavy processing in web requests + +Web requests must respond quickly - typically under 500 ms. Heavy processing operations should be executed in background jobs to maintain user experience and system stability. + +### Operations that belong in background jobs + +**1. File processing:** + +```php +// ❌ Bad: Process file upload during request +public function uploadProductImages(array $files): void +{ + foreach ($files as $file) { + $image = $this->imageProcessor->resize($file, [800, 600]); + $thumbnail = $this->imageProcessor->resize($file, [200, 200]); + $this->imageProcessor->optimize($image); + $this->imageProcessor->optimize($thumbnail); + $this->saveToStorage($image, $thumbnail); + } +} + +// ✅ Good: Queue for background processing +public function uploadProductImages(array $files): void +{ + foreach ($files as $file) { + $this->queueClient->sendMessage('image-processing', [ + 'file_path' => $this->saveTemporaryFile($file), + 'product_id' => $this->getProductId(), + ]); + } +} +``` + +**2. PDF generation:** + +```php +// ❌ Bad: Generate PDF synchronously +public function generateInvoicePdf(int $orderId): Response +{ + $pdf = $this->pdfGenerator->create($orderId); // Takes 5-10 seconds + return new Response($pdf, 200, ['Content-Type' => 'application/pdf']); +} + +// ✅ Good: Generate asynchronously, notify when ready +public function requestInvoicePdf(int $orderId): Response +{ + $this->queueClient->sendMessage('pdf-generation', ['order_id' => $orderId]); + + return new JsonResponse([ + 'message' => 'PDF generation started', + 'status_url' => "/api/invoice/{$orderId}/status", + ]); +} +``` + +**3. Email sending:** + +```php +// ❌ Bad: Send emails synchronously +public function placeOrder(QuoteTransfer $quote): OrderTransfer +{ + $order = $this->createOrder($quote); + + // Blocks order placement for 2-5 seconds + $this->emailService->sendOrderConfirmation($order); + $this->emailService->sendInternalNotification($order); + + return $order; +} + +// ✅ Good: Queue emails for background sending +public function placeOrder(QuoteTransfer $quote): OrderTransfer +{ + $order = $this->createOrder($quote); + + // Queue email events + $this->eventFacade->trigger('Order.placed', $order); + + return $order; +} +``` + +**4. Data imports and synchronization:** + +```php +// ❌ Bad: Import during admin action +public function importProductsAction(): Response +{ + $products = $this->fetchFromExternalSystem(); // 30+ seconds + $this->importProducts($products); + + return new Response('Import completed'); +} + +// ✅ Good: Trigger background import job +public function importProductsAction(): Response +{ + // Example: implement your own job scheduling logic + $jobId = $this->scheduleImportJob('products'); + + return new JsonResponse([ + 'message' => 'Import job scheduled', + 'job_id' => $jobId, + 'status_url' => "/admin/import/status/{$jobId}", + ]); +} +``` + +### Implementing background processing + +For more information about Spryker's queue system, see [Queue](/docs/dg/dev/backend-development/data-manipulation/queue/queue.html). + +**Using Spryker's Publish & Sync:** + +```php +// Trigger event that will be processed by queue workers +$this->eventFacade->trigger( + 'Product.image.process', // example, non-existing event name + (new EventEntityTransfer()) + ->setId($productId) + ->setAdditionalValues(['file_path' => $filePath]) +); +``` + +**Custom queue implementation:** + +```php +// Send message to custom queue +$queueSendTransfer = new QueueSendMessageTransfer(); +$queueSendTransfer->setBody(json_encode([ + 'task' => 'process_image', + 'product_id' => $productId, + 'file_path' => $filePath, +])); + +$this->queueClient->sendMessage('custom-processing', $queueSendTransfer); +``` + +**Worker processing:** + +```php +// Queue worker processes messages +class ImageProcessingConsumer implements QueueMessageProcessorInterface +{ + public function processMessages(array $queueMessages): array + { + foreach ($queueMessages as $queueMessage) { + $payload = json_decode($queueMessage->getBody(), true); + + try { + $this->imageProcessor->process( + $payload['file_path'], + $payload['product_id'] + ); + $queueMessage->setAcknowledge(true); + } catch (\Exception $e) { + $queueMessage->setReject(true); + $this->logger->error('Image processing failed', [ + 'error' => $e->getMessage(), + 'payload' => $payload, + ]); + } + } + + return $queueMessages; + } +} +``` + +## Manage external system dependencies + +External systems (ERP, SAP, warehouse management, payment gateways) often cannot scale at the same pace as web applications. Integration design must account for this disparity. + +### The scalability mismatch problem + +**Typical scenario:** + +- Your Spryker shop: Handles 100 requests/second during peak +- External ERP system: Handles 10 requests/second max +- Real-time integration: Every order placement calls ERP + +**Result:** +- ERP becomes bottleneck +- Order placement slows to ERP speed +- System failures when ERP is unreachable +- Cascading timeouts affect other operations + +### Decoupling strategies + +**1. Asynchronous integration with queues:** + +```php +// ❌ Bad: Synchronous ERP call during checkout +public function placeOrder(QuoteTransfer $quote): OrderTransfer +{ + $order = $this->createOrder($quote); + + // Blocks for 2-5 seconds, fails if ERP is down + $this->erpClient->createOrder($order); + + return $order; +} + +// ✅ Good: Queue for background synchronization +public function placeOrder(QuoteTransfer $quote): OrderTransfer +{ + $order = $this->createOrder($quote); + $order->setErpSyncStatus('pending'); + $order->save(); + + // Queue for background processing + $this->queueClient->sendMessage('erp-sync', [ + 'order_id' => $order->getIdSalesOrder(), + 'action' => 'create_order', + ]); + + return $order; +} +``` + +**2. Local replica/cache with periodic sync:** + +```php +// ✅ Good: Maintain local cache of ERP data +public function getProductStock(string $sku): int +{ + // Read from local database, synced every 5 minutes + $stock = SpyProductStockQuery::create() + ->filterBySku($sku) + ->findOne(); + + return $stock ? $stock->getQuantity() : 0; +} + +// Background job syncs stock from ERP +public function syncStockFromErp(): void +{ + $products = $this->erpClient->getAllProducts(); + + foreach ($products as $productData) { + $stock = SpyProductStockQuery::create() + ->filterBySku($productData['sku']) + ->findOneOrCreate(); + + $stock->setQuantity($productData['stock']); + $stock->setLastSyncedAt(new DateTime()); + $stock->save(); + } +} +``` + +**3. Circuit breaker pattern:** + +Protect your application from external system failures: + +```php +public function callExternalApi(string $endpoint, array $data): ?array +{ + $circuitBreakerKey = "circuit:breaker:{$endpoint}"; + $failureCount = (int) $this->storageClient->get($circuitBreakerKey); + + // If too many failures, don't even attempt + if ($failureCount > 5) { + $this->logger->warning("Circuit breaker OPEN for {$endpoint}"); + return null; // Or return cached/default data + } + + try { + $response = $this->httpClient->post($endpoint, $data); + // Success: Reset failure count + $this->storageClient->delete($circuitBreakerKey); + return $response; + + } catch (\Exception $e) { + // Failure: Increment counter with expiration + $this->storageClient->setex($circuitBreakerKey, 300, $failureCount + 1); + throw $e; + } +} +``` + +Note: in this example circuit breaker will automatically reset its counter based on storage Time-To-Live timer, which in this case set to 300s (5 minutes). +Meaning that (in this example) if there were 5 failed attempts - all the next attempts within those 5 minutes will be ignored/logged, but after that time - counter will be reset and system will try to perform external request again. + +**4. Read-only integration for critical paths:** + +This technique can help optimise heavy write logic. Queueing such events usually involves appropriate UI support for asynchronously checking the status of queued commands or events. + +```php +// ✅ Good: Real-time reads OK, writes are queued +public function checkProductAvailability(string $sku): bool +{ + // Real-time check acceptable for read operations + try { + return $this->warehouseClient->isAvailable($sku); + } catch (\Exception $e) { + // Fallback to cached data + return $this->getCachedAvailability($sku); + } +} + +public function reserveStock(string $sku, int $quantity): void +{ + // Writes are queued, never block user + $this->queueClient->sendMessage('stock-reservation', [ + 'sku' => $sku, + 'quantity' => $quantity, + 'timestamp' => time(), + ]); +} +``` + +## Optimize Quote calculator plugin stack + +The Quote calculation plugin stack runs on every cart modification and checkout step. Heavy calculations here directly impact user experience and checkout conversion rates. + +### Understanding the calculator stack + +Spryker's calculation process executes a series of plugins in sequence: + +```php +// Example plugin stack (simplified) +$calculatorPlugins = [ + new RemoveTotalsCalculatorPlugin(), + new PriceCalculatorPlugin(), + new ItemSubtotalAggregatorPlugin(), + new ProductOptionPriceAggregatorPlugin(), + new DiscountCalculationPlugin(), // Can be expensive + new ShipmentTotalCalculatorPlugin(), // May call external APIs + new TaxTotalCalculatorPlugin(), + new MerchantCommissionCalculatorPlugin(), // Can be expensive + new GrandTotalCalculatorPlugin(), +]; +``` + +Each plugin processes every item in the quote. For a cart with 100 items, inefficient plugins multiply the performance impact by 100×. + +### Common performance anti-patterns + +**1. External API calls per item:** + +```php +// ❌ Bad: Custom shipping calculator calling API per item +class CustomShippingCalculatorPlugin extends AbstractPlugin implements CalculatorPluginInterface +{ + public function recalculate(QuoteTransfer $quoteTransfer): void + { + foreach ($quoteTransfer->getItems() as $item) { + // API call for EACH item = disaster for large carts + $shippingCost = $this->shippingApi->calculateCost( + $item->getSku(), + $item->getQuantity(), + $quoteTransfer->getShippingAddress() + ); + + $expense = $this->createShippingExpense($shippingCost); + $quoteTransfer->addExpense($expense); + } + } +} + +// ✅ Good: Batch calculation for all items +class OptimizedShippingCalculatorPlugin extends AbstractPlugin implements CalculatorPluginInterface +{ + public function recalculate(QuoteTransfer $quoteTransfer): void + { + // Single API call with all items + $itemData = array_map(function ($item) { + return [ + 'sku' => $item->getSku(), + 'quantity' => $item->getQuantity(), + 'weight' => $item->getWeight(), + ]; + }, $quoteTransfer->getItems()->getArrayCopy()); + + $shippingCost = $this->shippingApi->calculateBatchCost( + $itemData, + $quoteTransfer->getShippingAddress() + ); + + $expense = $this->createShippingExpense($shippingCost); + $quoteTransfer->addExpense($expense); + } +} +``` + +**2. Heavy database queries per item:** + +```php +// ❌ Bad: Database query for each item +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + foreach ($quoteTransfer->getItems() as $item) { + // N+1 query problem + $discountData = SpyDiscountQuery::create() + ->filterBySku($item->getSku()) + ->filterByIsActive(true) + ->find(); + + $this->applyDiscounts($item, $discountData); + } +} + +// ✅ Good: Bulk load, then process +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + $skus = array_map(fn($item) => $item->getSku(), $quoteTransfer->getItems()->getArrayCopy()); + + // Single query for all items + $discountData = SpyDiscountQuery::create() + ->filterBySku_In($skus) + ->filterByIsActive(true) + ->find(); + + $discountMap = []; + foreach ($discountData as $discount) { + $discountMap[$discount->getSku()][] = $discount; + } + + foreach ($quoteTransfer->getItems() as $item) { + $itemDiscounts = $discountMap[$item->getSku()] ?? []; + $this->applyDiscounts($item, $itemDiscounts); + } +} +``` + +**3. Complex calculations without caching:** + +```php +// ❌ Bad: Expensive calculation per item without caching +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + foreach ($quoteTransfer->getItems() as $item) { + // Expensive calculation every time + $customTax = $this->calculateComplexTaxRule( + $item, + $quoteTransfer->getBillingAddress(), + $quoteTransfer->getShippingAddress() + ); + + $item->setTaxRate($customTax); + } +} + +// ✅ Good: Cache calculated values +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + $cacheKey = $this->buildCacheKey($quoteTransfer); + $cachedTaxRates = $this->cache->get($cacheKey); + + if ($cachedTaxRates === null) { + $cachedTaxRates = $this->calculateTaxRatesForCart($quoteTransfer); + $this->cache->set($cacheKey, $cachedTaxRates, 300); // 5 min TTL + } + + foreach ($quoteTransfer->getItems() as $item) { + $taxRate = $cachedTaxRates[$item->getSku()] ?? $this->defaultTaxRate; + $item->setTaxRate($taxRate); + } +} +``` + +Note: it is important to chose cache key carefully to avoid stale outdated data, but also to ensure cache could be re-used and not re-generated on every execution attempt. + +### Best practices for calculator plugins + +**1. Batch operations whenever possible:** + +Process all items together instead of individually: + +```php +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + $items = $quoteTransfer->getItems()->getArrayCopy(); + + // Batch database operations + $this->loadProductDataBatch($items); + + // Batch external calls + $externalData = $this->fetchExternalDataBatch($items); + + // Then iterate to apply calculations + foreach ($items as $item) { + $this->applyCalculation($item, $externalData[$item->getSku()]); + } +} +``` + +**2. Move expensive calculations to pre-computation:** + +For complex rules that don't change often, pre-compute and store: + +```php +// Background job pre-computes discount eligibility +public function preComputeDiscountEligibility(): void +{ + $products = $this->getActiveProducts(); + + foreach ($products as $product) { + $eligibleDiscounts = $this->calculateEligibleDiscounts($product); + + $this->storageClient->setex( + "discounts:eligible:{$product->getSku()}", + 3600, + json_encode($eligibleDiscounts) + ); + } +} + +// Calculator plugin reads pre-computed data +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + foreach ($quoteTransfer->getItems() as $item) { + $eligible = $this->storageClient->get("discounts:eligible:{$item->getSku()}"); + if ($eligible) { + $this->applyEligibleDiscounts($item, json_decode($eligible, true)); + } + } +} +``` + +{% info_block infoBox "Simplified example" %} + +This example uses discount eligibility for illustration. In practice, discounts often depend on customer-specific data (customer groups, promo codes). Consider pre-computing data that is less customer-dependent, such as tax rates or base shipping costs, for maximum cache effectiveness. + +{% endinfo_block %} + +**3. Short-circuit expensive calculations:** + +Skip unnecessary calculations when possible: + +```php +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + // Skip if no items need this calculation + $itemsNeedingCalculation = array_filter( + $quoteTransfer->getItems()->getArrayCopy(), + fn($item) => $this->needsCustomCalculation($item) + ); + + if (empty($itemsNeedingCalculation)) { + return; // Skip expensive operation + } + + // Only process items that need it + $this->performExpensiveCalculation($itemsNeedingCalculation); +} +``` + +**4. Profile calculator performance:** + +Instrument plugins to identify bottlenecks: + +```php +public function recalculate(QuoteTransfer $quoteTransfer): void +{ + $startTime = microtime(true); + + // Your calculation logic + $this->performCalculations($quoteTransfer); + + $duration = (microtime(true) - $startTime) * 1000; + + if ($duration > 100) { + $this->logger->warning('Slow calculator plugin', [ + 'plugin' => get_class($this), + 'duration_ms' => $duration, + 'item_count' => $quoteTransfer->getItems()->count(), + ]); + } +} +``` + +## Best practices summary + +### Caching + +1. **Choose appropriate storage**: Redis for frequent access, database for aggregations, filesystem for assets +2. **Always set TTL**: Every cached item needs expiration strategy +3. **Implement invalidation**: Event-driven or write-through for critical data +4. **Monitor cache effectiveness**: Track hit rates and memory usage + +### Background processing + +1. **Queue heavy operations**: File processing, PDFs, emails, imports +2. **Use Publish & Sync**: Leverage Spryker's event-driven architecture +3. **Provide status endpoints**: Let users check async operation status +4. **Handle failures gracefully**: Implement retry logic and error notifications + +### External systems + +1. **Decouple with queues**: Never block web requests for external calls +2. **Maintain local cache**: Sync external data to local storage periodically +3. **Implement circuit breakers**: Protect against external system failures +4. **Monitor performance**: Track external call latency and failure rates + +### Quote calculator + +1. **Batch operations**: Process all items together, not individually +2. **Avoid per-item external calls**: Batch API calls for entire cart +3. **Pre-compute when possible**: Calculate complex rules in background +4. **Profile performance**: Identify and optimize slow calculator plugins +5. **Short-circuit logic**: Skip unnecessary calculations + +## Additional resources + +- [Publish and Synchronization](/docs/dg/dev/backend-development/data-manipulation/data-publishing/publish-and-synchronization.html) +- [Queue](/docs/dg/dev/backend-development/data-manipulation/queue/queue.html) +- [External HTTP requests](/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html) +- [Key-Value storage performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.html) +- [Database performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.html) diff --git a/docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.md new file mode 100644 index 00000000000..a1c16a3d3b9 --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.md @@ -0,0 +1,438 @@ +--- +title: Database performance guidelines +description: Learn how to optimize database performance in Spryker applications through proper indexing, query optimization, and avoiding common database anti-patterns. +last_updated: Dec 16, 2025 +template: concept-topic-template +related: + - title: Architecture performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html + - title: Batch processing of Propel entities + link: docs/dg/dev/guidelines/performance-guidelines/performance-guidelines-batch-processing-propel-entities.html + - title: General performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html + - title: Data import optimization guidelines + link: docs/dg/dev/data-import/latest/data-import-optimization-guidelines.html +--- + +Database operations are often the primary performance bottleneck in e-commerce applications. Poor database design, missing indexes, and inefficient queries can severely impact application performance, especially under high load. These guidelines help you identify and resolve common database performance issues in Spryker projects. + +## Database indexes + +Proper indexing is fundamental to database performance. Indexes dramatically speed up data retrieval but come with trade-offs in write performance and storage space. + +### Understanding index usage + +When a query runs without appropriate indexes, the database performs a full table scan—reading every row to find matches. For tables with millions of records, this becomes exponentially slower. + +**Signs you need an index:** +- Slow queries on frequently accessed tables +- Full table scans in query execution plans +- High database CPU usage during peak traffic +- Queries filtering or joining on unindexed columns + +### Creating effective indexes + +**Index columns used in WHERE clauses:** + +```php +// This query needs an index on spy_sales_order.order_reference +$order = SpySalesOrderQuery::create() + ->filterByOrderReference($orderReference) + ->findOne(); +``` + +Add index in your Propel schema: + +```xml +
    + + + + +
    +``` + +**Index foreign keys:** + +Foreign keys used in JOINs must be indexed. Propel automatically creates indexes for foreign keys defined in schema, but custom foreign key columns need manual indexing: + +```xml + + + + + + +
    +``` + +**Composite indexes for multiple conditions:** + +When queries filter on multiple columns, create composite indexes: + +```php +// Query filtering by store and status +$orders = SpySalesOrderQuery::create() + ->filterByStore('DE') + ->filterByFkOmsOrderStatus($statusId) + ->find(); +``` + +```xml + + + + +``` + +{% info_block warningBox "Index column order matters" %} + +In composite indexes, column order is critical. Place the most selective column (highest cardinality) first. For queries that filter on only the first column, the index can still be used. + +{% endinfo_block %} + +### Index anti-patterns + +**Over-indexing:** + +Too many indexes slow down INSERT, UPDATE, and DELETE operations. Each write operation must update all indexes on that table. + +- Don't index every column "just in case" +- Remove unused indexes identified through database monitoring +- Avoid duplicate indexes (for example, separate indexes on columns A and B, plus a composite index on A+B) + +**Indexing low-cardinality columns:** + +Indexes on columns with few distinct values (for example, boolean flags, status with 3-4 values) are often inefficient: + +```xml + + + + +``` + +Exception: Low-cardinality indexes can be useful when combined with high-cardinality columns in composite indexes. + +### Monitoring index effectiveness + +Use database query analysis tools to verify index usage: + +```sql +EXPLAIN +SELECT * FROM spy_sales_order +WHERE order_reference = 'DE--123'; +``` + +**PostgreSQL - Look for:** +- `Index Scan` (good) vs `Seq Scan` (bad for large tables) +- Execution time and rows scanned + +**MySQL - Check the `type` column:** +- `const`, `eq_ref`, `ref`: Using indexes efficiently +- `ALL`: Full table scan (needs optimization) + +## Query optimization + +Beyond indexes, query structure significantly impacts performance. + +### Avoid SQL functions that prevent index usage + +Using functions on indexed columns in WHERE clauses prevents index usage: + +**Inefficient:** + +```php +// DATE() function prevents index usage +$orders = SpySalesOrderQuery::create() + ->where('DATE(created_at) = ?', '2025-01-15') + ->find(); +``` + +**Optimized:** + +```php +// Use range comparison to leverage index +$orders = SpySalesOrderQuery::create() + ->filterByCreatedAt(['min' => '2025-01-15 00:00:00', 'max' => '2025-01-15 23:59:59']) + ->find(); +``` + +**Other common function anti-patterns:** + +- `LOWER(email) = 'user@example.com'` → Use case-insensitive collation or store lowercase +- `SUBSTRING(sku, 1, 3) = 'ABC'` → Use `LIKE 'ABC%'` or dedicated prefix column +- `YEAR(order_date) = 2025` → Use date range filtering + +### Necessary JOINs and relationship loading + +**The N+1 problem:** + +Loading related entities in loops creates excessive queries. This is one of the most common performance issues: + +```php +// ❌ Bad: N+1 queries +$orders = SpySalesOrderQuery::create()->find(); +foreach ($orders as $order) { + // Each iteration = 1 query + $items = $order->getSpySalesOrderItems(); + foreach ($items as $item) { + // Each iteration = 1 query per item + $product = $item->getSpyProduct(); + } +} +// Total: 1 + N + (N * M) queries +``` + +**Solution: Use joinWith() to eager load relationships:** + +```php +// ✅ Good: Single query with JOINs +$orders = SpySalesOrderQuery::create() + ->joinWithSpySalesOrderItem() + ->useSpySalesOrderItemQuery() + ->joinWithSpyProduct() + ->endUse() + ->find(); + +foreach ($orders as $order) { + $items = $order->getSpySalesOrderItems(); // Already loaded + foreach ($items as $item) { + $product = $item->getSpyProduct(); // Already loaded + } +} +// Total: 1 query +``` + +For more details on batch processing and bulk operations, see [Batch processing of Propel entities](/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines-batch-processing-propel-entities.html) and [Architecture performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html). + +### GROUP BY and ORDER BY optimization + +**GROUP BY performance:** + +Grouping requires sorting data, which is expensive for large datasets: + +```php +// Potentially slow on large tables +$orderCounts = SpySalesOrderQuery::create() + ->groupByFkCustomer() + ->withColumn('COUNT(*)', 'order_count') + ->find(); +``` + +**Optimizations:** + +1. **Filter before grouping**: Reduce dataset size with WHERE clauses +2. **Index grouped columns**: Ensure columns in GROUP BY are indexed +3. **Pre-aggregate**: For frequently needed aggregations, maintain summary tables +4. **Limit grouped results**: Use HAVING to filter groups + +**ORDER BY performance:** + +Sorting large result sets is resource-intensive: + +```php +// Expensive without proper index +$orders = SpySalesOrderQuery::create() + ->orderByCreatedAt('DESC') + ->find(); +``` + +**Best practices:** + +- Index columns used in ORDER BY +- Combine ORDER BY columns with WHERE clause columns in composite indexes +- Limit result set size before sorting +- For pagination, use cursor-based pagination instead of OFFSET + +```php +// ✅ Good: Index-friendly pagination +$orders = SpySalesOrderQuery::create() + ->filterByIdSalesOrder(['min' => $lastSeenId]) + ->orderByIdSalesOrder('ASC') + ->limit(20) + ->find(); +``` + +## Controlling data volume + +### Selecting only needed columns + +Loading unnecessary columns wastes memory and network bandwidth: + +```php +// ❌ Bad: Loads all columns including potentially large TEXT/BLOB fields +$products = SpyProductAbstractQuery::create()->find(); + +// ✅ Good: Select only needed columns +$products = SpyProductAbstractQuery::create() + ->select(['IdProductAbstract', 'Sku', 'Attributes']) + ->find(); +``` + +**When to use select():** + +- Reading thousands of records +- Tables with large TEXT, JSON, or BLOB columns +- Building API responses or exports +- Aggregation queries + +### Limiting result sets + +Always use pagination for user-facing queries: + +```php +// ❌ Bad: Loading potentially millions of records +$allOrders = SpySalesOrderQuery::create()->find(); + +// ✅ Good: Paginate results +$orders = SpySalesOrderQuery::create() + ->limit(50) + ->offset($page * 50) + ->find(); +``` + +### Propel hydration and relationships + +**Hydration overhead:** + +Propel converts database rows into PHP objects (hydration). For large result sets, this consumes significant memory: + +```php +// High memory usage: Creates PHP objects for all records +$orders = SpySalesOrderQuery::create()->find(); + +// Lower memory usage: Returns associative arrays +$orders = SpySalesOrderQuery::create() + ->find(Propel::CONNECTION_READ) + ->toArray(); +``` + +**For bulk operations, use PDO directly:** + +When processing tens of thousands of records, bypass Propel's ORM layer: + +```php +// For data import/export or batch processing +$connection = Propel::getConnection(); +$stmt = $connection->prepare('SELECT id_product, sku FROM spy_product WHERE is_active = 1'); +$stmt->execute(); + +while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + // Process row +} +``` + +See [Data import optimization guidelines](/docs/dg/dev/data-import/latest/data-import-optimization-guidelines.html) for comprehensive bulk processing strategies. + +### Managing 1-to-Many and Many-to-Many relationships + +**The aggregation problem:** + +Loading all related records for many parent records causes memory issues: + +```php +// ❌ Bad: Loads ALL items for ALL orders +$orders = SpySalesOrderQuery::create() + ->joinWithSpySalesOrderItem() + ->find(); +// For 1000 orders with 10 items each = 10,000 item objects in memory +``` + +**Strategies:** + +1. **Paginate parent records**: Process orders in batches +2. **Lazy load selectively**: Only load relationships when needed +3. **Count without loading**: Use `withColumn('COUNT(*)', 'item_count')` for counts +4. **Filter relationships**: Use `useXxxQuery()` to add conditions on related entities + +```php +// Load only orders with specific item conditions +$orders = SpySalesOrderQuery::create() + ->joinWithSpySalesOrderItem() + ->useSpySalesOrderItemQuery() + ->filterByFkOmsOrderItemStatus($statusId) + ->endUse() + ->find(); +``` + +## Stored procedures + +While stored procedures can improve performance by reducing network round trips, they introduce challenges in Spryker projects: + +**Considerations:** + +- **Portability**: Stored procedures are database-specific and complicate migrations between PostgreSQL and MySQL +- **Version control**: Harder to manage in git repositories alongside application code +- **Testing**: Difficult to unit test and mock in development environments +- **Debugging**: Limited debugging tools compared to PHP code +- **Deployment**: Require special deployment procedures and permissions + +**Recommendations:** + +1. **Avoid by default**: Prefer PHP-based solutions with proper query optimization +2. **Performance test thoroughly**: If using stored procedures, establish baselines: + - Measure execution time under realistic load + - Monitor database CPU and memory usage + - Profile query counts and complexity +3. **Watch for hidden N+1 problems**: Ensure stored procedures don't execute hundreds/thousands of queries internally +4. **Document extensively**: Include performance benchmarks and maintenance procedures +5. **Have a migration path**: Plan how to refactor if performance degrades + +**When stored procedures might be justified:** + +- Complex aggregations requiring multiple passes over large datasets +- Legacy integration requirements +- Proven performance bottlenecks where all other optimizations have been exhausted + +## Integer autoincrement ID overflow + +PostgreSQL and MySQL use INTEGER types (32-bit) for autoincrement primary keys by default, which limits maximum values to approximately 2.1 billion. In high-transaction tables, this limit can be reached, causing application failures. + +### Understanding the risk + +High-volume tables at risk: +- `spy_sales_order_item` (one record per ordered product) +- `spy_oms_product_reservation` (order item state tracking) +- `spy_event_behavior_entity_change` (publish & sync events) +- `spy_queue` (message queue storage) +- Logging tables if stored in the database + +### Symptoms of approaching overflow + +When IDs approach 2,147,483,647: +- INSERT operations fail with "integer out of range" errors +- Application throws exceptions on order placement +- Queue processing stops +- New entity creation fails + +### Prevention and remediation + +For comprehensive solutions including migration to BIGINT and cleanup strategies, see [Database tables take up too much space or have ID overflow](/docs/dg/dev/troubleshooting/troubleshooting-general-technical-issues/database-tables-take-up-too-much-space-or-have-id-overflow.html#cause). + +**Key preventive measures:** + +1. **Use BIGINT for high-transaction tables**: When creating new tables or migrating existing ones +2. **Implement data retention policies**: Automatically purge old records from transient tables +3. **Monitor table growth rates**: Track ID increment velocity to predict overflow timeframes +4. **Regular capacity planning**: Review table sizes and ID usage quarterly + +## Best practices summary + +1. **Index strategically**: Create indexes on WHERE, JOIN, and ORDER BY columns, but avoid over-indexing +2. **Use eager loading**: Eliminate N+1 problems with `joinWith()` for related entities +3. **Avoid function anti-patterns**: Don't use SQL functions on indexed columns in WHERE clauses +4. **Limit data selection**: Use `select()` to load only needed columns and paginate results +5. **Batch write operations**: Use [ActiveRecordBatchProcessorTrait](/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines-batch-processing-propel-entities.html) for bulk inserts/updates +6. **Optimize GROUP BY/ORDER BY**: Index grouped and sorted columns, filter before aggregating +7. **Monitor and test**: Use EXPLAIN to verify query performance +8. **Avoid stored procedures**: Unless thoroughly performance-tested and documented +9. **Monitor INT overflow**: Implement alerts and cleanup for high-transaction tables +10. **Use appropriate tools**: PDO for bulk processing, Propel for application logic + +## Additional resources + +- [Troubleshooting: N+1 problem](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/n+1-problem.html) +- [Data import optimization guidelines](/docs/dg/dev/data-import/latest/data-import-optimization-guidelines.html) +- [Propel documentation](http://propelorm.org/documentation/) +- [PostgreSQL Performance Tuning](https://www.postgresql.org/docs/current/performance-tips.html) diff --git a/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.md b/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.md index adc0238b599..15ae346f293 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.md +++ b/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.md @@ -47,7 +47,7 @@ Real-life problems sometimes prevent engineers from implementing data flows acco 1. **Avoid unnecessary calls**: Read from Key-Value or Search storages instead of calling backend-gateway or APIs from Yves/Glue/Merchant Portal. 2. **Combine multiple calls**: If external requests are required, avoid multiple sequential calls. Instead, combine them into one batch request. -3. **Cache responses carefully**: Caching can help, but be aware of what to cache, where to store it, and how long to keep it. Key-Value storages are fast but limited in capacity and can be expensive at scale. +3. **Cache responses carefully**: Caching can help, but be aware of what to cache, where to store it, and how long to keep it. Key-Value storages are fast but limited in capacity and can be expensive at scale. For detailed caching strategies, see [Cache heavy logic appropriately](/docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.html#cache-heavy-logic-appropriately). 4. **Ensure external system capability**: If real-time data is a must-have requirement and background sync with a small delay is not viable, ensure that: - Remote APIs or dependencies can handle the same level of requests and data volume as the main Spryker application - Remote APIs or dependencies can scale at the same rate as the main Spryker application diff --git a/docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.md index 9a8c414a68a..9c924bd8f71 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.md +++ b/docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.md @@ -14,6 +14,8 @@ related: link: docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html - title: Architecture performance guidelines link: docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html + - title: CDN and traffic management integration + link: docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html --- This document describes general and Spryker-specific frontend performance guidelines. @@ -25,6 +27,7 @@ Server configuration: - HTTP/2 - Cookie-free domain for assets: CSS, JS, Fonts, Images. - Brotli encoding for textual assets: CSS, JS, SVG. Use gzip as a fallback. +- Brotli and gzip compression for dynamic responses: HTML pages, JSON API responses, and XML. In typical e-commerce deployments, dynamically generated HTML accounts for the majority of response data volume. Make sure on-the-fly compression is enabled in the deploy file (`compression: {engine}: static: true`). For details, see [CDN and traffic management integration](/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html). - Expires and ETag response headers. - Production build mode. To build production, run `npm run yves:production` and `npm run zed:production`. diff --git a/docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.md new file mode 100644 index 00000000000..4242a892ce5 --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.md @@ -0,0 +1,356 @@ +--- +title: Infrastructure and worker configuration guidelines +description: Learn how to optimize nginx configuration and worker orchestration for Spryker applications, including buffer tuning and multi-store worker strategies. +last_updated: Feb 23, 2026 +template: concept-topic-template +related: + - title: General performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html + - title: CDN and traffic management integration + link: docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html + - title: Jenkins operational best practices + link: docs/ca/dev/best-practices/jenkins-operational-best-practices.html + - title: Stable Workers + link: docs/dg/dev/backend-development/cronjobs/stable-workers.html + - title: Optimizing Jenkins execution with the resource-aware queue worker + link: docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html +--- + +Infrastructure configuration significantly impacts application performance. Improperly configured web servers, PHP-FPM, and background worker orchestration can create bottlenecks even when application code is optimized. These guidelines help you configure infrastructure components for optimal Spryker performance. + +## nginx configuration + +nginx serves as the web server and reverse proxy in Spryker deployments. Default configurations work for small responses but can cause performance issues with larger payloads. + +### Avoid proxying external resources through Spryker Cloud + +**The anti-pattern:** + +Proxying external resources (images, APIs, third-party services) through your Spryker application creates unnecessary load and latency: + +```nginx +# ❌ Bad: Proxying external image CDN through Spryker +location /external-images/ { + proxy_pass https://external-cdn.com/images/; + proxy_set_header Host external-cdn.com; +} +``` + +**Problems:** +- **Bandwidth waste**: All traffic flows through your infrastructure +- **Latency overhead**: Adds extra hop and processing time +- **Resource consumption**: Uses nginx worker connections and memory +- **Failure coupling**: External service downtime affects your infrastructure +- **No CDN benefits**: Loses edge caching and geographic distribution + +**Solutions:** + +**1. Direct client connections:** + +```html + +Product +``` + +**2. Asynchronous loading:** + +For third-party scripts and widgets, load them asynchronously in the browser: + +```html + + +``` + +**When proxying might be necessary:** + +- **Security requirements**: Hiding internal services behind reverse proxy +- **Legacy integrations**: Systems that require single origin +- **Authentication injection**: Adding auth headers to external requests + +Even in these cases, proxy only specific, necessary endpoints, not entire external services. + +### Adjust nginx and PHP-FPM buffers for response size + +nginx and PHP-FPM use buffers to handle request/response data. Default buffer sizes (4-8KB) work for small responses but cause performance issues with larger payloads common in e-commerce applications. + +### Understanding the buffer problem + +**How nginx + PHP-FPM communicate:** + +1. nginx receives HTTP request from client +2. nginx forwards request to PHP-FPM via FastCGI +3. PHP-FPM processes request and generates response +4. PHP-FPM sends response back through FastCGI buffers +5. nginx receives buffered response and sends to client + +**What happens with undersized buffers:** + +When response size exceeds buffer capacity: +- PHP-FPM must write to temporary files on disk (slow I/O) +- nginx reads from disk instead of memory +- Simple `echo $content` operations take excessive time +- Response time increases by 10-100x + +**Symptoms of buffer issues:** + +- Slow response times for pages with large HTML (>50KB) +- High disk I/O during request processing +- PHP execution time is fast, but total response time is slow +- Performance degrades under load as disk becomes bottleneck + +### Buffer configuration with docker-sdk + +{% info_block infoBox "Project-level nginx configuration" %} + +nginx configuration is managed by [docker-sdk](https://github.com/spryker/docker-sdk) and cannot be directly edited at the project level. Configuration is controlled through deploy files (`deploy.yml`, `deploy.dev.yml`) with options exposed by docker-sdk. + +Buffer optimizations described below are already implemented in recent docker-sdk versions. + +{% endinfo_block %} + +**Optimized buffer settings (implemented in docker-sdk):** + +Recent versions of docker-sdk include optimized FastCGI buffer configuration with the following default values. These parameters can be customized through the deploy file configuration. For more details about configuring these parameters, see [Deploy file reference - buffer configuration](https://github.com/spryker/docker-sdk/blob/master/docs/07-deploy-file/02-deploy.file.reference.v1.md?plain=1#L508). + +- **fastcgi_buffers**: `16 16k` (256KB total) +- **fastcgi_buffer_size**: `16k` +- **fastcgi_max_temp_file_size**: `1m` + +These settings provide: +- 256KB buffer capacity (sufficient for most Spryker responses) +- Prevention of disk writes for responses up to 1MB +- Significant performance improvement for large HTML pages + +{% info_block infoBox "Compression reduces buffer pressure" %} + +Enabling HTTP response compression in the deploy file (`assets: compression:`) is complementary to buffer tuning. When compression is active, the frontend container compresses responses before buffering, which reduces the effective size that passes through FastCGI buffers and the load balancer. For details on configuring compression, see [Deploy file reference - assets](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html) and [CDN and traffic management integration](/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html). + +{% endinfo_block %} + +**Verify your docker-sdk version:** + +```bash +# Check docker-sdk version in your project +cat docker/deployment/default/Dockerfile | grep "FROM spryker/php" | head -1 +``` + +Update to the latest docker-sdk to benefit from buffer optimizations: + +```bash +# Update docker-sdk +git clone https://github.com/spryker/docker-sdk.git ./docker +``` + +**Deploy file configuration:** + +While FastCGI buffer sizes are handled by docker-sdk, you can configure related HTTP settings: + +```yaml +# deploy.dev.yml - Configure HTTP timeout and request body size +groups: + applications: + yves_eu: + application: yves + http: + timeout: 2m # FastCGI timeout (default: 1m) + max-request-body-size: 10m # Maximum request body size (default: 1m for Yves) + endpoints: + yves.eu.spryker.local: + store: DE +``` + +**Configurable HTTP settings:** +- `timeout`: Affects `proxy_read_timeout`, `proxy_send_timeout`, `fastcgi_read_timeout`, `fastcgi_send_timeout` +- `max-request-body-size`: Maps to nginx `client_max_body_size` + +**Advanced: Buffer configuration (rarely needed)** + +If you need custom buffer settings (only after measuring response sizes), you can configure them at the endpoint level. Contact Spryker Cloud support before using these settings: + +```yaml +# Only use after confirming need with performance testing +endpoints: + yves.eu.spryker.local: + http: + buffer: + buffer_size: 16k # fastcgi_buffer_size + buffers: 128 128k # fastcgi_buffers + busy_buffers_size: 256k # fastcgi_busy_buffers_size +``` + +For complete deploy file options, see: +- [Deploy file reference - Version 1.0](https://github.com/spryker/docker-sdk/blob/master/docs/07-deploy-file/02-deploy.file.reference.v1.md) +- [Deploy file reference (Spryker docs)](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html) +- [docker-sdk documentation](https://github.com/spryker/docker-sdk/tree/master/docs) +- [Deploy file examples](https://github.com/spryker-shop/b2b-demo-shop/blob/master/deploy.dev.yml) + +### Measuring response sizes + +To determine if current buffer settings are adequate for your project: + +**1. Measure average response size:** + +```bash +# Sample 100 requests to catalog page +for i in {1..100}; do + curl -s -w "%{size_download}\n" -o /dev/null https://your-shop.com/catalog +done | awk '{sum+=$1; count++} END {print "Average:", sum/count, "bytes"}' +``` + +**2. Interpret results:** + +- **<100KB**: Default buffer configuration (256KB) is sufficient +- **100-500KB**: Consider requesting increased buffers via Spryker Cloud support +- **>500KB**: Investigate response size optimization opportunities (reduce HTML/JSON payload) + +**3. Monitor for buffer pressure:** + +Look for symptoms indicating buffer exhaustion: +- Inconsistent response times for identical requests +- Slow responses during peak traffic +- High disk I/O on web servers + +### PHP configuration + +PHP extensions and runtime settings are configured through the `image` section of deploy files: + +```yaml +# deploy.yml - Enable PHP extensions +image: + tag: spryker/php:8.4 + php: + enabled-extensions: + - blackfire + - newrelic +``` + +For PHP runtime settings like memory limits and execution timeouts, these are typically pre-configured in the docker-sdk PHP images. If you need custom PHP configuration: +1. **For local development**: You can modify PHP configuration in the docker containers +2. **For Spryker Cloud**: Contact Spryker Cloud support to request specific PHP configuration changes + +For more details on service configuration, see [Configure services](/docs/dg/dev/integrate-and-configure/configure-services.html). + +## Worker orchestration for multi-store setups + +In multi-store Spryker projects, background job orchestration becomes complex. Each store often duplicates jobs, leading to resource contention and instability. + +### The multi-store worker problem + +**Typical multi-store setup:** + +- 3 stores: DE, FR, UK +- Each store has queue worker: `queue:worker:start` +- Jenkins tries to run all workers in parallel, but have limited number of executors configured, to limit resources utilisation, which may lead to some store's Worker waiting on other stores. +- In case all Workers running at the same time - resource utilisation (memory and CPU) quickly becomes a limited resource. + +**Problems:** + +- **Memory exhaustion**: Each worker consumes PHP memory limit +- **CPU contention**: Multiple workers compete for CPU cycles +- **Database pressure**: Parallel workers query same database +- **Job pile-up**: With only 2 executors, jobs queue excessively + +See [Jenkins operational best practices](/docs/ca/dev/best-practices/jenkins-operational-best-practices.html) for detailed memory and resource management strategies. + +### Solution 1: Stable Workers (Recommended) + +Spryker's **Stable Workers** architecture provides isolated worker contexts with better resource management: + +**Key benefits:** + +- **Process isolation**: Each worker runs in dedicated PHP process +- **Resource distribution**: Intelligent workload balancing across stores +- **Configurable capacity**: Control worker count and memory per worker +- **Reduced Jenkins load**: Workers run outside Jenkins executors +- **Better P&S stability**: Isolated failures don't affect other stores + +**Implementation:** + +Stable Workers is a Spryker feature that requires configuration and deployment. For comprehensive setup instructions, see [Stable Workers](/docs/dg/dev/backend-development/cronjobs/stable-workers.html). + +**When to use Stable Workers:** + +- Multi-store projects (3+ stores) +- High Publish & Sync volume +- Frequent Jenkins stability issues +- Need for better resource isolation + +### Solution 2: Resource-aware queue worker + +Starting with `202512.0`, Spryker ships a **resource-aware queue worker** that processes queues for all stores with a single worker while monitoring system resources: + +**Configuration approach:** + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\Queue\QueueConstants; + +$config[QueueConstants::RESOURCE_AWARE_QUEUE_WORKER_ENABLED] = true; +$config[QueueConstants::QUEUE_WORKER_MAX_PROCESSES] = 10; +$config[QueueConstants::QUEUE_WORKER_FREE_MEMORY_BUFFER] = 750; +``` + + +**config/Zed/cronjobs/jenkins.php** + +```php +$jobs[] = [ + 'name' => 'queue-worker', + 'command' => '$PHP_BIN vendor/bin/console queue:worker:start', + 'schedule' => '* * * * *', + 'enable' => true, + 'stores' => ['DE'], // Use any one store/region as entry point +]; +``` + +**How it works:** + +- Single worker manages a fixed-size process pool for all store queues +- Monitors free system memory before spawning each child process +- Detects memory leaks and exits gracefully for automatic restart +- Dynamically prioritizes queues based on message volume + +**Benefits:** + +- **Resource awareness**: Prevents OOM by monitoring free memory before each spawn +- **Reduced memory usage**: 1 worker with bounded process pool instead of N independent workers +- **Fewer executor slots**: Frees Jenkins resources for other jobs +- **Memory leak protection**: Automatic detection and graceful exit +- **Comprehensive statistics**: Operational visibility into cycles, processes, and errors + +**Considerations:** + +- Requires RabbitMQ and the `RabbitMqQueueMetricsReaderPlugin` +- Tune the process pool size and memory buffer for your environment + +For full configuration reference and architecture details, see [Optimizing Jenkins execution with the resource-aware queue worker](/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html). + +## Best practices summary + +### nginx configuration + +1. **Avoid proxying external resources**: Let clients connect directly to external services +2. **Tune fastcgi buffers**: Set to 2-3× average response size +3. **Configure buffer limits**: Prevent disk writes for typical responses +4. **Monitor buffer usage**: Watch for buffer exhaustion warnings +5. **Test under load**: Verify configuration with realistic traffic patterns + +### Worker orchestration + +1. **Use Stable Workers**: Recommended for multi-store setups +2. **Limit concurrent workers**: Maximum 2 workers per queue +3. **Set memory limits**: Keep under 2GB per worker +4. **Process all stores together**: Consider unified worker approach +5. **Monitor resource usage**: Track memory, CPU, and queue lag +6. **Follow Jenkins best practices**: See [operational guidelines](/docs/ca/dev/best-practices/jenkins-operational-best-practices.html) +7. **Consider external orchestration**: For complex or high-scale scenarios + +## Additional resources + +- [Jenkins operational best practices](/docs/ca/dev/best-practices/jenkins-operational-best-practices.html) +- [Best practices: Jenkins stability](/docs/ca/dev/best-practices/best-practises-jenkins-stability.html) +- [Stable Workers](/docs/dg/dev/backend-development/cronjobs/stable-workers.html) +- [Optimizing Jenkins execution](/docs/dg/dev/backend-development/cronjobs/optimizing-jenkins-execution.html) +- [Integrate elastic computing](/docs/dg/dev/integrate-and-configure/integrate-elastic-computing.html) +- [nginx FastCGI Module Documentation](https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html) diff --git a/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.md b/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.md index 72d8c1e7653..270de1e7a8f 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.md +++ b/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.md @@ -24,6 +24,7 @@ Updating dependencies regularly provides several practical benefits: The following resources provide information about performance-related module releases: +- [Security release notes 202512.0](https://docs.spryker.com/docs/about/all/releases/security-releases/security-release-notes-202512.0.html) - [Release notes 202410.0](https://docs.spryker.com/docs/scos/user/intro-to-spryker/releases/release-notes/release-notes-202410.0/release-notes-202410.0.html) - [Release notes 202507.0](https://docs.spryker.com/docs/scos/user/intro-to-spryker/releases/release-notes/release-notes-202507.0/release-notes-202507.0.html) - [General performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html) - contains the list of recent module versions with known performance optimizations diff --git a/docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.md new file mode 100644 index 00000000000..1042ee21bdc --- /dev/null +++ b/docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.md @@ -0,0 +1,345 @@ +--- +title: Key-Value storage performance guidelines +description: Learn how to optimize Redis/ValKey performance in Spryker applications by limiting operations, avoiding admin commands in runtime, and implementing proper caching strategies. +last_updated: Dec 16, 2025 +template: concept-topic-template +related: + - title: General performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html + - title: Architecture performance guidelines + link: docs/dg/dev/guidelines/performance-guidelines/architecture-performance-guidelines.html + - title: Use Redis or ValKey as a KV Storage + link: docs/dg/dev/backend-development/client/use-and-configure-redis-or-valkey-as-a-key-value-store.html +--- + +Redis and ValKey (Redis-compatible) serve as critical Key-Value storage components in Spryker's architecture, providing fast data access for frontend applications. However, improper usage patterns can create significant performance bottlenecks. These guidelines help you use Key-Value storage efficiently while maintaining application scalability. + +## Understanding Key-Value storage in Spryker + +Spryker's [architecture principle](/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html#spryker-architecture-principle-read-from-fast-storage) requires frontend applications (Yves, Glue, Merchant Portal) to read exclusively from fast storage like Redis/ValKey and Elasticsearch/OpenSearch. This design ensures: + +- **Predictable performance**: Frontend response times independent of database load +- **Horizontal scalability**: Easy scaling without backend constraints +- **High availability**: Fast storage can be replicated and distributed + +However, this architecture's performance depends entirely on proper Key-Value storage usage. + +## Limit operations per page request + +**The 10-20 operation rule:** + +Each page request should perform a maximum of 10-30 Key-Value operations (not a strict rule, but just a suggestion). Exceeding this limit creates performance bottlenecks, even with Redis's sub-millisecond response times. + +### Why this matters + +Even with fast Key-Value storage: +- **Network latency accumulates**: 0.1ms per operation × 1000 operations = 100ms network time +- **Cloud environments add latency**: 1-3ms per operation is common in cloud setups +- **Connection pool exhaustion**: Too many operations consume available connections +- **CPU overhead**: Serialization/deserialization for each operation uses CPU cycles + +**Example problem:** + +```php +// ❌ Bad: 500+ Redis operations per request +foreach ($products as $product) { + // Each product: 5 storage reads + $price = $this->storageClient->get("price:{$product->getSku()}"); + $stock = $this->storageClient->get("stock:{$product->getSku()}"); + $description = $this->storageClient->get("description:{$product->getSku()}"); + $images = $this->storageClient->get("images:{$product->getSku()}"); + $reviews = $this->storageClient->get("reviews:{$product->getSku()}"); +} +// 100 products × 5 operations = 500 operations +``` + +### Solutions + +**1. Use batch operations (MGET):** + +```php +// ✅ Good: Single batch operation +$keys = []; +foreach ($products as $product) { + $keys[] = "product:{$product->getSku()}:complete"; +} +$productData = $this->storageClient->getMulti($keys); +// 100 products = 1 operation (or a few if keys chunked) +``` + +**2. Store related data together:** + +```php +// ❌ Bad: Multiple keys per entity +$this->storageClient->set("product:{$sku}:price", $price); +$this->storageClient->set("product:{$sku}:stock", $stock); +$this->storageClient->set("product:{$sku}:description", $description); + +// ✅ Good: Single key with structured data +$productData = [ + 'price' => $price, + 'stock' => $stock, + 'description' => $description, + 'images' => $images, +]; +$this->storageClient->set("product:{$sku}", json_encode($productData)); +``` + +**3. Leverage Spryker's storage cache mechanism:** + +Spryker provides built-in storage caching that remembers GET operations within a single request and performs bulk MGET retrieval. See [Use and configure Key-Value storage cache](/docs/dg/dev/backend-development/client/use-and-configure-redis-or-valkey-as-a-key-value-store.html#use-and-configure-key-value-storage-cache). + +**Enable StorageCacheEventDispatcherPlugin:** + +```php +// src/Pyz/Yves/EventDispatcher/EventDispatcherDependencyProvider.php +protected function getEventDispatcherPlugins(): array +{ + return [ + new StorageCacheEventDispatcherPlugin(), + ]; +} +``` + +This plugin: +- Tracks all `get()` calls during request processing +- Performs a single `mget()` at the end of request to retrieve all needed keys +- Caches results in memory for the request duration +- Dramatically reduces network round trips + +**4. Cache frequently accessed data in application memory:** + +For data accessed multiple times per request: + +```php +private array $cachedPrices = []; + +public function getProductPrice(string $sku): ?float +{ + if (!isset($this->cachedPrices[$sku])) { + $this->cachedPrices[$sku] = $this->storageClient->get("price:{$sku}"); + } + return $this->cachedPrices[$sku]; +} +``` + +### Monitoring operation counts + +Optional. Track Key-Value operations per request in your APM tool: + +```php +// Add instrumentation +$operationCount = 0; + +// Wrapper around storage client +public function get(string $key) +{ + $this->operationCount++; + if ($this->operationCount > 20) { + $this->logger->warning("High storage operation count", [ + 'count' => $this->operationCount, + 'url' => $this->request->getUri(), + ]); + } + return $this->storageClient->get($key); +} +``` + +## Avoid admin operations in runtime production code + +Certain Redis/ValKey operations are designed for administration and debugging, not for production request handling. Using these operations in runtime code causes severe performance degradation. + +### Dangerous operations to avoid + +**1. KEYS command:** + +```php +// ❌ NEVER do this in production code +$allProductKeys = $this->storageClient->keys('product:*'); +``` + +**Why it's dangerous:** +- **Blocks the entire Redis server**: KEYS is not incremental and scans all keys +- **O(N) complexity**: Performance degrades linearly with database size +- **Production incidents**: Causes request timeouts and cascading failures + +**2. SCAN command:** + +While better than KEYS, SCAN is still too slow for request-time operations: + +```php +// ❌ Avoid in runtime code +$cursor = 0; +do { + [$cursor, $keys] = $this->storageClient->scan($cursor, 'product:*'); + // Process keys +} while ($cursor !== 0); +``` + +**When SCAN is acceptable:** +- Background jobs (CLI context) +- Maintenance scripts +- Data migration tasks +- Debug/diagnostic tools (development only) + +**3. Mass SET operations:** + +Hundreds or thousands of SET operations in a single web request: + +```php +// ❌ Bad: Mass updates in web request +foreach ($products as $product) { + $this->storageClient->set("product:{$product->getSku()}", $data); +} +// 1000 products = 1000 SET operations +``` + +**Solution: Queue for background processing:** + +```php +// ✅ Good: Queue mass updates +foreach ($products as $product) { + $this->eventFacade->trigger( + 'Product.update', + (new EventEntityTransfer())->setId($product->getIdProduct()) + ); +} +// Publish & Sync handles storage updates in background +``` + +### Acceptable operations in runtime code + +**Fast, operation-bounded commands:** + +- `GET`, `MGET`: Reading single or multiple keys +- `SET`, `SETEX`: Writing single keys with expiration +- `HGET`, `HGETALL`: Reading hash fields (if hash is reasonably sized) + +**Guidelines:** + +- Operations should complete in <1ms +- Batch where possible (MGET, MSET, pipelines) +- Limit collection sizes (sets, hashes, sorted sets) +- Use background jobs for bulk operations + +## Don't use Redis storage as a cache for everything + +While Redis is often called a "cache," in Spryker's architecture it serves as primary storage for published data. Using it as a general-purpose cache without strategy leads to problems. + +### Common anti-patterns + +**1. Caching heavyweight objects without limits:** + +```php +// ❌ Bad: Unbounded caching +public function getCustomerOrders(int $customerId): array +{ + $cacheKey = "customer:{$customerId}:orders:all"; + + $orders = $this->storageClient->get($cacheKey); + if ($orders === null) { + $orders = $this->fetchAllOrdersFromDatabase($customerId); + $this->storageClient->set($cacheKey, serialize($orders)); + } + return unserialize($orders); +} +``` + +**Problems:** +- Memory grows unboundedly as customers place orders +- Serialized order arrays can be huge (MBs) +- No expiration = stale data forever +- Wastes memory on rarely accessed data + +**2. Caching computed results without considering invalidation:** + +```php +// ❌ Bad: Cache without expiration or invalidation strategy +$cacheKey = "report:sales:monthly:{$month}"; +$report = $this->storageClient->get($cacheKey); +if ($report === null) { + $report = $this->generateComplexReport($month); + $this->storageClient->set($cacheKey, $report); +} +``` + +**What happens:** +- Current month's report is cached but never invalidates +- Data becomes stale as orders come in +- Cache grows indefinitely with historical reports + +### Proper caching strategy + +**1. Define TTL (Time To Live) for everything:** + +```php +// ✅ Good: Explicit expiration +$ttl = 3600; // 1 hour +$this->storageClient->setex($cacheKey, $ttl, $data); +``` + +**TTL guidelines:** +- **Frequently changing data**: 1-5 minutes +- **Moderately stable data**: 10-60 minutes +- **Rarely changing data**: 1-24 hours +- **Static data**: Consider infinite (but with explicit invalidation) + +**2. Implement cache size limits:** + +```php +// ✅ Good: Limit cached items per key +public function getCachedRecentOrders(int $customerId): array +{ + $cacheKey = "customer:{$customerId}:orders:recent"; + + $orders = $this->storageClient->get($cacheKey); + if ($orders === null) { + // Only cache last 10 orders, not all + $orders = $this->fetchRecentOrders($customerId, limit: 10); + $this->storageClient->setex($cacheKey, 300, serialize($orders)); + } + return unserialize($orders); +} +``` + +**3. Evaluate cache value:** + +Ask before caching: +- **How often is this data accessed?** (Don't cache rarely used data) +- **How expensive is recomputation?** (Cache expensive operations) +- **How large is the cached value?** (Avoid caching multi-MB objects) +- **How quickly does data become stale?** (Short TTL for fast-changing data) + +**4. Monitor cache metrics:** + +Track these metrics: +- **Memory usage**: Total Redis memory consumption +- **Eviction rate**: How often keys are evicted due to memory pressure +- **Hit rate**: Percentage of cache hits vs misses +- **Key count**: Total number of keys in Redis +- **Key size distribution**: Largest keys consuming memory + +**Alert on:** +- Memory usage >80% of allocated space +- Eviction rate increasing significantly +- Hit rate dropping below 70-80% +- Unexpected key count growth + +## Best practices summary + +1. **Limit operations**: Maximum 10-20 Key-Value operations per web request +2. **Use batch operations**: MGET instead of multiple GET calls +3. **Enable storage cache**: Use Spryker's `StorageCacheEventDispatcherPlugin` in the selected applications +4. **Store related data together**: Reduce key count by grouping related attributes +5. **Never use KEYS in production**: Use indexed sets or background jobs +6. **Avoid mass SET operations**: Queue bulk updates for background processing +7. **Define TTL for cached data**: Everything cached should have expiration +8. **Monitor memory usage**: Alert on high memory and eviction rates +9. **Evaluate cache value**: Only cache frequently accessed, expensive-to-compute data + +## Additional resources + +- [Use and configure Redis or ValKey as Key-Value storage](/docs/dg/dev/backend-development/client/use-and-configure-redis-or-valkey-as-a-key-value-store.html) +- [External HTTP requests: Architecture principle](/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html#spryker-architecture-principle-read-from-fast-storage) +- [Redis Best Practices](https://redis.io/docs/latest/operate/oss_and_stack/management/optimization/) +- [Troubleshooting: External calls take a lot of time](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/external-calls-take-a-lot-of-time.html) diff --git a/docs/dg/dev/guidelines/performance-guidelines/monitoring.md b/docs/dg/dev/guidelines/performance-guidelines/monitoring.md index 697ccceedaf..206427a3762 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/monitoring.md +++ b/docs/dg/dev/guidelines/performance-guidelines/monitoring.md @@ -1,7 +1,7 @@ --- title: Monitoring description: This guideline explains the importance of effective monitoring for production e-commerce applications and how to properly configure APM tools. -last_updated: Nov 28, 2025 +last_updated: Feb 26, 2026 template: concept-topic-template --- @@ -22,118 +22,11 @@ For NewRelic configuration: - [Deploy file inheritance: common use cases - Enabling NewRelic](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-inheritance-common-use-cases#enabling-new-relic) - [Troubleshooting Performance Issues](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues) -#### NewRelic instrumentation tips for Backend-Gateway +#### NewRelic instrumentation for Backend-Gateway -The default OOTB setup of NewRelic integration registers all Backend-Gateway transactions under a single transaction name, namely `index.php`. This leads to limited visibility as NewRelic aggregates and filters out slow traces only for this one transaction type, showing detailed traces only for the slowest transactions (often in the 30-60s range). - -Faster transactions (10-30s range) are rarely visible in such a setup. Splitting one single transaction type (`index.php`) into multiple based on URL increases visibility, as NewRelic will show the slowest transactions per transaction type, same as it is for Yves/Zed/Glue apps. - -**Implementation steps:** - -1. Create `src/Pyz/Zed/Monitoring/Communication/Plugin/EventDispatcher/BackendGatewayMonitoringRequestTransactionEventDispatcherPlugin.php`: - -```php -addSubscriber( - $this->getFactory()->createBackendGatewayControllerListener() - ); - - return $eventDispatcher; - } -} -``` - -2. Create `src/Pyz/Zed/Monitoring/Communication/MonitoringCommunicationFactory.php`: - -```php -getMonitoringService() - ); - } -} -``` - -3. Create `src/Pyz/Zed/Monitoring/Communication/Plugin/BackendGatewayControllerListener.php`: - -```php -monitoringService = $monitoringService; - } - - public function onKernelController(ControllerEvent $event): void - { - if (!$event->isMasterRequest()) { - return; - } - - $request = $event->getRequest(); - $transactionName = $this->getTransactionName($request); - - $this->monitoringService->setTransactionName($transactionName); - $this->monitoringService->addCustomParameter('request_uri', $request->server->get('REQUEST_URI', 'n/a')); - } - - protected function getTransactionName(Request $request): string - { - // Backend-gateway uses _route like "module:gateway:action" - $route = $request->attributes->get('_route', 'n/a'); - return str_replace(':', '/', $route); - } - - public static function getSubscribedEvents(): array - { - return [ - KernelEvents::CONTROLLER => ['onKernelController', static::PRIORITY], - ]; - } -} -``` - -4. Update `src/Pyz/Zed/EventDispatcher/EventDispatcherDependencyProvider.php`: - -Add the custom `BackendGatewayMonitoringRequestTransactionEventDispatcherPlugin` after `MonitoringRequestTransactionEventDispatcherPlugin` in `\Pyz\Zed\EventDispatcher\EventDispatcherDependencyProvider::getBackendGatewayEventDispatcherPlugins()`. +To enable it, register `\Spryker\Zed\Monitoring\Communication\Plugin\EventDispatcher\GatewayMonitoringRequestTransactionEventDispatcherPlugin` in `\Pyz\Zed\EventDispatcher\EventDispatcherDependencyProvider::getBackendGatewayEventDispatcherPlugins()`. ## APM is properly configured @@ -141,6 +34,10 @@ Traces/transactions are grouped by application (Yves, Zed, Glue, etc) and by URL For NewRelic transactions grouping, see [New Relic transactions grouping by queue names](/docs/dg/dev/guidelines/performance-guidelines/elastic-computing/new-relic-transaction-grouping-by-queue-names). +## APM-based troubleshooting + +For a step-by-step guide on using New Relic APM to troubleshoot performance issues in Spryker applications, see [APM — New Relic based troubleshooting](/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.html). + ## APM access The development team has a NewRelic "Full User" account and is able to access APM metrics for a project. diff --git a/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines.md b/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines.md index f803a1c9377..57573af613f 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines.md +++ b/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines.md @@ -18,8 +18,13 @@ These performance guidelines originate from Spryker's years of experience across - [Session locks](/docs/dg/dev/guidelines/performance-guidelines/session-locks.html) to optimize session locking mechanisms and reduce performance impact. Also see [Redis session lock](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/redis-session-lock.html) for troubleshooting session lock issues. - [Bot control](/docs/dg/dev/guidelines/performance-guidelines/bot-control.html) to manage honest and malicious bot traffic effectively. - [Batch processing of Propel entities](/docs/dg/dev/guidelines/performance-guidelines/performance-guidelines-batch-processing-propel-entities.html) for efficient batch processing, reduced database load, and support for complex entity relationships. +- [Database performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/database-performance-guidelines.html) to optimize database operations through proper indexing, query optimization, and avoiding common database anti-patterns. +- [Key-Value storage performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/key-value-storage-performance-guidelines.html) to optimize Redis/ValKey usage by limiting operations, avoiding admin commands in runtime, and implementing proper caching strategies. - [External HTTP requests](/docs/dg/dev/guidelines/performance-guidelines/external-http-requests.html) to understand Spryker's architecture principle of reading from fast storage and learn how to manage external HTTP requests when they're necessary. - [Search performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/search-performance-guidelines.html) to optimize Elasticsearch and OpenSearch performance, avoid common search anti-patterns, and implement efficient search queries. +- [Infrastructure and worker configuration guidelines](/docs/dg/dev/guidelines/performance-guidelines/infrastructure-worker-configuration-guidelines.html) to optimize nginx configuration and worker orchestration for multi-store setups. +- [CDN and traffic management integration](/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html) to configure CDN solutions like Akamai or Cloudflare to work correctly with Spryker's nginx compression and avoid unnecessary data transfer overhead. +- [Custom code performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/custom-code-performance-guidelines.html) to implement performant custom code including caching strategies, background processing, and Quote calculator optimization. - [Common pitfalls in OMS design](/docs/pbc/all/order-management-system/latest/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.html) to avoid performance bottlenecks in Order Management System processes, especially ensuring heavy operations run in CLI context rather than during web requests. - [Order management system multi-thread](/docs/pbc/all/order-management-system/latest/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.html) to process OMS timeouts and conditions in parallel for improved order processing performance. - [Troubleshooting performance issues](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html) for detecting and fixing common performance problems. diff --git a/docs/dg/dev/guidelines/performance-guidelines/twig-performance-best-practices.md b/docs/dg/dev/guidelines/performance-guidelines/twig-performance-best-practices.md index 463cfd9e5a0..6ed0c8d5b0e 100644 --- a/docs/dg/dev/guidelines/performance-guidelines/twig-performance-best-practices.md +++ b/docs/dg/dev/guidelines/performance-guidelines/twig-performance-best-practices.md @@ -1,7 +1,7 @@ --- title: Twig performance best practices description: This guideline explains how to optimize Twig templating engine performance for Spryker applications. -last_updated: Nov 28, 2025 +last_updated: Jan 30, 2026 template: concept-topic-template related: - title: Integrate automated SVG sprite extraction @@ -16,10 +16,14 @@ It is important to follow best practices related to Twig performance optimisatio Twig files can be precompiled into PHP classes to speed the performance up. This behavior can be activated in the configuration. We highly recommend using the `FORCE_BYTECODE_INVALIDATION` option. Otherwise, Opcache may contain outdated content, as the files are modified during runtime. +**config/Shared/config_default.php** + ```php ----//--- + +... use Twig\Cache\FilesystemCache; ----//--- +... + $currentStore = Store::getInstance()->getStoreName(); $config[TwigConstants::ZED_TWIG_OPTIONS] = [ @@ -43,18 +47,6 @@ $config[TwigConstants::YVES_TWIG_OPTIONS] = [ FilesystemCache::FORCE_BYTECODE_INVALIDATION, ), ]; - -$config[TwigConstants::YVES_PATH_CACHE_FILE] = sprintf( - '%s/src/Generated/Yves/Twig/codeBucket%s/.pathCache', - APPLICATION_ROOT_DIR, - $currentStore, -); - -$config[TwigConstants::ZED_PATH_CACHE_FILE] = sprintf( - '%s/src/Generated/Zed/Twig/codeBucket%s/.pathCache', - APPLICATION_ROOT_DIR, - $currentStore, -); ``` ## Activate Twig path cache @@ -87,13 +79,14 @@ Make sure that the command is executed after the `vendor/bin/console twig:cache: 2. Register the following classes for the Zed command: -**\Spryker\Zed\Console\ConsoleDependencyProvider** +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** ```php ... use Spryker\Zed\Form\Communication\Plugin\Application\FormApplicationPlugin; use Spryker\Zed\Security\Communication\Plugin\Application\ConsoleSecurityApplicationPlugin; use Spryker\Zed\Twig\Communication\Console\TwigTemplateWarmerConsole; +use Spryker\Zed\Router\Communication\Plugin\Application\RouterApplicationPlugin; ... protected function getConsoleCommands(Container $container): array @@ -111,6 +104,7 @@ use Spryker\Zed\Twig\Communication\Console\TwigTemplateWarmerConsole; $applicationPlugins[] = new ConsoleSecurityApplicationPlugin(); $applicationPlugins[] = new TwigApplicationPlugin(); $applicationPlugins[] = new FormApplicationPlugin(); + $applicationPlugins[] = new RouterApplicationPlugin(); return $applicationPlugins; } @@ -118,7 +112,7 @@ use Spryker\Zed\Twig\Communication\Console\TwigTemplateWarmerConsole; 3. Register the following classes for the Yves console context to allow Twig properly compile templates. -**\Spryker\Yves\Console\ConsoleDependencyProvider** +**src/Pyz/Yves/Console/ConsoleDependencyProvider.php** ```php ... diff --git a/docs/dg/dev/guidelines/project-development-guidelines.md b/docs/dg/dev/guidelines/project-development-guidelines.md index 7c8dd83ac19..5eb0ec94cbf 100644 --- a/docs/dg/dev/guidelines/project-development-guidelines.md +++ b/docs/dg/dev/guidelines/project-development-guidelines.md @@ -1,7 +1,7 @@ --- title: Project development guidelines description: This article describes the strategies a project team can take while building a Spryker-based project. -last_updated: Dec 8, 2025 +last_updated: Feb 20, 2026 template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/project-development-guidelines originalArticleId: 3608265d-c19f-4415-83c1-4584d50e48b0 @@ -43,6 +43,8 @@ You can check supported PHP versions in the [Docker Hub](https://hub.docker.com/ Starting from the first day of development, apply the [coding guidelines](/docs/dg/dev/guidelines/coding-guidelines/coding-guidelines.html). Pay attention to an [architecture convention](/docs/dg/dev/architecture/architectural-convention.html) page as in addition it provides a set of rules and recommendations that applicable specifically for project development. +Additionally, consider documenting your project architecture from the start using [Architecture as Code](/docs/dg/dev/architecture/architecture-as-code.html) practices, which ensures your architecture stays aligned with implementation and facilitates team onboarding. + ## Use custom namespaces Instead of using the `Pyz` namespace, it's possible to use your own namespace for project development. For example, use the project name as a namespace. diff --git a/docs/dg/dev/guidelines/testing-guidelines/cypress-testing.md b/docs/dg/dev/guidelines/testing-guidelines/cypress-testing.md new file mode 100644 index 00000000000..cc3faf27535 --- /dev/null +++ b/docs/dg/dev/guidelines/testing-guidelines/cypress-testing.md @@ -0,0 +1,38 @@ +--- +title: E2E Testing with Cypress +description: Learn how to use Cypress for end-to-end testing in Spryker projects. +last_updated: March 02, 2026 +template: concept-topic-template +related: + - title: Running tests with Robot Framework + link: /docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.html + - title: Setting up tests + link: /docs/dg/dev/guidelines/testing-guidelines/setting-up-tests.html + - title: Testing best practices + link: /docs/dg/dev/guidelines/testing-guidelines/testing-best-practices/best-practices-for-effective-testing.html +--- + +Cypress is an end-to-end testing framework that provides a modern approach to testing web applications. Spryker provides a Cypress boilerplate project with pre-configured setup, best practices, and examples for testing Spryker-based applications. + +## Cypress boilerplate + +For comprehensive information on setting up and using Cypress with Spryker, refer to the [cypress-boilerplate](https://github.com/spryker-projects/cypress-boilerplate) repository. + +The boilerplate includes: +- Pre-configured Cypress setup optimized for Spryker projects +- Example test cases and patterns +- Documentation and best practices +- Integration guides + +The boilerplate does NOT include: +- Complete test coverage - you should add and adjust example tests to fit your project +- Correct locators - the locators in the boilerplace are based on Spryker demo shops, adjust the locators in accordance with your project + +## Internal Cypress tests + +Cypress tests are used by Spryker for internal testing of the core Spryker features as well. You should remove the mentions of `cypress-tests` from `composer.json`. You can re-use and customize these tests for your project, however, Spryker does not guarantee these tests will work on your project, if you keep them. Spryker recommends you use the [boilerplate](https://github.com/spryker-projects/cypress-boilerplate/wiki) instead. + +## Resources + +- **Repository**: [spryker-projects/cypress-boilerplate](https://github.com/spryker-projects/cypress-boilerplate) +- **Wiki**: [cypress-boilerplate Wiki](https://github.com/spryker-projects/cypress-boilerplate/wiki) diff --git a/docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.md b/docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.md index 6cfbe878807..95dbc595bf5 100644 --- a/docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.md +++ b/docs/dg/dev/guidelines/testing-guidelines/running-tests-with-robot-framework.md @@ -1,7 +1,7 @@ --- title: Running tests with Robot Framework description: Learn how to run tests with the Robot Framework in the command line for your Spryker based projects. -last_updated: May 26, 2023 +last_updated: March 02, 2026 template: howto-guide-template related: - title: Running tests with the Docker SDK @@ -10,6 +10,8 @@ related: This document describes how to run tests with Robot Framework. +Robot Framework tests are used by Spryker for internal testing of the core Spryker features. You should remove the mentions of `robotframework-suite-test` from `composer.json`. You can re-use and customize these tests for your project, however, Spryker does not guarantee these tests will work on your project, if you keep running them. + ## Running tests Robot Framework test cases are executed from the command line. By default, the end result of the tests is an output file in the XML format, an HTML report, and a log file. After the execution, you can combine and otherwise post-process the output files with the Robot tool. diff --git a/docs/dg/dev/integrate-and-configure/Integrate-profiler-module.md b/docs/dg/dev/integrate-and-configure/Integrate-profiler-module.md index bcdf0433daa..a42a4014927 100644 --- a/docs/dg/dev/integrate-and-configure/Integrate-profiler-module.md +++ b/docs/dg/dev/integrate-and-configure/Integrate-profiler-module.md @@ -1,7 +1,7 @@ --- title: Integrate profiler module description: Learn the prerequisites and how to enable and integrate profiler module in to a Spryker based project. -last_updated: March 22, 2023 +last_updated: Feb 19, 2026 template: howto-guide-template redirect_from: - /docs/scos/dev/technical-enhancement-integration-guides/Integrate-profiler-module.html @@ -13,11 +13,11 @@ This document describes how to integrate profiler module into a Spryker project. To start the integration, install the necessary features: -| NAME | VERSION | INSTALLATION GUIDE | -|-----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Web Profiler for Zed | {{page.version}} | [Web Profiler feature integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html) | -| Web Profiler for Yves | {{page.version}} | [Web Profiler feature integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html) | +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Web Profiler for Zed | {{page.release_tag}} | [Web Profiler feature integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html) | +| Web Profiler for Yves | {{page.release_tag}} | [Web Profiler feature integration](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html) | ### 1) Enable extension diff --git a/docs/dg/dev/integrate-and-configure/integrate-authorization-enabler.md b/docs/dg/dev/integrate-and-configure/integrate-authorization-enabler.md index 644f3858039..3fd4a0fc5b4 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-authorization-enabler.md +++ b/docs/dg/dev/integrate-and-configure/integrate-authorization-enabler.md @@ -1,7 +1,7 @@ --- title: Integrate Authorization Enabler description: Learn how to enable and integrate the Authorization Enabler for your Spryker based projects. -last_updated: Sep 2, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/authorization-enabler-integration originalArticleId: 809afa43-2beb-47d6-acaa-ae58efa62470 @@ -20,7 +20,7 @@ To start the integration, review and install the necessary features: | NAME | VERSION | | ----------- | ------ | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ## 1) Install the required modules diff --git a/docs/dg/dev/integrate-and-configure/integrate-basic-seo-techniques.md b/docs/dg/dev/integrate-and-configure/integrate-basic-seo-techniques.md index 858790f76d7..dbfc3cc753e 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-basic-seo-techniques.md +++ b/docs/dg/dev/integrate-and-configure/integrate-basic-seo-techniques.md @@ -1,7 +1,7 @@ --- title: Integrate basic SEO techniques description: Learn how you can apply the basic SEO techniques such as improved headings structure and use of microddata -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/basic-seo-techniques-integration-guide originalArticleId: 2b638a56-a0ee-4b48-9a0f-d7ae7d2bfd14 @@ -20,7 +20,7 @@ To start the integration, overview and install the necessary features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ## 1) Update the required SprykerShop modules using Composer diff --git a/docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.md b/docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.md index 40139d1183b..9394f563469 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.md +++ b/docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.md @@ -1,7 +1,7 @@ --- title: Integrate custom location for static assets description: Learn how you can enable and integrate custom location for static assets within your Spryker based project. -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/custom-location-for-static-assets originalArticleId: d3bcba9d-bfc6-41e7-9440-b0909d7263ae @@ -27,14 +27,14 @@ To start the integration, overview and install the necessary feature: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/spryker-core: "^{{page.version}}" --update-with-dependencies +composer require spryker-feature/spryker-core: "^{{page.release_tag}}" --update-with-dependencies ``` ### 2) Set up behavior diff --git a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.md b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.md index a35d2311f7b..32ea00fe3ae 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.md +++ b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.md @@ -36,7 +36,47 @@ composer require spryker/zed-request:^3.24.0 ## Integration -To use Web Profiler for Backend Gateway, ensure that Web Profiler is enabled for Yves. For details on enabling Web Profiler Widget for Yves, see [Integrate Web Profiler Widget for Yves](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html). +To use Web Profiler for Backend Gateway, you need to configure both Zed and Yves applications. + +### 1. Backend Gateway Application configuration (Zed) + +Add the Web Profiler Application Plugin to the Backend Gateway in `Pyz\Zed\Application\ApplicationDependencyProvider`: + +**src/Pyz/Zed/Application/ApplicationDependencyProvider.php** + +```php + + */ + protected function getBackendGatewayApplicationPlugins(): array + { + $plugins = [ + // Other plugins... + ]; + + if (class_exists(WebProfilerApplicationPlugin::class)) { + $plugins[] = new WebProfilerApplicationPlugin(); + } + + return $plugins; + } +} +``` + +### 2. Yves Web Profiler Widget configuration + +Ensure that Web Profiler is enabled for Yves. For details on enabling Web Profiler Widget for Yves, see [Integrate Web Profiler Widget for Yves](/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html). + +Add the Zed Request Data Collector Plugin to `Pyz\Yves\WebProfilerWidget\WebProfilerWidgetDependencyProvider`: **src/Pyz/Yves/WebProfilerWidget/WebProfilerWidgetDependencyProvider.php** diff --git a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.md b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.md index 988a62c7ed3..60aa9156cb7 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.md +++ b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.md @@ -1,17 +1,17 @@ --- title: Integrate Web Profiler for Glue description: This guide describes how to integrate and use the Web Profiler available in Glue applications for development purposes. -last_updated: Dec 6, 2024 +last_updated: Feb 24, 2026 template: howto-guide-template related: - title: Integrate Web Profiler for Zed - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.html - title: Integrate Web Profiler Widget for Yves - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html - title: Integrate Web Profiler for Backend Gateway - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html - title: Integrate Profiler Module - link: docs/dg/dev/integrate-and-configure/Integrate-profiler-module.html + link: /docs/dg/dev/integrate-and-configure/Integrate-profiler-module.html --- The *Web Profiler for Glue* provides a tool for debugging and informational purposes for Glue API applications. The tool is accessible when making requests to Glue API endpoints and provides comprehensive profiling data for API requests. @@ -26,25 +26,18 @@ The profiler is based on *Symfony Profiler*. For details, see [Profiler document ## Prerequisites -Before integrating Web Profiler for Glue, ensure that the following modules are updated to their latest versions: +Before integrating Web Profiler for Glue, ensure that the following modules are updated to the required versions: -| Module | Description | -|:-------------------------------|:----------------------------------------------| -| `spryker/glue-application` | Core Glue Application framework | -| `spryker/http` | HTTP handling for Glue applications | -| `spryker/redis` | Redis integration for data collection | -| `spryker/search-elasticsearch` | Elasticsearch integration for data collection | -| `spryker/web-profiler` | Core Web Profiler module | -| `spryker/zed-request` | Zed request handling and data collection | -| `spryker/profiler` | Spryker profiler | - -## Installation - -Install the Web Profiler module: - -```bash -composer require spryker/web-profiler --dev -``` +| Module | Version | Required | Description | +|:-------------------------------|:--------|:---------|:----------------------------------------------| +| `spryker/glue-application` | ^1.72.0 | Yes | Core Glue Application framework | +| `spryker/http` | ^1.15.0 | Yes | HTTP handling for Glue applications | +| `spryker/redis` | ^2.11.0 | Yes | Redis integration for data collection | +| `spryker/search-elasticsearch` | ^1.21.0 | Yes | Elasticsearch integration for data collection | +| `spryker/web-profiler` | ^1.7.0 | Yes | Core Web Profiler module | +| `spryker/zed-request` | ^3.25.0 | Yes | Zed request handling and data collection | +| `spryker/profiler` | ^0.1.3 | Yes | Spryker profiler | +| `spryker/propel` | ^3.49.0 | No | Propel data collection | ## Integration @@ -246,6 +239,7 @@ use Spryker\Glue\Http\Plugin\Twig\HttpKernelTwigPlugin; use Spryker\Glue\Http\Plugin\Twig\RuntimeLoaderTwigPlugin; use Spryker\Glue\Http\Plugin\WebProfiler\WebProfilerExternalHttpDataCollectorPlugin; use Spryker\Glue\Profiler\Plugin\WebProfiler\WebProfilerProfilerDataCollectorPlugin; +use Spryker\Glue\Propel\Plugin\WebProfiler\WebProfilerPropelDataCollectorPlugin; use Spryker\Glue\Redis\Plugin\WebProfiler\WebProfilerRedisDataCollectorPlugin; use Spryker\Glue\SearchElasticsearch\Plugin\WebProfiler\WebProfilerElasticsearchDataCollectorPlugin; use Spryker\Glue\WebProfiler\Plugin\WebProfiler\WebProfilerConfigDataCollectorPlugin; @@ -282,6 +276,10 @@ class WebProfilerDependencyProvider extends SprykerWebProfilerDependencyProvider $plugins[] = new WebProfilerProfilerDataCollectorPlugin(); } + if (class_exists(WebProfilerPropelDataCollectorPlugin::class)) { + $plugins[] = new WebProfilerPropelDataCollectorPlugin(); + } + return $plugins; } @@ -301,6 +299,47 @@ class WebProfilerDependencyProvider extends SprykerWebProfilerDependencyProvider +## Configure Propel Data Collector + +To enable the Propel data collector, ensure that you have set the following in `config/Shared/config_local.php`: + +```php +$config[\Spryker\Shared\Propel\PropelConstants::PROPEL_DEBUG] = true; +``` + +## Using Segmented SQL Collection + +The Propel data collector includes a segmented SQL collection feature that allows you to isolate and analyze database queries from specific code paths. Use the static methods `startSegment()` and `endSegment()` to capture queries: + +```php +use Spryker\Shared\Propel\Logger\PropelInMemoryLogger; + +PropelInMemoryLogger::startSegment('product-validation'); +$this->validateRequest($glueRequestTransfer); +PropelInMemoryLogger::endSegment(); + +PropelInMemoryLogger::startSegment('product-fetch'); +$productTransfers = $this->productRepository->findProducts($criteria); +PropelInMemoryLogger::endSegment(); +``` + +Segmented queries appear in the Web Profiler under the Propel panel as collapsible sections showing segment key name, query counts, and full query tables. + +### Best Practices + +- Use descriptive segment keys that identify the API operation (for example, `product-list-validation`, `cart-calculation`, `checkout-processing`) +- Always pair `startSegment()` with `endSegment()` to prevent queries from being incorrectly categorized +- Use try-finally blocks to ensure segments are properly closed: + +```php +PropelInMemoryLogger::startSegment('my-api-operation'); +try { + $result = $this->performDatabaseOperations(); +} finally { + PropelInMemoryLogger::endSegment(); +} +``` + ## Available data collectors The Web Profiler for Glue includes the following data collectors: @@ -317,6 +356,7 @@ The Web Profiler for Glue includes the following data collectors: | **External HTTP** | Tracks external HTTP calls | `WebProfilerExternalHttpDataCollectorPlugin` | | **Exception** | Captures exceptions and errors | `WebProfilerExceptionDataCollectorPlugin` | | **Logger** | Displays log messages | `WebProfilerLoggerDataCollectorPlugin` | +| **Propel** | Monitors Propel database queries (available from `spryker/propel:^3.49.0`) | `WebProfilerPropelDataCollectorPlugin` | | **Profiler** | Provides XHProf profiling data (if `xhprof` extension is installed) | `WebProfilerProfilerDataCollectorPlugin` | ## Accessing Web Profiler diff --git a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.md b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.md index 0e8d80aa3fa..58d4cc21f0f 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.md +++ b/docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-zed.md @@ -1,7 +1,7 @@ --- title: Integrate Web Profiler for Zed description: This guide describes how to integrate and use the Web Profiler toolbar available in Zed for development purposes. -last_updated: Jun 16, 2021 +last_updated: Feb 24, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/web-profiler originalArticleId: 9f24bafe-1bae-49f7-bd22-505a61629807 @@ -10,17 +10,17 @@ redirect_from: - /docs/scos/dev/migration-and-integration/202108.0/development-tools/web-profiler.html related: - title: Integrate Web Profiler for Glue - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-glue.html - title: Integrate Web Profiler for Backend Gateway - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-for-backend-gateway.html - title: Integrating Web Profiler Widget for Yves - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-web-profiler-widget-for-yves.html - title: Integrating Formatter - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-formatter.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-formatter.html - title: Integrating SCSS linter - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-scss-linter.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-scss-linter.html - title: Integrating TS linter - link: docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-ts-linter.html + link: /docs/dg/dev/integrate-and-configure/integrate-development-tools/integrate-ts-linter.html --- The *Web Profiler* provides a toolbar for debugging and informational purposes. The toolbar is located at the bottom of a loaded page. @@ -61,6 +61,32 @@ Individual *Data Collectors* can be added to `\Pyz\Zed\WebProfiler\WebProfilerD Spryker provides a lot of build-in collectors. You can locate them in `WebProfiler/src/Spryker/Zed/WebProfiler/Communication/Plugin/WebProfiler/`. +Additionally, you can integrate the Propel data collector (available from `spryker/propel:^3.49.0`) by adding `\\Spryker\\Zed\\Propel\\Communication\\Plugin\\WebProfiler\\WebProfilerPropelDataCollectorPlugin` to `\\Pyz\\Zed\\WebProfiler\\WebProfilerDependencyProvider::getDataCollectorPlugins()`. + +To enable the Propel data collector, ensure that you have set the following in `config/Shared/config_local.php`: + +```php +$config[\Spryker\Shared\Propel\PropelConstants::PROPEL_DEBUG] = true; +``` + +## Using Segmented SQL Collection + +The Propel data collector includes a segmented SQL collection feature that allows you to isolate and analyze database queries from specific code paths. Use the static methods `startSegment()` and `endSegment()` to capture queries: + +```php +use Spryker\Shared\Propel\Logger\PropelInMemoryLogger; + +PropelInMemoryLogger::startSegment('order-validation'); +$this->validateOrder($orderTransfer); +PropelInMemoryLogger::endSegment(); + +PropelInMemoryLogger::startSegment('order-save'); +$orderTransfer = $this->saveOrder($quoteTransfer); +PropelInMemoryLogger::endSegment(); +``` + +Segmented queries appear in the Web Profiler under the Propel panel as collapsible sections showing segment key name, query counts, and full query tables. + ## Additional profiling with XHProf If the `xhprof` extension is enabled and the Profiler module is integrated, the Web Profiler also includes detailed performance profiling data through XHProf. This provides function-level performance analysis and call graphs. diff --git a/docs/dg/dev/integrate-and-configure/integrate-dynamic-propel-configuration.md b/docs/dg/dev/integrate-and-configure/integrate-dynamic-propel-configuration.md index fbefc5d976f..8109b1a60c9 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-dynamic-propel-configuration.md +++ b/docs/dg/dev/integrate-and-configure/integrate-dynamic-propel-configuration.md @@ -1,7 +1,7 @@ --- title: Integrate dynamic Propel configuration description: Learn about dynamic propel configuration and how to integrate it into your project. -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/dynamic-propel-configuration originalArticleId: 8fd4016c-928a-4abc-968e-0f1518cc96da @@ -27,7 +27,7 @@ Ensure that the related features are installed: | NAME | VERSION | REQUIRED SUB-FEATURE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules diff --git a/docs/dg/dev/integrate-and-configure/integrate-environment-configuration-enhancement.md b/docs/dg/dev/integrate-and-configure/integrate-environment-configuration-enhancement.md index cf9df688490..e89fc7f29ad 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-environment-configuration-enhancement.md +++ b/docs/dg/dev/integrate-and-configure/integrate-environment-configuration-enhancement.md @@ -1,7 +1,7 @@ --- title: Integrate environment configuration enhancement description: Learn how to replace the environment name settings with explicit configuration. -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/environment-configuration-enhancement originalArticleId: af8fcee2-4a53-4e77-9749-0e171bf899f3 @@ -29,7 +29,7 @@ Install the required features: | NAME | VERSION | REQUIRED SUB-FEATURE | | --- | --- | --- | -| Spryker Core | {{page.version}} | [Feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core | {{page.release_tag}} | [Feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | ### 1) Install the required modules diff --git a/docs/dg/dev/integrate-and-configure/integrate-health-checks.md b/docs/dg/dev/integrate-and-configure/integrate-health-checks.md index 4ce48b1e9f7..d40f7cb0b6a 100644 --- a/docs/dg/dev/integrate-and-configure/integrate-health-checks.md +++ b/docs/dg/dev/integrate-and-configure/integrate-health-checks.md @@ -1,7 +1,7 @@ --- title: Integrate health checks description: Health checks allow to determine whether application services are working properly and, when automated, detect issues right when they appear. -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/health-checks originalArticleId: 6436e19e-66bf-45a6-a935-889c88531bc2 @@ -54,14 +54,14 @@ Install the required features: | NAME | VERSION | | --- | --- | -| Spryker Core | {{page.version}} | +| Spryker Core | {{page.release_tag}} | ### 1) Install the required modules Install the required modules using Composer: ```bash -composer require spryker-feature/spryker-core: "^{{page.version}}" --update-with-dependencies +composer require spryker-feature/spryker-core: "^{{page.release_tag}}" --update-with-dependencies ``` {% info_block warningBox "Verification" %} diff --git a/docs/dg/dev/integrate-and-configure/integrate-symfony-messenger.md b/docs/dg/dev/integrate-and-configure/integrate-symfony-messenger.md new file mode 100644 index 00000000000..4b53b8b86d1 --- /dev/null +++ b/docs/dg/dev/integrate-and-configure/integrate-symfony-messenger.md @@ -0,0 +1,455 @@ +--- +title: Integrate Symfony Messenger +description: Learn how to integrate and configure Symfony Messenger module in a Spryker project. +last_updated: February 10, 2026 +template: howto-guide-template +--- + +This document describes how to integrate and configure the Symfony Messenger module into your Spryker project. + +## Description + +Symfony Messenger is a component that lets you dispatch and handle messages using different transports. By integrating Symfony Messenger into your Spryker project, you can switch between RabbitMQ and other transports, such as SQS, Redis, and even a database, for queue handling. You can also use Symfony Messenger for other use cases that require synchronous or asynchronous message processing. + +## Install + +{% info_block warningBox "Check if you have it installed" %} + +Check that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------|----------------------------------| +| SymfonyMessenger | vendor/spryker/symfony-messenger | +| SymfonyMessengerExtension | vendor/spryker/symfony-extension | + +If so, skip this section. If not, install the missing modules before proceeding. + +{% endinfo_block %} + +Install the required modules using Composer: + +```shell +composer require spryker/symfony-messenger +``` + +## Usage as a Queue Adapter + +You can use Symfony Messenger as a queue adapter in Spryker to replace the existing RabbitMQ adapter. + +In order to use Symfony Messenger as a queue adapter, you need to configure it and enable the corresponding plugins. + +### Configure + +1. Provide a DSN for the Queue transport in `config/Shared/config_default.php`: + +```php + $connection) { + ... + $config[SymfonyMessengerConstants::QUEUE_DSN] = sprintf( + 'amqp://%s:%s@%s:%s/%s', + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_USERNAME], + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_PASSWORD], + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_HOST], + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_PORT], + $config[RabbitMqEnv::RABBITMQ_CONNECTIONS][$key][RabbitMqEnv::RABBITMQ_VIRTUAL_HOST], + ); +} +``` + +The protocol in the DSN determines which transport is used. Out of the box, Spryker provides RabbitMQ as the transport for queue processing. You do not need to provide a queue name in the DSN because the application defines it when dispatching messages. + +2. Provide a list of queues that can be processed. + +***src/Pyz/Client/SymfonyMessenger/SymfonyMessengerConfig.php*** + +```php + + */ + public function getQueueConfiguration(): array + { + return array_merge( + [ + EventConstants::EVENT_QUEUE => [ + EventConfig::EVENT_ROUTING_KEY_RETRY => EventConstants::EVENT_QUEUE_RETRY, + EventConfig::EVENT_ROUTING_KEY_ERROR => EventConstants::EVENT_QUEUE_ERROR, + ], + ... + ], + ); + } +} +``` + +This configuration is similar to the RabbitMQ configuration, so you can copy it from `\Pyz\Client\RabbitMq\RabbitMqConfig::getQueueConfiguration()`. + +### Enable Queue Adapter + +To enable the Symfony Messenger queue adapter, register the required plugins: + +1. Add the Symfony Messenger transport plugin to `src/Pyz/Zed/Queue/QueueDependencyProvider.php`: + +***src/Pyz/Zed/Queue/QueueDependencyProvider.php*** + +```php + + */ + protected function createQueueAdapters(Container $container): array + { + return [ + $container->getLocator()->rabbitMq()->client()->createQueueAdapter(), + // You can add the adapter from the Symfony Messenger module without removing the existing one so that you can switch between them when needed. + $container->getLocator()->symfonyMessenger()->client()->createQueueAdapter(), + ]; + } +} +``` + +2. Enable adapter in `config/Shared/config_default.php`: + +***config/Shared/config_default.php*** + +```php + [ + QueueConfig::CONFIG_QUEUE_ADAPTER => SymfonyMessengerQueueAdapter::class, + ], +]; + +$config[QueueConstants::QUEUE_ADAPTER_CONFIGURATION_DEFAULT] = [ + QueueConfig::CONFIG_QUEUE_ADAPTER => SymfonyMessengerQueueAdapter::class, +]; +``` + +This steps will replace the existing RabbitMQ adapter with the Symfony Messenger adapter for the queues defined in the configuration. + +### Additional configuration + +To provide additional configuration for the Symfony Messenger transport, use the following approach: + +#### Provide queue transport configuration + +You can specify transport options per queue or provide a default configuration for all queues. + +The following example shows the default configuration for all queues. +Example below is a default configuration for the AMQP transport, which is used for queue processing in Symfony Messenger. You can adjust it according to your needs. + +***src/Pyz/Client/SymfonyMessenger/SymfonyMessengerConfig.php*** + +```php +> + */ + public function getQueueTransportConfiguration(): array + { + return [ + 'default' => [ + 'auto_setup' => false, + 'persistent' => 'true', + 'connect_timeout' => 3, + 'read_timeout' => 130, + 'write_timeout' => 130, + 'heartbeat' => 0, + 'rpc_timeout' => 0, + ], + ]; + } +} + +``` + +{% info_block warningBox "Verification" %} + +To verify that the Symfony Messenger Queue Adapter integration is working correctly: + +1. Save any entity in the backoffice that should be synced to the storefront or run an import. +2. Check the RabbitMQ management interface to check if queues have messages and they are being processed. +3. Check that messages are being processed successfully and there are no errors in the logs. + +{% endinfo_block %} + +## Usage as a Message Consumer + +Symfony Messenger is not limited to queue adapter usage. You can also use it as a message consumer for messages dispatched in your application. To use Symfony Messenger as a message consumer, configure it and enable the required plugins. +In order to use Symfony Messenger as a message consumer, you need to configure it and enable the corresponding plugins. + +1. Install required transport factory. + +Out of the box, Symfony Messenger module provides the AMQP as a transport option. If any other transport options is required it must be added separately. To do this, implement `\Spryker\Shared\SymfonyMessengerExtension\Dependency\Plugin\TransportFactoryProviderPluginInterface` that provides transport factories that can create a transport instance. A single plugin can provide multiple transport factories. + +Example below will provide the `SchedulerTransportFactory` that allows to use Symfony Messenger for processing scheduled tasks in the Symfony Scheduler module, but you can provide any transport factory that you need. + +```php + + */ + public function getTransportFactories(): array + { + return [ + $this->getFactory()->createSchedulerTransportFactory(),//Will return an instance of SchedulerTransportFactory that is used for processing scheduled tasks in the Symfony Scheduler module. + ]; + } +} +``` + +Wire it in the dependency provider of Symfony Messenger module: + + +**src/Pyz/Client/SymfonyMessenger/SymfonyMessengerDependencyProvider.php** + +```php + + */ + protected function getTransportFactoryProviderPlugins(): array + { + return [ + new SchedulerTransportFactoryProviderPlugin(), + ]; + } +} +``` + +2. Configure transports for messages + +Transport factories will be used in order to create transport instances that will handle messages. Transport names and their DSN are provided via implementation of `\Spryker\Shared\SymfonyMessengerExtension\Dependency\Plugin\AvailableTransportProviderPluginInterface`. + +```php + 'amqp://guest:guest@localhost:5672/eu_host', + ]; + } +} +``` + +Wire it in the dependency provider of Symfony Messenger module: + +**src/Pyz/Client/SymfonyMessenger/SymfonyMessengerDependencyProvider.php** + +```php + + */ + protected function getAvailableTransportProviderPlugins(): array + { + return [ + new FooBarAsyncTransportProviderPlugin(), + ]; + } +} +``` + +3. Map messages to transports and handlers. + +Message is a data object that is dispatched via Symfony Messenger and processed by the handler. Handler is a callable that contains the logic for processing the message. +Message can be any object that can be serialized and deserialized by Symfony Messenger. It can be a transfer or any other DTO. Handler must be a callable that processes the message. It can be a class that implements the `__invoke()` method or any other callable. +Yon need to map messages to handlers and transports via `\Spryker\Shared\SymfonyMessengerExtension\Dependency\Plugin\MessageMappingProviderPluginInterface` plugin. + +First, create a message and a handler that you want to map to each other. + +```php +namespace Pyz\Zed\FooBar\Communication\Plugin\SymfonyMessenger; + +class FooBarMessage +{ + protected string $data; + + public function __construct(string $data) + { + $this->data = $data; + } + + public function getData(): string + { + return $this->data; + } +} +``` + +```php +namespace Pyz\Zed\FooBar\Communication\Plugin\SymfonyMessenger; + +class FooBarMessageHandler +{ + public function __invoke(FooBarMessage $message): void + { + //Handle the message + } +} +``` + +And we need to map them to each other and to the transport that will handle them: + +```php + [ + new FooBarMessageHandler(), + ], + ]; + } + + public function getMessageToTransportMap(): array + { + return [ + FooBarMessage::class => ['foo_bar_async'], //DSN provided in FooBarAsyncTransportProviderPlugin will be used to create a transport that will handle the message. + ]; + } +} +``` + +Wire it in the dependency provider of Symfony Messenger module: + +**src/Pyz/Client/SymfonyMessenger/SymfonyMessengerDependencyProvider.php** + +```php + [ + 'command' => '$PHP_BIN vendor/bin/console queue:worker:start', + 'schedule' => '* * * * *', + ], + 'check-oms-conditions' => [ + 'command' => '$PHP_BIN vendor/bin/console oms:check-condition', + 'schedule' => '* * * * *', + ], + 'check-oms-timeouts' => [ + 'command' => '$PHP_BIN vendor/bin/console oms:check-timeout', + 'schedule' => '* * * * *', + ], + 'clear-oms-locks' => [ + 'command' => '$PHP_BIN vendor/bin/console oms:clear-locks', + 'schedule' => '0 6 * * *', + ], + ]; + + return $jobs; + } +} +``` + +The job name is an unique key of job definition and it will be used as a transport name in the Symfony Messenger module. +The `command` is the console command that you want to execute. +The `schedule` is the cron expression that defines when the job should be executed. You can also use aliases like `@hourly`, `@daily`, etc. +The `no_lock` option is optional and it defines whether the job should be executed without acquiring a lock. This can be useful for jobs that are safe to run in parallel. +In addition you can also provide a `store` or a `region`, which works in the same way as originally in `jenkins.php` + +### Configure via new plugin + +If your use case is more complex than just executing a console command, you can create a new plugin that implements `\Spryker\Shared\SymfonySchedulerExtension\Dependency\Plugin\SchedulerHandlerProviderPluginInterface`. +In example below you can see that we define messages, handlers and schedules for the job. +Messages and handlers are concepts from the Symfony Messenger module. They will be used to trigger and process the job. Schedules are the expressions that define when the job should be executed. It can be simple cron expression or a more complex one like callback trigger, combination of multiple triggers or even a custom trigger that you can implement by yourself. +You don't need to map messages and handlers separately in the SymfonyMessenger module, because the SymfonyScheduler module will take care of things like defining the transport and mapping the message to the handler for the transport. + +```php + [ //You can have multiple handlers for the same message + new ReportGenerationHandler(), + ], + ]; + } + public function getSchedules(): array + { + $schedule = new Schedule(); + $schedule->add(RecurringMessage::cron('* * * * *'), (new RecurringReportGenerationMessage('report for today'))) // every day at midnight + + return [ + 'report-generation' => $schedule // transport name will be "report-generation" + ]; + } +} +``` + +## Wiring plugins + +If you define your jobs with the first option (via config) or with separate plugin, you need to wire plugins in the Symfony Scheduler Dependency Provider by adding the following code: + +***src/Pyz/Zed/SymfonyScheduler/SymfonySchedulerDependencyProvider.php*** + +```php + + */ + protected function getSchedulerHandlerProviderPlugins(): array + { + return [ + new CompiledCronTransportsHandlerProviderPlugin(), //Plugin that provides handlers for jobs defined in the config + new FooBarSchedulerHandlerProviderPlugin(), //Plugin that provides scheduled jobs separately + ]; + } +} +``` + +## Run the Scheduler + +To run a scheduler you need to run the SymfonyMessenger consumer with the transport name that is configured for the job. + +```shell +vendor/bin/console symfonymessenger:consume queue-worker-start report-generation +``` + +## How it works + +```mermaid +flowchart TD + Start([symfonymessenger:consume alias]) + + subgraph Messenger[Symfony Messenger] + BuildWorker[Build Worker, list of transports, message→handler mapping and run worker] + RunWorker[Run Worker] + IterateTransports[Iterate transport names one by one] + GetMessage[Get a message from the transport] + RunGenerator[Run a message generator] + end + + subgraph Scheduler[Symfony Scheduler] + CheckMessage[Check for message associated with transport\nuntil nothing is to process] + IsUpToRunning{Is message up to running?} + DoesLockExist{Does lock exist?} + CreateLock[Create lock] + YieldMessage[Yield the message] + ReleaseLock[Release lock] + end + + subgraph Spryker[Spryker code] + GetGenerated[Get generated message] + CheckHandlers[Check for handlers for message] + RunHandler[Run a CommandHandler and wait for its execution] + Subprocess[[Subprocess is running]] + end + + Start --> BuildWorker + BuildWorker --> RunWorker + RunWorker --> IterateTransports + IterateTransports --> GetMessage + GetMessage --> RunGenerator + RunGenerator --> CheckMessage + + CheckMessage --> IsUpToRunning + IsUpToRunning -->|+| DoesLockExist + IsUpToRunning -->|no| CheckMessage + + DoesLockExist -->|+| CreateLock + DoesLockExist -->|yes| CheckMessage + + CreateLock --> YieldMessage + YieldMessage --> GetGenerated + + GetGenerated --> CheckHandlers + CheckHandlers --> RunHandler + RunHandler <--> Subprocess + + RunHandler --> ReleaseLock + ReleaseLock --> CheckMessage + + %% also model the transport-iteration loop + CheckMessage --> IterateTransports +``` + +## Running consumer as a background process + +In order to run the consumer you can use a Jenkins in order to run it or any other manager like Stable Workers. + +Jenkins example: + +**config/Zed/cronjobs/jenkins.php** + +```php + 'consume-queue', + 'command' => $logger . '$PHP_BIN vendor/bin/console symfonymessenger:consume queue-worker-start --time-limit=3600', + 'schedule' => '* * * * *', + 'enable' => true, + ]; + $jobs[] = [ + 'name' => 'consume-other-jobs', + 'command' => $logger . '$PHP_BIN vendor/bin/console symfonymessenger:consume compiled-cron-scheduler --time-limit=3600', + 'schedule' => '* * * * *', + 'enable' => true, + ]; + +if (getenv('SPRYKER_CURRENT_REGION')) { + foreach ($jobs as $job) { + $job['region'] = getenv('SPRYKER_CURRENT_REGION'); + } +} +``` + +As you see we defined 2 jobs, one for consuming the queue worker messages and another one for consuming the rest of the jobs. +Queue worker process runs at least a minute so consumer will try to re-schedule the job every minute and this will leave rest of the jobs waiting. Because of that queue worker have its own consumer process. The rest of the jobs can be consumed by another consumer process that will be running in parallel. +{% info_block warningBox "Important" %} +Jenkins by default has 2 executors so both of those jobs will be running in parallel. It's not possible to use this setup with 1 executor as the second job will never start because the first one will be running all the time. +{% endinfo_block %} \ No newline at end of file diff --git a/docs/dg/dev/post-installation-configuration.md b/docs/dg/dev/post-installation-configuration.md new file mode 100644 index 00000000000..017ce4b9af1 --- /dev/null +++ b/docs/dg/dev/post-installation-configuration.md @@ -0,0 +1,45 @@ +--- +title: Post-Installation Configuration +description: Advanced configuration and customization of your Spryker project after initial setup +last_updated: December 30, 2025 +template: concept-topic-template +--- + +This document provides guidance on advanced configuration and customization of your Spryker project after completing the initial setup. These steps help you optimize and adapt the Demo Shop to your specific project needs. + +## Manage modules + +A Spryker module is a single-function unit that has well-defined dependencies and can be updated independently. [Composer](/docs/dg/dev/set-up-spryker-locally/manage-dependencies-with-composer.html) is used for installing and managing module dependencies. +To define your strategy when implementing updates, learn about our [module and feature release process](/docs/about/all/releases/product-and-code-releases.html). + +To learn about the module versioning approach in Spryker, see [Semantic Versioning: Major vs. Minor vs. Patch Release](/docs/dg/dev/architecture/module-api/semantic-versioning-major-vs.-minor-vs.-patch-release.html). + +## Clean up modules + +1. Go through the modules that came with the Demo Shop you've installed. +2. Come up with the list of modules you actually need. +3. Remove unnecessary modules by following module upgrade guides in a backwards fashion. + +## Configure services + +1. Define how to manage the settings in the configuration files with [Configuration management](/docs/dg/dev/backend-development/data-manipulation/configuration-management.html). +2. [Configure services](/docs/dg/dev/integrate-and-configure/configure-services.html). +3. [Configure Elasticsearch](/docs/pbc/all/search/{{site.version}}/base-shop/tutorials-and-howtos/configure-elasticsearch.html). +4. [Configure queue](/docs/dg/dev/backend-development/data-manipulation/queue/queue.html). +5. [Configure stores](/docs/dg/dev/internationalization-and-multi-store/set-up-multiple-stores.html#configure-stores). +6. [Set up cronjobs](/docs/dg/dev/backend-development/cronjobs/cronjobs.html). + +## Clean up store configuration + +If you chose to start with one store, clean up the configuration of the unneeded stores in the following files: +- `config/install/*` +- `data/import/*` +- `deploy.dev.yml` +- `config_default.php` +- `src/SprykerConfig/CodeBucketConfig.php` + +## Clean up data import + +- In `data/import`, remove the files of the unneeded stores. +- Change the default config in `DataImportConfig::getDefaultYamlConfigPath()`. +- Define the needed stores in `CodeBucketConfig::getCodeBuckets()`. \ No newline at end of file diff --git a/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.md b/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.md index 7f5518e81d7..b8d1eaca1b9 100644 --- a/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.md +++ b/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.md @@ -377,15 +377,58 @@ image: ### assets: -Defines the setting of *Assets*. +Defines the configuration of the *frontend (nginx) container*. Despite its name, this section configures the nginx reverse proxy that handles all incoming HTTP requests to the application, not only static assets. The frontend container does the following: -* `assets: image:`—defines a docker image for a front-end container. If not specified, the default value applies: -`assets: image: nginx:alpine`. +- Proxies dynamic requests to application containers (Yves, Zed, Glue, and others) through FastCGI. +- Serves pre-built static assets (JS, CSS, images, fonts). +- Applies HTTP response compression to both static files and dynamic responses from applications. + +{% info_block warningBox "Compression affects all responses" %} + +The `compression` configuration under `assets` controls nginx compression for *all HTTP responses* passing through the frontend container. This includes dynamically generated HTML pages, API responses, and other content served by application containers, not only static assets. When compression is misconfigured or disabled, all responses leave the infrastructure uncompressed, which can significantly increase data transfer volume and response latency, especially when a CDN or traffic management solution like Akamai or Cloudflare is used in front of the application. For more details, see [CDN and traffic management integration](/docs/dg/dev/guidelines/performance-guidelines/cdn-and-traffic-management-integration.html). + +{% endinfo_block %} + +* `assets: image:`—defines a Docker image for the frontend container. If not specified, the default value applies: +`assets: image: nginx:alpine`. To enable Brotli compression support, use an image that includes the Brotli nginx module, for example: `spryker/nginx-brotli:latest`. * `assets: mode:`—defines a mode for running a static build section from the install recipe. Possible values are `production` and `development`. This variable is optional with the default value of `development`. -* `assets: compression:`—defines an engine for static compressions. Possible values are `gzip` and `brotli`. -* `assets: compression: engine: static:`—defines a comression mode. Allowed values are `only`, `true`, and `false`. -* `assets: compression: engine: level:`—defines a compression level. Allowed range is from `1` to `9`. -* `assets: compression: engine: types:`—defines additional MIME types to be compressed. +* `assets: compression:`—defines compression engines for HTTP responses. Supported engines are `gzip` and `brotli`. You can configure both engines simultaneously. The frontend container negotiates the encoding with the client based on the `Accept-Encoding` request header and responds with the best mutually supported encoding. + +**Compression engine parameters:** + +* `assets: compression: {engine}: static:`—controls compression behavior for the engine. Allowed values are as follows: + * `true` (default)—compresses responses on the fly *and* serves pre-compressed static files (`.gz` or `.br`) when available. This is the recommended setting for most deployments because it ensures both static assets and dynamic responses (HTML, JSON, XML) are compressed. + * `only`—serves only pre-compressed static files. On-the-fly compression is disabled. Dynamic responses from applications (HTML pages, API responses) are *not* compressed. Use this only when you want to avoid CPU overhead from on-the-fly compression and you are certain that a downstream service (such as a CDN) handles compression of dynamic content. + * `false`—disables the compression engine entirely. No compression is applied for this engine. +* `assets: compression: {engine}: level:`—defines a compression level. Allowed range is from `1` (fastest, least compression) to `9` (slowest, best compression). The default is `5`. +* `assets: compression: {engine}: types:`—defines additional MIME types to be compressed beyond the defaults. Default types include `text/html`, `text/plain`, `text/css`, `text/javascript`, `application/javascript`, `application/json`, `application/xml`, `image/svg+xml`, and others. + +**Content negotiation:** + +When a client (browser, CDN, or other HTTP client) sends a request with an `Accept-Encoding` header, the frontend container selects the best available compression: + +1. If the client sends `Accept-Encoding: br` and Brotli is enabled, the response is Brotli-compressed. +2. If the client sends `Accept-Encoding: gzip` and gzip is enabled, the response is gzip-compressed. +3. If the client does not send `Accept-Encoding` or requests an unsupported encoding, the response is sent uncompressed. + +The frontend container adds `Vary: Accept-Encoding` to compressed responses so that intermediary caches (CDNs, proxies) correctly cache different representations. + +**Example configuration:** + +```yaml +assets: + image: spryker/nginx-brotli:latest + mode: production + compression: + gzip: + static: true + level: 5 + brotli: + static: true + level: 5 +``` + +This configuration enables both gzip and Brotli for all responses, including dynamically generated HTML and API responses. With both engines enabled, the frontend container automatically selects the best encoding based on the client's `Accept-Encoding` header. *** diff --git a/docs/dg/dev/sdks/the-docker-sdk/installation-recipes-of-deployment-pipelines.md b/docs/dg/dev/sdks/the-docker-sdk/installation-recipes-of-deployment-pipelines.md index 3ac3750c777..18cffd1b63f 100644 --- a/docs/dg/dev/sdks/the-docker-sdk/installation-recipes-of-deployment-pipelines.md +++ b/docs/dg/dev/sdks/the-docker-sdk/installation-recipes-of-deployment-pipelines.md @@ -1,7 +1,7 @@ --- title: Installation recipes of deployment pipelines description: Learn all about the Spryker Installation recipes of your deployment pipelines for your spryker based projects. -last_updated: Nov 29, 2022 +last_updated: Jan 15, 2026 template: howto-guide-template redirect_from: - /docs/scos/dev/the-docker-sdk/202204.0/installation-recipes-of-deployment-pipelines.html @@ -49,15 +49,15 @@ A default recipe file can be split into four logical blocks: 1) Build sections: - - `build`: build a pre-generated code base like transfer, cache, and schema. - - `build-production`: build a pre-generated code base specific to the production environment. - - `build-development`: build a pre-generated code base specific to the development environment. + - `build`: build a pre-generated code base like transfer, cache, and schema. It's executed on development and production environments first. + - `build-production`: build a pre-generated code base specific to the production environment. It's executed after `build`. + - `build-development`: build a pre-generated code base specific to the development environment. It's executed after `build`. 2) Assets sections: - - `build-static`: install frontend dependencies. - - `build-static-production`: install the dependencies specific to the production environment. - - `build-static-development`: install the dependencies specific to the development environment. + - `build-static`: install frontend dependencies. It's executed on development and production environments first. + - `build-static-production`: install the dependencies specific to the production environment. It's executed after `build`. + - `build-static-development`: install the dependencies specific to the development environment. It's executed after `build`. 3) Data sections: @@ -73,7 +73,7 @@ A default recipe file can be split into four logical blocks: - `scheduler-suspend`: suspend the scheduler. - `scheduler-clean`: clean the scheduler. -These sections are part of the [Docker SDK](/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.html) and cannot be renamed. +These sections are part of the [Docker SDK](/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.html) and cannot be nor renamed, neither the order of execution changed. ## Customization of recipes @@ -119,7 +119,7 @@ You can use them as a hook definition when [customizing pipelines](/docs/ca/dev/ ```shell image: - tag: spryker/php:8.1 + tag: spryker/php:8.4 environment: SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r EU/pre-deploy -vvv' SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r EU/production --no-ansi -vvv' diff --git a/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.md b/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.md index 200c6a7a75c..87c3b8f0943 100644 --- a/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.md +++ b/docs/dg/dev/sdks/the-docker-sdk/the-docker-sdk.md @@ -210,7 +210,7 @@ In the development environment, Gateway (Nginx) does the following: - Serves all non-application services. - Proxies application calls to Frontend (Nginx). -Frontend (Nginx) is an HTTP to FastCGI proxy for Glue, Yves, Zed, and serves assets. +Frontend (Nginx) is an HTTP to FastCGI proxy that routes requests to all application containers (Glue, Yves, Zed, and others) and serves pre-built static assets. The frontend container also handles HTTP response compression for both static files and dynamic application responses. Compression is configured through the `assets:` section of the deploy file. For details, see [Deploy file reference - assets](/docs/dg/dev/sdks/the-docker-sdk/deploy-file/deploy-file-reference.html). ## Docker/sdk debug mode diff --git a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-macos-and-linux.md b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-macos-and-linux.md index b1bad61f658..ad1ddd42f86 100644 --- a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-macos-and-linux.md +++ b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-macos-and-linux.md @@ -1,7 +1,7 @@ --- title: Install in Demo mode on MacOS and Linux description: Learn how you can install Spryker in Demo mode on MacOS and Linux in a local environment. -last_updated: Jul 5, 2022 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/installing-in-demo-mode-on-macos-and-linux originalArticleId: 3b78ae4c-d2a3-4dfa-87e1-7d0c4096ee22 @@ -39,7 +39,7 @@ Product images, product data, other images or fonts displaced in a demo shop are 2. Clone the Demo Shop and navigate into its folder: ```shell - git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ + git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace ``` diff --git a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-windows.md b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-windows.md index de9282245e1..82d3cb26bbb 100644 --- a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-windows.md +++ b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-demo-mode-on-windows.md @@ -1,7 +1,7 @@ --- title: Install in Demo mode on Windows description: Learn how you can install and configure Spryker in Demo mode on Windows in a local environment. -last_updated: Oct 21, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/installing-in-demo-mode-on-windows originalArticleId: 57e6858b-6419-47b3-9d61-8b1d6213e4aa @@ -37,7 +37,7 @@ Product images, product data, other images or fonts displaced in a demo shop are 4. Clone the [Demo Shops](/docs/about/all/about-spryker.html#demo-shops) and navigate into its folder: ```shell - git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ + git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace ``` diff --git a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-macos-and-linux.md b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-macos-and-linux.md index 6d16a809d44..36afbb22c46 100644 --- a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-macos-and-linux.md +++ b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-macos-and-linux.md @@ -1,7 +1,7 @@ --- title: Install in Development mode on MacOS and Linux description: Learn how to install and configure Spryker in Development mode on MacOS and Linux in a local environment. -last_updated: Oct 21, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/installing-in-development-mode-on-macos-and-linux originalArticleId: 3a4af86a-3fb7-4fb2-b47e-4f1eb703fae6 @@ -45,7 +45,7 @@ Product images, product data, other images or fonts displaced in a demo shop are 2. Clone the Demo Shop and navigate into its folder: ```shell - git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ + git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace ``` diff --git a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-windows.md b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-windows.md index 07807e5fd7b..c9a2287fed2 100644 --- a/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-windows.md +++ b/docs/dg/dev/set-up-spryker-locally/install-spryker/install/install-in-development-mode-on-windows.md @@ -1,7 +1,7 @@ --- title: Install in Development mode on Windows description: Learn how to install and configure Spryker in Development mode on Windows in a local environment. -last_updated: Oct 21, 2021 +last_updated: Feb 19, 2026 template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/installing-in-development-mode-on-windows originalArticleId: 14368b32-4d9e-4451-9a46-ecab32966d88 @@ -43,7 +43,7 @@ This document describes how to install Spryker in [Development Mode](/docs/dg/de 4. Clone the [Demo Shops](/docs/about/all/about-spryker.html#demo-shops): ```shell - git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ + git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace ``` diff --git a/docs/dg/dev/set-up-spryker-locally/key-value-store-configuration.md b/docs/dg/dev/set-up-spryker-locally/key-value-store-configuration.md index d0d30420501..f8a0ae28423 100644 --- a/docs/dg/dev/set-up-spryker-locally/key-value-store-configuration.md +++ b/docs/dg/dev/set-up-spryker-locally/key-value-store-configuration.md @@ -52,7 +52,7 @@ $config[StorageConstants::STORAGE_PREDIS_CLIENT_CONFIGURATION] = [ ]; $config[StorageConstants::STORAGE_PREDIS_CLIENT_OPTIONS] = [ - 'replication' => true', + 'replication' => true, ]; ``` @@ -165,7 +165,7 @@ class RedisConfig extends AbstractBundleConfig After enabling compression, we recommend resaving storage data. -The command to resave storage data is available starting from `spryker/storage-redis:1.7.0`. To enable the command for resaving storage data, add the following configuration: +The command to resave storage data is available starting from `spryker/storage-redis:1.9.0`. To enable the command for resaving storage data, add the following configuration: ```php @@ -191,87 +191,74 @@ class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider } ``` -To resave storage data, run the command: +When you enable compression, only newly saved data is compressed. Depending on the business logic of the project, saving each entry might take months. Running the following command will resave storage data, applying current compression settings: ```bash SPRYKER_REDIS_IS_DEV_MODE=0 NEWRELIC_ENABLED=false console storage:redis:re-save ``` -If you use a Debian Docker image, you can disable instrumentation by adding the following parameter to the console command: - -```bash -SPRYKER_REDIS_IS_DEV_MODE=0 php -dnewrelic.enabled=false console storage:redis:re-save -``` - -With separate storage databases per store, execute the command for each store individually. - -## Storage GUI installation - -The storage GUI lets you access original and compressed storage data in the Back Office, **Maintenance** > **Storage** menu. - -StorageGui is supported starting from `spryker/storage-gui:1.1.0`. To build the UI changes, install dependencies and rebuild ZED UI: - -```bash -console frontend:project:install-dependencies -console frontend:zed:build -``` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +The command uses `SPRYKER_REDIS_IS_DEV_MODE=0` and `NEWRELIC_ENABLED=false` to reduce memory usage and help avoid memory leaks when processing high volumes of data. +Description: +- Re-saves storage data with current settings. Performs iterative scanning and applies resave operations with an adaptive timeout between iterations. +The command supports several options to control scanning, filtering, TTL handling and dry runs. The base environment variables used to run the command in non-dev mode are shown below: +Available options: +- --cursor (-c) Optional. Defines a cursor for resuming or controlling the SCAN iterator. Default: 0. +- --pattern (-p) Optional. Glob-style pattern applied to keys (appended to the KV prefix). Default: "*". Example: "cache:*", which scans all keys matching "kv:product:*". +- --ttl (-t) Optional. TTL in seconds to set for each matched key. If omitted, existing TTL is preserved (KEEPTTL) for existing keys. Warning: when provided, this TTL will be applied to all matched keys; use it only when you need to restore TTL values that were lost. +- --dry (-d) Flag. Dry run: scans and counts matched keys without resaving or setting TTL. Use this to estimate the workload before executing. +Examples: +- Resave everything, keeping expiration time of each entry: +```bash +SPRYKER_REDIS_IS_DEV_MODE=0 NEWRELIC_ENABLED=false console storage:redis:re-save +``` +- Resave only keys under the `cache:` prefix and set TTL to 1 hour: +```bash +SPRYKER_REDIS_IS_DEV_MODE=0 NEWRELIC_ENABLED=false console storage:redis:re-save --pattern="cache:*" --ttl=3600 +``` +- Dry run for a specific prefix to see how many keys would be processed: +```bash +SPRYKER_REDIS_IS_DEV_MODE=0 NEWRELIC_ENABLED=false console storage:redis:re-save --pattern="cache:*" --dry +``` +- Resume a previously interrupted run from a specific SCAN cursor: +```bash +SPRYKER_REDIS_IS_DEV_MODE=0 NEWRELIC_ENABLED=false console storage:redis:re-save --cursor=12345 +``` +Notes and warnings: +- The `--ttl` option overwrites TTLs for all matched keys; apply it only if you intentionally want to set the same TTL across results, for example to restore lost TTL values. If you want to preserve existing TTLs, omit `--ttl`. +- The command uses scanning (for example, Redis SCAN) and is implemented to run safely in production using adaptive timeouts between iterations; nevertheless, run with `--dry` first if you are unsure about the scope. +- With separate storage databases per store, execute the command for each store individually. +If you use a Debian Docker image, you can disable instrumentation by adding the following parameter to the console command: +```bash +SPRYKER_REDIS_IS_DEV_MODE=0 php -dnewrelic.enabled=false console storage:redis:re-save +``` +With separate storage databases per store, execute the command for each store individually. +## Storage GUI installation +The storage GUI lets you access original and compressed storage data in the Back Office, **Maintenance** > **Storage** menu. +StorageGui is supported starting from `spryker/storage-gui:1.1.0`. To build the UI changes, install dependencies and rebuild ZED UI: +```bash +console frontend:project:install-dependencies +console frontend:zed:build +``` diff --git a/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-macos-and-linux.md b/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-macos-and-linux.md index 338a292a1af..33450e7990b 100644 --- a/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-macos-and-linux.md +++ b/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-macos-and-linux.md @@ -1,7 +1,7 @@ --- title: "Quickstart guide: Install Spryker on MacOS and Linux" description: A quickstart guide to get you up and running installing Spryker in a local environment on MacOS and Linux. -last_updated: Feb 3, 2022 +last_updated: Feb 19, 2026 template: howto-guide-template redirect_from: - /docs/scos/dev/setup/quick-installation-guides/quick-installation-guide-macos-and-linux.html @@ -33,7 +33,7 @@ Product images, product data, other images or fonts displaced in a demo shop are {% endinfo_block %} ```shell -git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ +git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace && \ git clone https://github.com/spryker/docker-sdk.git --single-branch docker && \ docker/sdk bootstrap deploy.dev.yml diff --git a/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-windows.md b/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-windows.md index 1fef6c35449..07726cb5b9e 100644 --- a/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-windows.md +++ b/docs/dg/dev/set-up-spryker-locally/quickstart-guides-install-spryker/quickstart-guide-install-spryker-on-windows.md @@ -1,7 +1,7 @@ --- title: "Quickstart guide: Install Spryker on Windows" description: A quickstart guide to get you up and running installing Spryker in a local environment on Windows. -last_updated: Feb 03, 2023 +last_updated: Feb 19, 2026 template: howto-guide-template redirect_from: - /docs/scos/dev/setup/quick-installation-guides/quick-installation-guide-windows.html @@ -30,7 +30,7 @@ Product images, product data, other images or fonts displaced in a demo shop are {% endinfo_block %} ```shell -git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b 202507.0 --single-branch ./b2b-demo-marketplace && \ +git clone https://github.com/spryker-shop/b2b-demo-marketplace.git -b {{page.release_tag}} --single-branch ./b2b-demo-marketplace && \ cd b2b-demo-marketplace && \ git clone https://github.com/spryker/docker-sdk.git --single-branch docker && \ docker/sdk bootstrap deploy.dev.yml diff --git a/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/troubleshooting-installation.md b/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/troubleshooting-installation.md index 320f9afe6de..a075e6b2f00 100644 --- a/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/troubleshooting-installation.md +++ b/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/troubleshooting-installation.md @@ -11,8 +11,39 @@ redirect_from: This section describes common issues and solutions related to installing Spryker locally. +## Clear application cache + +If you encounter compilation errors during installation or after setup, clear the cache for the affected application. + +**Clear cache for Zed:** + +```bash +docker/sdk cli vendor/bin/console cache:clear +``` + +**Clear cache for Glue API:** + +```bash +docker/sdk cli vendor/bin/glue cache:clear +``` + +**Clear cache for Glue Storefront API:** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_STOREFRONT vendor/bin/glue cache:clear +``` + +**Clear cache for Glue Backend API:** + +```bash +docker/sdk cli GLUE_APPLICATION=GLUE_BACKEND vendor/bin/glue cache:clear +``` + +These commands clear the compiled container cache and resolve most cache-related installation issues. + ## Topics +- [Clear application cache](#clear-application-cache) - [An error during front end setup](/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/an-error-during-front-end-setup.html) - [Demo data was imported incorrectly](/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/demo-data-was-imported-incorrectly.html) - [Docker daemon is not running](/docs/dg/dev/set-up-spryker-locally/troubleshooting-installation/docker-daemon-is-not-running.html) diff --git a/docs/dg/dev/supported-versions-of-php.md b/docs/dg/dev/supported-versions-of-php.md index 06b668569dd..50358c2a28b 100644 --- a/docs/dg/dev/supported-versions-of-php.md +++ b/docs/dg/dev/supported-versions-of-php.md @@ -33,11 +33,4 @@ PHP 8.3+ is a hard requirement from August 2025 because of the modules being PHP {% endinfo_block %} -## PHP versions supported at Spryker - -The following graph shows the timelines of support of different PHP versions. - -
    - - For more details about the supported versions, see the official [PHP documentation](https://www.php.net/supported-versions.php). diff --git a/docs/dg/dev/system-requirements/202602.0/system-requirements.md b/docs/dg/dev/system-requirements/202602.0/system-requirements.md new file mode 100644 index 00000000000..3877fb92788 --- /dev/null +++ b/docs/dg/dev/system-requirements/202602.0/system-requirements.md @@ -0,0 +1,55 @@ +--- +title: System requirements +description: This document provides the configuration that a system must have in order for the Spryker project to run smoothly and efficiently. +last_updated: Feb 19, 2026 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/system-requirements +originalArticleId: 6f7d36c1-2ee4-47d1-8f7f-ea0f1b7f93a7 +redirect_from: +- /docs/scos/dev/set-up-spryker-locally/system-requirements.html +- /docs/scos/dev/set-up-spryker-locally/installing-spryker-with-development-virtual-machine/devvm-system-requirements.html +- /docs/marketplace/dev/setup/202204.0/system-requirements.html +- /docs/scos/dev/system-requirements/202304.0/system-requirements.html +- /docs/marketplace/dev/setup/202307.0/system-requirements.html +- /docs/scos/dev/system-requirements/202204.0/system-requirements.html +- /docs/scos/dev/system-requirements/202311.0/system-requirements.html +--- + +## System requirements (apps based on Spryker Framework) + + +| REQUIREMENT | VALUE | +|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| OS | Native: Linux | +| Web server | NginX or any web server supporting PHP, like lighttpd, Apache, or Cherokee. | +| Databases | For cloud environments, MariaDB >= 11.8 preferred. For on-premise environments, PostgreSQL >=17 or MySQL >=8.4. | +| PHP | PHP >=8.3 with the following extensions: `curl`, `json`, `mysql`, `pdo-sqlite`, `sqlite3`, `gd`, `intl`, `mysqli`, `pgsql`, `ssh2`, `gmp`, `mcrypt`, `pdo-mysql`, `readline`, `twig`, `imagick`, `memcache`, `pdo-pgsql`, `redis`, `xml`, `bz2`, and `mbstring`. For details about supported PHP versions, see [Supported Versions of PHP](/docs/dg/dev/supported-versions-of-php.html) | +| SSL | For production environments, a valid security certificate is required for HTTPS. | +| Key-value store (Redis or Valkey) | Redis versions 5.0 and 6.2; Valkey version >=7.2 | +| Search engines | Elasticsearch >=7.0, OpenSearch >=1.3 | +| RabbitMQ | Version >=4.1 | +| Jenkins (for cronjob management) | Version >=2.0 | +| Graphviz (for state machine visualization) | Version >=2.0 | +| Node.js | Version >= 18.0.0 | +| npm | Version >= 9.0.0 | +| Intranet | Back Office application must be secured in an Intranet using VPN, Basic Auth, IP allowlist, or DMZ. | +| Available languages | German and English. UTF-8 left-to-right languages are fully supported. | + + +## Marketplace system requirements + +| OPERATING SYSTEM | NATIVE: LINUX-ONLY THROUGH VM: MACOS AND MS WINDOWS | +|---|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Web server | NginX or any web server supporting PHP, like lighttpd, Apache, or Cherokee. | +| Databases | MariaDB >= 11.8 preferred, PostgreSQL >=17, or MySQL >=8.4. | +| PHP | PHP >=8.3 with the following extensions: `curl`, `json`, `mysql`, `pdo-sqlite`, `sqlite3`, `gd`, `intl`, `mysqli`, `pgsql`, `ssh2`, `gmp`, `mcrypt`, `pdo-mysql`, `readline`, `twig`, `imagick`, `memcache`, `pdo-pgsql`, `redis`, `xml`, `bz2`, `mbstring`. For details about supported PHP versions, see [Supported Versions of PHP](/docs/dg/dev/supported-versions-of-php.html). | +| SSL | For production systems, a valid security certificate is required for HTTPS. | +| Key-value store (Redis or Valkey) | Redis versions 5.0 and 6.2; Valkey version >=7.2 | +| Search engines | Elasticsearch >=7.0, OpenSearch >=1.3 | +| RabbitMQ | Version >=4.1 | +| Jenkins (for cronjob management) | Version >=2.0 | +| Graphviz (for state machine visualization) | Version >=2.0 | +| Symfony | Versions 5.0, and 6.0 | +| Node.js | Version >= 18.0.0 | +| Intranet | Back Office application must be secured in an Intranet using VPN, Basic Auth, IP allowlist, or DMZ. | +| Spryker Commerce OS | Version >= {{page.release_tag}} | diff --git a/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/blackfire-profiling.md b/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/blackfire-profiling.md new file mode 100644 index 00000000000..59ef8570d82 --- /dev/null +++ b/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/blackfire-profiling.md @@ -0,0 +1,38 @@ +--- +title: Blackfire profiling +description: Learn how to use Blackfire to profile and troubleshoot performance issues in Spryker applications. +template: concept-topic-template +last_updated: Feb 26, 2026 +related: + - title: Troubleshooting performance issues + link: docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html + - title: Performance guidelines + link: docs/scos/dev/guidelines/performance-guidelines/performance-guidelines.html +--- + +This document describes how to use [Blackfire](https://blackfire.io/docs/introduction) to profile your Spryker application and identify performance bottlenecks. + +## Prerequisites + +Install and configure [Blackfire](/docs/dg/dev/integrate-and-configure/configure-services.html#blackfire). + +## Profiling with Blackfire + +To profile with Blackfire, do the following: + +1. Reproduce the problem in the necessary environment or request it to be reproduced by the customer. For more details on profiling with Blackfire, see the [official Blackfire website](https://blackfire.io/docs/introduction). +2. Review the profiling: +- Check the **Recommendations** section. It shows some possible solutions. +![blacfire-recommendations](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/recommendations.png) +- Check **Callgraph**. +![blacfire-callgraph](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/recommendations-callgraph.png) +The left part shows time (excl., incl., calls), and the right part shows the exact graph: +![callgraph](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/callgraph.png) + +{% info_block infoBox "Info" %} + +Blackfire groups some actions, so after each round of optimization, you will see more details in the report. + +{% endinfo_block %} + +3. Check other sections, like *SQL*, *Propagation*, etc. Read more about profiling with Blackfire in the [Blackfire official documentation](https://blackfire.io/docs/php/training-resources/book/04-first-profile). diff --git a/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.md b/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.md index 6b9dd9a6da8..89bb501b2a2 100644 --- a/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.md +++ b/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.md @@ -5,7 +5,7 @@ template: concept-topic-template redirect_from: - /docs/scos/dev/troubleshooting/troubleshooting-performance-issues/troubleshooting-performance-issues.html -last_updated: Feb 22, 2023 +last_updated: Feb 26, 2026 related: - title: Performance guidelines link: docs/scos/dev/guidelines/performance-guidelines/performance-guidelines.html @@ -37,61 +37,15 @@ The ones that we prefer are [New Relic](https://docs.newrelic.com/docs/new-relic To profile with New Relic, do the following: 1. [Install and configure New Relic](/docs/dg/dev/integrate-and-configure/configure-services.html#new-relic). - -2. Check if the necessary profiling exists. If it does not exist, reproduce the problem in the necessary environment or request it to be reproduced by the customer. -Note the following: -- It takes [some time for the New Relic to show the profiling](https://docs.newrelic.com/docs/new-relic-solutions/solve-common-issues/troubleshooting/not-seeing-data/#:~:text=Solution,to%20automatically%20identify%20common%20issues.). -- If the request is not meeting the criteria, it will not appear in New Relic. -Read more on the [official New Relic website](https://docs.newrelic.com/docs/apm/transactions/transaction-traces/troubleshooting-not-seeing-transaction-traces/). - -3. Review the profiling. -For example, if the problem is with "place-order" with 25 product items, do the following: - -1. Check if you have profiling for the necessary action in New Relic: - -1. Go to **Transactions**. - ![transactions](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/transactions.png) -2. Select the necessary time period on the top right side. - ![transactions-time](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/transaction-time.png) -3. Select the necessary transaction type—for example, **Web**. - ![trasaction-type](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/transaction-type.png) -4. In **Sort By**, select how you want to sort the items—for example, **Most time consuming**. - ![transaction-filter](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/transactions-filter.png) -5. Check if you have the necessary action "place-order" in the resulting list. Click **See transaction table** if needed. - ![transaction-list](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/transactions-list.png) - -{% info_block infoBox "Issues with transaction grouping" %} - -If you have some problems with transaction grouping, check [New Relic transactions grouping by queue names](/docs/dg/dev/guidelines/performance-guidelines/elastic-computing/new-relic-transaction-grouping-by-queue-names.html#group-transactions-by-queue-name). - -{% endinfo_block %} - -2. Repeat for other sections, like *Databases*, *External services*, etc. - -For more details, see the [official New Relic website](https://newrelic.com/blog/how-to-relic/a-quick-guide-to-getting-started-with-new-relic). +2. Make sure New Relic is properly configured for your environment. For setup and configuration details, see [Monitoring](/docs/dg/dev/guidelines/performance-guidelines/monitoring.html). +3. Reproduce the problem in the necessary environment or request it to be reproduced by the customer. Note the following: +- It takes [some time for New Relic to show the profiling](https://docs.newrelic.com/docs/new-relic-solutions/solve-common-issues/troubleshooting/not-seeing-data/#:~:text=Solution,to%20automatically%20identify%20common%20issues.). +- If the request does not meet the criteria, it does not appear in New Relic. Read more on the [official New Relic website](https://docs.newrelic.com/docs/apm/transactions/transaction-traces/troubleshooting-not-seeing-transaction-traces/). +4. Review the profiling. For a step-by-step guide on navigating New Relic APM, analyzing transactions, traces, databases, and errors, see [APM — New Relic based troubleshooting](/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.html). ### Blackfire -To profile with Blacfire, do the following: - -1. Install and configure [Blackfire](/docs/dg/dev/integrate-and-configure/configure-services.html#blackfire). -2. Reproduce the problem in the necessary environment or request it to be reproduced by the customer. For more details on profiling with Blackfire, see the [official Blackfire website](https://blackfire.io/docs/introduction). -3. Review the profiling: -- Check the **Recommendations** section. It shows some possible solutions. -![blacfire-recommendations](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/recommendations.png) -- Check **Callgraph**. -![blacfire-callgraph](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/recommendations-callgraph.png) -The left part shows time (excl., incl., calls), and the right part show the exact graph: -![callgraph](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/troubleshooting/troubleshooting-performance-issues/callgraph.png) - -{% info_block infoBox "Info" %} - -Blackfire groups some actions, so after each round of optimization, you will see more details in the report. - -{% endinfo_block %} - -4. Check other sections, like *SQL*, *Propagation*, etc. Read more about profiling with Blackfire on the [Blackfire official documentation](https://blackfire.io/docs/php/training-resources/book/04-first-profile). - +For a guide on profiling with Blackfire, including Callgraph analysis and recommendations, see [Blackfire profiling](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/blackfire-profiling.html). ## Common performance issues @@ -105,6 +59,10 @@ The following articles help you troubleshoot specific performance problems: - [Not optimized Composer on the production environment](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/not-optimised-composer-on-the-production-environment.html) - Optimizing Composer autoloader. - [Technology restrictions](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/technology-restrictions.html) - Understanding technology limitations and their impact on performance. +## APM-based troubleshooting + +For a comprehensive guide on using New Relic APM to systematically identify and resolve performance bottlenecks, see [APM — New Relic based troubleshooting](/docs/dg/dev/guidelines/performance-guidelines/apm-newrelic-based-troubleshooting.html). + ## Next steps 1. Check that you have the latest [performance releases](https://docs.spryker.com/docs/scos/user/intro-to-spryker/releases/release-notes/release-notes.html). diff --git a/docs/dg/dev/updating-spryker/feature-or-module-updates.md b/docs/dg/dev/updating-spryker/feature-or-module-updates.md index c082ea7f3b1..863f641b2b1 100644 --- a/docs/dg/dev/updating-spryker/feature-or-module-updates.md +++ b/docs/dg/dev/updating-spryker/feature-or-module-updates.md @@ -1,7 +1,7 @@ --- title: Feature or module updates description: Learn how to update modules or features and to choose at which level to take updates within your Spryker based projects. -last_updated: Jun 16, 2021 +last_updated: Feb 19, 2026 template: concept-topic-template redirect_from: - /docs/scos/dev/updating-spryker/feature-or-module-updates.html @@ -35,11 +35,11 @@ If you started with Spryker features, your `composer.json` should look similar t "ext-readline": "*", "ext-redis": "*", "spryker-eco/loggly": "^0.1.0", -"spryker-feature/agent-assist": "^{{page.version}}", -"spryker-feature/alternative-products": "^{{page.version}}", -"spryker-feature/approval-process": "^{{page.version}}", -"spryker-feature/availability-notification": "^{{page.version}}", -"spryker-feature/cart": "^{{page.version}}", +"spryker-feature/agent-assist": "^{{page.release_tag}}", +"spryker-feature/alternative-products": "^{{page.release_tag}}", +"spryker-feature/approval-process": "^{{page.release_tag}}", +"spryker-feature/availability-notification": "^{{page.release_tag}}", +"spryker-feature/cart": "^{{page.release_tag}}", .... ``` diff --git a/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.md b/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.md index 2e51ac1967a..6e7a2b98149 100644 --- a/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.md +++ b/docs/dg/dev/upgrade-and-migrate/integrate-api-platform.md @@ -20,7 +20,7 @@ Before integrating API Platform, ensure you have: To integrate API Platform, install the following modules: ```bash -composer require spryker/api-platform:"^0.1.0" --update-with-dependencies +composer require spryker/api-platform:"^0.5.0" --update-with-dependencies ``` {% info_block infoBox "Module placeholder" %} @@ -43,7 +43,6 @@ Register the required bundles in your application's bundle configuration files f declare(strict_types = 1); use ApiPlatform\Symfony\Bundle\ApiPlatformBundle; -use Nelmio\CorsBundle\NelmioCorsBundle; use Spryker\ApiPlatform\SprykerApiPlatformBundle; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\TwigBundle\TwigBundle; @@ -51,7 +50,6 @@ use Symfony\Bundle\TwigBundle\TwigBundle; return [ FrameworkBundle::class => ['all' => true], TwigBundle::class => ['all' => true], - NelmioCorsBundle::class => ['all' => true], ApiPlatformBundle::class => ['all' => true], SprykerApiPlatformBundle::class => ['all' => true], ]; @@ -67,7 +65,6 @@ return [ declare(strict_types = 1); use ApiPlatform\Symfony\Bundle\ApiPlatformBundle; -use Nelmio\CorsBundle\NelmioCorsBundle; use Spryker\ApiPlatform\SprykerApiPlatformBundle; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\TwigBundle\TwigBundle; @@ -77,7 +74,6 @@ return [ ApiPlatformBundle::class => ['all' => true], SprykerApiPlatformBundle::class => ['all' => true], TwigBundle::class => ['all' => true], - NelmioCorsBundle::class => ['all' => true], ]; ``` @@ -91,7 +87,6 @@ return [ declare(strict_types = 1); use ApiPlatform\Symfony\Bundle\ApiPlatformBundle; -use Nelmio\CorsBundle\NelmioCorsBundle; use Spryker\ApiPlatform\SprykerApiPlatformBundle; use Symfony\Bundle\FrameworkBundle\FrameworkBundle; use Symfony\Bundle\TwigBundle\TwigBundle; @@ -101,7 +96,6 @@ return [ ApiPlatformBundle::class => ['all' => true], SprykerApiPlatformBundle::class => ['all' => true], TwigBundle::class => ['all' => true], - NelmioCorsBundle::class => ['all' => true], ]; ``` @@ -289,10 +283,11 @@ To verify your integration: Depending on the environment of the application (development or production), the documentation interface may be enabled or disabled by default. Currently, it is only enabled in development (docker.dev) environments. - You can enable/disable this interface by configuring the `api_platform.enable_docs` setting in your configuration files. + You can enable/disable this interface by configuring the settings in your `api_platform.php` configuration files. ## Next steps - [API Platform](/docs/dg/dev/architecture/api-platform.html) - Overview and concepts - [Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Create your first API resource -- [Schemas and Resource Generation](/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html) - Define resource schemas +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Resource Schemas +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Validation Schemas diff --git a/docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.md b/docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.md index 216c0a3e43b..0206ae41741 100644 --- a/docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.md +++ b/docs/dg/dev/upgrade-and-migrate/migrate-to-api-platform.md @@ -776,5 +776,6 @@ The `/customers` endpoint is being migrated to API-Platform. - [API Platform](/docs/dg/dev/architecture/api-platform.html) - Architecture overview - [API Platform Enablement](/docs/dg/dev/architecture/api-platform/enablement.html) - Creating resources -- [Schemas and Resource Generation](/docs/dg/dev/architecture/api-platform/schemas-and-resource-generation.html) - Schema reference +- [Resource Schemas](/docs/dg/dev/architecture/api-platform/resource-schemas.html) - Resource Schemas +- [Validation Schemas](/docs/dg/dev/architecture/api-platform/validation-schemas.html) - Validation Schemas - [Troubleshooting](/docs/dg/dev/architecture/api-platform/troubleshooting.html) - Common issues diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-20.md b/docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-20.md new file mode 100644 index 00000000000..05ebe65639d --- /dev/null +++ b/docs/dg/dev/upgrade-and-migrate/upgrade-to-angular-20.md @@ -0,0 +1,602 @@ +--- +title: Upgrade to Angular 20 +description: Learn how you can upgrade to Version 20 of Angular for your Spryker project for bug fixes, optimized performance and tooling. +template: module-migration-guide-template +--- + +This document explains how you can upgrade Angular to version 20 in your Spryker project. + +Spryker currently uses Angular version 18. According to the [Angular Support policy and schedule](https://angular.dev/reference/releases#actively-supported-versions), Angular 18 is deprecated. +The current stable Angular version is 20. + +We recommend that you upgrade to the latest major Angular version to receive the most recent bug fixes, security updates, and improvements to runtime performance and tooling. + +Upgrading to Angular v20 introduces incompatibilities with earlier Angular versions. As a result, the following modules require a major release: + +- `AgentDashboardMerchantPortalGui` +- `AgentSecurityMerchantPortalGui` +- `CommentMerchantPortalGui` +- `DashboardMerchantPortalGui` +- `DataImportMerchantPortalGui` +- `GuiTable` +- `MerchantAppMerchantPortalGui` +- `MerchantProfileMerchantPortalGui` +- `MerchantRelationRequestMerchantPortalGui` +- `MerchantRelationshipMerchantPortalGui` +- `MultiFactorAuthMerchantPortal` +- `PriceProductMerchantRelationshipMerchantPortalGui` +- `ProductMerchantPortalGui` +- `ProductOfferMerchantPortalGui` +- `ProductOfferServicePointMerchantPortalGui` +- `ProductOfferShipmentTypeMerchantPortalGui` +- `SalesMerchantPortalGui` +- `SecurityMerchantPortalGui` +- `UserMerchantPortalGui` +- `ZedUi` + +*Estimated migration time: 2h* + +To upgrade to Angular v20, follow these steps. + + +## 1) Update modules + +1. Check if the following Marketplace modules in your project have the new versions: + +| NAME | VERSION | +|--------------------------------------------------|-----------| +| AgentDashboardMerchantPortalGui | >= 2.0.0 | +| AgentSecurityMerchantPortalGui | >= 2.0.0 | +| CommentMerchantPortalGui | >= 2.0.0 | +| DashboardMerchantPortalGui | >= 4.0.0 | +| DataImportMerchantPortalGui | >= 2.0.0 | +| GuiTable | >= 4.0.0 | +| MerchantAppMerchantPortalGui | >= 2.0.0 | +| MerchantProfileMerchantPortalGui | >= 4.0.0 | +| MerchantRelationRequestMerchantPortalGui | >= 2.0.0 | +| MerchantRelationshipMerchantPortalGui | >= 2.0.0 | +| MultiFactorAuthMerchantPortal | >= 2.0.0 | +| PriceProductMerchantRelationshipMerchantPortalGui| >= 3.0.0 | +| ProductMerchantPortalGui | >= 5.0.0 | +| ProductOfferMerchantPortalGui | >= 4.0.0 | +| ProductOfferServicePointMerchantPortalGui | >= 3.0.0 | +| ProductOfferShipmentTypeMerchantPortalGui | >= 3.0.0 | +| SalesMerchantPortalGui | >= 4.0.0 | +| SecurityMerchantPortalGui | >= 4.0.0 | +| UserMerchantPortalGui | >= 4.0.0 | +| ZedUi | >= 4.0.0 | + +If they don't, update the module versions manually or by using the following command: + +```bash +composer require spryker-feature/marketplace-comments spryker-feature/marketplace-merchant-contract-requests spryker-feature/marketplace-merchant-contracts spryker-feature/marketplace-merchant-custom-prices spryker-feature/marketplace-merchant-portal-product-management spryker-feature/marketplace-merchant-portal-product-offer-management spryker-feature/marketplace-merchant-portal-product-offer-service-points spryker-feature/marketplace-merchantportal-core spryker-feature/merchant-portal-data-import spryker/agent-dashboard-merchant-portal-gui:"^2.0.0" spryker/agent-security-merchant-portal-gui:"^2.0.0" spryker/dashboard-merchant-portal-gui:"^4.0.0" spryker/merchant-app-merchant-portal-gui:"^2.0.0" spryker/merchant-profile-merchant-portal-gui:"^4.0.0" spryker/sales-merchant-portal-gui:"^4.0.0" --update-with-dependencies +``` + +2. Regenerate the data transfer object: + +```bash +console transfer:generate +``` + +## 2) Update npm dependencies + +In `package.json`, do the following: + +1. Adjust the npm scripts and engines: + + ```json + { + "scripts": { + "mp:build": "ng build", + "mp:build:watch": "ng build --watch", + "mp:build:production": "ng build --configuration production", + "mp:stylelint": "node ./frontend/merchant-portal/stylelint.mjs", + "mp:lint": "ng lint", + "mp:test": "ng test", + }, + + "engines": { + "node": ">=20.19.0", + "npm": ">=10.0.0" + }, + } + ``` + +2. Update or add the following dependencies: + +```json +{ + "dependencies": { + "@angular/animations": "~20.3.16", + "@angular/cdk": "~20.2.14", + "@angular/common": "~20.3.16", + "@angular/compiler": "~20.3.16", + "@angular/core": "~20.3.16", + "@angular/elements": "~20.3.16", + "@angular/forms": "~20.3.16", + "@angular/platform-browser": "~20.3.16", + "@angular/platform-browser-dynamic": "~20.3.16", + "@angular/router": "~20.3.16", + "ng-zorro-antd": "~20.4.4", + "rxjs": "~7.8.2", + "zone.js": "~0.15.1" + } +} +``` + +3. Update or add the following dev dependencies: + + ```json + { + "devDependencies": { + "@angular-builders/custom-webpack": "~20.0.0", + "@angular-builders/jest": "~20.0.0", + "@angular-devkit/build-angular": "~20.3.14", + "@angular-eslint/builder": "~20.7.0", + "@angular-eslint/eslint-plugin": "~20.7.0", + "@angular-eslint/eslint-plugin-template": "~20.7.0", + "@angular-eslint/template-parser": "~20.7.0", + "@angular/cli": "~20.3.14", + "@angular/compiler-cli": "~20.3.16", + "@angular/language-service": "~20.3.16", + "@babel/plugin-transform-class-properties": "~7.25.9", + "@babel/plugin-transform-runtime": "~7.28.5", + "@babel/preset-env": "~7.28.6", + "@babel/preset-typescript": "~7.28.5", + "@eslint/js": "^9.39.2", + "@types/jest": "~30.0.0", + "@types/node": "~25.0.9", + "@types/webpack": "~5.28.5", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "~8.53.0", + "angular-eslint": "^21.1.0", + "eslint": "~9.39.2", + "eslint-plugin-deprecation": "^3.0.0", + "fast-glob": "~3.3.3", + "jest": "~30.2.0", + "jest-environment-jsdom": "~30.2.0", + "jest-preset-angular": "~16.0.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.53.0", + } + } + ``` + +4. Remove the following dependencies: + + ```json + { + "devDependencies": { + "@nx/angular": "~18.1.1", + "@nx/eslint": "~18.1.2", + "@nx/eslint-plugin": "~18.1.2", + "@nx/jest": "~18.1.2", + } + } + ``` + +5. Update and install the package dependencies: + +```bash +rm -rf node_modules +npm install +``` + +{% info_block warningBox "Verification" %} + +Ensure that you update both the `package-lock.json` file and the `node_modules` directory. + +{% endinfo_block %} + +## 3) Update the Angular configuration + +1. In the `frontend/merchant-portal` folder, do the following: + + 1. In `jest.config.ts`, change the paths for configuration: + + ```ts + export default { + displayName: 'merchant-portal', + preset: 'jest-preset-angular', + setupFilesAfterEnv: ['/frontend/merchant-portal/test-setup.ts'], + roots: ['/src/Pyz'], + testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'], + moduleFileExtensions: ['ts', 'js', 'html'], + passWithNoTests: true, + globals: { + 'ts-jest': { + tsconfig: '/frontend/merchant-portal/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + } + ``` + + 2. In `test-setup.ts`, replace `jest-preset-angular/setup-jest` import to `jest-preset-angular/setup-env/zone`: + + ```ts + import 'jest-preset-angular/setup-env/zone'; + import 'reflect-metadata/lite'; + ``` + +2. In the root of the project, do the following: + + 1. Add `**/.angular/` to `.gitignore` and `.prettierignore`. + + ```text + **/.angular/ + ``` + + 2. Delete `project.json`, `nx.json`, `eslintrc.mp.json`. + 3. Add the `eslint.config.mjs` with the following configuration: + + ```js + import typescriptEslint from '@typescript-eslint/eslint-plugin'; + import typescriptParser from '@typescript-eslint/parser'; + import deprecationPlugin from 'eslint-plugin-deprecation'; + import angularEslint from 'angular-eslint'; + import { createRequire } from 'module'; + + const require = createRequire(import.meta.url); + const sprykerConfig = require('@spryker/frontend-config.eslint/.eslintrc.js'); + + export default [ + { + ignores: [ + 'docker/', + 'public/*/assets/', + '**/dist/', + '**/node_modules/', + 'vendor/', + '**/.angular/', + ], + }, + // Configuration for regular JS files + { + files: ['**/*.js'], + languageOptions: { + ecmaVersion: 2020, + sourceType: 'module', + globals: { + ...sprykerConfig.globals, + }, + }, + rules: { + ...sprykerConfig.rules, + 'accessor-pairs': [ + 'error', + { + setWithoutGet: true, + enforceForClassMembers: false, + }, + ], + }, + }, + // Configuration for Yves TypeScript files + { + files: ['src/{Pyz,SprykerShop,SprykerFeature}/*/src/{Pyz,SprykerShop,SprykerFeature}/Yves/**/*.ts'], + languageOptions: { + parser: typescriptParser, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + project: ['./tsconfig.yves.json'], + }, + globals: { + ...sprykerConfig.globals, + }, + }, + plugins: { + '@typescript-eslint': typescriptEslint, + deprecation: deprecationPlugin, + }, + rules: { + ...sprykerConfig.rules, + 'no-undef': 'off', + 'no-unused-vars': 'off', + 'accessor-pairs': [ + 'error', + { + setWithoutGet: true, + enforceForClassMembers: false, + }, + ], + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'none', + ignoreRestSiblings: true, + }, + ], + '@typescript-eslint/no-empty-function': [ + 'error', + { + allow: ['methods'], + }, + ], + '@typescript-eslint/no-magic-numbers': [ + 'error', + { + ignore: [-1, 0, 1], + ignoreDefaultValues: true, + ignoreClassFieldInitialValues: true, + ignoreArrayIndexes: true, + ignoreEnums: true, + ignoreReadonlyClassProperties: true, + }, + ], + }, + }, + // Configuration for Merchant Portal TypeScript files + { + files: ['src/Pyz/Zed/*/Presentation/Components/**/*.ts'], + languageOptions: { + parser: typescriptParser, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + project: ['./tsconfig.mp.json'], + }, + }, + plugins: { + '@typescript-eslint': typescriptEslint, + '@angular-eslint': angularEslint.tsPlugin, + }, + processor: angularEslint.processInlineTemplates, + rules: { + ...sprykerConfig.rules, + 'no-undef': 'off', + 'no-unused-vars': 'off', + 'no-console': [ + 'warn', + { + allow: ['warn', 'error'], + }, + ], + 'no-empty': 'error', + 'no-use-before-define': 'off', + 'max-classes-per-file': 'off', + 'max-lines': 'off', + 'handle-callback-err': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/no-restricted-imports': ['error', 'rxjs/Rx'], + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/no-inferrable-types': [ + 'error', + { + ignoreParameters: true, + }, + ], + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/member-ordering': [ + 'error', + { + default: ['instance-field', 'instance-method', 'static-field', 'static-method'], + }, + ], + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'mp', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'mp', + style: 'kebab-case', + }, + ], + '@angular-eslint/no-host-metadata-property': 'off', + }, + }, + // Configuration for Merchant Portal HTML templates + { + files: ['src/Pyz/Zed/*/Presentation/Components/**/*.html'], + languageOptions: { + parser: angularEslint.templateParser, + }, + plugins: { + '@angular-eslint': angularEslint.templatePlugin, + }, + rules: { + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@angular-eslint/no-host-metadata-property': 'off', + '@angular-eslint/directive-class-suffix': 'off', + 'no-prototype-builtins': 'off', + }, + }, + ]; + ``` + + 4. Add `angular.json`, with the following configuration: + + ```json + { + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "src", + "projects": { + "merchant-portal": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": ".", + "prefix": "mp", + "architect": { + "build": { + "builder": "@angular-builders/custom-webpack:browser", + "options": { + "customWebpackConfig": { + "path": "./frontend/merchant-portal/webpack.config.ts", + "mergeRules": {} + }, + "indexTransform": "./frontend/merchant-portal/html-transform.js", + "outputPath": "public/MerchantPortal/assets/js", + "baseHref": "/assets/js/", + "index": "src/Pyz/Zed/ZedUi/Presentation/Components/index.html", + "main": "src/Pyz/Zed/ZedUi/Presentation/Components/main.ts", + "polyfills": "src/Pyz/Zed/ZedUi/Presentation/Components/polyfills.ts", + "tsConfig": "tsconfig.mp.json", + "assets": [ + { + "glob": "*/src/Spryker/Zed/*/Presentation/Components/assets/**/*", + "input": "vendor/spryker", + "output": "/assets/", + "ignore": ["**/.gitkeep"] + }, + { + "glob": "*/Presentation/Components/assets/**/*", + "input": "src/Pyz/Zed", + "output": "/assets/", + "ignore": ["**/.gitkeep"] + }, + { + "glob": "*/data/files/**/*", + "input": "vendor/spryker", + "output": "/static/", + "ignore": ["**/.gitkeep"] + }, + { + "glob": "*/data/files/**/*", + "input": "src/Pyz/Zed", + "output": "/static/", + "ignore": ["**/.gitkeep"] + } + ], + "styles": [ + "vendor/spryker/zed-ui/src/Spryker/Zed/ZedUi/Presentation/Components/styles.less", + "src/Pyz/Zed/ZedUi/Presentation/Components/styles.less" + ], + "scripts": [] + }, + "configurations": { + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + }, + "production": { + "fileReplacements": [ + { + "replace": "src/Pyz/Zed/ZedUi/Presentation/Components/environments/environment.ts", + "with": "src/Pyz/Zed/ZedUi/Presentation/Components/environments/environment.prod.ts" + } + ], + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + } + }, + "outputHashing": "none", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": true, + "buildOptimizer": true, + "budgets": [ + { + "type": "bundle", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + } + }, + "defaultConfiguration": "development" + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/Pyz/Zed/*/Presentation/Components/**/*.ts", + "src/Pyz/Zed/*/Presentation/Components/**/*.html" + ] + } + }, + "test": { + "builder": "@angular-builders/jest:run", + "options": { + "tsConfig": "frontend/merchant-portal/tsconfig.spec.json", + "configPath": "frontend/merchant-portal/jest.config.ts" + } + } + } + } + }, + "cli": { + "analytics": false + } + } + ``` + + 5. Update the `node` and `npm` versions in all deploy YAML files. + + ```yaml + ... + node: + version: 20 + npm: 10 + ... + ``` + +## 4) Component breaking changes + +Below is a checklist of component-related breaking changes to review when upgrading from Angular 18 to Angular 20 in a Spryker Merchant Portal (NgModule-based architecture). + +1. **Explicitly set `standalone: false` for NgModule-based components** + - **What to do:** For all `@Component()`, `@Directive()`, and `@Pipe()` declarations that are registered via `NgModule.declarations`, explicitly add `standalone: false`. + - **Why:** Starting with newer Angular major versions v19+, Angular shifts toward standalone-first behavior. Without an explicit flag, components may be treated as standalone, resulting in build errors. + +2. **Ensure standalone components do not implicitly require `imports`** + - **What to do:** If any component unintentionally becomes standalone, verify that it does not break template features such as `*ngIf`, `*ngFor`, or `*ngSwitch` due to missing `CommonModule`. + - **Why:** Standalone components must explicitly declare dependencies via `imports`. In the Merchant Portal setup, it is safer to keep components NgModule-based and enforce `standalone: false`. + +3. **Review `NgModule` metadata (declarations, imports, exports)** + - **What to do:** Verify that: + - All externally used components are listed in `exports`. + - All required modules are included in `imports`. + - No standalone components are incorrectly declared. + - **Why:** Angular v20 applies stricter validation to module metadata, and previously tolerated misconfigurations may now fail at build time. + +4. **Validate dynamic component creation** + - **What to do:** For components created dynamically (for example via `createComponent`, `NgComponentOutlet`, CDK portals, or legacy `ComponentFactoryResolver` usage), ensure: + - A valid `Injector` or `EnvironmentInjector` is provided + - Required providers are available in the component context + - **Why:** Angular enforces stricter DI and runtime checks, and misconfigured dynamic rendering can cause runtime errors. + +5. **Enforce migration to the new template control flow syntax** + - **What to do:** Actively migrate all templates to the new Angular control flow syntax (`@if`, `@for`, `@switch`) and avoid mixing it with legacy structural directives (`*ngIf`, `*ngFor`, `*ngSwitch`). New or modified templates must use the new syntax only. + - **Why:** Legacy structural directives are considered deprecated. Mixing old and new syntaxes within the same module increases cognitive load, complicates reviews, and leads to subtle and hard-to-debug template regressions. Enforcing a single, modern control flow standard improves consistency, readability, and long-term maintainability. + +## Reference Pull Request + +As a practical example of upgrading Angular to v20 in a real project, you can review the following Pull Request: + + + +{% info_block warningBox "Important" %} + +This Pull Request contains **additional changes that are not required for the Angular upgrade**, including: +- Stylelint configuration updates +- Prettier configuration changes +- Other formatting and linting-related adjustments + +When using this Pull Request as a reference, **do not blindly apply all changes**. +Focus only on the Angular-related modifications. The Stylelint and Prettier updates are optional and can be safely ignored for the purpose of upgrading Angular to v20. + +{% endinfo_block %} diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-to-marketplace.md b/docs/dg/dev/upgrade-and-migrate/upgrade-to-marketplace.md index d405219c1bf..7f8028edd96 100644 --- a/docs/dg/dev/upgrade-and-migrate/upgrade-to-marketplace.md +++ b/docs/dg/dev/upgrade-and-migrate/upgrade-to-marketplace.md @@ -43,11 +43,3 @@ Follow feature integration guides from the table that provides functionality for | [Marketplace Merchant Portal Product Option Management](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.html) | Extends the order items with related product options in the Merchant Portal. | | [Marketplace Merchant Portal Order Management](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.html) | Allows merchants to manage their orders in the Merchant Portal. | | [ACL](/docs/pbc/all/user-management/{{site.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html) | Allows managing access to HTTP endpoints and Persistence entities. | - -## 3. Build and start the instance - -Rebuild your app in order to apply all the changes regarding database entities, data imports, search engine indexes, UI assets: - -```shell -docker/sdk up -``` diff --git a/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-dependency-injection.md b/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-dependency-injection.md index ec4c84dda0c..70d2d697fba 100644 --- a/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-dependency-injection.md +++ b/docs/dg/dev/upgrade-and-migrate/upgrade-to-symfony-dependency-injection.md @@ -1,7 +1,7 @@ --- title: How to upgrade to Symfony Dependency Injection description: This document describes how to upgrade your application to use Symfony's Dependency Injection component. -last_updated: Nov 5, 2025 +last_updated: Feb 23, 2026 template: howto-guide-template --- @@ -119,16 +119,15 @@ For details about configuring bundles, see [Symfony Bundles](/docs/dg/dev/archit To compile the container, you have two options: - On every request to the application, the Kernel checks if a compiled container already exists. If not, or if the cache is outdated, it generates a new one. +- The container is also compiled on the first run of any console command. - Run the following command to build the cache. The application then immediately uses the freshly compiled container. -For CI and production environment you should run the command manually: +When you need to compile the container in development mode you can run the command manually: ```bash console container:build ``` -While in development mode you don't need to manually build the container, as it will be built automatically on demand. - ## Next steps - [Dependency Injection](/docs/dg/dev/architecture/dependency-injection.html) diff --git a/docs/integrations/app-composition-platform-apps.md b/docs/integrations/app-composition-platform-apps.md index 34d048fe3a5..569051ac1c9 100644 --- a/docs/integrations/app-composition-platform-apps.md +++ b/docs/integrations/app-composition-platform-apps.md @@ -93,7 +93,7 @@ ACP is built to make your business more agile, secure, and scalable. By allowing
    • - +
    • - +
    • - +
    • - + + +
      +
      Implementing ERP Integration
      +
      Learn how to integrate your ERP system into Spryker, using well crafted template, as well as common integration places.
      + Find out more +
      + +
      +
      Implement PunchOut on your project
      +
      Learn how to implement PunchOut flow support and enable serving procurement system requests.
      + Find out more +
      + +
      +
      Implement PSP integration
      +
      Build custom payment provider integrations using a GitHub template with pre-configured module structure, OMS workflows, and checkout integration.
      + Find out more +
      diff --git a/docs/integrations/custom-building-integrations/data-exchange/data-export/data-export.md b/docs/integrations/custom-building-integrations/data-exchange/data-export/data-export.md index a1307887094..171925af04c 100644 --- a/docs/integrations/custom-building-integrations/data-exchange/data-export/data-export.md +++ b/docs/integrations/custom-building-integrations/data-exchange/data-export/data-export.md @@ -1,7 +1,7 @@ --- title: Data export description: Learn how to configure and extend Spryker's data export functionality for reporting, analytics, and system integration. -last_updated: July 9, 2025 +last_updated: February 27, 2026 template: default --- @@ -17,5 +17,5 @@ For installation and configuration, see the following docs: - [How to install](/docs/integrations/custom-building-integrations/data-exchange/data-export/install-the-sales-data-export-feature.html) - [Order usage example](/docs/integrations/custom-building-integrations/data-exchange/data-export/orders-data-export.html) - +- [Simplified Data Export](/docs/integrations/custom-building-integrations/data-exchange/data-export/simplified-data-export-feature.html) diff --git a/docs/integrations/custom-building-integrations/data-exchange/data-export/install-the-sales-data-export-feature.md b/docs/integrations/custom-building-integrations/data-exchange/data-export/install-the-sales-data-export-feature.md index 2f02534959a..19f7af72713 100644 --- a/docs/integrations/custom-building-integrations/data-exchange/data-export/install-the-sales-data-export-feature.md +++ b/docs/integrations/custom-building-integrations/data-exchange/data-export/install-the-sales-data-export-feature.md @@ -11,4 +11,4 @@ related: link: docs/pbc/all/order-management-system/page.version/base-shop/import-and-export-data/orders-data-export/orders-data-export.html --- -{% include pbc/all/install-features/202410.0/install-the-sales-data-export-feature.md %} \ No newline at end of file +{% include pbc/all/install-features/202602.0/install-the-sales-data-export-feature.md %} \ No newline at end of file diff --git a/docs/integrations/custom-building-integrations/data-exchange/data-export/simplified-data-export-feature.md b/docs/integrations/custom-building-integrations/data-exchange/data-export/simplified-data-export-feature.md new file mode 100644 index 00000000000..c71c55cbcd6 --- /dev/null +++ b/docs/integrations/custom-building-integrations/data-exchange/data-export/simplified-data-export-feature.md @@ -0,0 +1,412 @@ +--- +title: Simplified Data Export +description: This document describes how to export data from a Spryker shop to an external + system for your third-party integrations. +last_updated: February 27, 2026 +template: concept-topic-template +originalArticleId: 0a32b993-f10c-4f6c-20db-247a62cd22e7 +related: + - title: Orders data export + link: docs/integrations/custom-building-integrations/data-exchange/data-export/orders-data-export.html +--- + +## Overview + +The new data export system simplifies exporting entities from Spryker to external systems. +It provides a declarative YAML-based configuration combined with PHP plugins for flexibility, making it easy to integrate with third-party systems, analytics platforms, and data warehouses. +It allows you to use existing repository method and data transfer objects to export data from Spryker. +You need to define the mapping between the data entities and the fields in the export file. + +## Installation + +This feature requires `spryker/data-export` version 0.1.6 or later. Make sure your `composer.json` includes the following: + +```bash +composer require spryker/data-export:"^0.1.6" +``` + +## How to export an entity + +Simplified Data Export greatly simplifies the process. For example, creating an `OrderDataExport` requires only: + +### 1. Add YML Configuration + +```yml +version: 1 + +defaults: + filter_criteria: + created_at: + from: "3 week ago 00:00:00" + to: 'now' + connection: + type: file-system # connection plugin that implements \Spryker\Service\DataExportExtension\Dependency\Plugin\DataExportConnectionPluginInterface. Connection to a place where files are exported. + params: + # check connection plugin documentation for params + +actions: + - data_entity: order + destination: '{store}_order.{extension}' + format: + type: json + object: 'order' + fields: + field_name_in_export_file: $.fieldNameInYourTransfer + entity_id: $.entityId + # Fields can be configured here or in a plugin. + # YML config is merged with plugin config. + # YML overrides plugin config fields if they are also defined in plugin. +``` + +- [Field configuration explanation](#field-configuration-explanation) + +### 2. Implement a Plugin + +```php +class OrderDataEntityReaderPlugin extends AbstractPlugin implements DataEntityReaderPluginInterface, DataEntityFieldsConfigPluginInterface +{ + public function getDataEntity(): string + { + return 'order'; + } + + public function getDataBatch(DataExportConfigurationTransfer $dataExportConfigurationTransfer): DataExportBatchTransfer + { + $criteriaTransfer = (new SomeCriteriaTransfer()) + ->fromArray($dataExportConfigurationTransfer->getFilterCriteria()); + + return $this->getRepository()->getOrderData( + $criteriaTransfer, + $dataExportConfigurationTransfer->getOffsetOrFail(), + $dataExportConfigurationTransfer->getBatchSizeOrFail(), + ); + } + + public function getFieldsConfig(): array + { + return [ + 'field_name_in_config' => '$.fieldNameInYourDataTransfer', + ]; + } +} +``` + +This plugin links the data entity (`order`) with its data retrieval logic and field mapping. + +You can choose where to define the fields configuration — either in the YAML file or in a plugin that implements the `DataEntityFieldsConfigPluginInterface`. + +#### Register the plugin + +Add the plugin to your module's dependency provider: + +```php + + */ + protected function getDataEntityReaderPlugins(): array + { + return [ + new OrderDataEntityReaderPlugin(), + ]; + } +} +``` + +### 3. Implement Repository Logic + +Implement the repository method that retrieves and prepares data for export: + +```php +public function getOrderData( + DataExportConfigurationTransfer $dataExportConfigurationTransfer, + int $offset, + int $limit +): DataExportBatchTransfer { + $query = $this->getFactory()->getSpySalesOrderQuery(); + + $this->applyFilters($query, $dataExportConfigurationTransfer); + $query->setOffset($offset)->setLimit($limit); + + $orderEntities = $query->find(); + $dataExportBatchTransfer = (new DataExportBatchTransfer()) + ->setOffset($offset) + ->setLimit($limit); + + $data = []; + + foreach ($orderEntities as $orderEntity) { + $data[] = $this->mapExportDataItem($orderEntity); + } + + return $dataExportBatchTransfer->setData($data); +} + +protected function applyFilters( + SpySalesOrderQuery $query, + SomeCriteriaTransfer $criteriaTransfer +): void { + if ($criteriaTransfer->getCreatedAtFrom()) { + $query->filterByCreatedAt( + $criteriaTransfer->getCreatedAtFrom(), + Criteria::GREATER_EQUAL + ); + } + + if ($criteriaTransfer->getCreatedAtTo()) { + $query->filterByCreatedAt( + $criteriaTransfer->getCreatedAtTo(), + Criteria::LESS_EQUAL + ); + } +} + +protected function mapExportDataItem(SpySalesOrder $orderEntity): OrderTransfer +{ + // map to OrderTransfer +} +``` + +The repository prepares the query with necessary joins, applies filters from the configuration, and maps results into `DataExportBatchTransfer`. + +--- + +## Field configuration explanation + +The fields configuration defines how data from your Transfer objects is mapped to fields in the export output. +Each entry specifies: +- Left side – the field name in your export file +- Right side – the field path in the Transfer object returned in the repository collection + +For example, if you are exporting orders, the OrderTransfer contains: + +```php + /** + * @var \Generated\Shared\Transfer\AddressTransfer|null + */ + protected $billingAddress; +``` + +and the AddressTransfer includes: + +```php + /** + * @var string + */ + public const PHONE = 'phone'; + +``` + +You can then define in your configuration: + +```yaml +phone: $.billingAddress.phone +``` + +Here, `$` represents the root OrderTransfer object. + +The fields configuration defined in the YAML file has higher priority than the configuration defined in the plugin. +If the same field is defined in both the plugin and the YAML configuration, the value from the YAML file will be used. + +Fields from both sources (plugin and YAML) are merged into the final configuration: +- Fields defined only in the plugin will be included by default +- Fields defined in the YAML file can override or extend those from the plugin + +**Example with OrderTransfer:** + +The following example demonstrates how to export order data with various mapping scenarios: +- Simple field mapping +- Nested object field mapping +- Array field mapping with wildcards + +**In plugin:** + +```php +public function getFieldsConfig(): array +{ + return [ + // Simple field mapping (colon syntax) + 'order_reference:$.orderReference', + 'created_at:$.createdAt', + + // Nested object field mapping + 'billing_address_phone:$.billingAddress.phone', + 'billing_address_city:$.billingAddress.city', + + // Alternative key-value syntax + 'customer_email' => '$.customer.email', + + // Array mapping with wildcards - exports each order item + // Results in: item_0_sku, item_1_sku, item_2_sku, etc. + 'item_*_sku:$.items.*.sku', + 'item_*_quantity:$.items.*.quantity', + ]; +} +``` + +**In YAML configuration:** + +```yaml +actions: + - data_entity: order + fields: + # Override the billing phone from plugin + billing_address_phone: $.billingAddress.phone + + # Add new fields not defined in plugin + order_total: $.totals.grandTotal + currency: $.currencyIsoCode + + # Add more nested fields + shipping_address_city: $.shippingAddress.city + shipping_address_country: $.shippingAddress.country.name + + # Override array mapping to include item names + item_*_name: $.items.*.name + item_*_price: $.items.*.unitPrice +``` + +**Merged output:** + +If a field appears in both configurations, the YAML version replaces the plugin one. Fields from both sources are combined in the final configuration: + +```yaml +# From plugin (kept): +order_reference: $.orderReference +created_at: $.createdAt +billing_address_city: $.billingAddress.city +customer_email: $.customer.email +item_*_sku: $.items.*.sku +item_*_quantity: $.items.*.quantity + +# From plugin (overridden by YAML): +billing_address_phone: $.billingAddress.phone + +# From YAML (new fields): +order_total: $.totals.grandTotal +currency: $.currencyIsoCode +shipping_address_city: $.shippingAddress.city +shipping_address_country: $.shippingAddress.country.name +item_*_name: $.items.*.name +item_*_price: $.items.*.unitPrice +``` + +**Resulting export data for an order with 2 items:** + +```json +{ + "order_reference": "DE--123", + "created_at": "2025-01-27 10:00:00", + "billing_address_phone": "+49123456789", + "billing_address_city": "Berlin", + "customer_email": "customer@example.com", + "order_total": 15000, + "currency": "EUR", + "shipping_address_city": "Munich", + "shipping_address_country": "Germany", + "item_0_sku": "SKU-001", + "item_0_quantity": 2, + "item_0_name": "Product A", + "item_0_price": 5000, + "item_1_sku": "SKU-002", + "item_1_quantity": 1, + "item_1_name": "Product B", + "item_1_price": 5000 +} +``` + +Or in CSV format: + +```csv +order_reference,created_at,billing_address_phone,billing_address_city,customer_email,order_total,currency,shipping_address_city,shipping_address_country,item_0_sku,item_0_quantity,item_0_name,item_0_price,item_1_sku,item_1_quantity,item_1_name,item_1_price +DE--123,2025-01-27 10:00:00,+49123456789,Berlin,customer@example.com,15000,EUR,Munich,Germany,SKU-001,2,Product A,5000,SKU-002,1,Product B,5000 +``` + +**How wildcard mapping works:** + +When you use `*` in the export key (for example `item_*_sku`), the mapper: +1. Evaluates the path `$.items.*.sku` against the OrderTransfer +2. Iterates through each item in the `items` array +3. Creates separate fields for each item: `item_0_sku`, `item_1_sku`, `item_2_sku`, etc. +4. The `*` is replaced with the array index + +This is useful when you need to export arrays as flat structure for CSV files or when your destination system expects a fixed column structure. + +--- + +### Alternative: Custom streaming with Generator + +By default, the data export system uses `DataEntityReaderPluginInterface` to retrieve data in batches. The system internally wraps your plugin's `getDataBatch()` method with a generator that handles pagination automatically: + +```php + do { + $dataExportConfigurationTransfer->setOffset($offset); + $dataExportBatchTransfer = $dataEntityReaderPlugin->getDataBatch($dataExportConfigurationTransfer); // your plugin's getDataBatch() method + $dataExportBatchTransfer->setOffset($offset)->setLimit($limit); + + yield $dataExportBatchTransfer; + + $offset += count($dataExportBatchTransfer->getData()); + } while (count($dataExportBatchTransfer->getData()) === $limit); +``` + +**When to implement a custom generator** + +If you need more control over the data streaming process (for example, custom pagination logic, direct database cursor streaming, or memory-optimized iteration), implement `DataEntityGeneratorPluginInterface` instead of `DataEntityReaderPluginInterface`. + +With `DataEntityGeneratorPluginInterface`, you have full control over the generator implementation and can yield data items or batches directly without the default pagination wrapper. + +```php + // system will use your generator directly + return $this->dataExportPluginProvider + ->getDataEntityPluginForInterface($dataEntityName, DataEntityGeneratorPluginInterface::class) + ->getBatchGenerator($dataExportConfigurationTransfer); +``` + +```php + + */ + public function getBatchGenerator(DataExportConfigurationTransfer $dataExportConfigurationTransfer): \Generator + { + $criteriaTransfer = (new SomeCriteriaTransfer()) + ->fromArray($dataExportConfigurationTransfer->getFilterCriteria()); + + $query = $this->getRepository()->createOrderQuery($criteriaTransfer); + + foreach ($query->find() as $orderEntity) { + yield (new DataExportResultTransfer()) + ->setData($orderEntity->toArray()); + } + } +} +``` diff --git a/docs/integrations/custom-building-integrations/endpoint-security.md b/docs/integrations/custom-building-integrations/endpoint-security.md index c9d8b8dd757..614435cfaec 100644 --- a/docs/integrations/custom-building-integrations/endpoint-security.md +++ b/docs/integrations/custom-building-integrations/endpoint-security.md @@ -12,7 +12,7 @@ template: default Spryker offers built-in support for Basic Auth on both REST and Glue APIs. You can configure it to restrict access to sensitive endpoints or entire services. - +
      diff --git a/docs/integrations/custom-building-integrations/erp-integration-template.md b/docs/integrations/custom-building-integrations/erp-integration-template.md new file mode 100644 index 00000000000..05b6c73116a --- /dev/null +++ b/docs/integrations/custom-building-integrations/erp-integration-template.md @@ -0,0 +1,236 @@ +--- +title: Implementing ERP Integration +description: Easy starting point for projects to connect to ERP systems. +keywords: erp, integration, third party, guide, oms, webhook +last_updated: Feb 20, 2026 +template: default +--- + +## Introduction + +This document provides a comprehensive development plan for connecting Spryker projects to ERP systems using the ERP Integration Template. + +## Overview + +To connect a project to an ERP system faster, we provide a template module structure for implementing third-party calls. + +We recommend implementing one ERP Client for each ERP system. + +## General approach + +Template can be downloaded from the community package [ERP Integration](https://github.com/spryker-community/erp-integration). + +This template provides a foundation with essential components already wired together, allowing you to focus on business logic implementation rather than application architecture. +It's not intended to be used as a composer dependency, thus composer.json file is not a part of this repository. It has no special requirements for packages, since it requires the Guzzle, Kernel, and Transfer modules, which are a part of every Spryker project. + +Overall the implementation process looks like this: +1. Configure ERP connection. +2. Validate logging and error handling. +3. Implement requests: + 1. Prepare a request model + 2. Prepare a request and response mapping models + 3. Wire models into Factory and Client +4. Call created Client method from the business logic. + +## Getting Started with the ERP Integration Template + +To begin working with the ERP integration template in your project: + +1. **Copy the template module** from `\Pyz\Zed\ErpIntegration` to your project. +2. **Replace the name and namespace** to match your project naming conventions. +3. **Update configuration** in your `config_default-erp.php` with your ERP system credentials and endpoints. +4. **Implement requests** for the specific operations your project requires. + +### Template Module Structure Overview + +The template follows Spryker architecture patterns and can be refactored to match your project's specific coding standards. + +- config + - Shared + - **config_default-erp.php** - connection configuration. +- src + - Pyz + - Client + - ErpIntegration + - **ErpIntegrationClient.php** - Spryker Client entry point + - Models + - **BaseRequest.php** - base module, providing essentials for each specific request model. + - **[Name]Request.php** + **[Name]RequestMapper.php** - models for each type of request. + - Shared + - ErpIntegration + - **erp_integration.transfer.xml** - request/response transfer objects definition. + - Yves - contains blueprint usage of the Client methods. + - Zed - contains blueprint usage of the Client methods. + +### Prepare the Module Structure + +First, decide how to name your new module with an ERP integration. This document uses name `ErpIntegration`. + +{% info_block infoBox %} + +If you plan to develop a reusable standalone module, follow [Create standalone modules](/docs/dg/dev/developing-standalone-modules/create-standalone-modules.html). + +{% endinfo_block %} + +Next, copy the full content of Client and Shared into the module's folder, adjusting namespace if you don't use Pyz. +Review all added classes to ensure the code follows your project's coding guidelines, including naming conventions, visibility modifiers, and documentation standards. + +Then copy the provided configuration **config_default-erp.php** into `config/Shared` and add to the very end of **config/Shared/config_default.php**: + +```php +require 'config_default-erp.php'; +``` + +Repeat this procedure for each environment, using the corresponding to that environment file. + +### Configure ERP Connection + +The class `src/Pyz/Client/ErpIntegration/Models/BaseRequest` provides a request builder, logging and handling of failed responses. You have to adjust the following places: + +- `BaseRequest::DEFAULT_REQUEST_TIMEOUT_SECONDS` - with the default timeout for requests. +- `BaseRequest::getRequestOptions` - request parameters, including authentication, referrer. See [Guzzle documentation](https://docs.guzzlephp.org/en/stable/request-options.html) for a full list of options. +- `BaseRequest::buildRequestHeaders` - request headers, like content type, accept, and any ERP-specific custom headers. + +Following Spryker best practices, configuration happens in `config_default-erp.php`, including environment-specific files: + +```php +$config[ErpIntegrationConstants::BASE_URI] = getenv('ERP_BASE_URI'); +$config[ErpIntegrationConstants::EXAMPLE_REQUEST_URL] = '/example-request/'; +``` + +If your integration has fixed URLs, consider putting them directly into the ErpIntegrationConfig class. + +In most cases, Preproduction and Production ERP systems have different setup, and this has to be reflected in the definition of the environment variable **ERP_BASE_URI** in the Parameter Store. Follow [Add variables in the Parameter Store](/docs/ca/dev/add-variables-in-the-parameter-store.html) to define environment-specific variables for your project. + +For local development, we recommend defining variables in **config_local.php** and avoid committing them into the VCS. + +If the connection requires authentication, make sure to put credentials into environment variables as well. + +In case of a special connection setup for [Guzzle client configuration](https://docs.guzzlephp.org/en/5.3/clients.html), apply it to `ErpIntegrationDependencyProvider::addGuzzleClient`. + +### Validate Logging and Error Handling + +The template provides detailed logging in each case following Spryker best practices: + +- `BaseRequest::handleFailedConnectionResponse` - when connection failed, usually due to timeout or server error. Request is logged at error level. +- `BaseRequest::handleGenericRequestFailureResponse` - any non-connection related failure. Request is logged at error level. +- `BaseRequest::createFailedResponse` - provides a template for generating the failed response, including the message from the exception. +- `BaseRequest::logRequest` - logging request at info level. +- `BaseRequest::logResponse` - logging response at info level. + +### Example Implementation Pattern + +When implementing an ERP integration, follow this pattern for each request: + +1. **Define Transfer objects** that represent request and response +2. **Create a Request model** that encapsulates the data your ERP system needs. +3. **Implement Request and Response Mapping** that transforms your domain model into the ERP request format and vice versa. +4. **Add a Client method** that makes the request. +5. **Connect to your business logic** (plugins, facades, console commands) using the Client method. + +#### 1. Define Transfer Objects + +Each request requires specialized transfer objects for request and response. Edit `src/Pyz/Shared/ErpIntegration/Transfer/erp_integration.transfer.xml`: + +```xml + + + + + + + +``` + +Execute `vendor/bin/console transfer:generate` to generate new transfer PHP classes. + +#### 2. Create a Request model + +Start with a copy of model `src/Pyz/Client/ErpIntegration/Models/ExampleRequest`, which doesn't require an interface since it contains a single method without a reason for extension. + +Once the model is prepared, adjust the factory by creating the method `ErpIntegrationFactory::createExampleRequest`. Skip if using Symfony DI. + +Adjust the name of the request method `doRequest`, if necessary. Simultaneously, create a client method to call it - `ErpIntegrationClient::doExampleRequest`. + +If your system doesn't require a POST call, change the method called on guzzleClient. + +#### 3. Implement Request and Response Mapping + +Create a copy of `src/Pyz/Client/ErpIntegration/Models/ExampleRequestMapper` and adjust: + +- `mapTransferToRequestString` - to map request transfer object onto the 3rd party service request format. +- `mapResponseToResponseTransfer` - to map 3rd party service response format onto response transfer object. + +#### 4. Add a Client method + +First, update Factory and introduce model and mapper instantiation, follow methods `createExampleRequest` and `createExampleRequestMapper` as example. Skip if using Symfony DI. + +Then add a client method, follow method `doExampleRequest` as example. + +#### 5. Connect to your business logic + +You can call this client method from Glue, Yves or Zed application. + +## Integrating ERP calls into Business logic + +Based on our experience, we collected a set of the most common places to integrate a call to ERP system. + +### Provide live product prices into the cart + +Implement a plugin interface `\Spryker\Zed\CartExtension\Dependency\Plugin\ItemExpanderPluginInterface` and add your plugin into `\Pyz\Zed\Cart\CartDependencyProvider::getExpanderPlugins`. +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Cart\ErpCartItemExpanderPlugin`. + +### Provide live availability check in cart + +Implement a plugin interface `\Spryker\Zed\CartExtension\Dependency\Plugin\CartPreCheckPluginInterface` and add your plugin into `\Pyz\Zed\Cart\CartDependencyProvider::getCartPreCheckPlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Cart\ErpCartValidationPlugin`. + +### Live shipment method data + +General documentation can be found here - [Shipment method plugins](/docs/pbc/all/carrier-management/202602.0/base-shop/extend-and-customize/shipment-method-plugins-reference-information.html). + +For price, implement a plugin interface `\Spryker\Zed\ShipmentExtension\Dependency\Plugin\ShipmentMethodPricePluginInterface` and add your plugin into `\Pyz\Zed\Shipment\ShipmentDependencyProvider::getPricePlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Shipment\ErpShipmentMethodPricePlugin`. + +For availability, implement a plugin interface `\Spryker\Zed\ShipmentExtension\Dependency\Plugin\ShipmentMethodAvailabilityPluginInterface` and add your plugin into `\Pyz\Zed\Shipment\ShipmentDependencyProvider::getAvailabilityPlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Shipment\ErpShipmentMethodAvailabilityPlugin`. + +For delivery time, implement a plugin interface `\Spryker\Zed\ShipmentExtension\Dependency\Plugin\ShipmentMethodDeliveryTimePluginInterface` and add your plugin into `\Pyz\Zed\Shipment\ShipmentDependencyProvider::getDeliveryTimePlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Shipment\ErpShipmentMethodDeliveryTimePlugin`. + +### Monitor connection status, aka Health check + +Implement a plugin interface `\Spryker\Shared\HealthCheckExtension\Dependency\Plugin\HealthCheckPluginInterface` and add your plugin into `\Pyz\Yves\HealthCheck\HealthCheckDependencyProvider::getHealthCheckPlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\HealthCheck\ErpHealthCheckPlugin`. + +We recommend calling the fastest resource your ERP system can provide. + +Consult with [integration of health checks](/docs/dg/dev/integrate-and-configure/integrate-health-checks.html) documentation. + +### Validation of the whole cart + +Implement a plugin interface `\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPreConditionPluginInterface` and add your plugin into `\Pyz\Zed\Checkout\CheckoutDependencyProvider::getCheckoutPreConditions`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Checkout\ErpCheckoutPreConditionPlugin`. + +### Communication with ERP related to the placed order + +Spryker provides a variety of plugin stacks to use during order placement. + +Do not include ERP calls in any of these plugins, since they slow down order placement. + +When you need to make an ERP call related to the order, put it into the OMS command. + +Implement a plugin interface `\Spryker\Zed\Oms\Dependency\Plugin\Command\CommandByOrderInterface` and add your plugin into `\Pyz\Zed\Oms\OmsDependencyProvider::getCommandPlugins`. + +See example implementation here: `\Pyz\Zed\ErpIntegration\Communication\Plugin\Oms\Command\ErpOrderExportCommandByOrderPlugin`. + +### Providing a webhook for ERP system + +Implement a [BackendAPI resource](/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources) and call required Client method inside it. +By default, Spryker supports only JSON format. diff --git a/docs/integrations/custom-building-integrations/psp-integration-template.md b/docs/integrations/custom-building-integrations/psp-integration-template.md new file mode 100644 index 00000000000..ec7a4845377 --- /dev/null +++ b/docs/integrations/custom-building-integrations/psp-integration-template.md @@ -0,0 +1,146 @@ +--- +title: PSP Integration Template +description: Payment provider integration template for Spryker. Complete module scaffold with OMS workflows and documentation for custom PSP development. +last_updated: Feb 24, 2026 +template: default +layout: custom_new +keywords: + - payment integration + - PSP integration + - payment gateway + - payment module + - payment provider + - Stripe integration + - Adyen integration + - PayPal integration + - custom payment + - payment template + - payment scaffold + - checkout integration + - OMS workflow + - reusable payment module +--- + +## Overview + +The Payment Service Provider (PSP) Integration Template is a GitHub repository that provides an architectural foundation for building custom payment provider integrations in Spryker Commerce OS. The template contains the complete module structure, database schema, Order Management System (OMS) configuration, and integration points required for a PSP module. It clearly marks the locations where you implement provider-specific logic. + +Use this template when you need to integrate a payment provider without an existing Spryker Eco module — for example, Mollie, Klarna, Worldline, or a regional payment gateway that lacks official Spryker support. The template eliminates the need to design the module architecture and integration patterns. This allows you to focus on implementing PSP-specific API communication and business logic. + +**What you achieve**: A PSP integration that follows Spryker conventions, integrates with checkout and OMS workflows, and can be deployed either as a project-specific implementation or as a reusable module across multiple projects. + +## When to use this template + +### Your payment provider does not have an existing Spryker Eco module + +You have selected a payment provider that does not have a ready-made integration available in the Spryker Eco marketplace. Common scenarios include regional payment providers (Mollie, Buckaroo, MultiSafepay), specialized B2B payment solutions, or payment providers with country-specific payment methods. + +**Important**: If an Eco module already exists for your payment provider (such as Stripe, Adyen, or PayPal), use that module instead of this template. Existing modules provide a working integration structure that you can reference and build upon. + +### You require multiple payment methods from a single provider + +Your payment provider offers multiple payment methods (for example, credit card, invoice, direct debit, or digital wallets) that you want to integrate within a unified module structure. The template supports multiple payment methods and includes example configurations for credit card and invoice flows. + +### You are an implementation agency building reusable modules + +Your agency develops Spryker projects for multiple clients who use the same payment provider. The template enables you to create a standardized module under your organization's namespace that can be shared across client projects, reducing duplicate development effort. + +## Prerequisites + +Before you begin evaluating or implementing this template, ensure you have the following: + +### Technical environment + +- Spryker Commerce OS + +### Project requirements + +- Selected payment provider +- Defined payment methods to support +- Defined payment flow (authorization timing, capture timing, refund requirements) + +### Payment provider access + +- API credentials for sandbox environment +- Access to PSP technical documentation + +## How to work with this template + +The template supports two integration approaches depending on your requirements: + +### Option 1: Direct project integration + +Use this approach when you need a PSP integration for a single project. You clone the template and run the automated renaming script to copy files directly into your project's namespace. Then, you implement the PSP-specific logic. This is the fastest path from template to working integration. + +**Outcome**: PSP module exists within your project codebase. You do not create a separate package or repository. + +### Option 2: Reusable module development + +Use this approach when you are building a module that will be used across multiple projects. You create a standalone Composer package under your organization's namespace (for example, `Acme\\Stripe` or `MyCompany\\Braintree`), implement the PSP logic, and publish the package to a repository. Multiple projects can then install the module via Composer. + +**Outcome**: Standalone PSP module package that can be installed in multiple Spryker projects. + +## Implementation workflow + +### Step 1: Obtain and rename + +You clone the template repository and use the included automated renaming script. The script replaces all occurrences of `PaymentTemplate` with your PSP name in files, classes, namespaces, and the database schema. + +Refer to the Quick Start section in [README.md](https://github.com/spryker-community/payment-template/blob/main/README.md) for detailed instructions on all available options for obtaining and renaming the template, including GitHub template workflow and manual clone workflow. + +### Step 2: Implement PSP logic + +You implement the PSP-specific integration code by working through TODO comments in the template. The included [IMPLEMENTATION.md](https://github.com/spryker-community/payment-template/blob/main/IMPLEMENTATION.md) guide provides a complete checklist with specific file locations and implementation requirements for: + +- API communication (authorization, capture, cancel operations) +- Request and response mapping between Spryker and PSP formats +- Payment status handling and database updates +- Webhook signature validation and event processing +- Payment forms customization +- OMS command and condition implementation + +**Estimated scope**: The template provides module structure and integration points. You implement PSP-specific API calls, business logic, error handling, and testing. + +### Step 3: Configure and test + +You configure the API credentials, set up webhook endpoints in the PSP dashboard, and test the integration in the PSP sandbox environment. This includes testing payment authorization, capture, cancellation, webhook delivery, and OMS state transitions. + +### Step 4: Deploy + +After successful sandbox testing, you update the configuration with production API credentials and webhook URLs, run database migrations in the production environment, and monitor the initial payment transactions. + +## Trade-offs and considerations + +### Benefits of using this template + +- Module structure follows Spryker architectural conventions +- Integration points with checkout, OMS, and persistence layers are pre-configured +- Supports both project-specific and reusable module workflows +- Automated renaming reduces manual editing and potential errors +- Includes working examples of payment forms and OMS configurations + +### Considerations before adopting + +- You are responsible for all PSP-specific implementation, testing, and ongoing maintenance +- Template assumes standard authorize-capture-cancel payment flow (customization required for non-standard flows) +- Requires development resources with knowledge of both Spryker module architecture and your PSP's API +- No vendor support or guaranteed updates are provided (community-maintained template) + +### Alternative approaches + +- **Wait for official Eco module**: If your PSP has significant market share (like Crefopay, Stripe, or Adyen), Spryker or a partner may develop an official module +- **Hire Spryker partner agency**: Contract an agency to build and maintain a custom integration +- **Build from scratch**: Develop a custom module architecture if your PSP requires integration patterns not covered by the template + +## Next steps + +### Evaluate fit for your project + +Review the Prerequisites and Implementation workflow sections to determine if you have the required resources and expertise. Compare the template's standard payment flow with your PSP's requirements to identify customization needs. + +### Access template and documentation + +- **GitHub repository**: [https://github.com/spryker-community/payment-template](https://github.com/spryker-community/payment-template) +- **[README.md](https://github.com/spryker-community/payment-template/blob/main/README.md)**: Overview with quick start instructions for all integration workflows +- **[IMPLEMENTATION.md](https://github.com/spryker-community/payment-template/blob/main/IMPLEMENTATION.md)**: Detailed checklist for developers with file locations and implementation guidance +- **[INTEGRATION.md](https://github.com/spryker-community/payment-template/blob/main/INTEGRATION.md)**: Guide for installing a completed module into a Spryker project diff --git a/docs/integrations/custom-building-integrations/punchout-development-plan.md b/docs/integrations/custom-building-integrations/punchout-development-plan.md new file mode 100644 index 00000000000..d48a91fa7ec --- /dev/null +++ b/docs/integrations/custom-building-integrations/punchout-development-plan.md @@ -0,0 +1,300 @@ +--- +title: Implement PunchOut on your project +description: Enable projects to connect to procurement systems following PunchOut protocol. +keywords: punchout, Punch Out, punchout, cxml, oci, procurement, procurement systems, guide +last_updated: Feb 25, 2026 +template: default +--- + +## Introduction + +This document provides a comprehensive development plan for connecting your Spryker project to a procurement system using the PunchOut flow. + +It includes technical specifications for implementing database modifications, authentication endpoints, and Yves and Back Office customizations. + +## Prerequisites + +Before you start, familiarize yourself with the PunchOut flow. You can find an overview of the most common protocols in the [PunchOut Commerce guide](https://punchoutcommerce.com/guides/punchout/). + +## Assumptions + +This plan is based on the following assumptions: +1. The integration uses cXML as described in the [cXML PunchOut setup request guide](https://punchoutcommerce.com/guides/punchout/cxml-punchout-setup-request/) +2. External customer identification is based on the **email**, which is provided as the `UserEmail` attribute of the buyer. Shop owners must ensure that the customer is configured correctly in the shop, including their company, business unit, prices, product lists, discounts, and other relevant settings. +3. The PunchOut `BuyerCookie` (session cookie or identifier) maintains the cart state during the procurement workflow. + +## Development Plan + +This guide includes step-by-step instructions for: +- Configuring customer data +- Updating transfer definitions +- Updating security headers as required +- Modifying the checkout flow + +to enable your Spryker shop to operate within a PunchOut procurement workflow. + +### PunchOut platforms registration + +**src/Pyz/Zed/PunchOut/Persistence/Propel/Schema/spy_punchout.schema.xml** + +```xml + + + + + + + + +
      +
      +``` + +Implement a `PunchOutFacade` to validate the request data against the configured identity and shared secret pairs. + +If you plan to support multiple PunchOut protocols, extend this table with additional parameters. + +Implement a Back Office UI to manage this table. + +### Update Customer + +Update the `spy_customer` table by adding a `login_hash` string field. + +**src/Pyz/Zed/PunchOut/Persistence/Propel/Schema/spy_customer.schema.xml** + +```xml + + + + + + +
      +
      +``` + +Update the `CustomerTransfer` accordingly: + +**src/Pyz/Shared/PunchOut/Transfer/punchout.transfer.xml** + +```xml + + + + +``` + +#### Update Customer in the Back Office + +Update the Customer edit and view UI in the Back Office to manage the new fields. + +### Update quote object + +To handle the PunchOut session, store the required data in the cart. +Update the `Quote` transfer that represents the cart. + +**src/Pyz/Shared/PunchOut/Transfer/punchout.transfer.xml** + +```xml + + + + + + + +``` + +Add the newly created fields to `\Pyz\Zed\Quote\QuoteConfig::getQuoteFieldsAllowedForSaving()` to persist them in the session: +- punchoutSessionID, +- disableCheckout, +- allowPunchOut, +- punchOutSubmitUrl. + +Field **punchOutFormData** is used only to transfer data on the summary step. + +Add any additional fields required by your integration. + +### Yves UI changes + +To enable a safe PunchOut flow, introduce a `Return To Procurement System` button. + +#### Introduce Return To Procurement System button + +To generate the PunchOut form data, implement a plugin with interface `\SprykerShop\Yves\CheckoutPageExtension\Dependency\Plugin\CheckoutStepPreConditionPluginInterface`: + +**\Pyz\Yves\PunchOut\Plugin\PunchOutCheckoutStepPreConditionPlugin** + +```php +... +class PunchOutCheckoutStepPreConditionPlugin extends AbstractPlugin implements CheckoutStepPreConditionPluginInterface +... + public function preCondition(QuoteTransfer $quoteTransfer): QuoteTransfer + { + $quoteTransfer = $this->getFactory() + ->createPunchOutSummaryStepData() + ->prepareData($quoteTransfer); + + return $quoteTransfer; + } +... +``` + +**\Pyz\Yves\PunchOut\Models\PunchOutSummaryStepData** + +```php +... +class PunchOutSummaryStepData { + public function prepareData(QuoteTransfer $quoteTransfer): QuoteTransfer + { + $quoteTransfer->setPunchOutFormData(/* build the PunchOut form data */); + + return $quoteTransfer; + } +} +... +``` + +**\Pyz\Yves\PunchOut\PunchOutFactory** + +```php +... + public function createPunchOutSummaryStepData(): PunchOutSummaryStepData + { + return new PunchOutSummaryStepData(); + } +... +``` + +`src/Pyz/Yves/CheckoutPage/Theme/default/views/summary/summary.twig` + +```twig +{% raw %}{%{% endraw %} extends template('page-layout-checkout', '@Spryker:CheckoutPage') {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} block submit {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if not data.cart.disableCheckout {% raw %}%}{% endraw %} + {{ parent() }} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if data.cart.allowPunchOut {% raw %}%}{% endraw %} +
      + {{ data.cart.punchOutFormData }} + + +
      + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +After you change Twig templates, clear the cache using your project's standard cache-clearing mechanism. + +### Handling PunchOut Start request + +To handle a PunchOut start request, implement a Yves controller. + +Because the selected protocol can affect the implementation scope, this guide describes the minimal required setup: + +{% info_block infoBox "cXML support" %} +As a part of the [API Platform](https://docs.spryker.com/docs/dg/dev/architecture/api-platform) from the version [0.5.4](https://github.com/spryker/api-platform/releases/tag/0.5.4) we provide support for the cXML format. +{% endinfo_block %} + +**src/Pyz/Shared/PunchOut/Transfer/punchout.transfer.xml** + +```xml + + + + + + + + + +``` + +**src/Pyz/Yves/PunchOut/Controller/PunchOutController.php** + +```php +... +use Spryker\Shared\Log\LoggerTrait; +... +class PunchOutController extends AbstractController +{ + use LoggerTrait; + + public function loginAction(Request $request): Response + { + $punchoutLoginRequestTransfer = new PunchoutLoginRequestTransfer(); + $punchoutLoginRequestTransfer->setRequestUrl($request->getUri()); + $punchoutLoginRequestTransfer->setRequestBody($request->getContent()); + $this->getLogger()->info('PunchOut login request', $punchoutLoginRequestTransfer->toArray()); + + $punchoutLoginResponseTransfer = $this->getFactory()->getPunchoutClient() + ->processLoginRequest($punchoutLoginRequestTransfer); + + $this->getLogger()->info('PunchOut login response', $punchoutLoginResponseTransfer->toArray()); + + if (!$punchoutLoginResponseTransfer->getIsSuccessful()) { + return new Response('', 403); + } + + return new Response($punchoutLoginResponseTransfer->getLoginResponse()); + } +} +``` + +**src/Pyz/Client/PunchOut/PunchOutClient.php** + +```php +class PunchOutClient extends \Spryker\Client\Kernel\AbstractClient +{ + public function processLoginRequest(PunchoutLoginRequestTransfer $punchoutLoginRequestTransfer): PunchoutLoginResponseTransfer + { + // Call the Facade through a Gateway, which performs: + // - Validation of request credentials + // - Finding a customer by UserEmail + // - Cart preparation with required data: punchoutSessionID, disableCheckout, allowPunchOut, punchOutSubmitUrl + // - Generation of login URL + } +} +``` + +#### Generation of the login URL + +The simplest approach is to use a `loginHash` as a one-time token to identify the customer. + +You can implement another Yves controller that locates the customer by this hash and logs them in by calling **\Spryker\Client\Customer\CustomerClient::setCustomer**. +For reference of the token-based customer login, see implementation in: **\SprykerShop\Yves\CustomerPage\Controller\AccessTokenController::executeIndexAction**. + +If you detect during login that a store must be set, call **\Spryker\Client\Session\SessionClient::set('current_store', );** to change the store and issue a redirect so the changes will take effect. + +### How to handle embedding of the shop into iFrame + +#### Security headers + +To allow your Spryker shop to be embedded in an iframe, adjust the security headers as follows: + +```shell +X-Frame-Options: ALLOW-FROM https://example.com/ +Content-Security-Policy: frame-ancestors 'self' https://example.com; +``` + +To implement this, implement a plugin with interface `\Spryker\Shared\EventDispatcherExtension\Dependency\Plugin\EventDispatcherPluginInterface`, +which sets mentioned headers to support embedding into an iframe. + +Include this plugin into stack **\Pyz\Yves\EventDispatcher\EventDispatcherDependencyProvider::getEventDispatcherPlugins**. + +If you still use the deprecated plugin `\Spryker\Yves\Application\Communication\Plugin\EventDispatcher\HeadersSecurityEventDispatcherPlugin`, you must override it instead. + +#### Cookies configuration + +The cookie configuration is defined in: `\Spryker\Yves\Session\SessionConfig::getSessionStorageOptions`. + +Configure at least `cookie_samesite=None` to allow cookies to be set inside the iframe. diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.md index f7b86bcc7b0..7270610179f 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.md @@ -15,9 +15,9 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202200.0/authentication-and-authorization.html - /docs/scos/dev/glue-api-guides/202204.0/authentication-and-authorization.html - /docs/pbc/all/identity-access-management/202404.0/glue-api-authentication-and-authorization.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/glue-api-authentication-and-authorization - - /docs/dg/dev/glue-api/latest/authentication-and-authorization.html - - /docs/dg/dev/glue-api/latest/rest-api/glue-api-authentication-and-authorization.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/glue-api-authentication-and-authorization + - /docs/dg/dev/glue-api/202602.0/authentication-and-authorization.html + - /docs/dg/dev/glue-api/202602.0/rest-api/glue-api-authentication-and-authorization.html --- diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-backend-api-authorization-strategies.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-backend-api-authorization-strategies.md index c1243944720..113ad867427 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-backend-api-authorization-strategies.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-backend-api-authorization-strategies.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/create-glue-api-authorization-strategies.html - /docs/scos/dev/glue-api-guides/202404.0/create-glue-api-authorization-strategies.html - /docs/integrations/spryker-glue-api/authenticating-and-authorization/create-glue-api-authorization-strategies.html - - /docs/dg/dev/glue-api/latest/create-backend-api-authorization-strategies.html + - /docs/dg/dev/glue-api/202602.0/create-backend-api-authorization-strategies.html --- {% include integrations/create-glue-api-authorization-strategies-body.md %} diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-protected-backend-api-endpoints.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-protected-backend-api-endpoints.md index 422e9312777..68620b98e4e 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-protected-backend-api-endpoints.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/create-protected-backend-api-endpoints.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-create-protected-endpoints.html - /docs/scos/dev/glue-api-guides/202204.0/create-protected-glue-api-endpoints.html - /docs/scos/dev/glue-api-guides/202404.0/create-protected-glue-api-endpoints.html - - /docs/dg/dev/glue-api/latest/create-protected-glue-api-endpoints.html + - /docs/dg/dev/glue-api/202602.0/create-protected-glue-api-endpoints.html --- diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-api-key-authorization.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-api-key-authorization.md index e3178d41976..72e5af3b08f 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-api-key-authorization.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-api-key-authorization.md @@ -7,7 +7,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/use-api-key-authorization.html - /docs/scos/dev/glue-api-guides/202212.0/use-api-key-authorization.html - /docs/scos/dev/glue-api-guides/202404.0/use-api-key-authorization.html - - /docs/dg/dev/glue-api/latest/use-api-key-authorization.html + - /docs/dg/dev/glue-api/202602.0/use-api-key-authorization.html --- diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-authentication-servers-with-backend-api.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-authentication-servers-with-backend-api.md index 28843697c44..68b7007de09 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-authentication-servers-with-backend-api.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-authentication-servers-with-backend-api.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-use-an-authentication-server.html - /docs/scos/dev/glue-api-guides/202204.0/use-authentication-servers-with-glue-api.html - /docs/scos/dev/glue-api-guides/202404.0/use-authentication-servers-with-glue-api.html - - /docs/dg/dev/glue-api/latest/use-authentication-servers-with-glue-api.html + - /docs/dg/dev/glue-api/202602.0/use-authentication-servers-with-glue-api.html --- diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-backend-api-authorization-scopes.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-backend-api-authorization-scopes.md index d24e4d5973f..409fa58e57d 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-backend-api-authorization-scopes.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/backend-api/use-backend-api-authorization-scopes.md @@ -8,7 +8,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-use-glue-api-authorization-scopes.html - /docs/scos/dev/glue-api-guides/202204.0/use-glue-api-authorization-scopes.html - /docs/scos/dev/glue-api-guides/202404.0/use-glue-api-authorization-scopes.html - - /docs/dg/dev/glue-api/latest/use-glue-api-authorization-scopes.html + - /docs/dg/dev/glue-api/202602.0/use-glue-api-authorization-scopes.html --- diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/configure-cross-origin-resource-sharing-for-glue-api.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/configure-cross-origin-resource-sharing-for-glue-api.md index 2a1a3d8cf89..e108513805d 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/configure-cross-origin-resource-sharing-for-glue-api.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/configure-cross-origin-resource-sharing-for-glue-api.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/tutorials-and-howtos/howtos/glue-api-howtos/configure-cross-origin-resource-sharing-for-glue-api.html - /docs/scos/dev/glue-api-guides/202204.0/configure-cross-origin-resource-sharing-for-glue-api.html - /docs/scos/dev/glue-api-guides/202404.0/configure-cross-origin-resource-sharing-for-glue-api.html - - /docs/dg/dev/glue-api/latest/configure-cross-origin-resource-sharing-for-glue-api.html + - /docs/dg/dev/glue-api/202602.0/configure-cross-origin-resource-sharing-for-glue-api.html --- {% include integrations/configure-cross-origin-resource-sharing-for-glue-api-body.md %} diff --git a/docs/integrations/spryker-glue-api/authenticating-and-authorization/create-grant-type-parameters.md b/docs/integrations/spryker-glue-api/authenticating-and-authorization/create-grant-type-parameters.md index b7959f7372c..a2b6e01cdfc 100644 --- a/docs/integrations/spryker-glue-api/authenticating-and-authorization/create-grant-type-parameters.md +++ b/docs/integrations/spryker-glue-api/authenticating-and-authorization/create-grant-type-parameters.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-create-grant-type-parameters.html - /docs/scos/dev/glue-api-guides/202204.0/create-grant-type-parameters.html - /docs/scos/dev/glue-api-guides/202404.0/create-grant-type-parameters.html - - /docs/dg/dev/glue-api/latest/create-grant-type-parameters.html + - /docs/dg/dev/glue-api/202602.0/create-grant-type-parameters.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2b-demo-shop-reference.md b/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2b-demo-shop-reference.md index 16305a5125b..5b84a0f0d65 100644 --- a/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2b-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2b-demo-shop-reference.md @@ -7,7 +7,7 @@ template: glue-api-storefront-guide-template redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/backend-glue-infrastructure/backend-api-marketplace-b2b-demo-shop-reference.html - /docs/integrations/api-references/spryker-backend-api/backend-api-marketplace-b2b-demo-shop-reference.html - - /docs/dg/dev/glue-api/latest/backend-glue-infrastructure/backend-api-marketplace-b2b-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/backend-glue-infrastructure/backend-api-marketplace-b2b-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2b_marketplace_backend_api.json" --- diff --git a/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2c-demo-shop-reference.md b/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2c-demo-shop-reference.md index c53b206b1fa..0f8e4e38625 100644 --- a/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2c-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/backend-api/api-references/backend-api-marketplace-b2c-demo-shop-reference.md @@ -7,7 +7,7 @@ template: glue-api-storefront-guide-template redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/backend-glue-infrastructure/backend-api-marketplace-b2c-demo-shop-reference.html - /docs/integrations/api-references/spryker-backend-api/backend-api-marketplace-b2c-demo-shop-reference.html - - /docs/dg/dev/glue-api/latest/backend-glue-infrastructure/backend-api-marketplace-b2c-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/backend-glue-infrastructure/backend-api-marketplace-b2c-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2c_marketplace_backend_api.json" --- diff --git a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.md b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.md index 0afd7dde093..4a9f87d201c 100644 --- a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.md +++ b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/configure-data-exchange-api.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202307.0/data-exchange-api/how-to-guides/how-to-configure-data-exchange-api.html - /docs/scos/dev/glue-api-guides/202311.0/data-exchange-api/how-to-guides/how-to-configure-data-exchange-api.html - /docs/pbc/all/data-exchange/202311.0/tutorials-and-howtoes/how-to-configure-data-exchange-api.html - - /docs/pbc/all/data-exchange/latest/configure-data-exchange-api.html + - /docs/pbc/all/data-exchange/202602.0/configure-data-exchange-api.html - /docs/integrations/custom-building-integrations/data-exchange/configure-data-exchange-api.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/create-post-plugins-for-data-exchange-api.md b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/create-post-plugins-for-data-exchange-api.md index ea3caccecfd..6e4c0855e2b 100644 --- a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/create-post-plugins-for-data-exchange-api.md +++ b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/create-post-plugins-for-data-exchange-api.md @@ -5,7 +5,7 @@ description: This document describes how to create custom post create/update plu last_updated: July 9, 2025 template: howto-guide-template redirect_from: - - /docs/pbc/all/data-exchange/latest/create-post-plugins-for-data-exchange-api.html + - /docs/pbc/all/data-exchange/202602.0/create-post-plugins-for-data-exchange-api.html - /docs/integrations/custom-building-integrations/data-exchange/create-post-plugins-for-data-exchange-api.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.md b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.md index 2c6c2b729e2..d9999a145ff 100644 --- a/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.md +++ b/docs/integrations/spryker-glue-api/backend-api/data-exchange-api/sending-requests-to-data-exchange-api.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202307.0/data-exchange-api/how-to-guides/how-to-send-request-in-data-exchange-api.html - /docs/scos/dev/glue-api-guides/202311.0/data-exchange-api/how-to-guides/how-to-send-request-in-data-exchange-api.html - /docs/pbc/all/data-exchange/202311.0/tutorials-and-howtoes/how-to-send-request-in-data-exchange-api.html - - /docs/pbc/all/data-exchange/latest/sending-requests-with-data-exchange-api.html + - /docs/pbc/all/data-exchange/202602.0/sending-requests-with-data-exchange-api.html - /docs/integrations/custom-building-integrations/data-exchange/sending-requests-with-data-exchange-api.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-and-change-backend-api-conventions.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-and-change-backend-api-conventions.md index e0859071675..b46b661b681 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-and-change-backend-api-conventions.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-and-change-backend-api-conventions.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/create-and-change-glue-api-conventions.html - /docs/scos/dev/glue-api-guides/202204.0/create-and-change-glue-api-conventions.html - /docs/scos/dev/glue-api-guides/202404.0/create-and-change-glue-api-conventions.html - - /docs/dg/dev/glue-api/latest/create-and-change-glue-api-conventions.html + - /docs/dg/dev/glue-api/202602.0/create-and-change-glue-api-conventions.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-api-applications.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-api-applications.md index 26ab7df9969..b638c17ddfd 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-api-applications.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-api-applications.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/decoupled-glue-infrastructure/create-glue-api-applications.html - /docs/scos/dev/glue-api-guides/202404.0/create-glue-api-applications.html - /docs/integrations/spryker-glue-api/backend-api/developing-apis/create-api-applications.md - - /docs/dg/dev/glue-api/latest/create-glue-api-applications.html + - /docs/dg/dev/glue-api/202602.0/create-glue-api-applications.html --- Spryker's Backend API is a powerful tool for building custom front end applications, integrating with third-party services, and creating unique customer experiences. This guide provides a high level overview of the process for creating a new API application. diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-api-resources-with-parent-child-relationships.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-api-resources-with-parent-child-relationships.md index e553540830c..71a16e0a2c4 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-api-resources-with-parent-child-relationships.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-api-resources-with-parent-child-relationships.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-create-resources-with-parent-child-relationships.html - /docs/scos/dev/glue-api-guides/202204.0/create-glue-api-resources-with-parent-child-relationships.html - /docs/scos/dev/glue-api-guides/202404.0/create-glue-api-resources-with-parent-child-relationships.html - - /docs/dg/dev/glue-api/latest/create-backend-api-resources-with-parent-child-relationships.html + - /docs/dg/dev/glue-api/202602.0/create-backend-api-resources-with-parent-child-relationships.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.md index 1a29b440d37..baac786516c 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/glue-backend-api/how-to-guides/how-to-create-a-resource.html - /docs/scos/dev/glue-api-guides/202204.0/routing/create-backend-resources.html - /docs/scos/dev/glue-api-guides/202404.0/routing/create-backend-resources.html - - /docs/dg/dev/glue-api/latest/routing/create-backend-resources.html + - /docs/dg/dev/glue-api/202602.0/routing/create-backend-resources.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-json-api-relationships.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-json-api-relationships.md index 34e27c5cbfe..9cd5d821c94 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-json-api-relationships.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-json-api-relationships.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-create-a-json-api-relationship.html - /docs/scos/dev/glue-api-guides/202204.0/create-json-api-relationships.html - /docs/scos/dev/glue-api-guides/202404.0/create-json-api-relationships.html - - /docs/dg/dev/glue-api/latest/create-json-api-relationships.html + - /docs/dg/dev/glue-api/202602.0/create-json-api-relationships.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-routes.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-routes.md index 0fc44449c68..dcfa38e40ae 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-routes.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-routes.md @@ -8,7 +8,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/glue-backend-api/how-to-guides/how-to-create-a-route.html - /docs/scos/dev/glue-api-guides/202204.0/routing/create-routes.html - /docs/scos/dev/glue-api-guides/202404.0/routing/create-routes.html - - /docs/dg/dev/glue-api/latest/routing/create-routes.html + - /docs/dg/dev/glue-api/202602.0/routing/create-routes.html --- diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/document-backend-api-endpoints.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/document-backend-api-endpoints.md index a05a6d0396f..aaef3f4240b 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/document-backend-api-endpoints.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/document-backend-api-endpoints.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-document-glue-api-endpoints.html - /docs/scos/dev/glue-api-guides/202204.0/document-glue-api-endpoints.html - /docs/scos/dev/glue-api-guides/202404.0/document-glue-api-endpoints.html - - /docs/dg/dev/glue-api/latest/document-glue-api-endpoints.html + - /docs/dg/dev/glue-api/202602.0/document-glue-api-endpoints.html --- This document shows Document Glue API endpoints. diff --git a/docs/integrations/spryker-glue-api/backend-api/developing-apis/use-default-backend-parameters.md b/docs/integrations/spryker-glue-api/backend-api/developing-apis/use-default-backend-parameters.md index c4b5b908e20..d93b05fe831 100644 --- a/docs/integrations/spryker-glue-api/backend-api/developing-apis/use-default-backend-parameters.md +++ b/docs/integrations/spryker-glue-api/backend-api/developing-apis/use-default-backend-parameters.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/decoupled-glue-infrastructure/how-to-guides/how-to-use-ootb-glue-parameters.html - /docs/scos/dev/glue-api-guides/202204.0/use-default-glue-parameters.html - /docs/scos/dev/glue-api-guides/202404.0/use-default-glue-parameters.html - - /docs/dg/dev/glue-api/latest/use-default-storefront-parameters.html + - /docs/dg/dev/glue-api/202602.0/use-default-storefront-parameters.html --- {% include integrations/use-default-glue-parameters-body.md %} diff --git a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-api-key-authorization.md b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-api-key-authorization.md index cd3af8d16c9..847e496e2d1 100644 --- a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-api-key-authorization.md +++ b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-api-key-authorization.md @@ -1,7 +1,7 @@ --- title: Integrate the API Key authorization description: Learn about Integration of the API Key authorization mechanism into a Spryker based project. -last_updated: October 10, 2023 +last_updated: Feb 19, 2026 template: feature-integration-guide-template redirect_from: - /docs/scos/dev/migration-concepts/migrate-to-decoupled-glue-infrastructure/decoupled-glue-infrastructure-integrate-api-key-authorization.html @@ -20,8 +20,8 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | |-----------------------------| ----------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | -| Backend API Application | {{page.version}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | ### 1) Install the required modules diff --git a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.md b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.md index 99feee741ee..7daba7f9a6e 100644 --- a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.md +++ b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.md @@ -1,7 +1,7 @@ --- title: Integrate Backend API description: Integrate the Backend API application into a Spryker project. -last_updated: September 30, 2022 +last_updated: Feb 19, 2026 template: feature-integration-guide-template redirect_from: - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/decoupled-glue-infrastructure/glue-api-storefront-and-backend-api-applications-integration.html @@ -23,7 +23,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | --- | --- | --- | -| Backend API Application | {{page.version}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | ### 1) Install the required modules diff --git a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.md b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.md index fea683ef25c..44dc6e57c90 100644 --- a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.md +++ b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.md @@ -1,7 +1,7 @@ --- title: Integrate the authentication description: Create an authentication token for the Backend API application in a Spryker project. -last_updated: Jan 10, 2024 +last_updated: Feb 19, 2026 template: feature-integration-guide-template redirect_from: - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/decoupled-glue-infrastructure/glue-api-authentication-integration.html @@ -18,7 +18,7 @@ Install the required features: | NAME | VERSION | INSTALLATION GUIDE | | -------------- | ----------------- | ----------------- | -| Backend API Application | {{page.version}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | ## 1) Install the required modules diff --git a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authorization-scopes.md b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authorization-scopes.md index 34c6f3c825d..df998ca90fc 100644 --- a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authorization-scopes.md +++ b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authorization-scopes.md @@ -1,7 +1,7 @@ --- title: Integrate the authorization scopes description: This document describes how to use scopes in Authorization for Backend API application into a Spryker project. -last_updated: September 30, 2022 +last_updated: Feb 19, 2026 template: feature-integration-guide-template redirect_from: - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-backend-api/authorization-scopes-integration.html @@ -22,7 +22,7 @@ To start feature integration, overview and install the necessary feature: | NAME | VERSION | INSTALLATION GUIDE | | -------------- | ----------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Backend API Authentication | {{page.version}} | [Backend API Authentication itegration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.html) | +| Backend API Authentication | {{page.release_tag}} | [Backend API Authentication itegration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-authentication.html) | ### 1) Set up transfer objects diff --git a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-documentation-generator.md b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-documentation-generator.md index ab5b956b95c..c8e8cf82bba 100644 --- a/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-documentation-generator.md +++ b/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-the-documentation-generator.md @@ -2,7 +2,7 @@ title: Integrate the documentation generator description: Learn how to integrate the Backend API documentation generation into your Spryker based project template: feature-integration-guide-template -last_updated: Oct 30, 2023 +last_updated: Feb 19, 2026 redirect_from: - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/decoupled-glue-infrastructure/glue-api-documentation-generation.html - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/decoupled-glue-infrastructure/glue-api-documentation-generation.html @@ -22,7 +22,7 @@ To start the integration of the feature, overview and install the necessary feat | NAME | VERSION | INSTALLATION GUIDE | |---------------------------------------------| ----------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Backend API Application | {{page.version}} | [Backend API Application feature integration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | +| Backend API Application | {{page.release_tag}} | [Backend API Application feature integration](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | ### 1) Install the required modules diff --git a/docs/integrations/spryker-glue-api/getting-started-with-apis/api-strategy.md b/docs/integrations/spryker-glue-api/getting-started-with-apis/api-strategy.md new file mode 100644 index 00000000000..45662e81c26 --- /dev/null +++ b/docs/integrations/spryker-glue-api/getting-started-with-apis/api-strategy.md @@ -0,0 +1,128 @@ +--- +title: Spryker API Strategy +description: API documentation for dynamic-entity-availability-abstracts. +last_updated: January 9, 2026 +template: default +layout: custom_new +--- + +## Overview + +Spryker is introducing **API Platform–based integration** as the strategic integration layer for new features while maintaining full support for existing Glue APIs. This additive approach protects existing implementations, avoids forced migrations, and enables a modern integration foundation for future development. + +{% info_block warningBox "Important" %} + +- Existing Glue API implementations remain supported with no End-of-Life planned +- Migration is optional—customers decide if and when to adopt API Platform integration +- All existing endpoints and integrations continue to work unchanged + +{% endinfo_block %} + +--- + +## API Platform Integration + +[API Platform–based integration](/docs/dg/dev/architecture/api-platform.html) provides: + +- contract-first APIs +- standardized integration patterns +- enhanced support for large data exchange +- improved developer experience +- parallel use with Glue APIs for Storefront and Backend integrations +- additional media types: application/xml, application/csv, application/json+ld + +### Availability Timeline + +- **Early access:** until end of Q1 2026 + - limited support scope + - native Spryker features (authentication, codebuckets, full JSON:API support) not fully integrated +- **General Availability:** Next Product Release + +--- + +## Glue APIs: Continued Support + +Glue Storefront API and Glue Backend API remain supported, maintained, and secured with: + +- All existing endpoints preserved +- Continued bugfixes and security updates +- Compatibility maintenance +- No removal of functionality + +### Feature Freeze (Q1 2026 onward) + +From Q1 2026, Glue APIs enter feature freeze: +- New Spryker features use API Platform integration exclusively +- No new Glue endpoints for new features +- Existing endpoints receive bugfixes, security updates, and compatibility fixes + +{% info_block infoBox %} + +Feature freeze means no new functionality—not deprecation or End-of-Life. + +{% endinfo_block %} + +--- + +## Comparison + +| Topic | Glue APIs | API Platform Integration | +| -------------------- | ------------------ | ------------------------ | +| Existing features | Supported | Supported | +| New Spryker features | ❌ No new endpoints | ✅ Default integration | +| Forced migration | ❌ No | ❌ No | +| End-of-Life planned | ❌ No | ❌ No | +| Bugfixes & security | ✅ Yes | ✅ Yes | +| Strategic investment | Limited | Primary focus | + +--- + +## Choosing the Right Integration + +### Use Glue APIs for + +- extending existing projects +- maintaining current integrations +- storefront interactions + +### Use API Platform Integration for + +- new integrations (recommended starting 2026) +- backend system-to-system communication (ERP, PIM, OMS) +- large dataset exchanges +- new Spryker features +- long-term scalability requirements +- projects requiring specific formats, versioning, or API Platform features + +### Migration Path + +Migration from Glue APIs is optional. Consider migrating when: +- building new integrations +- exchanging large datasets +- integrating external systems (ERP, PIM, OMS) +- planning long-term platform evolution +- project requirements align with API Platform features (supported formats, versioning, etc.) + +Spryker provides: +- documentation of behavioral differences +- incremental migration support (endpoint-by-endpoint) +- conversion tools and reference implementations + +--- + +## FAQ + +**Do I have to migrate my existing Glue APIs?**
      +No. Migration is optional. Existing Glue APIs remain supported. + +**Will Glue APIs be removed?**
      +No. There is no End-of-Life planned. + +**Can I still build custom features using Glue in my project?**
      +Yes. You can continue using Glue APIs in your projects. However, new Spryker core features after Q1 2026 will not introduce new Glue endpoints. + +**Is API Platform integration mandatory?**
      +No. It is recommended for new integrations, but existing Glue usage remains valid. + +**When should I start using API Platform integration?**
      +Early adoption is available during Q1 2026. For new integrations, use API Platform integration from General Availability (Next Product Release) onward. \ No newline at end of file diff --git a/docs/integrations/spryker-glue-api/getting-started-with-apis/comparison-of-storefront-and-backend-apis.md b/docs/integrations/spryker-glue-api/getting-started-with-apis/comparison-of-storefront-and-backend-apis.md index 4b9d0cb9a12..62baadef058 100644 --- a/docs/integrations/spryker-glue-api/getting-started-with-apis/comparison-of-storefront-and-backend-apis.md +++ b/docs/integrations/spryker-glue-api/getting-started-with-apis/comparison-of-storefront-and-backend-apis.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/decoupled-glue-infrastructure/backend-and-storefront-api-module-differences.html - /docs/scos/dev/glue-api-guides/202204.0/decoupled-glue-infrastructure/backend-and-storefront-api-module-differences.html - /docs/scos/dev/glue-api-guides/202404.0/backend-and-storefront-api-module-differences.html - - /docs/dg/dev/glue-api/latest/backend-and-storefront-api-module-differences.html + - /docs/dg/dev/glue-api/202602.0/backend-and-storefront-api-module-differences.html --- diff --git a/docs/integrations/spryker-glue-api/getting-started-with-apis/getting-started-with-apis.md b/docs/integrations/spryker-glue-api/getting-started-with-apis/getting-started-with-apis.md index a010757c2a6..96da7585979 100644 --- a/docs/integrations/spryker-glue-api/getting-started-with-apis/getting-started-with-apis.md +++ b/docs/integrations/spryker-glue-api/getting-started-with-apis/getting-started-with-apis.md @@ -19,11 +19,18 @@ Spryker's API is a dedicated application layer within the Spryker Cloud Commerce
      Storefront API is designed for consumers and customer-facing integrations. It's the API layer that powers web shops, mobile apps, marketplaces, and other client-facing systems. It is based on REST API and follows JSON:API conventions. Learn about customer-facing API endpoints for building headless commerce experiences, mobile apps, and custom storefronts.
      Learn more +
      Backend API
      Backend API is designed for admins and system-to-system communication. Tailored for backend processes, administrative tools, or integrations with enterprise systems, such as ERP or CRM. Technically it is multi-format, but REST API is shipped out-of-the-box. A key advantage is its direct access to Spryker's business logic layer (Facades). Discover administrative API endpoints for system integration, ERP connections, and backend operations with direct facade access.
      Learn more
      +
      +
      +
      Spryker API Strategy for 2026
      +
      Spryker is evolving its API strategy by introducing **API Platform–based integration** as a **new, strategic integration layer**, while continuing to **fully support existing Glue APIs**.
      + Learn more +
      diff --git a/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.md b/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.md index 213f6f3eef3..918ee2cff1f 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.md +++ b/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.md @@ -10,8 +10,8 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202200.0/reference-information-glueapplication-errors.html - /docs/scos/dev/glue-api-guides/202404.0/reference-information-glueapplication-errors.html - /docs/scos/dev/glue-api-guides/202204.0/reference-information-glueapplication-errors.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/reference-information-glueapplication-errors.html - - /docs/dg/dev/glue-api/latest/rest-api/reference-information-glueapplication-errors.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/reference-information-glueapplication-errors.html + - /docs/dg/dev/glue-api/202602.0/rest-api/reference-information-glueapplication-errors.html --- diff --git a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2b-demo-shop-reference.md b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2b-demo-shop-reference.md index 3c55cc17839..8a91d160dd4 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2b-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2b-demo-shop-reference.md @@ -10,8 +10,8 @@ redirect_from: - /docs/integrations/api-references/spryker-rest-api/storefront-api-b2b-demo-shop-reference.html - /docs/scos/dev/glue-api-guides/202204.0/rest-api-b2b-reference.html - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/rest-api-b2b-demo-shop-reference.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/rest-api-b2b-demo-shop-reference - - /docs/dg/dev/glue-api/latest/rest-api/rest-api-b2b-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/rest-api-b2b-demo-shop-reference + - /docs/dg/dev/glue-api/202602.0/rest-api/rest-api-b2b-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2b_storefront_api.json" --- {% info_block infoBox %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2c-demo-shop-reference.md b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2c-demo-shop-reference.md index 2ad94c3cfc4..4631cb0ec47 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2c-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-b2c-demo-shop-reference.md @@ -16,8 +16,8 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202212.0/rest-api-b2c-reference.html - /docs/scos/dev/glue-api-guides/202204.0/rest-api-b2c-reference.html - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/rest-api-b2c-demo-shop-reference.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/rest-api-b2c-demo-shop-reference - - /docs/dg/dev/glue-api/latest/rest-api/rest-api-b2c-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/rest-api-b2c-demo-shop-reference + - /docs/dg/dev/glue-api/202602.0/rest-api/rest-api-b2c-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2c_storefront_api.json" --- {% info_block infoBox %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2b-demo-shop-reference.md b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2b-demo-shop-reference.md index 9706d750c7e..dd16c6ad262 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2b-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2b-demo-shop-reference.md @@ -7,8 +7,8 @@ redirect_from: - /docs/integrations/api-references/spryker-storefront-api/storefront-api-marketplace-b2b-demo-shop-reference.html - /docs/integrations/api-references/spryker-rest-api/storefront-api-marketplace-b2b-demo-shop-reference.html - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/rest-api-marketplace-b2b-demo-shop-reference.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/rest-api-marketplace-b2b-demo-shop-reference - - /docs/dg/dev/glue-api/latest/rest-api/rest-api-marketplace-b2b-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/rest-api-marketplace-b2b-demo-shop-reference + - /docs/dg/dev/glue-api/202602.0/rest-api/rest-api-marketplace-b2b-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2b_marketplace_storefront_api.json" --- {% info_block infoBox %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2c-demo-shop-reference.md b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2c-demo-shop-reference.md index 2828451a429..d532b03148f 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2c-demo-shop-reference.md +++ b/docs/integrations/spryker-glue-api/storefront-api/api-references/storefront-api-marketplace-b2c-demo-shop-reference.md @@ -7,8 +7,8 @@ redirect_from: - /docs/integrations/api-references/spryker-storefront-api/storefront-api-marketplace-b2c-demo-shop-reference.html - /docs/integrations/api-references/spryker-rest-api/storefront-api-marketplace-b2c-demo-shop-reference.html - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/rest-api-marketplace-b2c-demo-shop-reference.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/rest-api-marketplace-b2c-demo-shop-reference - - /docs/dg/dev/glue-api/latest/rest-api/rest-api-marketplace-b2c-demo-shop-reference.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/rest-api-marketplace-b2c-demo-shop-reference + - /docs/dg/dev/glue-api/202602.0/rest-api/rest-api-marketplace-b2c-demo-shop-reference.html swagger_url: "https://spryker.s3.eu-central-1.amazonaws.com/docs/api-specs/b2c_marketplace_storefront_api.json" --- {% info_block infoBox %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/b2c-api-react-example.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/b2c-api-react-example.md index 384303240eb..801a27995c2 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/b2c-api-react-example.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/b2c-api-react-example.md @@ -8,7 +8,7 @@ originalArticleId: 094f9906-b82e-49aa-9af5-27199c5d2c01 redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/glue-api-tutorials/b2c-api-react-example/b2c-api-react-example.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/b2c-api-react-example/b2c-api-react-example.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/b2c-api-react-example/b2c-api-react-example.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/b2c-api-react-example/b2c-api-react-example.html --- As a part of documentation related to Spryker Storefront API, we have also developed a B2C API React example. It is a [React](https://reactjs.org/) single-page application based on a [webpack](https://webpack.js.org/) dev server, Typescript, [Redux](https://redux.js.org/), and Material UI. @@ -33,21 +33,21 @@ The Demo Shop was built using and demonstrates the use of the endpoints and reso | API | REFERENCE DOCUMENTS | | --- | --- | -| Search API | [Catalog search](/docs/pbc/all/search/latest/base-shop/manage-using-glue-api/glue-api-search-the-product-catalog.html)
      [Getting suggestions for auto-completion and search](/docs/pbc/all/search/latest/base-shop/manage-using-glue-api/glue-api-retrieve-autocomplete-and-search-suggestions.html) | -| Category API | [Retrieving category trees](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html) | -| Product API | [Retrieving abstract products](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html)
      [Storefront API: Retrieving concrete products](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html) | -| Product Availability API | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/latest/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html)
      [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/latest/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | -| Product Price API | [Retrieving abstract product prices](/docs/pbc/all/price-management/latest/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html)
      [Retrieving concrete product prices](/docs/pbc/all/price-management/latest/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html) | -| Product Tax Sets API | [Retrieving product tax sets](/docs/pbc/all/tax-management/latest/base-shop/manage-using-glue-api/retrieve-tax-sets.html) | -| Product Image Sets API | [Retrieving image sets of abstract products](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html)
      [Retrieving image sets of concrete products](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html) | -| Product Labels API | [Retrieving product labels](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) | +| Search API | [Catalog search](/docs/pbc/all/search/202602.0/base-shop/manage-using-glue-api/glue-api-search-the-product-catalog.html)
      [Getting suggestions for auto-completion and search](/docs/pbc/all/search/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-autocomplete-and-search-suggestions.html) | +| Category API | [Retrieving category trees](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html) | +| Product API | [Retrieving abstract products](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html)
      [Storefront API: Retrieving concrete products](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html) | +| Product Availability API | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html)
      [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | +| Product Price API | [Retrieving abstract product prices](/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html)
      [Retrieving concrete product prices](/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html) | +| Product Tax Sets API | [Retrieving product tax sets](/docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets.html) | +| Product Image Sets API | [Retrieving image sets of abstract products](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html)
      [Retrieving image sets of concrete products](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html) | +| Product Labels API | [Retrieving product labels](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) | | Login API | [Authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html) | -| Customer API | [Managing customers](/docs/pbc/all/customer-relationship-management/latest/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html) | -| Cart API | [Guest carts](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html)
      [Carts of registered users](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | -| Checkout API | [Checking out purchases and getting checkout data](/docs/pbc/all/cart-and-checkout/latest/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) | -| Order History API | [Retrieving customer's order history](/docs/pbc/all/order-management-system/latest/base-shop/glue-api-retrieve-orders.html) | -| Wishlist API | [Managing wishlists](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) | -| Store API | [Retrieving store configuration](/docs/pbc/all/miscellaneous/latest/manage-using-glue-api/glue-api-retrieve-store-configuration.html) | +| Customer API | [Managing customers](/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html) | +| Cart API | [Guest carts](/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html)
      [Carts of registered users](/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | +| Checkout API | [Checking out purchases and getting checkout data](/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) | +| Order History API | [Retrieving customer's order history](/docs/pbc/all/order-management-system/202602.0/base-shop/glue-api-retrieve-orders.html) | +| Wishlist API | [Managing wishlists](/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) | +| Store API | [Retrieving store configuration](/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-retrieve-store-configuration.html) | ## Running the example application diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/install-b2c-api-react-example.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/install-b2c-api-react-example.md index 01b3edb00d9..5743589d630 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/install-b2c-api-react-example.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/b2c-api-react-example/install-b2c-api-react-example.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/glue-api-tutorials/b2c-api-react-example/install-b2c-api-react-example.html - /docs/scos/dev/tutorials-and-howtos/advanced-tutorials/glue-api/b2c-api-react-example/b2c-api-react-example-installation.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/b2c-api-react-example/install-b2c-api-react-example.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/b2c-api-react-example/install-b2c-api-react-example.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/b2c-api-react-example/install-b2c-api-react-example.html --- The B2C API React example can be installed inside [Spryker Development Virtual Machine](/docs/scos/dev/sdk/development-virtual-machine-docker-containers-and-console.html) (VM) or on a separate dedicated server. To perform both installation scenarios, take the following steps. @@ -30,7 +30,7 @@ The example application is provided only for display purposes and must under no To install the app on a dedicated web server, follow these steps: -1. Make sure that you have Spryker Storefront API [installed and working](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). +1. Make sure that you have Spryker Storefront API [installed and working](/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). 2. Make sure that the following prerequisites are installed on the [Node 8.9.3](https://nodejs.org/en/) server or newer. diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/configure-the-included-section.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/configure-the-included-section.md index 23935d6e14e..5c3be3f00a3 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/configure-the-included-section.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/configure-the-included-section.md @@ -8,7 +8,7 @@ redirect_from: - /docs/scos/dev/tutorials-and-howtos/howtos/glue-api-howtos/configuring-visibility-of-the-included-section.html - /docs/scos/dev/glue-api-guides/202204.0/configure-the-included-section.html - /docs/scos/dev/glue-api-guides/202404.0/configure-the-included-section.html - - /docs/dg/dev/glue-api/latest/configure-the-included-section.html + - /docs/dg/dev/glue-api/202602.0/configure-the-included-section.html --- {% include integrations/configure-the-included-section-body.md %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/document-storefront-api-resources.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/document-storefront-api-resources.md index f31c9979bc9..0a7e1df7a9e 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/document-storefront-api-resources.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/document-storefront-api-resources.md @@ -7,10 +7,10 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/glue-api-tutorials/document-glue-api-resources.html - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/glue-api/documenting-glue-api-resources.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/document-glue-api-resources.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/document-glue-api-resources.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/document-glue-api-resources.html related: - title: Glue API installation and configuration - link: docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html + link: docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html --- To help developers understand and use the public API of your project, you need to cover it with complete and up-to-date documentation. Spryker Glue lets you generate it automatically with the help of the `DocumentationGeneratorRestApi` module, which extracts information on your Storefront API endpoints directly from their implementation. It also can provide additional information on endpoints, such as their purpose, usage details, and request parameters—for example, in headers, paths, queries, or cookies. @@ -29,7 +29,7 @@ Storefront API endpoints shipped by Spryker are covered by documentation by defa ## Prerequisites -Install and enable [Spryker Storefront API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). Also, see the following documents: +Install and enable [Spryker Storefront API](/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). Also, see the following documents: - [Open API Specification](https://github.com/OAI/OpenAPI-Specification) - [Swagger Tools Reference](https://swagger.io/) diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/extend-a-storefront-api-resource.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/extend-a-storefront-api-resource.md index b5b9942dc4c..fd02d5b1c13 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/extend-a-storefront-api-resource.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/extend-a-storefront-api-resource.md @@ -9,10 +9,10 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/glue-api-tutorials/extend-a-rest-api-resource.html - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/glue-api/extending-a-rest-api-resource.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/extend-a-rest-api-resource.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/extend-a-rest-api-resource.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/extend-a-rest-api-resource.html related: - title: Glue API installation and configuration - link: docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html + link: docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html --- Spryker Storefront API comes with a set of predefined APIs out of the box. You can extend and customize them to your own project needs by extending the Storefront API modules that provide the relevant functionality on your project level. @@ -20,8 +20,8 @@ Spryker Storefront API comes with a set of predefined APIs out of the box. You c ## Prerequisites - [Install Spryker Development Machine](/docs/scos/dev/sdk/development-virtual-machine-docker-containers-and-console.html). -- [Enable Storefront API](/docs/pbc/all/miscellaneous/latest/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). -- [Integrate Products API](/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html). +- [Enable Storefront API](/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html). +- [Integrate Products API](/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html). {% info_block infoBox %} @@ -29,7 +29,7 @@ If you have a development virtual machine with the [B2C Demo Shop](/docs/about/a Assume that you modify the product storage data to match your product requirements—for example, you add the `manufacturerCountry` field to the product data not as an attribute but as another field in the database. -For more details, see [Database schema for product attributes](/docs/pbc/all/product-information-management/latest/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html#database-schema-for-product-attributes) and [Extend the database schema](/docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/extend-the-database-schema.html). +For more details, see [Database schema for product attributes](/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html#database-schema-for-product-attributes) and [Extend the database schema](/docs/dg/dev/backend-development/data-manipulation/data-ingestion/structural-preparations/extend-the-database-schema.html). {% endinfo_block %} @@ -153,4 +153,4 @@ Like the mapper, `ProductsRestApiFactory` extends the core factory and only over ## 4. Verify implementation -You can query the Products API to check whether the attribute has been added to the API response. For example, you can query information on one of the products with the `manufacturerCountry` field populated. For details, see [Retrieving abstract products](/docs/pbc/all/product-information-management/latest/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.html) and [Storefront API: Retrieving concrete products](/docs/pbc/all/product-information-management/latest/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html). +You can query the Products API to check whether the attribute has been added to the API response. For example, you can query information on one of the products with the `manufacturerCountry` field populated. For details, see [Retrieving abstract products](/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.html) and [Storefront API: Retrieving concrete products](/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html). diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/handling-concurrent-rest-requests-and-caching-with-entity-tags.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/handling-concurrent-rest-requests-and-caching-with-entity-tags.md index 6aa2a130764..4121a51d395 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/handling-concurrent-rest-requests-and-caching-with-entity-tags.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/handling-concurrent-rest-requests-and-caching-with-entity-tags.md @@ -9,8 +9,8 @@ originalArticleId: cad91b14-3390-44bb-8e8e-4c6b72926dcc redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/handling-concurrent-rest-requests-and-caching-with-entity-tags.html - /docs/scos/dev/glue-api-guides/202204.0/handling-concurrent-rest-requests-and-caching-with-entity-tags.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/handling-concurrent-rest-requests-and-caching-with-entity-tags.html - - /docs/dg/dev/glue-api/latest/rest-api/handling-concurrent-rest-requests-and-caching-with-entity-tags.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/handling-concurrent-rest-requests-and-caching-with-entity-tags.html + - /docs/dg/dev/glue-api/202602.0/rest-api/handling-concurrent-rest-requests-and-caching-with-entity-tags.html related: - title: Shared Cart feature overview link: docs/pbc/all/cart-and-checkout/page.version/base-shop/feature-overviews/shared-carts-feature-overview.html diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-a-rest-api-resource.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-a-rest-api-resource.md index cee15c4c09e..0df37e64dd9 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-a-rest-api-resource.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-a-rest-api-resource.md @@ -10,7 +10,7 @@ redirect_from: - /docs/scos/dev/tutorials/201811.0/introduction/glue-api/implementing-a-rest-api-resource.html - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/glue-api/implementing-a-rest-api-resource.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/implement-a-rest-api-resource.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/implement-a-rest-api-resource.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/implement-a-rest-api-resource.html --- {% include integrations/implement-a-rest-api-resource-body.md %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-versioning-for-rest-api-resources.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-versioning-for-rest-api-resources.md index f9759cbae4f..3728edcfb4f 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-versioning-for-rest-api-resources.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/implement-versioning-for-rest-api-resources.md @@ -8,7 +8,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/glue-api-tutorials/implement-versioning-for-rest-api-resources.html - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/glue-api/versioning-rest-api-resources.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/implement-versioning-for-rest-api-resources.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/implement-versioning-for-rest-api-resources.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/implement-versioning-for-rest-api-resources.html --- {% include integrations/implement-versioning-for-rest-api-resources-body.md %} diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/marketplace-glue-api-resolve-search-engine-friendly-urls.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/marketplace-glue-api-resolve-search-engine-friendly-urls.md index d1f1aa848a5..0d79665b687 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/marketplace-glue-api-resolve-search-engine-friendly-urls.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/marketplace-glue-api-resolve-search-engine-friendly-urls.md @@ -5,8 +5,8 @@ description: Learn how to resolve search engine friendly URLs via Glue API in th template: glue-api-storefront-guide-template redirect_from: - /docs/scos/dev/glue-api-guides/202404.0/old-glue-infrastructure/marketplace-glue-api-resolve-search-engine-friendly-urls.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/marketplace-glue-api-resolve-search-engine-friendly-urls.html - - /docs/dg/dev/glue-api/latest/rest-api/marketplace-glue-api-resolve-search-engine-friendly-urls.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/marketplace-glue-api-resolve-search-engine-friendly-urls.html + - /docs/dg/dev/glue-api/202602.0/rest-api/marketplace-glue-api-resolve-search-engine-friendly-urls.html last_updated: July 7, 2025 --- diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-api-security-and-authentication.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-api-security-and-authentication.md index 5c1a15fca29..493baa442df 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-api-security-and-authentication.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-api-security-and-authentication.md @@ -11,8 +11,8 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202204.0/security-and-authentication.html - /docs/scos/dev/glue-api-guides/202204.0/glue-backend-api/security-and-authentication.html - /docs/pbc/all/identity-access-management/202404.0/glue-api-security-and-authentication.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/glue-api-security-and-authentication.html - - /docs/dg/dev/glue-api/latest/rest-api/glue-api-authentication-and-authorization.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/glue-api-security-and-authentication.html + - /docs/dg/dev/glue-api/202602.0/rest-api/glue-api-authentication-and-authorization.html --- diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.md index 28188cec0a0..1b40bedc4c9 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/storefront-infrastructure.md @@ -10,8 +10,8 @@ redirect_from: - /docs/scos/dev/concepts/glue-api/glue-infrastructure.html - /docs/scos/dev/glue-api-guides/202200.0/glue-infrastructure.html - /docs/scos/dev/glue-api-guides/202204.0/glue-infrastructure.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/glue-infrastructure.html - - /docs/dg/dev/glue-api/latest/rest-api/glue-infrastructure.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/glue-infrastructure.html + - /docs/dg/dev/glue-api/202602.0/rest-api/glue-infrastructure.html --- @@ -211,7 +211,7 @@ The interface provides only 1 method: `getParentResourceType`. The method must r ### Resource relationships -Often, to query certain data, one needs to use endpoints from different APIs to get the necessary information. For example, to present products in a customer's wishlist, one would need to use endpoints of the [Wishlists API](/docs/pbc/all/shopping-list-and-wishlist/latest/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) to get a list of items in the wishlist, and then query endpoints of the [abstract product API](/docs/pbc/all/product-information-management/latest/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html) and [concrete product API] in order to get descriptions, images and other information on each product. This can result in a big number of requests until the necessary data is fetched. To reduce the number of calls and provide all the necessary information in one pass, you can use resource relationships. +Often, to query certain data, one needs to use endpoints from different APIs to get the necessary information. For example, to present products in a customer's wishlist, one would need to use endpoints of the [Wishlists API](/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) to get a list of items in the wishlist, and then query endpoints of the [abstract product API](/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html) and [concrete product API] in order to get descriptions, images and other information on each product. This can result in a big number of requests until the necessary data is fetched. To reduce the number of calls and provide all the necessary information in one pass, you can use resource relationships. Let us consider the following REST Response example. It contains information on a wishlist item without any resource relationships. diff --git a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/validate-rest-request-format.md b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/validate-rest-request-format.md index 4ce9ad61fbd..042648c40d6 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/developing-apis/validate-rest-request-format.md +++ b/docs/integrations/spryker-glue-api/storefront-api/developing-apis/validate-rest-request-format.md @@ -11,7 +11,7 @@ redirect_from: - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/glue-api/validating-rest-request-format.html - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-rest-schema-validation-feature-integration.html - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/validate-rest-request-format.html - - /docs/dg/dev/glue-api/latest/glue-api-tutorials/validate-rest-request-format.html + - /docs/dg/dev/glue-api/202602.0/glue-api-tutorials/validate-rest-request-format.html related: - title: Glue API installation and configuration link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html diff --git a/docs/integrations/spryker-glue-api/storefront-api/storefront-api.md b/docs/integrations/spryker-glue-api/storefront-api/storefront-api.md index 648cc30044b..77243e0e912 100644 --- a/docs/integrations/spryker-glue-api/storefront-api/storefront-api.md +++ b/docs/integrations/spryker-glue-api/storefront-api/storefront-api.md @@ -14,9 +14,9 @@ redirect_from: - /docs/scos/dev/glue-api-guides/202200.0/glue-rest-api.html - /api/definition-api.htm - /docs/scos/dev/glue-api-guides/202204.0/glue-rest-api.html - - /docs/dg/dev/glue-api/202410.0/old-glue-infrastructure/glue-rest-api - - /docs/dg/dev/glue-api/latest/glue-api.html - - /docs/dg/dev/glue-api/latest/rest-api/glue-rest-api.html + - /docs/dg/dev/glue-api/202602.0/old-glue-infrastructure/glue-rest-api + - /docs/dg/dev/glue-api/202602.0/glue-api.html + - /docs/dg/dev/glue-api/202602.0/rest-api/glue-rest-api.html --- The *Spryker Storefront API* is a JSON REST API that is designed for customer-facing applications and buyer journey touchpoints. It is built to be used as a contract between the Spryker Commerce OS backend and any possible customer touchpoint or integration with third-party systems. As an application, Storefront API knows how to read and interpret API resources and leverage feature modules that expose existing Spryker functionality for customer experiences. diff --git a/docs/pbc/all/ai-foundation/202602.0/ai-foundation.md b/docs/pbc/all/ai-foundation/202602.0/ai-foundation.md new file mode 100644 index 00000000000..320a6bae2bc --- /dev/null +++ b/docs/pbc/all/ai-foundation/202602.0/ai-foundation.md @@ -0,0 +1,145 @@ +--- +title: AI Foundation +description: Provider-agnostic AI connectivity layer for commerce +template: concept-topic-template +last_updated: Dec 12, 2025 +label: early-access +related: + - title: Install the AI Foundation module + link: /docs/dg/dev/ai/ai-foundation/ai-foundation-module + +--- + +## Overview + +Spryker AI Foundation is the core layer that connects your Spryker Commerce OS to leading AI providers in an enterprise- and EU-friendly way. + +You get a standardized, provider-agnostic way to build AI-powered commerce experiences, and you can choose the right AI provider and model for each use case, using: + +- Global cloud AI platforms such as **Azure OpenAI**, **AWS Bedrock**, and **Google Vertex AI / Gemini** +- Frontier model providers such as **OpenAI** and **Anthropic Claude** +- European sovereign AI providers such as **Mistral AI** + +The goal is simple: make AI a first-class capability of your commerce platform, not a collection of isolated experiments. + +--- + +## Business problems it solves + +Traditional AI projects in commerce often run into the same obstacles: + +- Many separate integrations with different AI providers and libraries +- No common standards for security, logging, or error handling +- High dependency on a specific provider or model +- Lack of options for EU data residency or sovereignty-sensitive use cases +- Slow rollout of AI features across multiple markets and storefronts + +Spryker AI Foundation addresses these challenges by introducing one common layer for AI in your commerce stack. + +--- + +## Key value for your business + +- **Faster delivery** + Developers get ready-to-use building blocks and connectors, so AI features reach your customers in weeks instead of months. + +- **Provider freedom** + Your teams can connect to Azure OpenAI, AWS Bedrock, Google Vertex AI, OpenAI, Anthropic Claude, Mistral AI, or other providers through a single abstraction and keep the option to switch providers or combine them later. + +- **Consistent developer experience** + A unified approach to prompts, requests, and responses across providers simplifies onboarding, code reviews, and long-term ownership. + +- **Lower maintenance effort** + Handle changes to models, prompts, or providers in a central layer to reduce duplicate work across projects and rollouts. + +- **Best fit provider per use case** + Use different providers and models for different needs. For example, use a model optimized for complex reasoning in a shopping assistant and another model optimized for cost-efficient content generation, without changing your commerce applications. + +--- + +## Who benefits and how + +### For business leaders + +- **Reduced risk** + Avoid lock-in to a single AI provider and keep strategic options open as the AI market evolves. + +- **EU and compliance readiness** + Combine global platforms with European sovereign AI providers such as Mistral AI to address data residency, GDPR, and EU AI Act requirements. + +- **Faster innovation cycles** + New AI-driven use cases can be piloted and rolled out more quickly on top of a common foundation. + +- **Better use of internal teams** + Developers focus on customer value and differentiation, not on building and maintaining low-level AI integrations. + +### For product and commerce teams + +- **Reusable patterns** + Once a pattern for AI-powered search, content, or assistance is proven, it can be reused across channels, brands, and countries. + +- **More experiments, lower cost** + Trying a new provider or model for a specific use case becomes a configuration and testing activity, not a project. + +- **Closer collaboration with tech** + A common foundation and shared vocabulary make it easier to plan AI initiatives together with engineering. + +### For developers and architects + +- **Standardized APIs** + Use one consistent API to call AI providers such as Azure OpenAI, AWS Bedrock, Google Vertex AI, OpenAI, Anthropic Claude, and Mistral AI instead of learning each provider SDK and behavior. + +- **Simpler architecture** + AI related concerns such as configuration, error handling and response normalization sit in one layer rather than spread across services. + +- **Future readiness** + New providers or models can be added behind the same interface, which keeps the overall architecture stable. + +--- + +## Typical use cases built on Spryker AI Foundation + +AI Foundation is not a single feature. It is the base for many AI-enabled scenarios, for example: + +- **Generative AI (GenAI) shopping assistants** + Conversational assistants that help B2B buyers find the right product, check compatibility, and understand technical details by using one or more providers in the background. For example, you can use OpenAI or Anthropic for reasoning and combine them with an EU provider for sensitive data. + +- **AI-powered product content** + Translation, enrichment, and improvement of product descriptions and attributes at scale, aligned with your brand and channel guidelines. This can use specialized translation capabilities together with general-purpose models. + +- **Smart search and discovery** + AI-enhanced search and navigation that can better understand intent, synonyms, and domain-specific language, running on your preferred cloud AI platform. + +- **AI-assisted back office workflows** + Context-aware suggestions for catalog management, pricing, or data imports that make business users more productive, while keeping data in EU-based providers where required. + +Each of these use cases can evolve independently while still relying on the same AI Foundation underneath. + +--- + +## How Spryker AI Foundation fits into your architecture + +At a high level, Spryker AI Foundation sits inside Spryker Commerce OS and connects your channels (Storefronts, GLUE API, Back Office) with the AI providers you choose for each use case: + +```text +[ Storefronts ] [ GLUE API ] [ Back Office ] + \ | / + \ | / + v v v + [ Spryker Commerce OS ] + [ Spryker AI Foundation ] + - Common API + - Provider abstraction + - Configuration + - Routing per use case + | + v + [ AI providers ] + - Azure OpenAI + - AWS Bedrock + - Google Vertex AI / Gemini + - OpenAI + - Anthropic Claude + - Mistral AI + - Others, based on project needs +``` diff --git a/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md b/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md deleted file mode 100644 index 165cad66200..00000000000 --- a/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Spryker Core Back Office + Comments feature -description: The guide walks you through the process of installing the Comments and Spryker Core Back Office feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-feature.md b/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-feature.md deleted file mode 100644 index 538381b99d6..00000000000 --- a/docs/pbc/all/back-office/202410.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Spryker Core Back Office feature -description: A guide on how to integrate the Spryker Core Back Office feature into a Spryker project. -last_updated: Aug 30, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/back-office/202311.0/install-the-spryker-core-back-office-feature.html - - /docs/pbc/all/back-office/202311.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-spryker-core-back-office-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/back-office/202410.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md b/docs/pbc/all/back-office/202410.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md deleted file mode 100644 index 886b806e9f7..00000000000 --- a/docs/pbc/all/back-office/202410.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Spryker Core Back Office + Warehouse User Management feature -description: Learn how to integrate the Spryker Core Back Office + Warehouse User Management feature into a Spryker project. -last_updated: Jan 25, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/back-office/202400.0/unified-commerce/fulfillment-app/install-the-spryker-core-back-office-warehouse-user-management-feature.html - - /docs/scos/dev/feature-integration-guides/202307.0/spryker-core-back-office-warehouse-user-management-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-warehouse-user-management-feature.md %} diff --git a/docs/pbc/all/back-office/202507.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md b/docs/pbc/all/back-office/202507.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md deleted file mode 100644 index 36177d7926d..00000000000 --- a/docs/pbc/all/back-office/202507.0/base-shop/install-and-upgrade/install-the-spryker-core-back-office-comments-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Spryker Core Back Office + Comments feature -description: The guide walks you through the process of installing the Comments and Spryker Core Back Office feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/back-office/202507.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md b/docs/pbc/all/back-office/202507.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md deleted file mode 100644 index 2d5458b9323..00000000000 --- a/docs/pbc/all/back-office/202507.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Spryker Core Back Office + Warehouse User Management feature -description: Learn how to integrate the Spryker Core Back Office + Warehouse User Management feature into a Spryker project. -last_updated: Jan 25, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/back-office/202400.0/unified-commerce/fulfillment-app/install-the-spryker-core-back-office-warehouse-user-management-feature.html - - /docs/scos/dev/feature-integration-guides/202307.0/spryker-core-back-office-warehouse-user-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-warehouse-user-management-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/back-office/202512.0/base-shop/back-office-translations-overview.md b/docs/pbc/all/back-office/202602.0/base-shop/back-office-translations-overview.md similarity index 97% rename from docs/pbc/all/back-office/202512.0/base-shop/back-office-translations-overview.md rename to docs/pbc/all/back-office/202602.0/base-shop/back-office-translations-overview.md index 2c332bd1572..002a577aeb1 100644 --- a/docs/pbc/all/back-office/202512.0/base-shop/back-office-translations-overview.md +++ b/docs/pbc/all/back-office/202602.0/base-shop/back-office-translations-overview.md @@ -5,6 +5,7 @@ template: concept-topic-template last_updated: Nov 23, 2023 originalLink: https://documentation.spryker.com/2021080/docs/back-office-translations-overview redirect_from: + - /docs/pbc/all/back-office/202512.0/base-shop/back-office-translations-overview.html - /2021080/docs/back-office-translations-overview - /2021080/docs/en/back-office-translations-overview - /docs/back-office-translations-overview diff --git a/docs/pbc/all/back-office/202602.0/base-shop/backoffice-configuration-framework.md b/docs/pbc/all/back-office/202602.0/base-shop/backoffice-configuration-framework.md new file mode 100644 index 00000000000..521abe23b3e --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/backoffice-configuration-framework.md @@ -0,0 +1,136 @@ +--- +title: Back Office Configuration Framework +description: A scalable, standardized way to expose business-relevant configuration options directly in the Backoffice, without requiring code changes or redeployment. +template: concept-topic-template +last_updated: Feb 23, 2026 +label: early-access +--- + +The Back Office Configuration Framework is a structured approach to exposing business-relevant configuration options directly in the Spryker Back Office. Instead of defining configuration in code or YAML files that require redeployment, businesses can manage defined behaviors through structured UI pages. Developers define configuration options once in YAML, and the framework automatically renders them as configurable Back Office interfaces. + +--- + +## Business problems it solves + +Managing configuration in traditional commerce platforms creates friction between technical and business teams: + +- Configuration changes require developer involvement, code modifications, and a full deployment cycle. +- Business teams depend on IT to adjust behaviors that are fundamentally business decisions. +- YAML and code-level configuration is inaccessible to non-technical stakeholders and prone to error. +- Each configuration change introduces risk, slows down operations, and increases the total cost of change. + +The Back Office Configuration Framework addresses these challenges by creating a clear, controlled boundary between what developers define and what business users can adjust. + +--- + +## Key value for your business + +- **Faster time to change** + Business users adjust configured behaviors directly in the Back Office. No code change, no pull request, no deployment required. + +- **Reduced operational risk** + Configuration is exposed through structured, validated UI pages. Business users work within defined options rather than editing raw configuration files. + +- **Developer efficiency** + Developers define configuration options once in YAML. The framework handles rendering, validation, and persistence automatically, eliminating repetitive UI work. + +- **Consistent experience** + All configuration pages follow the same structure and interaction patterns, making it easier for business users to navigate and manage settings across features. + +- **Extensibility by design** + The framework supports both out of the box Spryker features and project-specific customizations, so teams can introduce new configurable behaviors without building new infrastructure. + +--- + +## Who benefits and how + +### For business leaders + +- **Lower cost of change** + Adjusting business behaviors no longer requires a development sprint or deployment window. Teams can respond to market conditions and business needs faster. + +- **Reduced dependency on IT** + Business teams gain direct control over selected configuration options without needing to involve developers for every adjustment. + +- **Stable, governed configurability** + The framework exposes only explicitly defined options. Business users operate within guardrails set by the development team, reducing the risk of misconfiguration. + +### For product and commerce teams + +- **Self-service configuration** + Manage feature behavior directly from the Back Office, using familiar UI patterns. No need to understand YAML syntax or request a deployment. + +- **Faster iteration** + Test different configurations, observe results, and adjust without waiting for a release cycle. + +- **Visibility into configurable options** + All available configuration options are surfaced in one place, making it easy to understand what can be changed and what the current settings are. + +### For developers and architects + +- **Define once, render automatically** + Declare configuration options in YAML. The framework generates the corresponding Back Office UI, saving significant development and maintenance effort. + +- **Separation of concerns** + Configuration definition stays with the developer; configuration management becomes a business user activity. This boundary is enforced by the framework. + +- **Standardized patterns** + Avoid building custom configuration UIs for each feature. The framework provides consistent infrastructure that all teams benefit from. + +--- + +## Key capabilities + +### Support for out of the box and custom features + +The framework supports configuration for existing Spryker out of the box features as well as project-specific customizations. Teams can use it to expose configuration options for both standard platform capabilities and bespoke features built for a specific project. + +### Structured and controlled business configurability + +Selected business-relevant configuration moves from code level to UI level without exposing low-level technical complexity. The developer controls which options are available, what values are valid, and how they are presented. The business user controls what value is set, within those defined parameters. + +### First out of the box implementation: B2B Product Availability Display + +The initial release of the Back Office Configuration Framework ships with a configuration UI for B2B Product Availability Display. This first implementation demonstrates the framework in a real-world use case, allowing business users to configure how product availability information is presented to B2B buyers directly from the Back Office. + +--- + +## How it works + +The Back Office Configuration Framework follows a developer-first definition approach with a business-user-facing runtime experience: + +1. **Developer defines configuration options in YAML** + The developer declares the available configuration options, their data types, validation rules, and default values in a structured YAML definition. + +2. **Framework generates the Back Office UI** + The framework reads the YAML definition and automatically renders the corresponding configuration page in the Back Office, including form fields, labels, and validation feedback. + +3. **Business user manages configuration** + A Back Office user with appropriate permissions accesses the configuration page, adjusts the available options, and saves changes. + +4. **Changes take effect without redeployment** + Configuration updates are stored and applied at runtime. No code changes or deployments are required. + +--- + +## Comparison to traditional configuration approaches + +### Code-level configuration + +**Traditional approach:** Configuration values are hardcoded or set in PHP configuration files. Changing a value requires a code change, review, and deployment. + +**Back Office Configuration Framework:** Configuration values are managed in the Back Office UI. Changes take effect immediately, within the boundaries defined by the developer. + +### YAML-based configuration + +**Traditional approach:** Configuration is declared in YAML files that are part of the codebase. Changing a value requires editing a file, committing the change, and triggering a deployment. + +**Back Office Configuration Framework:** YAML is still used, but only by developers to define what options are available. Business users interact with the resulting UI, not with YAML directly. + +### Custom configuration UIs + +**Traditional approach:** Each feature that requires business-user configuration needs a custom-built UI, resulting in inconsistent experiences and duplicated development effort. + +**Back Office Configuration Framework:** All configurable features share the same framework-generated UI infrastructure, reducing development effort and ensuring a consistent experience. + + diff --git a/docs/pbc/all/back-office/202512.0/base-shop/configure-the-timezone-in-the-back-office.md b/docs/pbc/all/back-office/202602.0/base-shop/configure-the-timezone-in-the-back-office.md similarity index 100% rename from docs/pbc/all/back-office/202512.0/base-shop/configure-the-timezone-in-the-back-office.md rename to docs/pbc/all/back-office/202602.0/base-shop/configure-the-timezone-in-the-back-office.md diff --git a/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/enable-google-material-icons.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/enable-google-material-icons.md new file mode 100644 index 00000000000..1ec650cdd86 --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/enable-google-material-icons.md @@ -0,0 +1,152 @@ +--- +title: Enable Google Material Icons in Back Office +description: Learn how to enable Google Material Icons in Spryker Cloud Commerce OS Back Office to enhance its look and usability. +last_updated: Jan 27, 2026 +template: module-migration-guide-template +--- + +This guide explains how to enable **Google Material Icons** in the Spryker Cloud Commerce OS Back Office. +By enabling these icons, you can modernize your admin interface and improve its overall appearance. + +To display a Material Icon in your templates, use the following HTML markup: + +```html +search +``` + +- `material-symbols-outlined` — defines the Material Icon style. +- `search` — defines the name of the icon to render. + +You can explore all available icons on the [Google Material Icons website](https://fonts.google.com/icons). + +--- + +## Steps to Enable Material UI Icons + +### 1. Update the Required Module + +Update the `spryker/gui` module to version 4.8.0 or higher: + +```bash +composer update spryker/gui:"^4.8.0" +``` + +--- + +### 2. Configure the Default Icon Type + +Create or update the `GuiConfig` class on the project level to set the default icon type to `google-material`: + +**src/Pyz/Zed/Gui/GuiConfig.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + // ...existing plugins... + new NavigationIconsTypeTwigPlugin(), + ]; + } +} +``` + +--- + +### 4. Configure Icons in the Navigation + +To use Material Icons in the Back Office sidebar navigation, update the `config/Zed/navigation.xml` file. +Add or modify the `` elements for each navigation item with the desired Material Icon name. + +Example: + +```xml + + + + + Dashboard + dashboard + index + index + grid_view + + + + + /sales + Sales + local_mall + + + + Orders + sales + index + index + + + + +``` + +{% info_block infoBox "Tip" %} +You can browse available icon names at [fonts.google.com/icons](https://fonts.google.com/icons). +For suggested icons, see the example configuration in the [Spryker B2B Demo Marketplace repository](https://github.com/spryker-shop/b2b-demo-marketplace/blob/master/config/Zed/navigation.xml). +{% endinfo_block %} + +--- + +### 5. Rebuild the Navigation Cache + +After updating your navigation configuration, rebuild the navigation cache with the following command: + +```bash +docker/sdk console navigation:build-cache +``` + +--- + +## Result + +After you complete these steps, the Spryker Back Office displays **Google Material Icons** throughout the sidebar navigation, resulting in a clean, modern, and professional appearance. diff --git a/docs/pbc/all/back-office/202512.0/base-shop/install-and-upgrade/install-back-office-accessibility-improvements.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-back-office-accessibility-improvements.md similarity index 100% rename from docs/pbc/all/back-office/202512.0/base-shop/install-and-upgrade/install-back-office-accessibility-improvements.md rename to docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-back-office-accessibility-improvements.md diff --git a/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-back-office-dropdown-navigation.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-back-office-dropdown-navigation.md new file mode 100644 index 00000000000..632426a0931 --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-back-office-dropdown-navigation.md @@ -0,0 +1,160 @@ +--- +title: Install Back Office dropdown navigation +description: Learn how to install and upgrade the Back Office dropdown navigation in Spryker Cloud Commerce OS +template: howto-guide-template +last_updated: Feb 19, 2026 +--- + +This document explains how to enable settable dropdown navigation in the Back Office. + +## Prerequisites + +Install the following features: + +| NAME | REQUIRED | VERSION | INTEGRATION GUIDE | +|--------------|------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | ✅ | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Update the required modules + +Update the required modules using Composer: + +```bash +composer require spryker/gui:"^3.62.0" spryker/gui-extension:"^1.0.0" +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------|------------------------------| +| Gui | vendor/spryker/gui | +| GuiExtension | vendor/spryker/gui-extension | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|----------|-------|---------|--------------------------------------------| +| Link | class | created | src/Generated/Shared/Transfer/LinkTransfer | + +{% endinfo_block %} + + +## 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|--------------------------|-------------------------------------------------------------------------------------------------|---------------|-------------------------------------------| +| NavigationLinkTwigPlugin | Extends Twig with the `layout_navigation_items` function to generate navigation items from plugins. | | Spryker\Zed\Gui\Communication\Plugin\Twig | + + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + new NavigationLinkTwigPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create a plugin implementing `\Spryker\Shared\GuiExtension\Dependency\Plugin\NavigationPluginInterface` +2. Register the plugin in the `getDropdownNavigationPlugins()` method of the `GuiDependencyProvider` class + +Make sure that, in the Back Office, the menu item is displayed in the dropdown navigation. + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-the-back-office-number-formatting.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-the-back-office-number-formatting.md new file mode 100644 index 00000000000..e1d479c70cb --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/install-the-back-office-number-formatting.md @@ -0,0 +1,297 @@ +--- +title: Install the Back Office number formatting +description: Learn how to install and upgrade the Back Office number formatting in Spryker Cloud Commerce OS +template: howto-guide-template +last_updated: Feb 19, 2026 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-add-support-of-number-formatting-in-the-back-office.html + - /docs/pbc/all/back-office/202311.0/howto-add-support-of-number-formatting-in-the-back-office.html + - /docs/pbc/all/back-office/202311.0/install-and-upgrade/install-the-back-office-number-formatting.html +--- + +This document explains how to add support of number formatting in the Back Office UI. + +## Prerequisites + +To add support of number formatting in the Back Office, integrate the following features: + +| NAME | REQUIRED | VERSION | INTEGRATION GUIDE | +|--|-----------|-------|--------------------------| +| Spryker Core | ✅ | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Promotions & Discounts | | {{page.release_tag}} | [Install the Promotions & Discounts feature](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html) | +| Product Options | | {{page.release_tag}} | [Product Options feature walkthrough](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-options-feature-overview.html) | +| Product + Order Management| | {{page.release_tag}} | [Install the Product + Order Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html) | +| Shipment | | {{page.release_tag}} | [Shipment integration](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/util-number spryker/money-gui +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------|----------------------------| +| UtilNumber | vendor/spryker/util-number | +| MoneyGui | vendor/spryker/money-gui | + +{% endinfo_block %} + +## 2) Set up configuration + +Extend the `Discount` configuration settings: + +{% info_block warningBox "Warning" %} + +Apply the following changes only if you have the [Promotions & Discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/promotions-discounts-feature-overview.html) feature installed. + +{% endinfo_block %} + +**src/Pyz/Zed/Discount/DiscountConfig.php** + +```php + + */ + protected function getBackofficeApplicationPlugins(): array + { + $plugins = [ + ... + new NumberFormatterApplicationPlugin(), + ]; + + ... + } +} +``` + +**src/Pyz/Zed/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + ... + new NumberFormatterTwigPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Warning" %} + +Apply the following changes only if you have the [Discount Management](/docs/pbc/all/discount-management/{{page.version}}/base-shop/promotions-discounts-feature-overview.html) feature installed. + +{% endinfo_block %} + +**src/Pyz/Zed/Discount/DiscountDependencyProvider.php** + +```php + diff --git a/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/upgrade-the-back-office-to-bootstrap-5.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/upgrade-the-back-office-to-bootstrap-5.md new file mode 100644 index 00000000000..85d14cd9f2f --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/upgrade-the-back-office-to-bootstrap-5.md @@ -0,0 +1,135 @@ +--- +title: Upgrade the Back Office to Bootstrap 5 +description: Learn how to migrate Spryker Back Office to Bootstrap 5 by updating dependencies and assets. +last_updated: Feb 19, 2026 +template: howto-guide-template +--- + +To migrate your Back Office to Bootstrap 5, complete the following steps: + +1. Update the required modules: + +First minor releases: + +```bash +composer update --ignore-platform-req=ext-grpc spryker/acl spryker/analytics-gui spryker/category-gui spryker/category-image-gui spryker/product-category spryker/cms spryker/cms-block-gui spryker/cms-content-widget spryker/cms-gui spryker/cms-slot-block-gui spryker/cms-slot-block-product-category-gui spryker/cms-slot-gui spryker/content-file-gui spryker/content-product-gui spryker/content-product-set-gui spryker/comment-gui spryker/comment-sales-connector spryker/company-business-unit-gui spryker/company-gui spryker/company-role-gui spryker/company-unit-address-gui spryker/company-unit-address-label spryker/company-user-gui spryker/customer spryker/customer-group spryker/customer-note-gui spryker/dynamic-entity-gui spryker/development spryker/gift-card-balance spryker/merchant-stock-gui spryker/merchant-profile-gui spryker/merchant-profile-merchant-portal-gui spryker/merchant-registration-request spryker/merchant-user-gui spryker/sales-merchant-commission spryker/sales-merchant-commission-merchant-portal-gui spryker/price-product spryker/price-product-merchant-relationship-merchant-portal-gui spryker/product-merchant-portal-gui spryker/merchant-sales-order-threshold-gui spryker/user-merchant-portal-gui spryker/oms spryker/sales spryker/product-search spryker/product-option spryker/discount spryker/discount-promotion spryker/shipment spryker/product-measurement-unit-gui spryker/merchant-relationship-gui spryker/price-product-merchant-relationship-gui spryker/merchant-relationship-sales-order-threshold-gui spryker/merchant-relationship-product-list-gui spryker/content-navigation-gui spryker/order-custom-reference-gui spryker/currency-gui spryker/price-product-volume-gui spryker/product-barcode-gui spryker/product-review-gui spryker/refund spryker/search spryker/sales-service-point-gui spryker/api-key-gui spryker/country spryker/country-gui spryker/glossary spryker/multi-factor-auth-merchant-portal spryker/setup spryker/storage spryker/store-context-gui spryker/dashboard spryker/user spryker/user-locale-gui spryker/state-machine spryker/tax spryker/cms-block-category-connector spryker/cms-block-product-connector spryker/collector spryker/collector-storage-connector spryker/company-gui-extension spryker/company-supplier-gui spryker/company-unit-address-gui-extension spryker/data-import-merchant-portal-gui spryker/dataset spryker/money-gui spryker/queue spryker/manual-order-entry-gui +``` + +Then major releases (remove not used features from the list): + +```bash +composer require --update-with-dependencies --ignore-platform-req=ext-grpc \ +spryker/customer-user-connector-gui:"^2.0.0" \ +spryker/storage-gui:"^2.0.0" \ +spryker-feature/agent-assist:"{{page.release_tag}}" \ +spryker-feature/alternative-products:"{{page.release_tag}}" \ +spryker-feature/checkout:"{{page.release_tag}}" \ +spryker-feature/cms:"{{page.release_tag}}" \ +spryker-feature/configurable-bundle:"{{page.release_tag}}" \ +spryker-feature/file-manager:"{{page.release_tag}}" \ +spryker-feature/inventory-management:"{{page.release_tag}}" \ +spryker-feature/marketplace-agent-assist:"{{page.release_tag}}" \ +spryker-feature/marketplace-inventory-management:"{{page.release_tag}}" \ +spryker-feature/marketplace-merchant-commission:"{{page.release_tag}}" \ +spryker-feature/marketplace-order-management:"{{page.release_tag}}" \ +spryker-feature/marketplace-product-offer:"{{page.release_tag}}" \ +spryker-feature/marketplace-product-offer-prices:"{{page.release_tag}}" \ +spryker-feature/marketplace-return-management:"{{page.release_tag}}" \ +spryker-feature/marketplace-shipment:"{{page.release_tag}}" \ +spryker-feature/merchant:"{{page.release_tag}}" \ +spryker-feature/merchant-contract-requests:"{{page.release_tag}}" \ +spryker-feature/navigation:"{{page.release_tag}}" \ +spryker-feature/payments:"{{page.release_tag}}" \ +spryker-feature/product:"{{page.release_tag}}" \ +spryker-feature/product-approval-process:"{{page.release_tag}}" \ +spryker-feature/product-labels:"{{page.release_tag}}" \ +spryker-feature/product-lists:"{{page.release_tag}}" \ +spryker-feature/product-relations:"{{page.release_tag}}" \ +spryker-feature/product-sets:"{{page.release_tag}}" \ +spryker-feature/reclamations:"{{page.release_tag}}" \ +spryker-feature/return-management:"{{page.release_tag}}" \ +spryker-feature/scheduled-prices:"{{page.release_tag}}" \ +spryker-feature/search:"{{page.release_tag}}" \ +spryker-feature/shipment:"{{page.release_tag}}" \ +spryker-feature/spryker-core:"{{page.release_tag}}" \ +spryker-feature/spryker-core-back-office:"{{page.release_tag}}" \ +spryker-feature/product-offer-shipment:"{{page.release_tag}}" \ +spryker-feature/product-offer-service-points:"{{page.release_tag}}" \ +spryker-feature/warehouse-user-management:"{{page.release_tag}}" +``` + +{% info_block infoBox "" %} +Bootstrap 5 support was added originally in the release 202507.0 + +All essential components were released in [spryker/gui:3.59.0](https://github.com/spryker/gui/releases/tag/3.59.0). + +In 202512.0 Bootstrap 5 is enabled by default in the Back Office. +{% endinfo_block %} + +2. Update the `@spryker/oryx-for-zed` dependency: + +```bash + npm install @spryker/oryx-for-zed@~3.5.0 --save-dev +``` + +3. Clear the application cache: + +```bash + docker/sdk console c:e +``` + +4. Run the Twig cache warmer: + +```bash + docker/sdk console t:c:w +``` + +5. Build the JavaScript and CSS assets to apply the Bootstrap 5 updates: + +```bash +docker/sdk cli npm run zed +``` + +{% info_block warningBox "Verification" %} + +⚡️ **Summary of grid class updates** + +| **Bootstrap 3** |**Bootstrap 5 replacement**| **Notes** | +| ---------------------------------- | ------------------------- | ------------------------- | +| `.col-xs-*` | `.col-*` | Replaced, "xs" dropped | +| `.col-sm-*` | `.col-sm-*` | Same | +| `.col-md-*` | `.col-md-*` | Same | +| `.col-lg-*` | `.col-lg-*` | Same | +| *(none)* | `.col-xl-*`, `.col-xxl-*` | New breakpoints | +| `.col-md-offset-*` | `.offset-md-*` | New syntax | +| `.col-md-push-*`, `.col-md-pull-*` | `.order-md-*` | Flexbox ordering | +| `.row-no-gutters` | `.g-0` | Simplified gutter control | + +⚡️ **HTML attribute changes for JavaScript components** + +| **Bootstrap 3 attribute** | **Bootstrap 5 equivalent** | **Notes and changes** | +| ----------------------------------------- | ----------------------------------------------- | ----------------------------------------------------------- | +| `data-toggle="modal"` | `data-bs-toggle="modal"` | All JS data attributes now start with `data-bs-*` | +| `data-target="#myModal"` | `data-bs-target="#myModal"` | Updated prefix to `data-bs-` | +| `data-toggle="dropdown"` | `data-bs-toggle="dropdown"` | Same behavior, new prefix | +| `data-toggle="collapse"` | `data-bs-toggle="collapse"` | Required for collapsible elements | +| `data-target="#menu"` | `data-bs-target="#menu"` | Used with dropdowns, collapse, offcanvas, etc. | +| `data-toggle="tab"` | `data-bs-toggle="tab"` | For tab navigation | +| `data-toggle="tooltip"` | `data-bs-toggle="tooltip"` | Still requires JS initialization via `Tooltip` class | +| `data-toggle="popover"` | `data-bs-toggle="popover"` | Still requires JS initialization via `Popover` class | +| `data-dismiss="alert"` | `data-bs-dismiss="alert"` | For closing alerts | +| `data-dismiss="modal"` | `data-bs-dismiss="modal"` | For closing modals | +| `data-dismiss="toast"` | `data-bs-dismiss="toast"` | New in Bootstrap 4+, same pattern | +| *(none)* | `data-bs-spy="scroll"` | Scrollspy syntax updated from `data-spy` to `data-bs-spy` | +| `data-offset-top` / `data-offset-bottom` | *(Removed)* | Scrollspy offset handled via JS or CSS, not data attributes | +| `data-ride="carousel"` | `data-bs-ride="carousel"` | For auto-sliding carousels | +| `data-slide="next"` / `data-slide="prev"` | `data-bs-slide="next"` / `data-bs-slide="prev"` | For carousel controls | +| `data-slide-to="0"` | `data-bs-slide-to="0"` | For carousel indicators | +| `data-interval="5000"` | `data-bs-interval="5000"` | Same meaning, updated prefix | +| `data-pause="hover"` | `data-bs-pause="hover"` | Carousel pause behavior | +| `data-keyboard="true"` | `data-bs-keyboard="true"` | For modals and carousels | +| `data-backdrop="static"` | `data-bs-backdrop="static"` | For modal backdrop behavior | +| `data-toggle="button"` | `data-bs-toggle="button"` | For toggling active button states | +| *(none)* | `data-bs-toggle="offcanvas"` | New in Bootstrap 5 for offcanvas menus | + +{% endinfo_block %} diff --git a/docs/pbc/all/back-office/202512.0/base-shop/install-and-upgrade/upgrade-the-chart-module.md b/docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/upgrade-the-chart-module.md similarity index 100% rename from docs/pbc/all/back-office/202512.0/base-shop/install-and-upgrade/upgrade-the-chart-module.md rename to docs/pbc/all/back-office/202602.0/base-shop/install-and-upgrade/upgrade-the-chart-module.md diff --git a/docs/pbc/all/back-office/202602.0/base-shop/spryker-core-back-office-feature-overview.md b/docs/pbc/all/back-office/202602.0/base-shop/spryker-core-back-office-feature-overview.md new file mode 100644 index 00000000000..69f373f9532 --- /dev/null +++ b/docs/pbc/all/back-office/202602.0/base-shop/spryker-core-back-office-feature-overview.md @@ -0,0 +1,72 @@ +--- +title: Spryker Core Back Office feature overview +description: The document provides general information about the actions you can perform in Spryker Back Office. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/the-back-office-overview +originalArticleId: 33ffb1b7-d9b5-457a-90a1-170e36479d5b +redirect_from: + - /2021080/docs/the-back-office-overview + - /2021080/docs/en/the-back-office-overview + - /docs/the-back-office-overview + - /docs/en/the-back-office-overview + - /2021080/docs/back-office-login-overview + - /2021080/docs/en/back-office-login-overview + - /docs/back-office-login-overview + - /docs/en/back-office-login-overview + - /docs/scos/user/features/202200.0/spryker-core-back-office-feature-overview/spryker-core-back-office-feature-overview.html + - /docs/pbc/all/back-office/202311.0/spryker-core-back-office-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202204.0/spryker-core-back-office-feature-walkthrough/spryker-core-back-office-feature-walkthrough.html + - /docs/scos/user/features/202204.0/spryker-core-back-office-feature-overview/spryker-core-back-office-feature-overview.html + +--- + +A Spryker-based shop ships with a comprehensive, intuitive administration area and consists of numerous features that give you a strong hold over the customization of your store. Here you can tailor features to your specific needs, manage orders, products, and customers, and modify the look and feel of your store by—for example, designing eye-catching marketing campaigns and promotions, and much more. + +The Spryker Back Office provides you with a variety of sections that are logically connected to each other. + +{% info_block infoBox "Spryker Back Office" %} + +It provides the product and content management capabilities, categories and navigation building blocks, search and filter customizations, barcode generator, order handling, company structure creation (*for B2B users*), and merchant-buyer contracts' setup. + +{% endinfo_block %} + +With Spryker Back Office, you can do the following: +- Manage orders placed by your customers as well as create orders for customers. +- Create and manage customers. +- Build and manage product categories. +- Create and manage CMS blocks and pages. +- Handle translations. +- Manage products and all elements related to them (availability, labels, options, types). +- Customize search and filters for the online store. +- Create and manage discounts. +- Build and manage the main navigation of your online store. +- Create new carrier companies and shipment methods as well as manage those. +- Create admin users, and add roles and user groups. + +Depending on the roles and teams in your project, you can limit the access of different Back Office users to specific Back Office areas. + +**Back Office provides both B2B and B2C capabilities.** + +{% info_block infoBox "Info" %} + +The following diagram shows what features are used for both *B2B and B2C* and which are *B2B-specific*. + +{% endinfo_block %} + +![B2B and B2C features](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/spryker-core-back-office-feature-overview/spryker-core-back-office-feature-overview.md/b2b-and-b2c-features.png) + +You can always define what exactly is going to be needed for your specific project. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Get a general idea of the Back Office Translations](/docs/pbc/all/back-office/{{page.version}}/base-shop/back-office-translations-overview.html) | + +## Related Developer articles + +|INSTALLATION GUIDES | REFERENCES| +|---------|---------| +| [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | [Back Office Translations overview](/docs/pbc/all/back-office/{{page.version}}/base-shop/back-office-translations-overview.html) | +| [Microsoft Azure Active Directory](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-microsoft-azure-active-directory.html) | [Users and rights overview](/docs/pbc/all/user-management/{{page.version}}/base-shop/user-and-rights-overview.html) | diff --git a/docs/pbc/all/back-office/202404.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md b/docs/pbc/all/back-office/202602.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md similarity index 100% rename from docs/pbc/all/back-office/202404.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md rename to docs/pbc/all/back-office/202602.0/unified-commerce/install-and-upgrade/install-the-spryker-core-back-office-warehouse-user-management-feature.md diff --git a/docs/pbc/all/business-intelligence/202410.0/install-the-analytics-feature.md b/docs/pbc/all/business-intelligence/202410.0/install-the-analytics-feature.md deleted file mode 100644 index b006c01a31c..00000000000 --- a/docs/pbc/all/business-intelligence/202410.0/install-the-analytics-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Analytics feature -description: Learn how to integrate the Analytics feature into your project -last_updated: Nov 19, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-analytics-feature.md %} diff --git a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/amazon-quicksight.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/amazon-quicksight.md similarity index 99% rename from docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/amazon-quicksight.md rename to docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/amazon-quicksight.md index 751f3395bcf..0fb78efa072 100644 --- a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/amazon-quicksight.md +++ b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/amazon-quicksight.md @@ -2,6 +2,8 @@ title: Amazon QuickSight description: Amazon QuickSight overview template: concept-topic-template +redirect_from: + - /docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/amazon-quicksight.html last_updated: Oct 24, 2024 --- diff --git a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/back-office-refresh-analytics-datasets.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/back-office-refresh-analytics-datasets.md similarity index 100% rename from docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/back-office-refresh-analytics-datasets.md rename to docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/back-office-refresh-analytics-datasets.md diff --git a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md similarity index 99% rename from docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md rename to docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md index 429d61fbd28..5f9bfe3a91d 100644 --- a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md +++ b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.md @@ -118,7 +118,7 @@ Now you know how to add data and format it in different ways. For more informati 5. To add filter controls, click the three dots next to the filter and select **Add control**>**Top of this sheet**. This adds the filter controls to the top of the sheet. -![store-filter](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/best-practices-analyzing-shop-data.md/store-filter.png) +![store-filter](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/best-practices-analyzing-shop-data.md/store-filter.png) ## Share the analysis diff --git a/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/install-amazon-quicksight.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/install-amazon-quicksight.md new file mode 100644 index 00000000000..06b34b84012 --- /dev/null +++ b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/install-amazon-quicksight.md @@ -0,0 +1,612 @@ +--- +title: Install Amazon QuickSight +description: Learn how to integrate the Amazon QuickSight into your project +last_updated: Feb 19, 2026 +template: feature-integration-guide-template +--- + +This document describes how to install Amazon QuickSight. + +## Install feature core + +Follow the steps below to install the Amazon QuickSight core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Analytics | {{page.release_tag}} | [Install the Analytics feature](/docs/pbc/all/business-intelligence/{{page.version}}/install-the-analytics-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-eco/amazon-quicksight:"^2.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|--------------------------------------| +| AmazonQuicksight | vendor/spryker-eco/amazon-quicksight | + +{% endinfo_block %} + +### 2) Set up the configuration + +1. Add one of the following QuickSight asset bundles to the project level, for example–to `src/Pyz/Zed/AmazonQuicksight/data/asset-bundle.zip`. +Preconfigured asset bundles per demo shop: +- [B2B Marketplace](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/install-amazon-quicksight.md/b2b-mp-asset-bundle.zip) +- [B2B](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/install-amazon-quicksight.md/b2b-asset-bundle.zip) +- [B2C Marketplace](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/install-amazon-quicksight.md/b2c-mp-asset-bundle.zip) +- [B2C](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/business-intelligence/amazon-quicksight-third-party-integration/install-amazon-quicksight.md/b2c-asset-bundle.zip) + +{% info_block infoBox "SELECT statements in custom SQL queries" %} + +In custom SQL queries, avoid using `*` in `SELECT` statements. Instead, explicitly specify the required columns. This reduces the risk of exposing sensitive data when modifying asset bundles or creating custom datasets. + +{% endinfo_block %} + +2. Define the path to the asset bundle: + +**src/Pyz/Zed/AmazonQuicksight/AmazonQuicksightConfig.php** + +```php + +B2B Marketplace + +```php + + */ + protected const ASSET_BUNDLE_IMPORT_DELETE_DATA_SET_IDS = [ + 'SprykerB2BMPDefaultDatasetCategoryLocalizedProductAbstract', + 'SprykerB2BMPDefaultDatasetCompany', + 'SprykerB2BMPDefaultDatasetCustomer', + 'SprykerB2BMPDefaultDatasetCustomerAddress', + 'SprykerB2BMPDefaultDatasetMerchantCommission', + 'SprykerB2BMPDefaultDatasetMerchantOrder', + 'SprykerB2BMPDefaultDatasetMerchantOrderCategory', + 'SprykerB2BMPDefaultDatasetMerchantOrderItems', + 'SprykerB2BMPDefaultDatasetMerchantProductOffer', + 'SprykerB2BMPDefaultDatasetMerchantProductProductAbstract', + 'SprykerB2BMPDefaultDatasetMerchantStore', + 'SprykerB2BMPDefaultDatasetOrderDiscounts', + 'SprykerB2BMPDefaultDatasetOrderItemCategoryProductBrand', + 'SprykerB2BMPDefaultDatasetOrderItemLocalizedProductConcrete', + 'SprykerB2BMPDefaultDatasetOrderItemProductCategory', + 'SprykerB2BMPDefaultDatasetOrderItemsReturnDate', + 'SprykerB2BMPDefaultDatasetOrderItemState', + 'SprykerB2BMPDefaultDatasetOrderItemStateCustomers', + 'SprykerB2BMPDefaultDatasetOrderItemStateHistory', + 'SprykerB2BMPDefaultDatasetOrderPaymentMethods', + 'SprykerB2BMPDefaultDatasetOrderReturns', + 'SprykerB2BMPDefaultDatasetOrderReturnsProductConcrete', + 'SprykerB2BMPDefaultDatasetOrderShipmentMethods', + 'SprykerB2BMPDefaultDatasetOrderTotalsCustomerCompany', + 'SprykerB2BMPDefaultDatasetOrderTotalsCustomSQL', + 'SprykerB2BMPDefaultDatasetProductConcreteAvailability', + 'SprykerB2BMPDefaultDatasetProductConcreteStore', + 'SprykerB2BMPDefaultDatasetQuoteProducts', + 'SprykerB2BMPDefaultDatasetShoppingListProducts', + ]; + + /** + * @var string + */ + protected const DEFAULT_DATA_SOURCE_ID = 'SprykerB2BMPDefaultDataSource'; +} +``` + + + +
      +B2B + +```php + + */ + protected const ASSET_BUNDLE_IMPORT_DELETE_DATA_SET_IDS = [ + 'SprykerB2BDefaultDatasetOrderShipmentMethods', + 'SprykerB2BDefaultDatasetOrderReturnsProductConcrete', + 'SprykerB2BDefaultDatasetOrderReturns', + 'SprykerB2BDefaultDatasetOrderItemCategoryProductBrand', + 'SprykerB2BDefaultDatasetOrderItemLocalizedProductConcrete', + 'SprykerB2BDefaultDatasetOrderItemProductCategory', + 'SprykerB2BDefaultDatasetOrderItemsReturnDate', + 'SprykerB2BDefaultDatasetOrderItemState', + 'SprykerB2BDefaultDatasetOrderItemStateHistory', + 'SprykerB2BDefaultDatasetOrderDiscounts', + 'SprykerB2BDefaultDatasetOrderPaymentMethods', + 'SprykerB2BDefaultDatasetOrderItemStateCustomers', + 'SprykerB2BDefaultDatasetOrderTotalsCustomerCompany', + 'SprykerB2BDefaultDatasetOrderTotalsCustomSQL', + 'SprykerB2BDefaultDatasetCategoryLocalizedProductAbstract', + 'SprykerB2BDefaultDatasetProductConcreteStore', + 'SprykerB2BDefaultDatasetMerchantStore', + 'SprykerB2BDefaultDatasetQuoteProducts', + 'SprykerB2BDefaultDatasetProductConcreteAvailability', + 'SprykerB2BDefaultDatasetCompany', + 'SprykerB2BDefaultDatasetCustomer', + 'SprykerB2BDefaultDatasetCustomerAddress', + ]; + + /** + * @var string + */ + protected const DEFAULT_DATA_SOURCE_ID = 'SprykerB2BDefaultDataSource'; +} +``` + +
      + +
      +B2C Marketplace + +```php + + */ + protected const ASSET_BUNDLE_IMPORT_DELETE_DATA_SET_IDS = [ + 'SprykerB2CMPDefaultDatasetCategoryLocalizedProductAbstract', + 'SprykerB2CMPDefaultDatasetCustomer', + 'SprykerB2CMPDefaultDatasetCustomerAddress', + 'SprykerB2CMPDefaultDatasetMerchantCommission', + 'SprykerB2CMPDefaultDatasetMerchantOrder', + 'SprykerB2CMPDefaultDatasetMerchantOrderCategory', + 'SprykerB2CMPDefaultDatasetMerchantOrderItems', + 'SprykerB2CMPDefaultDatasetMerchantProductOffer', + 'SprykerB2CMPDefaultDatasetMerchantProductProductAbstract', + 'SprykerB2CMPDefaultDatasetMerchantStore', + 'SprykerB2CMPDefaultDatasetOrderDiscounts', + 'SprykerB2CMPDefaultDatasetOrderItemCategoryProductBrand', + 'SprykerB2CMPDefaultDatasetOrderItemLocalizedProductConcrete', + 'SprykerB2CMPDefaultDatasetOrderItemProductCategory', + 'SprykerB2CMPDefaultDatasetOrderItemsReturnDate', + 'SprykerB2CMPDefaultDatasetOrderItemState', + 'SprykerB2CMPDefaultDatasetOrderItemStateHistory', + 'SprykerB2CMPDefaultDatasetOrderPaymentMethods', + 'SprykerB2CMPDefaultDatasetOrderReturns', + 'SprykerB2CMPDefaultDatasetOrderReturnsProductConcrete', + 'SprykerB2CMPDefaultDatasetOrderShipmentMethods', + 'SprykerB2CMPDefaultDatasetOrderTotalsCustomSQL', + 'SprykerB2CMPDefaultDatasetProductConcreteAvailability', + 'SprykerB2CMPDefaultDatasetProductConcreteStore', + 'SprykerB2CMPDefaultDatasetQuoteProducts', + ]; + + /** + * @var string + */ + protected const DEFAULT_DATA_SOURCE_ID = 'SprykerB2CMPDefaultDataSource'; +} +``` + +
      + +
      +B2C + +```php + + */ + protected const ASSET_BUNDLE_IMPORT_DELETE_DATA_SET_IDS = [ + 'SprykerB2CDefaultDatasetCategoryLocalizedProductAbstract', + 'SprykerB2CDefaultDatasetCustomer', + 'SprykerB2CDefaultDatasetCustomerAddress', + 'SprykerB2CDefaultDatasetOrderDiscounts', + 'SprykerB2CDefaultDatasetOrderItemCategoryProductBrand', + 'SprykerB2CDefaultDatasetOrderItemLocalizedProductConcrete', + 'SprykerB2CDefaultDatasetOrderItemProductCategory', + 'SprykerB2CDefaultDatasetOrderItemsReturnDate', + 'SprykerB2CDefaultDatasetOrderItemState', + 'SprykerB2CDefaultDatasetOrderItemStateHistory', + 'SprykerB2CDefaultDatasetOrderPaymentMethods', + 'SprykerB2CDefaultDatasetOrderReturns', + 'SprykerB2CDefaultDatasetOrderReturnsProductConcrete', + 'SprykerB2CDefaultDatasetOrderShipmentMethods', + 'SprykerB2CDefaultDatasetOrderTotalsCustomSQL', + 'SprykerB2CDefaultDatasetProductConcreteAvailability', + 'SprykerB2CDefaultDatasetProductConcreteStore', + 'SprykerB2CDefaultDatasetQuoteProducts', + ]; + + /** + * @var string + */ + protected const DEFAULT_DATA_SOURCE_ID = 'SprykerB2CDefaultDataSource'; +} +``` + +
      + +{% info_block warningBox "Verification" %} + +These changes are verified in a later step. + +{% endinfo_block %} + +4. Add the following environment configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +|-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|------------------------------------| +| AmazonQuicksightConstants::AWS_ACCOUNT_ID | ID of the AWS account holding your Amazon QuickSight account. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::AWS_REGION | AWS region of your Amazon QuickSight account. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::AWS_QUICKSIGHT_NAMESPACE | Name of the QuickSight namespace. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_USERNAME | Username of the default data source. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_PASSWORD | Default data source password. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_DATABASE_NAME | Default data source database name. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_DATABASE_HOST | Default data source database host. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_DATABASE_PORT | Default data source database port. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::DEFAULT_DATA_SOURCE_VPC_CONNECTION_ARN | Default data source VPC connection ARN. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::GENERATE_EMBED_URL_ALLOWED_DOMAINS | List of domains allowed for generating embed URLs. | SprykerEco\Shared\AmazonQuicksight | +| AmazonQuicksightConstants::QUICKSIGHT_ASSUMED_ROLE_ARN | The role ARN used by `Aws\Sts\StsClient` to assume a role used for all API calls to Quicksight. | SprykerEco\Shared\AmazonQuicksight | + +**config/Shared/config_default.php** + +```php + + */ + protected function getAnalyticsCollectionExpanderPlugins(): array + { + return [ + new QuicksightAnalyticsCollectionExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/User/UserDependencyProvider.php** + +```php + + */ + protected function getUserExpanderPlugins(): array + { + return [ + new QuicksightUserExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\UserExtension\Dependency\Plugin\UserPostUpdatePluginInterface> + */ + protected function getUserPostUpdatePlugins(): array + { + return [ + new DeleteQuicksightUserPostUpdatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +| PLUGIN | VERIFICATION | +| - | - | +| Verify `QuicksightAnalyticsCollectionExpanderPlugin`| Go to `https://mysprykershop.com/analytics-gui/analytics` and make sure QuickSight analytics is displayed. By default, you should see the `No Analytics permission has been granted to the current user` message. | +| Verify `QuicksightUserExpanderPlugin`| Create a new QuickSight user in the `spy_quicksight_user` DB table and call `UserFacade::getUserCollection()` for a user used for the newly created QuickSight user. Make sure the `UserCollection.user.quicksightUser` is expanded. | +| Verify `DeleteQuicksightUserPostUpdatePlugin`| In the Back Office, go to **Users**>**Users**. For a newly created QuickSight user, deactivate deactive the respective Back Office user. Make sure the corresponding row is deleted in the `spy_quicksight_user` DB table. | + +{% endinfo_block %} + +2. Enable behaviors by registering the console commands: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------|----------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------| +| QuicksightUserSyncCreateConsole | In the `spy_quicksight_user` DB table, persists the users registered in QuickSight by persisted user emails. | | SprykerEco\Zed\AmazonQuicksight\Communication\Console | + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new QuicksightUserSyncCreateConsole(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Create a QuickSight user in QuickSight. +2. Sync QuickSight to Back Office users: + +```bash +console quicksight-user:sync:create +``` + +In the `spy_quicksight_user` table, make sure that the corresponding QuickSight user has been added. + +{% endinfo_block %} + +3. Optional: To sync users automatically during deployment, configure the installation stage of a pipeline, for example–destructive pipeline. Add the following command to the end of the `demodata` section: + +**config/install/destructive.yml** + +```yaml +sections: + demodata: +# ...other commands + create-quicksight-users: + command: 'vendor/bin/console quicksight-user:sync:create' +``` + + +4. Clear router cache: + +```bash +console router:cache:warm-up:backoffice +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure you can access the Analytics page: `https://backoffice.mysprykershop.com/amazon-quicksight/analytics/enable`. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Amazon QuickSight frontend. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|--------------|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Enable Javascript and CSS changes + +1. Update `package.json`: + +**package.json** + +```json +{ + "workspaces": [ + "vendor/spryker-eco/*/assets/Zed" + ], +} +``` + +2. Enable Javascript and CSS changes: + +```bash +npm install +console frontend:zed:build +``` diff --git a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/manage-analytics-users-and-roles.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/manage-analytics-users-and-roles.md similarity index 100% rename from docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/manage-analytics-users-and-roles.md rename to docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/manage-analytics-users-and-roles.md diff --git a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md similarity index 95% rename from docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md rename to docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md index 174cea67813..bc4a7a0d42b 100644 --- a/docs/pbc/all/business-intelligence/202512.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md +++ b/docs/pbc/all/business-intelligence/202602.0/amazon-quicksight-third-party-integration/set-up-amazon-quicksight.md @@ -26,7 +26,7 @@ This document describes how to set up Amazon QuickSight. The user who enables analytics is assigned as an owner of all the default assets, such as data sets, analyses, and dashboards. You can transfer ownership later. -{% endinfo_block %} +{% endinfo_block %} 8. Wait for the estimated amount of time and refresh the page. @@ -34,4 +34,4 @@ The user who enables analytics is assigned as an owner of all the default assets ## Next steps -[Best practices: Working with analytics](/docs/pbc/all/business-intelligence/{{page.version}}/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.html) +[Best practices: Working with analytics](/docs/pbc/all/business-intelligence/{{page.version}}/amazon-quicksight-third-party-integration/best-practices-working-with-analytics.html) diff --git a/docs/pbc/all/business-intelligence/202512.0/business-intelligence.md b/docs/pbc/all/business-intelligence/202602.0/business-intelligence.md similarity index 100% rename from docs/pbc/all/business-intelligence/202512.0/business-intelligence.md rename to docs/pbc/all/business-intelligence/202602.0/business-intelligence.md diff --git a/docs/pbc/all/business-intelligence/202602.0/install-the-analytics-feature.md b/docs/pbc/all/business-intelligence/202602.0/install-the-analytics-feature.md new file mode 100644 index 00000000000..e7dec3950b6 --- /dev/null +++ b/docs/pbc/all/business-intelligence/202602.0/install-the-analytics-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Analytics feature +description: Learn how to integrate the Analytics feature into your project +last_updated: Nov 19, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-analytics-feature.md %} diff --git a/docs/pbc/all/carrier-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md b/docs/pbc/all/carrier-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md deleted file mode 100644 index acb459aefb2..00000000000 --- a/docs/pbc/all/carrier-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Install the Shipment feature -description: Learn how to integrate the Shipment Back Office UI, Delivery method per store and Shipment data import functionalities in your project. -last_updated: Aug 30, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-feature-integration -originalArticleId: 593f9273-8a34-4a11-afdf-a21e7e74a57b -redirect_from: - - /2021080/docs/shipment-feature-integration - - /2021080/docs/en/shipment-feature-integration - - /docs/shipment-feature-integration - - /docs/en/shipment-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/shipment-feature-integration.html - - /docs/pbc/all/carrier-management/202311.0/unified-commerce/enhanced-click-and-collect/install-and-upgrade/install-the-shipment-feature.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - - /docs/scos/dev/feature-integration-guides/202001.0/shipment-feature-integration.html -related: - - title: Install the Shipment Glue API - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - - title: Shipment feature overview - link: docs/pbc/all/carrier-management/page.version/base-shop/shipment-feature-overview.html - - title: Install the Shipment + Approval Process feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-feature.md %} diff --git a/docs/pbc/all/carrier-management/202404.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md b/docs/pbc/all/carrier-management/202404.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md deleted file mode 100644 index c5802b5f4eb..00000000000 --- a/docs/pbc/all/carrier-management/202404.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Shipment + Service Points feature -description: Learn how to integrate the Shipment + Service Points feature into your project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-shipment-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md b/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md deleted file mode 100644 index 0c84d046e02..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Shipment + Approval Process feature -description: Learn how to install the shipment approval process feature in Spryker Cloud Commerce OS, ensuring efficient approval workflows for managing shipment processing. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-approval-process-feature-integration -originalArticleId: ac858362-21ea-4a7a-8369-b82cee1cc226 -redirect_from: - - /2021080/docs/shipment-approval-process-feature-integration - - /2021080/docs/en/shipment-approval-process-feature-integration - - /docs/shipment-approval-process-feature-integration - - /docs/en/shipment-approval-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/shipment-approval-process-feature-integration.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html - -related: - - title: Install the Approval Process feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-approval-process-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md deleted file mode 100644 index 820a226de94..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Shipment + Cart feature -description: This guide provides step-by-step instruction on integrating Shipment and Cart feature into a Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-cart-feature-integration -originalArticleId: a5618db0-4ee1-462e-8165-aedc13881e07 -redirect_from: - - /2021080/docs/shipment-cart-feature-integration - - /2021080/docs/en/shipment-cart-feature-integration - - /docs/shipment-cart-feature-integration - - /docs/en/shipment-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202204.0/shipment-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/shipment-cart-feature-integration.html - - /docs/pbc/all/carrier-management/202311.0/install-and-upgrade/install-the-shipment-feature.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - -related: - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md b/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md deleted file mode 100644 index d0cd42f559d..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Shipment + Customer Account Management feature -description: Learn how to integrate the Shipment + Customer Account Management feature into your project -last_updated: July 31, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-customer-account-management-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md b/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md deleted file mode 100644 index bfe8a12ae63..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Install the Shipment feature -description: Learn how to integrate the Shipment Back Office UI, Delivery method per store and Shipment data import functionalities in your project. -last_updated: Aug 30, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-feature-integration -originalArticleId: 593f9273-8a34-4a11-afdf-a21e7e74a57b -redirect_from: - - /2021080/docs/shipment-feature-integration - - /2021080/docs/en/shipment-feature-integration - - /docs/shipment-feature-integration - - /docs/en/shipment-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/shipment-feature-integration.html - - /docs/pbc/all/carrier-management/202311.0/unified-commerce/enhanced-click-and-collect/install-and-upgrade/install-the-shipment-feature.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - - /docs/scos/dev/feature-integration-guides/202001.0/shipment-feature-integration.html - -related: - - title: Install the Shipment Glue API - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - - title: Shipment feature overview - link: docs/pbc/all/carrier-management/page.version/base-shop/shipment-feature-overview.html - - title: Install the Shipment + Approval Process feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md b/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md deleted file mode 100644 index 4b00d8f70a5..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Install the Shipment Glue API -description: Learn how to install the Shipment Glue API in Spryker Cloud Commerce OS, enabling seamless integration between shipment services and enhancing order fulfillment workflows. -last_updated: Dec 14, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-shipment-feature-integration -originalArticleId: a324452c-5bf0-49f9-a6d8-fd59abf3b414 -redirect_from: - - /2021080/docs/glue-api-shipment-feature-integration - - /2021080/docs/en/glue-api-shipment-feature-integration - - /docs/glue-api-shipment-feature-integration - - /docs/en/glue-api-shipment-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-shipment-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-shipment-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-shipment-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-shipment-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shipment-feature-integration.html - - /docs/pbc/all/carrier-management/202311.0/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.html - -related: - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - - title: Retrieving orders - link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shipment-glue-api.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md b/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md deleted file mode 100644 index d1762267c4a..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Shipment + Customer feature -last_updated: Jul 06, 2021 -description: This document describes the process how to integrate Marketplace Shipment + Customer feature into your project -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-customer-feature-integration.html - -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-marketplace-shipment-customer-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-feature.md b/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-feature.md deleted file mode 100644 index 1cd6f7b088d..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-marketplace-shipment-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Marketplace Shipment feature -last_updated: Jul 05, 2021 -description: This document describes the process how to integrate Marketplace Shipment feature into your Spyrker Marketplace project -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-feature-integration.html - -related: - - title: Marketplace Shipment feature walkthrough - link: docs/pbc/all/carrier-management/page.version/marketplace/marketplace-shipment-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-marketplace-shipment-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md deleted file mode 100644 index 1ecace95ce3..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Shipment + Cart feature -description: This document describes the process how to integrate Marketplace Shipment and cart feature into your project -last_updated: Jun 25, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/201907.0/marketplace-shipment-cart-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202005.0/marketplace-shipment-cart-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-cart-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md b/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md deleted file mode 100644 index d6ab0d0d181..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Shipment + Checkout feature -description: This document describes the process how to integrate Marketplace Shipment + Checkout feature into your project -last_updated: Jul 05, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-checkout-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shipment-checkout-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-cart-feature.md deleted file mode 100644 index 6a7551798ac..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-cart-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Shipment Cart feature -description: This guide provides step-by-step instruction on integrating Shipment + Cart feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-cart-feature-integration -originalArticleId: a5618db0-4ee1-462e-8165-aedc13881e07 -redirect_from: - - /2021080/docs/shipment-cart-feature-integration - - /2021080/docs/en/shipment-cart-feature-integration - - /docs/shipment-cart-feature-integration - - /docs/en/shipment-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202204.0/shipment-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202307.0/shipment-cart-feature-integration.html - -related: - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html ---- - - - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md b/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md deleted file mode 100644 index 6c7133c95a7..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Shipment Product Offer Service Points Availability feature -description: Learn how to integrate the Shipment Product Offer Service Points Availability feature feature into your project -last_updated: Sep 21, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md b/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md deleted file mode 100644 index 536270bed5f..00000000000 --- a/docs/pbc/all/carrier-management/202410.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Shipment + Service Points feature -description: Learn how to integrate the Shipment + Service Points feature into your project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-shipment-service-points-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md b/docs/pbc/all/carrier-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md deleted file mode 100644 index d0cd42f559d..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Shipment + Customer Account Management feature -description: Learn how to integrate the Shipment + Customer Account Management feature into your project -last_updated: July 31, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-customer-account-management-feature.md %} diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md b/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md deleted file mode 100644 index 127000980ab..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Glue API: Add shipment types" -description: Learn how to add shipment types using Glue API in Spryker Cloud Commerce OS, enabling tailored shipping options for diverse business needs. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you add shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Add a shipment type point - -*** -`POST` **/service-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -Request sample: `POST https://glue-backend.mysprykershop.com/shipment-types` - -```json -{ - "data": { - "type": "shipment-types", - "attributes": { - "name": "Locker pickup", - "key": "l-pickup", - "isActive": "true", - "stores": ["DE", "AT"] - } - } -} -``` - -| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| name | String | ✓ | You will use it as a reference when adding shipment types to offers in the Merchant portal. | -| key | String | ✓ | Unique identifier of the shipment type. | -| isActive | Boolean | ✓ | Defines if the shipment type is active. You can only add active shipment types to offers. | -| stores | Object | ✓ | Defines the stores the shipment type is to be available for. | - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "shipment-types", - "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", - "attributes": { - "name": "Locker pickup", - "key": "l-pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" - } - } -} -``` - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5502 | A shipment type with the same key already exists. | - - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md b/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md deleted file mode 100644 index 7ad3bbf500f..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: "Glue API: Retrieve shipment types" -description: Learn how to retrieve shipment types using Glue API in Spryker Cloud Commerce OS, providing access to shipment type data. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you retrieve shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Retrieve shipment types - -*** -`GET` **/shipment-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - - -| REQUEST | API TYPE | USAGE | -| --- | --- | --- | -| `GET https://glue-backend.mysprykershop.com/shipment-types` | Backend | Retrieve all shipment types. | -| `GET https://glue.mysprykershop.com/shipment-types` | Storefront | Retrieve all shipment types. | - - - - -### Response - -
      - Backend: Retrieve shipment types - -```json -{ - "data": [ - { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - }, - { - "type": "shipment-types", - "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", - "attributes": { - "name": "Delivery", - "key": "delivery", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" - } - } - ], - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types" - } -} -``` - -
      - -
      - Storefront: Retrieve shipment types - -```json -{ - "data": [ - { - "type": "shipment-types", - "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", - "attributes": { - "name": "Delivery", - "key": "delivery" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" - } - }, - { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } - ], - "links": { - "self": "https://glue.mysprykershop.com/shipment-types" - } -} -``` - -
      - - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - - - -## Retrieve a shipment type - -*** -`GET` {% raw %}**/shipment-types/*{{shipment_type_id}}***{% endraw %} -*** - -| PATH PARAMETER | DESCRIPTION | -| --- | --- | -| {% raw %}***{{shipment_type_id}}***{% endraw %} | ID of a shipment type to retrieve. To get it, [add a shipment type](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.html) or [retrieve shipment types](#retrieve-shipment-types). | - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -| REQUEST | API TYPE | USAGE | -| --- | --- | --- | -| `GET https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Backend | Retrieve a shipment type with the specified ID. | -| `GET https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Storefront | Retrieve a shipment type with the specified ID. | - - - -### Response - - -
      - Backend: Retrieve a shipment typed with the specified ID - -```json -{ - "data": { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } -} -``` - -
      - -
      - Storefront: Retrieve a shipment typed with the specified ID - -```json -{ - "data": { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } -} -``` - -
      - - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5501 | The shipment type with the specified ID doesn't exist. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md b/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md deleted file mode 100644 index 5180e2f6457..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Glue API: Update shipment types" -description: Learn how to update shipment types using Glue API in Spryker Cloud Commerce OS, enabling flexibility and customization of your shipment types. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you update shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Update a shipment type - -*** -`PATCH` **/shipment-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -Request sample: `PATCH https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d` - -```json -{ - "data": { - "type": "shipment-types", - "attributes": { - "name": "Curbside pickup", - "key": "c-pickup", - "isActive": "false", - "stores": ["DE", "AT"] - } - } -} -``` - -| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| name | String | | You will use it as a reference when adding shipment types to offers in the Merchant portal. | -| key | String | | Unique identifier of the shipment type. | -| isActive | Boolean | | Defines if the shipment type is active. You can only add active shipment types to offers. | -| stores | Object | | Defines the stores the shipment type is to be available for. | - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "shipment-types", - "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", - "attributes": { - "name": "Curbside pickup", - "key": "c-pickup", - "isActive": false, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" - } - } -} -``` - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5501 | The shipment type with the specified ID doesn't exist. | - - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md b/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md deleted file mode 100644 index d1762267c4a..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Shipment + Customer feature -last_updated: Jul 06, 2021 -description: This document describes the process how to integrate Marketplace Shipment + Customer feature into your project -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-customer-feature-integration.html - -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-marketplace-shipment-customer-feature.md %} diff --git a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md deleted file mode 100644 index 1ecace95ce3..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Shipment + Cart feature -description: This document describes the process how to integrate Marketplace Shipment and cart feature into your project -last_updated: Jun 25, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/201907.0/marketplace-shipment-cart-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202005.0/marketplace-shipment-cart-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-cart-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md b/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md deleted file mode 100644 index d6ab0d0d181..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Shipment + Checkout feature -description: This document describes the process how to integrate Marketplace Shipment + Checkout feature into your project -last_updated: Jul 05, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-checkout-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shipment-checkout-feature.md %} diff --git a/docs/pbc/all/carrier-management/202507.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md b/docs/pbc/all/carrier-management/202507.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md deleted file mode 100644 index 536270bed5f..00000000000 --- a/docs/pbc/all/carrier-management/202507.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Shipment + Service Points feature -description: Learn how to integrate the Shipment + Service Points feature into your project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-shipment-service-points-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md b/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md deleted file mode 100644 index 43159ce4fef..00000000000 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Import file details: shipment.csv" -description: Learn how to import shipment data using the shipment.csv file in Spryker, facilitating smooth integration of shipping information for efficient carrier management. -last_updated: Jun 23, 2021 -template: data-import-template -originalLink: https://documentation.spryker.com/2021080/docs/file-details-shipmentcsv -originalArticleId: 213aeaa8-3dd8-43da-870a-5f1174b640e2 -redirect_from: - - /docs/scos/dev/data-import/201903.0/data-import-categories/commerce-setup/file-details-shipment.csv.html - - /docs/scos/dev/data-import/201907.0/data-import-categories/commerce-setup/file-details-shipment.csv.html - - /docs/scos/dev/data-import/202204.0/data-import-categories/commerce-setup/file-details-shipment.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-shipment.csv.html - - /docs/pbc/all/carrier-management/202311.0/import-and-export-data/file-details-shipment.csv.html - - /docs/pbc/all/carrier-management/202311.0/base-shop/import-and-export-data/file-details-shipment.csv.html - - /docs/pbc/all/carrier-management/202204.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html -related: - - title: Execution order of data importers in Demo Shop - link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html ---- - -This document describes the `shipment.csv` file to configure the [shipment](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) information in your Spryker Demo Shop. - -To import the file, run - -```bash -data:import:shipment -``` - -## Import file parameters - - - -| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | -| --- | --- | --- | --- | --- | -| shipment_method_key| ✓ | String | | The identifier of the shipment method. | -| name| ✓ | String | | The name of the shipment method. | -| carrier | ✓ | String | | The name of the shipment carrier. | -| taxSetName | ✓ | String | | The name of the tax set. | -| avalara_tax_code | | String | | [Avalara tax code](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html#avalara-system-for-automated-tax-compliance) for automated tax calculation. | - - - - - -## Import template file and content example - - - -| FILE | DESCRIPTION | -| --- | --- | -| [template_shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/202109.0/Template_shipment.csv) | Import file template with headers only. | -| [shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/202109.0/shipment.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md b/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md deleted file mode 100644 index 127000980ab..00000000000 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Glue API: Add shipment types" -description: Learn how to add shipment types using Glue API in Spryker Cloud Commerce OS, enabling tailored shipping options for diverse business needs. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you add shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Add a shipment type point - -*** -`POST` **/service-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -Request sample: `POST https://glue-backend.mysprykershop.com/shipment-types` - -```json -{ - "data": { - "type": "shipment-types", - "attributes": { - "name": "Locker pickup", - "key": "l-pickup", - "isActive": "true", - "stores": ["DE", "AT"] - } - } -} -``` - -| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| name | String | ✓ | You will use it as a reference when adding shipment types to offers in the Merchant portal. | -| key | String | ✓ | Unique identifier of the shipment type. | -| isActive | Boolean | ✓ | Defines if the shipment type is active. You can only add active shipment types to offers. | -| stores | Object | ✓ | Defines the stores the shipment type is to be available for. | - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "shipment-types", - "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", - "attributes": { - "name": "Locker pickup", - "key": "l-pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" - } - } -} -``` - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5502 | A shipment type with the same key already exists. | - - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md b/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md deleted file mode 100644 index 7ad3bbf500f..00000000000 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: "Glue API: Retrieve shipment types" -description: Learn how to retrieve shipment types using Glue API in Spryker Cloud Commerce OS, providing access to shipment type data. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you retrieve shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Retrieve shipment types - -*** -`GET` **/shipment-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - - -| REQUEST | API TYPE | USAGE | -| --- | --- | --- | -| `GET https://glue-backend.mysprykershop.com/shipment-types` | Backend | Retrieve all shipment types. | -| `GET https://glue.mysprykershop.com/shipment-types` | Storefront | Retrieve all shipment types. | - - - - -### Response - -
      - Backend: Retrieve shipment types - -```json -{ - "data": [ - { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - }, - { - "type": "shipment-types", - "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", - "attributes": { - "name": "Delivery", - "key": "delivery", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" - } - } - ], - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types" - } -} -``` - -
      - -
      - Storefront: Retrieve shipment types - -```json -{ - "data": [ - { - "type": "shipment-types", - "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", - "attributes": { - "name": "Delivery", - "key": "delivery" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" - } - }, - { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } - ], - "links": { - "self": "https://glue.mysprykershop.com/shipment-types" - } -} -``` - -
      - - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - - - -## Retrieve a shipment type - -*** -`GET` {% raw %}**/shipment-types/*{{shipment_type_id}}***{% endraw %} -*** - -| PATH PARAMETER | DESCRIPTION | -| --- | --- | -| {% raw %}***{{shipment_type_id}}***{% endraw %} | ID of a shipment type to retrieve. To get it, [add a shipment type](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.html) or [retrieve shipment types](#retrieve-shipment-types). | - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -| REQUEST | API TYPE | USAGE | -| --- | --- | --- | -| `GET https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Backend | Retrieve a shipment type with the specified ID. | -| `GET https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Storefront | Retrieve a shipment type with the specified ID. | - - - -### Response - - -
      - Backend: Retrieve a shipment typed with the specified ID - -```json -{ - "data": { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup", - "isActive": true, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } -} -``` - -
      - -
      - Storefront: Retrieve a shipment typed with the specified ID - -```json -{ - "data": { - "type": "shipment-types", - "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", - "attributes": { - "name": "Pickup", - "key": "pickup" - }, - "links": { - "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" - } - } -} -``` - -
      - - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5501 | The shipment type with the specified ID doesn't exist. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md b/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md deleted file mode 100644 index 5180e2f6457..00000000000 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Glue API: Update shipment types" -description: Learn how to update shipment types using Glue API in Spryker Cloud Commerce OS, enabling flexibility and customization of your shipment types. -last_updated: Nov 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you update shipment types. - -## Installation - -[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) - -## Update a shipment type - -*** -`PATCH` **/shipment-types** -*** - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -|-|-|-|-| -| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | - -Request sample: `PATCH https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d` - -```json -{ - "data": { - "type": "shipment-types", - "attributes": { - "name": "Curbside pickup", - "key": "c-pickup", - "isActive": "false", - "stores": ["DE", "AT"] - } - } -} -``` - -| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| name | String | | You will use it as a reference when adding shipment types to offers in the Merchant portal. | -| key | String | | Unique identifier of the shipment type. | -| isActive | Boolean | | Defines if the shipment type is active. You can only add active shipment types to offers. | -| stores | Object | | Defines the stores the shipment type is to be available for. | - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "shipment-types", - "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", - "attributes": { - "name": "Curbside pickup", - "key": "c-pickup", - "isActive": false, - "stores": [ - "DE", - "AT" - ] - }, - "links": { - "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" - } - } -} -``` - -{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} - - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 5501 | The shipment type with the specified ID doesn't exist. | - - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202512.0/unified-commerce/install-features/install-the-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202512.0/unified-commerce/install-features/install-the-shipment-cart-feature.md deleted file mode 100644 index 29f2469152e..00000000000 --- a/docs/pbc/all/carrier-management/202512.0/unified-commerce/install-features/install-the-shipment-cart-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Shipment Cart feature -description: This guide provides step-by-step instruction on integrating Shipment + Cart feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-cart-feature-integration -originalArticleId: a5618db0-4ee1-462e-8165-aedc13881e07 -redirect_from: - - /2021080/docs/shipment-cart-feature-integration - - /2021080/docs/en/shipment-cart-feature-integration - - /docs/shipment-cart-feature-integration - - /docs/en/shipment-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202204.0/shipment-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202307.0/shipment-cart-feature-integration.html -related: - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html ---- - - - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/add-shipment-methods.md b/docs/pbc/all/carrier-management/202602.0/base-shop/add-shipment-methods.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/add-shipment-methods.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/add-shipment-methods.md diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/domain-model-and-relationships/shipment-method-entities-in-the-database-reference-information.md b/docs/pbc/all/carrier-management/202602.0/base-shop/domain-model-and-relationships/shipment-method-entities-in-the-database-reference-information.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/domain-model-and-relationships/shipment-method-entities-in-the-database-reference-information.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/domain-model-and-relationships/shipment-method-entities-in-the-database-reference-information.md diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/extend-and-customize/shipment-method-plugins-reference-information.md b/docs/pbc/all/carrier-management/202602.0/base-shop/extend-and-customize/shipment-method-plugins-reference-information.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/extend-and-customize/shipment-method-plugins-reference-information.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/extend-and-customize/shipment-method-plugins-reference-information.md diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-carrier-management-data.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-carrier-management-data.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-carrier-management-data.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-carrier-management-data.md diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-shipment-type.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-shipment-type.csv.md new file mode 100644 index 00000000000..84a03231637 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-shipment-type.csv.md @@ -0,0 +1,36 @@ +--- +title: "Import file details: shipment_method_shipment_type.csv" +description: This document describes the shipment_method_shipment_type.csv file to configure the shipment information in your Spryker Demo Shop. +template: data-import-template +last_updated: May 23, 2023 +redirect_from: + - /docs/pbc/all/carrier-management/202311.0/base-shop/import-and-export-data/file-details-shipment-method-shipment-type.csv.html + - /docs/pbc/all/carrier-management/202311.0/unified-commerce/import-and-export-data/import-file-details-shipment-type.csv.html +--- + +This document describes the `shipment_method_shipment_type.csv` file to configure the [shipment method](/docs/pbc/all/carrier-management/base-shop/shipment-feature-overview.html) and store information in your Spryker Demo Shop. + +## Import file dependencies + +- [`shipment.csv`](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-shipment.csv.html) +- [`shipment-type.csv`](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-shipment-type.csv.html) + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +|---|---|---|---|---| +| shipment_method_key | ✓ | string | | Key of the existing shipping method. | +| shipment_type_key | ✓ | string | | Key of the existing shipping type. | + +## Import file template and content example + +| FILE | DESCRIPTION | +|---|---| +| [`shipment_method_shipment_type.csv` template](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/carrier-management/base-shop/import-and-export-data/file-details-shipment-method-shipment-type.csv.md/template_shipment_method_shipment_type.csv) | Import file template with headers only. | +| [`shipment_method_shipment_type.csv`](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/carrier-management/base-shop/import-and-export-data/file-details-shipment-method-shipment-type.csv.md/shipment_method_shipment_type.csv) | Exemplary import file with the Demo Shop data. | + +## Import file command + +```bash +data:import:shipment-method-shipment-type +``` diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md similarity index 95% rename from docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md index ca5d023e250..68ab85a9987 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-shipment-method-storecsv originalArticleId: 0cfd5942-817e-4ad6-bb79-4d854ca9979b redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-method-store.csv.html - /docs/scos/dev/data-import/202204.0/data-import-categories/commerce-setup/file-details-shipment-method-store.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-shipment-method-store.csv.html - /docs/pbc/all/carrier-management/202311.0/import-and-export-data/file-details-shipment-method-store.csv.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md similarity index 95% rename from docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md index 8d7fba712f6..4996faf61d6 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.md @@ -6,7 +6,8 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-shipment-pricecsv originalArticleId: 5a755c1f-20a7-42d0-a1ac-30f4b8586351 redirect_from: - - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-shipment-price.csv.html + - /docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-shipment-price.csv.html - /docs/pbc/all/carrier-management/202311.0/import-and-export-data/file-details-shipment-price.csv.html - /docs/pbc/all/carrier-management/202311.0/base-shop/import-and-export-data/file-details-shipment-price.csv.html - /docs/pbc/all/carrier-management/202204.0/base-shop/import-and-export-data/import-file-details-shipment-price.csv.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-type-store.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-type-store.csv.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment-type-store.csv.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-type-store.csv.md diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-type.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-type.csv.md new file mode 100644 index 00000000000..2128e0ae656 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment-type.csv.md @@ -0,0 +1,32 @@ +--- +title: "Import file details: shipment_type.csv" +description: This document describes the shipment_type.csv file to configure the shipment information in your Spryker Demo Shop. +template: data-import-template +last_updated: May 23, 2023 +redirect_from: + - /docs/pbc/all/carrier-management/202311.0/base-shop/import-and-export-data/file-details-shipment-type.csv.html +--- + +This document describes the `shipment_type.csv` file to configure the [shipment method](/docs/pbc/all/carrier-management/base-shop/shipment-feature-overview.html) and store information in your Spryker Demo Shop. + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +|---|---|---|---|---| +| key | ✓ | string | | Key for the shipment type. | +| name | ✓ | string | | Name for the shipment type. | +| is_active | ✓ | string | | Status of the shipment type. | + + +## Import file template and content example + +| FILE | DESCRIPTION | +|---|---| +| [`shipment_type.csv` template](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/carrier-management/base-shop/import-and-export-data/file-details-shipment-type.csv.md/shipment_type.csv) | Import file template with headers only. | +| [`shipment.csv`](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/carrier-management/base-shop/import-and-export-data/file-details-shipment-type.csv.md/template_shipment_type.csv) | Exemplary import file with the Demo Shop data. | + +## Import file command + +```bash +data:import:shipment-type +``` diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md new file mode 100644 index 00000000000..26e68157a06 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md @@ -0,0 +1,53 @@ +--- +title: "Import file details: shipment.csv" +description: Learn how to import shipment data using the shipment.csv file in Spryker, facilitating smooth integration of shipping information for efficient carrier management. +last_updated: Jun 23, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/file-details-shipmentcsv +originalArticleId: 213aeaa8-3dd8-43da-870a-5f1174b640e2 +redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html + - /docs/scos/dev/data-import/201903.0/data-import-categories/commerce-setup/file-details-shipment.csv.html + - /docs/scos/dev/data-import/201907.0/data-import-categories/commerce-setup/file-details-shipment.csv.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/commerce-setup/file-details-shipment.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-shipment.csv.html + - /docs/pbc/all/carrier-management/202311.0/import-and-export-data/file-details-shipment.csv.html + - /docs/pbc/all/carrier-management/202311.0/base-shop/import-and-export-data/file-details-shipment.csv.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html +related: + - title: Execution order of data importers in Demo Shop + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html +--- + +This document describes the `shipment.csv` file to configure the [shipment](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) information in your Spryker Demo Shop. + +To import the file, run + +```bash +data:import:shipment +``` + +## Import file parameters + + + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| shipment_method_key| ✓ | String | | The identifier of the shipment method. | +| name| ✓ | String | | The name of the shipment method. | +| carrier | ✓ | String | | The name of the shipment carrier. | +| taxSetName | ✓ | String | | The name of the tax set. | +| avalara_tax_code | | String | | [Avalara tax code](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html#avalara-system-for-automated-tax-compliance) for automated tax calculation. | + + + + + +## Import template file and content example + + + +| FILE | DESCRIPTION | +| --- | --- | +| [template_shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/202109.0/Template_shipment.csv) | Import file template with headers only. | +| [shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/202109.0/shipment.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md new file mode 100644 index 00000000000..c319208bb0e --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.md @@ -0,0 +1,22 @@ +--- +title: Install the Shipment + Approval Process feature +description: Learn how to install the shipment approval process feature in Spryker Cloud Commerce OS, ensuring efficient approval workflows for managing shipment processing. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shipment-approval-process-feature-integration +originalArticleId: ac858362-21ea-4a7a-8369-b82cee1cc226 +redirect_from: + - /2021080/docs/shipment-approval-process-feature-integration + - /2021080/docs/en/shipment-approval-process-feature-integration + - /docs/shipment-approval-process-feature-integration + - /docs/en/shipment-approval-process-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/shipment-approval-process-feature-integration.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html +related: + - title: Install the Approval Process feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html + - title: Install the Shipment feature + link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-approval-process-feature.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md new file mode 100644 index 00000000000..ef3bcb5d196 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.md @@ -0,0 +1,23 @@ +--- +title: Install the Shipment + Cart feature +description: This guide provides step-by-step instruction on integrating Shipment and Cart feature into a Spryker-based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shipment-cart-feature-integration +originalArticleId: a5618db0-4ee1-462e-8165-aedc13881e07 +redirect_from: + - /2021080/docs/shipment-cart-feature-integration + - /2021080/docs/en/shipment-cart-feature-integration + - /docs/shipment-cart-feature-integration + - /docs/en/shipment-cart-feature-integration + - /docs/scos/dev/feature-integration-guides/202204.0/shipment-cart-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/shipment-cart-feature-integration.html + - /docs/pbc/all/carrier-management/202311.0/install-and-upgrade/install-the-shipment-feature.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-cart-feature.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html +related: + - title: Install the Shipment feature + link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md new file mode 100644 index 00000000000..d3696d4c80e --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Shipment + Customer Account Management feature +description: Learn how to integrate the Shipment + Customer Account Management feature into your project +last_updated: July 31, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-customer-account-management-feature.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md new file mode 100644 index 00000000000..b81881f3cbe --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.md @@ -0,0 +1,26 @@ +--- +title: Install the Shipment feature +description: Learn how to integrate the Shipment Back Office UI, Delivery method per store and Shipment data import functionalities in your project. +last_updated: Aug 30, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shipment-feature-integration +originalArticleId: 593f9273-8a34-4a11-afdf-a21e7e74a57b +redirect_from: + - /2021080/docs/shipment-feature-integration + - /2021080/docs/en/shipment-feature-integration + - /docs/shipment-feature-integration + - /docs/en/shipment-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/shipment-feature-integration.html + - /docs/pbc/all/carrier-management/202311.0/unified-commerce/enhanced-click-and-collect/install-and-upgrade/install-the-shipment-feature.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html + - /docs/scos/dev/feature-integration-guides/202001.0/shipment-feature-integration.html +related: + - title: Install the Shipment Glue API + link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html + - title: Shipment feature overview + link: docs/pbc/all/carrier-management/page.version/base-shop/shipment-feature-overview.html + - title: Install the Shipment + Approval Process feature + link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-feature.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md new file mode 100644 index 00000000000..70dd7f119b2 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md @@ -0,0 +1,29 @@ +--- +title: Install the Shipment Glue API +description: Learn how to install the Shipment Glue API in Spryker Cloud Commerce OS, enabling seamless integration between shipment services and enhancing order fulfillment workflows. +last_updated: Dec 14, 2022 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-shipment-feature-integration +originalArticleId: a324452c-5bf0-49f9-a6d8-fd59abf3b414 +redirect_from: + - /2021080/docs/glue-api-shipment-feature-integration + - /2021080/docs/en/glue-api-shipment-feature-integration + - /docs/glue-api-shipment-feature-integration + - /docs/en/glue-api-shipment-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-shipment-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-shipment-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-shipment-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-shipment-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shipment-feature-integration.html + - /docs/pbc/all/carrier-management/202311.0/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.html +related: + - title: Install the Shipment feature + link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html + - title: Check out purchases + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html + - title: Retrieving orders + link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shipment-glue-api.md %} diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipment-module.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipment-module.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipment-module.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipment-module.md diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcartconnector-module.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcartconnector-module.md new file mode 100644 index 00000000000..fbeb4840a0f --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcartconnector-module.md @@ -0,0 +1,28 @@ +--- +title: Upgrade the ShipmentCartConnector module +description: Use the guide to learn how to update the ShipmentCartConnector module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shipment-cart-connector +originalArticleId: be561deb-56c5-42d3-982f-d0c6f756f313 +redirect_from: + - /2021080/docs/mg-shipment-cart-connector + - /2021080/docs/en/mg-shipment-cart-connector + - /docs/mg-shipment-cart-connector + - /docs/en/mg-shipment-cart-connector + - /v4/docs/mg-shipment-cart-connector + - /v4/docs/en/mg-shipment-cart-connector + - /v5/docs/mg-shipment-cart-connector + - /v5/docs/en/mg-shipment-cart-connector + - /v6/docs/mg-shipment-cart-connector + - /v6/docs/en/mg-shipment-cart-connector + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-shipmentcartconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-shipmentcartconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-shipmentcartconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-shipmentcartconnector.html + - /docs/scos/dev/module-migration-guides/202204.0/migration-guide-shipmentcartconnector.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shipmentcartconnector.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcartconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shipmentcartconnector-module.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcheckoutconnector-module.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcheckoutconnector-module.md new file mode 100644 index 00000000000..1daffb2bc9f --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcheckoutconnector-module.md @@ -0,0 +1,13 @@ +--- +title: Upgrade the ShipmentCheckoutConnector module +description: Use the guide to learn how to update the ShipmentCheckoutConnector module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shipment-checkout-connector +originalArticleId: dfb849a9-6f08-4091-ab6d-87f097eb7811 +redirect_from: + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shipmentcheckoutconnector.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentcheckoutconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shipmentcheckoutconnector-module.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentdiscountconnector-module.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentdiscountconnector-module.md new file mode 100644 index 00000000000..3c7aff58445 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentdiscountconnector-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the ShipmentDiscountConnector module +description: Use the guide to learn how to update the ShipmentDiscountConnector module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shipment-discount-connector +originalArticleId: 6f3f796a-c580-4935-ba29-0b9076b09027 +redirect_from: + - /2021080/docs/mg-shipment-discount-connector + - /2021080/docs/en/mg-shipment-discount-connector + - /docs/mg-shipment-discount-connector + - /docs/en/mg-shipment-discount-connector + - /v1/docs/mg-shipment-discount-connector + - /v1/docs/en/mg-shipment-discount-connector + - /v2/docs/mg-shipment-discount-connector + - /v2/docs/en/mg-shipment-discount-connector + - /v3/docs/mg-shipment-discount-connector + - /v3/docs/en/mg-shipment-discount-connector + - /v4/docs/mg-shipment-discount-connector + - /v4/docs/en/mg-shipment-discount-connector + - /v5/docs/mg-shipment-discount-connector + - /v5/docs/en/mg-shipment-discount-connector + - /v6/docs/mg-shipment-discount-connector + - /v6/docs/en/mg-shipment-discount-connector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-shipmentdiscountconnector.html + - /module_migration_guides/mg-shipment-discount-connector.htm + - /docs/scos/dev/module-migration-guides/202204.0/migration-guide-shipmentdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shipmentdiscountconnector.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentdiscountconnector-module.html + +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shipmentdiscountconnector-module.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentgui-module.md b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentgui-module.md new file mode 100644 index 00000000000..dd1cd549b64 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentgui-module.md @@ -0,0 +1,13 @@ +--- +title: Upgrade the ShipmentGui module +description: Learn how to upgrade the ShipmentGui module in Spryker Cloud Commerce OS to enhance the shipment management interface +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shipment-gui +originalArticleId: 2225c9ac-ef76-456b-b6f3-a425521eb4ea +redirect_from: + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shipmentgui.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shipmentgui-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shipmentgui-module.md %} diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-carrier-companies.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/add-carrier-companies.md similarity index 95% rename from docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-carrier-companies.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/add-carrier-companies.md index a2aae3dee27..59099814cbf 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-carrier-companies.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/add-carrier-companies.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-a-carrier-company originalArticleId: 7335402c-f389-47c0-952c-59d19580cf37 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-carrier-companies.html - /docs/scos/user/back-office-user-guides/202311.0/administration/delivery-methods/add-carrier-companies.html - /docs/scos/user/back-office-user-guides/202311.0/administration/delivery-methods/creating-carrier-companies.html - /docs/pbc/all/carrier-management/202204.0/base-shop/manage-in-the-back-office/add-carrier-companies.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-delivery-methods.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/add-delivery-methods.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/add-delivery-methods.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/add-delivery-methods.md diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/edit-delivery-methods.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/edit-delivery-methods.md new file mode 100644 index 00000000000..f7ae63e7d60 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/edit-delivery-methods.md @@ -0,0 +1,64 @@ +--- +title: Edit delivery methods +description: Learn how to edit the delivery methods that have been configured in Spryker Cloud Commerce OS Back Office +last_updated: May 31, 2022 +template: back-office-user-guide-template +redirect_from: + - /docs/scos/user/back-office-user-guides/202108.0/administration/delivery-methods/creating-and-managing-delivery-methods.html + - /docs/scos/user/back-office-user-guides/202311.0/administration/delivery-methods/edit-delivery-methods.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/manage-in-the-back-office/edit-delivery-methods.html +--- + +This doc describes how to edit delivery methods. + +## Prerequisites + +1. Go to **Administration > Delivery Methods**. +2. On the **Delivery Methods** page, next to the delivery method you want to edit, click **Edit**. + +## Edit general settings of a delivery method + +1. On the **Edit** page, click the **Configuration** tab. +2. Enter a **NAME**. +3. Select a **CARRIER**. +4. Select an **AVAILABILITY PLUGIN**. +5. Select a **PRICE PLUGIN**. +6. Select a **DELIVERY TIME PLUGIN**. +7. For **IS ACTIVE**, do one of the following: + - To make the delivery method available on the Storefront, select the checkbox. + - To make the delivery method unavailable on the Storefront, clear the checkbox. +8. Click **Save**. + This opens the **Delivery Methods** page with a success message displayed. + +## Edit prices of a delivery method + +1. On the **Edit** page, click the **Price & Tax** tab. +2. Enter the needed prices per needed locales. +3. Select a **TAX SET**. +4. Click **Save**. + This opens the **Delivery Methods** page with a success message displayed. + + +## Edit store relations of a delivery method + +1. On the **Edit** page, click the **Store Relation** tab. +2. For **AVAILABLE IN THE FOLLOWING STORE(S)**, do any of the following: + - Select the checkboxes next to the stores you want to make the method available for. + - Clear the checkboxes next to the stores you want to make the method unavailable for. +3. Click **Save**. + This opens the **Delivery Methods** page with a success message displayed. + +## Reference information: Edit delivery methods + + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| DELIVERY METHOD KEY | The unique identifier of the delivery method. | +| NAME | The name of the delivery method displayed on the Storefront. | +| CARRIER | The carrier company that's handling the delivery of this method. To add one, see [Add carrier companies](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/manage-in-the-back-office/add-carrier-companies.html). | +| AVAILABILITY PLUGIN | The plugin that checks if the delivery method is available for the customer. A developer can create plugins. | +| PRICE PLUGIN | The plugin that calculates the price of delivery. If you select a price plugin, it overrides the prices specified in the **Price & Tax** tab. A developer can create plugins. | +| DELIVERY TIME PLUGIN | The plugin that calculates the estimated delivery time. A developer can create plugins. | +| IS ACTIVE | Defines if customers can choose the delivery method on the Storefront. | +| TAX SET | The tax set used for the price of the method. To create tax sets, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). | +| AVAILABLE IN THE FOLLOWING STORE(S) | Defines for which stores customers can choose the method. | diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/manage-carrier-companies-and-delivery-methods-in-the-back-office.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/manage-carrier-companies-and-delivery-methods-in-the-back-office.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/manage-in-the-back-office/manage-carrier-companies-and-delivery-methods-in-the-back-office.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-in-the-back-office/manage-carrier-companies-and-delivery-methods-in-the-back-office.md diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md similarity index 99% rename from docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md index dedad7f368e..0ff4c9d54b5 100644 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.md @@ -4,6 +4,7 @@ description: Discover how to use Glue API to retrieve shipments and shipment met last_updated: Jul 28, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.html - /docs/pbc/all/carrier-management/202311.0/base-shop/manage-via-glue-api/retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.html - /docs/pbc/all/carrier-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-and-shipment-methods-when-submitting-checkout-data.html --- diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md similarity index 99% rename from docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md index 50342006dfb..c70614168b3 100644 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.md @@ -4,6 +4,7 @@ description: Learn how to use Glue API to retrieve shipment details in orders fo last_updated: Jul 28, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.html - /docs/pbc/all/carrier-management/202311.0/base-shop/manage-via-glue-api/retrieve-shipments-in-orders.html - /docs/pbc/all/carrier-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-in-orders.html --- diff --git a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md similarity index 98% rename from docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md index 3b1bd9c4008..67e711210e1 100644 --- a/docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.md @@ -4,6 +4,7 @@ description: Learn how to use Glue API to retrieve shipment details during check last_updated: July 28, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.html - /docs/pbc/all/carrier-management/manage-via-glue-api/retrieve-shipments-when-checking-out-purchases.html - /docs/pbc/all/carrier-management/202311.0/base-shop/manage-via-glue-api/retrieve-shipments-when-checking-out-purchases.html - /docs/pbc/all/carrier-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-shipments-when-checking-out-purchases.html @@ -12,7 +13,7 @@ redirect_from: This document describes how to retrieve order shipments when checking out through the Glue API. For full information about the endpoint, see [Check out purchases](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) -This endpoint allows finalizing the checkout process by placing an order. After sending a request, the cart is deleted, and you cannot make any changes in the checkout data. Use this endpoint for checkouts that can be performed in one pass or for finalizing a checkout after [Submit checkout data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html). +This endpoint allows finalizing the checkout process by placing an order. After sending a request, the cart is deleted, and you cannot make any changes in the checkout data. Use this endpoint for checkouts that can be performed in one pass or for finalizing a checkout after [Submit checkout data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html). ## Installation diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md new file mode 100644 index 00000000000..3ac5dfb7bde --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.md @@ -0,0 +1,87 @@ +--- +title: "Glue API: Add shipment types" +description: Learn how to add shipment types using Glue API in Spryker Cloud Commerce OS, enabling tailored shipping options for diverse business needs. +last_updated: Nov 23, 2023 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.html +--- + +This endpoint lets you add shipment types. + +## Installation + +[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) + +## Add a shipment type point + +*** +`POST` **/service-types** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | + +Request sample: `POST https://glue-backend.mysprykershop.com/shipment-types` + +```json +{ + "data": { + "type": "shipment-types", + "attributes": { + "name": "Locker pickup", + "key": "l-pickup", + "isActive": "true", + "stores": ["DE", "AT"] + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | ✓ | You will use it as a reference when adding shipment types to offers in the Merchant portal. | +| key | String | ✓ | Unique identifier of the shipment type. | +| isActive | Boolean | ✓ | Defines if the shipment type is active. You can only add active shipment types to offers. | +| stores | Object | ✓ | Defines the stores the shipment type is to be available for. | + + +### Response + +Response sample: + +```json +{ + "data": { + "type": "shipment-types", + "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", + "attributes": { + "name": "Locker pickup", + "key": "l-pickup", + "isActive": true, + "stores": [ + "DE", + "AT" + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" + } + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 5502 | A shipment type with the same key already exists. | + + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md new file mode 100644 index 00000000000..6ff5640d7ca --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.md @@ -0,0 +1,214 @@ +--- +title: "Glue API: Retrieve shipment types" +description: Learn how to retrieve shipment types using Glue API in Spryker Cloud Commerce OS, providing access to shipment type data. +last_updated: Nov 23, 2023 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-retrieve-shipment-types.html +--- + +This endpoint lets you retrieve shipment types. + +## Installation + +[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) + +## Retrieve shipment types + +*** +`GET` **/shipment-types** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | + + +| REQUEST | API TYPE | USAGE | +| --- | --- | --- | +| `GET https://glue-backend.mysprykershop.com/shipment-types` | Backend | Retrieve all shipment types. | +| `GET https://glue.mysprykershop.com/shipment-types` | Storefront | Retrieve all shipment types. | + + + + +### Response + +
      + Backend: Retrieve shipment types + +```json +{ + "data": [ + { + "type": "shipment-types", + "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", + "attributes": { + "name": "Pickup", + "key": "pickup", + "isActive": true, + "stores": [ + "DE", + "AT" + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" + } + }, + { + "type": "shipment-types", + "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", + "attributes": { + "name": "Delivery", + "key": "delivery", + "isActive": true, + "stores": [ + "DE", + "AT" + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" + } + } + ], + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types" + } +} +``` + +
      + +
      + Storefront: Retrieve shipment types + +```json +{ + "data": [ + { + "type": "shipment-types", + "id": "9e1bd563-3106-52d1-9717-18e8d491e3b3", + "attributes": { + "name": "Delivery", + "key": "delivery" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-types/9e1bd563-3106-52d1-9717-18e8d491e3b3" + } + }, + { + "type": "shipment-types", + "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", + "attributes": { + "name": "Pickup", + "key": "pickup" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/shipment-types" + } +} +``` + +
      + + +{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} + + + + +## Retrieve a shipment type + +*** +`GET` {% raw %}**/shipment-types/*{{shipment_type_id}}***{% endraw %} +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{shipment_type_id}}***{% endraw %} | ID of a shipment type to retrieve. To get it, [add a shipment type](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-add-shipment-types.html) or [retrieve shipment types](#retrieve-shipment-types). | + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Authorization | string | For backend API. | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | + +| REQUEST | API TYPE | USAGE | +| --- | --- | --- | +| `GET https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Backend | Retrieve a shipment type with the specified ID. | +| `GET https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef` | Storefront | Retrieve a shipment type with the specified ID. | + + + +### Response + + +
      + Backend: Retrieve a shipment typed with the specified ID + +```json +{ + "data": { + "type": "shipment-types", + "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", + "attributes": { + "name": "Pickup", + "key": "pickup", + "isActive": true, + "stores": [ + "DE", + "AT" + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" + } + } +} +``` + +
      + +
      + Storefront: Retrieve a shipment typed with the specified ID + +```json +{ + "data": { + "type": "shipment-types", + "id": "174d9dc0-55ae-5c4b-a2f2-a419027029ef", + "attributes": { + "name": "Pickup", + "key": "pickup" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-types/174d9dc0-55ae-5c4b-a2f2-a419027029ef" + } + } +} +``` + +
      + + +{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 5501 | The shipment type with the specified ID doesn't exist. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md new file mode 100644 index 00000000000..c4e50e6260e --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.md @@ -0,0 +1,87 @@ +--- +title: "Glue API: Update shipment types" +description: Learn how to update shipment types using Glue API in Spryker Cloud Commerce OS, enabling flexibility and customization of your shipment types. +last_updated: Nov 23, 2023 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/carrier-management/202507.0/base-shop/manage-using-glue-api/manage-shipment-types/glue-api-update-shipment-types.html +--- + +This endpoint lets you update shipment types. + +## Installation + +[Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) + +## Update a shipment type + +*** +`PATCH` **/shipment-types** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Authorization | string | ✓ | Alphanumeric string that authorizes the warehouse user to send requests to protected resources. Get it by [authenticating as a warehouse user](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.html). | + +Request sample: `PATCH https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d` + +```json +{ + "data": { + "type": "shipment-types", + "attributes": { + "name": "Curbside pickup", + "key": "c-pickup", + "isActive": "false", + "stores": ["DE", "AT"] + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | | You will use it as a reference when adding shipment types to offers in the Merchant portal. | +| key | String | | Unique identifier of the shipment type. | +| isActive | Boolean | | Defines if the shipment type is active. You can only add active shipment types to offers. | +| stores | Object | | Defines the stores the shipment type is to be available for. | + + +### Response + +Response sample: + +```json +{ + "data": { + "type": "shipment-types", + "id": "fa575a58-5119-5407-a00b-d1aa01fec63d", + "attributes": { + "name": "Curbside pickup", + "key": "c-pickup", + "isActive": false, + "stores": [ + "DE", + "AT" + ] + }, + "links": { + "self": "https://glue-backend.mysprykershop.com/shipment-types/fa575a58-5119-5407-a00b-d1aa01fec63d" + } + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/shipment-types-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 5501 | The shipment type with the specified ID doesn't exist. | + + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/shipment-cart-feature-overview.md b/docs/pbc/all/carrier-management/202602.0/base-shop/shipment-cart-feature-overview.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/shipment-cart-feature-overview.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/shipment-cart-feature-overview.md diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/shipment-customer-account-management-feature-overview.md b/docs/pbc/all/carrier-management/202602.0/base-shop/shipment-customer-account-management-feature-overview.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/base-shop/shipment-customer-account-management-feature-overview.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/shipment-customer-account-management-feature-overview.md diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/shipment-feature-overview.md b/docs/pbc/all/carrier-management/202602.0/base-shop/shipment-feature-overview.md similarity index 98% rename from docs/pbc/all/carrier-management/202512.0/base-shop/shipment-feature-overview.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/shipment-feature-overview.md index 136d0b76717..33bf4becdeb 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/shipment-feature-overview.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/shipment-feature-overview.md @@ -6,10 +6,11 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/shipment-feature-overview originalArticleId: 9090caf1-5dfb-4b5a-ac10-13f268edab9f redirect_from: - - /docs/scos/user/features/202311.0/shipment-feature-overview.html + - /docs/pbc/all/carrier-management/202512.0/base-shop/shipment-feature-overview.html + - /docs/scos/user/features/202311.0/shipment-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/shipment-feature-walkthrough/shipment-feature-walkthrough.html - /docs/pbc/all/carrier-management/base-shop/shipment-feature-overview.html - - /docs/scos/user/features/202307.0/shipment-feature-overview.html + - /docs/scos/user/features/202307.0/shipment-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202307.0/shipment-feature-walkthrough/shipment-feature-walkthrough.html --- diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paazl.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paazl.md new file mode 100644 index 00000000000..28c3d95672c --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paazl.md @@ -0,0 +1,49 @@ +--- +title: Paazl +description: Connect e-commerce brands and retailers to a wide range of global, national and inner-city delivery carriers by integrating Paazl intot he Spryker-based shop. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/paazl +originalArticleId: 5ec47548-a41e-499a-b14a-c351b6bb6816 +redirect_from: + - /2021080/docs/paazl + - /2021080/docs/en/paazl + - /docs/paazl + - /docs/en/paazl + - /docs/scos/user/technology-partners/202200.0/shipment/paazl.html + - /docs/scos/user/technology-partners/202204.0/shipment/paazl.html + - /docs/scos/user/technology-partners/202311.0/shipment/paazl.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/third-party-integrations/paazl.html +--- + +## Partner Information + +[ABOUT PAAZL](https://paazl.com/) + +When Shipping gets serious. + +Paazl is a multi-carrier platform on a mission to change the world of e-commerce delivery. The Paazl technology connects e-commerce brands and retailers to a wide range of global, national and inner-city delivery carriers. +Through Paazl's solutions we take care of everything delivery related, from dynamic delivery information and Track & Trace notifications in the front-end to customs forms and label generation in the back-end. By implementing Paazl, e-commerce brands can provide their customers with a wide range of delivery options. +In a nutshell, Paazl provides the tools to scale delivery and create more – and better – delivery choices for e-commerce customers. + +YOUR ADVANTAGES: + +- Carrier Management +- Efficiency: All shipping information, labeling and tracking in one place +- Flexibility: Adding and changing carriers and delivery options as needed +- Connectivity: Seamless integration with warehouse and customer service +- Delivery Experience +- Real-time Calculation: Show best delivery option based on order details +- Arrival times: The ETA is based on carrier and custom business rules +- Integration: Easy and fully customizable with REST API + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paqato.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paqato.md new file mode 100644 index 00000000000..125575f7d7b --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/paqato.md @@ -0,0 +1,36 @@ +--- +title: Paqato +description: Offer customer communication and shipping analysis by integrating Paqato into the Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/paqato +originalArticleId: a08912d4-c05c-498a-867b-b4e1d04bd30f +redirect_from: + - /docs/scos/user/technology-partners/202311.0/shipment/paqato.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/third-party-integrations/paqato.html +--- + +## Partner Information + +[ABOUT PAQATO](https://www.paqato.com/) + +Take control of your shipment + +PAQATO is an intelligent solution for customer communication and shipping analysis. With the services of the Münster-based company, mail order companies retain control of the entire customer journey until the goods are delivered in full. By monitoring all shipments in real time, retailers can proactively inform their customers and offer immediate solutions should there be a delay in delivery. In this way, mail order companies offer their customers a unique, well-rounded shopping experience. The communication around the entire purchase takes place exclusively over the channels and with the tonality of the retailer. This has been proven to strengthen the retailer brand, increase customer loyalty through up to 60 percent more consumer touch points and increase customer satisfaction. Proactive communication with customers also reduces customer service workload. Retailers can thus save costs and increase customer satisfaction at the same time. + +YOUR ADVANTAGES: + +- Customer satisfaction and cost reduction through real-time packet monitoring and early identification of shipping problems +- Numerous customer touch points through automated and proactive customer communication in the look & feel of online retailers +- High potential for cross-selling through Track & Trace in the retailer's online shop + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md similarity index 90% rename from docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md index fe175430ba6..a2bea5d7ba4 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.md @@ -4,6 +4,7 @@ description: Learn how to install and configure Seven Senders for Spryker Cloud template: howto-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.html - /docs/scos/dev/technology-partner-guides/202200.0/shipment/seven-senders/installing-and-configuring-seven-senders.html - /docs/scos/dev/technology-partner-guides/202204.0/shipment/seven-senders/installing-and-configuring-seven-senders.html - /docs/scos/dev/technology-partner-guides/202311.0/shipment/seven-senders/installing-and-configuring-seven-senders.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md similarity index 96% rename from docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md index dc06373f884..f6d04f390b1 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.md @@ -4,6 +4,7 @@ description: Learn how to integrate Seven Senders with Spryker Cloud Commerce OS template: howto-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.html - /docs/scos/dev/technology-partner-guides/202311.0/shipment/seven-senders/integrating-seven-senders.html - /docs/pbc/all/carrier-management/202204.0/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md similarity index 92% rename from docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md index ad4eeef463b..8ce02493f14 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.md @@ -4,6 +4,7 @@ description: Learn how to manage Seven Senders API requests in Spryker Cloud Com template: concept-topic-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.html - /docs/scos/dev/technology-partner-guides/202200.0/shipment/seven-senders/seven-senders-api-requests.html - /docs/scos/dev/technology-partner-guides/202204.0/shipment/seven-senders/seven-senders-api-requests.html - /docs/scos/dev/technology-partner-guides/202311.0/shipment/seven-senders/seven-senders-api-requests.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md similarity index 93% rename from docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md index 88990f67b89..3ec77210666 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.md @@ -4,6 +4,7 @@ description: Learn how to configure Seven Senders mappers in Spryker Cloud Comme template: concept-topic-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.html - /docs/scos/dev/technology-partner-guides/202311.0/shipment/seven-senders/seven-senders-mappers.html - /docs/pbc/all/carrier-management/202204.0/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.html diff --git a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md similarity index 94% rename from docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md rename to docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md index f27af2cec89..7df81f2b289 100644 --- a/docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.md @@ -5,6 +5,7 @@ template: concept-topic-template last_updated: Nov 17, 2023 date: May 25, 2022 redirect_from: + - /docs/pbc/all/carrier-management/202512.0/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.html - /docs/scos/dev/technology-partner-guides/202200.0/shipment/seven-senders/seven-senders-persistance-layer.html - /docs/scos/dev/technology-partner-guides/202204.0/shipment/seven-senders/seven-senders-persistance-layer.html - /docs/scos/dev/technology-partner-guides/202311.0/shipment/seven-senders/seven-senders-persistance-layer.html diff --git a/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders.md b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders.md new file mode 100644 index 00000000000..f7181c0eae3 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/base-shop/third-party-integrations/seven-senders/seven-senders.md @@ -0,0 +1,50 @@ +--- +title: Seven Senders +description: Optimize international cross-border shipment by integrating Seven Senders into the Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/sevensenders +originalArticleId: 2c4285af-8248-4624-8e69-4cc5e9e72c7f +redirect_from: + - /docs/scos/user/technology-partners/202311.0/shipment/seven-senders.html + - /docs/pbc/all/carrier-management/202204.0/base-shop/third-party-integrations/seven-senders/seven-senders.html + +--- + +## Partner Information + +[ABOUT SEVEN SENDERS](https://www.sevensenders.com/) + +SEVEN SENDERS optimizes international cross-border shipments by serving as Europe's Leading Delivery Platform. We unite online retailers of all sizes with local premium carriers abroad, thereby achieving faster and cheaper delivery for customers worldwide. In addition, we offer the SaaS-based solution SENDWISE, that brings full transparency into the international parcel flow, offers seamless tracking and a proactive communication with the end customer to provide a unique shopping experience. + +YOUR ADVANTAGES: + +- Seamless integration into the services offered by SEVEN SENDERS +- Full control over the customer experience during the delivery process +- Proactively creating the customer journey during delivery +- Tracking page in the shop design - in no time and without IT support +- Direct delivery updates to the customer: the right information at the right time +- 25% reduction of customer service efforts through proactive customer communication +- Harmonization of shipment data including all shipping providers and warehouse locations +- Access to all premium parcel delivery providers through one platform +- Multi-carrier solution: the optimal carrier for each parcel +- Straightforward connection to the own online shop through our APIs and partner plugins + +## Related Developer guides + +- [Install and configure Seven Senders](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/third-party-integrations/seven-senders/install-and-configure-seven-senders.html) +- [Integrate Seven Senders](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/third-party-integrations/seven-senders/integrate-seven-senders.html) +- [Seven Senders — API requests](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/third-party-integrations/seven-senders/seven-senders-api-requests.html) +- [Seven Senders — Mappers](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/third-party-integrations/seven-senders/seven-senders-mappers.html) +- [Seven Senders — Persistence layer](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/third-party-integrations/seven-senders/seven-senders-persistance-layer.html) + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/carrier-management/202512.0/carrier-management.md b/docs/pbc/all/carrier-management/202602.0/carrier-management.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/carrier-management.md rename to docs/pbc/all/carrier-management/202602.0/carrier-management.md diff --git a/docs/pbc/all/carrier-management/202404.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md similarity index 100% rename from docs/pbc/all/carrier-management/202404.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md rename to docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-marketplace-shipment-customer-feature.md diff --git a/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-marketplace-shipment-feature.md b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-marketplace-shipment-feature.md new file mode 100644 index 00000000000..e2792d81c3b --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-marketplace-shipment-feature.md @@ -0,0 +1,13 @@ +--- +title: Install the Marketplace Shipment feature +last_updated: Jul 05, 2021 +description: This document describes the process how to integrate Marketplace Shipment feature into your Spyrker Marketplace project +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-feature-integration.html +related: + - title: Marketplace Shipment feature walkthrough + link: docs/pbc/all/carrier-management/page.version/marketplace/marketplace-shipment-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-marketplace-shipment-feature.md %} diff --git a/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md new file mode 100644 index 00000000000..45d5ad22216 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-the-marketplace-shipment-cart-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Marketplace Shipment + Cart feature +description: This document describes the process how to integrate Marketplace Shipment and cart feature into your project +last_updated: Jun 25, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/201907.0/marketplace-shipment-cart-feature-integration.html + - /docs/marketplace/dev/feature-integration-guides/202005.0/marketplace-shipment-cart-feature-integration.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-shipment-cart-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shipment-cart-feature.md %} diff --git a/docs/pbc/all/carrier-management/202404.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md b/docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md similarity index 100% rename from docs/pbc/all/carrier-management/202404.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md rename to docs/pbc/all/carrier-management/202602.0/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.md diff --git a/docs/pbc/all/carrier-management/202512.0/marketplace/marketplace-shipment-feature-domain-model-and-relationships.md b/docs/pbc/all/carrier-management/202602.0/marketplace/marketplace-shipment-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/marketplace/marketplace-shipment-feature-domain-model-and-relationships.md rename to docs/pbc/all/carrier-management/202602.0/marketplace/marketplace-shipment-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/carrier-management/202602.0/marketplace/marketplace-shipment-feature-overview.md b/docs/pbc/all/carrier-management/202602.0/marketplace/marketplace-shipment-feature-overview.md new file mode 100644 index 00000000000..4b523358198 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/marketplace/marketplace-shipment-feature-overview.md @@ -0,0 +1,48 @@ +--- +title: Marketplace Shipment feature overview +description: This document contains concept information for the Marketplace Shipment feature. +template: concept-topic-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/user/features/202311.0/marketplace-shipment-feature-overview.html + - /docs/marketplace/dev/feature-walkthroughs/202311.0/marketplace-shipment-feature-walkthrough.html +--- + +The *Marketplace Shipment* feature allows splitting the [marketplace order](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.html) into different shipments based on merchants who will process them. + +A *shipment* is a set of two or more products combined by the same delivery address. + +With the Marketplace Shipment feature, every merchant can define delivery price and expected delivery time, tax sets, and availability of the delivery method per store. Thus, a [marketplace order](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.html) has multiple delivery methods from different merchants. + +## Marketplace Shipment on the Storefront + +In the *Address* checkout step, buyers can define a common delivery address where all the shipments are to be delivered. +Then, in the *Shipment* checkout step, buyers can see that the products are grouped by a merchant into different shipments by default. For each shipment, they can select a shipping method and, optionally, a delivery date. + +![img](https://spryker.s3.eu-central-1.amazonaws.com/docs/Marketplace/user+guides/Features/Marketplace+Shipment/shipment-to-single-address.png) + +Alternatively, buyers can use the **Deliver to multiple addresses** drop-down option to assign a delivery address per cart item. By doing that, even items from the same merchant have separate shipments. + +![img](https://spryker.s3.eu-central-1.amazonaws.com/docs/Marketplace/user+guides/Features/Marketplace+Shipment/deliver-shipment.png) + + +## Marketplace Shipment in the Back Office + +In the Back Office, the shipments are displayed in the **Order Items** section on the **View Order: *[Order ID]*** page. A Marketplace administrator can view them. + +![img](https://spryker.s3.eu-central-1.amazonaws.com/docs/Marketplace/user+guides/Features/Marketplace+Shipment/shipments-back-office.png) + +## Marketplace Shipment in the Merchant Portal + +On the **Order *[Order ID]*** drawer, every merchant can view only the shipment of their product offers and products. + +![img](https://spryker.s3.eu-central-1.amazonaws.com/docs/Marketplace/user+guides/Features/Marketplace+Shipment/shipment-merchant-portal.png) + +## Related Developer documents + +|INSTALLATION GUIDES | +|---------| +| [Install the Marketplace Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-feature.html) | +| [Install the Marketplace Shipment + Cart feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-the-marketplace-shipment-cart-feature.html) | +| [Install the Marketplace Shipment + Customer feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-marketplace-shipment-customer-feature.html) | +| [Install the Marketplace Shipment + Checkout feature](/docs/pbc/all/carrier-management/{{page.version}}/marketplace/install-features/install-the-marketplace-shipment-checkout-feature.html) | diff --git a/docs/pbc/all/carrier-management/202512.0/unified-commerce/file-details-shipment-type-service-type.csv.md b/docs/pbc/all/carrier-management/202602.0/unified-commerce/file-details-shipment-type-service-type.csv.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/unified-commerce/file-details-shipment-type-service-type.csv.md rename to docs/pbc/all/carrier-management/202602.0/unified-commerce/file-details-shipment-type-service-type.csv.md diff --git a/docs/pbc/all/carrier-management/202404.0/unified-commerce/install-features/install-the-shipment-cart-feature.md b/docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-cart-feature.md similarity index 100% rename from docs/pbc/all/carrier-management/202404.0/unified-commerce/install-features/install-the-shipment-cart-feature.md rename to docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-cart-feature.md diff --git a/docs/pbc/all/carrier-management/202512.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md b/docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md rename to docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-product-offer-service-points-availability-feature.md diff --git a/docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md b/docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md new file mode 100644 index 00000000000..bdc0d0c1391 --- /dev/null +++ b/docs/pbc/all/carrier-management/202602.0/unified-commerce/install-features/install-the-shipment-service-points-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Shipment + Service Points feature +description: Learn how to integrate the Shipment + Service Points feature into your project +last_updated: Aug 28, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/carrier-management/202507.0/unified-commerce/install-features/install-the-shipment-service-points-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/install-the-shipment-service-points-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/carrier-management/202512.0/unified-commerce/shipment-service-points-feature-overview.md b/docs/pbc/all/carrier-management/202602.0/unified-commerce/shipment-service-points-feature-overview.md similarity index 100% rename from docs/pbc/all/carrier-management/202512.0/unified-commerce/shipment-service-points-feature-overview.md rename to docs/pbc/all/carrier-management/202602.0/unified-commerce/shipment-service-points-feature-overview.md diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md deleted file mode 100644 index 1718072885e..00000000000 --- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Cart + Non-splittable Products feature -description: The guide describes the process of installing the Cart and Non-splittable Products features into your project -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cart-non-splittable-products-feature-integration -originalArticleId: 13a5637e-1c2a-44d7-96fe-a05aeb187872 -redirect_from: - - /2021080/docs/cart-non-splittable-products-feature-integration - - /2021080/docs/en/cart-non-splittable-products-feature-integration - - /docs/cart-non-splittable-products-feature-integration - - /docs/en/cart-non-splittable-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cart-non-splittable-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md deleted file mode 100644 index 08eec9fb278..00000000000 --- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Cart + Product Group feature -description: Instructions to integrate the Cart + Product group feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md deleted file mode 100644 index 79e066c40bd..00000000000 --- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Multiple Carts + Quick Order feature -description: The Quick Order Feature allows ordering products by entering SKU and quantity on one page. The guide describes how to integrate the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-quick-order-integration -originalArticleId: 4e32040b-3ec9-458c-8122-29d29aa64e45 -redirect_from: - - /2021080/docs/multiple-carts-quick-order-integration - - /2021080/docs/en/multiple-carts-quick-order-integration - - /docs/multiple-carts-quick-order-integration - - /docs/en/multiple-carts-quick-order-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multiple-carts-quick-order-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-quick-order-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-quick-order-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md deleted file mode 100644 index 3f2c454c5e2..00000000000 --- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Multiple Carts + Reorder feature -description: The Reorder feature allows reordering previous orders. This guide will walk you through the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-reorder-feature-integration -originalArticleId: d5e4f165-d6b1-47fc-a008-ee010307c447 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-reorder-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-reorder-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md b/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md deleted file mode 100644 index 3d0b2c1abaf..00000000000 --- a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Quick Add to Cart + Discontinued Products feature -description: Quick Add to Cart + Discontinued Products allow showing products in cart as discontinued. This guide describes how to integrate the feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-discontinued-products-feature-integration -originalArticleId: 9a383479-cd7b-4b57-993c-e0f707cdb015 -redirect_from: - - /2021080/docs/quick-add-to-cart-discontinued-products-feature-integration - - /2021080/docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/quick-add-to-cart-discontinued-products-feature-integration - - /docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-discontinued-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md deleted file mode 100644 index 2fecc69928c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Approval Process feature -description: This guide describes all steps needed to be performed in order to integrate the Approval Process feature into your project. -last_updated: Jun 26, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/approval-process-feature-integration -originalArticleId: 1ba2c034-6c2d-4036-87b8-d2c6bbf5243d -redirect_from: - - /2021080/docs/approval-process-feature-integration - - /2021080/docs/en/approval-process-feature-integration - - /docs/approval-process-feature-integration - - /docs/en/approval-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/approval-process-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/approval-process-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.html - -related: - - title: Install the Quotation Process + Approval Process feature - link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html - - title: Install the Shipment + Approval Process feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-approval-process-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md deleted file mode 100644 index 82bb892284d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Agent Assist feature -description: Learn how to install the Cart Agent Assist feature in Spryker Cloud Commerce OS to enhance cart functionality and provide shopping assistance to customers -last_updated: Jul 6, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-agent-assist-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md deleted file mode 100644 index abe8497d0fb..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart feature + Dynamic Multistore -description: Learn how to install the Cart feature and dynamic multistore in Spryker Cloud Commerce OS. -last_updated: Apr 25, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md deleted file mode 100644 index 669ef14c6e5..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install the Cart feature -description: This guide provides step-by-step instruction for integrating Add product to cart from the Catalog page feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cart-feature-integration -originalArticleId: 77563ea2-8a5a-46c2-97e5-5e1f20267689 -redirect_from: - - /2021080/docs/cart-feature-integration - - /2021080/docs/en/cart-feature-integration - - /docs/cart-feature-integration - - /docs/en/cart-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/cart-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html - -related: - - title: Install the Cart Glue API - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md deleted file mode 100644 index e903c901f9a..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Cart + Non-splittable Products feature -description: The guide describes the process of installing the Cart and Non-splittable Products features into your project -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cart-non-splittable-products-feature-integration -originalArticleId: 13a5637e-1c2a-44d7-96fe-a05aeb187872 -redirect_from: - - /2021080/docs/cart-non-splittable-products-feature-integration - - /2021080/docs/en/cart-non-splittable-products-feature-integration - - /docs/cart-non-splittable-products-feature-integration - - /docs/en/cart-non-splittable-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cart-non-splittable-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md deleted file mode 100644 index 8c9993923c3..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart Notes feature -description: Learn how to integrate the Spryker Cloud Commerce OS Cart Notes feature into a Spryker project. -last_updated: Apr 14, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cart-notes-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md deleted file mode 100644 index 592e6aeaf44..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart + Prices feature -description: The guide walks you through the process of installing the Cart and Prices features in your project. -last_updated: Mar 16, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cart-prices-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md deleted file mode 100644 index 9db609995b6..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Product feature -description: The guide walks you through the process of installing the Product and Cart features in your Spryker Cloud Commerce OS project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md deleted file mode 100644 index 2474d6a2926..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Product Group feature -description: Instructions to integrate the Cart + Product group feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md deleted file mode 100644 index 7f579ead2ec..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Cart + Shipment feature -description: Learn how to install the Spryker Cloud Commerce OS Cart and Shipment feature in to a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html - ---- - - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md deleted file mode 100644 index 857ed6007a6..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Checkout feature -description: Learn how to integrate and install the Spryker Cloud Commerce OS Checkout feature into a Spryker project. -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/checkout-feature-integration -originalArticleId: f18436a4-91c4-41a4-9bf2-65d858764ab6 -redirect_from: - - /2021080/docs/checkout-feature-integration - - /2021080/docs/en/checkout-feature-integration - - /docs/checkout-feature-integration - - /docs/en/checkout-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/checkout-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/checkout-feature-integration.html - - /docs/pbc/all/cart-and-checkout/install-and-upgrade/install-features/install-the-checkout-feature.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html - -related: - - title: Install the Checkout Glue API - link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md deleted file mode 100644 index 7fe89ed0fc4..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Checkout + Non-splittable Products feature -description: The guide walks you through the process of installing the Checkout + Non-splittable Products feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-checkout-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md deleted file mode 100644 index 7e304e56281..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Install the Checkout + Quotation Process feature -description: A guide describing the process of installing the Spryker Cloud Commerce OS Checkout + Quotation process feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/checkout-quotation-process-feature-integration -originalArticleId: ac3280a8-f91d-4b7d-99e3-76cee056f96b -redirect_from: - - /2021080/docs/checkout-quotation-process-feature-integration - - /2021080/docs/en/checkout-quotation-process-feature-integration - - /docs/checkout-quotation-process-feature-integration - - /docs/en/checkout-quotation-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/checkout-quotation-process-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.html - -related: - - title: Install the Quotation Process feature - link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md deleted file mode 100644 index 265025647f1..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Checkout Workflow feature -description: How to install the Spryker Cloud Commerce OS Checkout workflow feature to your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/checkout-workflow-integration -originalArticleId: 6908a9df-3ef3-454a-b135-9c72a350b641 -redirect_from: - - /2021080/docs/checkout-workflow-integration - - /2021080/docs/en/checkout-workflow-integration - - /docs/checkout-workflow-integration - - /docs/en/checkout-workflow-integration - - /docs/scos/dev/feature-integration-guides/202311.0/checkout-workflow-integration-guide.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-checkout-workflow.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index 77bac448c22..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contract Requests feature -description: The guide walks you through the process of installing the Comments + Merchant Contract Requests feature into a Spryker project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md deleted file mode 100644 index e6e82d148f5..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Spryker Marketplace Comments + Merchant Contracts feature into the project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md deleted file mode 100644 index 256c34f667b..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Comments + Order Management feature -description: The guide walks you through the process of installing the Comments + Order Management feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/comments-order-management-feature-integration -originalArticleId: 2bf29780-07d5-4518-8510-77b7ba549836 -redirect_from: - - /2021080/docs/comments-order-management-feature-integration - - /2021080/docs/en/comments-order-management-feature-integration - - /docs/comments-order-management-feature-integration - - /docs/en/comments-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/comments-order-management-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-comments-order-management-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md deleted file mode 100644 index af82268c017..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Comments + Persistent Cart feature -description: The guide walks you through the process of integrating the Comments + Persistent Cart feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/comments-persistent-cart-feature-integration -originalArticleId: 74b61354-cc45-4748-b62a-8738a0e6e1bf -redirect_from: - - /2021080/docs/comments-persistent-cart-feature-integration - - /2021080/docs/en/comments-persistent-cart-feature-integration - - /docs/comments-persistent-cart-feature-integration - - /docs/en/comments-persistent-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/comments-persistent-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-persistent-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md deleted file mode 100644 index 86e2528516c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Spryker Core Back Office feature -description: The guide walks you through the process of installing the Comments + Spryker Core Back Office feature into a Spryker Cloud Commerce OS project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md deleted file mode 100644 index 3448b0eb374..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Multiple Carts feature -description: Multiple Carts allows customers to manage multiple shopping carts in one account. The guide describes how to integrate the feature into your project. -last_updated: Mar 17, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-feature-integration -originalArticleId: bf00a6ba-8484-43af-bfce-e24895c051b7 -redirect_from: - - /2021080/docs/multiple-carts-feature-integration - - /2021080/docs/en/multiple-carts-feature-integration - - /docs/multiple-carts-feature-integration - - /docs/en/multiple-carts-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multiple-carts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html - -related: - - title: Multiple Carts feature overview - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/feature-overviews/multiple-carts-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md deleted file mode 100644 index 36182835e9e..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Multiple Carts + Quick Order feature -description: The Quick Order Feature allows ordering products by entering SKU and quantity on one page. The guide describes how to integrate the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-quick-order-integration -originalArticleId: 4e32040b-3ec9-458c-8122-29d29aa64e45 -redirect_from: - - /2021080/docs/multiple-carts-quick-order-integration - - /2021080/docs/en/multiple-carts-quick-order-integration - - /docs/multiple-carts-quick-order-integration - - /docs/en/multiple-carts-quick-order-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multiple-carts-quick-order-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-quick-order-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-quick-order-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md deleted file mode 100644 index 99e748778c2..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Multiple Carts + Reorder feature -description: The Reorder feature allows reordering previous orders. This guide will walk you through the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-reorder-feature-integration -originalArticleId: d5e4f165-d6b1-47fc-a008-ee010307c447 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-reorder-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-reorder-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md deleted file mode 100644 index dcae89f3d7d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Persistent Cart Sharing feature -description: The guide describes the process of installing the Persistent Cart feature into your project. -last_updated: Jul 23, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/persistent-cart-sharing-feature-integration -originalArticleId: c6f09590-e6e7-45e4-a25b-8612a8c3c5e4 -redirect_from: - - /2021080/docs/persistent-cart-sharing-feature-integration - - /2021080/docs/en/persistent-cart-sharing-feature-integration - - /docs/persistent-cart-sharing-feature-integration - - /docs/en/persistent-cart-sharing-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/persistent-cart-sharing-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-persistent-cart-sharing-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md deleted file mode 100644 index 50f7a10121f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Persistent Cart Sharing + Shared Carts feature -description: The guide walks you through the process of installing the Shared Carts and Persistent Cart Sharing features in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/persisitent-cart-sharing-shared-carts-integration -originalArticleId: 47b52cfb-cbee-4e76-bb2b-37fcc9cdee20 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/persistent-cart-sharing-shared-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-persistent-cart-sharing-shared-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md deleted file mode 100644 index 3d714c29e8c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Quick Add to Cart + Discontinued Products feature -description: Quick Add to Cart + Discontinued Products allow showing products in cart as discontinued. This guide describes how to integrate the feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-discontinued-products-feature-integration -originalArticleId: 9a383479-cd7b-4b57-993c-e0f707cdb015 -redirect_from: - - /2021080/docs/quick-add-to-cart-discontinued-products-feature-integration - - /2021080/docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/quick-add-to-cart-discontinued-products-feature-integration - - /docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-discontinued-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md deleted file mode 100644 index 23d4e321f63..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Quick Add to Cart feature -description: Learn how to integrate and install the Spryker Cloud Commerce OS Quick Add to Cart feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-feature-integration -originalArticleId: c48beede-6189-4a05-9ad3-d3de0bfa5592 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md deleted file mode 100644 index a06801679f4..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Quick Add to Cart + Measurement Units feature -description: Quick Add to Cart + Measurement Units allow selling products by any unit of measure with a click. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-measurement-units-feature-integration -originalArticleId: d6363b3c-4989-4a7e-b223-cc1607fe6dd2 -redirect_from: - - /2021080/docs/quick-order-measurement-units-feature-integration - - /2021080/docs/en/quick-order-measurement-units-feature-integration - - /docs/quick-order-measurement-units-feature-integration - - /docs/en/quick-order-measurement-units-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-measurement-units-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-measurement-units-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-measurement-units-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md deleted file mode 100644 index 67b07807a51..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Quick Add to Cart + Non-splittable Products feature -description: Install the Spryker Cloud Commerce OS Quick Add to Cart and Non-splittable Products features in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-non-splittable-products-feature-integration -originalArticleId: a8357121-3fb0-4b48-92ba-b6a735d9b583 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-non-splittable-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md deleted file mode 100644 index 03a72137dfc..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Quick Add to Cart + Packaging Units feature -description: Quick Add to Cart + Packaging Units allow buying products in different packaging units. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-packaging-units-feature-integration -originalArticleId: 8667c827-6af6-4db7-af01-f10f763b4d83 -redirect_from: - - /2021080/docs/quick-order-packaging-units-feature-integration - - /2021080/docs/en/quick-order-packaging-units-feature-integration - - /docs/quick-order-packaging-units-feature-integration - - /docs/en/quick-order-packaging-units-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-packaging-units-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-packaging-units-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-packaging-units-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md deleted file mode 100644 index dee7e2089db..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Quick Add to Cart + Shopping Lists feature -description: This guide describes how to install the Spryker Quick Add to Cart + Shopping Lists allow creating a shopping list to buy products to your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-shopping-lists-feature-integration -originalArticleId: 97c3b185-b0b0-460d-b3ef-52b557b200db -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-shopping-lists-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-shopping-lists-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md deleted file mode 100644 index 373178d364c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Resource Sharing feature -description: A guide on how to install the Spryker resource sharing feature within your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-resource-sharing-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md deleted file mode 100644 index 56be9d5389d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Shared Carts feature -description: Learn how to install the Spryker Cloud Commerce OS shared carts feature into your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shared-carts-feature-integration -originalArticleId: 1f7146bf-124f-435a-85aa-632c2c2738ca -redirect_from: - - /2021080/docs/shared-carts-feature-integration - - /2021080/docs/en/shared-carts-feature-integration - - /docs/shared-carts-feature-integration - - /docs/en/shared-carts-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/shared-carts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/shared-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html - -related: - - title: Shared Cart feature overview - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/feature-overviews/shared-carts-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shared-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md deleted file mode 100644 index ea2da411686..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Uuid Generation Console feature -description: Learn to install Spryker Uuid Generation Console feature in to your Spryker projects. -last_updated: Jul 4, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202005.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202009.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201811.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202001.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202108.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/uuid-generation-console-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md deleted file mode 100644 index 0b215c4a9fe..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Cart + Configurable Bundle Glue API -description: Learn how to install the Cart + Configurable Bundle Glue API in a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.html - -related: - - title: Install the Configurable Bundle Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-configurable-bundle-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md deleted file mode 100644 index 5fc3f011114..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Cart Glue API -description: A guide on how to install the Spryker Cart API feature in to your projects. -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-cart-feature-integration -originalArticleId: a46d4b97-ad7c-45bd-aef7-23dbfac109c1 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md deleted file mode 100644 index 4422e929325..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Checkout Glue API -description: A guide on how to install the Spryker Checkout glue API feature in to your projects. -template: feature-integration-guide-template -last_updated: Dec 27, 2023 -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-checkout-feature-integration -originalArticleId: f44bd963-7af3-4ce8-8b7a-3c1477880728 - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html -related: - - title: Install the Checkout feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - - title: Update payment data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html - - title: Submit checkout data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html -redirect_from: -- /docs/pbc/all/cart-and-checkout/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-checkout-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md deleted file mode 100644 index 326ef78abfb..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Multiple Carts Glue API -description: The guide walks you through the process of installing the Multiple Carts API feature into the project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/multiple-carts-api-feature-integration-201907 -originalArticleId: 0b3107fb-825e-481e-bb6d-27e13f4a7d0f -redirect_from: - - /v3/docs/multiple-carts-api-feature-integration-201907 - - /v3/docs/en/multiple-carts-api-feature-integration-201907 - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-multiple-carts-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md deleted file mode 100644 index 223db624407..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Shared Carts Glue API -description: A guide on how to install the Spryker Shared Carts glue API feature in to your projects. -last_updated: Jul 4, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shared-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shared-carts-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md deleted file mode 100644 index 06ee7dc1e47..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Offer feature -last_updated: Dec 17, 2020 -description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md deleted file mode 100644 index 08f3375d89f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Options feature -last_updated: Jul 28, 2021 -description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md deleted file mode 100644 index 58a9ebd85bf..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Checkout + Marketplace Product Offer feature -last_updated: May 3, 2021 -description: This document describes the process how to implement the Spryker Marketplace Product Offer + Checkout feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md deleted file mode 100644 index b7a2a06eb0d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Checkout + Marketplace Product Options feature -last_updated: Jul 28, 2021 -description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md deleted file mode 100644 index dbf770e9def..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Marketplace Cart feature -last_updated: Jan 05, 2021 -description: This document describes the process how to integrate the Marketplace Cart integration feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md deleted file mode 100644 index 7d68d8778ac..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Quick Add to Cart + Marketplace Product feature -last_updated: May 16, 2022 -description: This guide describes the process of how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md deleted file mode 100644 index e4d653aef56..00000000000 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Quick Add to Cart + Marketplace Product Offer feature -last_updated: May 16, 2022 -description: This guide describes the process of how to integrate the Marketplace Product Offer + Quick Add to Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md deleted file mode 100644 index 82bb892284d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Agent Assist feature -description: Learn how to install the Cart Agent Assist feature in Spryker Cloud Commerce OS to enhance cart functionality and provide shopping assistance to customers -last_updated: Jul 6, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-agent-assist-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md deleted file mode 100644 index abe8497d0fb..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart feature + Dynamic Multistore -description: Learn how to install the Cart feature and dynamic multistore in Spryker Cloud Commerce OS. -last_updated: Apr 25, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md deleted file mode 100644 index e903c901f9a..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Cart + Non-splittable Products feature -description: The guide describes the process of installing the Cart and Non-splittable Products features into your project -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cart-non-splittable-products-feature-integration -originalArticleId: 13a5637e-1c2a-44d7-96fe-a05aeb187872 -redirect_from: - - /2021080/docs/cart-non-splittable-products-feature-integration - - /2021080/docs/en/cart-non-splittable-products-feature-integration - - /docs/cart-non-splittable-products-feature-integration - - /docs/en/cart-non-splittable-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cart-non-splittable-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md deleted file mode 100644 index 8c9993923c3..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart Notes feature -description: Learn how to integrate the Spryker Cloud Commerce OS Cart Notes feature into a Spryker project. -last_updated: Apr 14, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cart-notes-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md deleted file mode 100644 index 9db609995b6..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Product feature -description: The guide walks you through the process of installing the Product and Cart features in your Spryker Cloud Commerce OS project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md deleted file mode 100644 index 2474d6a2926..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Cart + Product Group feature -description: Instructions to integrate the Cart + Product group feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md deleted file mode 100644 index 7f579ead2ec..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Cart + Shipment feature -description: Learn how to install the Spryker Cloud Commerce OS Cart and Shipment feature in to a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html - ---- - - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md deleted file mode 100644 index 265025647f1..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Checkout Workflow feature -description: How to install the Spryker Cloud Commerce OS Checkout workflow feature to your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/checkout-workflow-integration -originalArticleId: 6908a9df-3ef3-454a-b135-9c72a350b641 -redirect_from: - - /2021080/docs/checkout-workflow-integration - - /2021080/docs/en/checkout-workflow-integration - - /docs/checkout-workflow-integration - - /docs/en/checkout-workflow-integration - - /docs/scos/dev/feature-integration-guides/202311.0/checkout-workflow-integration-guide.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-checkout-workflow.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index 77bac448c22..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contract Requests feature -description: The guide walks you through the process of installing the Comments + Merchant Contract Requests feature into a Spryker project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md deleted file mode 100644 index e6e82d148f5..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Spryker Marketplace Comments + Merchant Contracts feature into the project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md deleted file mode 100644 index 256c34f667b..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Comments + Order Management feature -description: The guide walks you through the process of installing the Comments + Order Management feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/comments-order-management-feature-integration -originalArticleId: 2bf29780-07d5-4518-8510-77b7ba549836 -redirect_from: - - /2021080/docs/comments-order-management-feature-integration - - /2021080/docs/en/comments-order-management-feature-integration - - /docs/comments-order-management-feature-integration - - /docs/en/comments-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/comments-order-management-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-comments-order-management-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md deleted file mode 100644 index af82268c017..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Comments + Persistent Cart feature -description: The guide walks you through the process of integrating the Comments + Persistent Cart feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/comments-persistent-cart-feature-integration -originalArticleId: 74b61354-cc45-4748-b62a-8738a0e6e1bf -redirect_from: - - /2021080/docs/comments-persistent-cart-feature-integration - - /2021080/docs/en/comments-persistent-cart-feature-integration - - /docs/comments-persistent-cart-feature-integration - - /docs/en/comments-persistent-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/comments-persistent-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-persistent-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md deleted file mode 100644 index 86e2528516c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Comments + Spryker Core Back Office feature -description: The guide walks you through the process of installing the Comments + Spryker Core Back Office feature into a Spryker Cloud Commerce OS project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md deleted file mode 100644 index 36182835e9e..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Multiple Carts + Quick Order feature -description: The Quick Order Feature allows ordering products by entering SKU and quantity on one page. The guide describes how to integrate the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-quick-order-integration -originalArticleId: 4e32040b-3ec9-458c-8122-29d29aa64e45 -redirect_from: - - /2021080/docs/multiple-carts-quick-order-integration - - /2021080/docs/en/multiple-carts-quick-order-integration - - /docs/multiple-carts-quick-order-integration - - /docs/en/multiple-carts-quick-order-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multiple-carts-quick-order-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-quick-order-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-quick-order-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md deleted file mode 100644 index 99e748778c2..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Multiple Carts + Reorder feature -description: The Reorder feature allows reordering previous orders. This guide will walk you through the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-reorder-feature-integration -originalArticleId: d5e4f165-d6b1-47fc-a008-ee010307c447 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-reorder-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-reorder-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md deleted file mode 100644 index dcae89f3d7d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Persistent Cart Sharing feature -description: The guide describes the process of installing the Persistent Cart feature into your project. -last_updated: Jul 23, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/persistent-cart-sharing-feature-integration -originalArticleId: c6f09590-e6e7-45e4-a25b-8612a8c3c5e4 -redirect_from: - - /2021080/docs/persistent-cart-sharing-feature-integration - - /2021080/docs/en/persistent-cart-sharing-feature-integration - - /docs/persistent-cart-sharing-feature-integration - - /docs/en/persistent-cart-sharing-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/persistent-cart-sharing-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-persistent-cart-sharing-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md deleted file mode 100644 index 50f7a10121f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Persistent Cart Sharing + Shared Carts feature -description: The guide walks you through the process of installing the Shared Carts and Persistent Cart Sharing features in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/persisitent-cart-sharing-shared-carts-integration -originalArticleId: 47b52cfb-cbee-4e76-bb2b-37fcc9cdee20 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/persistent-cart-sharing-shared-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-persistent-cart-sharing-shared-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md deleted file mode 100644 index 3d714c29e8c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Quick Add to Cart + Discontinued Products feature -description: Quick Add to Cart + Discontinued Products allow showing products in cart as discontinued. This guide describes how to integrate the feature into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-discontinued-products-feature-integration -originalArticleId: 9a383479-cd7b-4b57-993c-e0f707cdb015 -redirect_from: - - /2021080/docs/quick-add-to-cart-discontinued-products-feature-integration - - /2021080/docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/quick-add-to-cart-discontinued-products-feature-integration - - /docs/en/quick-add-to-cart-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-discontinued-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-discontinued-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md deleted file mode 100644 index 23d4e321f63..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Quick Add to Cart feature -description: Learn how to integrate and install the Spryker Cloud Commerce OS Quick Add to Cart feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-feature-integration -originalArticleId: c48beede-6189-4a05-9ad3-d3de0bfa5592 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md deleted file mode 100644 index a06801679f4..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Quick Add to Cart + Measurement Units feature -description: Quick Add to Cart + Measurement Units allow selling products by any unit of measure with a click. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-measurement-units-feature-integration -originalArticleId: d6363b3c-4989-4a7e-b223-cc1607fe6dd2 -redirect_from: - - /2021080/docs/quick-order-measurement-units-feature-integration - - /2021080/docs/en/quick-order-measurement-units-feature-integration - - /docs/quick-order-measurement-units-feature-integration - - /docs/en/quick-order-measurement-units-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-measurement-units-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-measurement-units-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-measurement-units-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md deleted file mode 100644 index 67b07807a51..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Quick Add to Cart + Non-splittable Products feature -description: Install the Spryker Cloud Commerce OS Quick Add to Cart and Non-splittable Products features in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-non-splittable-products-feature-integration -originalArticleId: a8357121-3fb0-4b48-92ba-b6a735d9b583 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-non-splittable-products-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md deleted file mode 100644 index 03a72137dfc..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Quick Add to Cart + Packaging Units feature -description: Quick Add to Cart + Packaging Units allow buying products in different packaging units. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-order-packaging-units-feature-integration -originalArticleId: 8667c827-6af6-4db7-af01-f10f763b4d83 -redirect_from: - - /2021080/docs/quick-order-packaging-units-feature-integration - - /2021080/docs/en/quick-order-packaging-units-feature-integration - - /docs/quick-order-packaging-units-feature-integration - - /docs/en/quick-order-packaging-units-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-packaging-units-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-packaging-units-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-packaging-units-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md deleted file mode 100644 index dee7e2089db..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Quick Add to Cart + Shopping Lists feature -description: This guide describes how to install the Spryker Quick Add to Cart + Shopping Lists allow creating a shopping list to buy products to your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-shopping-lists-feature-integration -originalArticleId: 97c3b185-b0b0-460d-b3ef-52b557b200db -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-shopping-lists-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-shopping-lists-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md deleted file mode 100644 index 373178d364c..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Resource Sharing feature -description: A guide on how to install the Spryker resource sharing feature within your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-resource-sharing-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md deleted file mode 100644 index ea2da411686..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Uuid Generation Console feature -description: Learn to install Spryker Uuid Generation Console feature in to your Spryker projects. -last_updated: Jul 4, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202005.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202009.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201811.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202001.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202108.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/uuid-generation-console-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md deleted file mode 100644 index 5fc3f011114..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Cart Glue API -description: A guide on how to install the Spryker Cart API feature in to your projects. -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-cart-feature-integration -originalArticleId: a46d4b97-ad7c-45bd-aef7-23dbfac109c1 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-cart-feature-integration.html - - /docs/pbc/all/cart-and-checkout/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md deleted file mode 100644 index 326ef78abfb..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Multiple Carts Glue API -description: The guide walks you through the process of installing the Multiple Carts API feature into the project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/multiple-carts-api-feature-integration-201907 -originalArticleId: 0b3107fb-825e-481e-bb6d-27e13f4a7d0f -redirect_from: - - /v3/docs/multiple-carts-api-feature-integration-201907 - - /v3/docs/en/multiple-carts-api-feature-integration-201907 - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-multiple-carts-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md deleted file mode 100644 index 223db624407..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Shared Carts Glue API -description: A guide on how to install the Spryker Shared Carts glue API feature in to your projects. -last_updated: Jul 4, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shared-carts-feature-integration.html - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shared-carts-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md deleted file mode 100644 index 06ee7dc1e47..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Offer feature -last_updated: Dec 17, 2020 -description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md deleted file mode 100644 index 08f3375d89f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Options feature -last_updated: Jul 28, 2021 -description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md deleted file mode 100644 index 58a9ebd85bf..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Checkout + Marketplace Product Offer feature -last_updated: May 3, 2021 -description: This document describes the process how to implement the Spryker Marketplace Product Offer + Checkout feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md deleted file mode 100644 index b7a2a06eb0d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Checkout + Marketplace Product Options feature -last_updated: Jul 28, 2021 -description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md deleted file mode 100644 index 7d68d8778ac..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Quick Add to Cart + Marketplace Product feature -last_updated: May 16, 2022 -description: This guide describes the process of how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md deleted file mode 100644 index e4d653aef56..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Quick Add to Cart + Marketplace Product Offer feature -last_updated: May 16, 2022 -description: This guide describes the process of how to integrate the Marketplace Product Offer + Quick Add to Cart feature into a Spryker project. -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md deleted file mode 100644 index 1d86955562f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Glue API -description: This integration guide provides steps on how to install the Spryker Marketplace Product + Cart Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md b/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md deleted file mode 100644 index d7f36d0335f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202507.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Cart + Marketplace Product Offer Glue API -description: This integration guide provides steps on how to install the Spryker Marketplace Product Offer + Cart Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.md deleted file mode 100644 index a38cf5b5680..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Cart feature overview -description: Explore the Cart feature in Spryker Cloud Commerce OS, offering robust cart management, multi-cart functionality, and customizable options. -last_updated: Jul 20, 2021 -template: concept-topic-template -originalLink: https://documentation.spryker.com/2021080/docs/cart -originalArticleId: eb211809-3be4-4b8a-bf28-a2c79140b11c -redirect_from: - - /docs/scos/dev/feature-walkthroughs/202005.0/cart-feature-walkthrough/cart-functionality.html - - /docs/scos/user/features/202009.0/cart-feature-overview/cart-feature-overview.html - - /docs/scos/user/features/202311.0/cart-feature-overview/cart-feature-overview.html - - /docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/cart-feature-walkthrough.html - - /docs/pbc/all/cart-and-checkout/202311.0/cart-feature-overview/cart-feature-overview.html - - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/cart-feature-overview/cart-feature-overview.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html ---- - -The *Cart* feature lets your customers add products to their cart by selecting the preferred quantity of a product. Inside the cart, customers can change the number of items, switch between different variants of the product, add notes, apply vouchers, and remove items. - -Any changes the customer makes within the cart trigger an automatic sum-recalculation that is immediately applied to the total in the sum. Predefined taxes are applied and shown automatically. Additionally, logged-in customers can see and edit their cart from any device. - -The persistent cart functionality lets authenticated customers store their cart throughout multiple sessions. The Cart feature also ensures that your business rules, such as discounts, taxes, or shipping, are applied based on the customers' final choice of items. - -Your customers can place orders faster by adding simple products to their cart from the **Category** page. They can add products with one [product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) to the cart with one click. - -The feature supports [product groups](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-groups-feature-overview.html). If simple products are grouped, you can browse and add these products to your cart from the **Category** page. - -In a Spryker shop, the shopping cart widget is displayed in the header. With the widget, customers can easily create new shopping carts and view the existing ones by pointing to the cart icon. - -## Related Business User documents - -|OVERVIEWS| -|---| -| [Cart Notes](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-notes-overview.html) | -| [Cart Widget](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.html) | -| [Dynamic Cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/dynamic-cart-overview.html) | -| [Quick Order from the Catalog Page](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.html) | - - -## Related Developer documents - -|INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | TUTORIALS AND HOWTOS | REFERENCES | -|---------| - | ---------|---------|---------| -| [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | [Upgrade the Cart module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html) | [Manage guest carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html) | [HowTo: Define if a cart should be deleted after placing an order](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.html) | [Calculation 3.0](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-3-0.html) | -| [Install the Cart + Shipment feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html) | [Upgrade the CartExtension module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.html) |[Manage carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Calculation data structure](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-data-structure.html) | -| [Install the Cart + Product Bundles feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.html) | [Upgrade the CartPage module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.html) | [Retrieve customer carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.html) | | [Calculator plugins](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculator-plugins.html) | -| [Install the Persistent Cart + Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.html) | [Upgrade the CartsRestApi module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.html) | [Manage items in carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Cart module: Reference information](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/cart-module-reference-information.html) | -| [Install the Cart + Agent Assist feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html) | [Upgrade the CartVariant module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.html) |[Manage guest cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html)| | | -| [Install the Cart + Non-splittable products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html) | | | | | -| [Install the Cart + Product feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html) | | | | | -| [Install the Cart + Product Group feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html) | | | | | -| [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | | | | | diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index bfd908a667f..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contract Requests feature -description: The guide walks you through the process of installing the Comments + Merchant Contract Requests feature into a Spryker project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md deleted file mode 100644 index 40140bea957..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Comments + Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Spryker Marketplace Comments + Merchant Contracts feature into the project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md deleted file mode 100644 index 90a254d241d..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Comments + Spryker Core Back Office feature -description: The guide walks you through the process of installing the Comments + Spryker Core Back Office feature into a Spryker Cloud Commerce OS project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md deleted file mode 100644 index fb08a75f6ba..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Uuid Generation Console feature -description: Learn to install Spryker Uuid Generation Console feature in to your Spryker projects. -last_updated: Jul 4, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202005.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202009.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201811.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202001.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202108.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/uuid-generation-console-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/uuid-generation-console-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md b/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md deleted file mode 100644 index c76a08cf7bc..00000000000 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Checkout Glue API -description: A guide on how to install the Spryker Checkout glue API feature in to your projects. -template: feature-integration-guide-template -last_updated: Dec 27, 2023 -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-checkout-feature-integration -originalArticleId: f44bd963-7af3-4ce8-8b7a-3c1477880728 - - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html -related: - - title: Install the Checkout feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - - title: Update payment data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html - - title: Submit checkout data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html -redirect_from: -- /docs/pbc/all/cart-and-checkout/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-checkout-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/cart-and-checkout-base-shop.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/cart-and-checkout-base-shop.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/cart-and-checkout-base-shop.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/cart-and-checkout-base-shop.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/approval-process-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/approval-process-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/approval-process-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/approval-process-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/checkout-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/checkout-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/checkout-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/checkout-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/comments-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/comments-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/comments-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/comments-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/persistent-cart-sharing-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/persistent-cart-sharing-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/persistent-cart-sharing-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/persistent-cart-sharing-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/quick-add-to-cart-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/quick-add-to-cart-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/domain-model-and-relationships/quick-add-to-cart-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/domain-model-and-relationships/quick-add-to-cart-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/extend-and-customize/calculation-3-0.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/extend-and-customize/calculation-3-0.md new file mode 100644 index 00000000000..fc08ff1fc5c --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/extend-and-customize/calculation-3-0.md @@ -0,0 +1,268 @@ +--- +title: Calculation 3.0 +last_updated: Aug 12, 2021 +description: The Calculation module is used to calculate the cart totals displayed in the cart/checkout or when the order is placed. The document describes its workflow. +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/calculation-3-0.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/extend-and-customize/calculation-3-0.html +--- + +Spryker uses the `Calculation` module to calculate the cart totals that are displayed in the cart, during checkout, and when the order is placed. + +The `Calculation` module extensively uses plugins to inject calculation algorithms. + +## How Calculation works + +{% info_block infoBox "Quote Transfer" %} + +The quote transfer object is used to store data and plugins that calculate the amounts. + +{% endinfo_block %} + +There is already a list of plugins that populate quote transfer with corresponding data. Calculations are executed every time the content of the cart is updated. + +{% info_block infoBox %} + +For more details, check [Cart Data Flow](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/cart-module-reference-information.html#cart-data-flow) in the *Cart Functionality* section. + +{% endinfo_block %} + +If manual recalculation of cart is required, then `CalculationFacade::recalculate` can be called from Zed or `CalculationClient::recalculate` from Yves with prepared [Calculation Data Structure](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-data-structure.html). When the recalculation operation is called, the calculator runs the calculator plugin stack and each plugin modifies the `QuoteTransfer` (calculates discounts, adds sum gross prices, calculates taxes). Most plugins require the `unitGrossPrice` and the `quantity` to be provided. + +{% info_block infoBox "Calculated amounts" %} + +Each amount is calculated and stored in cents. + +{% endinfo_block %} + +## Calculator plugins + +Calculator plugins are registered in the `CalculationDependencyProvider::getCalculatorStack()` method. This method can be extended on the project level, and the plugin stack can be updated with your own plugins. Each calculator must implement `CalculatorPluginInterface`. + +For more information, see the following: + +```php +> Orders** section: + +![Cart Notes in Back Office](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart+Notes/cart-notes-admin.png) + +## Current constraints + +If the same product variants are added to the cart with different notes, the variants get merged with the same note. diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.md new file mode 100644 index 00000000000..3887b0fd9ba --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.md @@ -0,0 +1,28 @@ +--- +title: Cart Widget overview +description: Many B2B customers use multiple shopping carts. Shopping cart widget lets them access shopping carts from any place in the online shop in one click. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/cart-widget-overview +originalArticleId: 0c78b70a-a43b-487d-8aa7-1f7deee0cc4a +redirect_from: + - /docs/scos/user/features/202311.0/cart-feature-overview/cart-widget-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/cart-feature-overview/cart-widget-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/cart-feature-overview/cart-widget-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.html +--- + +The shopping cart is a part of the online shop where the record of the items a buyer has "picked up" from the online store is kept. The shopping cart lets customers select products, review what they selected, make modifications, add extra items if needed, and purchase the products. Many B2B customers use multiple shopping carts to cover different purchasing purposes. With the Shopping Cart widget, they can access their shopping carts from any place in the online shop with just one click. + +For customers' convenience and ease of use, the shopping cart widget is placed in the very header of the webshop. When a customer puts the cursor on the **Carts** icon, a drop-down list with all their shopping carts is displayed. + +For each shopping cart, the following details are provided: +- Shopping cart name +- Number of items added to cart +- Access level to a shopping cart (for more details, see [Shared Cart Feature Overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/shared-carts-feature-overview.html)) +- Price mode +- Cart total +- View all carts, which opens the **Shopping cart** menu in the customer account +- Create a new cart, which adds a new list in the **Shopping cart** section + +![Shopping Cart Widget](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Shopping+Cart+Widget+Overview/shopping-cart-widget.png) diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/dynamic-cart-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/dynamic-cart-overview.md new file mode 100644 index 00000000000..b465d6bdd63 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/dynamic-cart-overview.md @@ -0,0 +1,28 @@ +--- +title: Dynamic cart overview +description: Learn how Spryker Cloud Commerce OS dynamic cart feature improves user experience with seamless cart management and a frictionless checkout process. +last_updated: May 21, 2024 +template: concept-topic-template +--- + +The dynamic cart functionality enables users to seamlessly manage their carts without reloading the Cart page. Users can perform actions like updating item quantity or adding cart notes without being redirected to the top of the page. This eliminates friction in the checkout experience and increases conversion rates. Additionally, giving customers immediate feedback on their cart actions without losing the context improves the user experience. + +The following video shows how a user can interact with different elements of a cart without reloading the page. + +
      + +
      + +## Related Developer documents + +| INSTALLATION GUIDES | +|---------| +| [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| [Install the Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | +| [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) | +| [Install the Gift Cards feature](/docs/pbc/all/gift-cards/{{page.version}}/install-and-upgrade/install-the-gift-cards-feature.html) | +| [Install the Multiple Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | +| [Install the Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html) | +| [Install the Shopping Lists feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html) | diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.md new file mode 100644 index 00000000000..bcef834ebfa --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.md @@ -0,0 +1,28 @@ +--- +title: Quick Order from the Catalog Page overview +description: The Quick Order from the Catalog Page feature lets buyers add products with one product variant to cart directly from the Category page. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-order-from-the-catalog-page-overview +originalArticleId: a931a32d-1f7d-4177-b99c-1146e26b885e +redirect_from: + - /docs/scos/user/features/202311.0/cart-feature-overview/quick-order-from-the-catalog-page-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/cart-feature-overview/quick-order-from-the-catalog-page-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/cart-feature-overview/quick-order-from-the-catalog-page-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.html +--- + +Buyers can add simple products with one product variant to the cart directly from the Category page by clicking the **Add to cart** icon on the product card. + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Catalog+Management/Quick+Order+from+the+Catalog+Page/Quick+Order+from+the+Catalog+Page+Feature+Overview/quick-order-from-catalog.png) + +For the **Add to cart** icon to be active for the product on the **Catalog** page, the following criteria must be met: + +- The product is an abstract with only one variant. +- The product is available. +- The product does not have [attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html). +- The product does not have [measurement](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) or [packaging units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/packaging-units-feature-overview.html). + +A product belonging to a [product group](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) can also be added to the cart from the **Category** page. However, like with regular products, a product from the product group must have no more than one variant and be available. + +If a product has [options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-options-feature-overview.html), it can be added to the cart from the Category page, but it's added without any options. diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md similarity index 97% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md index c7f835a583e..0d846e3d515 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/checkout originalArticleId: 7dcc5635-2a15-410c-9a0b-bc62a13dd3a1 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/checkout-feature-overview/checkout-feature-overview.html - /docs/scos/user/features/202311.0/checkout-feature-overview/checkout-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/checkout-feature-walkthrough.html - /docs/pbc/all/cart-and-checkout/202311.0/checkout-feature-overview/checkout-feature-overview.html diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/multi-step-checkout-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/multi-step-checkout-overview.md new file mode 100644 index 00000000000..6fa2bf5b2da --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/multi-step-checkout-overview.md @@ -0,0 +1,32 @@ +--- +title: Multi-step checkout overview +description: The checkout is based on a flexible step engine and can be adjusted to any use case. +last_updated: Jun 23, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/multi-step-checkout +originalArticleId: 05845681-637c-46cd-84f7-d548a089d2a6 +redirect_from: + - /docs/scos/user/features/201811.0/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/scos/user/features/202200.0/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/scos/user/features/202311.0/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/pbc/all/cart-and-checkout/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/checkout-feature-overview/multi-step-checkout-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/checkout-feature-overview/multi-step-checkout-overview.html +--- + +The checkout workflow is a fully customizable multi-step process. The standard steps include customer registration and login, shipping and billing address, shipment method and costs, payment method, checkout overview, and checkout success. + +Using the Spryker step engine, you can design different checkout types, such as a one-page checkout or an invoice page replacing the payment page. The step engine enables the following functions: + +- Checkout as the guest, registered customer, or register in the checkout flow. +- Hooks for integrating payment or shipment methods. +- Progress bar to navigate between checkout steps. + +The following example shows how the checkout works in the Spryker Demo Shop for a guest user: + +
      + +
      diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.md new file mode 100644 index 00000000000..dbfc77aa91e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.md @@ -0,0 +1,142 @@ +--- +title: Order thresholds overview +description: Spryker Cloud Commerce OS Order threshold feature lets you configure minimum and maximum values for the orders that your customers place. +last_updated: Jul 19, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/order-thresholds +originalArticleId: b6d4ac1a-fd06-420a-a4bf-9db638e20447 +redirect_from: + - /docs/scos/user/features/202311.0/checkout-feature-overview/order-thresholds-overview.html + - /docs/pbc/all/cart-and-checkout/checkout-feature-overview/order-thresholds-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/checkout-feature-overview/order-thresholds-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/checkout-feature-overview/order-thresholds-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/checkout-feature-overview/order-thresholds-overview.html +--- + +*Order thresholds* let you control the values of the orders that your customers place. You can define a maximum or minimum monetary value for customers to reach to place an order. Apart from just disallowing a customer to place an order if a threshold condition is not fulfilled, you can request them to pay different types of fees. + + +## Hard maximum threshold + +A *hard maximum threshold* is a monetary value that can't be surpassed for an order to be placed. + +For example, if the hard maximum threshold is €3000, and a customer adds items for €3001 to their cart, they can't place the order. + +A Back Office user can enter a message that is displayed in the cart when the hard maximum threshold is reached. + +To learn how a Back Office user can configure the maximum hard threshold, see [Define a maximum hard threshold](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-maximum-hard-threshold). + + +## Minimum thresholds + +A *minimum threshold* is a monetary value that must be reached for an order to be placed. If the order subtotal is below the minimum order value, the customer cannot place the order or can instead place it under conditions defined by the shop owner. For example, the customer can be requested to pay a fee. + + +### Hard minimum threshold + +A *hard minimum* threshold is a minimum threshold that under no conditions lets a customer place an order if its subtotal is below the defined value. + +For example, if the hard minimum threshold value is €400, and a customer adds products for €195 to their cart, they cannot place the order. If the customer adds more products and the order subtotal becomes equal to or greater than €400, they can place the order. + +To learn how a Back Office user configures the minimum hard threshold, see [Define a minimum hard threshold](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-minimum-hard-threshold). + + +### Soft minimum threshold + +A *soft minimum threshold* is a minimum threshold that, under the conditions defined by the shop owner, lets a customer place an order even if its subtotal is below the minimum soft threshold. + +The following soft minimum thresholds are shipped by default: + +- Soft minimum threshold with a message. +- Soft minimum threshold with a fixed fee. +- Soft minimum threshold with a flexible fee. + +Fees for the soft thresholds are based on subtotal order values. Fixed and flexible fees are added in a separate line as expenses for orders. + +To learn how a Back Office user configures the minimum soft threshold, see [Define a minimum soft threshold](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-global-thresholds.html#define-a-minimum-soft-threshold). + + +#### Soft minimum threshold with a message + +The *soft minimum threshold with a message* lets you place an order with the value below the threshold and displays a message. + + +#### Soft minimum threshold with a fixed fee + +The *soft threshold with a fixed fee* lets you place an order with a value below the threshold and adds a defined fee to the order subtotal. If a customer with a fee adds more products to their cart to reach the threshold value, the fee is removed from the cart. + +For example, a shop owner sets a soft minimum threshold of €400 with a fixed fee of €40. If a customer adds products to their cart for €195, they can still place the order, but the fixed fee of €40 is added to their cart. If the customer adds more products and the order subtotal becomes equal to or greater than €400, the fee is removed from the cart. + + +#### Soft minimum threshold with a flexible fee + +The *soft threshold with a flexible fee* lets you place an order with the value below the threshold and adds a percentage of the order value to the order subtotal. If a customer with a fee adds more products to their cart to reach the threshold value, the fee is removed from the cart. + +For example, a shop owner sets a soft minimum threshold of €400 with a flexible fee of 10%. If a customer adds products to their cart for €195, they can still place the order, but the flexible fee of 10% (€19.5) is added to their cart. If the customer adds more products and the order subtotal becomes equal to or greater than €400, the fee is removed from the cart. + + +The following diagram shows how orders are checked against defined thresholds. + +![minimum-order-value-schema](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Order+Thresholds/minimum-order-value-schema.jpg) + +## Thresholds and discounts + +When an order is checked against the defined thresholds, discounts are not taken into account. + +Example with a hard *minimum* threshold: + +1. The hard minimum threshold value is €400. +2. A customer adds products for €450 to the cart. +3. The customer applies a discount voucher, which decreases the order subtotal to €385. +4. The customer *can* place the order. + +Example with a hard *maximum* threshold: + +1. The hard maximum threshold value is €50. +2. The customer adds products for €55 to the cart. +3. The customer applies a discount voucher, which decreases the order subtotal to €45. +4. The customer *cannot* place the order. + + +## Store relation + +All the thresholds have a store relation. If you have a multi-store and multi-currency project, you need to define thresholds per store and currency. + + +## Merchant order thresholds + +A *merchant order threshold* is a threshold that is applied to the customers belonging to the [merchant relation](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html) for which it's defined. + +If global and merchant order thresholds are defined, both are applied to the customers' orders belonging to the merchant relation. + +{% info_block infoBox "Example 1" %} + +If the global minimum threshold is €400 and the minimum threshold per merchant relation is €100, the minimum subtotal is €400. + +{% endinfo_block %} + +{% info_block infoBox "Example 2" %} + +If the global minimum threshold is €400, and the minimum threshold per merchant relation is €700, the minimum subtotal is €700. + +{% endinfo_block %} + +{% info_block infoBox "Example 3" %} + + +- Conditions: + - Global hard maximum threshold is €100. + - Soft minimum merchant order threshold with a fee is €200. + - Order subtotal is €150. + +- Result: The fee of the merchant order threshold is added to the cart, but the customer can't place the order because the global threshold is reached. + +{% endinfo_block %} + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Define global thresholds](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-global-thresholds.html) | +| [Define merchant order thresholds](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.html) | +| [Manage threshold settings](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/manage-threshold-settings.html) | diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/comments-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/comments-feature-overview.md new file mode 100644 index 00000000000..21d11521691 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/comments-feature-overview.md @@ -0,0 +1,105 @@ +--- +title: Comments feature overview +description: Comments feature provides the ability for online owners to add Comments Widget that lets the customers leave comments or special requests. +last_updated: Jul 21, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/comments-feature-overview +originalArticleId: ba9714ca-0500-40fc-b573-c352bc04bff2 +redirect_from: + - /docs/scos/user/features/202311.0/comments-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/comments-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/comments-feature-overview.html +--- + +The *Comments* feature provides the ability for online owners to add the comments widget. The widget lets the customers leave comments, special requests, or instructions to any entity in the Spryker shop and tag these comments depending on your project specification. + +An *entity* is a unit or component with some properties and may have relationships with other entities within a system. So, in terms of Spryker Commerce OS, an entity is represented by a Shopping Cart, Shopping List, and CMS page. It is where the Comments Widget can be located. + +As an example of this generic solution, we have implemented Comments on the **Shopping Cart** page. + +Comments help multiple customers to have a dialog on the cart contents. How does it work? Let's imagine a situation where you have a company account and three HR members (HR assistant, HR manager, and the head of the HR department) who are responsible for purchasing the products for the whole office. They share the same shopping cart. The HR assistant adds the products to the shopping cart and includes a comment requesting to review the shopping cart by an HR manager. With the help of comments, they decide on the final quantity of the products and finalize the shopping cart contents. After the shopping cart is ready, the HR manager adds a comment for the head of the HR department to approve the total price. By means of the conversation in the cart comments, the head of the department makes the latest corrections to the cart's contents and attaches the important comments concerning the shipping of some products to the shopping cart. From now on, the HR assistant can proceed to Checkout. The attached comments will be available on the **Checkout** page and if the order is successfully placed, in the order history. + +Thus, the Comments feature lets your B2B customers effectively communicate and discuss the purchases with colleagues, thereby improving customer satisfaction and speeding up the process by avoiding additional communication outside of the context. + +## Comments widget + +Within the Comments feature, we have created the Comments widget. The widget can be placed on any entity page. In our case, it's the **Shopping Cart** page. + +The comment contains the following information: + +- Company user's name +- Date when the comment was left +- Contents of the comment +- Comment Tag + +Company users can add comments to a shared cart with both Read-only and Full Access permissions. A user can also add a comment before submitting the order on the **Checkout Summary** page, as well as post factum after the order has been placed on the **Order History** page: + +{% info_block warningBox "Note" %} + +When reordering the existing order, the comments attached to the order are not duplicated. + +{% endinfo_block %} + +When the order with the attached comments is placed, the Back Office user can view it with the comments in the **Orders** section of the Back Office. + +### Comment tags + +Every comment may be tagged. *Tags* are keywords associated with the comments. The tags are added to the group the comments sharing a similar idea or topic. For example, you may have several comments where colleagues have covered the details about delivering the order. You may tag these comments with the *Delivery* tag for convenience. Also, in the drop-down menu, you can filter the comments according to the tags added. + +## Comments on the Storefront + +Company users can perform the following actions using the Comments widget on the Storefront: +
      +Create and edit comments + +
      + +
      + + +
      + +
      +Remove comments + +
      + +
      + +
      + +
      +Tag comments + +
      + +
      + + +
      + +
      +Filter comments by tags + +
      + +
      + + +
      + +## Related Developer documents + +|INSTALLATION GUIDES | DATA IMPORT | +|---------|---------| +| [Install the Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-feature.html) | [File details: comment.csv](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/import-and-export-data/import-file-details-comment.csv.html) | +| [Install the Comments + Persistent Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.html) | | +| [Install the Comments + Order Management feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.html) | | diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/dynamic-cart-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/dynamic-cart-overview.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/dynamic-cart-overview.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/dynamic-cart-overview.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/multiple-carts-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/multiple-carts-feature-overview.md new file mode 100644 index 00000000000..6bbfe3702dd --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/multiple-carts-feature-overview.md @@ -0,0 +1,164 @@ +--- +title: Multiple Carts feature overview +description: Shopping Cart is where the record of the items a buyer has picked up from the online store is kept. Select products, review them and add more with ease. +last_updated: Jul 23, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-feature-overview +originalArticleId: d5aad6be-5c2c-4e27-806e-7091a6db3d0d +redirect_from: + - /docs/scos/user/features/202311.0/multiple-carts-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/multiple-carts-feature-walkthrough.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/multiple-carts-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/multiple-carts-feature-overview.html +--- + +Sometimes customers need more than one shopping cart, such as one for daily purchases and another one for monthly expenses. The *Multiple Carts* feature lets you create and manage multiple shopping carts in one customer account. + +## Creating and managing multiple shopping carts + +There are two ways to create a shopping cart: + +- Through a shopping cart widget in the header of the shop. +- From the **Shopping Cart** page in the **My Account** menu. + +New items are added to the shopping cart by clicking **Add to Cart** on the product details page. + +Customers can create not just one but multiple shopping carts to be used for different needs. + +{% info_block infoBox %} + +For example, these can be a shopping cart for daily purchases or a shopping cart for goods that you purchase once a month. + +{% endinfo_block %} + +After a shopping cart has been created, it appears in the shopping carts table on the **Shopping Cart** page in **My Account**. + +The table with shopping carts shows details for each of the carts, including the following: + +- Name of the shopping cart +- Access level (Owner, Read-only, or Full access) +- Number of products added to cart +- Price mode (Net or Gross) +- Cart Total +- Possible actions to manage shopping carts: edit name, duplicate, [share](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/shared-carts-feature-overview.html), dismiss, delete, switch cart to the shopping list (see the **Actions** table for details) + +![Multiple carts list](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Multiple+Carts+per+User+Feature+Overview/multiple-cart-list.png) + +The following table provides detailed information about the possible actions to manage shopping carts. + +| ACTION | DESCRIPTION | +| --- | --- | +| Edit Name | Lets a customer edit the name of the shopping cart. | +| Duplicate | Creates a copy of the chosen shopping cart including the items added to the cart.
      The duplicate copy of the cart is named according to the template: ` Copied At `
      A cart can be converted into shopping list on the **Shopping Cart** page by clicking on **To shopping list**.| +| Dismiss | Lets a customer dismiss a shared shopping cart. | +| Delete | Deletes the shopping cart.
      Deleting a shopping cart also deletes the items added to it. | + +{% info_block infoBox %} + +To view how to create, edit, duplicate, and delete a cart and how to dismiss shared carts, see the [Multiple Carts on the storefront](#multiple-carts-per-user-on-the-storefront) section. + +{% endinfo_block %} + +To learn more about sharing the shopping cart, see [Shared Cart documentation](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/shared-carts-feature-overview.html). + +An active shopping cart is highlighted in bold. + +{% info_block infoBox %} + +Only one shopping cart can be set as active in the customer account. + +{% endinfo_block %} + +There are two ways to set a shopping cart as active: +- Clicking on the cart name in the shopping cart widget in the header of the shop. +- Clicking on the cart name on the **Shopping Cart** page in the **My Account** menu. + +After the shopping cart is set to active, the user is redirected to the respective cart page where a table with the following information is available: + +- Product image +- Product name +- SKU +- Product attributes +- Product options +- Quantity +- Note +- Price mode +- Item price +- Cat Note +- Discount +- Subtotal +- Tax +- Grand Total + +![Shopping Cart Page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Multiple+Carts+per+User+Feature+Overview/a-shopping-cart-page.png) + +## Multiple Carts on the Storefront + +On the storefront, company users can perform the following actions by using the Multiple Carts feature: + + +
      +Create a cart + +
      + +
      + +
      + +
      +Edit and delete a cart + + +
      + +
      + + +
      + + +
      +Dismiss and duplicate a cart + + + +
      + +
      + + +
      + +- To share a cart with external and internal users by a link, see [Unique URL per Cart for Easy Sharing feature overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.html). +- To share a cart with users within one business unit, see [Shared Cart feature overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/shared-carts-feature-overview.html#shared-cart-on-the-storefront). +- To add a custom order reference to a cart, see [Custom Order Reference feature overview](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/custom-order-reference-overview.html). +- To add comments to a cart, see [Comments feature overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/comments-feature-overview.html#comments-on-the-storefront). +- To add a customer order reference to an order, see [Custom Order Reference feature overview](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/custom-order-reference-overview.html). + + +This video explains how to use shopping carts in the Spryker [B2B Demo Shop](/docs/about/all/b2b-suite.html). + +
      + +
      + + + + +## Related Developer documents + +|INSTALLATION GUIDES | +|---------| +| [Install the Multiple Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html) | +| [Install Multiple Carts + Quick Order feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.html) | +| [Install Multiple Carts + Quotation Process feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quotation-process-feature.html) | +| [Install the Multiple Carts + Reorder feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html) | diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/non-splittable-products-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/non-splittable-products-feature-overview.md new file mode 100644 index 00000000000..9478636880e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/non-splittable-products-feature-overview.md @@ -0,0 +1,31 @@ +--- +title: Non-splittable Products feature overview +description: The document describes the concept of product quantity restrictions- its types and how they can be imported +last_updated: Aug 2, 2021 +template: concept-topic-template +originalArticleId: 7db585a7-80d6-4584-a662-e00d42f27cf4 +redirect_from: + - /docs/scos/dev/feature-walkthroughs/201907.0/non-splittable-products-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/non-splittable-products-feature-walkthrough.html + - /docs/scos/user/features/202204.0/non-splittable-products-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/non-splittable-products-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/non-splittable-products-feature-overview.html +--- + + +Sometimes shop owners want their customers to buy less or more of specific products. For example, when selling to bulk buyers at wholesale prices or when running promotional campaigns and creating special offers, you might want not to allow buying less than a certain quantity. Also, for some products, it might be more convenient to sell particular quantities that are, for example, multiples of a specific number. For example, you don't sell less than three meters of a cable and don't want customers to buy cables with a length that is not a multiple of three. + +Product quantity restriction values define the number of items that customers can put into the cart. You can specify the product quantity restrictions by importing them for your project with the `data:import:product-quantity` command. For details about the import file, see [File details: product_quantity.csv](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-quantity.csv.html). + +In the import file, you can set three values for quantity restrictions: minimum, maximum, and interval. +The *minimum* value defines the smallest allowable quantity of a specific item in the cart. The *maximum* quantity restricts the allowable quantity of items in the cart to a specific value. The *interval* value determines an increment value by which the quantity can be changed. For example, if you specify minimum quantity as 5, interval as 3, and maximum quantity as 14, a user can add 5, 8, 11, and 14 items to the cart. If a user adds an unacceptable quantity of items to the cart, they are suggested to buy another allowable quantity of items. + +## Current constraints + +The feature has the following functional constraints: +- According to the current setup, quantity suggestions in the quantity restrictions do not work with the shopping lists. A buyer can add any quantity of the product to the shopping list. It can lead to a situation where the customer is forced to guess what amount to add from a shopping list because they do not see quantity suggestions on the shopping list page. However, when they add this product from a shopping list to a shopping cart, an error message appears notifying the customer that a selected amount cannot be added (if any quantity restrictions were set up for this product). +- There is no UI for the product restrictions in the Back Office. + +| DATA IMPORT | +|---------| +|[File details: product_quantity.csv](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-quantity.csv.html) | diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md similarity index 97% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md index a43a3c77c85..9135f2df4ee 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/persistent-cart-sharing-feature-overview originalArticleId: a80f4aab-aec5-4e7f-ad69-e5112178f27d redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/persistent-cart-sharing-feature-walkthrough/persistent-cart-sharing-feature-walkthrough.html - /docs/scos/user/features/202311.0/persistent-cart-sharing-feature-overview.html - /docs/pbc/all/cart-and-checkout/persistent-cart-sharing-feature-overview.html diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md new file mode 100644 index 00000000000..1e9bf28b834 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.md @@ -0,0 +1,149 @@ +--- +title: Quick Add to Cart feature overview +description: On the Quick Add to Cart form in the web-shop, a customer can enter product SKU and Quantity and proceed by adding it to cart or by creating an order right away. +last_updated: Aug 19, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-feature-overview +originalArticleId: 9608a908-5dc9-49dc-bcc4-a24066c0bf76 +redirect_from: + - /docs/scos/user/features/202200.0/quick-add-to-cart-feature-overview.html + - /docs/scos/user/features/202311.0/quick-add-to-cart-feature-overview.html + - /docs/pbc/all/cart-and-checkout/quick-add-to-cart-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/quick-add-to-cart-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/quick-add-to-cart-feature-overview.html +--- + +Regular buyers, and especially B2B wholesale customers, often know what exactly they want to order from the shop by product SKU and product name. The *Quick Add to Cart* feature lets your customers find and buy products in just a few clicks. Instead of going to each product page individually, they can go to the **Quick Add to Cart** page, accessible directly from the header, and quickly order items by typing the product's SKU and its quantity in respective fields. At the same time, if some specific [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) apply to products, they will also be taken into account when ordering through the **Quick Add to Cart** page. The **Quick Add to Cart** form can also be used to add items to [shopping lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html). Also, if a customer has a list of products to be ordered, for example in a CSV file or other, the ordering process becomes even faster. The customer can bulk add SKUs and put quantities next to them in a single field. With this being done, the customer either adds the items to the cart or proceeds directly to checkout. + +The *Quick Add to Cart* feature lets wholesale and returning customers place bulk orders. + +On the **Quick Order** page, customers can add multiple products along with the required quantities in a fast and efficient way. They can search for a specific concrete product by SKU or name with the help of the search widget for concrete products. When starting to fill out the **SKU/Name** field, a drop-down list with auto-suggested appropriate items appears. A shop visitor can select the concrete product by clicking on it in the drop-down list. + +{% info_block infoBox %} + +Use the Tab button to automatically fill in a partially typed product name or SKU. + +{% endinfo_block %} + +{% info_block infoBox %} + +By default, we use SKU as a product identifier for filtering the results. The identifier determines what input to validate in the **SKU/Name** field. You can configure to use more than one identifier such as EAN, GTIN, or article number on the project level by changing the template in the `ProductSearchWidget` module and then use any of the available fields for the product. + +{% endinfo_block %} + +To view how to create a quick order, see [Quick Order on the Storefront](#quick-order-on-the-storefront). + + +As a shop owner, you can also integrate the Quick Order with [Measurement Units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html). Thus, when the product is selected, the base measurement unit for that product appears in the "Measuring Unit" column. + +{% info_block errorBox %} + +The integration is possible only if the Measurement Units feature is enabled in your project. + +{% endinfo_block %} + +Moreover, after adding a quick order to the cart, a shop owner can observe the default amount and default sales units for the product packaging unit in the cart overview. +![Quick Order packaging units](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Quick+Order/Quick+Order+Feature+Overview/quick-order-packaging-units.png) + +When the customer has found the products they need, they can set the quantity of each product using a scroll-down box. By default, "1" is set in the **Quantity** field. If there are any quantity restrictions applied to the product, they are taken into account: the customer can choose only the value which meets the quantity restrictions. To learn more about how the quantity limitations are applied to the **Quick Order** form, see [Quantity Restrictions for Quick add to cart](#quantity-restrictions-for-quick-add-to-cart). + +Once the products and their quantities have been selected, the order can be: + +- Moved to a shopping list +- Added to a shopping cart +- Checked out + +{% info_block infoBox %} + +For both Moved and Added to a Shopping List options, in a drop-down list, you can select one of the shopping lists to automatically add the products. + +{% endinfo_block %} + +It is also possible to add products to the cart in bulk. To do so, the customer adds SKUs and quantities of products in the **Paste your order** form, separating SKUs and quantities by one of the following separators, depending on the specific project configuration: + +- Spaces +- Semicolons +- Commas +- Other separators + + +{% info_block warningBox %} + +However, separators must be the same for all products entered in this form at a time. If products and quantities are added in the correct format and with acceptable separators, but the separators are different for different products—for example, 1234567, 2 in one case and 1234568; 3 in another, an error message is shown after verification. If SKUs and format have passed the verification, then the products and their quantities are automatically entered in the **SKU** and **Qty** fields of the **Quick Order** form, and the customer can either add them to the cart or create the order. + +{% endinfo_block %} + +## Quantity restrictions for Quick Add to Cart + +Quick Add to Cart quantity rules fall under limitations set by [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html). Quantity restriction values define the number of items that customers can put into the cart. + +When manually filling the **SKU/Name* field, the quantity selector allows a visitor to put the valid numbers based on [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) set for that SKU. That means, for example, if a concrete product has a minimum quantity restriction of 4 units, the interval restriction of 2 units, and the maximum quantity is 12, the shopper can put 4, 6, 8, 10, and 12 items to cart. + +The **Quantity** field in the **Quick Order** adheres to these quantities. Therefore, if the shopper enters an invalid number into the **Quantity** field, for example, 5, the number will automatically change to the next higher quantity set in quantity restrictions, that is, 6. + +## Product prices for Quick Order + +To see the price, a shop visitor has to select the concrete product and set the item quantity. + +The price is displayed dynamically, taking into account the quantity, currency, store, and [merchant relation](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html) dimensions, respectively. If the item has any [volume prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/volume-prices-overview.html), the price is adjusted to the correct price set for the quantity the user has selected. + +## File upload form for concrete products + +To save your buyers' time and help them order the products in bulk quickly, let your customers use the **File Upload** form. The **File Upload** form lets users add multiple products to the **Quick Order** page by uploading data using a CSV file. + +{% info_block infoBox %} + +You can update the project configuration in case you need to use other file formats. + +{% endinfo_block %} + + +After the feature is integrated, a buyer can see a box on the **Quick Order** page: + +![File Upload form](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Quick+Order/Quick+Order+Feature+Overview/file-upload-form.png) + +Buyers can upload a CSV file by choosing a file from their local system or by drag & drop. To make the process clearer, they can download a sample CSV file and add the necessary data (SKU and Qty) there: + +![File Upload a CSV file](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Quick+Order/Quick+Order+Feature+Overview/file-upload-csv.png) + +{% info_block infoBox %} + +Make sure to populate the product data in the following format: [CONCRETE_SKU, QUANTITY]. +You can upload only one file at a time. + +{% endinfo_block %} + +By default, only concrete SKUs are validated. On successful upload, items and quantities are extracted and filled out in the quick order form fields. + +In case the quantity is not valid because of [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) setting, the quantity is changed to a valid number. + +If there are already products added to the quick order list, the products from the CSV file are added to the bottom of the quick order template. + +## Quick Order on the Storefront + +Using the Quick Order feature on the Storefront, company users can do the following: +- Create a new quick order. +- Add products to the quick order in bulk. +- Upload products using the upload form. +- Add a quick order o a shopping list. +- Add a quick order to a shopping cart. + +The following figure shows how to perform these actions: + +
      + +
      + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | +|---|---| +| [Install the Quick Add to Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html) | [Upgrade the ProductPackagingUnitStorage module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitstorage-module.html) | +| [Install the Quick Add to Cart + Shopping Lists feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.html) | [ProductPageSearch migration guide](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.html) | +| [Install the Quick Add to Cart + Discontinued Products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html) | [QuickOrderPage migration guide](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.html) | +| [Install the Quick Add to Cart + Measurement Units feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.html) | | +| [Install the Quick Add to Cart + Non-splittable Products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html) | | +| [Install the Quick Add to Cart + Packaging Units feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.html) | | diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/resource-sharing-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/resource-sharing-feature-overview.md similarity index 96% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/resource-sharing-feature-overview.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/resource-sharing-feature-overview.md index 8528c1ab980..c5b8e760422 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/feature-overviews/resource-sharing-feature-overview.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/resource-sharing-feature-overview.md @@ -6,7 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/resource-sharing-feature-overview originalArticleId: 34e2ae9e-8d7e-4789-9282-b8de21ee5c09 redirect_from: - - docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/resource-sharing-feature-walkthrough.html + - docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/resource-sharing-feature-walkthrough.html - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/resource-sharing-feature-overview.html - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/resource-sharing-feature-overview.html --- diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/shared-carts-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/shared-carts-feature-overview.md new file mode 100644 index 00000000000..092dcb22995 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/feature-overviews/shared-carts-feature-overview.md @@ -0,0 +1,157 @@ +--- +title: Shared Carts feature overview +description: In B2B world shopping carts can be created and used by different individuals. A shopping cart can be shared with the users of the current business unit. +last_updated: Aug 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/shared-carts-feature-overview +originalArticleId: 85a7c630-a6ef-465f-80fd-176d1c5e0937 +redirect_from: + - /docs/scos/user/features/202311.0/shared-carts-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/shared-carts-feature-walkthrough.html + - /docs/pbc/all/cart-and-checkout/shared-carts-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/shared-carts-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/shared-carts-feature-overview.html +--- + +*Shopping Cart* is a part of the online shop where the record of the items a buyer has "picked up" from the online store is kept. The shopping cart lets customers select products, review what they selected, make modifications or add extra items if needed, and purchase the products. + +There are two ways to access a shopping cart: +- Through a shopping cart widget in the header of the web shop. +- From the **Shopping Cart** page, in the **My Account** menu. + +New items are added to the shopping cart by clicking on **Add to Cart** on the product details page. + +To share a shopping cart, a user needs to click **Share cart** in the **Actions** column (on the **Shopping Cart** page, in the **My Account** menu) for a cart they want to share—see the [Shared Cart on the Storefront](#shared-cart-on-the-storefront) section. + +## Permissions management for shared shopping carts + +A shopping cart can be shared with the users of the current business unit. The **Share Cart ``** page consists of the users within the business unit to share the shopping cart with. + +![Shared cart page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Shared+Cart+Feature+Overview/share-cart-page.png) + +There are three types of access rights that can be granted on shopping carts: +- No access +- Read only +- Full access + +### No access + +*No access* means that the shopping cart is not shared and therefore can not be seen by a user. + +{% info_block warningBox "Note" %} + + *No access** is applied automatically to a newly-created cart. + +{% endinfo_block %} + +### Read-only + +The *Read-only* permission allows: + +*Reading shopping cart*. On the **Shopping Cart** page, the user sees the shopping cart name, access level (Read only), as well as the table of items with the following information: + +- Product image +- Product name +- SKU +- Product attribute +- Product options +- Quantity +- Note +- Comments +- Custom order reference +- Price mode +- Item price +- Cart Note +- Discount +- Subtotal +- Tax +- Grand Total + +{% info_block warningBox "Note" %} + +With the *Read-only* permission, no cart actions are available to the user. + +{% endinfo_block %} + +### Full access + +The *Full access* permission allows the following: + +- *Reading shopping cart*: On the **Shopping cart** page, the user sees a shopping cart name, access level (*Full access*), as well as the table of items with the following information: + - Product image + - Product name + - SKU + - Product attribute + - Product options + - Quantity + - Note + - Price mode + - Item price + - Cat Note + - Discount + - Subtotal + - Tax + - Grand Total + +- *Changing the quantity of items added to a cart*. On the **Shopping Cart summary** page, a user can change the item quantity for the product added to the cart. + +- *Adding products to a cart*. A user can add any products to the cart with full access. + +- *Removing products from a cart*. By clicking on Remove, the user can remove an item from the cart. By clicking on Clear cart, the user deletes all the items in the cart. + +- *Leaving notes for products in the cart*. A user can leave a note to a particular product in the cart on the **Shopping cart summary** page. + +- *Leaving notes for the cart*. A user can leave a note to a cart on the **Shopping cart summary** page. + +- *Entering voucher code*. + +- *Adding a cart to a shopping list*. A cart can be converted into a shopping list on the **Shopping cart summary** page. + +- *Proceeding to the checkout*. + +![Full access cart](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Shared+Cart+Feature+Overview/full-access-cart.png) + +- *Editing shopping a cart name*. The shopping cart name can be updated on the **Shopping Cart** page. + +- *Duplicating a shopping cart*. The shopping cart can be duplicated on the **Shopping Cart** page. + +- *Dismissing a shared shopping cart*. Company users within one business unit can share carts. Such carts can be dismissed if they are no longer needed. + +- *Deleting a shopping cart*. The shopping cart can be deleted on the **Shopping Cart** page. Deleting a shared shopping cart also deletes it for users it has been shared with. + +![Shopping Cart Actions](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+Cart/Cart/Shared+Cart+Feature+Overview/shopping-cart-actions.png) + +By default, the user who has created the cart has Owner access permission. Owner access permission allows everything that allows Full access permission and grants the ability to share the cart with other users. + +If a user does not need a cart that has been shared with them, they can remove it from their shopping carts and thus cancel sharing. To do so, on the **Shopping Cart** page, in **Actions** next to the respective shared shopping cart, the user clicks **Dismiss**. They can dismiss sharing shopping carts with both *Read only* and *Full access* rights. Own shopping carts cannot be dismissed. + +{% info_block errorBox "Important!" %} + +If the shared cart has been dismissed individually by a user, this user can't see it if this cart is shared next time. + +{% endinfo_block %} + +## Current constraints + +With the current functionality, the shopping cart cannot be shared outside of the [business unit](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/business-units-overview.html) to which the owner belongs to. + +## Shared Cart on the Storefront + + + +On the storefront, company users can share a cart with other users within the same business unit: + +
      + +
      + + +## Related Developer documents + +|INSTALLATION GUIDES | GLUE API GUIDES | +|---------|---------| +|[Install the Shared Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html) | [Share company user carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.html) | +| [Install the Shared Carts Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html) | [Retrieve cart permission groups](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.html) | +| | [Manage shared company user carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html) | diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-cart-and-checkout-data.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-cart-and-checkout-data.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-cart-and-checkout-data.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-cart-and-checkout-data.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-comment.csv.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-comment.csv.md similarity index 95% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-comment.csv.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-comment.csv.md index 6b0340f713c..609dd6c1c33 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-comment.csv.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-comment.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-commentcsv originalArticleId: 2748359a-d71e-4878-a3d9-ae305f124192 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-comment.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/miscellaneous/file-details-comment.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/miscellaneous/file-details-comment.csv.html - /docs/pbc/all/cart-and-checkout/202311.0/import-and-export-data/file-details-comment.csv.html diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md similarity index 95% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md index 01738fb1799..01fcd3e867f 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-quantitycsv originalArticleId: 9959fdc1-deed-48a2-9cea-46c272cb247f redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-product-quantity.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-quantity.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-quantity.csv.html - /docs/pbc/all/cart-and-checkout/202311.0/import-and-export-data/file-details-product-quantity.csv.html diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md similarity index 95% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md index c1129224b11..bf6edd62321 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-sales-order-thresholdcsv originalArticleId: 6a897bd7-2a39-4fb0-8eb3-9704e23cd423 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.html - /docs/pbc/all/cart-and-checkout/202311.0/import-and-export-data/file-details-sales-order-threshold.csv.html - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/import-and-export-data/file-details-sales-order-threshold.csv.html - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/import-and-export-data/import-file-details-sales-order-threshold.csv.html diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md new file mode 100644 index 00000000000..6a56c7cd7f2 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Cart + Agent Assist feature +description: Learn how to install the Cart Agent Assist feature in Spryker Cloud Commerce OS to enhance cart functionality and provide shopping assistance to customers +last_updated: Jul 6, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-agent-assist-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md new file mode 100644 index 00000000000..966793604e8 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install the Cart feature + Dynamic Multistore +description: Learn how to install the Cart feature and dynamic multistore in Spryker Cloud Commerce OS. +last_updated: Apr 25, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md new file mode 100644 index 00000000000..af523fde8d1 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.md @@ -0,0 +1,17 @@ +--- +title: Install the Cart + Non-splittable Products feature +description: The guide describes the process of installing the Cart and Non-splittable Products features into your project +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/cart-non-splittable-products-feature-integration +originalArticleId: 13a5637e-1c2a-44d7-96fe-a05aeb187872 +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html + - /2021080/docs/cart-non-splittable-products-feature-integration + - /2021080/docs/en/cart-non-splittable-products-feature-integration + - /docs/cart-non-splittable-products-feature-integration + - /docs/en/cart-non-splittable-products-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/cart-non-splittable-products-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md new file mode 100644 index 00000000000..34e2a0daeac --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-notes-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Cart Notes feature +description: Learn how to integrate the Spryker Cloud Commerce OS Cart Notes feature into a Spryker project. +last_updated: Apr 14, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-cart-notes-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-prices-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md index f75deef8a42..e69c7180329 100644 --- a/docs/pbc/all/cart-and-checkout/202410.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.md @@ -10,7 +10,6 @@ related: link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html redirect_from: - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.html - --- {% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md new file mode 100644 index 00000000000..f3e1d7831c6 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Cart + Product feature +description: The guide walks you through the process of installing the Product and Cart features in your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md new file mode 100644 index 00000000000..97e8738acad --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Cart + Product Group feature +description: Instructions to integrate the Cart + Product group feature into a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-group-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md new file mode 100644 index 00000000000..485f0e99788 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Cart + Shipment feature +description: Learn how to install the Spryker Cloud Commerce OS Cart and Shipment feature in to a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-shipment-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md new file mode 100644 index 00000000000..93c1988c0bd --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.md @@ -0,0 +1,22 @@ +--- +title: Install the Checkout feature +description: Learn how to integrate and install the Spryker Cloud Commerce OS Checkout feature into a Spryker project. +last_updated: Jul 27, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/checkout-feature-integration +originalArticleId: f18436a4-91c4-41a4-9bf2-65d858764ab6 +redirect_from: + - /2021080/docs/checkout-feature-integration + - /2021080/docs/en/checkout-feature-integration + - /docs/checkout-feature-integration + - /docs/en/checkout-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/checkout-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/checkout-feature-integration.html + - /docs/pbc/all/cart-and-checkout/install-and-upgrade/install-features/install-the-checkout-feature.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html +related: + - title: Install the Checkout Glue API + link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-non-splittable-products-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md new file mode 100644 index 00000000000..18a4fd7b539 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.md @@ -0,0 +1,20 @@ +--- +title: Install the Checkout + Quotation Process feature +description: A guide describing the process of installing the Spryker Cloud Commerce OS Checkout + Quotation process feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/checkout-quotation-process-feature-integration +originalArticleId: ac3280a8-f91d-4b7d-99e3-76cee056f96b +redirect_from: + - /2021080/docs/checkout-quotation-process-feature-integration + - /2021080/docs/en/checkout-quotation-process-feature-integration + - /docs/checkout-quotation-process-feature-integration + - /docs/en/checkout-quotation-process-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/checkout-quotation-process-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.html +related: + - title: Install the Quotation Process feature + link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md new file mode 100644 index 00000000000..b5c3fe71e72 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.md @@ -0,0 +1,16 @@ +--- +title: Install the Checkout Workflow feature +description: How to install the Spryker Cloud Commerce OS Checkout workflow feature to your Spryker projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/checkout-workflow-integration +originalArticleId: 6908a9df-3ef3-454a-b135-9c72a350b641 +redirect_from: + - /2021080/docs/checkout-workflow-integration + - /2021080/docs/en/checkout-workflow-integration + - /docs/checkout-workflow-integration + - /docs/en/checkout-workflow-integration + - /docs/scos/dev/feature-integration-guides/202311.0/checkout-workflow-integration-guide.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-checkout-workflow-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-checkout-workflow.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md new file mode 100644 index 00000000000..bd37fbbcedb --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Comments + Merchant B2B Contract Requests feature +description: The guide walks you through the process of installing the Comments + Merchant Contract Requests feature into a Spryker project. +last_updated: Mar 12, 2024 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contract-requests-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..5dc578a5f5c --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Comments + Merchant B2B Contracts feature +description: The guide walks you through the process of installing the Spryker Marketplace Comments + Merchant Contracts feature into the project. +last_updated: Mar 13, 2024 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-merchant-b2b-contracts-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-comments-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-order-management-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-persistent-cart-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md new file mode 100644 index 00000000000..ff39b292ebf --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Comments + Spryker Core Back Office feature +description: The guide walks you through the process of installing the Comments + Spryker Core Back Office feature into a Spryker Cloud Commerce OS project. +last_updated: Mar 12, 2024 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-comments-spryker-core-back-office-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-comments-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md new file mode 100644 index 00000000000..672403d9aff --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Multiple Carts + Quick Order feature +description: The Quick Order Feature allows ordering products by entering SKU and quantity on one page. The guide describes how to integrate the feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-quick-order-integration +originalArticleId: 4e32040b-3ec9-458c-8122-29d29aa64e45 +redirect_from: + - /2021080/docs/multiple-carts-quick-order-integration + - /2021080/docs/en/multiple-carts-quick-order-integration + - /docs/multiple-carts-quick-order-integration + - /docs/en/multiple-carts-quick-order-integration + - /docs/scos/dev/feature-integration-guides/202200.0/multiple-carts-quick-order-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-quick-order-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quick-order-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-quick-order-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quotation-process-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quotation-process-feature.md new file mode 100644 index 00000000000..a5a87caaa35 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quotation-process-feature.md @@ -0,0 +1,9 @@ +--- +title: Install the Multiple Carts + Quotation Process feature +description: A guide to install the Spryker Multiple Cart and Quotation Feature in to your Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: +- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-quotation-process-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-multiple-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md new file mode 100644 index 00000000000..510d73673ad --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.md @@ -0,0 +1,13 @@ +--- +title: Install the Multiple Carts + Reorder feature +description: The Reorder feature allows reordering previous orders. This guide will walk you through the process of integrating the feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/multiple-carts-reorder-feature-integration +originalArticleId: d5e4f165-d6b1-47fc-a008-ee010307c447 +redirect_from: + - /docs/scos/dev/feature-integration-guides/202311.0/multiple-carts-reorder-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-multiple-carts-reorder-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.md new file mode 100644 index 00000000000..1b734f88987 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Persistent Cart + Comments +description: The guide walks you through the process of integrating the Persistent Cart + Comments feature into the project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirec_from: +- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-comments-persistent-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-sharing-shared-carts-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md new file mode 100644 index 00000000000..7c2534194b8 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Quick Add to Cart + Discontinued Products feature +description: Quick Add to Cart + Discontinued Products allow showing products in cart as discontinued. This guide describes how to integrate the feature into the project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-discontinued-products-feature-integration +originalArticleId: 9a383479-cd7b-4b57-993c-e0f707cdb015 +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html + - /2021080/docs/quick-add-to-cart-discontinued-products-feature-integration + - /2021080/docs/en/quick-add-to-cart-discontinued-products-feature-integration + - /docs/quick-add-to-cart-discontinued-products-feature-integration + - /docs/en/quick-add-to-cart-discontinued-products-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/quick-add-to-cart-discontinued-products-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-discontinued-products-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-discontinued-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..8831fede715 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Quick Add to Cart feature +description: Learn how to integrate and install the Spryker Cloud Commerce OS Quick Add to Cart feature into a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-order-feature-integration +originalArticleId: c48beede-6189-4a05-9ad3-d3de0bfa5592 +redirect_from: + - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-measurement-units-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md new file mode 100644 index 00000000000..96d27bb5bb0 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md @@ -0,0 +1,15 @@ +--- +title: Install the Quick Add to Cart + Non-splittable Products feature +description: Install the Spryker Cloud Commerce OS Quick Add to Cart and Non-splittable Products features in your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-order-non-splittable-products-feature-integration +originalArticleId: a8357121-3fb0-4b48-92ba-b6a735d9b583 +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-non-splittable-products-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html + +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-packaging-units-feature.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md new file mode 100644 index 00000000000..3bc82fd376e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Quick Add to Cart + Shopping Lists feature +description: This guide describes how to install the Spryker Quick Add to Cart + Shopping Lists allow creating a shopping list to buy products to your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quick-add-to-cart-shopping-lists-feature-integration +originalArticleId: 97c3b185-b0b0-460d-b3ef-52b557b200db +redirect_from: + - /docs/scos/dev/feature-integration-guides/202311.0/quick-add-to-cart-shopping-lists-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-shopping-lists-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-shopping-lists-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md new file mode 100644 index 00000000000..736c118ccd5 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Resource Sharing feature +description: A guide on how to install the Spryker resource sharing feature within your Spryker projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: +- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-resource-sharing-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-resource-sharing-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md new file mode 100644 index 00000000000..8b6bff8fa07 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.md @@ -0,0 +1,21 @@ +--- +title: Install the Shared Carts feature +description: Learn how to install the Spryker Cloud Commerce OS shared carts feature into your Spryker projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shared-carts-feature-integration +originalArticleId: 1f7146bf-124f-435a-85aa-632c2c2738ca +redirect_from: + - /2021080/docs/shared-carts-feature-integration + - /2021080/docs/en/shared-carts-feature-integration + - /docs/shared-carts-feature-integration + - /docs/en/shared-carts-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/shared-carts-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/shared-carts-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html +related: + - title: Shared Cart feature overview + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/feature-overviews/shared-carts-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shared-carts-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md new file mode 100644 index 00000000000..e8989fa7d11 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Uuid Generation Console feature +description: Learn to install Spryker Uuid Generation Console feature in to your Spryker projects. +last_updated: Jul 4, 2022 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/install-features/install-the-uuid-generation-console-feature.html + - /docs/scos/dev/feature-integration-guides/202005.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202009.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201811.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202001.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202108.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/uuid-generation-console-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/uuid-generation-console-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-configurable-bundle-glue-api.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md new file mode 100644 index 00000000000..ae168ae2ad8 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.md @@ -0,0 +1,16 @@ +--- +title: Install the Cart Glue API +description: A guide on how to install the Spryker Cart API feature in to your projects. +last_updated: Jul 27, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-cart-feature-integration +originalArticleId: a46d4b97-ad7c-45bd-aef7-23dbfac109c1 +redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-cart-feature-integration.html + - /docs/pbc/all/cart-and-checkout/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-product-bundle-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-product-bundle-glue-api.md new file mode 100644 index 00000000000..8466ab3986f --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-product-bundle-glue-api.md @@ -0,0 +1,13 @@ +--- +title: Install the Cart + Product Bundle Glue API +description: Learn how to install the the Cart + Product Bundle Glue API in a Spryker project. +last_updated: Jan 20, 2026 +template: feature-integration-guide-template +related: + - title: Install the Product Bundles Glue API + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html +redirect_from: +- /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cart-product-bundle-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundle-cart-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md new file mode 100644 index 00000000000..011168c7d23 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md @@ -0,0 +1,22 @@ +--- +title: Install the Checkout Glue API +description: A guide on how to install the Spryker Checkout glue API feature in to your projects. +template: feature-integration-guide-template +last_updated: Dec 27, 2023 +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-checkout-feature-integration +originalArticleId: f44bd963-7af3-4ce8-8b7a-3c1477880728 + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html +related: + - title: Install the Checkout feature + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html + - title: Check out purchases + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html + - title: Update payment data + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html + - title: Submit checkout data + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html +redirect_from: +- /docs/pbc/all/cart-and-checkout/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-checkout-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-multiple-carts-glue-api.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md new file mode 100644 index 00000000000..35ff10f6620 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.md @@ -0,0 +1,12 @@ +--- +title: Install the Shared Carts Glue API +description: A guide on how to install the Spryker Shared Carts glue API feature in to your projects. +last_updated: Jul 4, 2022 +template: feature-integration-guide-template +redirect_from: + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shared-carts-feature-integration.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-shared-carts-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shared-carts-glue-api.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-calculation-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-calculation-module.md new file mode 100644 index 00000000000..0e9f797233f --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-calculation-module.md @@ -0,0 +1,36 @@ +--- +title: Upgrade the Calculation module +description: Use the guide to update versions to the newer ones of the Calculation module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-calculation +originalArticleId: a8b72f36-be06-4e41-9aee-139194663b53 +redirect_from: + - /2021080/docs/mg-calculation + - /2021080/docs/en/mg-calculation + - /docs/mg-calculation + - /docs/en/mg-calculation + - /v1/docs/mg-calculation + - /v1/docs/en/mg-calculation + - /v2/docs/mg-calculation + - /v2/docs/en/mg-calculation + - /v3/docs/mg-calculation + - /v3/docs/en/mg-calculation + - /v4/docs/mg-calculation + - /v4/docs/en/mg-calculation + - /v5/docs/mg-calculation + - /v5/docs/en/mg-calculation + - /v6/docs/mg-calculation + - /v6/docs/en/mg-calculation + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-calculation.html + - /docs/scos/dev/module-migration-guides/migration-guide-calculation.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-calculation-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-calculation-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.md new file mode 100644 index 00000000000..6d9b5b9d7f3 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the Cart module +description: Use this guide to help you upgrade the Spryker cart module from older versions to a newer one. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cart +originalArticleId: be41d310-b875-4753-b5f5-a01b8ae6b3f8 +redirect_from: + - /2021080/docs/mg-cart + - /2021080/docs/en/mg-cart + - /docs/mg-cart + - /docs/en/mg-cart + - /v1/docs/mg-cart + - /v1/docs/en/mg-cart + - /v2/docs/mg-cart + - /v2/docs/en/mg-cart + - /v3/docs/mg-cart + - /v3/docs/en/mg-cart + - /v4/docs/mg-cart + - /v4/docs/en/mg-cart + - /v5/docs/mg-cart + - /v5/docs/en/mg-cart + - /v6/docs/mg-cart + - /v6/docs/en/mg-cart + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cart.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cart.html + - /module_migration_guides/mg-cart.htm + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-cart.html + - /docs/pbc/all/cart-and-checkout/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-cart-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.md new file mode 100644 index 00000000000..50ce584e1ac --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.md @@ -0,0 +1,14 @@ +--- +title: Upgrade the CartExtension module +description: Use the guide to update versions to the newer ones of the CartExtension module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cart-extension +originalArticleId: dcc5e5bf-93e8-4ce6-9148-31b73c5c5555 +redirect_from: + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-cartextension.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-cartextension-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.md new file mode 100644 index 00000000000..cdb53f650b7 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the CartPage module +description: Use the guide to update versions to the newer ones of the CartPage module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cart-page +originalArticleId: 41a50114-b4ba-4e84-a62d-940a2a44ecc0 +redirect_from: + - /2021080/docs/mg-cart-page + - /2021080/docs/en/mg-cart-page + - /docs/mg-cart-page + - /docs/en/mg-cart-page + - /v1/docs/mg-cart-page + - /v1/docs/en/mg-cart-page + - /v2/docs/mg-cart-page + - /v2/docs/en/mg-cart-page + - /v3/docs/mg-cart-page + - /v3/docs/en/mg-cart-page + - /v4/docs/mg-cart-page + - /v4/docs/en/mg-cart-page + - /v5/docs/mg-cart-page + - /v5/docs/en/mg-cart-page + - /v6/docs/mg-cart-page + - /v6/docs/en/mg-cart-page + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cartpage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cartpage.html + - /module_migration_guides/mg-cart-page.htm + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-cartpage.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cartpage-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.md new file mode 100644 index 00000000000..8272536b1df --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.md @@ -0,0 +1,38 @@ +--- +title: Upgrade the CartsRestApi module +description: A guide to help you upgrade the Spryker cart rest API module from older versions to a newer one. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/cartsrestapi-migration-guide +originalArticleId: 68309196-b653-46f1-8d15-41ca70c19b9e +redirect_from: + - /2021080/docs/cartsrestapi-migration-guide + - /2021080/docs/en/cartsrestapi-migration-guide + - /docs/cartsrestapi-migration-guide + - /docs/en/cartsrestapi-migration-guide + - /v1/docs/cartsrestapi-migration-guide + - /v1/docs/en/cartsrestapi-migration-guide + - /v2/docs/cartsrestapi-migration-guide + - /v2/docs/en/cartsrestapi-migration-guide + - /v3/docs/cartsrestapi-migration-guide + - /v3/docs/en/cartsrestapi-migration-guide + - /v4/docs/cartsrestapi-migration-guide + - /v4/docs/en/cartsrestapi-migration-guide + - /v5/docs/cartsrestapi-migration-guide + - /v5/docs/en/cartsrestapi-migration-guide + - /v6/docs/cartsrestapi-migration-guide + - /v6/docs/en/cartsrestapi-migration-guide + - /docs/scos/dev/module-migration-guides/201811.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/201903.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/201907.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/cartsrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/glue-api/cartsrestapi-migration-guide.html + - /module_migration_guides/glue_api/cartsrestapi-migration-guide.htm + - /docs/scos/dev/module-migration-guides/202311.0/glue-api/cartsrestapi-migration-guide.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-cartsrestapi-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.md new file mode 100644 index 00000000000..6f305ecae4c --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.md @@ -0,0 +1,27 @@ +--- +title: Upgrade the CartVariant module +description: Use the guide to migrate and upgrade to a new version of the Spryker CartVariant module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cart-variant +originalArticleId: 159a6b1b-591c-4e98-9487-57895c64fe6a +redirect_from: + - /2021080/docs/mg-cart-variant + - /2021080/docs/en/mg-cart-variant + - /docs/mg-cart-variant + - /docs/en/mg-cart-variant + - /v4/docs/mg-cart-variant + - /v4/docs/en/mg-cart-variant + - /v5/docs/mg-cart-variant + - /v5/docs/en/mg-cart-variant + - /v6/docs/mg-cart-variant + - /v6/docs/en/mg-cart-variant + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cartvariant.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cartvariant.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cartvariant.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cartvariant.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-cartvariant.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cartvariant-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkout-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkout-module.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkout-module.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkout-module.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutpage-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutpage-module.md new file mode 100644 index 00000000000..bbfa59f265e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutpage-module.md @@ -0,0 +1,27 @@ +--- +title: Upgrade the CheckoutPage module +description: Use the guide to migrate and upgrade to a new version of the Spryker CheckoutPage module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-checkoutpage +originalArticleId: ad6a8508-ee6a-43d5-a92a-b876ee64ea17 +redirect_from: + - /2021080/docs/migration-guide-checkoutpage + - /2021080/docs/en/migration-guide-checkoutpage + - /docs/migration-guide-checkoutpage + - /docs/en/migration-guide-checkoutpage + - /v4/docs/migration-guide-checkoutpage + - /v4/docs/en/migration-guide-checkoutpage + - /v5/docs/migration-guide-checkoutpage + - /v5/docs/en/migration-guide-checkoutpage + - /v6/docs/migration-guide-checkoutpage + - /v6/docs/en/migration-guide-checkoutpage + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-checkoutpage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-checkoutpage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-checkoutpage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-checkoutpage.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-checkoutpage.html + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutpage-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-checkoutpage-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutrestapi-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutrestapi-module.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutrestapi-module.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-checkoutrestapi-module.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-multicartpage-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-multicartpage-module.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-multicartpage-module.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-multicartpage-module.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-persistentcart-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-persistentcart-module.md new file mode 100644 index 00000000000..6bfb4f683b7 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-persistentcart-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the PersistentCart module +description: Use the guide to migrate and upgrade to a newer version of the Spryker PersistentCart module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-persistent-cart +originalArticleId: 60def6a2-692d-4f3c-86a6-61b3a07b88fc +redirect_from: + - /2021080/docs/mg-persistent-cart + - /2021080/docs/en/mg-persistent-cart + - /docs/mg-persistent-cart + - /docs/en/mg-persistent-cart + - /v1/docs/mg-persistent-cart + - /v1/docs/en/mg-persistent-cart + - /v2/docs/mg-persistent-cart + - /v2/docs/en/mg-persistent-cart + - /v3/docs/mg-persistent-cart + - /v3/docs/en/mg-persistent-cart + - /v4/docs/mg-persistent-cart + - /v4/docs/en/mg-persistent-cart + - /v5/docs/mg-persistent-cart + - /v5/docs/en/mg-persistent-cart + - /v6/docs/mg-persistent-cart + - /v6/docs/en/mg-persistent-cart + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-payone-suite.html + - /docs/scos/dev/module-migration-guides/migration-guide-payone-suite.html + - /module_migration_guides/mg-persistent-cart.htm + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-persistentcart-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-persistentcart-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorder-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorder-module.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorder-module.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorder-module.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.md new file mode 100644 index 00000000000..e907f7722b7 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.md @@ -0,0 +1,33 @@ +--- +title: Upgrade the QuickOrderPage module +description: A guide on how to upgrade and migrate the Spryker quick order page module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-quick-order-page +originalArticleId: 5fe55c2a-84de-48bc-8eef-ff87bff2f3cb +redirect_from: + - /2021080/docs/mg-quick-order-page + - /2021080/docs/en/mg-quick-order-page + - /docs/mg-quick-order-page + - /docs/en/mg-quick-order-page + - /v2/docs/mg-quick-order-page + - /v2/docs/en/mg-quick-order-page + - /v3/docs/mg-quick-order-page + - /v3/docs/en/mg-quick-order-page + - /v4/docs/mg-quick-order-page + - /v4/docs/en/mg-quick-order-page + - /v5/docs/mg-quick-order-page + - /v5/docs/en/mg-quick-order-page + - /v6/docs/mg-quick-order-page + - /v6/docs/en/mg-quick-order-page + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-quickorderpage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-quickorderpage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-quickorderpage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-quickorderpage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-quickorderpage.html + - /module_migration_guides/mg-quick-order-page.htm + - /docs/pbc/all/cart-and-checkout/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-quickorderpage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-quickorderpage-module.md %} diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stepengine-module.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stepengine-module.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stepengine-module.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stepengine-module.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-global-thresholds.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-global-thresholds.md similarity index 96% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-global-thresholds.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-global-thresholds.md index 6eed405e5a6..8a21496e38b 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-global-thresholds.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-global-thresholds.md @@ -6,12 +6,13 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-global-thresholds originalArticleId: 99d7ee06-12fa-479a-a148-7728467fb950 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-global-thresholds.html - /2021080/docs/managing-global-thresholds - /2021080/docs/en/managing-global-thresholds - /docs/managing-global-thresholds - /docs/en/managing-global-thresholds - /docs/scos/user/back-office-user-guides/202200.0/administration/thresholds/managing-global-thresholds.html - - /docs/scos/user/back-office-user-guides/202311.0/administration/thresholds/managing-global-thresholds.html + - /docs/scos/user/back-office-user-guides/202311.0/administration/thresholds/managing-global-thresholds.html - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-in-the-back-office/define-global-thresholds.html related: - title: Managing Merchant Order Thresholds diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md similarity index 97% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md index 66c740f02dd..23ec927eadf 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-merchant-order-thresholds originalArticleId: ae8c2d52-29d3-4315-b8c7-0cdffdb7ba2a redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.html - /2021080/docs/managing-merchant-order-thresholds - /2021080/docs/en/managing-merchant-order-thresholds - /docs/managing-merchant-order-thresholds diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md similarity index 94% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md index e8af038094d..0af06b92d81 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/manage-threshold-settings.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-threshold-settings originalArticleId: bd5d48d1-0890-442b-8441-01a9a1967a37 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-threshold-settings.html - /2021080/docs/managing-threshold-settings - /2021080/docs/en/managing-threshold-settings - /docs/managing-threshold-settings diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-thresholds-the-back-office.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/manage-thresholds-the-back-office.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-in-the-back-office/manage-thresholds-the-back-office.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-in-the-back-office/manage-thresholds-the-back-office.md diff --git a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202507.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md index e625308426b..913abd8a263 100644 --- a/docs/pbc/all/cart-and-checkout/202507.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/checking-out-purchases originalArticleId: 6da60ad5-47a7-4554-a7e7-d662af2295dd redirect_from: + - /docs/pbc/all/cart-and-checkout/202507.0/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - /docs/scos/dev/glue-api-guides/202009.0/checking-out/checking-out-purchases.html - /docs/scos/dev/glue-api-guides/202311.0/checking-out/checking-out-purchases.html - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/check-out-purchases.html @@ -14,7 +15,7 @@ redirect_from: This endpoint allows finalizing the checkout process by placing an order. -After sending a request, the cart is deleted, and you cannot make any further changes in the checkout data. This means the endpoint is best used for checkouts that can be performed in one pass or for finalizing a checkout after [submitting checkout data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html). +After sending a request, the cart is deleted, and you cannot make any further changes in the checkout data. This means the endpoint is best used for checkouts that can be performed in one pass or for finalizing a checkout after [submitting checkout data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html). The endpoint also provides information on whether it's necessary to redirect the user to a third-party page to complete the payment. diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-checkout-workflow.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-checkout-workflow.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-checkout-workflow.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-checkout-workflow.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md new file mode 100644 index 00000000000..e093b00f10d --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.md @@ -0,0 +1,1199 @@ +--- +title: "Glue API: Submit checkout data" +description: Submit checkout data and retrieve information needed for completing checkout. +last_updated: Dec 1, 2022 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/submitting-checkout-data +originalArticleId: 86d07f3a-6ef0-4dfe-87e0-322cc4cf42a7 +redirect_from: + - /docs/scos/dev/glue-api-guides/202009.0/checking-out/submitting-checkout-data.html + - /docs/scos/dev/glue-api-guides/202311.0/checking-out/submitting-checkout-data.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/check-out/submit-checkout-data.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/check-out/glue-api-submit-checkout-data.html +related: + - title: Check out purchases + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html + - title: Update payment data + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html +--- + +This endpoint allows submitting checkout data as many times as required. Using the endpoint, you can implement checkout steps in your Glue API client, perform verification steps, and execute other operations that require multiple calls to complete. This endpoint does not allow placing an order. + +To help customers select payment and shipment methods, the endpoint allows retrieving all the available methods so that you can display them to the customers. To simplify navigation through all the available methods, you can sort them by any attribute. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Checkout Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.html) +- [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) + + +## Submit checkout data + +To submit checkout data without order confirmation, send the request: + +*** +`POST` **/checkout-data** +*** + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | String | Required when submitting data of a [guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html). | A guest user's unique ID. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value. | +| Authorization | String | Required when submitting data of a [registered user's cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html). | An alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | payment-methods, shipments, shipment-methods, addresses, company-business-unit-addresses, carts, guest-carts | +| sort | Sorts included shipment and payment methods by an attribute. | {% raw %}{{{% endraw %}included_resource{% raw %}}}{% endraw %}.{% raw %}{{{% endraw %}attribute{% raw %}}}{% endraw %}, {% raw %}{{{% endraw %}included_resource{% raw %}}}{% endraw %}.{% raw %}{{{% endraw %}attribute{% raw %}}}{% endraw %} | + +{% info_block infoBox "Included resources" %} + +To retrieve all available shipment methods, submit checkout data with one or more shipments and include `shipments` and `shipment-methods` resources. + +{% endinfo_block %} + + +| REQUEST | USAGE | +| --- | --- | +| `POST https://glue.mysprykershop.com/checkout-data` | Submit checkout data. | +| `POST https://glue.mysprykershop.com/checkout-data?include=payment-methods` | Submit checkout data and include all available payment methods in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=addresses` | Submit checkout data and include the logged-in customer's addresses in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=shipments` | Submit checkout data and include all the order shipments in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=shipments,shipment-methods` | Submit checkout data and include all the order shipments and all available shipment methods in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=company-business-unit-addresses` | Submit checkout data and include the logged-in company users' company business unit addresses in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=shipment-methods&sort=shipment-methods.carrierName,-shipment-methods.defaultNetPrice` | Submit checkout data and include all available shipment methods in the response. Sort the returned shipment methods `carrierName` in ascending order and by `defaultNetPrice` in descending order. | +| `POST https://glue.mysprykershop.com/checkout-data?include=carts` | Submit checkout data and include the logged-in customer's cart data in the response. | +| `POST https://glue.mysprykershop.com/checkout-data?include=guest-carts` | Submit checkout data and include the guest customer's cart data in the response. | + + + +
      +Request sample: submit checkout data with one shipment + +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "1c0860e3-ebf5-52e6-b4bf-25eba6987c25", + "billingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350" + }, + "payments": [ + { + "dummyPaymentInvoice": { + "dateOfBirth": "08.04.1986" + }, + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment" + } + ], + "shipments": [ + { + "items": [ + "078_24602396" + ], + "shippingAddress": { + "id": null, + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350" + }, + "idShipmentMethod": 1, + "requestedDeliveryDate": "2021-09-29" + } + ] + } + } +} +``` + +
      + +
      +Request sample: submit checkout data with a split shipment + +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "bb5660b1-5267-5b75-8f5a-6dc4d8a21304", + "billingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350" + }, + "payments": [ + { + "dummyPaymentInvoice": { + "dateOfBirth": "08.04.1986" + }, + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment" + } + ], + "shipments": [ + { + "items": [ + "078_24602396" + ], + "shippingAddress": { + "id": null, + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350" + }, + "idShipmentMethod": 1, + "requestedDeliveryDate": "2021-09-29" + }, + { + "items": [ + "066_23294028" + ], + "shippingAddress": { + "id": null, + "salutation": "Mrs", + "firstName": "Sonia", + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "26", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350" + }, + "idShipmentMethod": 2, + "requestedDeliveryDate": null + } + ] + } + } +} +``` + +
      + +
      +Request sample: submit checkout data with a split shipment and addresses passed as IDs + +```json +{ + "data": { + "type": "checkout-data", + "attributes": { + "idCart": "2f0a0b59-b988-5829-8fd3-6d636fc8ea33", + "billingAddress": { + "id": "f4cfa794-3c5d-58b9-8485-20d52c541d1d" + }, + "payments": [ + { + "dummyPaymentInvoice": { + "dateOfBirth": "08.04.1986" + }, + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment" + } + ], + "shipments": [ + { + "items": [ + "066_23294028" + ], + "shippingAddress": { + "id": "f4cfa794-3c5d-58b9-8485-20d52c541d1d" + }, + "idShipmentMethod": 1, + "requestedDeliveryDate": "2021-09-29" + }, + { + "items": [ + "078_24602396" + ], + "shippingAddress": { + "idCompanyBusinessUnitAddress": "19a55c0d-7bf0-580c-a9e8-6edacdc1ecde" + }, + "idShipmentMethod": 2, + "requestedDeliveryDate": null + } + ] + } + } +} +``` + +
      + +
      +Request sample: submit checkout data with the logged-in customer's cart data. + +```json +{"data": + {"type": "checkout-data", + "attributes": + { + "idCart": "9743f227-97ec-5d89-8679-bc5ee7a9ea17", + "shipment": { + "idShipmentMethod": 1 + } + } + } +} +``` + +
      + +
      +Request sample: submit checkout data with the guest customer's cart data. + +```json +{"data": + {"type": "checkout-data", + "attributes": + { + "idCart": "9743f227-97ec-5d89-8679-bc5ee7a9ea17", + "shipment": { + "idShipmentMethod": 1 + } + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/checkout-data-request-attributes.md %} + + +### Response + +In case of a successful update, the endpoint responds with information that can help you fill in the missing checkout data, like the customer's addresses, available payment and shipment methods. + +
      +Response sample: submit checkout data with one shipment + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data" + } + } +} +``` + +
      + +
      +Response sample: submit checkout data with a split shipment + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=shipments" + }, + "relationships": { + "shipments": { + "data": [ + { + "type": "shipments", + "id": "c59584148dea4773f061ceaddeefae03" + }, + { + "type": "shipments", + "id": "abc6af81d38661048b561871623196d5" + } + ] + } + } + }, + "included": [ + { + "type": "shipments", + "id": "c59584148dea4773f061ceaddeefae03", + "attributes": { + "items": [ + "078_24602396" + ], + "requestedDeliveryDate": "2021-09-29", + "shippingAddress": { + "id": null, + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": null, + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultBilling": null, + "isDefaultShipping": null, + "idCompanyBusinessUnitAddress": null + }, + "selectedShipmentMethod": { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": "19.00", + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/shipments/c59584148dea4773f061ceaddeefae03" + } + }, + { + "type": "shipments", + "id": "abc6af81d38661048b561871623196d5", + "attributes": { + "items": [ + "066_23294028" + ], + "requestedDeliveryDate": null, + "shippingAddress": { + "id": null, + "salutation": "Mrs", + "firstName": "Sonia", + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "26", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": null, + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultBilling": null, + "isDefaultShipping": null, + "idCompanyBusinessUnitAddress": null + }, + "selectedShipmentMethod": { + "id": 2, + "name": "Express", + "carrierName": "Spryker Dummy Shipment", + "price": 590, + "taxRate": "19.00", + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/shipments/abc6af81d38661048b561871623196d5" + } + } + ] +} +``` + +
      + +
      +Response sample: submit checkout data with a split shipment, shipments, and shipment methods + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=shipments,shipment-methods" + }, + "relationships": { + "shipments": { + "data": [ + { + "type": "shipments", + "id": "c59584148dea4773f061ceaddeefae03" + }, + { + "type": "shipments", + "id": "abc6af81d38661048b561871623196d5" + } + ] + } + } + }, + "included": [ + { + "type": "shipment-methods", + "id": "1", + "attributes": { + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "deliveryTime": null, + "price": 490, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-methods/1" + } + }, + { + "type": "shipment-methods", + "id": "2", + "attributes": { + "name": "Express", + "carrierName": "Spryker Dummy Shipment", + "deliveryTime": null, + "price": 590, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-methods/2" + } + }, + { + "type": "shipment-methods", + "id": "3", + "attributes": { + "name": "Air Standard", + "carrierName": "Spryker Drone Shipment", + "deliveryTime": null, + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-methods/3" + } + }, + { + "type": "shipment-methods", + "id": "4", + "attributes": { + "name": "Air Sonic", + "carrierName": "Spryker Drone Shipment", + "deliveryTime": null, + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-methods/4" + } + }, + { + "type": "shipment-methods", + "id": "5", + "attributes": { + "name": "Air Light", + "carrierName": "Spryker Drone Shipment", + "deliveryTime": null, + "price": 1500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/shipment-methods/5" + } + }, + { + "type": "shipments", + "id": "c59584148dea4773f061ceaddeefae03", + "attributes": { + "items": [ + "078_24602396" + ], + "requestedDeliveryDate": "2021-09-29", + "shippingAddress": { + "id": null, + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": null, + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultBilling": null, + "isDefaultShipping": null, + "idCompanyBusinessUnitAddress": null + }, + "selectedShipmentMethod": { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": "19.00", + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/shipments/c59584148dea4773f061ceaddeefae03" + }, + "relationships": { + "shipment-methods": { + "data": [ + { + "type": "shipment-methods", + "id": "1" + }, + { + "type": "shipment-methods", + "id": "2" + }, + { + "type": "shipment-methods", + "id": "3" + }, + { + "type": "shipment-methods", + "id": "4" + }, + { + "type": "shipment-methods", + "id": "5" + } + ] + } + } + }, + { + "type": "shipments", + "id": "abc6af81d38661048b561871623196d5", + "attributes": { + "items": [ + "066_23294028" + ], + "requestedDeliveryDate": null, + "shippingAddress": { + "id": null, + "salutation": "Mrs", + "firstName": "Sonia", + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "26", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": null, + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultBilling": null, + "isDefaultShipping": null, + "idCompanyBusinessUnitAddress": null + }, + "selectedShipmentMethod": { + "id": 2, + "name": "Express", + "carrierName": "Spryker Dummy Shipment", + "price": 590, + "taxRate": "19.00", + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/shipments/abc6af81d38661048b561871623196d5" + }, + "relationships": { + "shipment-methods": { + "data": [ + { + "type": "shipment-methods", + "id": "1" + }, + { + "type": "shipment-methods", + "id": "2" + }, + { + "type": "shipment-methods", + "id": "3" + }, + { + "type": "shipment-methods", + "id": "4" + }, + { + "type": "shipment-methods", + "id": "5" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: submit checkout data with customer addresses + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=addresses" + }, + "relationships": { + "addresses": { + "data": [ + { + "type": "addresses", + "id": "f4cfa794-3c5d-58b9-8485-20d52c541d1d" + }, + { + "type": "addresses", + "id": "904827b4-2b6d-537c-b621-6a1fe2965b4c" + }, + { + "type": "addresses", + "id": "70ea4850-1092-54ed-aa81-0257ee60ae8a" + } + ] + } + } + }, + "included": [ + { + "type": "addresses", + "id": "f4cfa794-3c5d-58b9-8485-20d52c541d1d", + "attributes": { + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "zipCode": "10115", + "city": "Berlin", + "country": "Germany", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "links": { + "self": "https://glue.mysprykershop.com/customers/DE--21/addresses/f4cfa794-3c5d-58b9-8485-20d52c541d1d" + } + }, + { + "type": "addresses", + "id": "904827b4-2b6d-537c-b621-6a1fe2965b4c", + "attributes": { + "salutation": "Mrs", + "firstName": "Sonia", + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "25", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": "Germany", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultShipping": false, + "isDefaultBilling": false + }, + "links": { + "self": "https://glue.mysprykershop.com/customers/DE--21/addresses/904827b4-2b6d-537c-b621-6a1fe2965b4c" + } + }, + { + "type": "addresses", + "id": "70ea4850-1092-54ed-aa81-0257ee60ae8a", + "attributes": { + "salutation": "Mrs", + "firstName": "Sonia", + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "25", + "address3": "new one", + "zipCode": "10115", + "city": "Berlin", + "country": "Germany", + "iso2Code": "DE", + "company": "spryker", + "phone": "+49 (30) 2084 98350", + "isDefaultShipping": false, + "isDefaultBilling": false + }, + "links": { + "self": "https://glue.mysprykershop.com/customers/DE--21/addresses/70ea4850-1092-54ed-aa81-0257ee60ae8a" + } + } + ] +} +``` + +
      + + +
      +Response sample: submit checkout data with company business unit addresses + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [ + { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + ], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=company-business-unit-addresses" + }, + "relationships": { + "company-business-unit-addresses": { + "data": [ + { + "type": "company-business-unit-addresses", + "id": "19a55c0d-7bf0-580c-a9e8-6edacdc1ecde" + } + ] + } + } + }, + "included": [ + { + "type": "company-business-unit-addresses", + "id": "19a55c0d-7bf0-580c-a9e8-6edacdc1ecde", + "attributes": { + "address1": "Kirncher Str.", + "address2": "7", + "address3": "", + "zipCode": "10247", + "city": "Berlin", + "phone": "4902890031", + "iso2Code": "DE", + "comment": "" + }, + "links": { + "self": "https://glue.mysprykershop.com/company-business-unit-addresses/19a55c0d-7bf0-580c-a9e8-6edacdc1ecde" + } + } + ] +} +``` + +
      + + +
      +Response sample: submit checkout data with payment methods + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [], + "selectedPaymentMethods": [ + { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "requiredRequestData": [ + "paymentMethod", + "paymentProvider" + ] + } + ] + }, + "links": { + "self": " + }, + "relationships": { + "payment-methods": { + "data": [ + { + "type": "payment-methods", + "id": "1" + }, + { + "type": "payment-methods", + "id": "2" + } + ] + } + } + }, + "included": [ + { + "type": "payment-methods", + "id": "1", + "attributes": { + "paymentMethodName": "Invoice", + "paymentProviderName": "DummyPayment", + "priority": 1, + "requiredRequestData": [ + "paymentMethod", + "paymentProvider", + "dummyPaymentInvoice.dateOfBirth" + ] + }, + "links": { + "self": " + } + }, + { + "type": "payment-methods", + "id": "2", + "attributes": { + "paymentMethodName": "Credit Card", + "paymentProviderName": "DummyPayment", + "priority": 2, + "requiredRequestData": [ + "paymentMethod", + "paymentProvider", + "dummyPaymentCreditCard.cardType", + "dummyPaymentCreditCard.cardNumber", + "dummyPaymentCreditCard.nameOnCard", + "dummyPaymentCreditCard.cardExpiresMonth", + "dummyPaymentCreditCard.cardExpiresYear", + "dummyPaymentCreditCard.cardSecurityCode" + ] + }, + "links": { + "self": " + } + } + ] +} +``` + +
      + +
      +Response sample: submit checkout data with the logged-in customer's cart data. + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [ + { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + ], + "selectedPaymentMethods": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=carts" + }, + "relationships": { + "carts": { + "data": [ + { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + ] + } + } + }, + "included": [ + { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Test1", + "isDefault": true, + "totals": { + "expenseTotal": 490, + "discountTotal": 0, + "taxTotal": 78, + "subtotal": 0, + "grandTotal": 490, + "priceToPay": 490, + "shipmentTotal": 490 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + } + ] +} +``` + +
      + +
      +Response sample: submit checkout data with the guest customer's cart data. + +```json +{ + "data": { + "type": "checkout-data", + "id": null, + "attributes": { + "addresses": [], + "paymentProviders": [], + "shipmentMethods": [], + "selectedShipmentMethods": [ + { + "id": 1, + "name": "Standard", + "carrierName": "Spryker Dummy Shipment", + "price": 490, + "taxRate": null, + "deliveryTime": null, + "currencyIsoCode": "EUR" + } + ], + "selectedPaymentMethods": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/checkout-data?include=guest-carts" + }, + "relationships": { + "guest-carts": { + "data": [ + { + "type": "guest-carts", + "id": "9743f227-97ec-5d89-8679-bc5ee7a9ea17" + } + ] + } + } + }, + "included": [ + { + "type": "guest-carts", + "id": "9743f227-97ec-5d89-8679-bc5ee7a9ea17", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 490, + "discountTotal": 0, + "taxTotal": 489, + "subtotal": 6277, + "grandTotal": 6767, + "priceToPay": 6767, + "shipmentTotal": 490 + }, + "discounts": [], + "thresholds": [ + { + "type": "soft-minimum-threshold", + "threshold": 100000, + "fee": 0, + "deltaWithSubtotal": 93723, + "message": "You need to add items for €1,000.00 to pass a recommended threshold, but if you want can proceed to checkout." + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/9743f227-97ec-5d89-8679-bc5ee7a9ea17" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/checkout-data-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shipment-methods-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shipments-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/addresses-response-attributes.md %} + + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| payment-methods | paymentMethodName | String | The name of the payment method. | +| payment-methods | paymentProviderName | String | The name of the payment provider. | +| payment-methods | priority | String | Defines the order of returned payment methods in ascending order. | +| payment-methods | requiredRequestData | Object | An array of attributes required by the given method to effectuate a purchase. The exact attribute list depends on the specific provider. | +| company-business-unit-addresses | address1 | String | The first line of the customer's address. | +| company-business-unit-addresses | address2 | String | The second line of the customer's address. | +| company-business-unit-addresses | address3 | String | The third line of the customer's address. | +| company-business-unit-addresses | zipCode | String | The ZIP code. | +| company-business-unit-addresses | city | String | The name of the city. | +| company-business-unit-addresses | iso2Code | String | Specifies an ISO 2 Country Code to use. | +| company-business-unit-addresses | phone | String | Specifies the customer's phone number. | +| company-business-unit-addresses | comment | String | Comment of the business unit address. | + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 400 | Bad request. This error can occur because of the following reasons:
      • The POST data is incorrect.
      • Neither **Authorization** nor **X-Anonymous-Customer-Unique-Id** headers were provided in the request.
      | +| 422 | The checkout data is incorrect. | +| 1101 | Checkout data is invalid. | +| 1102 | Order cannot be placed. | +| 1103 | Cart not found. | +| 1104 | Cart is empty. | +| 1105 | One of Authorization or X-Anonymous-Customer-Unique-Id headers is required. | +| 1106 | Unable to delete cart. | +| 1107 | Multiple payments are not allowed. | +| 1108 | Payment method "%s" of payment provider "%s" is invalid. | + +## Next steps + +[Check out purchases](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html) diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md similarity index 98% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md index 134267eaa62..65d65320fd7 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/updating-payment-data originalArticleId: d2870fab-7811-4b18-9bfa-dafd43791d00 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html - /docs/scos/dev/glue-api-guides/201811.0/checking-out/updating-payment-data.html - /docs/scos/dev/glue-api-guides/201903.0/checking-out/updating-payment-data.html - /docs/scos/dev/glue-api-guides/201907.0/checking-out/updating-payment-data.html diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.md new file mode 100644 index 00000000000..aee85fe70c8 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.md @@ -0,0 +1,1630 @@ +--- +title: "Glue API: Retrieve customer carts" +description: Learn how to retrieve customer's carts via the Spryker Glue API with different requests for different cart actions. +last_updated: Jul 20, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-customer-carts +originalArticleId: a09a087b-5fca-483c-a2c2-f8441681b43e +redirect_from: + - /docs/scos/dev/glue-api-guides/201907.0/managing-customers/retrieving-customer-carts.html + - /docs/scos/dev/glue-api-guides/202005.0/managing-customers/retrieving-customer-carts.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-customers/retrieving-customer-carts.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-customers/retrieving-customer-carts.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/retrieve-customer-carts.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.html +related: + - title: Manage carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Confirming customer registration + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-confirm-customer-registration.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Managing customer authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html + - title: Managing customer authentication tokens via OAuth 2.0 + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html + - title: Managing customers + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html + - title: Managing customer passwords + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-passwords.html + - title: Managing customer addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html + - title: Retrieving customer orders + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html +--- + +This endpoint allows retrieving a customer's carts. + +## Installation + +For details on the modules that provide the API functionality and how to install them, see [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html). + +## Retrieve customer's carts + +To retrieve a customer's carts, send the following request: + +`GET` **/customers/*{% raw %}{{{% endraw %}customerId{% raw %}}}{% endraw %}*/carts** + +{% info_block infoBox "Note" %} + +Alternatively, you can retrieve all carts belonging to a customer through the **/carts** endpoint. For details, see [Manage carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts). + +{% endinfo_block %} + + +| PATH PARAMETER | DESCRIPTION | +|-|-| +| ***{% raw %}{{{% endraw %}customerId{% raw %}}}{% endraw %}*** | Customer unique identifier to retrieve orders of. To get it, [retrieve a customer](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html#retrieve-customers) or [create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer). | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +|-|-|-| +| include | Adds resource relationships to the request. | items cart-permission-groups shared-carts company-users cart-rules promotional-items vouchers gift-cards concrete-products product-options product-labels | + +{% info_block infoBox "Includes resources" %} + +To retrieve all the product options of the item in a cart, include items, concrete-products, and product-options. +To retrieve information about the company user a cart is shared with, include shared-carts and company-users. +To retrieve product labels of the products in a cart, include items, concrete-products, and product-labels. + +{% endinfo_block %} + +| REQUEST | USAGE | +|-|-| +| `GET https://glue.mysprykershop.com/customers/DE--1/carts` | Retrieve all carts of a user. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=items` | Retrieve all carts of a user with the items in them included. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=cart-permission-groups` | Retrieve all carts of a user with cart permission groups included. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=shared-carts` | Retrieve all carts of a user with shared carts. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=shared-carts,company-users` | Retrieve all carts of a user with information about shared carts and the company uses they are shared with. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=cart-rules` | Retrieve all carts of a user with cart rules. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=vouchers` | Retrieve all carts of a user with information about applied vouchers. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=promotional-items` | Retrieve information about promotional items for the cart. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=gift-cards` | Retrieve all carts of a user with applied gift cards. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=items,concrete-products,product-options` | Retrieve all carts of a user with items, respective concrete product, and their product options. | +| `GET https://glue.mysprykershop.com/customers/DE--1/?include=items,concrete-products,product-labels` | Retrieve all carts of a user with information about concrete products and the product labels assigned to the products in the carts. | + +### Response + +
      Response sample: no carts are found + +```json +{ + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + +
      Response sample: retrieve multiple customer's carts + +```json +{ + "data": [ + { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 3744, + "taxTotal": 5380, + "subtotal": 37440, + "grandTotal": 33696 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 3744, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + }, + { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Black Friday Conf Bundle", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 8324, + "taxTotal": 1469, + "subtotal": 83236, + "grandTotal": 74912 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + +
      Response sample: retrieve customer's carts with their items included + +```json +{ + "data": [ + { + "type": "carts", + "id": "ac3da9eb-f4fc-5803-94b9-343d6cd4cda4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 4158, + "taxTotal": 5974, + "subtotal": 41575, + "grandTotal": 37417, + "priceToPay": 37417 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4158, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "070_133913222" + } + ] + } + } + }, + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 6165, + "taxTotal": 3630, + "subtotal": 61647, + "grandTotal": 55482, + "priceToPay": 55482 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 6165, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "089_29634947" + }, + { + "type": "items", + "id": "201_11217755" + } + ] + } + } + }, + { + "type": "carts", + "id": "8ef901fe-fe47-5569-9668-2db890dbee6d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 4200, + "taxTotal": 6035, + "subtotal": 42000, + "grandTotal": 37800, + "priceToPay": 37800 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4200, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "005_30663301" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items" + }, + "included": [ + { + "type": "items", + "id": "070_133913222", + "attributes": { + "sku": "070_133913222", + "quantity": "1", + "groupKey": "070_133913222", + "abstractSku": "070", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41575, + "sumPrice": 41575, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41575, + "sumGrossPrice": 41575, + "unitTaxAmountFullAggregation": 5974, + "sumTaxAmountFullAggregation": 5974, + "sumSubtotalAggregation": 41575, + "unitSubtotalAggregation": 41575, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4158, + "sumDiscountAmountAggregation": 4158, + "unitDiscountAmountFullAggregation": 4158, + "sumDiscountAmountFullAggregation": 4158, + "unitPriceToPayAggregation": 37417, + "sumPriceToPayAggregation": 37417 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4/items/070_133913222" + } + }, + { + "type": "items", + "id": "089_29634947", + "attributes": { + "sku": "089_29634947", + "quantity": "1", + "groupKey": "089_29634947", + "abstractSku": "089", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41393, + "sumPrice": 41393, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41393, + "sumGrossPrice": 41393, + "unitTaxAmountFullAggregation": 2437, + "sumTaxAmountFullAggregation": 2437, + "sumSubtotalAggregation": 41393, + "unitSubtotalAggregation": 41393, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4140, + "sumDiscountAmountAggregation": 4140, + "unitDiscountAmountFullAggregation": 4140, + "sumDiscountAmountFullAggregation": 4140, + "unitPriceToPayAggregation": 37253, + "sumPriceToPayAggregation": 37253 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/089_29634947" + } + }, + { + "type": "items", + "id": "201_11217755", + "attributes": { + "sku": "201_11217755", + "quantity": "1", + "groupKey": "201_11217755", + "abstractSku": "201", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 20254, + "sumPrice": 20254, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 20254, + "sumGrossPrice": 20254, + "unitTaxAmountFullAggregation": 1193, + "sumTaxAmountFullAggregation": 1193, + "sumSubtotalAggregation": 20254, + "unitSubtotalAggregation": 20254, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2025, + "sumDiscountAmountAggregation": 2025, + "unitDiscountAmountFullAggregation": 2025, + "sumDiscountAmountFullAggregation": 2025, + "unitPriceToPayAggregation": 18229, + "sumPriceToPayAggregation": 18229 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/201_11217755" + } + }, + { + "type": "items", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "quantity": 6, + "groupKey": "005_30663301", + "abstractSku": "005", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 7000, + "sumPrice": 42000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 7000, + "sumGrossPrice": 42000, + "unitTaxAmountFullAggregation": 1006, + "sumTaxAmountFullAggregation": 6035, + "sumSubtotalAggregation": 42000, + "unitSubtotalAggregation": 7000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 700, + "sumDiscountAmountAggregation": 4200, + "unitDiscountAmountFullAggregation": 700, + "sumDiscountAmountFullAggregation": 4200, + "unitPriceToPayAggregation": 6300, + "sumPriceToPayAggregation": 37800 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d/items/005_30663301" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with cart permission groups included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "2" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-permission-groups" + }, + "included": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/1" + } + }, + { + "type": "cart-permission-groups", + "id": "2", + "attributes": { + "name": "FULL_ACCESS", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/2" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with the information on shared carts included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts" + }, + "included": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + }, + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/180ab2c2-60be-5ed4-8158-abee52d9d640" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with shared carts and include information about company users they are shared with + +```json +{ + "data": [ + { + "type": "carts", + "id": "dc16f734-968d-5a45-92b7-aae5f804f77c", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null, + "priceToPay": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/dc16f734-968d-5a45-92b7-aae5f804f77c?include=shared-carts,company-users" + } + }, + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1999, + "subtotal": 12522, + "grandTotal": 12522, + "priceToPay": 12522 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=shared-carts,company-users" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts,company-users" + }, + "included": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + }, + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863", + "attributes": { + "idCompanyUser": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/79e91e88-b83a-5095-aa64-b3914bdd4863" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + ] + } + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with the cart rules included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-rules" + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 10206, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with the information on vouchers included + +```json +{ + "data": [ + { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 1663, + "taxTotal": 5046, + "subtotal": 33265, + "grandTotal": 31602, + "priceToPay": 31602 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 1663, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerya1y" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers" + }, + "included": [ + { + "type": "vouchers", + "id": "sprykerya1y", + "attributes": { + "amount": 1663, + "code": "sprykerya1y", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-28 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykerya1y" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts withe the information on promotional items included + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17352, + "taxTotal": 19408, + "subtotal": 173517, + "grandTotal": 156165, + "priceToPay": 56165 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17352, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=promotional-items" + }, + "included": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with the information on the gift cards applied + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17145, + "taxTotal": 19408, + "subtotal": 171447, + "grandTotal": 154302, + "priceToPay": 54302 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17145, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers,gift-cards" + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20", + "attributes": { + "code": "GC-23RLC8H1-20", + "name": "Gift Card 1000", + "value": 100000, + "currencyIsoCode": "EUR", + "actualValue": 100000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/cart-codes/GC-23RLC8H1-20" + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts and include information on items, concrete products, and product options + +```json +{ + "data": [ + { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "181_31995510-3-5" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-options" + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      Response sample: retrieve customer's carts with the information on product labels included + +```json +{ + "data": [ + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 538, + "subtotal": 3369, + "grandTotal": 3369, + "priceToPay": 3369 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421511" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "sale" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "421511", + "attributes": { + "sku": "421511", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "name": "Parker ballpoint pen URBAN Premium S0911450 M refill, blue", + "description": "In transparent color tones with lightly curved body.

      * Line width: 0.5 mm * type designation of the refill: Slider 774 * refill exchangeable * printing mechanism * waterproof * design of the grip zone: round * tip material: stainless steel", + "attributes": { + "material": "metal", + "wischfest": "No", + "abwischbar": "No", + "wasserfest": "No", + "nachfuellbar": "No", + "schreibfarbe": "blue", + "brand": "Parker" + }, + "superAttributesDefinition": [ + "material" + ], + "metaTitle": "", + "metaKeywords": "Schreibgeräte,Schreibgeräte,Kugelschreiber,Kugelschreiber,Kulis,Kulis,Kulischreiber,Kulischreiber", + "metaDescription": "", + "attributeNames": { + "material": "Material", + "wischfest": "Smudge-resistant", + "abwischbar": "Wipeable", + "wasserfest": "Watertight", + "nachfuellbar": "Refillable", + "schreibfarbe": "Writing color", + "brand": "Brand" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/421511" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "items", + "id": "421511", + "attributes": { + "sku": "421511", + "quantity": "1", + "groupKey": "421511", + "abstractSku": "M21759", + "amount": null, + "calculations": { + "unitPrice": 3369, + "sumPrice": 3369, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3369, + "sumGrossPrice": 3369, + "unitTaxAmountFullAggregation": 538, + "sumTaxAmountFullAggregation": 538, + "sumSubtotalAggregation": 3369, + "unitSubtotalAggregation": 3369, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3369, + "sumPriceToPayAggregation": 3369 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9/items/421511" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "421511" + } + ] + } + } + } + ] +} +``` + +

      + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shared-carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/cart-permission-groups-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-|-| +| promotional-items | id | String | The unique ID of the promotional item. The ID can be used to apply the promotion to the given purchase. | +| promotional-items | sku | String | The SKU of the promoted abstract product. | +| promotional-items | quantity | Integer | Specifies how many promotions can be applied to the given purchase. | +| company-users | id | String | Unique identifier of the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) with whom the cart is shared. | +| company-users | isActive | Boolean | If true, the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html)is active. | +| company-users | isDefault | Boolean | If true, the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) is default for the [customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + + + + +## Possible errors + +| CODE | REASON | +|-|-| +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 402 | Customer with the specified ID was not found. | +| 802 | Request is unauthorized. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.md new file mode 100644 index 00000000000..02c37dd948f --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.md @@ -0,0 +1,3076 @@ +--- +title: "Glue API: Manage carts of registered users" +description: Retrieve details about the carts of the registered users and learn what else you can do with the resource. +last_updated: Jun 22, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-carts-of-registered-users +originalArticleId: ac357bc6-db9b-43a5-a65a-ef55259cd379 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/carts-of-registered-users/managing-carts-of-registered-users.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-carts/carts-of-registered-users/managing-carts-of-registered-users.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/manage-carts-of-registered-users.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html +related: + - title: Managing items in carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html + - title: Managing gift cards of registered users + link: docs/pbc/all/gift-cards/page.version/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html + - title: Retrieving customer carts + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html +--- + +This endpoint allows managing carts by creating, retrieving, and deleting them. + +## Multiple carts + +Unlike guest carts, carts of registered users have an unlimited lifetime. If the Multiple Carts feature is [integrated into your project](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html), and Glue is [enabled for multi-cart operations](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html), registered users can also have an unlimited number of carts. + + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Shared Carts feature integration](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html) + +## Create a cart + +To create a cart, send the request: + +--- +`POST` **/carts** + +--- + +{% info_block infoBox %} + +Carts created via Glue API are always set as the default carts for the user. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +Request sample: `POST https://glue.mysprykershop.com/carts` + +```json +{ + "data":{ + "type":"carts", + "attributes":{ + "name":"My Cart", + "priceMode":"GROSS_MODE", + "currency":"EUR", + "store":"DE" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | ✓ | Sets the cart name.
      This field can be set only if you are using the multiple carts feature. If you are operating in a single-cart environment, an attempt to set the value will result in an error with the "422 Unprocessable Entry" status code. | +| priceMode | Enum | ✓ | Sets the price mode to be used for the cart. Possible values:
      • GROSS_MODE—prices after tax;
      • NET_MODE—prices before tax.
      For details, see [Net & Gross Prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html). | +| currency | String | ✓ | Sets the cart currency. | +| store | String | ✓ | Sets the name of the store where to create the cart. | + +### Response + + +
      +Response sample + +```json +"data": + { + "type": "carts", + "id": "f23f5cfa-7fde-5706-aefb-ac6c6bbadeab", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "discounts": [], + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "name": "My Cart", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/f23f5cfa-7fde-5706-aefb-ac6c6bbadeab" + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + + + +## Retrieve registered user's carts + +To retrieve all carts, send the request: + +--- +`GET` **/carts** + +--- + +{% info_block infoBox "Note" %} + +Alternatively, you can retrieve all carts belonging to a customer through the **/customers/*{% raw %}{{{% endraw %}customerId{% raw %}}}{% endraw %}*/carts** endpoint. For details, see [Retrieving customer carts](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html). + +{% endinfo_block %} + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • cart-permission-groups
      • shared-carts
      • company-users
      • cart-rules
      • promotional-items
      • vouchers
      • gift-cards
      • concrete-products
      • product-options
      • product-labels
      | + +{% info_block infoBox "Included resources" %} + +- To retrieve all the product options of the item in a cart, include `items`, `concrete-products`, and `product-options`. +- To retrieve information about the company user a cart is shared with, include `shared-carts` and `company-users`. +- To retrieve product labels of the products in a cart, include `items`, `concrete-products`, and `product-labels`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/carts` | Retrieve all carts of a user. | +| `GET https://glue.mysprykershop.com/carts?include=items` | Retrieve all carts of a user with the items in them included. | +| `GET https://glue.mysprykershop.com/carts?include=cart-permission-groups` | Retrieve all carts of a user with cart permission groups included. | +| `GET https://glue.mysprykershop.com/carts?include=shared-carts` | Retrieve all carts of a user with shared carts. | +| `GET https://glue.mysprykershop.com/carts?include=shared-carts,company-users` | Retrieve all carts of a user with information about shared carts and the company uses they are shared with. | +| `GET https://glue.mysprykershop.com/carts?include=cart-rules` | Retrieve all carts of a user with cart rules. | +| `GET https://glue.mysprykershop.com/carts?include=vouchers` | Retrieve all carts of a user with information about applied vouchers. | +| `GET https://glue.mysprykershop.com/carts?include=promotional-items` | Retrieve information about promotional items for the cart. | +| `GET https://glue.mysprykershop.com/carts?include=gift-cards` | Retrieve all carts of a user with applied gift cards. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-options` | Retrieve all carts of a user with items, respective concrete product, and their product options. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-labels` | Retrieve all carts of a user with information about concrete products and the product labels assigned to the products in the carts. | + +### Response + +
      +Response sample: no carts + +```json +{ + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + +
      +Response sample: multiple carts + +```json +{ + "data": [ + { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 3744, + "taxTotal": 5380, + "subtotal": 37440, + "grandTotal": 33696 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 3744, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + }, + { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Black Friday Conf Bundle", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 8324, + "taxTotal": 1469, + "subtotal": 83236, + "grandTotal": 74912 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + + + + +
      +Response sample with items + +```json +{ + "data": [ + { + "type": "carts", + "id": "ac3da9eb-f4fc-5803-94b9-343d6cd4cda4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 4158, + "taxTotal": 5974, + "subtotal": 41575, + "grandTotal": 37417, + "priceToPay": 37417 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4158, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "070_133913222" + } + ] + } + } + }, + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 6165, + "taxTotal": 3630, + "subtotal": 61647, + "grandTotal": 55482, + "priceToPay": 55482 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 6165, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "089_29634947" + }, + { + "type": "items", + "id": "201_11217755" + } + ] + } + } + }, + { + "type": "carts", + "id": "8ef901fe-fe47-5569-9668-2db890dbee6d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 4200, + "taxTotal": 6035, + "subtotal": 42000, + "grandTotal": 37800, + "priceToPay": 37800 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4200, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "005_30663301" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items" + }, + "included": [ + { + "type": "items", + "id": "070_133913222", + "attributes": { + "sku": "070_133913222", + "quantity": "1", + "groupKey": "070_133913222", + "abstractSku": "070", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41575, + "sumPrice": 41575, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41575, + "sumGrossPrice": 41575, + "unitTaxAmountFullAggregation": 5974, + "sumTaxAmountFullAggregation": 5974, + "sumSubtotalAggregation": 41575, + "unitSubtotalAggregation": 41575, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4158, + "sumDiscountAmountAggregation": 4158, + "unitDiscountAmountFullAggregation": 4158, + "sumDiscountAmountFullAggregation": 4158, + "unitPriceToPayAggregation": 37417, + "sumPriceToPayAggregation": 37417 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4/items/070_133913222" + } + }, + { + "type": "items", + "id": "089_29634947", + "attributes": { + "sku": "089_29634947", + "quantity": "1", + "groupKey": "089_29634947", + "abstractSku": "089", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41393, + "sumPrice": 41393, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41393, + "sumGrossPrice": 41393, + "unitTaxAmountFullAggregation": 2437, + "sumTaxAmountFullAggregation": 2437, + "sumSubtotalAggregation": 41393, + "unitSubtotalAggregation": 41393, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4140, + "sumDiscountAmountAggregation": 4140, + "unitDiscountAmountFullAggregation": 4140, + "sumDiscountAmountFullAggregation": 4140, + "unitPriceToPayAggregation": 37253, + "sumPriceToPayAggregation": 37253 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/089_29634947" + } + }, + { + "type": "items", + "id": "201_11217755", + "attributes": { + "sku": "201_11217755", + "quantity": "1", + "groupKey": "201_11217755", + "abstractSku": "201", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 20254, + "sumPrice": 20254, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 20254, + "sumGrossPrice": 20254, + "unitTaxAmountFullAggregation": 1193, + "sumTaxAmountFullAggregation": 1193, + "sumSubtotalAggregation": 20254, + "unitSubtotalAggregation": 20254, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2025, + "sumDiscountAmountAggregation": 2025, + "unitDiscountAmountFullAggregation": 2025, + "sumDiscountAmountFullAggregation": 2025, + "unitPriceToPayAggregation": 18229, + "sumPriceToPayAggregation": 18229 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/201_11217755" + } + }, + { + "type": "items", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "quantity": 6, + "groupKey": "005_30663301", + "abstractSku": "005", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 7000, + "sumPrice": 42000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 7000, + "sumGrossPrice": 42000, + "unitTaxAmountFullAggregation": 1006, + "sumTaxAmountFullAggregation": 6035, + "sumSubtotalAggregation": 42000, + "unitSubtotalAggregation": 7000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 700, + "sumDiscountAmountAggregation": 4200, + "unitDiscountAmountFullAggregation": 700, + "sumDiscountAmountFullAggregation": 4200, + "unitPriceToPayAggregation": 6300, + "sumPriceToPayAggregation": 37800 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d/items/005_30663301" + } + } + ] +} +``` + +
      + + +
      +Response sample with cart permission groups + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "2" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-permission-groups" + }, + "included": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/1" + } + }, + { + "type": "cart-permission-groups", + "id": "2", + "attributes": { + "name": "FULL_ACCESS", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/2" + } + } + ] +} +``` + +
      + + +
      +Response sample with shared carts + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts" + }, + "included": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + }, + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/180ab2c2-60be-5ed4-8158-abee52d9d640" + } + } + ] +} +``` + +
      + +
      +Response sample with shared carts and company users they are shared with + +```json +{ + "data": [ + { + "type": "carts", + "id": "dc16f734-968d-5a45-92b7-aae5f804f77c", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null, + "priceToPay": null + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/dc16f734-968d-5a45-92b7-aae5f804f77c?include=shared-carts,company-users" + } + }, + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1999, + "subtotal": 12522, + "grandTotal": 12522, + "priceToPay": 12522 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=shared-carts,company-users" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts,company-users" + }, + "included": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + }, + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863", + "attributes": { + "idCompanyUser": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/79e91e88-b83a-5095-aa64-b3914bdd4863" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with cart rules + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-rules" + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 10206, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample with vouchers + +```json +{ + "data": [ + { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 1663, + "taxTotal": 5046, + "subtotal": 33265, + "grandTotal": 31602, + "priceToPay": 31602 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 1663, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerya1y" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers" + }, + "included": [ + { + "type": "vouchers", + "id": "sprykerya1y", + "attributes": { + "amount": 1663, + "code": "sprykerya1y", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-28 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykerya1y" + } + } + ] +} +``` + +
      + +
      +Response sample with a promotional item + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17352, + "taxTotal": 19408, + "subtotal": 173517, + "grandTotal": 156165, + "priceToPay": 56165 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17352, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=promotional-items" + }, + "included": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } + ] +} +``` + +
      + +
      +Response sample with gift cards applied + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17145, + "taxTotal": 19408, + "subtotal": 171447, + "grandTotal": 154302, + "priceToPay": 54302 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17145, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers,gift-cards" + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20", + "attributes": { + "code": "GC-23RLC8H1-20", + "name": "Gift Card 1000", + "value": 100000, + "currencyIsoCode": "EUR", + "actualValue": 100000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/cart-codes/GC-23RLC8H1-20" + } + } + ] +} +``` + +
      + +
      +Response sample with items, concrete products, and product options + +```json +{ + "data": [ + { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "181_31995510-3-5" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-options" + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with product labels + +```json +{ + "data": [ + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 538, + "subtotal": 3369, + "grandTotal": 3369, + "priceToPay": 3369 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421511" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "sale" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "421511", + "attributes": { + "sku": "421511", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "name": "Parker ballpoint pen URBAN Premium S0911450 M refill, blue", + "description": "In transparent color tones with lightly curved body.

      * Line width: 0.5 mm * type designation of the refill: Slider 774 * refill exchangeable * printing mechanism * waterproof * design of the grip zone: round * tip material: stainless steel", + "attributes": { + "material": "metal", + "wischfest": "No", + "abwischbar": "No", + "wasserfest": "No", + "nachfuellbar": "No", + "schreibfarbe": "blue", + "brand": "Parker" + }, + "superAttributesDefinition": [ + "material" + ], + "metaTitle": "", + "metaKeywords": "Schreibgeräte,Schreibgeräte,Kugelschreiber,Kugelschreiber,Kulis,Kulis,Kulischreiber,Kulischreiber", + "metaDescription": "", + "attributeNames": { + "material": "Material", + "wischfest": "Smudge-resistant", + "abwischbar": "Wipeable", + "wasserfest": "Watertight", + "nachfuellbar": "Refillable", + "schreibfarbe": "Writing color", + "brand": "Brand" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/421511" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "items", + "id": "421511", + "attributes": { + "sku": "421511", + "quantity": "1", + "groupKey": "421511", + "abstractSku": "M21759", + "amount": null, + "calculations": { + "unitPrice": 3369, + "sumPrice": 3369, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3369, + "sumGrossPrice": 3369, + "unitTaxAmountFullAggregation": 538, + "sumTaxAmountFullAggregation": 538, + "sumSubtotalAggregation": 3369, + "unitSubtotalAggregation": 3369, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3369, + "sumPriceToPayAggregation": 3369 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9/items/421511" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "421511" + } + ] + } + } + } + ] +} +``` + +

      + + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/cart-permission-groups-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + + +|INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| promotional-items | id | String | The unique ID of the promotional item. The ID can be used to apply the promotion to the given purchase. | +| promotional-items | sku | String | The SKU of the promoted abstract product. | +| promotional-items | quantity | Integer | Specifies how many promotions can be applied to the given purchase. | +| shared-carts | idCompanyUser | String | The unique ID of the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) with whom the cart is shared. | +| shared-carts | idCartPermissionGroup | Integer | The unique ID of the cart permission group that describes the permissions granted to the user with whom the cart is shared. | +| company-users | id | String | The unique ID of the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) with whom the cart is shared. | +| company-users | isActive | Boolean | If true, the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) is active. | +| company-users | isDefault | Boolean | If true, the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) is default for the [customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + + +## Retrieve a registered user's cart + +To retrieve a particular cart, send the request: + +--- +`GET` **/carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** | The unique ID of a cart. [Create a cart](#create-a-cart) or [Retrieve a registered user's carts](#retrieve-registered-users-carts) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | The alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • cart-permission-groups
      • shared-carts
      • company-users
      • cart-rules
      • promotional-items
      • vouchers
      • gift-cards
      • concrete-products
      • product-options
      • product-labels
      | + +{% info_block infoBox "Included resources" %} + +- To retrieve all the product options of the item in a cart, include `items`, `concrete-products`, and `product-options`. +- To retrieve product labels of the products in a cart, include `items`, `concrete-products`, and `product-labels`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=items` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with its items, related concrete products and cart permission groups included. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=cart-permission-groups` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with its cart permissions included. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=shared-carts` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with details on the shared cart. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=shared-carts,company-users` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with information about shared carts and the company uses they are shared with. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=cart-rules` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with cart rules. | +| `GET https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=promotional-items` | Retrieve the `1ce91011-8d60-59ef-9fe0-4493ef3628b2` cart with its promotional items. | +| `GET https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d?include=gift-cards` | Retrieve the `8ef901fe-fe47-5569-9668-2db890dbee6` cart with detailed information on its gift cards. | +| `GET https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options` | Retrieve the `8fc45eda-cddf-5fec-8291-e2e5f8014398` cart with items, respective concrete product, and their product options. | +| `GET https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers` | Retrieve the `976af32f-80f6-5f69-878f-4ea549ee0830` cart with detailed information on its vouchers. | +| `GET https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels` | Retrieve the `0c3ec260-694a-5cec-b78c-d37d32f92ee9` cart with information about the product labels assigned to the products in the cart. | +| `GET https://glue.mysprykershop.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b` | Retrieve the `308b51f4-2491-5bce-8cf2-436273b44f9b` cart with the unfulfilled hard and soft minimum thresholds. | +| `GET https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2` | Retrieve the `1ce91011-8d60-59ef-9fe0-4493ef3628b2` cart with the unfulfilled hard maximum threshold. | + + +### Response + +
      +Response sample + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + } + } +} +``` + +
      + + +
      +Response sample with items + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421479" + }, + { + "type": "items", + "id": "575260" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "421479", + "attributes": { + "sku": "421479", + "quantity": 2, + "groupKey": "421479", + "abstractSku": "M21744", + "amount": null, + "calculations": { + "unitPrice": 442, + "sumPrice": 884, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 442, + "sumGrossPrice": 884, + "unitTaxAmountFullAggregation": 64, + "sumTaxAmountFullAggregation": 127, + "sumSubtotalAggregation": 884, + "unitSubtotalAggregation": 442, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 44, + "sumDiscountAmountAggregation": 88, + "unitDiscountAmountFullAggregation": 44, + "sumDiscountAmountFullAggregation": 88, + "unitPriceToPayAggregation": 398, + "sumPriceToPayAggregation": 796 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4/items/421479" + } + }, + { + "type": "items", + "id": "575260", + "attributes": { + "sku": "575260", + "quantity": 1, + "groupKey": "575260", + "abstractSku": "M1028062", + "amount": null, + "calculations": { + "unitPrice": 28767, + "sumPrice": 28767, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 28767, + "sumGrossPrice": 28767, + "unitTaxAmountFullAggregation": 4133, + "sumTaxAmountFullAggregation": 4134, + "sumSubtotalAggregation": 28767, + "unitSubtotalAggregation": 28767, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2877, + "sumDiscountAmountAggregation": 2877, + "unitDiscountAmountFullAggregation": 2877, + "sumDiscountAmountFullAggregation": 2877, + "unitPriceToPayAggregation": 25890, + "sumPriceToPayAggregation": 25890 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4/items/575260" + } + } + ] +} +``` + +
      + + +
      +Response sample with cart permission groups + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/1" + } + } + ] +} +``` + +
      + + + +
      +Sample response with details on shared carts + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + ] + } + } + }, + "included": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + } + ] +} +``` + +
      + +
      +Response sample with shared carts and company users they are shared with + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1999, + "subtotal": 12522, + "grandTotal": 12522, + "priceToPay": 12522 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=shared-carts,company-users" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863" + } + ] + } + } + }, + "included": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + }, + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863", + "attributes": { + "idCompanyUser": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/79e91e88-b83a-5095-aa64-b3914bdd4863" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with cart rules + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 2965, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + + + +
      +Response sample with a promotional item + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 11113, + "taxTotal": 15107, + "subtotal": 111128, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + }, + "included": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } + ] +} +``` + +
      + + +
      +Response sample with details on gift cards + +```json +{ + "data": { + "type": "carts", + "id": "8ef901fe-fe47-5569-9668-2db890dbee6d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 4200, + "taxTotal": 6035, + "subtotal": 42000, + "grandTotal": 37800, + "priceToPay": 17800 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4200, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-I6UB6O56-20" + } + ] + } + } + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-I6UB6O56-20", + "attributes": { + "code": "GC-I6UB6O56-20", + "name": "Gift Card 200", + "value": 20000, + "currencyIsoCode": "EUR", + "actualValue": 20000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d/cart-codes/GC-I6UB6O56-20" + } + } + ] +} +``` + +
      + +
      +Response sample with items, respective concrete products, and their product options + +```json +{ + "data": { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "181_31995510-3-5" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with vouchers + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 25766, + "taxTotal": 25407, + "subtotal": 184893, + "grandTotal": 159127, + "priceToPay": 159127 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 18489, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykercu2d" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykercu2d", + "attributes": { + "amount": 7277, + "code": "sprykercu2d", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykercu2d" + } + } + ] +} +``` + +
      + +
      +Response sample with product labels + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 538, + "subtotal": 3369, + "grandTotal": 3369, + "priceToPay": 3369 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421511" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "sale" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "421511", + "attributes": { + "sku": "421511", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "name": "Parker ballpoint pen URBAN Premium S0911450 M refill, blue", + "description": "In transparent color tones with lightly curved body.

      * Line width: 0.5 mm * type designation of the refill: Slider 774 * refill exchangeable * printing mechanism * waterproof * design of the grip zone: round * tip material: stainless steel", + "attributes": { + "material": "metal", + "wischfest": "No", + "abwischbar": "No", + "wasserfest": "No", + "nachfuellbar": "No", + "schreibfarbe": "blue", + "brand": "Parker" + }, + "superAttributesDefinition": [ + "material" + ], + "metaTitle": "", + "metaKeywords": "Schreibgeräte,Schreibgeräte,Kugelschreiber,Kugelschreiber,Kulis,Kulis,Kulischreiber,Kulischreiber", + "metaDescription": "", + "attributeNames": { + "material": "Material", + "wischfest": "Smudge-resistant", + "abwischbar": "Wipeable", + "wasserfest": "Watertight", + "nachfuellbar": "Refillable", + "schreibfarbe": "Writing color", + "brand": "Brand" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/421511" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "items", + "id": "421511", + "attributes": { + "sku": "421511", + "quantity": "1", + "groupKey": "421511", + "abstractSku": "M21759", + "amount": null, + "calculations": { + "unitPrice": 3369, + "sumPrice": 3369, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3369, + "sumGrossPrice": 3369, + "unitTaxAmountFullAggregation": 538, + "sumTaxAmountFullAggregation": 538, + "sumSubtotalAggregation": 3369, + "unitSubtotalAggregation": 3369, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3369, + "sumPriceToPayAggregation": 3369 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9/items/421511" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "421511" + } + ] + } + } + } + ] +} +``` + +

      + +
      +Response sample with the unfulfilled hard and soft minimum thresholds + +```json +{ + "data": { + "type": "carts", + "id": "308b51f4-2491-5bce-8cf2-436273b44f9b", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New Year presents", + "isDefault": true, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 1350, + "subtotal": 9454, + "grandTotal": 14454, + "priceToPay": 14454 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-minimum-threshold", + "threshold": 20000, + "fee": null, + "deltaWithSubtotal": 10546, + "message": "You need to add items for €200.00 to pass a recommended threshold. Otherwise, €50 fee will be added." + }, + { + "type": "soft-minimum-threshold-fixed-fee", + "threshold": 100000, + "fee": 5000, + "deltaWithSubtotal": 90546, + "message": "You need to add items for €1,000.00 to pass a recommended threshold. Otherwise, €50.00 fee will be added." + }, + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b" + } + } +} +``` + +
      + +
      +Response sample with the unfulfilled hard maximum threshold + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 11976, + "subtotal": 70007, + "grandTotal": 75007, + "priceToPay": 75007 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-maximum-threshold", + "threshold": 5000, + "fee": null, + "deltaWithSubtotal": 65007, + "message": "You need to add items for €50 or less to pass a recommended threshold." + } + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/cart-permission-groups-response-attributes.md %} + + + +## Edit a cart + +You can edit the name of the cart, change the currency and price mode. To do that, send the request: + +--- +`PATCH` **/carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***cart_uuid*** | Unique identifier of a cart. [Create a cart](#create-a-cart) or [Retrieve a registered user's carts](#retrieve-registered-users-carts) to get it. | + +{% info_block infoBox "Info" %} + +- You can change the price mode of an empty cart but not the one that has items in it. +- Currency and store can be changed for an empty cart and for a cart with items anytime. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | The alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | +| If-Match | 075d700b908d7e41f751c5d2d4392407 | ✓ | Makes the request conditional. It matches the listed conditional ETags from the headers when retrieving the cart. The patch is applied only if the tag value matches. | + +Request sample: `https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9` + +```json +{ + "data":{ + "type":"carts", + "attributes":{ + "name":"My Cart with awesome name", + "priceMode":"GROSS_MODE", + "currency":"EUR", + "store":"DE" + } + } +} +``` + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | ✓ | Sets the cart name. This field can be set only if you are using the multiple carts feature. If you are operating in a single-cart environment, an attempt to set the value will result in an error with the `422 Unprocessable Entry` status code. Cart name should be unique and should not be longer than 30 characters.| +| priceMode | Enum | &check | Sets the price mode to be used for the cart. Possible values:
      • GROSS_MODE - prices after tax;
      • NET_MODE - prices before tax.
      For details, see [Net & Gross Prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html). | +| currency | String | ✓ | Sets the cart currency. | +| store | String | ✓ | Sets the name of the store where to create the cart. | + +### Response + +Response sample: + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart with awesome name", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 63538, + "taxTotal": 79689, + "subtotal": 635381, + "grandTotal": 571843, + "priceToPay": 571843 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9" + } + } +} +``` + +## Delete a cart + +To delete a cart, send the request: + +--- +`DELETE` **/carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***cart_uuid*** | The unique ID of a cart. [Create a cart](#create-a-cart) or [Retrieve a registered user's carts](#retrieve-registered-users-carts) to get it. | + +{% info_block infoBox "Deleting carts" %} + +You cannot delete a cart if it's the customer's only cart. If you attempt to delete a customer's last cart, the endpoint responds with the **422 Unprocessable Entry** status code. If you delete the default cart of a customer, another cart will be assigned as default automatically. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +Request sample: `DELETE https://glue.mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054` + +### Response + +If the cart is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 003 | Failed to log in the user. | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart cannot be deleted. | +| 106 | Cart item cannot be deleted. | +| 107 | Failed to create a cart. | +| 110 | Customer already has a cart. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item cannot be added. | +| 114 | Cart item cannot be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.md new file mode 100644 index 00000000000..faec71d1fcd --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.md @@ -0,0 +1,3292 @@ +--- +title: "Glue API: Manage items in carts of registered users" +description: Retrieve details about the items of the registered users' carts, and learn what else you can do with the resource. +last_updated: Jun 29, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-items-in-carts-of-registered-users +originalArticleId: 8dbe18a1-adef-48a8-9ea0-b496f13c5630 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/carts-of-registered-users/managing-items-in-carts-of-registered-users.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/manage-items-in-carts-of-registered-users.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html +related: + - title: Manage carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html + - title: "Glue API: Manage gift cards of registered users" + link: docs/pbc/all/gift-cards/page.version/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html +--- + +This endpoint allows you to manage items in the carts of registered users by adding, changing, and deleting them. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: + +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Product Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html) +- [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) +- [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) +- [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) + + + +## Add an item to a registered user's cart + +To add items to a cart, send the request: + +*** +`POST` **carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*/items** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html)) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | The alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUE | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • product-measurement-units
      • sales-units
      • cart-rules
      • vouchers
      • concrete-products
      • product-options
      • bundle-items
      • bundled-items
      • abstract-products
      | + +{% info_block infoBox "Included resources" %} + +To retrieve all the product options of the item in a cart, include `concrete-products` and `product-options`. + +{% endinfo_block %} + +
      +Request sample + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "066_23294028", + "quantity": "3" + } + } +} +``` + +
      + + +
      +Request sample with product measurement units and sales units + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items?include=sales-units,product-measurement-units` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "salesUnit": { + "id": 33, + "amount": 4.5 + } + } + } +} +``` + +
      + +
      +Request sample with cart rules + +`POST https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items?include=cart-rules` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "077_24584210", + "quantity": "10" + } + } +} +``` + +
      + +
      +Request sample with vouchers + +`POST https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items?include=vouchers` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "066_23294028", + "quantity": "1" + } + } +} +``` + +
      + +
      +Request sample with a promotional item and cart rules + +{% info_block infoBox "Cart rules" %} + +To add the promotional product to the cart, make sure that the cart fulfills the cart rules for the promotional item. + +{% endinfo_block %} + +`POST https://glue.myspsrykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items?include=cart-rules` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "idPromotionalItem": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } +} +``` + +
      + +
      +Request sample with concrete products and product options + +`POST https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items?include=concrete-products,product-options` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "productOptions": [ + { + "sku": "OP_gift_wrapping" + }, + { + "sku": "OP_3_year_waranty" + } + ] + } + } +} +``` + +
      + +
      +Request sample with bundle items + +`POST https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/items?include=bundle-items` - retrieve the cart with the `bd873e3f-4670-523d-b5db-3492d2c0bee3` ID and the product bundles inside it. + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample with bundle items and bundled items + +`POST https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/items?include=bundle-items,bundled-items` - retrieve the cart with the `bd873e3f-4670-523d-b5db-3492d2c0bee3` ID, the product bundles inside it, and the products of the product bundles. + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample with bundle items, bundled items, concrete products, and abstract products + +`POST https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/items?include=bundle-items,bundled-items,concrete-products,abstract-products` - retrieve the cart with the `bd873e3f-4670-523d-b5db-3492d2c0bee3` ID. Retrieve the product bundles inside it, the products of the product bundles, and respective abstract and concrete products. + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample with the unfulfilled hard and soft minimum thresholds + +`POST https://glue.mysprykershop.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b/items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "118_29804739", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample with the unfulfilled hard maximum threshold + +`POST https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items` + + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "136_24425591", + "quantity": 1 + } + } +} +``` + +
      + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| sku | String | ✓ | Specifies the SKU of the concrete product to add to the cart. | +| quantity | String | ✓ | Specifies the number of items to place on the cart. If you add a promotional item and the number of products exceeds the number of promotions, the exceeding items will be added without promotional benefits. | +| salesUnit | Object | | A list of attributes defining the sales unit to be used for item amount calculation. | +| salesUnit.id | Integer | | The unique ID of the sales units to calculate the item amount in. | +| salesUnit.amount | Integer | | The amount of the product in the defined sales units. | +| idPromotionalItem | String | | The promotional item ID. Specify the ID to apply the promotion benefits. | +| productOptions | Array | | A list of attributes defining the product option to add to the cart. | +| productOptions.sku | String | | The unique ID of the product option to add to the cart. | + +{% info_block infoBox "Conversion" %} + +When defining product amount in sales units, make sure that the correlation between amount and quantity corresponds to the conversion of the defined sales unit. See [Measurement Units feature overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn more. + +{% endinfo_block %} + +{% info_block infoBox "Product options" %} + +It is the responsibility of the API Client to track whether the selected items are compatible. For example, the client should not allow a 2-year and a 4-year warranty service to be applied to the same product. The API endpoints allow any combination of items, no matter whether they are compatible or not. + +{% endinfo_block %} + +### Response + +
      +Response sample + +```json +{ + "data": { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents 1", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 18850, + "subtotal": 118059, + "grandTotal": 118059, + "priceToPay": 118059 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + } +} +``` + +
      + +
      +Response sample with items, product measurement units, and sales units + +```json +{ + "data": { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Black Friday Conf Bundle", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 3425, + "taxTotal": 4921, + "subtotal": 34247, + "grandTotal": 30822 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 3425, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + }, + "included": [ + { + "type": "items", + "id": "035_17360369", + "attributes": { + "sku": "035_17360369", + "quantity": "1", + "groupKey": "035_17360369", + "abstractSku": "035", + "amount": null, + "calculations": { + "unitPrice": 29747, + "sumPrice": 29747, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 29747, + "sumGrossPrice": 29747, + "unitTaxAmountFullAggregation": 4275, + "sumTaxAmountFullAggregation": 4275, + "sumSubtotalAggregation": 29747, + "unitSubtotalAggregation": 29747, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2975, + "sumDiscountAmountAggregation": 2975, + "unitDiscountAmountFullAggregation": 2975, + "sumDiscountAmountFullAggregation": 2975, + "unitPriceToPayAggregation": 26772, + "sumPriceToPayAggregation": 26772 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16/items/035_17360369" + } + }, + { + "type": "sales-units", + "id": "33", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2/sales-units/33" + } + }, + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 215, + "sumTaxAmountFullAggregation": 646, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 150, + "sumDiscountAmountAggregation": 450, + "unitDiscountAmountFullAggregation": 150, + "sumDiscountAmountFullAggregation": 450, + "unitPriceToPayAggregation": 1350, + "sumPriceToPayAggregation": 4050 + }, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16/items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "33" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with cart rules + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 14554, + "taxTotal": 20914, + "subtotal": 145540, + "grandTotal": 130986, + "priceToPay": 130986 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 14554, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 14554, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + }, + { + "type": "items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": "10", + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 2091, + "sumTaxAmountFullAggregation": 20914, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1455, + "sumDiscountAmountAggregation": 14554, + "unitDiscountAmountFullAggregation": 1455, + "sumDiscountAmountFullAggregation": 14554, + "unitPriceToPayAggregation": 13099, + "sumPriceToPayAggregation": 130986 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/077_24584210" + } + } + ] +} +``` + +
      + +
      +Response sample with vouchers + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 25766, + "taxTotal": 25407, + "subtotal": 184893, + "grandTotal": 159127, + "priceToPay": 159127 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 18489, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykercu2d" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykercu2d", + "attributes": { + "amount": 7277, + "code": "sprykercu2d", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykercu2d" + } + }, + { + "type": "items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": "10", + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 1975, + "sumTaxAmountFullAggregation": 19752, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2183, + "sumDiscountAmountAggregation": 21831, + "unitDiscountAmountFullAggregation": 2183, + "sumDiscountAmountFullAggregation": 21831, + "unitPriceToPayAggregation": 12371, + "sumPriceToPayAggregation": 123709 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/077_24584210" + } + }, + { + "type": "items", + "id": "066_23294028", + "attributes": { + "sku": "066_23294028", + "quantity": "1", + "groupKey": "066_23294028", + "abstractSku": "066", + "amount": null, + "calculations": { + "unitPrice": 39353, + "sumPrice": 39353, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 39353, + "sumGrossPrice": 39353, + "unitTaxAmountFullAggregation": 5655, + "sumTaxAmountFullAggregation": 5655, + "sumSubtotalAggregation": 39353, + "unitSubtotalAggregation": 39353, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 3935, + "sumDiscountAmountAggregation": 3935, + "unitDiscountAmountFullAggregation": 3935, + "sumDiscountAmountFullAggregation": 3935, + "unitPriceToPayAggregation": 35418, + "sumPriceToPayAggregation": 35418 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/066_23294028" + } + } + ] +} +``` + +
      + +
      +Response sample: adding a promotional item without cart-rules relationship + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + +
      +Response sample: adding a promotional item with cart-rules relationship + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "6" + }, + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "134_29759322", + "attributes": { + "sku": "134_29759322", + "quantity": "1", + "groupKey": "134_29759322", + "abstractSku": "134", + "amount": null, + "calculations": { + "unitPrice": 1879, + "sumPrice": 1879, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1879, + "sumGrossPrice": 1879, + "unitTaxAmountFullAggregation": 270, + "sumTaxAmountFullAggregation": 270, + "sumSubtotalAggregation": 1879, + "unitSubtotalAggregation": 1879, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 188, + "sumDiscountAmountAggregation": 188, + "unitDiscountAmountFullAggregation": 188, + "sumDiscountAmountFullAggregation": 188, + "unitPriceToPayAggregation": 1691, + "sumPriceToPayAggregation": 1691 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/134_29759322" + } + }, + { + "type": "items", + "id": "118_29804739", + "attributes": { + "sku": "118_29804739", + "quantity": "1", + "groupKey": "118_29804739", + "abstractSku": "118", + "amount": null, + "calculations": { + "unitPrice": 6000, + "sumPrice": 6000, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 6000, + "sumGrossPrice": 6000, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 6000, + "unitSubtotalAggregation": 6000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 600, + "sumDiscountAmountAggregation": 600, + "unitDiscountAmountFullAggregation": 600, + "sumDiscountAmountFullAggregation": 600, + "unitPriceToPayAggregation": 5400, + "sumPriceToPayAggregation": 5400 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/118_29804739" + } + }, + { + "type": "items", + "id": "139_24699831", + "attributes": { + "sku": "139_24699831", + "quantity": "1", + "groupKey": "139_24699831", + "abstractSku": "139", + "amount": null, + "calculations": { + "unitPrice": 3454, + "sumPrice": 3454, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3454, + "sumGrossPrice": 3454, + "unitTaxAmountFullAggregation": 496, + "sumTaxAmountFullAggregation": 496, + "sumSubtotalAggregation": 3454, + "unitSubtotalAggregation": 3454, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 345, + "sumDiscountAmountAggregation": 345, + "unitDiscountAmountFullAggregation": 345, + "sumDiscountAmountFullAggregation": 345, + "unitPriceToPayAggregation": 3109, + "sumPriceToPayAggregation": 3109 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/139_24699831" + } + }, + { + "type": "items", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "quantity": 3, + "groupKey": "136_24425591", + "abstractSku": "136", + "amount": null, + "calculations": { + "unitPrice": 33265, + "sumPrice": 99795, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33265, + "sumGrossPrice": 99795, + "unitTaxAmountFullAggregation": 4780, + "sumTaxAmountFullAggregation": 14341, + "sumSubtotalAggregation": 99795, + "unitSubtotalAggregation": 33265, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 3327, + "sumDiscountAmountAggregation": 9980, + "unitDiscountAmountFullAggregation": 3327, + "sumDiscountAmountFullAggregation": 9980, + "unitPriceToPayAggregation": 29938, + "sumPriceToPayAggregation": 89815 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/136_24425591" + } + }, + { + "type": "items", + "id": "112_306918001-promotion-1", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "groupKey": "112_306918001-promotion-1", + "abstractSku": "112", + "amount": null, + "calculations": { + "unitPrice": 2079, + "sumPrice": 2079, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 2079, + "sumGrossPrice": 2079, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 2079, + "unitSubtotalAggregation": 2079, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2079, + "sumDiscountAmountAggregation": 2079, + "unitDiscountAmountFullAggregation": 2079, + "sumDiscountAmountFullAggregation": 2079, + "unitPriceToPayAggregation": 0, + "sumPriceToPayAggregation": 0 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/112_306918001-promotion-1" + } + }, + { + "type": "cart-rules", + "id": "6", + "attributes": { + "amount": 2079, + "code": null, + "discountType": "cart_rule", + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": "112", + "discountPromotionQuantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/6" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 11113, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample with concrete products and product options + +```json + { + "data": { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398" + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with bundle items + +```json +{ + "data": { + "type": "carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items/214_123/" + } + } + ] +} +``` + +
      + +
      +Response sample with bundle items and bundled items + +```json +{ + "data": { + "type": "carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "175_26935356", + "quantity": 2, + "groupKey": "175_26935356_214_123_15f844eeb3eaaf1", + "abstractSku": "175", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 8900, + "sumPrice": 8900, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 8900, + "sumGrossPrice": 8900, + "unitTaxAmountFullAggregation": 1279, + "sumTaxAmountFullAggregation": 1279, + "sumSubtotalAggregation": 8900, + "unitSubtotalAggregation": 8900, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 890, + "sumDiscountAmountAggregation": 890, + "unitDiscountAmountFullAggregation": 890, + "sumDiscountAmountFullAggregation": 890, + "unitPriceToPayAggregation": 8010, + "sumPriceToPayAggregation": 8010 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/175_26935356_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "110_19682159", + "quantity": 3, + "groupKey": "110_19682159_214_123_15f844eeb3eaaf1", + "abstractSku": "110", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 21200, + "sumPrice": 21200, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 21200, + "sumGrossPrice": 21200, + "unitTaxAmountFullAggregation": 1248, + "sumTaxAmountFullAggregation": 1248, + "sumSubtotalAggregation": 21200, + "unitSubtotalAggregation": 21200, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2120, + "sumDiscountAmountAggregation": 2120, + "unitDiscountAmountFullAggregation": 2120, + "sumDiscountAmountFullAggregation": 2120, + "unitPriceToPayAggregation": 19080, + "sumPriceToPayAggregation": 19080 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/110_19682159_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "067_24241408", + "quantity": 1, + "groupKey": "067_24241408_214_123_15f844eeb3eaaf1", + "abstractSku": "067", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 13600, + "sumPrice": 13600, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 13600, + "sumGrossPrice": 13600, + "unitTaxAmountFullAggregation": 1955, + "sumTaxAmountFullAggregation": 1955, + "sumSubtotalAggregation": 13600, + "unitSubtotalAggregation": 13600, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1360, + "sumDiscountAmountAggregation": 1360, + "unitDiscountAmountFullAggregation": 1360, + "sumDiscountAmountFullAggregation": 1360, + "unitPriceToPayAggregation": 12240, + "sumPriceToPayAggregation": 12240 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/067_24241408_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/items/214_123/" + }, + "relationships": { + "bundled-items": { + "data": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f844eeb3eaaf1" + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f844eeb3eaaf1" + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f844eeb3eaaf1" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with bundle items, bundled items, concrete products, and abstract products + +```json +{ + "data": { + "type": "carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "175_26564922", + "attributes": { + "sku": "175_26564922", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "16 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26564922" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "175", + "attributes": { + "sku": "175", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "175_26564922", + "175_26935356" + ], + "super_attributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attribute_variants": { + "internal_storage_capacity:32 GB": { + "id_product_concrete": "175_26935356" + }, + "internal_storage_capacity:16 GB": { + "id_product_concrete": "175_26564922" + } + } + }, + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + }, + "url": "/en/samsung-galaxy-tab-a-sm-t550n-16-gb-175" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/175" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + }, + { + "type": "concrete-products", + "id": "175_26564922" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f84504a21cb51", + "attributes": { + "sku": "175_26935356", + "quantity": 2, + "groupKey": "175_26935356_214_123_15f84504a21cb51", + "abstractSku": "175", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 8900, + "sumPrice": 8900, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 8900, + "sumGrossPrice": 8900, + "unitTaxAmountFullAggregation": 1279, + "sumTaxAmountFullAggregation": 1279, + "sumSubtotalAggregation": 8900, + "unitSubtotalAggregation": 8900, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 890, + "sumDiscountAmountAggregation": 890, + "unitDiscountAmountFullAggregation": 890, + "sumDiscountAmountFullAggregation": 890, + "unitPriceToPayAggregation": 8010, + "sumPriceToPayAggregation": 8010 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/175_26935356_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "110", + "attributes": { + "sku": "110", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "superAttributes": { + "color": [ + "Black" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "110_19682159" + ], + "super_attributes": { + "color": [ + "Black" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-gear-110" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/110" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "110" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f84504a21cb51", + "attributes": { + "sku": "110_19682159", + "quantity": 3, + "groupKey": "110_19682159_214_123_15f84504a21cb51", + "abstractSku": "110", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 21200, + "sumPrice": 21200, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 21200, + "sumGrossPrice": 21200, + "unitTaxAmountFullAggregation": 1248, + "sumTaxAmountFullAggregation": 1248, + "sumSubtotalAggregation": 21200, + "unitSubtotalAggregation": 21200, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2120, + "sumDiscountAmountAggregation": 2120, + "unitDiscountAmountFullAggregation": 2120, + "sumDiscountAmountFullAggregation": 2120, + "unitPriceToPayAggregation": 19080, + "sumPriceToPayAggregation": 19080 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/110_19682159_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "067", + "attributes": { + "sku": "067", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "superAttributes": { + "color": [ + "Gold" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "067_24241408" + ], + "super_attributes": { + "color": [ + "Gold" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-s5-mini-67" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/067" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "067" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f84504a21cb51", + "attributes": { + "sku": "067_24241408", + "quantity": 1, + "groupKey": "067_24241408_214_123_15f84504a21cb51", + "abstractSku": "067", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 13600, + "sumPrice": 13600, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 13600, + "sumGrossPrice": 13600, + "unitTaxAmountFullAggregation": 1955, + "sumTaxAmountFullAggregation": 1955, + "sumSubtotalAggregation": 13600, + "unitSubtotalAggregation": 13600, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1360, + "sumDiscountAmountAggregation": 1360, + "unitDiscountAmountFullAggregation": 1360, + "sumDiscountAmountFullAggregation": 1360, + "unitPriceToPayAggregation": 12240, + "sumPriceToPayAggregation": 12240 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/067_24241408_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "214", + "attributes": { + "sku": "214", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products.", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "214_123" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + }, + "url": "/en/samsung-bundle-214" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/214" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "214" + } + ] + } + } + }, + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/items/214_123/" + }, + "relationships": { + "bundled-items": { + "data": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f84504a21cb51" + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f84504a21cb51" + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f84504a21cb51" + } + ] + }, + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample with the unfulfilled hard and soft minimum thresholds + +```json +{ + "data": { + "type": "carts", + "id": "308b51f4-2491-5bce-8cf2-436273b44f9b", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New Year presents", + "isDefault": true, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 1350, + "subtotal": 9454, + "grandTotal": 14454, + "priceToPay": 14454 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-minimum-threshold", + "threshold": 20000, + "fee": null, + "deltaWithSubtotal": 10546, + "message": "You need to add items for €200.00 to pass a recommended threshold. Otherwise, €50 fee will be added." + }, + { + "type": "soft-minimum-threshold-fixed-fee", + "threshold": 100000, + "fee": 5000, + "deltaWithSubtotal": 90546, + "message": "You need to add items for €1,000.00 to pass a recommended threshold. Otherwise, €50.00 fee will be added." + }, + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b" + } + } +} +``` + +
      + +
      +Response sample with the unfulfilled hard maximum threshold + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 11976, + "subtotal": 70007, + "grandTotal": 75007, + "priceToPay": 75007 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-maximum-threshold", + "threshold": 5000, + "fee": null, + "deltaWithSubtotal": 65007, + "message": "You need to add items or €50 or less to pass a recommended threshold." + } + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/bundle-items-bundled-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + +## Add a configurable bundle to a registered user's cart + +To add a configurable bundle to a registered user's cart, send the request: + +*** +`POST` **/carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}/configured-bundles** +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***cart_uuid*** | The unique ID of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string |✓ | An alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: `POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/configured-bundles` + +```json +{ + "data": { + "type": "configured-bundles", + "attributes": { + "quantity": 2, + "templateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "items": [ + { + "sku": "112_312526171", + "quantity": 2, + "slotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + { + "sku": "047_26408568", + "quantity": 2, + "slotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + ] + } + } +} +``` + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | Integer | ✓ | The number of the configurable bundles to add. | +| templateUuid | String | ✓ | The unique ID of the configurable bundle template. To get it, [retrieve all configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html#retrieve-all-configurable-bundle-templates). | +| sku | String | ✓ | Specifies the SKU of a product to add to the cart. To use promotions, specify the SKU of a product being promoted. Concrete product SKU required. | +| quantity | Integer | ✓ | Specifies the number of items to add to the cart. If you add a promotional item and the number of products exceeds the number of promotions, the exceeding items will be added without promotional benefits. | +| slotUuid | String | ✓ | The unique ID of the slot in the configurable bundle. | + +### Response + +
      +Response sample: add a configurable bundle + +```json +{ + "data": { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1828, + "subtotal": 98894, + "grandTotal": 98894, + "priceToPay": 98894 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-047_26408568" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 87446, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 87446, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 87446, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 87446 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 11448, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 11448, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 1828, + "sumSubtotalAggregation": 11448, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 11448 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5fe35ab4d426b4.44302999-047_26408568" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/bundle-items-bundled-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| configuredBundle | template | Object | Information about the template used for the configurable bundle. | +| configuredBundleItem | slot | Object | Information about the slot of the configurable bundle. | +| configuredBundle | name | String | The name of the configurable bundle. | +| configuredBundleItem | quantityPerSlot | Integer | The number of items that a slot may contain. | +| configuredBundle | quantity | Integer | Specifies the quantity of the configurable bundles. | +| configuredBundle | groupKey | String | The unique ID of the configurable bundle. The value is generated based on the configurable bundle template and items selected in the slot. | +| configuredBundle | uuid | String | The unique ID of the configurable bundle template in the system. | +| configuredBundleItem | uuid | String | The unique ID of the slot in the configurable bundle. | + +## Change item quantity + +To change the number of items in a cart, send the request: + +*** +`PATCH` **/carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*/items/*{% raw %}{{{% endraw %}item_group_key{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***cart_uuid*** | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | +| ***{% raw %}{{{% endraw %}itemgroupkey{% raw %}}}{% endraw %}*** | Group key of the item. Usually, it's equal to the item's SKU. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + + +Request sample: + +`PATCH http://mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054/items/177_25913296` + +```json +{ + "data": { + "type": "items", + "attributes": { + "quantity": 10 + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | String | ✓ | Specifies the new quantity of the items. | + +### Response + +
      +Response sample + +```json +{ + "data": [ + { + "type": "carts", + "id": "52493031-cccf-5ad2-9cc7-93d0f738303d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "\"All in\" Conf Bundle", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 718, + "subtotal": 4500, + "grandTotal": 4500 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/52493031-cccf-5ad2-9cc7-93d0f738303d" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/items?include=items,concrete-products,cart-permission-groups" + }, + "included": [ + { + "type": "concrete-products", + "id": "cable-vga-1-2", + "attributes": { + "sku": "cable-vga-1-2", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "VGA cable as long as you want", + "description": "Screw-in VGA cable with 15-pin male input and output.

      Supports resolutions at 800x600 (SVGA), 1024x768 (XGA), 1600x1200 (UXGA), 1080p (Full HD), 1920x1200 (WUXGA), and up for high resolution LCD and LED monitors.

      The VGA cord engineered with molded strain relief connectors for durability, grip treads for easy plugging and unplugging, and finger-tightened screws for a secure connection.

      Gold-plated connectors; 100% bare copper conductors.

      Links VGA-equipped computer to any display with 15-pin VGA port.", + "attributes": { + "packaging_unit": "As long as you want" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2" + } + }, + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 239, + "sumTaxAmountFullAggregation": 718, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1500, + "sumPriceToPayAggregation": 4500 + }, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/52493031-cccf-5ad2-9cc7-93d0f738303d/items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "cable-vga-1-2" + } + ] + } + } + } + ] +} +``` + +

      + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/items-response-attributes.md %} + + +## Change quantity of configurable bundles in a registered user's cart + +To change quantity of configurable bundles in a registered user's cart, send the request: + +*** +`PATCH` /carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}/configured-bundles/{% raw %}{{{% endraw %}bundle_group_key{% raw %}}}{% endraw %}?include=items +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** | A unique identifier of a cart.[Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | +| ***{% raw %}{{{% endraw %}bundlegroupkey{% raw %}}}{% endraw %}*** | Group key of the configurable bundle. The value is generated based on the Configurable Bundle Template and items selected in the slot. You can get it when [adding the configurable bundle to a registered user's cart](#add-a-configurable-bundle-to-a-registered-users-cart). | + +### Request + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | String | ✓ | An alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: + +`PATCH https://mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/configured-bundles/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526?include=items` + +```json +{ +    "data": { +        "type": "configured-bundles", +        "attributes": { +            "quantity": 2 +        } +    } +} +``` + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | String | ✓ | Specifies the new quantity of items. | + +### Response + +
      +Response sample + +```json +{ + "data": { + "type": "carts", + "id": "e68db76b-1c9b-5fb8-88db-6cbaf8faed76", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Test cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 5483, + "subtotal": 296682, + "grandTotal": 296682, + "priceToPay": 296682 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-047_26408568" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-047_26408568" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 174892, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 174892, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 174892, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 174892 + }, + "configuredBundle": { + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 22896, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 22896, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 3656, + "sumSubtotalAggregation": 22896, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 22896 + }, + "configuredBundle": { + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526-047_26408568" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 87446, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 87446, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 87446, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 87446 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 11448, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 11448, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 1827, + "sumSubtotalAggregation": 11448, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 11448 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff3410120ce68.46429593-047_26408568" + } + } + ] +} +``` + +
      + +For the attribute descriptions, see [Add a configurable bundle to a registered user's cart](#add-a-configurable-bundle-to-a-registered-users-cart) + +## Remove items from a registered user's cart + +To remove an item from a registered user's cart, send the request: + +*** +`DELETE` **/carts/*{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*/items/*{% raw %}{{{% endraw %}item_group_key{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | +| ***{% raw %}{{{% endraw %}itemgroupkey{% raw %}}}{% endraw %}*** | Group key of the item. Usually, it's equal to the item's SKU. | + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: `DELETE http://mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054/items/177_25913296` + +### Response + +If the item is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Remove a configurable bundle from a registered user's cart + +To remove a configurable bundle from a registered user's cart, send the request: + +*** +`DELETE` ***/carts/{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}/configured-bundles/{% raw %}{{{% endraw %}bundle_group_key{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart_uuid{% raw %}}}{% endraw %}*** | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) to get it. | +| ***{% raw %}{{{% endraw %}bundle_group_key{% raw %}}}{% endraw %}*** | The group key of the configurable bundle. The value is generated based on the configurable bundle template and items selected in the slot. You can get it when [adding the configurable bundle to a registered user's cart](#add-a-configurable-bundle-to-a-registered-users-cart). | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: `DELETE https://mysprykershop.com/carts/e68db76b-1c9b-5fb8-88db-6cbaf8faed76/configured-bundles/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-5ff33dfe3418f6.24909526` + +### Response + +If the item is deleted successfully, the endpoint returns the "204 No Content" status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 003 | Failed to log in the user. | +| 101 | Cart with given uuid is not found. | +| 102 | Failed to add an item to a cart. | +| 103 | Item with the given group key is not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart cannot be deleted. | +| 106 | Cart item cannot be deleted. | +| 107 | Failed to create a cart. | +| 110 | Customer already has a cart. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item cannot be added. | +| 114 | Cart item cannot be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | +| 4001 | There was a problem adding or updating the configured bundle. | +| 4002 | Configurable bundle template is not found. | +| 4003 | The quantity of the configured bundle should be more than zero. | +| 4004 | Configured bundle with provided group key is not found in cart. | +| 4005 | The configured bundle cannot be added. | +| 4006 | The configured bundle cannot be updated. | +| 4007 | The configured bundle cannot be removed. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.md new file mode 100644 index 00000000000..0a680c5f971 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.md @@ -0,0 +1,3379 @@ +--- +title: "Glue API: Manage guest cart items" +description: Retrieve details about guest cart items and learn what else you can do with the resource. +last_updated: Jun 29, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-guest-cart-items +originalArticleId: 55c07d5d-006b-4f81-99b1-92c6a8124688 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/guest-carts/managing-guest-cart-items.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/manage-guest-carts/manage-guest-cart-items.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html +related: + - title: Manage guest carts + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.html + - title: Managing gift cards of guest users + link: docs/pbc/all/gift-cards/page.version/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.html +--- + +This endpoint allows you to manage guest cart items. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Product Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html) +- [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) +- [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) +- [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) + + +## Add items to a guest cart + +To add items to a guest cart, send the request: + +*** +`POST` **/guest-cart-items** +*** + +{% info_block infoBox "Creating a guest cart" %} + +- If a guest cart does not exist for the current user, and you send a request to add items, the guest cart is created automatically. Otherwise, the items are added to the existing guest cart. +- Guest users have one cart by default. You can optionally specify its ID by using the following endpoint. The information in this section is valid for both endpoints. + +`POST` **/guest-carts/*{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*/guest-cart-items** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*** | Unique identifier of the guest cart. To get it, [retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 |✓ | A guest user's unique ID. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value. | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • guest-cart-items
      • concrete-products
      • sales-units
      • cart-rules
      • vouchers
      • product-options
      • sales-units
      • product-measurement-units
      • bundle-items
      • bundled-items
      • abstract-products
      | + +{% info_block infoBox "Included resources" %} + +- To retrieve product options, include `guest-cart-items`, `concrete-products`, and `product-options`. +- To retrieve product measurement units, include `sales-units` and `product-measurement-units`. + +{% endinfo_block %} + +
      +Request sample: add items to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "022_21994751", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample: add a promotional item with the cart-rules relationship to a guest cart + +{% info_block infoBox "Cart rules" %} + +To add the promotional product to cart, make sure that the cart fulfills the cart rules for the promotional item. + +{% endinfo_block %} + +`POST https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items?include=cart-rules` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "idPromotionalItem": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } +} +``` + +
      + +
      +Request sample: add a gift card to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "666_126", + "quantity": "1" + } + } +} +``` + +
      + +
      +Request sample: add items with product measurement units and sales units to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items?include=sales-units` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "salesUnit": { + "id": 33, + "amount": 4.5 + } + } + } +} +``` + +
      + +
      +Request sample: add items with cart rules to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items?include=cart-rules` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "077_24584210", + "quantity": 10 + } + } +} +``` + +
      + +
      +Request sample: add items with vouchers to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items?include=cart-rules` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "057_32007641", + "quantity": 1 + } + } +} +``` + +
      + + +
      +Request sample: add items with product options to a guest cart + +`POST https://glue.mysprykershop.com/guest-cart-items?include=guest-cart-items,concrete-products,product-options` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "181_31995510", + "quantity": "4", + "productOptions": [ + { + "sku": "OP_gift_wrapping" + }, + { + "sku": "OP_3_year_waranty" + } + ] + } + } +} +``` + +
      + +
      +Request sample: add bundle items to a guest cart + +`POST https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/guest-cart-items?include=bundle-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + + +
      +Request sample: add bundle items to a guest cart including the information about the items of the product bundle + + +`POST https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/guest-cart-items?include=bundle-items,bundled-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample: add bundle items to a guest cart including the information about the concrete and abstract products of the product bundle + +`POST https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/guest-cart-items?include=bundle-items,bundled-items,concrete-products,abstract-products` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "214_123", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample: add items to a guest cart with the unfulfilled hard and soft minimum thresholds + +`POST https://glue.mysprykershop.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b/items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "118_29804739", + "quantity": 1 + } + } +} +``` + +
      + +
      +Request sample: add items to a guest cart with the unfulfilled hard maximum threshold + +`POST https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items` + + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "136_24425591", + "quantity": 1 + } + } +} +``` + +
      + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| sku | String | ✓ | Specifies the SKU part number of the item to place on the new guest cart. To use promotions, specify the SKU of one of a product being promoted. Concrete product SKU required. | +| quantity | Integer | ✓ | Specifies the number of items to place on the guest cart. If you add a promotional item and the number of products exceeds the number of promotions, the exceeding items will be added without promotional benefits. | +| idPromotionalItem | String | | The promotional item's ID. You need to specify the ID to apply the promotion's benefits. | +| salesUnit | Object | | A list of attributes defining the sales unit to be used for item amount calculation. | +| salesUnit.id | Integer | | The unique ID of the sales units to calculate the item amount in. | +| salesUnit.amount | Decimal | | The amount of the product in the defined sales units. | +| productOptions | Array | | A list of attributes defining the product option to add to the cart. | +| productOptions.sku | String | | The unique ID of the product option to add to the cart. | + +{% info_block infoBox "Conversion" %} + +When defining product amount in sales units, make sure that the correlation between amount and quantity corresponds to the conversion of the defined sales unit. See [Measurement Units Feature Overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn more. + +{% endinfo_block %} + +{% info_block infoBox "Product options" %} + +It is the responsibility of the API Client to track whether the selected items are compatible. For example, the client should not allow a 2-year and a 4-year warranty service to be applied to the same product. The API endpoints allow any combination of items, no matter whether they are compatible or not. + +{% endinfo_block %} + +### Response + +
      +Response sample: add items to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "380e4a19-6faa-5053-89ff-81a1b5a3dd8a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 2600, + "taxTotal": 3736, + "subtotal": 26000, + "grandTotal": 23400 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2600, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/380e4a19-6faa-5053-89ff-81a1b5a3dd8a" + } + }, + "included": [ + { + "type": "guest-cart-items", + "id": "022_21994751", + "attributes": { + "sku": "022_21994751", + "quantity": 1, + "groupKey": "022_21994751", + "abstractSku": "022", + "amount": null, + "calculations": { + "unitPrice": 26000, + "sumPrice": 26000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 26000, + "sumGrossPrice": 26000, + "unitTaxAmountFullAggregation": 3736, + "sumTaxAmountFullAggregation": 3736, + "sumSubtotalAggregation": 26000, + "unitSubtotalAggregation": 26000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2600, + "sumDiscountAmountAggregation": 2600, + "unitDiscountAmountFullAggregation": 2600, + "sumDiscountAmountFullAggregation": 2600, + "unitPriceToPayAggregation": 23400, + "sumPriceToPayAggregation": 23400 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/380e4a19-6faa-5053-89ff-81a1b5a3dd8a/guest-cart-items/022_21994751" + } + } + ] +} +``` + +
      + +
      +Response sample: add a promotional item with the cart-rules relationship to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + +
      +Response sample: add a promotional item with the cart-rules relationship + +```json +{ + "data": { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "6" + }, + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "guest-cart-items", + "id": "134_29759322", + "attributes": { + "sku": "134_29759322", + "quantity": "1", + "groupKey": "134_29759322", + "abstractSku": "134", + "amount": null, + "calculations": { + "unitPrice": 1879, + "sumPrice": 1879, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1879, + "sumGrossPrice": 1879, + "unitTaxAmountFullAggregation": 270, + "sumTaxAmountFullAggregation": 270, + "sumSubtotalAggregation": 1879, + "unitSubtotalAggregation": 1879, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 188, + "sumDiscountAmountAggregation": 188, + "unitDiscountAmountFullAggregation": 188, + "sumDiscountAmountFullAggregation": 188, + "unitPriceToPayAggregation": 1691, + "sumPriceToPayAggregation": 1691 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items/134_29759322" + } + }, + { + "type": "guest-cart-items", + "id": "118_29804739", + "attributes": { + "sku": "118_29804739", + "quantity": "1", + "groupKey": "118_29804739", + "abstractSku": "118", + "amount": null, + "calculations": { + "unitPrice": 6000, + "sumPrice": 6000, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 6000, + "sumGrossPrice": 6000, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 6000, + "unitSubtotalAggregation": 6000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 600, + "sumDiscountAmountAggregation": 600, + "unitDiscountAmountFullAggregation": 600, + "sumDiscountAmountFullAggregation": 600, + "unitPriceToPayAggregation": 5400, + "sumPriceToPayAggregation": 5400 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items/118_29804739" + } + }, + { + "type": "guest-cart-items", + "id": "139_24699831", + "attributes": { + "sku": "139_24699831", + "quantity": "1", + "groupKey": "139_24699831", + "abstractSku": "139", + "amount": null, + "calculations": { + "unitPrice": 3454, + "sumPrice": 3454, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3454, + "sumGrossPrice": 3454, + "unitTaxAmountFullAggregation": 496, + "sumTaxAmountFullAggregation": 496, + "sumSubtotalAggregation": 3454, + "unitSubtotalAggregation": 3454, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 345, + "sumDiscountAmountAggregation": 345, + "unitDiscountAmountFullAggregation": 345, + "sumDiscountAmountFullAggregation": 345, + "unitPriceToPayAggregation": 3109, + "sumPriceToPayAggregation": 3109 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items/139_24699831" + } + }, + { + "type": "guest-cart-items", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "quantity": 3, + "groupKey": "136_24425591", + "abstractSku": "136", + "amount": null, + "calculations": { + "unitPrice": 33265, + "sumPrice": 99795, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33265, + "sumGrossPrice": 99795, + "unitTaxAmountFullAggregation": 4780, + "sumTaxAmountFullAggregation": 14341, + "sumSubtotalAggregation": 99795, + "unitSubtotalAggregation": 33265, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 3327, + "sumDiscountAmountAggregation": 9980, + "unitDiscountAmountFullAggregation": 3327, + "sumDiscountAmountFullAggregation": 9980, + "unitPriceToPayAggregation": 29938, + "sumPriceToPayAggregation": 89815 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items/136_24425591" + } + }, + { + "type": "guest-cart-items", + "id": "112_306918001-promotion-1", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "groupKey": "112_306918001-promotion-1", + "abstractSku": "112", + "amount": null, + "calculations": { + "unitPrice": 2079, + "sumPrice": 2079, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 2079, + "sumGrossPrice": 2079, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 2079, + "unitSubtotalAggregation": 2079, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2079, + "sumDiscountAmountAggregation": 2079, + "unitDiscountAmountFullAggregation": 2079, + "sumDiscountAmountFullAggregation": 2079, + "unitPriceToPayAggregation": 0, + "sumPriceToPayAggregation": 0 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/guest-cart-items/112_306918001-promotion-1" + } + }, + { + "type": "cart-rules", + "id": "6", + "attributes": { + "amount": 2079, + "code": null, + "discountType": "cart_rule", + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": "112", + "discountPromotionQuantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/6" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 11113, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: add a gift card to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "1bbcf8c0-30dc-5d40-9da1-db5289f216fa", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 5345, + "taxTotal": 7680, + "subtotal": 56446, + "grandTotal": 51101, + "priceToPay": 51101 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 5345, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa" + } + }, + "included": [ + { + "type": "guest-cart-items", + "id": "666_126", + "attributes": { + "sku": "666_126", + "quantity": "1", + "groupKey": "666_126", + "abstractSku": "666", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 3000, + "sumPrice": 3000, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3000, + "sumGrossPrice": 3000, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 3000, + "unitSubtotalAggregation": 3000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3000, + "sumPriceToPayAggregation": 3000 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/guest-cart-items/666_126" + } + }, + { + "type": "guest-cart-items", + "id": "023_21758366", + "attributes": { + "sku": "023_21758366", + "quantity": "2", + "groupKey": "023_21758366", + "abstractSku": "023", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 26723, + "sumPrice": 53446, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 26723, + "sumGrossPrice": 53446, + "unitTaxAmountFullAggregation": 3840, + "sumTaxAmountFullAggregation": 7680, + "sumSubtotalAggregation": 53446, + "unitSubtotalAggregation": 26723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2673, + "sumDiscountAmountAggregation": 5345, + "unitDiscountAmountFullAggregation": 2673, + "sumDiscountAmountFullAggregation": 5345, + "unitPriceToPayAggregation": 24050, + "sumPriceToPayAggregation": 48101 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/guest-cart-items/023_21758366" + } + } + ] +} +``` + +
      + + +
      +Response sample: add items with product options to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "7e42298e-9f15-5105-a192-96726a2b9da8", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13301, + "taxTotal": 20711, + "subtotal": 143012, + "grandTotal": 129711, + "priceToPay": 129711 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 13301, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8" + }, + "relationships": { + "guest-cart-items": { + "data": [ + { + "type": "guest-cart-items", + "id": "181_31995510-3-5" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "181", + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": "4", + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 133012, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 133012, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 20711, + "sumSubtotalAggregation": 143012, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 10000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 13301, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 13301, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 129711 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 2000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 8000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8/guest-cart-items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: add items with product measurement units and sales units to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "5b598c79-8024-50ec-b682-c0b219387294", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1437, + "subtotal": 9000, + "grandTotal": 9000 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5b598c79-8024-50ec-b682-c0b219387294" + } + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "33", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2/sales-units/33" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 6, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "9.0", + "calculations": { + "unitPrice": 1500, + "sumPrice": 9000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 9000, + "unitTaxAmountFullAggregation": 239, + "sumTaxAmountFullAggregation": 1437, + "sumSubtotalAggregation": 9000, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1500, + "sumPriceToPayAggregation": 9000 + }, + "salesUnit": { + "id": 33, + "amount": "9.0" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5b598c79-8024-50ec-b682-c0b219387294/guest-cart-items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "33" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: add items with cart rules to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "c9310692-2ab0-5edc-bb41-fee6aa828d55", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 14554, + "taxTotal": 20914, + "subtotal": 145540, + "grandTotal": 130986, + "priceToPay": 130986 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 14554, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "guest-cart-items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": 10, + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 2091, + "sumTaxAmountFullAggregation": 20914, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1455, + "sumDiscountAmountAggregation": 14554, + "unitDiscountAmountFullAggregation": 1455, + "sumDiscountAmountFullAggregation": 14554, + "unitPriceToPayAggregation": 13099, + "sumPriceToPayAggregation": 130986 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55/guest-cart-items/077_24584210" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 14554, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2022-02-26 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: add items with vouchers to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "c9310692-2ab0-5edc-bb41-fee6aa828d55", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 25965, + "taxTotal": 25692, + "subtotal": 186879, + "grandTotal": 160914, + "priceToPay": 160914 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 18688, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerku2f" + } + ] + } + } + }, + "included": [ + { + "type": "guest-cart-items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": 10, + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 1975, + "sumTaxAmountFullAggregation": 19752, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2183, + "sumDiscountAmountAggregation": 21831, + "unitDiscountAmountFullAggregation": 2183, + "sumDiscountAmountFullAggregation": 21831, + "unitPriceToPayAggregation": 12371, + "sumPriceToPayAggregation": 123709 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55/guest-cart-items/077_24584210" + } + }, + { + "type": "guest-cart-items", + "id": "057_32007641", + "attributes": { + "sku": "057_32007641", + "quantity": 1, + "groupKey": "057_32007641", + "abstractSku": "057", + "amount": null, + "calculations": { + "unitPrice": 41339, + "sumPrice": 41339, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41339, + "sumGrossPrice": 41339, + "unitTaxAmountFullAggregation": 5940, + "sumTaxAmountFullAggregation": 5940, + "sumSubtotalAggregation": 41339, + "unitSubtotalAggregation": 41339, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4134, + "sumDiscountAmountAggregation": 4134, + "unitDiscountAmountFullAggregation": 4134, + "sumDiscountAmountFullAggregation": 4134, + "unitPriceToPayAggregation": 37205, + "sumPriceToPayAggregation": 37205 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55/guest-cart-items/057_32007641" + } + }, + { + "type": "vouchers", + "id": "sprykerku2f", + "attributes": { + "amount": 7277, + "code": "sprykerku2f", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2022-02-10 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55/cart-codes/sprykerku2f" + } + } + ] +} +``` + +
      + + +
      +Response sample: add bundle items to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/guest-cart-items/214_123/" + } + } + ] +} +``` + +
      + +
      +Response sample: add bundle items to a guest cart including the information about the items of the product bundle + +```json +{ + "data": { + "type": "guest-carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "175_26935356", + "quantity": 2, + "groupKey": "175_26935356_214_123_15f844eeb3eaaf1", + "abstractSku": "175", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 8900, + "sumPrice": 8900, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 8900, + "sumGrossPrice": 8900, + "unitTaxAmountFullAggregation": 1279, + "sumTaxAmountFullAggregation": 1279, + "sumSubtotalAggregation": 8900, + "unitSubtotalAggregation": 8900, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 890, + "sumDiscountAmountAggregation": 890, + "unitDiscountAmountFullAggregation": 890, + "sumDiscountAmountFullAggregation": 890, + "unitPriceToPayAggregation": 8010, + "sumPriceToPayAggregation": 8010 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/175_26935356_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "110_19682159", + "quantity": 3, + "groupKey": "110_19682159_214_123_15f844eeb3eaaf1", + "abstractSku": "110", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 21200, + "sumPrice": 21200, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 21200, + "sumGrossPrice": 21200, + "unitTaxAmountFullAggregation": 1248, + "sumTaxAmountFullAggregation": 1248, + "sumSubtotalAggregation": 21200, + "unitSubtotalAggregation": 21200, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2120, + "sumDiscountAmountAggregation": 2120, + "unitDiscountAmountFullAggregation": 2120, + "sumDiscountAmountFullAggregation": 2120, + "unitPriceToPayAggregation": 19080, + "sumPriceToPayAggregation": 19080 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/110_19682159_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f844eeb3eaaf1", + "attributes": { + "sku": "067_24241408", + "quantity": 1, + "groupKey": "067_24241408_214_123_15f844eeb3eaaf1", + "abstractSku": "067", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 13600, + "sumPrice": 13600, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 13600, + "sumGrossPrice": 13600, + "unitTaxAmountFullAggregation": 1955, + "sumTaxAmountFullAggregation": 1955, + "sumSubtotalAggregation": 13600, + "unitSubtotalAggregation": 13600, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1360, + "sumDiscountAmountAggregation": 1360, + "unitDiscountAmountFullAggregation": 1360, + "sumDiscountAmountFullAggregation": 1360, + "unitPriceToPayAggregation": 12240, + "sumPriceToPayAggregation": 12240 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/067_24241408_214_123_15f844eeb3eaaf1" + } + }, + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/guest-cart-items/214_123/" + }, + "relationships": { + "bundled-items": { + "data": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f844eeb3eaaf1" + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f844eeb3eaaf1" + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f844eeb3eaaf1" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: add bundle items to a guest cart including the information about the concrete and abstract products of the product bundle + +```json +{ + "data": { + "type": "guest-carts", + "id": "bd873e3f-4670-523d-b5db-3492d2c0bee3", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 9500, + "taxTotal": 8257, + "subtotal": 95000, + "grandTotal": 85500, + "priceToPay": 85500 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 9500, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3" + }, + "relationships": { + "bundle-items": { + "data": [ + { + "type": "bundle-items", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "175_26564922", + "attributes": { + "sku": "175_26564922", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "16 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26564922" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "175", + "attributes": { + "sku": "175", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "175_26564922", + "175_26935356" + ], + "super_attributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attribute_variants": { + "internal_storage_capacity:32 GB": { + "id_product_concrete": "175_26935356" + }, + "internal_storage_capacity:16 GB": { + "id_product_concrete": "175_26564922" + } + } + }, + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + }, + "url": "/en/samsung-galaxy-tab-a-sm-t550n-16-gb-175" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/175" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + }, + { + "type": "concrete-products", + "id": "175_26564922" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f84504a21cb51", + "attributes": { + "sku": "175_26935356", + "quantity": 2, + "groupKey": "175_26935356_214_123_15f84504a21cb51", + "abstractSku": "175", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 8900, + "sumPrice": 8900, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 8900, + "sumGrossPrice": 8900, + "unitTaxAmountFullAggregation": 1279, + "sumTaxAmountFullAggregation": 1279, + "sumSubtotalAggregation": 8900, + "unitSubtotalAggregation": 8900, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 890, + "sumDiscountAmountAggregation": 890, + "unitDiscountAmountFullAggregation": 890, + "sumDiscountAmountFullAggregation": 890, + "unitPriceToPayAggregation": 8010, + "sumPriceToPayAggregation": 8010 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/175_26935356_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "110", + "attributes": { + "sku": "110", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "superAttributes": { + "color": [ + "Black" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "110_19682159" + ], + "super_attributes": { + "color": [ + "Black" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-gear-110" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/110" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "110" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f84504a21cb51", + "attributes": { + "sku": "110_19682159", + "quantity": 3, + "groupKey": "110_19682159_214_123_15f84504a21cb51", + "abstractSku": "110", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 21200, + "sumPrice": 21200, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 21200, + "sumGrossPrice": 21200, + "unitTaxAmountFullAggregation": 1248, + "sumTaxAmountFullAggregation": 1248, + "sumSubtotalAggregation": 21200, + "unitSubtotalAggregation": 21200, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2120, + "sumDiscountAmountAggregation": 2120, + "unitDiscountAmountFullAggregation": 2120, + "sumDiscountAmountFullAggregation": 2120, + "unitPriceToPayAggregation": 19080, + "sumPriceToPayAggregation": 19080 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/110_19682159_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "067", + "attributes": { + "sku": "067", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "superAttributes": { + "color": [ + "Gold" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "067_24241408" + ], + "super_attributes": { + "color": [ + "Gold" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-s5-mini-67" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/067" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "067" + } + ] + } + } + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f84504a21cb51", + "attributes": { + "sku": "067_24241408", + "quantity": 1, + "groupKey": "067_24241408_214_123_15f84504a21cb51", + "abstractSku": "067", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 13600, + "sumPrice": 13600, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 13600, + "sumGrossPrice": 13600, + "unitTaxAmountFullAggregation": 1955, + "sumTaxAmountFullAggregation": 1955, + "sumSubtotalAggregation": 13600, + "unitSubtotalAggregation": 13600, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1360, + "sumDiscountAmountAggregation": 1360, + "unitDiscountAmountFullAggregation": 1360, + "sumDiscountAmountFullAggregation": 1360, + "unitPriceToPayAggregation": 12240, + "sumPriceToPayAggregation": 12240 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/bundled-items/067_24241408_214_123_15f84504a21cb51" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "214", + "attributes": { + "sku": "214", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products.", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "214_123" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + }, + "url": "/en/samsung-bundle-214" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/214" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "214" + } + ] + } + } + }, + { + "type": "bundle-items", + "id": "214_123", + "attributes": { + "sku": "214_123", + "quantity": 1, + "groupKey": "214_123", + "abstractSku": "214", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 95000, + "sumPrice": 95000, + "taxRate": null, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 95000, + "sumGrossPrice": 95000, + "unitTaxAmountFullAggregation": null, + "sumTaxAmountFullAggregation": null, + "sumSubtotalAggregation": 95000, + "unitSubtotalAggregation": 95000, + "unitProductOptionPriceAggregation": null, + "sumProductOptionPriceAggregation": null, + "unitDiscountAmountAggregation": 9500, + "sumDiscountAmountAggregation": 9500, + "unitDiscountAmountFullAggregation": 9500, + "sumDiscountAmountFullAggregation": 9500, + "unitPriceToPayAggregation": 85500, + "sumPriceToPayAggregation": 85500 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/bd873e3f-4670-523d-b5db-3492d2c0bee3/guest-cart-items/214_123/" + }, + "relationships": { + "bundled-items": { + "data": [ + { + "type": "bundled-items", + "id": "175_26935356_214_123_15f84504a21cb51" + }, + { + "type": "bundled-items", + "id": "110_19682159_214_123_15f84504a21cb51" + }, + { + "type": "bundled-items", + "id": "067_24241408_214_123_15f84504a21cb51" + } + ] + }, + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: add items to a guest cart with the unfulfilled hard and soft minimum thresholds + +```json +{ + "data": { + "type": "carts", + "id": "308b51f4-2491-5bce-8cf2-436273b44f9b", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping Cart", + "isDefault": true, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 1350, + "subtotal": 9454, + "grandTotal": 14454, + "priceToPay": 14454 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-minimum-threshold", + "threshold": 20000, + "fee": null, + "deltaWithSubtotal": 10546, + "message": "You need to add items for €200.00 to pass a recommended threshold. Otherwise, €50 fee will be added." + }, + { + "type": "soft-minimum-threshold-fixed-fee", + "threshold": 100000, + "fee": 5000, + "deltaWithSubtotal": 90546, + "message": "You need to add items for €1,000.00 to pass a recommended threshold. Otherwise, €50.00 fee will be added." + }, + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/308b51f4-2491-5bce-8cf2-436273b44f9b" + } + } +} +``` + +
      + +
      +Response sample: add items to a guest cart with the unfulfilled hard maximum threshold + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping Cart", + "isDefault": false, + "totals": { + "expenseTotal": 5000, + "discountTotal": 0, + "taxTotal": 11976, + "subtotal": 70007, + "grandTotal": 75007, + "priceToPay": 75007 + }, + "discounts": [], + "thresholds": [ + { + "type": "hard-maximum-threshold", + "threshold": 5000, + "fee": null, + "deltaWithSubtotal": 65007, + "message": "You need to add items or €50.00 or less to pass a recommended threshold." + } + ] + }, + "links": { + "self": "https://glue.de.69-new.demo-spryker.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-cart-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/bundle-items-bundled-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + + + +## Add a configurable bundle to a guest cart + +To add a configurable bundle to a guest cart, send the request: + +*** +`POST` **/guest-configurable-bundles?include=items** +*** + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | A guest user's unique ID. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value. | + +
      +Request sample: add a configurable bundle to a guest cart + +`POST https://glue.mysprykershop.com/guest-configurable-bundles?include=items` + +```json +{ + "data": { + "type": "guest-configurable-bundles", + "attributes": { + "quantity": 2, + "templateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "items": [ + { + "sku": "112_312526171", + "quantity": 2, + "slotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + { + "sku": "047_26408568", + "quantity": 2, + "slotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + ] + } + } +} +``` + +
      + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | Integer | ✓ | Number of the configurable bundles to add. | +| templateUuid | String | ✓ | The unique ID of the [Configurable Bundle Template](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html). To get it, retrieve all Configurable Bundle Templates. | +| sku | String | ✓ | Specifies the SKU of a product to add to the cart. To use promotions, specify the SKU of a product being promoted. Concrete product SKU required. | +| quantity | Integer | ✓ | Specifies the number of items to add to the guest cart. If you add a promotional item and the number of products exceeds the number of promotions, the exceeding items will be added without promotional benefits. | +| slotUuid | String | ✓ | The unique ID of the slot in the configurable bundle. | + +### Response + +
      +Response sample: add a configurable bundle to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "1bbcf8c0-30dc-5d40-9da1-db5289f216fa", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1828, + "subtotal": 98894, + "grandTotal": 98894, + "priceToPay": 98894 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 87446, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 87446, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 87446, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 87446 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 11448, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 11448, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 1828, + "sumSubtotalAggregation": 11448, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 11448 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568" + } + } + ] +} +``` + +
      + + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-cart-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/bundle-items-bundled-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| configuredBundle | template | Object | Information about the template used for the configurable bundle. | +| configuredBundleItem | slot | Object | Information about the slot of the configurable bundle. | +| configuredBundle | name | String | Name of the configurable bundle. | +| configuredBundleItem | quantityPerSlot | Integer | Number of items that a slot may contain. | +| configuredBundle | quantity | Integer | Specifies the quantity of the configurable bundles. | +| configuredBundle | groupKey | String | Unique identifier of the configurable bundle. The value is generated based on the configurable bundle template and items selected in the slot. | +| configuredBundle | uuid | String | Unique identifier of the configurable bundle template in the system. | +| configuredBundleItem | uuid | String | Unique identifier of the slot in the configurable bundle. | + +## Change item quantity in a guest cart + +To change item quantity, send the request: + +*** +`PATCH` **/guest-carts/*{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*/guest-cart-items/*{% raw %}{{{% endraw %}groupKey{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*** | The unique ID of the guest cart in the system. To get it, [retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | +| ***{% raw %}{{{% endraw %}groupKey{% raw %}}}{% endraw %}*** | The group key of the item. Usually, it's equal to the item's SKU. To get it, [retrieve the guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart) with the guest cart items included. | + +### Request + + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | A hyphenated alphanumeric value that is the user's unique ID. It is passed in the X-Anonymous-Customer-Unique-Id header when [creating a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | guest-cart-items, concrete-products, product-options, sales-units, product-measurement-units | + +{% info_block infoBox "Included resources" %} + +- To retrieve product options, include `guest-cart-items`, `concrete-products`, and `product-options`. +- To retrieve product measurement units, include `sales-units` and `product-measurement units` + +{% endinfo_block %} + + +
      +Request sample: change item quantity in a guest cart + +`PATCH https://glue.mysprykershop.com/guest-carts/2506b65c-164b-5708-8530-94ed7082e802/guest-cart-items/177_25913296` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "209_12554247", + "quantity": 10 + } + } +} +``` + +
      + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| sku | String | | The SKU of the item to be updated. | +| quantity | String | ✓ | The quantity of the item to be set. | + +For more request body examples, see [Add items to a guest cart](#add-items-to-a-guest-cart) + +### Response + +If the update is successful, the endpoint returns `RestCartsResponse` with the updated quantity. See [Add items to a guest cart](#add-items-to-a-guest-cart) for examples. + +## Change quantity of configurable bundles in a guest cart + +To change the quantity of the configurable bundles in a guest cart, send the request: + +*** +`PATCH` **/guest-carts/{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}/guest-configured-bundles/{% raw %}{{{% endraw %}bundle_group_key{% raw %}}}{% endraw %}?include=items** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*** | Unique identifier of the guest cart in the system. To get it, [retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | +| ***{% raw %}{{{% endraw %}bundlegroupkey{% raw %}}}{% endraw %}*** | Group key of the configurable bundle. The value is generated based on the Configurable Bundle Template and items selected in the slot. You can get it when [adding the configurable bundle to a guest cart](#add-a-configurable-bundle-to-a-guest-cart). | + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | A hyphenated alphanumeric value that is the user's unique ID. It is passed in the X-Anonymous-Customer-Unique-Id header when [creating a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + +Request sample: change quantity of configurable bundles in a guest cart + +`PATCH https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/guest-configured-bundles/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530?include=items` + +```json +{ + "data": { + "type": "guest-configured-bundles", + "attributes": { + "quantity": 4 + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | String | ✓ | The quantity of the items to add. | + +### Response + +
      +Response sample: change quantity of configurable bundles in a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "1bbcf8c0-30dc-5d40-9da1-db5289f216fa", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 5483, + "subtotal": 296682, + "grandTotal": 296682, + "priceToPay": 296682 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-112_312526171" + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-047_26408568" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 174892, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 174892, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 174892, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 174892 + }, + "configuredBundle": { + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 22896, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 22896, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 3656, + "sumSubtotalAggregation": 22896, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 22896 + }, + "configuredBundle": { + "quantity": 4, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530-047_26408568" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-112_312526171", + "attributes": { + "sku": "112_312526171", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-112_312526171", + "abstractSku": "112", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 43723, + "sumPrice": 87446, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 43723, + "sumGrossPrice": 87446, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 87446, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 87446 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-112_312526171" + } + }, + { + "type": "items", + "id": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-047_26408568", + "attributes": { + "sku": "047_26408568", + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-047_26408568", + "abstractSku": "047", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 5724, + "sumPrice": 11448, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 5724, + "sumGrossPrice": 11448, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 1827, + "sumSubtotalAggregation": 11448, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 11448 + }, + "configuredBundle": { + "quantity": 2, + "groupKey": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130", + "template": { + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit" + } + }, + "configuredBundleItem": { + "quantityPerSlot": 1, + "slot": { + "uuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + } + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/items/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-6011880fabc988.61063130-047_26408568" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-cart-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/bundle-items-bundled-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + +## Remove an item from a guest cart + +To remove an item from a guest cart, send the request: + +*** +`DELETE` **/guest-carts/*{% raw %}{{{% endraw %}guest_cart_uuid{% raw %}}}{% endraw %}*/guest-cart-items/*{% raw %}{{{% endraw %}groupKey{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*** | The unique ID of the guest cart in the system. To get it, [retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | +| ***{% raw %}{{{% endraw %}groupKey{% raw %}}}{% endraw %}*** | The group key of the item. Usually, it's equal to the item's SKU. To get it, [retrieve the guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart) with the guest cart items included. | + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | A hyphenated alphanumeric value that is the user's unique ID. It is passed in the X-Anonymous-Customer-Unique-Id header when [creating a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + +Request sample: remove an item from a guest cart + +`DELETE https://glue.mysprykershop.com/guest-carts/2506b65c-164b-5708-8530-94ed7082e802/guest-cart-items/177_25913296` + +### Response + +If the item is deleted successfully, the endpoint returns the "204 No Content" status code. + +## Remove a configurable bundle from a guest cart + +To remove a configurable bundle from a guest cart, send the request: + +*** +`DELETE` **/guest-carts/{% raw %}{{{% endraw %}quest_cart_id{% raw %}}}{% endraw %}/guest-configured-bundles/{% raw %}{{{% endraw %}bundle_group_key{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guest_cart_id{% raw %}}}{% endraw %}*** | The unique ID of the guest cart in the system. To get it, [retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | +| ***{% raw %}{{{% endraw %}bundlegroupkey{% raw %}}}{% endraw %}*** | The group key of the configurable bundle. The value is generated based on the Configurable Bundle Template and the items selected in the slot. You can get it when [adding the configurable bundle to a guest cart](#add-a-configurable-bundle-to-a-guest-cart). | + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | A hyphenated alphanumeric value that is the user's unique ID. It is passed in the X-Anonymous-Customer-Unique-Id header when [creating a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + +Request sample: remove a configurable bundle from a guest cart + +`DELETE https://glue.mysprykershop.com/guest-carts/1bbcf8c0-30dc-5d40-9da1-db5289f216fa/guest-configured-bundles/c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de-60118379365c56.34709530?include=items` + +### Response + +If the item is deleted successfully, the endpoint returns the "204 No Content" status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart cannot be deleted. | +| 106 | Cart item cannot be deleted. | +| 107 | Failed to create cart. | +| 109 | Anonymous customer unique id is empty. | +| 110 | Customer already has a cart. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item cannot be added. | +| 114 | Cart item cannot be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | +| 4001 | There was a problem adding or updating the configured bundle. | +| 4002 | Configurable bundle template is not found. | +| 4003 | The quantity of the configured bundle should be more than zero. | +| 4004 | Configured bundle with provided group key is not found in cart. | +| 4005 | The configured bundle cannot be added. | +| 4006 | The configured bundle cannot be updated. | +| 4007 | The configured bundle cannot be removed. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.md new file mode 100644 index 00000000000..103c28f96dc --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.md @@ -0,0 +1,1208 @@ +--- +title: "Glue API: Manage guest carts" +description: Retrieve details about guest carts and learn what else you can do with the resource. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-guest-carts +originalArticleId: 70f8ca95-9dc9-4083-8056-4acd342e0054 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/guest-carts/managing-guest-carts.html + - /docs/pbc/all/cart-and-checkout/manage-using-glue-api/manage-guest-carts/manage-guest-carts.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/manage-guest-carts/manage-guest-carts.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html +related: + - title: Manage guest cart items + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.html + - title: Managing gift cards of guest users + link: docs/pbc/all/gift-cards/page.version/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.html +--- + +This endpoint lets you manage guest carts. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: + +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) + +## Create a guest cart + +To create a guest cart as an unauthenticated user, [add items to a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html#add-items-to-a-guest-cart). + +## Retrieve a guest cart + +To retrieve a guest cart, send the request: + +*** +`GET` **/guest-carts** +*** + +{% info_block infoBox "Guest cart ID" %} + + +Guest users have one guest cart by default. If you already have a guest cart, you can optionally specify its ID when adding items. To do that, use the following endpoint. The information in this section is valid for both of the endpoints. + +`GET` **/guest-carts/*{% raw %}{{{% endraw %}guestCartId{% raw %}}}{% endraw %}*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}guestCartId{% raw %}}}{% endraw %}*** | Unique identifier of the guest cart. To get it, [retrieve a guest cart](#retrieve-a-guest-cart). | + +{% endinfo_block %} + +{% info_block warningBox "Note" %} + +When retrieving the cart with `guestCartId`, the response includes a single object, and when retrieving the resource without specifying it, you get an array containing a single object. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | Guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value.| + +| PATH PARAMETER | DESCRIPTION | Possible values | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • guest-cart-items
      • cart-rules
      • promotional-items
      • gift-cards
      • vouchers
      • product-options
      • sales-units
      • product-measurement-units
      • product-labels
      | + +{% info_block infoBox "Included resources" %} + +- To retrieve product options, include `guest-cart-items`, `concrete-products`, and `product-options`. +- To retrieve product measurement units, include `sales-units` and `product-measurement-units`. +- To retrieve product labels assigned to the products in a cart, include `concrete-products` and `product-labels`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/guest-carts` | Retrieve a guest cart. | +| `GET https://glue.mysprykershop.com/guest-carts?include=guest-cart-items` | Retrieve information about a guest cart with the concrete products included. | +| `GET https://glue.mysprykershop.com/guest-carts?include=cart-rules` | Retrieve a guest cart with information about the cart rules. | +| `GET https://glue.mysprykershop.com/guest-carts?include=gift-cards,vouchers` | Retrieve a guest cart with information about the gift cards applied. | +| `GET https://glue.mysprykershop.com/guest-carts?include=guest-cart-items,concrete-products,product-options` | Retrieve a guest cart with information about its items, respective concrete products, and product options of the concrete products. | +| `GET https://glue.mysprykershop.com/guest-carts?include=sales-units,product-measurement-units` | Retrieve a guest cart with information about its items, sales units, and product measurement units. | +| `GET https://glue.mysprykershop.com/guest-carts?include=vouchers` | Retrieve a guest cart with information about vouchers. | +| `GET https://glue.mysprykershop.com/guest-carts?include=concrete-products,product-labels` | Retrieve a guest cart with information about concrete products and the product labels assigned to the products in it. | + + + +### Response + +
      +Response sample: retrieve a guest cart + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 93203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes" + } +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with the items included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 96203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "guest-cart-items": { + "data": [ + { + "type": "guest-cart-items", + "id": "023_21758366" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=guest-cart-items" + }, + "included": [ + { + "type": "guest-cart-items", + "id": "023_21758366", + "attributes": { + "sku": "023_21758366", + "quantity": "4", + "groupKey": "023_21758366", + "abstractSku": "023", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 26723, + "sumPrice": 106892, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 26723, + "sumGrossPrice": 106892, + "unitTaxAmountFullAggregation": 3840, + "sumTaxAmountFullAggregation": 15360, + "sumSubtotalAggregation": 106892, + "unitSubtotalAggregation": 26723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2672, + "sumDiscountAmountAggregation": 10689, + "unitDiscountAmountFullAggregation": 2672, + "sumDiscountAmountFullAggregation": 10689, + "unitPriceToPayAggregation": 24051, + "sumPriceToPayAggregation": 96203 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7/guest-cart-items/023_21758366" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with cart rules included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 96203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=cart-rules" + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 10689, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + + + +
      +Response sample: add items with gift cards to a guest cart + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 93203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-Z9FYJRK3-20" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=gift-cards" + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-Z9FYJRK3-20", + "attributes": { + "code": "GC-Z9FYJRK3-20", + "name": "Gift Card 30", + "value": 3000, + "currencyIsoCode": "EUR", + "actualValue": 3000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7/cart-codes/GC-Z9FYJRK3-20" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with items, respective concrete products, and their product options included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "7e42298e-9f15-5105-a192-96726a2b9da8", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13301, + "taxTotal": 20711, + "subtotal": 143012, + "grandTotal": 129711, + "priceToPay": 129711 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 13301, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8" + }, + "relationships": { + "guest-cart-items": { + "data": [ + { + "type": "guest-cart-items", + "id": "181_31995510-3-5" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com.com/guest-cart-items?include=guest-cart-items,concrete-products,product-options" + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "181", + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": "4", + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 133012, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 133012, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 20711, + "sumSubtotalAggregation": 143012, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 10000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 13301, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 13301, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 129711 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 2000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 8000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8/guest-cart-items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with its items, sales units, and product measurement units + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 718, + "subtotal": 4500, + "grandTotal": 4500, + "priceToPay": 4500 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/guest-cart-items?include=sales-units,product-measurement-units" + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "33", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2/sales-units/33" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 239, + "sumTaxAmountFullAggregation": 718, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1500, + "sumPriceToPayAggregation": 4500 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c/guest-cart-items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "33" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with a cart rule and a discount voucher + +```json +{ + "data": { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": {...}, + "links": {...}, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "mydiscount-yu8je" + } + ] + }, + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "mydiscount-yu8je", + "attributes": { + "amount": 49898, + "code": "mydiscount-yu8je", + "discountType": "voucher", + "displayName": "My Discount", + "isExclusive": false, + "expirationDateTime": "2020-02-29 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "http://glue.mysprykershop.com/vouchers/mydiscount-yu8je" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 19959, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "http://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with product labels included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "4f3e67f7-f18c-55ad-8297-2e09b80cf3ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 6244, + "subtotal": 39107, + "grandTotal": 39107, + "priceToPay": 39107 + }, + "discounts": [], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/4f3e67f7-f18c-55ad-8297-2e09b80cf3ff" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/guest-cart-items?include=concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "179_29658416", + "attributes": { + "sku": "179_29658416", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T715", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper - create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "storage_media": "flash", + "touch_technology": "Multi-touch", + "max_memory_card_size": "128 GB", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "storage_media", + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T715", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "storage_media": "Storage media", + "touch_technology": "Touch Technology", + "max_memory_card_size": "Max memory card size", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/179_29658416" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "179_29658416", + "attributes": { + "sku": "179_29658416", + "quantity": 1, + "groupKey": "179_29658416", + "abstractSku": "179", + "amount": null, + "calculations": { + "unitPrice": 39107, + "sumPrice": 39107, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 39107, + "sumGrossPrice": 39107, + "unitTaxAmountFullAggregation": 6244, + "sumTaxAmountFullAggregation": 6244, + "sumSubtotalAggregation": 39107, + "unitSubtotalAggregation": 39107, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 39107, + "sumPriceToPayAggregation": 39107 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/4f3e67f7-f18c-55ad-8297-2e09b80cf3ff/guest-cart-items/179_29658416" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "179_29658416" + } + ] + } + } + } + ] +} +``` + +
      + + + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-carts-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/guest-cart-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/gift-cards-response-attributes.md %} + + +## Assign a guest cart to a registered customer + +Guest carts are anonymous as they are not related to any user. If a user registers or logs in, the guest cart can be automatically assigned to their account. + +To assign a guest cart to a customer, for example, merge the carts, include the unique identifier associated with the customer in the `X-Anonymous-Customer-Unique-Id` header of the authentication request if it's an existing customer, or request to create a customer account if it's a new one. Adjust the configuration constant to create a cart for the newly authenticated customer while merging the guest cart with the customer cart: + +**src/Pyz/Zed/CartsRestApi/CartsRestApiConfig.php** + +```php + + + +The following is an exemplary workflow of converting a guest cart into a regular cart: + +1. The customer adds items to a guest cart. + +Request sample: + +`POST https://glue.myspsrykershop.com/guest-cart-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "022_21994751", + "quantity": 5 + } + } +} +``` + + +| HEADER KEY | HEADER VALUE | DESCRIPTION | +| --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | guest-user-001 | A guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value.. | + +**Response sample** + +```json +{ + "data": { + "type": "guest-carts", + "id": "9183f604-9b2c-53d9-acbf-cf59b9b2ff9f", + "attributes": {...}, + "links": {...} + }, + "included": [...] +} +``` + +2. The customer logs in. + +Request sample: + +`POST https://glue.myspsrykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": "john.doe@example.com", + "password": "qwerty" + } + } +} +``` + +| HEADER KEY | HEADER VALUE | DESCRIPTION | +| --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | guest-user-001 | Guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value. | + +**Response sample** + +```json +{ + "data": { + "type": "access-tokens", + "id": null, + "attributes": { + "tokenType": "Bearer", + "expiresIn": 28800, + "accessToken": "eyJ0eXAiOiJKV1QiLC...", + "refreshToken": "def50200ae2d0...", + "idCompanyUser": "94d58692-c117-5466-8b9f-2ba32dd87c43" + }, + "links": {...} + } +} +``` + +3. The customer requests a list of his own carts. + +Request sample: + +`GET https://glue.myspsrykershop.com/carts` + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | v | Alphanumeric string that authenticates the customer you want to change the password of. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +In the **multi-cart** environment, the guest cart has been converted to a regular cart. You can see it in the list of carts with the id `9183f604-9b2c-53d9-acbf-cf59b9b2ff9f`. + +**Response sample** + +```json +{ + "data": [ + { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": {...}, + "links": {...} + }, + { + "type": "carts", + "id": "9183f604-9b2c-53d9-acbf-cf59b9b2ff9f", + "attributes": {...}, + "links": {...} + } + ], + "links": {...} +} +``` + +In a *single cart* environment, items from the guest cart have been added to the user's own cart. + +**Response body** + +```json +{ + "data": [ + { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13000, + "taxTotal": 18681, + "subtotal": 130000, + "grandTotal": 117000 + }, + "discounts": [...], + "thresholds": [] + }, + "links": {.} + }, +``` + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart cannot be deleted. | +| 106 | Cart item cannot be deleted. | +| 107 | Failed to create a cart. | +| 109 | Anonymous customer unique id is empty. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item cannot be added. | +| 114 | Cart item cannot be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md similarity index 97% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md index 0e57715d613..b5fc9e860b6 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-shared-company-user-carts originalArticleId: 87aea51a-e7f0-43a3-a820-b72537b8395b redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/sharing-company-user-carts/managing-shared-company-user-carts.html - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/share-company-user-carts/manage-shared-company-user-carts.html - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.md new file mode 100644 index 00000000000..93cd79ca3b3 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.md @@ -0,0 +1,140 @@ +--- +title: "Glue API: Retrieve cart permission groups" +description: Learn how to retrieve cart permission groups using the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-cart-permission-groups +originalArticleId: 0cb5d28a-634a-425a-916e-5f1a18885f98 +redirect_from: + - /docs/scos/dev/glue-api-guides/202005.0/managing-carts/sharing-company-user-carts/retrieving-cart-permission-groups.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-carts/sharing-company-user-carts/retrieving-cart-permission-groups.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/sharing-company-user-carts/retrieving-cart-permission-groups.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/share-company-user-carts/retrieve-cart-permission-groups.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.html +related: + - title: Share company user carts + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.html + - title: Managing shared company user carts + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html +--- + +Company users can share their carts with others so that multiple representatives of the same company can work together on the same order. In addition to that, users can choose what type of access they want to grant to different users. This endpoint allows retrieving cart permission groups of a company. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Shared Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html). + +## Retrieve cart permission groups + +To retrieve cart permission groups, send the request: + +*** +`GET` **/cart-permission-groups** +*** + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | A string containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample : `GET http://glue.mysprykershop.com/cart-permission-groups` + +### Response + +
      +Response sample + +```json +{ + "data": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "http://glue.mysprykershop.com/cart-permission-groups/1" + } + }, + { + "type": "cart-permission-groups", + "id": "2", + "attributes": { + "name": "FULL_ACCESS", + "isDefault": false + }, + "links": { + "self": "http://glue.mysprykershop.com/cart-permission-groups/2" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/cart-permission-groups" + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/cart-permission-groups-response-attributes.md %} + + + +## Retrieve a cart permission group + +To retrieve a cart permission group, send the request: + +*** +`GET`**/cart-permission-groups/*{% raw %}{{{% endraw %}permission_group_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}permission_group_id{% raw %}}}{% endraw %}*** | The unique identifier of a cart's permission group to retrieve. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | A string containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: `GET http://glue.mysprykershop.com/cart-permission-groups/1` + +### Response + + Response sample: + + +```json +{ + "data": { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "http://glue.mysprykershop.com/cart-permission-groups/1" + } + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/cart-permission-groups-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 2501| Specified permission group is not found or the user does not have access to it. | + +## Next steps + +[Share company user carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.html) diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.md new file mode 100644 index 00000000000..48d949415a3 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.md @@ -0,0 +1,111 @@ +--- +title: "Glue API: Share company user carts" +description: Discover how you can share company user carts using the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/sharing-company-user-carts +originalArticleId: a200e568-906d-4ae4-b50a-8ad5433d4399 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-carts/sharing-company-user-carts/sharing-company-user-carts.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-carts/sharing-company-user-carts/sharing-company-user-carts.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/sharing-company-user-carts/sharing-company-user-carts.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/manage-using-glue-api/share-company-user-carts/share-company-user-carts.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-share-company-user-carts.html +related: + - title: Retrieving cart permission groups + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.html + - title: Managing shared company user carts + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html +--- + +Company users can share their carts with other company users, so multiple representatives of a company can work on the same order. When sharing carts, users can choose what type of access they want to grant to different each other. + +This endpoint allows sharing carts with company users. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Shared Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html). + + +## Share a cart + +To share a cart, send the request: + +*** +`POST` **/carts/*{% raw %}{{{% endraw %}cart-uuid{% raw %}}}{% endraw %}*/shared-carts** +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}cart-uuid{% raw %}}}{% endraw %}*** | The unique ID of a cart to share. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | A string containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: `POST https://glue.mysprykershop.com/carts/f23f5cfa-7fde-5706-aefb-ac6c6bbadeab/shared-carts` + +```json +{ + "data": { + "type": "shared-carts", + "attributes": { + "idCompanyUser": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "idCartPermissionGroup": 1 + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| idCompanyUser | String | ✓ | The unique ID of a company user to share the cart with.
      The user must belong to the same company as the cart owner. | +| idCartPermissionGroup | Integer | ✓ | The unique ID of a cart permission group that defines the permissions of the company user for the cart. To get the full list of cart permission groups, [retrieve permission groups](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.html#retrieve-cart-permission-groups). | + +### Response + +Response sample: + +```json +{ + "data": { + "type": "shared-carts", + "id": "4c677a6b-2f65-5645-9bf8-0ef3532bbbccaa", + "attributes": { + "idCompanyUser": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/4c677a6b-2f65-5645-9bf8-0ef3532bbbccaa" + } + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/shared-carts-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | The access token is invalid. | +| 002 | The access token is missing. | +| 101 | Cart is not found. | +| 104 | Cart uuid is missing. | +| 422 | Failed to share a cart. | +| 901 | `idCompanyUser` field is not specified or empty. | +| 2501 | Cart permission group is not found. | +| 2701 | Action is forbidden. | +| 2702 | Failed to share a cart. | +| 2703 | Shared cart not found. | +| 2704 | Shared cart ID is missing. | +| 2705 | Shared cart is not found. | +| 2706 | Failed to save the shared cart. | + +## Next steps + +- [Manage shared company user carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-manage-shared-company-user-carts.html) diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/add-additional-countries-to-checkout.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/add-additional-countries-to-checkout.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/add-additional-countries-to-checkout.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/add-additional-countries-to-checkout.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.md new file mode 100644 index 00000000000..78e61c5e22e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.md @@ -0,0 +1,34 @@ +--- +title: Define if carts are deleted after placing an order +description: Discover how to define if carts can be saved after checkout with Spryker Cloud Commerce OS. +last_updated: Jul 20, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/howto-define-if-a-cart-should-be-deleted-after-placing-an-order +originalArticleId: d465e11a-6ed9-4729-bce8-e6c82d961d37 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-define-if-a-cart-should-be-deleted-after-placing-an-order.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/tutorials-and-howtos/howto-define-if-a-cart-should-be-deleted-after-placing-an-order.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/tutorials-and-howtos/enable-guest-checkout-in-the-b2b-demo-shop.html +--- + +After placing an order, the cart can either be deleted or saved. If you configure carts to be saved, after placing an order, the cart is duplicated, and the customer can access it. + +To define this behavior, in `CheckoutPageConfig`, set `cleanCartAfterOrderCreation()` to one of the following: + +- `true`: after placing an order, the cart is deleted. +- `false`: after placing an order, the cart is saved. + +**Pyz\Shared\CheckoutPage\CheckoutPageConfig** + +```php + /** + * @api + * + * @return bool + */ + public function cleanCartAfterOrderCreation() + { + return true; + } +``` diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/enable-guest-checkout-in-the-b2b-demo-shop.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/enable-guest-checkout-in-the-b2b-demo-shop.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/enable-guest-checkout-in-the-b2b-demo-shop.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/enable-guest-checkout-in-the-b2b-demo-shop.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/handling-carts-with-a-big-number-of-items.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/handling-carts-with-a-big-number-of-items.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/handling-carts-with-a-big-number-of-items.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/handling-carts-with-a-big-number-of-items.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/implement-a-customer-approval-process-based-on-a-generic-state-machine.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/implement-a-customer-approval-process-based-on-a-generic-state-machine.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/implement-a-customer-approval-process-based-on-a-generic-state-machine.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/implement-a-customer-approval-process-based-on-a-generic-state-machine.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/tutorial-calculator-plugin.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/tutorial-calculator-plugin.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/tutorial-calculator-plugin.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/tutorial-calculator-plugin.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md rename to docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md index d0d20076cd0..86c65a07072 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/base-shop/tutorials-and-howtos/tutorial-checkout-and-step-engine.md @@ -91,7 +91,7 @@ This tutorial shows how to add a voucher step to the existing out-of-the-box Spr return $routeCollection; } - } + } ``` 3. In YvesBootstrap in `src/Pyz/Yves/Router/RouterDependencyProvider`, update the `getRouteProvider` method to use the new Route Provider instead of the core one. @@ -207,7 +207,7 @@ class VoucherStep extends AbstractBaseStep implements StepWithBreadcrumbInterfac { return !$this->requireInput($dataTransfer); } -} +} ``` {% endinfo_block %} @@ -314,7 +314,7 @@ class CheckoutController extends SprykerShopCheckoutController { return 'Hello Voucher Step'; } -} +} ``` The step is now created: diff --git a/docs/pbc/all/cart-and-checkout/202512.0/cart-and-checkout.md b/docs/pbc/all/cart-and-checkout/202602.0/cart-and-checkout.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/cart-and-checkout.md rename to docs/pbc/all/cart-and-checkout/202602.0/cart-and-checkout.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/cart-page-performance-configuration.md b/docs/pbc/all/cart-and-checkout/202602.0/cart-page-performance-configuration.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202512.0/cart-page-performance-configuration.md rename to docs/pbc/all/cart-and-checkout/202602.0/cart-page-performance-configuration.md index 6fccf55bd97..614c3f45332 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/cart-page-performance-configuration.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/cart-page-performance-configuration.md @@ -5,7 +5,7 @@ last_updated: Dec 12, 2025 template: concept-topic-template related: - title: Frontend performance guidelines - link: docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.html + link: docs/dg/dev/guidelines/performance-guidelines/front-end-performance-guidelines.html --- ## Cart page performance configuration @@ -31,7 +31,7 @@ composer require spryker/cart:"^7.16.0" \ spryker-shop/product-relation-widget:"^1.4.0" \ spryker-shop/product-replacement-for-widget:"^1.6.0" \ spryker-shop/shop-application:"^1.16.0" \ - spryker-shop/shop-ui:"^1.100.0 + spryker-shop/shop-ui:"^1.100.0 ``` ## 2. Configurations @@ -124,7 +124,7 @@ Update product relation widgets on the cart page to use carousel rendering to im - SimilarProductsWidget: -```twig +```twig {% widget 'SimilarProductsWidget' args [data.product] with { data: { isNewCarouselRenderingEnabled: true, diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md index 94938a772fc..21675fe2426 100644 --- a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-feature.md @@ -3,8 +3,6 @@ title: Install the Cart + Marketplace Product feature last_updated: Dec 16, 2020 description: This document describes the process how to integrate the Cart + Marketplace Product feature into a Spryker project. template: feature-integration-guide-template - --- - {% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..6d406ae297b --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-offer-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Cart + Marketplace Product Offer feature +last_updated: Dec 17, 2020 +description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md new file mode 100644 index 00000000000..cff92164f6a --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-cart-marketplace-product-options-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Cart + Marketplace Product Options feature +last_updated: Jul 28, 2021 +description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..dc53164bcf4 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-offer-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Checkout + Marketplace Product Offer feature +last_updated: May 3, 2021 +description: This document describes the process how to implement the Spryker Marketplace Product Offer + Checkout feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md new file mode 100644 index 00000000000..e8d82f3987e --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-checkout-marketplace-product-options-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Checkout + Marketplace Product Options feature +last_updated: Jul 28, 2021 +description: This document describes the process how to integrate the Spryker Marketplace Product Options feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-checkout-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md new file mode 100644 index 00000000000..e7319430721 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-marketplace-cart-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Cart feature +last_updated: Jan 05, 2021 +description: This document describes the process how to integrate the Marketplace Cart integration feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md new file mode 100644 index 00000000000..183de40a3d3 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Quick Add to Cart + Marketplace Product feature +last_updated: May 16, 2022 +description: This guide describes the process of how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..0c7751dc1cf --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-features/install-the-quick-add-to-cart-marketplace-product-offer-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Quick Add to Cart + Marketplace Product Offer feature +last_updated: May 16, 2022 +description: This guide describes the process of how to integrate the Marketplace Product Offer + Quick Add to Cart feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-glue-api.md diff --git a/docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202410.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/install/install-glue-api/install-the-cart-marketplace-product-offer-glue-api.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/carts-of-registered-users/carts-of-registered-users.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/carts-of-registered-users.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/carts-of-registered-users/carts-of-registered-users.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/carts-of-registered-users.md diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.md new file mode 100644 index 00000000000..490f028c82d --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.md @@ -0,0 +1,4533 @@ +--- +title: Managing carts of registered users +description: Retrieve details about the carts of the registered users and learn what else you can do with the resource in the Spryker Marketplace +template: glue-api-storefront-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/dev/glue-api-guides/202311.0/carts-of-registered-users/managing-carts-of-registered-users.html +related: + - title: Managing items in carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html + +--- + +This endpoint allows managing carts by creating, retrieving, and deleting them. + +## Multiple carts + +Unlike guest carts, carts of registered users have an unlimited lifetime. Also, if the [Multiple Carts feature is integrated into your project](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html), and [Glue API is enabled for multi-cart operations](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-feature.html), registered users can have an unlimited number of carts. + + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Shared Carts feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shared-carts-feature.html) +- [Install the Merchant Offers Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.html) + +## Create a cart + +To create a cart, send the request: + +*** +`POST` **/carts** +*** + +{% info_block infoBox "Info" %} + +Carts created via Glue API are always set as the default carts for the user. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +Request sample: create a cart + +`POST https://glue.mysprykershop.com/carts` + +```json +{ + "data":{ + "type":"carts", + "attributes":{ + "name":"My Cart", + "priceMode":"GROSS_MODE", + "currency":"EUR", + "store":"DE" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | ✓ | Sets the cart name.
      You can pass this field only with the Multiple Carts feature integrated. If you are operating in a single-cart environment, an attempt to set the value returns the `422 Unprocessable Entry` error. | +| priceMode | Enum | ✓ | Sets the price mode for the cart. Possible values:
      • GROSS_MODE: prices after tax
      • NET_MODE: prices before tax
      For details, see [Net & gross prices management](/docs/pbc/all/price-management/{{page.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html). | +| currency | String | ✓ | Sets the cart currency. | +| store | String | ✓ | Sets the name of the store where to create the cart. | + +### Response + +Response sample: create a cart + +```json +{ + "data": { + "type": "carts", + "id": "f23f5cfa-7fde-5706-aefb-ac6c6bbadeab", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "discounts": [], + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "name": "My Cart", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/f23f5cfa-7fde-5706-aefb-ac6c6bbadeab" + } + } +} +``` + +**General cart information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| priceMode | String | Price mode of the cart. | +| currency | String | Currency of the cart. | +| store | String | Store in which the cart is created. | +| name | String | Cart name.
      The field is available only in multi-cart environments. | +| isDefault | Boolean | Specifies if the cart is the default one for the customer.
      The field is available only in multi-cart environments. | + +**Discount information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| displayName | String | Discount name. | +| amount | Integer | Discount amount applied to the cart. | +| code | String | Discount code applied to the cart. | + +**Totals** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| totals | Object | Describes the total calculations. | +| totals.expenseTotal | String | Total amount of expenses (including, for example, shipping costs). | +| totals.discountTotal | Integer | Total amount of discounts applied to the cart. | +| totals.taxTotal | String | Total amount of taxes to be paid. | +| totals.subTotal | Integer | Subtotal of the cart. | +| totals.grandTotal | Integer | Grand total of the cart. | + + +## Retrieve registered user's carts + +To retrieve all carts, send the request: + +*** +`GET` **/carts** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • cart-permission-groups
      • shared-carts
      • company-users
      • cart-rules
      • promotional-items
      • vouchers
      • gift-cards
      • concrete-products
      • product-options
      • product-labels
      • product-offers
      • product-offer-availabilities
      • product-offer-prices
      • merchants
      | + +{% info_block infoBox "Info" %} + +- To retrieve all the product options of the item in a cart, include `items`, `concrete-products`, and `product-options`. +- To retrieve information about the company user a cart is shared with, include `shared-carts` and `company-users`. +- To retrieve product labels of the products in a cart, include `items`, `concrete-products`, and `product-labels`. +- To retrieve product offers, include `items`, `concrete-products`, and `product-offers`. +- To retrieve product offer availabilities, include `items`, `concrete-products`, and `product-offer-availabilities`. +- To retrieve product offer prices, include `items`, `concrete-products`, and `product-offer-prices`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/carts` | Retrieve all carts. | +| `GET https://glue.mysprykershop.com/carts?include=items` | Retrieve all carts with the items in them included. | +| `GET https://glue.mysprykershop.com/carts?include=cart-permission-groups` | Retrieve all carts with cart permission groups included. | +| `GET https://glue.mysprykershop.com/carts?include=shared-carts` | Retrieve all carts with shared carts included. | +| `GET https://glue.mysprykershop.com/carts?include=shared-carts,company-users` | Retrieve all carts with included information about shared carts, and the company uses they are shared with. | +| `GET https://glue.mysprykershop.com/carts?include=cart-rules` | Retrieve all carts with cart rules included. | +| `GET https://glue.mysprykershop.com/carts?include=vouchers` | Retrieve all carts with the applied vouchers included. | +| `GET https://glue.mysprykershop.com/carts?include=promotional-items` | Retrieve all carts with promotional items included. | +| `GET https://glue.mysprykershop.com/carts?include=gift-cards` | Retrieve all carts with the applied gift cards included. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-options` | Retrieve all carts with items, respective concrete products, and their product options included. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-labels` | Retrieve all carts with the included information: concrete products and the product labels assigned to the products in the carts. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-offers` | Retrieve all carts with product offers included. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-offers,product-offer-availabilities` | Retrieve all carts with product offers and product offer availabilities included. | +| `GET https://glue.mysprykershop.com/carts?include=items,concrete-products,product-offers,product-offer-prices` | Retrieve all carts with product offers and product offer prices included. | +| `GET https://glue.mysprykershop.com/carts?include=merchants` | Retrieve all carts with merchants included. | + + +### Response + +
      +Response sample: no carts are retrieved + +```json +{ + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + +
      +Response sample: retrieve all carts + +```json +{ + "data": [ + { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 3744, + "taxTotal": 5380, + "subtotal": 37440, + "grandTotal": 33696 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 3744, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + }, + { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Black Friday Conf Bundle", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 8324, + "taxTotal": 1469, + "subtotal": 83236, + "grandTotal": 74912 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts" + } +} +``` + +
      + + +
      +Response sample: retrieve all carts with the items included + +```json +{ + "data": [ + { + "type": "carts", + "id": "ac3da9eb-f4fc-5803-94b9-343d6cd4cda4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 4158, + "taxTotal": 5974, + "subtotal": 41575, + "grandTotal": 37417, + "priceToPay": 37417 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4158, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "070_133913222" + } + ] + } + } + }, + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 6165, + "taxTotal": 3630, + "subtotal": 61647, + "grandTotal": 55482, + "priceToPay": 55482 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 6165, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "089_29634947" + }, + { + "type": "items", + "id": "201_11217755" + } + ] + } + } + }, + { + "type": "carts", + "id": "8ef901fe-fe47-5569-9668-2db890dbee6d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 4200, + "taxTotal": 6035, + "subtotal": 42000, + "grandTotal": 37800, + "priceToPay": 37800 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4200, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "005_30663301" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items" + }, + "included": [ + { + "type": "items", + "id": "070_133913222", + "attributes": { + "sku": "070_133913222", + "quantity": "1", + "groupKey": "070_133913222", + "abstractSku": "070", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41575, + "sumPrice": 41575, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41575, + "sumGrossPrice": 41575, + "unitTaxAmountFullAggregation": 5974, + "sumTaxAmountFullAggregation": 5974, + "sumSubtotalAggregation": 41575, + "unitSubtotalAggregation": 41575, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4158, + "sumDiscountAmountAggregation": 4158, + "unitDiscountAmountFullAggregation": 4158, + "sumDiscountAmountFullAggregation": 4158, + "unitPriceToPayAggregation": 37417, + "sumPriceToPayAggregation": 37417 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/ac3da9eb-f4fc-5803-94b9-343d6cd4cda4/items/070_133913222" + } + }, + { + "type": "items", + "id": "089_29634947", + "attributes": { + "sku": "089_29634947", + "quantity": "1", + "groupKey": "089_29634947", + "abstractSku": "089", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 41393, + "sumPrice": 41393, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 41393, + "sumGrossPrice": 41393, + "unitTaxAmountFullAggregation": 2437, + "sumTaxAmountFullAggregation": 2437, + "sumSubtotalAggregation": 41393, + "unitSubtotalAggregation": 41393, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 4140, + "sumDiscountAmountAggregation": 4140, + "unitDiscountAmountFullAggregation": 4140, + "sumDiscountAmountFullAggregation": 4140, + "unitPriceToPayAggregation": 37253, + "sumPriceToPayAggregation": 37253 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/089_29634947" + } + }, + { + "type": "items", + "id": "201_11217755", + "attributes": { + "sku": "201_11217755", + "quantity": "1", + "groupKey": "201_11217755", + "abstractSku": "201", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 20254, + "sumPrice": 20254, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 20254, + "sumGrossPrice": 20254, + "unitTaxAmountFullAggregation": 1193, + "sumTaxAmountFullAggregation": 1193, + "sumSubtotalAggregation": 20254, + "unitSubtotalAggregation": 20254, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2025, + "sumDiscountAmountAggregation": 2025, + "unitDiscountAmountFullAggregation": 2025, + "sumDiscountAmountFullAggregation": 2025, + "unitPriceToPayAggregation": 18229, + "sumPriceToPayAggregation": 18229 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/items/201_11217755" + } + }, + { + "type": "items", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "quantity": 6, + "groupKey": "005_30663301", + "abstractSku": "005", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 7000, + "sumPrice": 42000, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 7000, + "sumGrossPrice": 42000, + "unitTaxAmountFullAggregation": 1006, + "sumTaxAmountFullAggregation": 6035, + "sumSubtotalAggregation": 42000, + "unitSubtotalAggregation": 7000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 700, + "sumDiscountAmountAggregation": 4200, + "unitDiscountAmountFullAggregation": 700, + "sumDiscountAmountFullAggregation": 4200, + "unitPriceToPayAggregation": 6300, + "sumPriceToPayAggregation": 37800 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d/items/005_30663301" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve all carts with cart permission groups included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "2" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-permission-groups" + }, + "included": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/1" + } + }, + { + "type": "cart-permission-groups", + "id": "2", + "attributes": { + "name": "FULL_ACCESS", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/2" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve all carts with shared carts included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts" + }, + "included": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + }, + { + "type": "shared-carts", + "id": "180ab2c2-60be-5ed4-8158-abee52d9d640", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/180ab2c2-60be-5ed4-8158-abee52d9d640" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with included information about shared carts, and the company users they are shared with + +```json +{ + "data": [ + { + "type": "carts", + "id": "dc16f734-968d-5a45-92b7-aae5f804f77c", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null, + "priceToPay": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/dc16f734-968d-5a45-92b7-aae5f804f77c?include=shared-carts,company-users" + } + }, + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1999, + "subtotal": 12522, + "grandTotal": 12522, + "priceToPay": 12522 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=shared-carts,company-users" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=shared-carts,company-users" + }, + "included": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + }, + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863", + "attributes": { + "idCompanyUser": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/79e91e88-b83a-5095-aa64-b3914bdd4863" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with cart rules included + +```json +{ + "data": [ + { + "type": "carts", + "id": "59743e37-0182-5153-9935-77106741a9d2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Purchases", + "isDefault": true, + "totals": { + "expenseTotal": null, + "discountTotal": null, + "taxTotal": null, + "subtotal": null, + "grandTotal": null + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/59743e37-0182-5153-9935-77106741a9d2" + } + }, + { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + { + "type": "carts", + "id": "2b72635a-9363-56f5-9ba7-55631b8ad71e", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "New", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 10206, + "taxTotal": 14666, + "subtotal": 102063, + "grandTotal": 91857 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10206, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2b72635a-9363-56f5-9ba7-55631b8ad71e" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=cart-rules" + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 10206, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with the applied vouchers included + +```json +{ + "data": [ + { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 1663, + "taxTotal": 5046, + "subtotal": 33265, + "grandTotal": 31602, + "priceToPay": 31602 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 1663, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykerya1y" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers" + }, + "included": [ + { + "type": "vouchers", + "id": "sprykerya1y", + "attributes": { + "amount": 1663, + "code": "sprykerya1y", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-28 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykerya1y" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with promotional items included + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17352, + "taxTotal": 19408, + "subtotal": 173517, + "grandTotal": 156165, + "priceToPay": 56165 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17352, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=promotional-items" + }, + "included": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with the applied gift cards + +```json +{ + "data": [ + { + "type": "carts", + "id": "e877356a-5d8f-575e-aacc-c790eeb20a27", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Everyday purchases", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 17145, + "taxTotal": 19408, + "subtotal": 171447, + "grandTotal": 154302, + "priceToPay": 54302 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 17145, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=vouchers,gift-cards" + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-23RLC8H1-20", + "attributes": { + "code": "GC-23RLC8H1-20", + "name": "Gift Card 1000", + "value": 100000, + "currencyIsoCode": "EUR", + "actualValue": 100000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/e877356a-5d8f-575e-aacc-c790eeb20a27/cart-codes/GC-23RLC8H1-20" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with items, respective concrete products, and their product options included + +```json +{ + "data": [ + { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "181_31995510-3-5" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-options" + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper—create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with their concrete products and the product labels assigned to the products in the carts + +```json +{ + "data": [ + { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 538, + "subtotal": 3369, + "grandTotal": 3369, + "priceToPay": 3369 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421511" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/carts?include=items,concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "sale" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "421511", + "attributes": { + "sku": "421511", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "name": "Parker ballpoint pen URBAN Premium S0911450 M refill, blue", + "description": "In transparent color tones with lightly curved body.

      * Line width: 0.5 mm * type designation of the refill: Slider 774 * refill exchangeable * printing mechanism * waterproof * design of the grip zone: round * tip material: stainless steel", + "attributes": { + "material": "metal", + "wischfest": "No", + "abwischbar": "No", + "wasserfest": "No", + "nachfuellbar": "No", + "schreibfarbe": "blue", + "brand": "Parker" + }, + "superAttributesDefinition": [ + "material" + ], + "metaTitle": "", + "metaKeywords": "Schreibgeräte,Schreibgeräte,Kugelschreiber,Kugelschreiber,Kulis,Kulis,Kulischreiber,Kulischreiber", + "metaDescription": "", + "attributeNames": { + "material": "Material", + "wischfest": "Smudge-resistant", + "abwischbar": "Wipeable", + "wasserfest": "Watertight", + "nachfuellbar": "Refillable", + "schreibfarbe": "Writing color", + "brand": "Brand" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/421511" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "items", + "id": "421511", + "attributes": { + "sku": "421511", + "quantity": "1", + "groupKey": "421511", + "abstractSku": "M21759", + "amount": null, + "calculations": { + "unitPrice": 3369, + "sumPrice": 3369, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3369, + "sumGrossPrice": 3369, + "unitTaxAmountFullAggregation": 538, + "sumTaxAmountFullAggregation": 538, + "sumSubtotalAggregation": 3369, + "unitSubtotalAggregation": 3369, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3369, + "sumPriceToPayAggregation": 3369 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9/items/421511" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "421511" + } + ] + } + } + } + ] +} +``` + +

      + +
      +Response sample: retrieve all carts with product offers included + +```json +{ + "data": [ + { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/items?include=items,concrete-products,product-offers" + }, + "included": [ + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve all carts with product offers and product offer availabilities included + +```json +{ + "data": [ + { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/items?include=items,concrete-products,product-offers,product-offer-availabilities" + }, + "included": [ + { + "type": "product-offer-availabilities", + "id": "offer48", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with product offers and product offer prices included + +```json +{ + "data": { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + }, + "links": { + "self": "https://glue.mysprykershop.com/items?include=items,concrete-products,product-offers,product-offer-prices" + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer48", + "attributes": { + "price": 9861, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9861, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 10650, + "netAmount": 10500, + "quantity": 3 + }, + { + "grossAmount": 10580, + "netAmount": 10450, + "quantity": 9 + }, + { + "grossAmount": 10520, + "netAmount": 10400, + "quantity": 17 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve all carts with merchants included + +```json +{ + "data": [ + { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 20271, + "subtotal": 126960, + "grandTotal": 126960, + "priceToPay": 126960 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/items?include=merchants" + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

      General Terms



      (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

      (2) We do not collect information from visitors of our site or other details to help you with your experience.

      Using your Information



      We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

      To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

      Protecting visitor information



      Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

      ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

      Spryker Systems GmbH

      Julie-Wolfthorn-Straße 1
      10115 Berlin
      DE

      Phone: +49 (30) 2084983 50
      Email: info@spryker.com

      Represented by
      Managing Directors: Alexander Graf, Boris Lokschin
      Register Court: Hamburg
      Register Number: HRB 134310

      ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "quantity": 12, + "groupKey": "020_21081478", + "abstractSku": "020", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 10580, + "sumPrice": 126960, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10580, + "sumGrossPrice": 126960, + "unitTaxAmountFullAggregation": 1689, + "sumTaxAmountFullAggregation": 20271, + "sumSubtotalAggregation": 126960, + "unitSubtotalAggregation": 10580, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10580, + "sumPriceToPayAggregation": 126960 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items/020_21081478" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
      + + + +**General cart information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| priceMode | String | Price mode that was active when the cart was created. | +| currency | String | Currency that was selected when the cart was created. | +| store | String | Store for which the cart was created. | +| name | String | Specifies a cart name.
      The field is available in multi-cart environments only. | +| isDefault | Boolean | Specifies whether the cart is the default one for the customer.
      The field is available in multi-cart environments only. | + +**Discount information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| displayName | String | Discount name. | +| amount | Integer | Discount amount applied to the cart. | +| code | String | Discount code applied to the cart. | + +**Totals** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| expenseTotal | String | Total amount of expenses (including, for example, shipping costs). | +| discountTotal | Integer | Total amount of discounts applied to the cart. | +| taxTotal | Integer | Total amount of taxes to be paid. | +| subTotal | Integer | Subtotal of the cart. | +| grandTotal | Integer | Grand total of the cart. | +| selectedProductOptions | array | List of attributes describing the product options that were added to cart with the product. | +| priceToPay| Integer | Final price to pay after discounts with additions. | + +**Product options** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| selectedProductOptions.optionGroupName | String | Name of the group to which the option belongs. | +| selectedProductOptions.sku | String | SKU of the product option. | +| selectedProductOptions.optionName | String | Product option name. | +| selectedProductOptions.price | Integer | Product option price in cents. | +| selectedProductOptions.currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | + +**Included resource attributes** + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| promotional-items | id | String | Unique identifier of the promotional item. The ID can be used to apply the promotion to the given purchase. | +| promotional-items | sku | String | SKU of the promoted abstract product. | +| promotional-items | quantity | Integer | Specifies how many promotions can be applied to the given purchase. | +| product-options | optionGroupName | String | Name of the group to which the option belongs. | +| product-options | sku | String | SKU of the product option. | +| product-options | optionName | String | Product option name. | +| product-options | price | Integer | Product option price in cents. | +| product-options | currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | +| vouchers, cart-rules | displayName | String | Discount name displayed on the Storefront. | +| vouchers, cart-rules | amount | Integer | Amount of the provided discount. | +| vouchers, cart-rules | code | String | Discount code. | +| vouchers, cart-rules | discountType | String | Discount type. | +| vouchers, cart-rules | isExclusive | Boolean | Discount exclusivity. | +| vouchers, cart-rules | expirationDateTime | DateTimeUtc | Date and time on which the discount expires. | +| vouchers, cart-rules | discountPromotionAbstractSku | String | SKU of the products to which the discount applies. If the discount can be applied to any product, the value is `null`. | +| vouchers, cart-rules | discountPromotionQuantity | Integer | Specifies the amount of the product required to be able to apply the discount. If the minimum number is `0`, the value is `null`. | +| shared-carts | idCompanyUser | String | Unique identifier of the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) with whom the cart is shared. | +| shared-carts | idCartPermissionGroup | Integer | Unique identifier of the cart permission group that describes the permissions granted to the user with whom the cart is shared. | +| cart-permission-groups | name | String | Permission group name. | +| cart-permission-groups | isDefault | Boolean | Defines if the permission group is applied to shared carts by default. | +| company-users | id | String | Unique identifier of the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) with whom the cart is shared. | +| company-users | isActive | Boolean | Defines if the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) is active. | +| company-users | isDefault | Boolean | Defines if the [company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) is default for the [customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For the attributes of the included resources, see: + +- [Add an item to a registered user's cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html#add-an-item-to-a-registered-users-cart) +- [Managing gift cards of registered users](/docs/pbc/all/gift-cards/{{page.version}}/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html) +- [Retrieving product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) +- [Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html#product-offers-response-attributes) +- [Retrieving product offer prices](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + +## Retrieve a registered user's cart + +To retrieve a registered user's cart, send the request: + +*** +`GET` {% raw %}**/carts/*{{cart_uuid}}***{% endraw %} +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %} | Unique identifier of a cart. [Create a cart](#create-a-cart) or [retrieve a registered user's cart](#retrieve-registered-users-carts) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • cart-permission-groups
      • shared-carts
      • company-users
      • cart-rules
      • promotional-items
      • vouchers
      • gift-cards
      • concrete-products
      • product-options
      • product-labels
      • product-offers
      • product-offer-availabilities
      • product-offer-prices
      • merchants
      | + +{% info_block infoBox "Info" %} + +- To retrieve all the product options of the item in a cart, include `items`, `concrete-products`, and `product-options`. +- To retrieve product labels of the products in a cart, include `items`, `concrete-products`, and `product-labels`. +- To retrieve product offers, include `items`, `concrete-products`, and `product-offers`. +- To retrieve product offer availabilities, include `items`, `concrete-products`, `product-offers`, and `product-offer-availabilities`. +- To retrieve product offer prices, include `items`, `concrete-products`, `product-offers`, and `product-offer-prices`. + +{% endinfo_block %} + + + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=items` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with its items included. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=cart-permission-groups` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with its cart permissions included. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=shared-carts` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with details on the shared carts. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=shared-carts,company-users` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with information about the shared carts and the company uses they are shared with. | +| `GET https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4?include=cart-rules` | Retrieve the `2fd32609-b6b0-5993-9254-8d2f271941e4` cart with the cart rules. | +| `GET https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2?include=promotional-items` | Retrieve the `1ce91011-8d60-59ef-9fe0-4493ef3628b2` cart with its promotional items. | +| `GET https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d?include=gift-cards` | Retrieve the `8ef901fe-fe47-5569-9668-2db890dbee6` cart with detailed information on its gift cards. | +| `GET https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options` | Retrieve the `8fc45eda-cddf-5fec-8291-e2e5f8014398` cart with items, concrete products, and their product options. | +| `GET https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers` | Retrieve the `976af32f-80f6-5f69-878f-4ea549ee0830` cart with detailed information on its vouchers. | +| `GET https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels` | Retrieve the `0c3ec260-694a-5cec-b78c-d37d32f92ee9` cart with information about the product labels assigned to the products in the cart. | +| `GET https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff?include=items,concrete-products,product-offers` | Retrieve the `bef3732e-bc7a-5c07-a40c-f38caf1c40ff` cart with details on product offers.| +| `GET https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff?include=items,concrete-products,product-offers,product-offer-availabilities` | Retrieve the `bef3732e-bc7a-5c07-a40c-f38caf1c40ff` cart with details on product offers and product offer availabilities.| +| `GET https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff?include=items,concrete-products,product-offers,product-offer-prices` | Retrieve the `bef3732e-bc7a-5c07-a40c-f38caf1c40ff` cart with details on product offers and product offer prices.| +| `GET https://glue.mysprykershop.com/carts/54a8290f-a2f6-58db-ae5d-ad4d04aad6ae?include=items,merchants` | Retrieve the `54a8290f-a2f6-58db-ae5d-ad4d04aad6ae` cart with detailed information on merchants. | + + +### Response + +
      +Response sample: retrieve a cart + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + } + } +} +``` + +
      + + +
      +Response sample: retrieve a cart with its items included + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421479" + }, + { + "type": "items", + "id": "575260" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "421479", + "attributes": { + "sku": "421479", + "quantity": 2, + "groupKey": "421479", + "abstractSku": "M21744", + "amount": null, + "calculations": { + "unitPrice": 442, + "sumPrice": 884, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 442, + "sumGrossPrice": 884, + "unitTaxAmountFullAggregation": 64, + "sumTaxAmountFullAggregation": 127, + "sumSubtotalAggregation": 884, + "unitSubtotalAggregation": 442, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 44, + "sumDiscountAmountAggregation": 88, + "unitDiscountAmountFullAggregation": 44, + "sumDiscountAmountFullAggregation": 88, + "unitPriceToPayAggregation": 398, + "sumPriceToPayAggregation": 796 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4/items/421479" + } + }, + { + "type": "items", + "id": "575260", + "attributes": { + "sku": "575260", + "quantity": 1, + "groupKey": "575260", + "abstractSku": "M1028062", + "amount": null, + "calculations": { + "unitPrice": 28767, + "sumPrice": 28767, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 28767, + "sumGrossPrice": 28767, + "unitTaxAmountFullAggregation": 4133, + "sumTaxAmountFullAggregation": 4134, + "sumSubtotalAggregation": 28767, + "unitSubtotalAggregation": 28767, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2877, + "sumDiscountAmountAggregation": 2877, + "unitDiscountAmountFullAggregation": 2877, + "sumDiscountAmountFullAggregation": 2877, + "unitPriceToPayAggregation": 25890, + "sumPriceToPayAggregation": 25890 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4/items/575260" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a cart with its cart permissions included + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-permission-groups": { + "data": [ + { + "type": "cart-permission-groups", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-permission-groups", + "id": "1", + "attributes": { + "name": "READ_ONLY", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-permission-groups/1" + } + } + ] +} +``` + +
      + + + +
      +Response sample: retrieve a cart with the details on the shared carts + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + ] + } + } + }, + "included": [ + { + "type": "shared-carts", + "id": "8ceae991-0b8d-5c85-9f40-06c4c04fc7f4", + "attributes": { + "idCompanyUser": "72778771-2020-574f-bbaf-05da5889e79e", + "idCartPermissionGroup": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/8ceae991-0b8d-5c85-9f40-06c4c04fc7f4" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with the information about the shared carts and the company users they are shared with + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 1999, + "subtotal": 12522, + "grandTotal": 12522, + "priceToPay": 12522 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=shared-carts,company-users" + }, + "relationships": { + "shared-carts": { + "data": [ + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863" + } + ] + } + } + }, + "included": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + }, + { + "type": "shared-carts", + "id": "79e91e88-b83a-5095-aa64-b3914bdd4863", + "attributes": { + "idCompanyUser": "2816dcbd-855e-567e-b26f-4d57f3310bb8", + "idCartPermissionGroup": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/shared-carts/79e91e88-b83a-5095-aa64-b3914bdd4863" + }, + "relationships": { + "company-users": { + "data": [ + { + "type": "company-users", + "id": "2816dcbd-855e-567e-b26f-4d57f3310bb8" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with the cart rules included + +```json +{ + "data": { + "type": "carts", + "id": "2fd32609-b6b0-5993-9254-8d2f271941e4", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": false, + "totals": { + "expenseTotal": 0, + "discountTotal": 2965, + "taxTotal": 4261, + "subtotal": 29651, + "grandTotal": 26686 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 2965, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/2fd32609-b6b0-5993-9254-8d2f271941e4" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 2965, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + + + +
      +Response sample: retrieve a cart with its promotional items + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 11113, + "taxTotal": 15107, + "subtotal": 111128, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + }, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + }, + "included": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a cart with the detailed information on its gift cards + +```json +{ + "data": { + "type": "carts", + "id": "8ef901fe-fe47-5569-9668-2db890dbee6d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 4200, + "taxTotal": 6035, + "subtotal": 42000, + "grandTotal": 37800, + "priceToPay": 17800 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 4200, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-I6UB6O56-20" + } + ] + } + } + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-I6UB6O56-20", + "attributes": { + "code": "GC-I6UB6O56-20", + "name": "Gift Card 200", + "value": 20000, + "currencyIsoCode": "EUR", + "actualValue": 20000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8ef901fe-fe47-5569-9668-2db890dbee6d/cart-codes/GC-I6UB6O56-20" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with items, concrete products, and their product options + +```json +{ + "data": { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398?include=items,concrete-products,product-options" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "181_31995510-3-5" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper—create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with the detailed information on its vouchers + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 25766, + "taxTotal": 25407, + "subtotal": 184893, + "grandTotal": 159127, + "priceToPay": 159127 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 18489, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830?include=vouchers" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykercu2d" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykercu2d", + "attributes": { + "amount": 7277, + "code": "sprykercu2d", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykercu2d" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with information about the product labels assigned to the products in the cart + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "CHF", + "store": "DE", + "name": "Weekly office", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 538, + "subtotal": 3369, + "grandTotal": 3369, + "priceToPay": 3369 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9?include=items,concrete-products,product-labels" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "421511" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "sale" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "421511", + "attributes": { + "sku": "421511", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "name": "Parker ballpoint pen URBAN Premium S0911450 M refill, blue", + "description": "In transparent color tones with lightly curved body.

      * Line width: 0.5 mm * type designation of the refill: Slider 774 * refill exchangeable * printing mechanism * waterproof * design of the grip zone: round * tip material: stainless steel", + "attributes": { + "material": "metal", + "wischfest": "No", + "abwischbar": "No", + "wasserfest": "No", + "nachfuellbar": "No", + "schreibfarbe": "blue", + "brand": "Parker" + }, + "superAttributesDefinition": [ + "material" + ], + "metaTitle": "", + "metaKeywords": "Schreibgeräte,Schreibgeräte,Kugelschreiber,Kugelschreiber,Kulis,Kulis,Kulischreiber,Kulischreiber", + "metaDescription": "", + "attributeNames": { + "material": "Material", + "wischfest": "Smudge-resistant", + "abwischbar": "Wipeable", + "wasserfest": "Watertight", + "nachfuellbar": "Refillable", + "schreibfarbe": "Writing color", + "brand": "Brand" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/421511" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "items", + "id": "421511", + "attributes": { + "sku": "421511", + "quantity": "1", + "groupKey": "421511", + "abstractSku": "M21759", + "amount": null, + "calculations": { + "unitPrice": 3369, + "sumPrice": 3369, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3369, + "sumGrossPrice": 3369, + "unitTaxAmountFullAggregation": 538, + "sumTaxAmountFullAggregation": 538, + "sumSubtotalAggregation": 3369, + "unitSubtotalAggregation": 3369, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 3369, + "sumPriceToPayAggregation": 3369 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9/items/421511" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "421511" + } + ] + } + } + } + ] +} +``` + +

      + +
      +Response sample: retrieve a cart with details on product offers + +```json +{ + "data": { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + }, + "included": [ + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with details on product offers and product offer availabilities + +```json +{ + "data": { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-availabilities", + "id": "offer89", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer89" + } + ] + } + } + }, + { + "type": "product-offer-availabilities", + "id": "offer48", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a cart with details on product offers and product offer prices + +```json +{ + "data": { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 4972, + "subtotal": 31140, + "grandTotal": 31140, + "priceToPay": 31140 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer89", + "attributes": { + "price": 9342, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9342, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 10065, + "netAmount": 10050, + "quantity": 2 + }, + { + "grossAmount": 10058, + "netAmount": 10045, + "quantity": 7 + }, + { + "grossAmount": 10052, + "netAmount": 10040, + "quantity": 18 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer89" + } + ] + } + } + }, + { + "type": "product-offer-prices", + "id": "offer48", + "attributes": { + "price": 9861, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9861, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 10650, + "netAmount": 10500, + "quantity": 3 + }, + { + "grossAmount": 10580, + "netAmount": 10450, + "quantity": 9 + }, + { + "grossAmount": 10520, + "netAmount": 10400, + "quantity": 17 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": "3", + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 10380, + "sumPrice": 31140, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10380, + "sumGrossPrice": 31140, + "unitTaxAmountFullAggregation": 1657, + "sumTaxAmountFullAggregation": 4972, + "sumSubtotalAggregation": 31140, + "unitSubtotalAggregation": 10380, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10380, + "sumPriceToPayAggregation": 31140 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} + +``` + +
      + +
      +Response sample: retrieve a cart with detailed information on merchants + +```json +{ + "data": { + "type": "carts", + "id": "54a8290f-a2f6-58db-ae5d-ad4d04aad6ae", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Test1", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 822, + "subtotal": 12572, + "grandTotal": 12572, + "priceToPay": 12572 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/54a8290f-a2f6-58db-ae5d-ad4d04aad6ae?include=items,merchants" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "109_19416433" + } + ] + } + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "latitude": "13.384458", + "longitude": "52.534105", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

      General Terms

      (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

      (2) We do not collect information from visitors of our site or other details to help you with your experience.

      Using your Information

      We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

      To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

      Protecting visitor information

      Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

      ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

      Spryker Systems GmbH

      Julie-Wolfthorn-Straße 1
      10115 Berlin
      DE

      Phone: +49 (30) 2084983 50
      Email: info@spryker.com

      Represented by
      Managing Directors: Alexander Graf, Boris Lokschin
      Register Court: Hamburg
      Register Number: HRB 134310

      ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "items", + "id": "109_19416433", + "attributes": { + "sku": "109_19416433", + "quantity": "1", + "groupKey": "109_19416433", + "abstractSku": "109", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 12572, + "sumPrice": 12572, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 12572, + "sumGrossPrice": 12572, + "unitTaxAmountFullAggregation": 822, + "sumTaxAmountFullAggregation": 822, + "sumSubtotalAggregation": 12572, + "unitSubtotalAggregation": 12572, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 12572, + "sumPriceToPayAggregation": 12572 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/54a8290f-a2f6-58db-ae5d-ad4d04aad6ae/items/109_19416433" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
      + +For the attributes of carts of registered users and included resources, see [Retrieve a registered user's carts](#retrieve-registered-users-carts-response-attributes). + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For the attributes of the included resources, see: +- [Add an item to a registered user's cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html#add-an-item-to-a-registered-users-cart) +- [Managing gift cards of registered users](/docs/pbc/all/gift-cards/{{page.version}}/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html). +- [Cart permission groups](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/share-company-user-carts/glue-api-retrieve-cart-permission-groups.html). +- [Managing items in carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html). +- [Retrieve product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) +- [Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html#product-offers-response-attributes) +- [Retrieving product offers](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) + +## Edit a cart + +You can edit the name of the cart, change the currency and price mode. To do that, send the request: + +--- +`PATCH` {% raw %}**/carts/*{{cart_uuid}}***{% endraw %} + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %} | Unique identifier of a cart. [Create a cart](#create-a-cart) or [retrieve a registered user's carts](#retrieve-registered-users-carts) to get it. | + + + +{% info_block infoBox "Info" %} + +- You can change the price mode only of an empty cart. + +{% endinfo_block %} + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | +| If-Match | 075d700b908d7e41f751c5d2d4392407 | ✓ | Makes the request conditional. It matches the listed conditional ETags from the headers when retrieving the cart. The patch is applied only if the tag value matches. | + +Request sample: edit a cart + +`https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9` + +```json +{ + "data":{ + "type":"carts", + "attributes":{ + "name":"My Cart with awesome name", + "priceMode":"GROSS_MODE", + "currency":"EUR", + "store":"DE" + } + } +} +``` + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | String | ✓ | Sets the cart name. This field can be set only if you are using the Multiple Carts feature. If you are operating in a single-cart environment, an attempt to set the value will result in an error with the `422 Unprocessable Entry` status code. Cart name should be unique and should not be longer than 30 characters.| +| priceMode | Enum | ✓ | Sets the price mode to be used for the cart. Possible values:
      • GROSS_MODE—prices after tax;
      • NET_MODE—prices before tax.
      For details, see [Net & Gross Prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html). | +| currency | String | ✓ | Sets the cart currency. | +| store | String | ✓ | Sets the name of the store where to create the cart. | + +### Response + +Response sample: edit a cart + +```json +{ + "data": { + "type": "carts", + "id": "0c3ec260-694a-5cec-b78c-d37d32f92ee9", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart with awesome name", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 63538, + "taxTotal": 79689, + "subtotal": 635381, + "grandTotal": 571843, + "priceToPay": 571843 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/0c3ec260-694a-5cec-b78c-d37d32f92ee9" + } + } +} +``` + +## Delete a cart + +To delete a cart, send the request: + +--- +`DELETE` {% raw %}**/carts/*{{cart_uuid}}***{% endraw %} + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %}| Unique identifier of a cart. [Create a cart](#create-a-cart) or [retrieve a registered user's carts](#retrieve-registered-users-carts) to get it. | + + + +{% info_block infoBox "Deleting carts" %} + +You can delete a cart only if a customer has at least one more cart. Deleting a customer's last cart returns the `422 Unprocessable Entry` status code. If you delete the default cart of a customer, another cart is assigned as default automatically. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer or company user to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) or [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user). | + + +Request sample: delete a cart + +`DELETE https://glue.mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054` + +### Response + +If the cart is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart could not be deleted. | +| 106 | Cart item could not be deleted. | +| 107 | Failed to create a cart. | +| 109 | Anonymous customer unique id is empty. | +| 110 | Customer already has a cart. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item could not be added. | +| 114 | Cart item could not be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.md new file mode 100644 index 00000000000..5814a3ccb30 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.md @@ -0,0 +1,1846 @@ +--- +title: Manage items in carts of registered users +description: Retrieve details about the items of the registered users' carts, and learn what else you can do with the resource in the Spryker Marketplace using glue API +template: glue-api-storefront-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/dev/glue-api-guides/202311.0/carts-of-registered-users/managing-items-in-carts-of-registered-users.html +related: + - title: Managing carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html +--- +This endpoint allows managing items in carts of registered users by adding, changing, and deleting them. + + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Merchant Offers Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html + + + +## Add an item to a registered user's cart + +To add items to a cart, send the request: + +--- +`POST` {% raw %}**carts/*{{cart_uuid}}*/items**{% endraw %} + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %} | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html) or [retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html#retrieve-a-registered-users-cart) to get it. | + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • items
      • product-measurement-units
      • sales-units
      • cart-rules
      • vouchers
      • concrete-products
      • product-options
      • product-offers
      • merchants
      | + +{% info_block infoBox "Included resources" %} + +To retrieve all the product options of the item in a cart, include `concrete-products` and `product-options`. + +{% endinfo_block %} + + +
      +Request sample: add an item to a registered user's cart + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "066_23294028", + "quantity": "3" + } + } +} +``` + +
      + + +
      +Request sample: add an item to a registered user's cart with product measurement units and sales units + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items?include=sales-units,product-measurement-units` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "salesUnit": { + "id": 33, + "amount": 4.5 + } + } + } +} +``` + +
      + +
      +Request sample: add an item to a registered user's cart with cart rules + +`POST https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items?include=cart-rules` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "077_24584210", + "quantity": "10" + } + } +} +``` + +
      + +
      +Request sample: add an item to a registered user's cart with vouchers + +`POST https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items?include=vouchers` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "066_23294028", + "quantity": "1" + } + } +} +``` + +
      + +
      +Request sample: add a promotional item to a registered user's cart with cart rules + +{% info_block infoBox "Cart rules" %} + +To add the promotional product to the cart, make sure that the cart fulfills the cart rules for the promotional item. + +{% endinfo_block %} + +`POST https://glue.myspsrykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items?include=cart-rules` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "idPromotionalItem": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + } +} +``` + +
      + +
      +Request sample: add an item to a registered user's cart with details on concrete products and product options + +`POST https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items?include=concrete-products,product-options` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "productOptions": [ + { + "sku": "OP_gift_wrapping" + }, + { + "sku": "OP_3_year_warranty" + } + ] + } + } +} +``` + +
      + +
      +Request sample: add a product offer to a registered user's cart + +`POST http://glue.myspsrykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items?include=items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "041_25904691", + "quantity": 5, + "productOfferReference": "offer48" + } + } +} +``` + +
      + + +
      +Request sample: add a marketplace product to a registered user's cart + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "020_21081478", + "quantity": "6", + "merchantReference": "MER000001" + } + } +} +``` + +
      + +
      +Request sample: add an item to a registered user's cart with details on merchants + +`POST https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items?include=items,merchants` + +```json +{ + "data": { + "type": "items", + "attributes": { + "sku": "020_21081478", + "quantity": "6", + "merchantReference": "MER000001" + } + } +} +``` + +
      + + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| sku | String | ✓ | SKU of the concrete product to add to the cart. | +| quantity | Integer | ✓ | Number of items to add to the guest cart. If you add a promotional item, and the number of products exceeds the number of promotions, the exceeding items are added without the promotional benefits. | +| merchantReference | String | Required when adding a merchant product. | Unique identifier of the merchant the product of which to add to the cart. | +| salesUnit | Object | | List of attributes defining the sales unit to be used for item amount calculation. | +| salesUnit.id | Integer | | Unique identifier of the sales units to calculate the item amount in. | +| salesUnit.amount | Integer | | Amount of the product in the defined sales units. | +| idPromotionalItem | String | | Unique identifier of a promotional item to add to the cart. | +| productOptions | Array | | List of attributes defining the product option to add to the cart. | +| productOptions.sku | String | | Unique identifier of the product option to add to the cart. | +| productOfferReference | String |Required when adding a product offer. |Unique identifier of the product offer to add to the cart. | + +{% info_block infoBox "Conversion" %} + +When defining product amount in sales units, make sure that the correlation between amount and quantity corresponds to the conversion of the defined sales unit. See [Measurement Units feature overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn more. + +{% endinfo_block %} + +{% info_block infoBox "Product options" %} +It is the responsibility of the API Client to track whether the selected items are compatible. For example, the client should not allow a 2-year and a 4-year warranty service to be applied to the same product. The API endpoints allow any combination of items, no matter whether they are compatible or not. + +{% endinfo_block %} + +### Response + +
      +Response sample: add an item to a registered user's cart + +```json +{ + "data": { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents 1", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 18850, + "subtotal": 118059, + "grandTotal": 118059, + "priceToPay": 118059 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + } +} +``` + +
      + + +
      +Response sample: add an item to a registered user's cart with product measurement units and sales units + +```json +{ + "data": { + "type": "carts", + "id": "482bdbd6-137f-5b58-bd1c-37f3fa735a16", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Black Friday Conf Bundle", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 3425, + "taxTotal": 4921, + "subtotal": 34247, + "grandTotal": 30822 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 3425, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16" + } + }, + "included": [ + { + "type": "items", + "id": "035_17360369", + "attributes": { + "sku": "035_17360369", + "quantity": "1", + "groupKey": "035_17360369", + "abstractSku": "035", + "amount": null, + "calculations": { + "unitPrice": 29747, + "sumPrice": 29747, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 29747, + "sumGrossPrice": 29747, + "unitTaxAmountFullAggregation": 4275, + "sumTaxAmountFullAggregation": 4275, + "sumSubtotalAggregation": 29747, + "unitSubtotalAggregation": 29747, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2975, + "sumDiscountAmountAggregation": 2975, + "unitDiscountAmountFullAggregation": 2975, + "sumDiscountAmountFullAggregation": 2975, + "unitPriceToPayAggregation": 26772, + "sumPriceToPayAggregation": 26772 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16/items/035_17360369" + } + }, + { + "type": "sales-units", + "id": "33", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2/sales-units/33" + } + }, + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 215, + "sumTaxAmountFullAggregation": 646, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 150, + "sumDiscountAmountAggregation": 450, + "unitDiscountAmountFullAggregation": 150, + "sumDiscountAmountFullAggregation": 450, + "unitPriceToPayAggregation": 1350, + "sumPriceToPayAggregation": 4050 + }, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/482bdbd6-137f-5b58-bd1c-37f3fa735a16/items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "33" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: add an item to a registered user's cart with cart rules + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 14554, + "taxTotal": 20914, + "subtotal": 145540, + "grandTotal": 130986, + "priceToPay": 130986 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 14554, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 14554, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + }, + { + "type": "items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": "10", + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 2091, + "sumTaxAmountFullAggregation": 20914, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 1455, + "sumDiscountAmountAggregation": 14554, + "unitDiscountAmountFullAggregation": 1455, + "sumDiscountAmountFullAggregation": 14554, + "unitPriceToPayAggregation": 13099, + "sumPriceToPayAggregation": 130986 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/077_24584210" + } + } + ] +} +``` + +
      + +
      +Response sample: add an item to a registered user's cart with vouchers + +```json +{ + "data": { + "type": "carts", + "id": "976af32f-80f6-5f69-878f-4ea549ee0830", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 25766, + "taxTotal": 25407, + "subtotal": 184893, + "grandTotal": 159127, + "priceToPay": 159127 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 18489, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830" + }, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "sprykercu2d" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "sprykercu2d", + "attributes": { + "amount": 7277, + "code": "sprykercu2d", + "discountType": "voucher", + "displayName": "5% discount on all white products", + "isExclusive": false, + "expirationDateTime": "2021-02-27 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/cart-codes/sprykercu2d" + } + }, + { + "type": "items", + "id": "077_24584210", + "attributes": { + "sku": "077_24584210", + "quantity": "10", + "groupKey": "077_24584210", + "abstractSku": "077", + "amount": null, + "calculations": { + "unitPrice": 14554, + "sumPrice": 145540, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 14554, + "sumGrossPrice": 145540, + "unitTaxAmountFullAggregation": 1975, + "sumTaxAmountFullAggregation": 19752, + "sumSubtotalAggregation": 145540, + "unitSubtotalAggregation": 14554, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2183, + "sumDiscountAmountAggregation": 21831, + "unitDiscountAmountFullAggregation": 2183, + "sumDiscountAmountFullAggregation": 21831, + "unitPriceToPayAggregation": 12371, + "sumPriceToPayAggregation": 123709 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/077_24584210" + } + }, + { + "type": "items", + "id": "066_23294028", + "attributes": { + "sku": "066_23294028", + "quantity": "1", + "groupKey": "066_23294028", + "abstractSku": "066", + "amount": null, + "calculations": { + "unitPrice": 39353, + "sumPrice": 39353, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 39353, + "sumGrossPrice": 39353, + "unitTaxAmountFullAggregation": 5655, + "sumTaxAmountFullAggregation": 5655, + "sumSubtotalAggregation": 39353, + "unitSubtotalAggregation": 39353, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 3935, + "sumDiscountAmountAggregation": 3935, + "unitDiscountAmountFullAggregation": 3935, + "sumDiscountAmountFullAggregation": 3935, + "unitPriceToPayAggregation": 35418, + "sumPriceToPayAggregation": 35418 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/976af32f-80f6-5f69-878f-4ea549ee0830/items/066_23294028" + } + } + ] +} +``` + +
      + +
      +Response sample: add a promotional item to a registered user's cart without cart-rules relationship + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + } + } +} +``` + +
      + + +
      +Response sample: add a promotional item to a registered user's cart with cart-rules relationship + +```json +{ + "data": { + "type": "carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13192, + "taxTotal": 15107, + "subtotal": 113207, + "grandTotal": 100015 + }, + "discounts": [ + { + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "amount": 2079, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 11113, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "6" + }, + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "134_29759322", + "attributes": { + "sku": "134_29759322", + "quantity": "1", + "groupKey": "134_29759322", + "abstractSku": "134", + "amount": null, + "calculations": { + "unitPrice": 1879, + "sumPrice": 1879, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1879, + "sumGrossPrice": 1879, + "unitTaxAmountFullAggregation": 270, + "sumTaxAmountFullAggregation": 270, + "sumSubtotalAggregation": 1879, + "unitSubtotalAggregation": 1879, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 188, + "sumDiscountAmountAggregation": 188, + "unitDiscountAmountFullAggregation": 188, + "sumDiscountAmountFullAggregation": 188, + "unitPriceToPayAggregation": 1691, + "sumPriceToPayAggregation": 1691 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/134_29759322" + } + }, + { + "type": "items", + "id": "118_29804739", + "attributes": { + "sku": "118_29804739", + "quantity": "1", + "groupKey": "118_29804739", + "abstractSku": "118", + "amount": null, + "calculations": { + "unitPrice": 6000, + "sumPrice": 6000, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 6000, + "sumGrossPrice": 6000, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 6000, + "unitSubtotalAggregation": 6000, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 600, + "sumDiscountAmountAggregation": 600, + "unitDiscountAmountFullAggregation": 600, + "sumDiscountAmountFullAggregation": 600, + "unitPriceToPayAggregation": 5400, + "sumPriceToPayAggregation": 5400 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/118_29804739" + } + }, + { + "type": "items", + "id": "139_24699831", + "attributes": { + "sku": "139_24699831", + "quantity": "1", + "groupKey": "139_24699831", + "abstractSku": "139", + "amount": null, + "calculations": { + "unitPrice": 3454, + "sumPrice": 3454, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 3454, + "sumGrossPrice": 3454, + "unitTaxAmountFullAggregation": 496, + "sumTaxAmountFullAggregation": 496, + "sumSubtotalAggregation": 3454, + "unitSubtotalAggregation": 3454, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 345, + "sumDiscountAmountAggregation": 345, + "unitDiscountAmountFullAggregation": 345, + "sumDiscountAmountFullAggregation": 345, + "unitPriceToPayAggregation": 3109, + "sumPriceToPayAggregation": 3109 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/139_24699831" + } + }, + { + "type": "items", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "quantity": 3, + "groupKey": "136_24425591", + "abstractSku": "136", + "amount": null, + "calculations": { + "unitPrice": 33265, + "sumPrice": 99795, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33265, + "sumGrossPrice": 99795, + "unitTaxAmountFullAggregation": 4780, + "sumTaxAmountFullAggregation": 14341, + "sumSubtotalAggregation": 99795, + "unitSubtotalAggregation": 33265, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 3327, + "sumDiscountAmountAggregation": 9980, + "unitDiscountAmountFullAggregation": 3327, + "sumDiscountAmountFullAggregation": 9980, + "unitPriceToPayAggregation": 29938, + "sumPriceToPayAggregation": 89815 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/136_24425591" + } + }, + { + "type": "items", + "id": "112_306918001-promotion-1", + "attributes": { + "sku": "112_306918001", + "quantity": "1", + "groupKey": "112_306918001-promotion-1", + "abstractSku": "112", + "amount": null, + "calculations": { + "unitPrice": 2079, + "sumPrice": 2079, + "taxRate": 0, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 2079, + "sumGrossPrice": 2079, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "sumSubtotalAggregation": 2079, + "unitSubtotalAggregation": 2079, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2079, + "sumDiscountAmountAggregation": 2079, + "unitDiscountAmountFullAggregation": 2079, + "sumDiscountAmountFullAggregation": 2079, + "unitPriceToPayAggregation": 0, + "sumPriceToPayAggregation": 0 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/items/112_306918001-promotion-1" + } + }, + { + "type": "cart-rules", + "id": "6", + "attributes": { + "amount": 2079, + "code": null, + "discountType": "cart_rule", + "displayName": "For every purchase above certain value depending on the currency and net/gross price. you get this promotional product for free", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": "112", + "discountPromotionQuantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/6" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 11113, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: add an item to a registered user's cart with details on concrete products and product options + +```json + { + "data": { + "type": "carts", + "id": "8fc45eda-cddf-5fec-8291-e2e5f8014398", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Christmas presents", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 19952, + "taxTotal": 31065, + "subtotal": 214518, + "grandTotal": 194566, + "priceToPay": 194566 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 19952, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398" + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper—create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": 6, + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 199518, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 199518, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 31065, + "sumSubtotalAggregation": 214518, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 15000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 19952, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 19952, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 194566 + }, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 3000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 12000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/8fc45eda-cddf-5fec-8291-e2e5f8014398/items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: add a product offer to a registered user's cart + +```json +{ + "data": { + "type": "carts", + "id": "bef3732e-bc7a-5c07-a40c-f38caf1c40ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "newcart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 44988, + "subtotal": 281770, + "grandTotal": 281770, + "priceToPay": 281770 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "041_25904691" + }, + { + "type": "items", + "id": "041_25904691_offer48" + } + ] + } + } + }, + "included": [ + { + "type": "items", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "quantity": 5, + "groupKey": "041_25904691", + "abstractSku": "041", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 1650, + "sumPrice": 8250, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1650, + "sumGrossPrice": 8250, + "unitTaxAmountFullAggregation": 263, + "sumTaxAmountFullAggregation": 1317, + "sumSubtotalAggregation": 8250, + "unitSubtotalAggregation": 1650, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1650, + "sumPriceToPayAggregation": 8250 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691" + } + }, + { + "type": "items", + "id": "041_25904691_offer48", + "attributes": { + "sku": "041_25904691", + "quantity": 26, + "groupKey": "041_25904691_offer48", + "abstractSku": "041", + "amount": null, + "productOfferReference": "offer48", + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 10520, + "sumPrice": 273520, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10520, + "sumGrossPrice": 273520, + "unitTaxAmountFullAggregation": 1680, + "sumTaxAmountFullAggregation": 43671, + "sumSubtotalAggregation": 273520, + "unitSubtotalAggregation": 10520, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10520, + "sumPriceToPayAggregation": 273520 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/bef3732e-bc7a-5c07-a40c-f38caf1c40ff/items/041_25904691_offer48" + } + } + ] +} +``` + +
      + +
      +Response sample: add a marketplace product to a registered user's cart + +```json +{ + "data": { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 10135, + "subtotal": 63480, + "grandTotal": 63480, + "priceToPay": 63480 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + } + } +} +``` + +
      + + +
      +Response sample: add an item to a registered user's cart with details on merchants + +```json +{ + "data": { + "type": "carts", + "id": "61ab15e9-e24a-5dec-a1ef-fc333bd88b0a", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "My Cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 20271, + "subtotal": 126960, + "grandTotal": 126960, + "priceToPay": 126960 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

      General Terms



      (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

      (2) We do not collect information from visitors of our site or other details to help you with your experience.

      Using your Information



      We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

      To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

      Protecting visitor information



      Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

      ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

      Spryker Systems GmbH

      Julie-Wolfthorn-Straße 1
      10115 Berlin
      DE

      Phone: +49 (30) 2084983 50
      Email: info@spryker.com

      Represented by
      Managing Directors: Alexander Graf, Boris Lokschin
      Register Court: Hamburg
      Register Number: HRB 134310

      ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "quantity": 12, + "groupKey": "020_21081478", + "abstractSku": "020", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 10580, + "sumPrice": 126960, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10580, + "sumGrossPrice": 126960, + "unitTaxAmountFullAggregation": 1689, + "sumTaxAmountFullAggregation": 20271, + "sumSubtotalAggregation": 126960, + "unitSubtotalAggregation": 10580, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10580, + "sumPriceToPayAggregation": 126960 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/61ab15e9-e24a-5dec-a1ef-fc333bd88b0a/items/020_21081478" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
      + + + + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| sku | String | Product SKU. | +| quantity | Integer | Quantity of the given product in the cart. | +| groupKey | String | Unique item identifier. The value is generated based on product properties. | +| abstractSku | String | Unique identifier of the abstract product owning this concrete product. | +| amount | Integer | Amount of the products in the cart. | +| unitPrice | Integer | Single item price without assuming if it's net or gross. This value should be used everywhere the price is displayed. It allows switching tax mode without side effects. | +| sumPrice | Integer | Sum of all items prices calculated. | +| taxRate | Integer | Current tax rate in percent. | +| unitNetPrice | Integer | Single item net price. | +| sumNetPrice | Integer | Sum of prices of all items. | +| unitGrossPrice | Integer | Single item gross price. | +| sumGrossPrice | Integer | Sum of items gross price. | +| unitTaxAmountFullAggregation | Integer | Total tax amount for a given item with additions. | +| sumTaxAmountFullAggregation | Integer | Total tax amount for a given sum of items with additions. | +| sumSubtotalAggregation | Integer | Sum of subtotals of the items. | +| unitSubtotalAggregation | Integer | Subtotal for the given item. | +| unitProductOptionPriceAggregation | Integer | Item total product option price. | +| sumProductOptionPriceAggregation | Integer | Item total of product options for the given sum of items. | +| unitDiscountAmountAggregation | Integer | Item total discount amount. | +| sumDiscountAmountAggregation | Integer | Sum of Item total discount amount. | +| unitDiscountAmountFullAggregation | Integer | Sum total discount amount with additions. | +| sumDiscountAmountFullAggregation | Integer | Item total discount amount with additions. | +| unitPriceToPayAggregation | Integer | Item total price to pay after discounts with additions. | +| sumPriceToPayAggregation | Integer | Sum of the prices to pay (after discounts).| +| salesUnit |Object | List of attributes defining the sales unit to be used for item amount calculation. | +| salesUnit.id | Integer | Numeric value that defines the sales units to calculate the item amount in. | +| salesUnit.amount | Integer | Amount of product in the defined sales units. | +| selectedProductOptions | array | List of attributes describing the product options that were added to cart with the product. | +| selectedProductOptions.optionGroupName | String | Name of the group to which the option belongs. | +| selectedProductOptions.sku | String | SKU of the product option. | +| selectedProductOptions.optionName | String | Product option name. | +| selectedProductOptions.price | Integer | Product option price in cents. | +| selectedProductOptions.currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-options | optionGroupName | String | Name of the group to which the option belongs. | +| product-options | sku | String | SKU of the product option. | +| product-options | optionName | String | Product option name. | +| product-options | price | Integer | Product option price in cents. | +| product-options | currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | +| vouchers, cart-rules | displayName | String | Discount name displayed on the Storefront. | +| vouchers, cart-rules | amount | Integer | Amount of the provided discount. | +| vouchers, cart-rules | code | String | Discount code. | +| vouchers, cart-rules | discountType | String | Discount type. | +| vouchers, cart-rules | isExclusive | Boolean | Discount exclusivity. | +| vouchers, cart-rules | expirationDateTime | DateTimeUtc | Date and time on which the discount expires. | +| vouchers, cart-rules | discountPromotionAbstractSku | String | SKU of the products to which the discount applies. If the discount can be applied to any product, the value is `null`. | +| vouchers, cart-rules | discountPromotionQuantity | Integer | Specifies the amount of the product required to be able to apply the discount. If the minimum number is `0`, the value is `null`. | + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + +For the attributes of the included resources, see: +- [Retrieving measurement units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html) +- [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html) +- [Retrieve a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html) +- [Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html#product-offers-response-attributes) +- [Retrieving product offer prices](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + +## Change item quantity + +To change the number of items in a cart, send the request: + +*** +`PATCH` {% raw %}**/carts/*{{cart_uuid}}*/items/*{{item_group_key}}***{% endraw %} +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %} | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html) or [retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html#retrieve-a-registered-users-cart) to get it. | +| {% raw %}***{{item_group_key}}***{% endraw %} | Group key of the item. Usually, it's equal to the item's SKU. | + +### Request + + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + + +Request sample: change item quantity + +`PATCH http://mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054/items/177_25913296` + +```json +{ + "data": { + "type": "items", + "attributes": { + "quantity": 10 + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | String | ✓ | Specifies the new quantity of the items. | + +### Response + +
      +Response sample: change item quantity + +```json +{ + "data": [ + { + "type": "carts", + "id": "52493031-cccf-5ad2-9cc7-93d0f738303d", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "\"All in\" Conf Bundle", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 718, + "subtotal": 4500, + "grandTotal": 4500 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/52493031-cccf-5ad2-9cc7-93d0f738303d" + }, + "relationships": { + "items": { + "data": [ + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/items?include=items,concrete-products,cart-permission-groups" + }, + "included": [ + { + "type": "concrete-products", + "id": "cable-vga-1-2", + "attributes": { + "sku": "cable-vga-1-2", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "VGA cable as long as you want", + "description": "Screw-in VGA cable with 15-pin male input and output.

      Supports resolutions at 800x600 (SVGA), 1024x768 (XGA), 1600x1200 (UXGA), 1080p (Full HD), 1920x1200 (WUXGA), and up for high resolution LCD and LED monitors.

      The VGA cord engineered with molded strain relief connectors for durability, grip treads for easy plugging and unplugging, and finger-tightened screws for a secure connection.

      Gold-plated connectors; 100% bare copper conductors.

      Links VGA-equipped computer to any display with 15-pin VGA port.", + "attributes": { + "packaging_unit": "As long as you want" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2" + } + }, + { + "type": "items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 239, + "sumTaxAmountFullAggregation": 718, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1500, + "sumPriceToPayAggregation": 4500 + }, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/52493031-cccf-5ad2-9cc7-93d0f738303d/items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "cable-vga-1-2" + } + ] + } + } + } + ] +} +``` + +

      + +For the attributes of the included resources, see [Glue API: Retrieving concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html). + +## Remove items from a registered user's cart + +To remove an item from a registered user's cart, send the request: + +*** +`DELETE` {% raw %}**/carts/*{{cart_uuid}}*/items/*{{item_group_key}}***{% endraw %} +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{cart_uuid}}***{% endraw %} | Unique identifier of a cart. [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html) or [retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html#retrieve-a-registered-users-cart) to get it. | +| {% raw %}***{{item_group_key}}***{% endraw %}| Group key of the item. Usually, it's equal to the item's SKU. | + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: Remove items from a registered user's cart + +`DELETE http://mysprykershop.com/carts/4741fc84-2b9b-59da-bb8d-f4afab5be054/items/177_25913296` + +### Response + +If the item is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to a cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart could not be deleted. | +| 106 | Cart item could not be deleted. | +| 107 | Failed to create a cart. | +| 109 | Anonymous customer unique id is empty. | +| 110 | Customer already has a cart. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item could not be added. | +| 114 | Cart item could not be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/guest-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/guest-carts.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/guest-carts.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/guest-carts.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md similarity index 99% rename from docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md index 14f8692eb3d..f43331ba522 100644 --- a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.md @@ -4,6 +4,7 @@ description: Retrieve details about guest cart items and learn what else you can template: glue-api-storefront-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/cart-and-checkout/202512.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.html - /docs/marketplace/dev/glue-api-guides/202204.0/guest-carts/managing-guest-cart-items.html related: - title: Managing guest carts diff --git a/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.md new file mode 100644 index 00000000000..a5a2519ea56 --- /dev/null +++ b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.md @@ -0,0 +1,2155 @@ +--- +title: Managing guest carts +description: Retrieve details about guest carts and learn what else you can do with the resource in the Spryker Marketplace +template: glue-api-storefront-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/dev/glue-api-guides/201811.0/guest-carts/managing-guest-carts.html + - /docs/marketplace/dev/glue-api-guides/201903.0/guest-carts/managing-guest-carts.html + - /docs/marketplace/dev/glue-api-guides/201907.0/guest-carts/managing-guest-carts.html + - /docs/marketplace/dev/glue-api-guides/202005.0/guest-carts/managing-guest-carts.html + - /docs/marketplace/dev/glue-api-guides/202311.0/guest-carts/managing-guest-carts.html +related: + - title: Manage guest cart items + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.html +--- + +This endpoint lets you manage guest carts. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) +- [Install the Marketplace Poruduct Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) + +## Create a guest cart + +To create a guest cart as an unauthenticated user, [add items to a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html#add-items-to-a-guest-cart). + +## Retrieve a guest cart + +To retrieve a guest cart, send the request: + +--- +`GET` **/guest-carts** + +--- + +{% info_block infoBox "Guest cart ID" %} + +Guest users have one guest cart by default. If you already have a guest cart, you can optionally specify its ID when adding items. To do that, use the following endpoint. The information in this section is valid for both of the endpoints. + +`GET` {% raw %}**/guest-carts/*{{guestCartId}}***{% endraw %} + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{guestCartId}}***{% endraw %} | Unique identifier of the guest cart. To get it, [retrieve a guest cart](#retrieve-a-guest-cart). | + +{% endinfo_block %} + +{% info_block infoBox "Note" %} + +When retrieving the cart with `guestCartId`, the response includes a single object, and when retrieving the resource without specifying it, you get an array containing a single object. + +{% endinfo_block %} + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | Guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value.| + +| PATH PARAMETER | DESCRIPTION | POSSIBLE ERRORS | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
      • guest-cart-items
      • cart-rules
      • promotional-items
      • gift-cards
      • vouchers
      • product-options
      • sales-units
      • product-measurement-units
      • product-labels
      • product-offers
      • product-offer-availabilities
      • product-offer-prices
      • merchants
      | + +{% info_block infoBox "Included resources" %} + +- To retrieve product options, include `guest-cart-items`, `concrete-products`, and `product-options`. +- To retrieve product measurement units, include `sales-units` and `product-measurement-units`. +- To retrieve product labels assigned to the products in a cart, include `concrete-products` and `product-labels`. +- To retrieve product offers, include `items` and `concrete-products`. +- To retrieve product offer availabilities, include `items`, `concrete-products`, and `product-offer-availabilities`. +- To retrieve product offer prices, include `items`, `concrete-products`, and `product-offer-prices`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/guest-carts` | Retrieve a guest cart. | +| `GET https://glue.mysprykershop.com/guest-carts?include=guest-cart-items` | Retrieve information about a guest cart with its items included. | +| `GET https://glue.mysprykershop.com/guest-carts?include=cart-rules` | Retrieve a guest cart with information about the cart rules. | +| `GET https://glue.mysprykershop.com/guest-carts?include=gift-cards,vouchers` | Retrieve a guest cart with information about the gift cards applied. | +| `GET https://glue.mysprykershop.com/guest-carts?include=guest-cart-items,concrete-products,product-options` | Retrieve a guest cart with information about its items, respective concrete products, and product options included. | +| `GET https://glue.mysprykershop.com/guest-carts?include=sales-units,product-measurement-units` | Retrieve a guest cart with information about its items, sales units, and product measurement units. | +| `GET https://glue.mysprykershop.com/guest-carts?include=vouchers` | Retrieve a guest cart with information about vouchers. | +| `GET https://glue.mysprykershop.com/guest-carts?include=concrete-products,product-labels` | Retrieve a guest cart with information about concrete products and the product labels assigned. | +| `GET https://glue.mysprykershop.com/guest-carts?include=promotional-items,abstract-products,concrete-product`| Retrieve detailed information on the promotional items for the guest cart. | +| `GET https://glue.mysprykershop.com/guest-carts?include=items,concrete-products,product-offers` | Retrieve a guest cart with information about product offers included. | +| `GET https://glue.mysprykershop.com/guest-carts?include=items,concrete-products,product-offers,product-offer-availabilities` | Retrieve a guest cart with product offer availabilities information included. | +| `GET https://glue.mysprykershop.com/guest-carts?include=items,concrete-products,product-offers,product-offer-prices` | Retrieve a guest cart with product offer prices information included. | +| `GET https://glue.mysprykershop.com/guest-carts/f0d01709-4dea-5ac3-8ceb-873875446ab0?include=guest-cart-items,merchants` | Retrieve a guest cart with items and information about merchants included. | + + +### Response + +
      +Response sample: retrieve a guest cart + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 93203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes" + } +} +``` + +
      + + +
      +Response sample: retrieve information about a guest cart with its items included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 96203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "guest-cart-items": { + "data": [ + { + "type": "guest-cart-items", + "id": "023_21758366" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=guest-cart-items" + }, + "included": [ + { + "type": "guest-cart-items", + "id": "023_21758366", + "attributes": { + "sku": "023_21758366", + "quantity": "4", + "groupKey": "023_21758366", + "abstractSku": "023", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 26723, + "sumPrice": 106892, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 26723, + "sumGrossPrice": 106892, + "unitTaxAmountFullAggregation": 3840, + "sumTaxAmountFullAggregation": 15360, + "sumSubtotalAggregation": 106892, + "unitSubtotalAggregation": 26723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 2672, + "sumDiscountAmountAggregation": 10689, + "unitDiscountAmountFullAggregation": 2672, + "sumDiscountAmountFullAggregation": 10689, + "unitPriceToPayAggregation": 24051, + "sumPriceToPayAggregation": 96203 + }, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7/guest-cart-items/023_21758366" + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with information about the cart rules + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 96203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=cart-rules" + }, + "included": [ + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 10689, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + + + +
      +Response sample: retrieve a guest cart with information about the gift cards applied + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "f8782b6c-848d-595e-b3f7-57374f1ff6d7", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 10689, + "taxTotal": 15360, + "subtotal": 106892, + "grandTotal": 96203, + "priceToPay": 93203 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 10689, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7" + }, + "relationships": { + "gift-cards": { + "data": [ + { + "type": "gift-cards", + "id": "GC-Z9FYJRK3-20" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/cart-codes?include=gift-cards" + }, + "included": [ + { + "type": "gift-cards", + "id": "GC-Z9FYJRK3-20", + "attributes": { + "code": "GC-Z9FYJRK3-20", + "name": "Gift Card 30", + "value": 3000, + "currencyIsoCode": "EUR", + "actualValue": 3000, + "isActive": true + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f8782b6c-848d-595e-b3f7-57374f1ff6d7/cart-codes/GC-Z9FYJRK3-20" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with information about its items, respective concrete products, and product options included + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "7e42298e-9f15-5105-a192-96726a2b9da8", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13301, + "taxTotal": 20711, + "subtotal": 143012, + "grandTotal": 129711, + "priceToPay": 129711 + }, + "discounts": [ + { + "displayName": "10% Discount for all orders above", + "amount": 13301, + "code": null + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8" + }, + "relationships": { + "guest-cart-items": { + "data": [ + { + "type": "guest-cart-items", + "id": "181_31995510-3-5" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com.com/guest-cart-items?include=guest-cart-items,concrete-products,product-options" + }, + "included": [ + { + "type": "product-options", + "id": "OP_1_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_1_year_waranty", + "optionName": "One (1) year limited warranty", + "price": 0, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_1_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_2_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_2_year_waranty", + "optionName": "Two (2) year limited warranty", + "price": 1000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_2_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_3_year_waranty", + "attributes": { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 2000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_3_year_waranty" + } + }, + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510/product-options/OP_gift_wrapping" + } + }, + { + "type": "concrete-products", + "id": "181_31995510", + "attributes": { + "sku": "181_31995510", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "181", + "name": "Samsung Galaxy Tab S2 SM-T813", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper—create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "internal_memory": "3 GB", + "processor_model": "APQ8076", + "digital_zoom": "4 x", + "storage_media": "flash", + "brand": "Samsung", + "color": "Pink" + }, + "superAttributesDefinition": [ + "internal_memory", + "storage_media", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T813", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "internal_memory": "Max internal memory", + "processor_model": "Processor model", + "digital_zoom": "Digital zoom", + "storage_media": "Storage media", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com.com/concrete-products/181_31995510" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_1_year_waranty" + }, + { + "type": "product-options", + "id": "OP_2_year_waranty" + }, + { + "type": "product-options", + "id": "OP_3_year_waranty" + }, + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "181_31995510-3-5", + "attributes": { + "sku": "181_31995510", + "quantity": "4", + "groupKey": "181_31995510-3-5", + "abstractSku": "181", + "amount": null, + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 33253, + "sumPrice": 133012, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 33253, + "sumGrossPrice": 133012, + "unitTaxAmountFullAggregation": 5177, + "sumTaxAmountFullAggregation": 20711, + "sumSubtotalAggregation": 143012, + "unitSubtotalAggregation": 35753, + "unitProductOptionPriceAggregation": 2500, + "sumProductOptionPriceAggregation": 10000, + "unitDiscountAmountAggregation": 3325, + "sumDiscountAmountAggregation": 13301, + "unitDiscountAmountFullAggregation": 3325, + "sumDiscountAmountFullAggregation": 13301, + "unitPriceToPayAggregation": 32428, + "sumPriceToPayAggregation": 129711 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "selectedProductOptions": [ + { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 2000 + }, + { + "optionGroupName": "Warranty", + "sku": "OP_3_year_waranty", + "optionName": "Three (3) year limited warranty", + "price": 8000 + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com.com/guest-carts/7e42298e-9f15-5105-a192-96726a2b9da8/guest-cart-items/181_31995510-3-5" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "181_31995510" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with information about its items, sales units, and product measurement units + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 718, + "subtotal": 4500, + "grandTotal": 4500, + "priceToPay": 4500 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/guest-cart-items?include=sales-units,product-measurement-units" + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "33", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-2/sales-units/33" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "attributes": { + "sku": "cable-vga-1-2", + "quantity": 3, + "groupKey": "cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33", + "abstractSku": "cable-vga-1", + "amount": "4.5", + "productOfferReference": null, + "merchantReference": null, + "calculations": { + "unitPrice": 1500, + "sumPrice": 4500, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 1500, + "sumGrossPrice": 4500, + "unitTaxAmountFullAggregation": 239, + "sumTaxAmountFullAggregation": 718, + "sumSubtotalAggregation": 4500, + "unitSubtotalAggregation": 1500, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 1500, + "sumPriceToPayAggregation": 4500 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": { + "id": 33, + "amount": "4.5" + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/5cc8c1ad-a12a-5a93-9c6e-fd4bc546c81c/guest-cart-items/cable-vga-1-2_quantity_sales_unit_id_33_amount_1.5_sales_unit_id_33" + }, + "relationships": { + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "33" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve a guest cart with information about vouchers + +```json +{ + "data": { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": {...}, + "links": {...}, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "mydiscount-yu8je" + } + ] + }, + "cart-rules": { + "data": [ + { + "type": "cart-rules", + "id": "1" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "mydiscount-yu8je", + "attributes": { + "amount": 49898, + "code": "mydiscount-yu8je", + "discountType": "voucher", + "displayName": "My Discount", + "isExclusive": false, + "expirationDateTime": "2020-02-29 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/vouchers/mydiscount-yu8je" + } + }, + { + "type": "cart-rules", + "id": "1", + "attributes": { + "amount": 19959, + "code": null, + "discountType": "cart_rule", + "displayName": "10% Discount for all orders above", + "isExclusive": false, + "expirationDateTime": "2020-12-31 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/cart-rules/1" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with information about concrete products and the product labels assigned + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "4f3e67f7-f18c-55ad-8297-2e09b80cf3ff", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 6244, + "subtotal": 39107, + "grandTotal": 39107, + "priceToPay": 39107 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/4f3e67f7-f18c-55ad-8297-2e09b80cf3ff" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/guest-cart-items?include=concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "179_29658416", + "attributes": { + "sku": "179_29658416", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab S2 SM-T715", + "description": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos, videos and work-related files with you wherever you need to go. The Galaxy Tab S2's 4:3 ratio display is optimised for magazine reading and web use. Switch to Reading Mode to adjust screen brightness and change wallpaper—create an ideal eBook reading environment designed to reduce the strain on your eyes. Get greater security with convenient and accurate fingerprint functionality. Activate fingerprint lock by pressing the home button. Use fingerprint verification to restrict / allow access to your web browser, screen lock mode and your Samsung account.", + "attributes": { + "storage_media": "flash", + "touch_technology": "Multi-touch", + "max_memory_card_size": "128 GB", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "storage_media", + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy Tab S2 SM-T715", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Enjoy greater flexibility ...than ever before with the Galaxy Tab S2. Remarkably slim and ultra-lightweight, use this device to take your e-books, photos,", + "attributeNames": { + "storage_media": "Storage media", + "touch_technology": "Touch Technology", + "max_memory_card_size": "Max memory card size", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/179_29658416" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "179_29658416", + "attributes": { + "sku": "179_29658416", + "quantity": 1, + "groupKey": "179_29658416", + "abstractSku": "179", + "amount": null, + "calculations": { + "unitPrice": 39107, + "sumPrice": 39107, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 39107, + "sumGrossPrice": 39107, + "unitTaxAmountFullAggregation": 6244, + "sumTaxAmountFullAggregation": 6244, + "sumSubtotalAggregation": 39107, + "unitSubtotalAggregation": 39107, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 39107, + "sumPriceToPayAggregation": 39107 + }, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/4f3e67f7-f18c-55ad-8297-2e09b80cf3ff/guest-cart-items/179_29658416" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "179_29658416" + } + ] + } + } + } + ] +} +``` + +
      + + +
      +Response sample: retrieve detailed information on the promotional items for the guest cart + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": {...}, + "links": {...}, + "relationships": { + "promotional-items": { + "data": [ + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + } + ] + } + } + }, + { + "type": "guest-carts", + "id": "1f1662c4-01e1-50d1-877d-95534d1b1833", + "attributes": {...}, + "links": {...} + } + ], + "links": {...}, + "included": [ + { + "type": "concrete-products", + "id": "112_312526171", + "attributes": {...} + }, + "links": {...} + }, + { + "type": "concrete-products", + "id": "112_306918001", + "attributes": {...}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_312526191", + "attributes": {...}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_312526172", + "attributes": {....}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_306918002", + "attributes": {...}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_312526192", + "attributes": {...}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_306918003", + "attributes": {...}, + "links": {...}, + { + "type": "concrete-products", + "id": "112_312526193", + "attributes": {...}, + "links": {...}, + { + "type": "abstract-products", + "id": "112", + "attributes": {...}, + "links": {...}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "112_312526171" + }, + { + "type": "concrete-products", + "id": "112_306918001" + }, + { + "type": "concrete-products", + "id": "112_312526191" + }, + { + "type": "concrete-products", + "id": "112_312526172" + }, + { + "type": "concrete-products", + "id": "112_306918002" + }, + { + "type": "concrete-products", + "id": "112_312526192" + }, + { + "type": "concrete-products", + "id": "112_306918003" + }, + { + "type": "concrete-products", + "id": "112_312526193" + } + ] + } + } + }, + { + "type": "promotional-items", + "id": "bfc600e1-5bf1-50eb-a9f5-a37deb796f8a", + "attributes": { + "sku": "112", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/promotional-items/bfc600e1-5bf1-50eb-a9f5-a37deb796f8a" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "112" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with information about product offers included + +```json +{ + "data": { + "type": "guest-carts", + "id": "6851dc6a-ebed-52ed-b229-81a35fe94c49", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 35273, + "subtotal": 220920, + "grandTotal": 220920, + "priceToPay": 220920 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49" + } + }, + "included": [ + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "041_25904691_offer48", + "attributes": { + "sku": "041_25904691", + "quantity": 21, + "groupKey": "041_25904691_offer48", + "abstractSku": "041", + "amount": null, + "productOfferReference": "offer48", + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 10520, + "sumPrice": 220920, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10520, + "sumGrossPrice": 220920, + "unitTaxAmountFullAggregation": 1680, + "sumTaxAmountFullAggregation": 35273, + "sumSubtotalAggregation": 220920, + "unitSubtotalAggregation": 10520, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10520, + "sumPriceToPayAggregation": 220920 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49/guest-cart-items/041_25904691_offer48" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: Retrieve a guest cart with product offer availabilities information included + +```json +{ + "data": { + "type": "guest-carts", + "id": "6851dc6a-ebed-52ed-b229-81a35fe94c49", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 35273, + "subtotal": 220920, + "grandTotal": 220920, + "priceToPay": 220920 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49" + } + }, + "included": [ + { + "type": "product-offer-availabilities", + "id": "offer89", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer89" + } + ] + } + } + }, + { + "type": "product-offer-availabilities", + "id": "offer48", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "041_25904691_offer48", + "attributes": { + "sku": "041_25904691", + "quantity": 21, + "groupKey": "041_25904691_offer48", + "abstractSku": "041", + "amount": null, + "productOfferReference": "offer48", + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 10520, + "sumPrice": 220920, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10520, + "sumGrossPrice": 220920, + "unitTaxAmountFullAggregation": 1680, + "sumTaxAmountFullAggregation": 35273, + "sumSubtotalAggregation": 220920, + "unitSubtotalAggregation": 10520, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10520, + "sumPriceToPayAggregation": 220920 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49/guest-cart-items/041_25904691_offer48" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with product offer prices information included + +```json +{ + "data": { + "type": "guest-carts", + "id": "6851dc6a-ebed-52ed-b229-81a35fe94c49", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 35273, + "subtotal": 220920, + "grandTotal": 220920, + "priceToPay": 220920 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49" + } + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer89", + "attributes": { + "price": 9342, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9342, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 10065, + "netAmount": 10050, + "quantity": 2 + }, + { + "grossAmount": 10058, + "netAmount": 10045, + "quantity": 7 + }, + { + "grossAmount": 10052, + "netAmount": 10040, + "quantity": 18 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer89", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer89" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer89" + } + ] + } + } + }, + { + "type": "product-offer-prices", + "id": "offer48", + "attributes": { + "price": 9861, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9861, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 10650, + "netAmount": 10500, + "quantity": 3 + }, + { + "grossAmount": 10580, + "netAmount": 10450, + "quantity": 9 + }, + { + "grossAmount": 10520, + "netAmount": 10400, + "quantity": 17 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer48", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer48" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer48" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "041_25904691", + "attributes": { + "sku": "041_25904691", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "041", + "name": "Canon PowerShot SX610", + "description": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before each shot then compiles them all into a single video. With built in NFC and Wi-Fi its so easy to share your happy snaps to your favourite social media platforms. Expand your creative photography skills through applying a range of artistic presets such as toy camera or fish eye effect. Capture images remotely and view live images from the camera via your phone and the Camera Connect app. Bring your memories to life as you experience videos on Full HD quality in 30p/MP4 recording.", + "attributes": { + "hd_type": "Full HD", + "megapixel": "20.2 MP", + "optical_zoom": "18 x", + "display": "LCD", + "brand": "Canon", + "color": "White" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot SX610", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Optical Quality Capture quality images from a distance with a 20.2 MP, 25mm wide, 18x optical zoom lens. Hybrid Auto mode records 4 seconds of video before", + "attributeNames": { + "hd_type": "HD type", + "megapixel": "Megapixel", + "optical_zoom": "Optical zoom", + "display": "Display", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/041_25904691" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer89" + }, + { + "type": "product-offers", + "id": "offer48" + } + ] + } + } + }, + { + "type": "guest-cart-items", + "id": "041_25904691_offer48", + "attributes": { + "sku": "041_25904691", + "quantity": 21, + "groupKey": "041_25904691_offer48", + "abstractSku": "041", + "amount": null, + "productOfferReference": "offer48", + "merchantReference": "MER000002", + "calculations": { + "unitPrice": 10520, + "sumPrice": 220920, + "taxRate": 19, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 10520, + "sumGrossPrice": 220920, + "unitTaxAmountFullAggregation": 1680, + "sumTaxAmountFullAggregation": 35273, + "sumSubtotalAggregation": 220920, + "unitSubtotalAggregation": 10520, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 10520, + "sumPriceToPayAggregation": 220920 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "productConfigurationInstance": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/6851dc6a-ebed-52ed-b229-81a35fe94c49/guest-cart-items/041_25904691_offer48" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "041_25904691" + } + ] + } + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve a guest cart with items and information about merchants included + +```json +{ + "data": { + "type": "guest-carts", + "id": "f0d01709-4dea-5ac3-8ceb-873875446ab0", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 0, + "taxTotal": 822, + "subtotal": 12572, + "grandTotal": 12572, + "priceToPay": 12572 + }, + "discounts": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f0d01709-4dea-5ac3-8ceb-873875446ab0" + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "latitude": "13.384458", + "longitude": "52.534105", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

      General Terms

      (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

      (2) We do not collect information from visitors of our site or other details to help you with your experience.

      Using your Information

      We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

      To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

      Protecting visitor information

      Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

      ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

      Spryker Systems GmbH

      Julie-Wolfthorn-Straße 1
      10115 Berlin
      DE

      Phone: +49 (30) 2084983 50
      Email: info@spryker.com

      Represented by
      Managing Directors: Alexander Graf, Boris Lokschin
      Register Court: Hamburg
      Register Number: HRB 134310

      ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "guest-cart-items", + "id": "109_19416433", + "attributes": { + "sku": "109_19416433", + "quantity": "1", + "groupKey": "109_19416433", + "abstractSku": "109", + "amount": null, + "productOfferReference": null, + "merchantReference": "MER000001", + "calculations": { + "unitPrice": 12572, + "sumPrice": 12572, + "taxRate": 7, + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitGrossPrice": 12572, + "sumGrossPrice": 12572, + "unitTaxAmountFullAggregation": 822, + "sumTaxAmountFullAggregation": 822, + "sumSubtotalAggregation": 12572, + "unitSubtotalAggregation": 12572, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 12572, + "sumPriceToPayAggregation": 12572 + }, + "configuredBundle": null, + "configuredBundleItem": null, + "salesUnit": null, + "selectedProductOptions": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/f0d01709-4dea-5ac3-8ceb-873875446ab0/guest-cart-items/109_19416433" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
      + + + +**General cart information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| priceMode | String | Price mode that was active when the cart was created. | +| currency | String | Currency that was selected when the cart was created. | +| store | String | Store for which the cart was created. | +| name | String | Name of the shopping cart. | +| isDefault | Boolean | Defines whether the cart is default or not. | + +**Totals information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| expenseTotal | String | Total amount of expenses (including, for example, shipping costs). | +| discountTotal | Integer | Total amount of discounts applied to the cart. | +| taxTotal | Integer | Total amount of taxes to be paid. | +| subTotal | Integer | Subtotal of the cart. | +| grandTotal | Integer | Grand total of the cart. | + +**Discount information** + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| displayName | String | Discount name. | +| code | String | Discount code applied to the cart. | +| amount | Integer | Discount amount applied to the cart. | + +**Included resource attributes** + +| INCLUDED RESOURCE | ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| product-options | optionGroupName | String | Name of the group to which the option belongs. | +| product-options | sku | String | SKU of the product option. | +| product-options | optionName | String | Product option name. | +| product-options | price | Integer | Product option price in cents. | +| product-options | currencyIsoCode | String | ISO 4217 code of the currency in which the product option price is specified. | +| vouchers, cart-rules | displayName | String | Discount name displayed on the Storefront. | +| vouchers, cart-rules | amount | Integer | Amount of the provided discount. | +| vouchers, cart-rules | code | String | Discount code. | +| vouchers, cart-rules | discountType | String | Discount type. | +| vouchers, cart-rules | isExclusive | Boolean | Discount exclusivity. | +| vouchers, cart-rules | expirationDateTime | DateTimeUtc | Date and time on which the discount expires. | +| vouchers, cart-rules | discountPromotionAbstractSku | String | SKU of the products to which the discount applies. If the discount can be applied to any product, the value is `null`. | +| vouchers, cart-rules | discountPromotionQuantity | Integer | Specifies the amount of the product required to be able to apply the discount. If the minimum number is `0`, the value is `null`. | +| promotional-items | id | String | Unique identifier of the promotional item. The ID can be used to apply the promotion to the given purchase. | +| promotional-items | quantity | Integer | Specifies how many promotions can be applied to the given purchase. | +| promotional-items | sku | String | SKU of the promoted abstract product. | +| product-offers | merchantSku | String | SKU of the Merchant the product offer belongs to. | +| product-offers| merchantReference | String | Merchant Reference assigned to every Merchant. | +| product-offers | isDefault | Boolean | Defines whether the Product Offer is default or not. | + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + + +For the attributes of other included resources, see: +- [Manage guest cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.html) +- [Retrieve measurement units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html) +- [Retrieve concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html) +- [Retrieve gift cards of guest users](/docs/pbc/all/gift-cards/{{page.version}}/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.html) +- [Retrieve product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) +- [Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html#product-offers-response-attributes) +- [Retrieving product offers](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) + +## Assign a guest cart to a registered customer + +Guest carts are anonymous as they are not related to any user. If a user registers or logs in, the guest cart can be automatically assigned to their account. + +To assign a guest cart to a customer, that is, merge the carts, include the unique identifier associated with the customer in the `X-Anonymous-Customer-Unique-Id` header of the authentication request if it's an existing customer, or request to create a customer account if it's a new one. Adjust the configuration constant to create a cart for the newly authenticated customer while merging the guest cart with the customer cart: + +**src/Pyz/Zed/CartsRestApi/CartsRestApiConfig.php** + +```php + + + +The following is an exemplary workflow of converting a guest cart into a regular cart: + +1. The customer adds items to a guest cart. + +Request sample: + +`POST https://glue.myspsrykershop.com/guest-cart-items` + +```json +{ + "data": { + "type": "guest-cart-items", + "attributes": { + "sku": "022_21994751", + "quantity": 5 + } + } +} +``` + + +| HEADER KEY | HEADER VALUE | DESCRIPTION | +| --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | guest-user-001 | Guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value.. | + +Response sample: + +```json +{ + "data": { + "type": "guest-carts", + "id": "9183f604-9b2c-53d9-acbf-cf59b9b2ff9f", + "attributes": {...}, + "links": {...} + }, + "included": [...] +} +``` + +1. The customer logs in. + +Request sample: `POST https://glue.myspsrykershop.com/access-tokens` + +```json +{ + "data": { + "type": "access-tokens", + "attributes": { + "username": "john.doe@example.com", + "password": "qwerty" + } + } +} +``` + +| HEADER KEY | HEADER VALUE | DESCRIPTION | +| --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | guest-user-001 | Guest user's unique identifier. For security purposes, we recommend passing a hyphenated alphanumeric value, but you can pass any. If you are sending automated requests, you can configure your API client to generate this value. | + +Response sample: + +```json +{ + "data": { + "type": "access-tokens", + "id": null, + "attributes": { + "tokenType": "Bearer", + "expiresIn": 28800, + "accessToken": "eyJ0eXAiOiJKV1QiLC...", + "refreshToken": "def50200ae2d0...", + "idCompanyUser": "94d58692-c117-5466-8b9f-2ba32dd87c43" + }, + "links": {...} + } +} +``` + +3. The customer requests a list of his own carts. + +Request sample: + +`GET https://glue.myspsrykershop.com/carts` + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authenticates the customer you want to change the password of. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +In the *multi-cart* environment, the guest cart has been converted to a regular cart. You can see it in the list of carts with the ID `9183f604-9b2c-53d9-acbf-cf59b9b2ff9f`. + +Response sample: + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": {...}, + "links": {...} + }, + { + "type": "carts", + "id": "9183f604-9b2c-53d9-acbf-cf59b9b2ff9f", + "attributes": {...}, + "links": {...} + } + ], + "links": {...} +} +``` + +In a *single cart* environment, items from the guest cart have been added to the user's own cart. + +**Response body** + +```json +{ + "data": [ + { + "type": "guest-carts", + "id": "1ce91011-8d60-59ef-9fe0-4493ef3628b2", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "isDefault": true, + "totals": { + "expenseTotal": 0, + "discountTotal": 13000, + "taxTotal": 18681, + "subtotal": 130000, + "grandTotal": 117000 + }, + "discounts": [...] + }, + "links": {...} + }, +``` + +## Possible errors + + +| CODE | REASON | +| --- | --- | +| 101 | Cart with given uuid not found. | +| 102 | Failed to add an item to cart. | +| 103 | Item with the given group key not found in the cart. | +| 104 | Cart uuid is missing. | +| 105 | Cart could not be deleted. | +| 106 | Cart item could not be deleted. | +| 107 | Failed to create a cart. | +| 109 | Anonymous customer unique ID is empty. | +| 111 | Can't switch price mode when there are items in the cart. | +| 112 | Store data is invalid. | +| 113 | Cart item could not be added. | +| 114 | Cart item could not be updated. | +| 115 | Unauthorized cart action. | +| 116 | Currency is missing. | +| 117 | Currency is incorrect. | +| 118 | Price mode is missing. | +| 119 | Price mode is incorrect. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/marketplace-cart-feature-module-relations.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/marketplace-cart-feature-module-relations.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/marketplace/marketplace-cart-feature-module-relations.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/marketplace-cart-feature-module-relations.md diff --git a/docs/pbc/all/cart-and-checkout/202512.0/marketplace/marketplace-cart-feature-overview.md b/docs/pbc/all/cart-and-checkout/202602.0/marketplace/marketplace-cart-feature-overview.md similarity index 100% rename from docs/pbc/all/cart-and-checkout/202512.0/marketplace/marketplace-cart-feature-overview.md rename to docs/pbc/all/cart-and-checkout/202602.0/marketplace/marketplace-cart-feature-overview.md diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md b/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md deleted file mode 100644 index d5c0fbd8ad0..00000000000 --- a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the CMS + Catalog feature -description: The CMS Page Search Catalog feature allows viewing search results for subcategory pages. The guide describes how to enable the feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-in-search-results-integration -originalArticleId: 517fc527-ef1f-4d52-91b8-23976ed8d283 -redirect_from: - - /2021080/docs/cms-pages-in-search-results-integration - - /2021080/docs/en/cms-pages-in-search-results-integration - - /docs/cms-pages-in-search-results-integration - - /docs/en/cms-pages-in-search-results-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cms-catalog-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-catalog-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cms-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md b/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md deleted file mode 100644 index 5a985c18800..00000000000 --- a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install the Content Items Glue API -description: The guide walks you through the process of installing and configuring the Content Items feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-content-items-api-feature-integration -originalArticleId: 87cf9b21-06f9-4766-8645-bc62c4d64296 -redirect_from: - - /2021080/docs/glue-api-content-items-api-feature-integration - - /2021080/docs/en/glue-api-content-items-api-feature-integration - - /docs/glue-api-content-items-api-feature-integration - - /docs/en/glue-api-content-items-api-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-content-items-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-content-items-feature-integration.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.html -related: - - title: Install the Content Items feature - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html - - title: "Glue API: Retrieve abstract product list content items" - link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.html - - title: "Glue API: Retrieve banner content items" - link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-content-items-glue-api.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md deleted file mode 100644 index 1fe37d7ad9c..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the CMS + Catalog feature -description: The CMS Page Search Catalog feature allows viewing search results for subcategory pages. The guide describes how to enable the feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-in-search-results-integration -originalArticleId: 517fc527-ef1f-4d52-91b8-23976ed8d283 -redirect_from: - - /2021080/docs/cms-pages-in-search-results-integration - - /2021080/docs/en/cms-pages-in-search-results-integration - - /docs/cms-pages-in-search-results-integration - - /docs/en/cms-pages-in-search-results-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cms-catalog-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-catalog-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cms-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md deleted file mode 100644 index 7851278107c..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the CMS feature + Dynamic Multistore -description: Learn how to install the CMS feature + Dynamic Multistore in to your Spryker Projects. -last_updated: Apr 25, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cms-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md deleted file mode 100644 index 1b71069a1fb..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the CMS feature -description: The guide describes how to integrate the Spryker Cloud Commerce OS CMS feature into your Spryker project. -last_updated: Nov 22, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-feature-integration-guide -originalArticleId: ead31fac-6aa6-47f5-9d81-ff891219cf53 -redirect_from: - - /2021080/docs/cms-feature-integration-guide - - /2021080/docs/en/cms-feature-integration-guide - - /docs/cms-feature-integration-guide - - /docs/en/cms-feature-integration-guide - - /docs/scos/dev/feature-integration-guides/201811.0/cms-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/cms-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html - -related: - - title: Install the CMS Glue API - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cms-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md deleted file mode 100644 index 9497e3b9f98..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install the CMS + Product Lists + Catalog feature -description: Learn how to install the CMS + Product lists + Catalog feature in to your Spryker projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-page-search-product-lists-catalog-feature-integration -originalArticleId: c395ad85-27ce-44f2-a18f-69fce0d46ba6 -redirect_from: - - /2021080/docs/cms-page-search-product-lists-catalog-feature-integration - - /2021080/docs/en/cms-page-search-product-lists-catalog-feature-integration - - /docs/cms-page-search-product-lists-catalog-feature-integration - - /docs/en/cms-page-search-product-lists-catalog-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/cms-product-lists-catalog-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/cms-product-lists-catalog-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.html - -related: - - title: CMS pages in search results - link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.html - - title: CMS page - link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-pages-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cms-product-lists-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md deleted file mode 100644 index 8f413e1000a..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Content Items feature -description: The guide walks you through the process of installing the Content Items feature in the project. -last_updated: Jul 14, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/content-items-feature-integration -originalArticleId: d3a7785f-f4f7-4d9e-8b8c-b44ae4dd278a -redirect_from: - - /2021080/docs/content-items-feature-integration - - /2021080/docs/en/content-items-feature-integration - - /docs/content-items-feature-integration - - /docs/en/content-items-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/content-items-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/content-items-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-content-items-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html - -related: - - title: Install the Content Items Glue API - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-content-items-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md deleted file mode 100644 index ac0736da113..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the File Manager feature -description: Learn how to install the File Manager feature, which lets you upload and manage your assets effectively. -last_updated: Aug 22, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-file-manager-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md deleted file mode 100644 index afe5f1b9468..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Install the Navigation feature -description: This guide provides step-by-step instructions on integrating Navigation feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/navigation-feature-integration -originalArticleId: 08d33ccb-6cb3-42a0-b74d-db3302c1e32b -redirect_from: - - /2021080/docs/navigation-feature-integration - - /2021080/docs/en/navigation-feature-integration - - /docs/navigation-feature-integration - - /docs/en/navigation-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/navigation-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-navigation-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.html -related: - - title: Install the Navigation Glue API - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-navigation-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md deleted file mode 100644 index 5a985c18800..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install the Content Items Glue API -description: The guide walks you through the process of installing and configuring the Content Items feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-content-items-api-feature-integration -originalArticleId: 87cf9b21-06f9-4766-8645-bc62c4d64296 -redirect_from: - - /2021080/docs/glue-api-content-items-api-feature-integration - - /2021080/docs/en/glue-api-content-items-api-feature-integration - - /docs/glue-api-content-items-api-feature-integration - - /docs/en/glue-api-content-items-api-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-content-items-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-content-items-feature-integration.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.html -related: - - title: Install the Content Items feature - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html - - title: "Glue API: Retrieve abstract product list content items" - link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.html - - title: "Glue API: Retrieve banner content items" - link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-content-items-glue-api.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md deleted file mode 100644 index e87641f4429..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Navigation Glue API -description: This guide will walk you through the process of installing and configuring the Navigation API feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-navigation-feature-integration -originalArticleId: 5b6af295-1650-445f-a3ce-d40389bfc922 -redirect_from: - - /2021080/docs/glue-api-navigation-feature-integration - - /2021080/docs/en/glue-api-navigation-feature-integration - - /docs/glue-api-navigation-feature-integration - - /docs/en/glue-api-navigation-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-navigation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-navigation-feature-integration.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.html -related: - - title: Install the Navigation feature - link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.html - - title: "Glue API: Retrieve navigation trees" - link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-navigation-trees.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-navigation-glue-api.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-content-widget.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-content-widget.md deleted file mode 100644 index c6faa2b3885..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-content-widget.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the content widget -description: The guide walks you through the process of installing the Content Widget feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/enabling-cms-widget -originalArticleId: 5f509a40-2c08-4a64-9cbc-ec1a4354a4cd -redirect_from: - - /2021080/docs/enabling-cms-widget - - /2021080/docs/en/enabling-cms-widget - - /docs/enabling-cms-widget - - /docs/en/enabling-cms-widget/docs/scos/dev/feature-integration-guides/202200.0/enabling-the-content-widget.html - - /docs/scos/dev/feature-integration-guides/202311.0/enabling-the-content-widget.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-the-content-widget.html - ---- - -{% include pbc/all/install-features/{{page.version}}/enable-the-content-widget.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-navigation-module.md b/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-navigation-module.md deleted file mode 100644 index 16473f89bda..00000000000 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-the-navigation-module.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Navigation module -description: The guide walks you through the process of installing the Navigation Module into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/navigation-module-integration -originalArticleId: a97d3d16-ed3a-48d1-aaca-b96fcfe5ee38 -redirect_from: - - /2021080/docs/navigation-module-integration - - /2021080/docs/en/navigation-module-integration - - /docs/navigation-module-integration - - /docs/en/navigation-module-integration - - /docs/scos/dev/feature-integration-guides/202311.0/navigation-module-integration.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-the-navigation-module.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-navigation-module.md %} diff --git a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md b/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md deleted file mode 100644 index 1fe37d7ad9c..00000000000 --- a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the CMS + Catalog feature -description: The CMS Page Search Catalog feature allows viewing search results for subcategory pages. The guide describes how to enable the feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-in-search-results-integration -originalArticleId: 517fc527-ef1f-4d52-91b8-23976ed8d283 -redirect_from: - - /2021080/docs/cms-pages-in-search-results-integration - - /2021080/docs/en/cms-pages-in-search-results-integration - - /docs/cms-pages-in-search-results-integration - - /docs/en/cms-pages-in-search-results-integration - - /docs/scos/dev/feature-integration-guides/202311.0/cms-catalog-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-catalog-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-cms-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md b/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md deleted file mode 100644 index 13df53eda9d..00000000000 --- a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the CMS + Category Management feature -description: Learn how to install the CMS + Category Management feature in Spryker Cloud Commerce OS to your Spryker projects. -last_updated: Jun 23, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/cms-category-management-feature-integration -originalArticleId: 7fda2277-78fa-4351-8b4e-547cf6803fd6 -redirect_from: - - /2021080/docs/cms-category-management-feature-integration - - /2021080/docs/en/cms-category-management-feature-integration - - /docs/cms-category-management-feature-integration - - /docs/en/cms-category-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/cms-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/cms-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/cms-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/cms-category-management-feature-integration.htm - - /docs/scos/dev/feature-integration-guides/202311.0/cms-category-management-feature-integration.html - - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-category-management-feature.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html - ---- -{% include pbc/all/install-features/{{page.version}}/install-the-cms-category-management-feature.md %} diff --git a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md b/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md deleted file mode 100644 index 7851278107c..00000000000 --- a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the CMS feature + Dynamic Multistore -description: Learn how to install the CMS feature + Dynamic Multistore in to your Spryker Projects. -last_updated: Apr 25, 2023 -template: feature-integration-guide-template - ---- - -{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cms-feature.md %} diff --git a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-content-widget.md b/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-content-widget.md deleted file mode 100644 index c6faa2b3885..00000000000 --- a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-content-widget.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the content widget -description: The guide walks you through the process of installing the Content Widget feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/enabling-cms-widget -originalArticleId: 5f509a40-2c08-4a64-9cbc-ec1a4354a4cd -redirect_from: - - /2021080/docs/enabling-cms-widget - - /2021080/docs/en/enabling-cms-widget - - /docs/enabling-cms-widget - - /docs/en/enabling-cms-widget/docs/scos/dev/feature-integration-guides/202200.0/enabling-the-content-widget.html - - /docs/scos/dev/feature-integration-guides/202311.0/enabling-the-content-widget.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-the-content-widget.html - ---- - -{% include pbc/all/install-features/{{page.version}}/enable-the-content-widget.md %} diff --git a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-navigation-module.md b/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-navigation-module.md deleted file mode 100644 index 16473f89bda..00000000000 --- a/docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-the-navigation-module.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Navigation module -description: The guide walks you through the process of installing the Navigation Module into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/navigation-module-integration -originalArticleId: a97d3d16-ed3a-48d1-aaca-b96fcfe5ee38 -redirect_from: - - /2021080/docs/navigation-module-integration - - /2021080/docs/en/navigation-module-integration - - /docs/navigation-module-integration - - /docs/en/navigation-module-integration - - /docs/scos/dev/feature-integration-guides/202311.0/navigation-module-integration.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-the-navigation-module.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-navigation-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md b/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md deleted file mode 100644 index e8f277a491d..00000000000 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Migration guide - FileManager -description: Use the guide to update versions to the newer ones of the FileManager module. -last_updated: May 20, 2022 -template: module-migration-guide-template -redirect_from: -- /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html -- /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html ---- - -{% include pbc/all/upgrade-modules/upgrade-the-filemanager-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md b/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md deleted file mode 100644 index c98c6637469..00000000000 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Migration guide - FileManagerStorage -description: Use the guide to update versions to the newer ones of the FileManagerStorage module. -last_updated: May 20, 2022 -template: module-migration-guide-template -redirect_from: -- /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html -- /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html ---- - -{% include pbc/all/upgrade-modules/upgrade-the-filemanagerstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md b/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md deleted file mode 100644 index 6c3ab3117ce..00000000000 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Migration guide - FileManagerWidget -description: Use the guide to update versions to the newer ones of the FileManagerWidget module. -last_updated: May 20, 2022 -template: module-migration-guide-template -redirect_from: -- /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html -- /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html ---- - -{% include pbc/all/upgrade-modules/upgrade-the-filemanagerwidget-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-blocks-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-blocks-overview.md new file mode 100644 index 00000000000..fe9ef86d66c --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-blocks-overview.md @@ -0,0 +1,72 @@ +--- +title: CMS blocks overview +description: With the CMS Block feature, you can easily add promotional banners and define validity date ranges to emphasize specific, time-limited content. +last_updated: Jul 22, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-blocks-overview +originalArticleId: 2b07c846-32ed-42b7-bf71-9c9ecc4f54ba +redirect_from: + - /docs/scos/user/features/202108.0/cms-feature-overview/cms-blocks-overview.html + - /docs/scos/user/features/202200.0/cms-feature-overview/cms-blocks-overview.html + - /docs/scos/user/features/202311.0/cms-feature-overview/cms-blocks-overview.html + - /docs/pbc/all/content-management-system/202311.0/cms-feature-overview/cms-blocks-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/cms-feature-overview/cms-blocks-overview.html +--- + +A *CMS block* is a piece of reusable content that you can add to multiple CMS pages and templates. For example, with the help of a block, you can add banners to the top of a page or add SEO text to the bottom of a page. + +## CMS block template + +A *CMS block template* is a Twig file that, when applied to a block, defines its design, layout, and functionality. + +You can create templates to effectively create similar content. However, as far as CMS block is a multi-purpose entity, you can create templates that let you manage the content of different functionalities in your shop. For example, you can [manage emails using CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/email-as-a-cms-block-overview.html). + +The CMS feature is shipped with several block templates by default. A developer can create more templates. + +## CMS block validity period + +When creating a block, you can select validity dates. The dates define when the block starts and stops being displayed on the pages it's added to on the Storefront. For example, if you are planning to run a promotion campaign, you can create a banner beforehand and define when it starts and stops being displayed based on the promotion period. + + +## CMS block store relation + +If you have an international store, you can define which stores each block is displayed in. Block templates are handled separately from CMS content and local content, so you can build different blocks for different languages. + +Each placeholder in a block has locale-specific content (for as many locales as you have). + + +## Reusing CMS blocks + +If you add a CMS block to multiple pages and edit it, the content is updated on all the pages you've added it to. +This applies to the content and the configuration of blocks. For example, if you update a picture in a block, the new picture is displayed on all the pages the block is added to. Or, if you update the store relation, the block stops being displayed on the pages of the store the block is not configured to be displayed on. + + + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.html) | +| [Edit CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html) | + +## See next + +- [Templates and slots](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/templates-and-slots-overview.html) diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/cms-feature-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-feature-overview.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/cms-feature-overview.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-feature-overview.md index 43c5b8e85ae..43a59c89c17 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/cms-feature-overview.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/cms originalArticleId: 31b0fc46-5030-47e2-95fb-b002e42c8e7d redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/cms-feature-overview.html - /docs/scos/user/features/202108.0/cms-feature-overview/cms-feature-overview.html - /docs/scos/user/features/202200.0/cms-feature-overview/cms-feature-overview.html - /docs/scos/user/features/202311.0/cms-feature-overview/cms-feature-overview.html diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.md new file mode 100644 index 00000000000..d7453d46373 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.md @@ -0,0 +1,27 @@ +--- +title: CMS pages in search results overview +description: The CMS Pages in Search Results feature lets you search not only for products but for CMS pages content as well. +last_updated: Jul 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-in-search-results-overview +originalArticleId: 0509e00d-9839-4136-81dd-10ff197cda0d +redirect_from: + - /2021080/docs/cms-pages-in-search-results-overview + - /2021080/docs/en/cms-pages-in-search-results-overview + - /docs/cms-pages-in-search-results-overview + - /docs/en/cms-pages-in-search-results-overview + - /2021080/docs/searching-within-cms-pages + - /2021080/docs/en/searching-within-cms-pages + - /docs/searching-within-cms-pages + - /docs/en/searching-within-cms-pages + - /docs/scos/user/features/202311.0/cms-feature-overview/cms-pages-in-search-results-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.html +--- + +Most often, shop visitors search for products; however, they also might need other information, like terms and conditions, legal information, or contacts, which are contained on [CMS pages](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/cms-pages-overview.html). + +The *CMS pages in search results* functionality lets you search not only for products but for the content of CMS pages too. At the same time, the search results related to products and CMS pages do not intervene with each other. The search results page is split into two tabs: product pages and CMS pages. The latter tab displays CMS pages as a grid or as a list. + +![CMS pages in search results](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/CMS+Pages+in+Search+Results/cms-pages-in-search-results.png) + +Page sorting and pagination on the search results page help shop visitors find content easier. Breadcrumbs let a shop administrator structure the content to reduce the number of steps a customer takes to return to a previous page. diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-overview.md new file mode 100644 index 00000000000..00c4ab3927a --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/cms-pages-overview.md @@ -0,0 +1,68 @@ +--- +title: CMS Pages overview +description: An overview guide on the Spryker Cloud Commerce OS CMS pages functionality. +last_updated: Jul 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-overview +originalArticleId: 8b0f95c3-e1b8-42e9-8d5c-d05ea8a84e4d +redirect_from: + - /2021080/docs/cms-pages-overview + - /2021080/docs/en/cms-pages-overview + - /docs/cms-pages-overview + - /docs/en/cms-pages-overview + - /docs/scos/user/features/202200.0/cms-feature-overview/cms-pages-overview.html + - /docs/scos/user/features/202311.0/cms-feature-overview/cms-pages-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/cms-feature-overview/cms-pages-overview.html +--- + +A *CMS page* is an HTML page that you can create and edit in the Back Office using the WYSIWYG editor. The **About Us**, **Impressum**, **Terms**, **Contacts**, and **Conditions** pages are examples of CMS pages that you can create. + +Each CMS page has a unique URL. + +## CMS page template + +A *CMS page template* is a Twig file that, when applied to a block, defines its design and layout. + +You can create templates to effectively create similar content. The CMS feature is shipped with several page templates by default. A developer can create more templates. + +## CMS page validity period + +When creating a page, you can select validity dates. The dates define when the page starts and stops being displayed on the Storefront. For example, if you are planning to run a promotion campaign, you can create a banner beforehand and define when it starts and stops being displayed based on the promotion period. + + +## CMS page store relation + +If you have an international store, you can define which stores each page is displayed in. + +Each placeholder in a page has locale-specific content (for as many locales as you have). + +## CMS content widgets + +When you edit a CMS page, you can add CMS content widgets. A CMS content widget is a dynamic piece of reusable content. The following CMS content widgets are shipped with the CMS feature: +- Chart +- Product +- Product set +- Product group +- CMS file +- CMS block + +With the CMS Pages feature, you can: + +- Localize your CMS pages, including the name and HTML meta header information. +- Adding SEO meta information to CMS pages. +- Specify validity dates for CMS Pages. +- Assign a CMS Page to a specific locale, thus making it visible or hidden for a specific store (the Multi-store CMS feature). + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create a CMS page](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/pages/create-cms-pages.html) | +| [View CMS pages and history](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.html) | +| [Edit CMS pages](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/pages/edit-cms-pages.html) | +| [Preview CMS pages](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/pages/preview-cms-pages.html) | + + +## See next + +- [CMS block](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/cms-blocks-overview.html) diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/email-as-a-cms-block-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/email-as-a-cms-block-overview.md new file mode 100644 index 00000000000..fc55c0c4659 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/email-as-a-cms-block-overview.md @@ -0,0 +1,145 @@ +--- +title: Email as a CMS block overview +description: An overview guide that explains the Spryker Cloud Commerce OS Emails as CMS block and how to create emails through this functionality. +last_updated: Mar 25, 2024 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/email-as-a-cms-block-overview +originalArticleId: a986b331-c2dd-4a91-be52-fabd837fd493 +redirect_from: + - /2021080/docs/email-as-a-cms-block-overview + - /2021080/docs/en/email-as-a-cms-block-overview + - /docs/email-as-a-cms-block-overview + - /docs/en/email-as-a-cms-block-overview + - /docs/scos/user/features/202311.0/cms-feature-overview/email-as-a-cms-block-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/cms-feature-overview/email-as-a-cms-block-overview.html +--- + +Back Office users can manage the content of emails sent to customers through [CMS Blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/cms-blocks-overview.html) in the Back Office. To use a CMS Block as an email, the Back Office user applies an email template. + + +## Types of email templates + +There are two types of emails used to manage CMS Blocks as emails: CMS Block email template and the actual email template. + + +## CMS block email template + +*CMS Block email template* is a [Twig](/docs/scos/dev/sdk/twig-and-twigextension.html) file that defines the design and layout of CMS Block in a way suitable for using it as an email. +The following CMS Block email templates are available by default: + +- HTML email template with header and footer. +- Text email template with header and footer. +- Empty email template. + +To learn how a Back Office User applies a CMS Block email template, see [Create email CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.html). + +A Developer can create more CMS Block email templates. + + +## Email template + +*Email Template* is a Twig file that defines the content of a system email sent to customers. You can edit the template by editing the assigned Email CMS Block in the Back Office. + + +### Naming of email CMS blocks + +Being a multi-purpose entity, CMS Blocks relies strongly on its naming when used as an email. The CMS Block name defines the email template it's assigned to. + + +#### Template assignment + +When a developer creates an email template, inside the file, they enter the CMS Block's name, which is assigned to the template. If the name of an Email CMS Block changes, a developer must update it in the respective email template. For example, the `availability-notification-subscription--html` Email CMS Block is assigned to the [subscribed.html.twig](https://github.com/spryker-shop/suite/blob/master/src/Pyz/Zed/AvailabilityNotification/Presentation/Mail/subscribed.html.twig) default email template. + + +#### Email format + +There are two email formats by default: HTML and pure text. The format of the [default email templates](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/cms-feature-overview/email-as-a-cms-block-overview.html) is identified by one of the respective tales in the name of an Email CMS Block: `--html` or `--text`. For example, Email CMS Blocks with the following names are assigned to the customer registration email template: + +- `customer-registration--html` +- `customer-registration--text` + +The email format itself is defined on the code level, the tales serving as identifiers. If you create new email templates, you don't have to add them to their Email CMS Block names. + + +### Default email templates + +There is a number of email templates with the respective Email CMS Blocks available in the Demo Shops. + +The following table contains the list of the default email templates, their Email CMS Blocks, and their purpose. + +
      Default email templates + +| WHEN THE EMAIL IS SENT | EMAIL CMS BLOCK NAME | TWIG TEMPLATE | +|-----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Customer registered in the shop. | customer-registration--html | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_registration.html.twig | +| Customer registered in the shop. | customer-registration--text | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_registration.html.twig | +| Customer confirmed the email address by clicking the link in the registration email. | customer-registration_token--html | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_registration_token.html.twig | +| Customer confirmed the email address by clicking the link in the registration email. | customer-registration_token--text | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_registration_token.text.twig | +| Customer submitted the password change form. | customer-restore-password--html | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_restore_password.html.twig | +| Customer submitted the password change form. | customer-restore-password--text | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_restore_password.text.twig | +| Customer clicked the password change link in the email and set up a new password. | customer-restored-password-confirmation--html | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_reset_password_confirmation.html.twig | +| Customer clicked the password change link in the email and set up a new password. | customer-restored-password-confirmation--text | Customer/src/Spryker/Zed/Customer/Presentation/Mail/customer_reset_password_confirmation.text.twig | +| Customer subscribed to a newsletter. | newsletter-subscribed--html | Newsletter/src/Spryker/Zed/Newsletter/Presentation/Mail/subscribed.html.twig | +| Customer subscribed to a newsletter. | newsletter-subscribed--text | Newsletter/src/Spryker/Zed/Newsletter/Presentation/Mail/subscribed.text.twig | +| Customer unsubscribed from a newsletter. | newsletter-unsubscribed--html | Newsletter/src/Spryker/Zed/Newsletter/Presentation/Mail/unsubscribed.html.twig | +| Customer unsubscribed from a newsletter. | newsletter-unsubscribed--text | Newsletter/src/Spryker/Zed/Newsletter/Presentation/Mail/unsubscribed.text.twig | +| Order was placed successfully. | order-confirmation--html | Oms/src/Spryker/Zed/Oms/Presentation/Mail/order_confirmation.html.twig | +| Order was placed successfully. | order-confirmation--text | Oms/src/Spryker/Zed/Oms/Presentation/Mail/order_confirmation.text.twig | +| Order was shipped. | order-shipped--html | Oms/src/Spryker/Zed/Oms/Presentation/Mail/order_shipped.html.twig | +| Order was shipped. | order-shipped--text | Oms/src/Spryker/Zed/Oms/Presentation/Mail/order_shipped.text.twig | +| Customer invited a new company user. The invited user receives the email. | company-user-invitation--html | CompanyUserInvitation/src/Spryker/Zed/CompanyUserInvitation/Presentation/Mail/invitation.html.twig | +| Customer invited a new company user. The invited user receives the email. | company-user-invitation--text | CompanyUserInvitation/src/Spryker/Zed/CompanyUserInvitation/Presentation/Mail/invitation.text.twig | +| Company's status changed. | company-status--html | CompanyMailConnector/src/Spryker/Zed/CompanyMailConnector/Presentation/Mail/company_status.html.twig | +| Company's status changed. | company-status--text | CompanyMailConnector/src/Spryker/Zed/CompanyMailConnector/Presentation/Mail/company_status.text.twig | +| Customer subscribed to notifications about product availability. | availability-notification-subscription--html | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/subscribed.html.twig | +| Customer subscribed to notifications about product availability. | availability-notification-subscription--text | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/subscribed.text.twig | +| Customer unsubscribed from notifications about product availability. | availability-notification-unsubscribed--html | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/unsubscribed.html.twig | +| Customer unsubscribed from notifications about product availability. | availability-notification-unsubscribed--text | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/unsubscribed.text.twig | +| A product that was unavailable becomes available. Customers who subscribed to availability notifications receive the email. | availability-notification--html | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/notification.html.twig | +| A product that was unavailable becomes available. Customers who subscribed to availability notifications receive the email. | availability-notification--text | AvailabilityNotification/src/Spryker/Zed/AvailabilityNotification/Presentation/Mail/notification.text.twig | +| Back Office user submitted the password change form. | restore-password--html | AuthMailConnector/src/Spryker/Zed/AuthMailConnector/Presentation/Mail/restore_password.html.twig | +| Back Office user submitted the password change form. | restore-password--text | AuthMailConnector/src/Spryker/Zed/AuthMailConnector/Presentation/Mail/restore_password.text.twig | +| Gift Card was delivered to a customer. | gift-card-delivery--html | GiftCardMailConnector/src/Spryker/Zed/GiftCardMailConnector/Presentation/Mail/gift_card_delivery.html.twig | +| Gift Card was delivered to a customer. | gift-card-delivery--text | GiftCardMailConnector/src/Spryker/Zed/GiftCardMailConnector/Presentation/Mail/gift_card_delivery.text.twig | +| Customer used a gift card. | gift-card-usage--html | GiftCardMailConnector/src/Spryker/Zed/GiftCardMailConnector/Presentation/Mail/gift_card_usage.html.twig | +| Customer used a gift card. | gift-card-usage--text | GiftCardMailConnector/src/Spryker/Zed/GiftCardMailConnector/Presentation/Mail/gift_card_usage.text.twig | +| Merchant relation request was created. | cms-block-email--merchant_notification_of_merchant_relation_request_creation--html | MerchantRelationRequestMerchantPortalGui/src/Spryker/Zed/MerchantRelationRequestMerchantPortalGui/Presentation/Mail/merchant_notification_of_merchant_relation_request_creation.html.twig | +| Merchant relation request was created. | cms-block-email--merchant_notification_of_merchant_relation_request_creation--text | MerchantRelationRequestMerchantPortalGui/src/Spryker/Zed/MerchantRelationRequestMerchantPortalGui/Presentation/Mail/merchant_notification_of_merchant_relation_request_creation.text.twig | +| Merchant relation request status was changed. | cms-block-email--merchant_relation_request_status_change--html | MerchantRelationRequest/src/Spryker/Zed/MerchantRelationRequest/Presentation/Mail/merchant_relation_request_status_change.html.twig | +| Merchant relation request status was changed. | cms-block-email--merchant_relation_request_status_change--text | MerchantRelationRequest/src/Spryker/Zed/MerchantRelationRequest/Presentation/Mail/merchant_relation_request_status_change.text.twig | +| Merchant relation was deleted. | cms-block-email--merchant_relationship_delete--html | MerchantRelationship/src/Spryker/Zed/MerchantRelationship/Presentation/Mail/merchant_relationship_delete.html.twig | +| Merchant relation was deleted. | cms-block-email--merchant_relationship_delete--text | MerchantRelationship/src/Spryker/Zed/MerchantRelationship/Presentation/Mail/merchant_relationship_delete.text.twig | + +
      + +To learn how a Back Office User manages the content of email templates by editing Email CMS Block, see [Edit placeholders in CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html). + +After creating email templates, a developer can [import](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-cms-block.csv.html) their assigned Email CMS Blocks. See [an example of the import file](https://github.com/spryker-shop/suite/blob/master/data/import/common/common/cms_block.csv) with the Email CMS Blocks in Spryker Master Suite. + +## Email content + +When [editing an email template using email CMS block](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html), you work in the WYSIWYG editor. Apart from the regular WYSIWYG editor tools, you can add glossary keys and variables. + +You can use the functionalities described in this section, regardless of the email format. + +### Glossary keys in email templates + +You can add [glossary keys](/docs/pbc/all/miscellaneous/{{page.version}}/manage-in-the-back-office/add-translations.html) directly to email templates, and the respective translations are fetched automatically. When an email with a glossary key is sent, the key is replaced with the translation you defined for the locale selected by the customer. For example, you add the `cart.price.grand.total` glossary key to an email template. When the email is sent to the customer with the `de_DE` locale, the key is replaced with Summe. + +To learn how a Back Office User creates translations, see [Managing Glossary](/docs/pbc/all/miscellaneous/{{page.version}}/manage-in-the-back-office/add-translations.html). + +### Variables in Email Templates + +Also, you can use variables to adjust details like a customer name in the emails automatically. For example, if you add the `firstName` variable, when the email is sent, the variable is replaced with the first name of the customer it's sent to. Unlike glossary keys, variables are defined on the code level, namely in the transfer object definition. + +A developer can provide a full list of variables and create new ones. + +### Content items in email templates + +The CMS capability in Spryker lets you add [content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/navigation-feature-overview.html) into CMS Blocks. Unlike the regular CMS Blocks, the Email CMS Blocks do not support content items. If you insert one, its content is not rendered when the email is sent. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create email CMS Blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.html) | diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/templates-and-slots-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/templates-and-slots-overview.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/templates-and-slots-overview.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/templates-and-slots-overview.md index 531b3c0941b..b1876e14804 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/templates-and-slots-overview.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/cms-feature-overview/templates-and-slots-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/templates-and-slots-overview originalArticleId: d9a2e5ab-33c9-4d63-ac38-8b86c0a17f97 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/cms-feature-overview/templates-and-slots-overview.html - /2021080/docs/templates-and-slots-overview - /2021080/docs/en/templates-and-slots-overview - /docs/templates-and-slots-overview diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/content-items-feature-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/content-items-feature-overview.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/content-items-feature-overview.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/content-items-feature-overview.md index ea5ce5168fd..8743cd5f0bc 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/content-items-feature-overview.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/content-items-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/content-items-feature-overview originalArticleId: beb3bad2-d08d-42b7-9474-9dedfecae781 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/content-items-feature-overview.html - /2021080/docs/content-items-feature-overview - /2021080/docs/en/content-items-feature-overview - /docs/content-items-feature-overview diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/domain-model-and-relationships/content-item-types-module-relations.md b/docs/pbc/all/content-management-system/202602.0/base-shop/domain-model-and-relationships/content-item-types-module-relations.md new file mode 100644 index 00000000000..d749b5e16fb --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/domain-model-and-relationships/content-item-types-module-relations.md @@ -0,0 +1,102 @@ +--- +title: "Content item types: module relations" +description: Learn about all the content item types and module relations used for them within the Spryker Cloud Commerce OS CMS Module. +last_updated: Jun 16, 2021 +template: feature-walkthrough-template +originalLink: https://documentation.spryker.com/2021080/docs/content-item-types-module-relations +originalArticleId: dc32fefa-b80c-4924-8ee3-1da9be159722 +redirect_from: + - /2021080/docs/content-item-types-module-relations + - /2021080/docs/en/content-item-types-module-relations + - /docs/content-item-types-module-relations + - /docs/en/content-item-types-module-relations + - /docs/scos/dev/feature-walkthroughs/202204.0/content-items-feature-walkthrough/content-item-types-module-relations.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/domain-model-and-relationships/content-item-types-module-relations.html +--- + +This document describes each content item type and the modules relations used for them. + +## Banner + +The Banner content item is a content piece that consists of text, a background image, and a link. A content manager specifies the values when [creating the content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.html) in the Back Office > **Content Management** > **Content Items**. + +The schema shows the module relations of the Banner content item: + +![Banner CI module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/banner-module-relations.png) + +### Banner API + +A developer can fetch the content item data via API. Also, they can view the content item details for a specific locale. + +The schema below shows the Banner API module relations: +![Banner API module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/banner-api-module-relations.png) + +### Banner data importer + +A developer can create and edit the content items by importing them. + +The schema below shows the module relations of the content item data importers: +![Banner Content Item Data Importers module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/banner-data-importers-module-relations.png) + +See [Data Importers Overview and Implementation](/docs/dg/dev/data-import/{{page.version}}/data-importers-implementation.html) for more details. + +*** + +## Abstract Product List + +The Abstract product list content item is a content piece that consists of text and [abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html). A content manager selects existing abstract products when [creating the content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.html) in the Back Office > **Content Management** > **Content Items**. + +The schema below shows the module relations of the Abstract product list content item and its components: + +- data importer +- API + +![Abstract Product List module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/abstract-product-list-module-relations.png) + +### Abstract Product List data importer + +A developer can create and update the content items by importing them. + +See [Data Importers Overview and Implementation](/docs/dg/dev/data-import/{{page.version}}/data-importers-implementation.html) for more details. + +### Abstract Product List API + +A developer can fetch the information on each abstract product included into a contnet item via API based on the content item key. Also, they can view details of content items for all or a specific locale. + +*** + +## Product Set + +The Product set content item is a content piece that consists of text and a [product set](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/product-sets-feature-overview.html). A content manager selects an existing product set when [creating the content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.html#create-a-product-set-content-item) in the Back Office > **Content Management** > **Content Items**. + +The schema below shows the module relations of the Product set content item and its importer: +![Product Set content item module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/product-set-module-relations.png) + +### Product Set data importer + +Developers can create and update the content items by importing them. + +See [Data Importers Overview and Implementation](/docs/dg/dev/data-import/{{page.version}}/data-importers-implementation.html) for more details. + +*** + +## File list + +The File list content item is a content piece that consists of text and a clickable link or icon to download a file. A content manager selects existing files when [creating the content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.html) in the Back Office > **Content Management** > **Content Items**. + +The schema below shows the module relations of the File list content item: +![File List module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/CMS/Content+Items/Content+Items+Types%3A+Module+Relations/file-list-module-relations.png) + +## Navigation + +The Navigation content item is a content piece that consists of a [navigation element](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/domain-model-and-relationships/content-item-types-module-relations.html). A content manager selects a navigation element when [creating the Navigation content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.html) in the Back Office. + +The schema shows the module relations of the Navigation content item: + +![navigation-content-item-module-relations](https://confluence-connect.gliffy.net/embed/image/73472dc0-68f4-4bcd-a3ef-79c5ea1dcdbe.png?utm_medium=live&utm_source=custom) + +### Navigation data importer + +A developer can create and edit navigation content items by [importing](/docs/dg/dev/data-import/{{page.version}}/importing-data-with-a-configuration-file.html#console-commands-to-run-import) them. + +See [File details: content_navigation.csv](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-content-navigation.csv.html) for more details. diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/domain-model-and-relationships/product-sets-feature-domain-model-and-relationships.md b/docs/pbc/all/content-management-system/202602.0/base-shop/domain-model-and-relationships/product-sets-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/domain-model-and-relationships/product-sets-feature-domain-model-and-relationships.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/domain-model-and-relationships/product-sets-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/cms-extension-points-reference-information.md b/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/cms-extension-points-reference-information.md new file mode 100644 index 00000000000..34d7c41386e --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/cms-extension-points-reference-information.md @@ -0,0 +1,70 @@ +--- +title: "CMS extension points: reference information" +last_updated: Aug 13, 2021 +description: The CMS module provides an extension point for post activation and deactivation of CMS pages. +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/201903.0/cms-feature-walkthrough/cms-extension-points-reference-information.html + - /docs/scos/dev/feature-walkthroughs/202005.0/cms-feature-walkthrough/cms-extension-points-reference-information.html + - /docs/scos/dev/feature-walkthroughs/202311.0/cms-feature-walkthrough/cms-extension-points-reference-information.html + - /docs/pbc/all/content-management-system/202311.0/extend-and-customize/cms-extension-points-reference-information.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/extend-and-customize/cms-extension-points-reference-information.html +--- + +The `CMS` module provides an extension point for post activation and deactivation of CMS pages. The plugin interface set for this extension point is as follows: + +```php +getFacade()->updateCmsPageNavigationNodesIsActive($cmsPageTransfer); + } +} +``` + +Found within `CmsDependencyProvider`, in the function `getCmsPagePostActivatorPlugins`, you can register this plugin (or any plugin implementing the above interface) for it to execute post activation or deactivation of CMS pages. diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/navigation-module-reference-information.md b/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/navigation-module-reference-information.md new file mode 100644 index 00000000000..5df10183cab --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/extend-and-customize/navigation-module-reference-information.md @@ -0,0 +1,39 @@ +--- +title: "Navigation module: reference information" +last_updated: Aug 13, 2021 +description: Reference information for the Navigation module that renders navigation menus on Spryker Cloud Commerce OS frontend. +template: concept-topic-template +redirect_from: + - /docs/pbc/all/content-management-system/202311.0/extend-and-customize/navigation-module-reference-information.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/extend-and-customize/navigation-module-reference-information.html +--- + +## Overview + +The `Navigation` module manages multiple navigation menus that can be displayed on the frontend (Yves). Every navigation section can contain its own nested structure of navigation nodes. Navigation nodes have types that help define what kind of link they represent. + +The following node types are available: + +- **Label**: These nodes do not link to any specific URL, and are used for grouping other nodes. +- **Category**: Nodes can be assigned to category node URLs. +- **CMS Page**: Nodes can be assigned to CMS page URLs. +- **Link**: These nodes link to internal pages in Yves—for example, login or registration. +- **External URL**: These nodes link to external URLs (typically tabs opened in a new browser). + +You can control and adjust Navigation node appearance and add icons by assigning custom CSS classes to them. + +This feature is shipped with three modules: + +- **Navigation module** provides database structure and a public API to manage what's in the database. It also provides a small toolkit for rendering navigation menus in the frontend. +- **NavigationGui** provides a Zed UI to manage navigation menus. +- **NavigationCollector** provides full collector logic for exporting navigation menus to the key-value store (Redis or Valkey). + +## Database schema + +The Navigation module provides the `spy_navigation` table that stores navigation menus. They have a `name` field which is only used for backend display and they also have a `key` field which is used to reference the navigation menus from Yves. + +Every navigation entity contains some nodes stored in the `spy_navigation_node` table. The structure of the navigation tree depends on the `fk_parent_navigation_node` and the position fields which define if a node has a parent on its level, in what `position` they are ordered. Each navigation node has attributes that can be different per displayed locale. This information is stored in the `spy_navigation_node_localized_attributes` table. + +The `valid_from`, `valid_to`, and `is_active` fields lets you toggle the node's and its descendant's visibility. + +![Navigation database schema](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Navigation/Navigation+Module/navigation_db_schema_2_0.png) diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/file-manager-feature-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/file-manager-feature-overview.md new file mode 100644 index 00000000000..b39210bb18b --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/file-manager-feature-overview.md @@ -0,0 +1,127 @@ +--- +title: File Manager feature overview +description: Reduce your bounce rate and create an enhanced shopping experience by providing impactful visuals while maintaining fast response times. +last_updated: Sep 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/media-management +originalArticleId: 55cbe64d-f656-4d8d-a3d5-c32998acb947 +redirect_from: + - /docs/scos/user/features/202001.0/file-manager-feature-overview/file-uploader.html + - /docs/scos/user/features/202200.0/file-manager-feature-overview/file-manager-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202204.0/file-manager-feature-walkthrough.html + - /docs/scos/user/features/202200.0/file-manager-feature-overview/file-uploader.html + - /docs/scos/user/features/202204.0/file-manager-feature-overview/file-uploader.html + - /docs/scos/user/features/202204.0/file-manager-feature-overview/asset-management.html + - /docs/pbc/all/content-management-system/202311.0/file-manager-feature-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/file-manager-feature-overview.html +--- + +The *File Manager* feature lets you upload and manage your assets (media files) effectively. You can do the following: +- Upload and delete files in bulk. +- Add and delete files manually through the Back Office. +- Maintain multiple versions of individual files. +- Drag and drop to create and update your assets' file structure. +- Manage files from a list view. + +A Back Office user can upload files then add them to CMS pages and blocks to display on the Storefront. + +Apart from images, you can add many different types of assets to your project, including but not limited to the following ones: +- Presentations +- PDF documents +- Graphics +- Banners + +Digital assets let content managers create rich, compelling, and attractive content for your customers. They also let you offer your customers additional information like user manuals or instructions. + +## File tree + +The files in the Back Office are kept in a tree-like structure. A Back Office user can create folders (also known as directories) under *File Directories Tree* and organize them into a hierarchical system by dragging and dropping them in the file tree. + +The changes take effect after **Save** is selected. +![File tree](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/digital-asset-management/pbc-file-tree.png) + +A Back Office user can delete any folder within *File Directories Tree* by selecting **Delete Directory**. If the deleted folder contains files, those files are automatically moved to the parent directory. Parent directory in *File Directories Tree* cannot be deleted. + +## File List + +*Files List* displays all the files uploaded to the Back Office in a table view. The Back Office user can view, edit, and delete files here. +![File list](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Media+Management/File+Uploader/File+Uploader+Feature+Overview/file-list.png) + + +## Versions + +*File Uploader* lets you store multiple versions of any file. + +For example: a Back Office user uploads Instruction1.txt file (v.1). The user then updates and reuploads the .txt file (v.2). Next, the user decides that the image instruction is more useful and uploads Instruction.png (v.3). + +There are now three versions of the file available: two text files and one image file. +![File versions](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Media+Management/File+Uploader/File+Uploader+Feature+Overview/file-versions.png) + +By default, the latest version of the file is displayed to the buyer in the shop application. + +## MIME Type Settings + +*MIME Type Settings* let you define the file types that can be uploaded to the Back Office. + + +[MIME type](https://en.wikipedia.org/wiki/Media_type) is a standard that describes the contents of the files. MIME type indicates how a web browser will process a file. For example, if the MIME type is set as `text/html`, the document will open in Notepad. If the MIME type is set as `image/jpeg`, the document will open with an image viewer program. + +![MIME type settings](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Media+Management/File+Uploader/File+Uploader+Feature+Overview/mime-type-settings.png) + +The Back Office user can only upload files with a MIME type that is selected in the *Is Allowed* column. If no MIME types are defined, files of any type can be uploaded. If you add at least one MIME type, only the files of the added types can be uploaded. + +The most popular file types that shop owners allow to be uploaded to the Back Office are: + +| TYPE | DESCRIPTION | EXAMPLE OF MIME TYPE | +| --- | --- | --- | +| text | Represents any document that contains text and is theoretically human readable | `text/plain`, `text/html`, `text/css`, `text/javascript`
      For text documents without specific subtype, `text/plain` must be used.| +|image | Represents any kind of images | `image/gif`, `image/png`, `image/jpeg`, `image/bmp`, `image/webp` | +| audio | Represents any kind of audio files | `audio/midi`, `audio/mpeg`, `audio/webm`, `audio/ogg`, `audio/wav` | +| video | Represents any kind of video files | `video/webm`, `video/ogg` | + + +## Asset types + +There are two types of assets in the Spryker Commerce OS: dynamic and static. + +*Dynamic assets* are files added during content and product creation: adding or changing CMS pages and adding product images. + +*Static assets* are images, fonts, CSS, JS, HTML, and PHP files that are available and used by default. All static asset files are split into folders according to the application they are used for: Zed, Yves, or Glue. PHP and HTML files stored in static asset directories are used for handling errors and showing the platform maintenance messages. + +{% info_block infoBox %} + +Except for the error handling files, there are no Glue-related assets. + +{% endinfo_block %} + +### Location of static assets + +By default, static assets are stored locally in the following folders: + +- `public/Yves/assets/` +- `public/Zed/assets/` + +For organizational or cost and speed optimization purposes, the location of static assets can be changed to an external source. + +The following environment variables are used for that: + +- `SPRYKER_ZED_ASSETS_BASE_URL` +- `SPRYKER_YVES_ASSETS_URL_PATTERN` + +See [Integrating custom location for static assets](/docs/dg/dev/integrate-and-configure/integrate-custom-location-for-static-assets.html) for more details. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Manage file tree](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/manage-file-tree.html) | +| [Manage file list](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/manage-file-list.html) | +| [Add and edit MIME types](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/add-and-edit-mime-types.html) | + +## Related Developer documents + +| UPGRADE GUIDES| DATA IMPORT | +| - | - | +| [Upgrade the FileManager module](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html) | ["Import file details: mime_type.csv"](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-mime-type.csv.html) | +| [Upgrade the FileManagerStorage module](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html) | | +| [Upgrade the FileManagerWidget module](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html) | | diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-content-management-system-data.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-content-management-system-data.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-content-management-system-data.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-content-management-system-data.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md index f852f5e2b5a..0bff4e172ca 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-block-category-postioncsv originalArticleId: 22c4245e-5056-4bb9-9d77-e932a74c63b9 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category-postion.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-block-category-postion.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-block-category-postion.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-block-category-postion.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md similarity index 95% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md index 67e0c228aa5..e9fc66ab32f 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-block-categorycsv originalArticleId: 2aad4789-139d-437f-b295-3bb3c75b9d40 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-category.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-block-category.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-block-category.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-block-category.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md index c49aff336ea..4b954e9fba8 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-block-storecsv originalArticleId: eb3af5d2-ec2b-4452-8a11-d392431ab8d2 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block-store.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-block-store.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-block-store.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-block-store.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md similarity index 95% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md index be5ab25d57b..124832b9931 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.md @@ -6,8 +6,9 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-blockcsv originalArticleId: 2fde5c8a-6217-4151-a511-23b71759feb0 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-block.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-block.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-block.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-block.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-block.csv.html - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-block.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md index de0f31e1f6a..17bdd6614a3 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-page-storecsv originalArticleId: e8f80649-24da-450a-a696-c3b9f02a52eb redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page-store.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-page-store.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-page-store.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-page-store.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md index adc72c18417..0a1858b3560 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-pagecsv originalArticleId: 65418d11-4c73-4b42-94fb-8397c29eed33 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-page.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-page.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-page.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-page.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md similarity index 91% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md index 995572453c0..632ef7cc310 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.md @@ -6,10 +6,11 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-slot-blockcsv originalArticleId: 848a3e6c-edad-4c9b-b7af-0b0c847b258f redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-slot-block.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot-block.csv.html - - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot-block.csv.html - - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-slot-block.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot-block.csv.html + - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot-block.csv.html + - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-slot-block.csv.html - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-slot-block.csv.html related: - title: Execution order of data importers in Demo Shop diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md similarity index 90% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md index a7ba8267f2a..aa78c4746a1 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.md @@ -6,11 +6,12 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-slot-templatecsv originalArticleId: ce6ee377-92eb-4297-9a05-a188447f5865 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-slot-template.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot-template.csv.html - - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot-template.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot-template.csv.html + - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot-template.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-slot-template.csv.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-slot-template.csv.html related: - title: Execution order of data importers in Demo Shop link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md similarity index 92% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md index 5954ed096ec..ec00825facf 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.md @@ -6,11 +6,12 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-slotcsv originalArticleId: 724be566-e4d4-4037-b242-a933fb78a42e redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-slot.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot.csv.html - - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-slot.csv.html + - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-slot.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-cms-slot.csv.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-cms-slot.csv.html related: - title: Execution order of data importers in Demo Shop link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md index 468d4908d87..03cac33b9c7 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-cms-templatecsv originalArticleId: 6221a424-5513-496b-bbc6-56a59471a264 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-cms-template.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-cms-template.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-cms-template.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-cms-template.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md index a10ade70e74..3fc5614615b 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.md @@ -6,13 +6,14 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-content-bannercsv originalArticleId: 4420043c-15fe-4485-8a7d-00d326d27d0f redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-content-banner.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/content-management/file-details-content-banner.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-content-banner.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-content-banner.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-content-banner.csv.html - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-content-banner.csv.html - + related: - title: Execution order of data importers in Demo Shop link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md index 1536c45591a..fe5fdd99679 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-content-navigationcsv originalArticleId: b553e414-141d-488c-8d1c-0a7980ff1211 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-navigation.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-content-navigation.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/content-management/file-details-content-navigation.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-content-navigation.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md index 47bad72f688..977264d93df 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-content-product-abstract-listcsv originalArticleId: b165b205-174d-4f91-8b37-d15ce455285c redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-abstract-list.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-content-product-abstract-list.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/content-management/file-details-content-product-abstract-list.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-content-product-abstract-list.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md index 515dfc15fdb..d5270da4dda 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-content-product-setcsv originalArticleId: 170221d8-467a-4e8c-8449-07a454c5f684 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-content-product-set.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/content-management/file-details-content-product-set.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/content-management/file-details-content-product-set.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/content-management/file-details-content-product-set.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md similarity index 93% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md index 29a2e3ce890..cf41c917f68 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.md @@ -6,7 +6,8 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-mime-typecsv originalArticleId: cec9c3b6-fb1c-4d60-829c-cf37d9d54404 redirect_from: - - /docs/scos/dev/data-import/202204.0/data-import-categories/miscellaneous/file-details-mime-type.csv.html + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.html + - /docs/scos/dev/data-import/202204.0/data-import-categories/miscellaneous/file-details-mime-type.csv.html - /docs/pbc/all/content-management-system/202311.0/import-and-export-data/file-details-mime-type.csv.html - /docs/pbc/all/content-management-system/202311.0/base-shop/import-and-export-data/file-details-mime-type.csv.html - /docs/pbc/all/content-management-system/202204.0/base-shop/import-and-export-data/import-file-details-mime-type.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md index 07c6438524a..11879e0eea8 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-navigation-nodecsv originalArticleId: a3ec2a04-ce34-4501-8ce4-da2240bfc583 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation-node.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/navigation-setup/file-details-navigation-node.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/navigation-setup/file-details-navigation-node.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/navigation-setup/file-details-navigation-node.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md similarity index 95% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md index 38a0eff5902..6088cf787e0 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-navigation.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-navigationcsv originalArticleId: eb25c5b9-7718-4328-b5a5-d93a6a0fb9b7 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-navigation.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/navigation-setup/file-details-navigation.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/navigation-setup/file-details-navigation.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/navigation-setup/file-details-navigation.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md index bb64b86959d..f61e50a0618 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-set.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-setcsv originalArticleId: 41c315c8-8d81-4a70-9318-45fea1ebf2c1 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-set.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-set.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-set.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-set.csv.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/install-category-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-category-cms-blocks.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/install-category-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-category-cms-blocks.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md new file mode 100644 index 00000000000..85fc923c669 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the CMS + Catalog feature +description: The CMS Page Search Catalog feature allows viewing search results for subcategory pages. The guide describes how to enable the feature in the project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-pages-in-search-results-integration +originalArticleId: 517fc527-ef1f-4d52-91b8-23976ed8d283 +redirect_from: + - /docs/pbc/all/content-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.html + - /2021080/docs/cms-pages-in-search-results-integration + - /2021080/docs/en/cms-pages-in-search-results-integration + - /docs/cms-pages-in-search-results-integration + - /docs/en/cms-pages-in-search-results-integration + - /docs/scos/dev/feature-integration-guides/202311.0/cms-catalog-feature-integration.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-catalog-feature.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-catalog-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-cms-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md similarity index 100% rename from docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md new file mode 100644 index 00000000000..9c95777ef8b --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install the CMS feature + Dynamic Multistore +description: Learn how to install the CMS feature + Dynamic Multistore in to your Spryker Projects. +last_updated: Apr 25, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cms-feature.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md new file mode 100644 index 00000000000..7e53a9dfec8 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.md @@ -0,0 +1,22 @@ +--- +title: Install the CMS feature +description: The guide describes how to integrate the Spryker Cloud Commerce OS CMS feature into your Spryker project. +last_updated: Nov 22, 2022 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-feature-integration-guide +originalArticleId: ead31fac-6aa6-47f5-9d81-ff891219cf53 +redirect_from: + - /2021080/docs/cms-feature-integration-guide + - /2021080/docs/en/cms-feature-integration-guide + - /docs/cms-feature-integration-guide + - /docs/en/cms-feature-integration-guide + - /docs/scos/dev/feature-integration-guides/201811.0/cms-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/cms-feature-integration.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-feature.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-feature.html +related: + - title: Install the CMS Glue API + link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-cms-feature.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md new file mode 100644 index 00000000000..09d9579fa9b --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.md @@ -0,0 +1,24 @@ +--- +title: Install the CMS + Product Lists + Catalog feature +description: Learn how to install the CMS + Product lists + Catalog feature in to your Spryker projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/cms-page-search-product-lists-catalog-feature-integration +originalArticleId: c395ad85-27ce-44f2-a18f-69fce0d46ba6 +redirect_from: + - /2021080/docs/cms-page-search-product-lists-catalog-feature-integration + - /2021080/docs/en/cms-page-search-product-lists-catalog-feature-integration + - /docs/cms-page-search-product-lists-catalog-feature-integration + - /docs/en/cms-page-search-product-lists-catalog-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/cms-product-lists-catalog-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/cms-product-lists-catalog-feature-integration.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-cms-product-lists-catalog-feature.html +related: + - title: CMS pages in search results + link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-pages-in-search-results-overview.html + - title: CMS page + link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-pages-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-cms-product-lists-catalog-feature.md %} diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md similarity index 100% rename from docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md new file mode 100644 index 00000000000..3928a820309 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-file-manager-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the File Manager feature +description: Learn how to install the File Manager feature, which lets you upload and manage your assets effectively. +last_updated: Aug 22, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-file-manager-feature.md %} diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md similarity index 100% rename from docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.md diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md similarity index 100% rename from docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.md new file mode 100644 index 00000000000..293df9f79a9 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.md @@ -0,0 +1,25 @@ +--- +title: Install the CMS Glue API +description: A guide on how to Install the Spryker CMS Glue API and configure the API behaviour within your Spryker projects. +last_updated: Jul 14, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-cms-feature-integration-guide +originalArticleId: e3dfeabf-efbe-407f-b1d7-5bcf31a423f8 +redirect_from: + - /2021080/docs/glue-api-cms-feature-integration-guide + - /2021080/docs/en/glue-api-cms-feature-integration-guide + - /docs/glue-api-cms-feature-integration-guide + - /docs/en/glue-api-cms-feature-integration-guide + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-cms-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/glue-api/glue-api-cms-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-cms-feature-integration.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-cms-glue-api.html +--- +related: +- title: Install the CMS feature + link: docs/scos/dev/feature-integration-guides/page.version/cms-feature-integration.html +- title: "Glue API: Retrieve CMS pages" + link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-cms-glue-api.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md new file mode 100644 index 00000000000..f88cfad7de7 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.md @@ -0,0 +1,25 @@ +--- +title: Install the Content Items Glue API +description: The guide walks you through the process of installing and configuring the Content Items feature in the project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-content-items-api-feature-integration +originalArticleId: 87cf9b21-06f9-4766-8645-bc62c4d64296 +redirect_from: + - /2021080/docs/glue-api-content-items-api-feature-integration + - /2021080/docs/en/glue-api-content-items-api-feature-integration + - /docs/glue-api-content-items-api-feature-integration + - /docs/en/glue-api-content-items-api-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-content-items-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-content-items-feature-integration.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.html +related: + - title: Install the Content Items feature + link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-content-items-feature.html + - title: "Glue API: Retrieve abstract product list content items" + link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.html + - title: "Glue API: Retrieve banner content items" + link: docs/pbc/all/content-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-content-items-glue-api.md %} diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md similarity index 100% rename from docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-navigation-glue-api.md diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md similarity index 99% rename from docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md index 71747715b1a..dbdd053c8a6 100644 --- a/docs/pbc/all/content-management-system/202410.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.md @@ -14,7 +14,6 @@ redirect_from: - /docs/scos/dev/feature-integration-guides/202108.0/multi-store-cms-block-feature-integration.html - /docs/scos/dev/feature-integration-guides/202311.0/multi-store-cms-block-feature-integration.html - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-multi-store-cms-blocks.html - related: - title: Upgrade the CmsBlock module link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.html diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-product-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-product-cms-blocks.md new file mode 100644 index 00000000000..7cbcf9a0731 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-product-cms-blocks.md @@ -0,0 +1,143 @@ +--- +title: Install product CMS blocks +description: Learn how to install Spryker Cloud Commerce OS product CMS blocks into a Spryker project. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/enabling-the-product-cms-block +originalArticleId: 2fd5636b-9196-4a11-8191-4a97dc7a4406 +redirect_from: + - /2021080/docs/enabling-the-product-cms-block + - /2021080/docs/en/enabling-the-product-cms-block + - /docs/enabling-the-product-cms-block + - /docs/en/enabling-the-product-cms-block + - /docs/scos/dev/technical-enhancements/enabling-the-product-cms-block.html + - /docs/scos/dev/technical-enhancement-integration-guides/integrating-product-cms-blocks.html + - /docs/scos/dev/technical-enhancement-integration-guides/integrate-product-cms-blocks.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/install-product-cms-blocks.html +--- + +Product blocks are CMS blocks that are embedded in the product template and rendered on product details pages of selected products. + +To integrate product blocks, follow the steps: + +1. Install the CMS Block Product Connector module using Composer: + +```bash +composer require spryker/cms-block-product-connector:"^1.4.0" +``` + +2. To register the CMS block form plugin, add `CmsBlockProductAbstractFormPlugin` to the CMS block GUI dependency provider: + +**src/Pyz/Zed/CmsBlockGui/CmsBlockGuiDependencyProvider.php** + +```php + + */ + protected function getCmsBlockFormPlugins(): array + { + return array_merge(parent::getCmsBlockFormPlugins(), [ + new CmsBlockProductAbstractFormPlugin(), + ]); + } +} +``` + +3. To register the CMS block form handler plugin, add `CmsBlockProductAbstractUpdatePlugin` to the CMS Block dependency provider: + +**src/Pyz/Zed/CmsBlock/CmsBlockDependencyProvider.php** + +```php + + */ + protected function getCmsBlockUpdatePlugins(): array + { + return array_merge(parent::getCmsBlockUpdatePlugins(), [ + new CmsBlockProductAbstractUpdatePlugin(), + ]); + } +} +``` + +4. Optional: To show which abstract products a blocks is assigned to on the **View CMS Block** page, register the product list plugin by adding `CmsBlockProductAbstractListViewPlugin` to the CMS Block GUI dependency provider: + +**src/Pyz/Zed/CmsBlockGui/CmsBlockGuiDependencyProvider.php** + +```php + + */ + protected function getCmsBlockViewPlugins(): array + { + return array_merge(parent::getCmsBlockViewPlugins(), [ + new CmsBlockProductAbstractListViewPlugin(), + ]); + } +} + +``` + +5. Optional: To show which blocks an abstract product is assigned to on the **View Product Abstract** page, add `CmsBlockProductAbstractBlockListViewPlugin` to the Product Management dependency provider: + +**src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php** + +```php + + */ + protected function getProductAbstractViewPlugins(): array + { + return [ + new CmsBlockProductAbstractBlockListViewPlugin(), + ]; + } +} + +``` + +6. To show product CMS blocks on product details pages, add the following to the pages' template: + +```twig +{% raw %}{%{% endraw %} if data.idProductAbstract is defined {% raw %}%}{% endraw %} + {% raw %}{{{% endraw %} spyCmsBlock({ product: data.idProductAbstract}) {% raw %}}}{% endraw %} +{% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +``` + +Now you can create product CMS blocks and add them to product pages. For instructions, see [Create product CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.html). diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-the-content-widget.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-the-content-widget.md similarity index 100% rename from docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-the-content-widget.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-the-content-widget.md diff --git a/docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-the-navigation-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-the-navigation-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202404.0/base-shop/install-and-upgrade/install-the-navigation-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/install-the-navigation-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cms-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cms-module.md new file mode 100644 index 00000000000..97e49e37023 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cms-module.md @@ -0,0 +1,36 @@ +--- +title: Upgrade the Cms module +description: A guide to help you update and upgrade the Spryker CMS module from an older version to a a newer one. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cms +originalArticleId: 2283a672-1ea2-4ddc-9132-ef0ab1fe4e2f +redirect_from: + - /2021080/docs/mg-cms + - /2021080/docs/en/mg-cms + - /docs/mg-cms + - /docs/en/mg-cms + - /v1/docs/mg-cms + - /v1/docs/en/mg-cms + - /v2/docs/mg-cms + - /v2/docs/en/mg-cms + - /v3/docs/mg-cms + - /v3/docs/en/mg-cms + - /v4/docs/mg-cms + - /v4/docs/en/mg-cms + - /v5/docs/mg-cms + - /v5/docs/en/mg-cms + - /v6/docs/mg-cms + - /v6/docs/en/mg-cms + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cms.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cms.html + - /module_migration_guides/mg-cms.htm + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cms-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cms-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cms-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.md new file mode 100644 index 00000000000..802303c1257 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the CmsBlock module +description: Use the guide to update versions to the newer ones of the CMS Block module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cms-block +originalArticleId: 0fd1d544-25b2-4e6a-8051-1b961c12d93a +redirect_from: + - /2021080/docs/mg-cms-block + - /2021080/docs/en/mg-cms-block + - /docs/mg-cms-block + - /docs/en/mg-cms-block + - /v1/docs/mg-cms-block + - /v1/docs/en/mg-cms-block + - /v2/docs/mg-cms-block + - /v2/docs/en/mg-cms-block + - /v3/docs/mg-cms-block + - /v3/docs/en/mg-cms-block + - /v4/docs/mg-cms-block + - /v4/docs/en/mg-cms-block + - /v5/docs/mg-cms-block + - /v5/docs/en/mg-cms-block + - /v6/docs/mg-cms-block + - /v6/docs/en/mg-cms-block + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmsblock.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmsblock.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblock-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cmsblock-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-migration-console-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-migration-console-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-migration-console-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-migration-console-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-module.md new file mode 100644 index 00000000000..29cd3385bfe --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the CmsBlockCategoryConnector module +description: Use the guide to migrate the Spryker CMS block category connector module versions to the newer ones. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cms-block-category-connector +originalArticleId: 9f3a79f2-a237-4bbe-a6fd-7d2be2479bf3 +redirect_from: + - /2021080/docs/mg-cms-block-category-connector + - /2021080/docs/en/mg-cms-block-category-connector + - /docs/mg-cms-block-category-connector + - /docs/en/mg-cms-block-category-connector + - /v1/docs/mg-cms-block-category-connector + - /v1/docs/en/mg-cms-block-category-connector + - /v2/docs/mg-cms-block-category-connector + - /v2/docs/en/mg-cms-block-category-connector + - /v3/docs/mg-cms-block-category-connector + - /v3/docs/en/mg-cms-block-category-connector + - /v4/docs/mg-cms-block-category-connector + - /v4/docs/en/mg-cms-block-category-connector + - /v5/docs/mg-cms-block-category-connector + - /v5/docs/en/mg-cms-block-category-connector + - /v6/docs/mg-cms-block-category-connector + - /v6/docs/en/mg-cms-block-category-connector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cms-block-category-connector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cms-block-category-connector.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcategoryconnector-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cms-block-category-connector-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcollector-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcollector-module.md new file mode 100644 index 00000000000..c34553350da --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcollector-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the CmsBlockCollector module +description: Use the guide to update versions to the newer ones of the CMS Block Collector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cms-block-collector +originalArticleId: 3e039058-48d7-4a5c-bae4-2afa9c5cc0d6 +redirect_from: + - /2021080/docs/mg-cms-block-collector + - /2021080/docs/en/mg-cms-block-collector + - /docs/mg-cms-block-collector + - /docs/en/mg-cms-block-collector + - /v1/docs/mg-cms-block-collector + - /v1/docs/en/mg-cms-block-collector + - /v2/docs/mg-cms-block-collector + - /v2/docs/en/mg-cms-block-collector + - /v3/docs/mg-cms-block-collector + - /v3/docs/en/mg-cms-block-collector + - /v4/docs/mg-cms-block-collector + - /v4/docs/en/mg-cms-block-collector + - /v5/docs/mg-cms-block-collector + - /v5/docs/en/mg-cms-block-collector + - /v6/docs/mg-cms-block-collector + - /v6/docs/en/mg-cms-block-collector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cms-block-collector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cms-block-collector.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcollector-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockcollector-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cms-block-collector-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockgui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockgui-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockgui-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockgui-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockstorage-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockstorage-module.md new file mode 100644 index 00000000000..1c5c608314c --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockstorage-module.md @@ -0,0 +1,26 @@ +--- +title: Upgrade the CmsBlockStorage module +description: The set of procedures required to perform to migrate from one version of the CMS Block Storage module to another. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-cmsblockstorage +originalArticleId: 524d14d3-1a4a-4050-a087-e5f3ceb61534 +redirect_from: + - /2021080/docs/migration-guide-cmsblockstorage + - /2021080/docs/en/migration-guide-cmsblockstorage + - /docs/migration-guide-cmsblockstorage + - /docs/en/migration-guide-cmsblockstorage + - /v4/docs/migration-guide-cmsblockstorage + - /v4/docs/en/migration-guide-cmsblockstorage + - /v5/docs/migration-guide-cmsblockstorage + - /v5/docs/en/migration-guide-cmsblockstorage + - /v6/docs/migration-guide-cmsblockstorage + - /v6/docs/en/migration-guide-cmsblockstorage + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmsblockstorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmsblockstorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmsblockstorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmsblockstorage.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockstorage-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockstorage-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cmsblockstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockwidget-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockwidget-module.md new file mode 100644 index 00000000000..2a78d4dfc51 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockwidget-module.md @@ -0,0 +1,26 @@ +--- +title: Upgrade the CmsBlockWidget module +description: Learn how to upgrade and migrate the Spryker CmsBlockWidget module to a certain version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-cmsblockwidget +originalArticleId: 0e61cf4b-5360-404d-93f0-312f32e022c8 +redirect_from: + - /2021080/docs/migration-guide-cmsblockwidget + - /2021080/docs/en/migration-guide-cmsblockwidget + - /docs/migration-guide-cmsblockwidget + - /docs/en/migration-guide-cmsblockwidget + - /v4/docs/migration-guide-cmsblockwidget + - /v4/docs/en/migration-guide-cmsblockwidget + - /v5/docs/migration-guide-cmsblockwidget + - /v5/docs/en/migration-guide-cmsblockwidget + - /v6/docs/migration-guide-cmsblockwidget + - /v6/docs/en/migration-guide-cmsblockwidget + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmsblockwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmsblockwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmsblockwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmsblockwidget.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockwidget-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsblockwidget-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cmsblockstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmscollector-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmscollector-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmscollector-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmscollector-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsgui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsgui-module.md new file mode 100644 index 00000000000..ab16df7b4b2 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsgui-module.md @@ -0,0 +1,28 @@ +--- +title: Upgrade the CmsGui module +description: Learn how to upgrade to a newer version of the Spryker CMS GUI Module from an older version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-cmsgui +originalArticleId: f9f22223-ddf8-42d5-b483-3b1dc18788d6 +redirect_from: + - /2021080/docs/migration-guide-cmsgui + - /2021080/docs/en/migration-guide-cmsgui + - /docs/migration-guide-cmsgui + - /docs/en/migration-guide-cmsgui + - /v2/docs/mg-cms-gui + - /v2/docs/en/mg-cms-gui + - /v3/docs/mg-cms-gui + - /v3/docs/en/mg-cms-gui + - /v4/docs/mg-cms-gui + - /v4/docs/en/mg-cms-gui + - /v5/docs/mg-cms-gui + - /v5/docs/en/mg-cms-gui + - /v6/docs/mg-cms-gui + - /v6/docs/en/mg-cms-gui + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmsgui.html + - /module_migration_guides/mg-cms-gui.htm + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsgui-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsgui-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-cmsgui-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md new file mode 100644 index 00000000000..dae8a2ccc73 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md @@ -0,0 +1,34 @@ +--- +title: Upgrade the CmsPageSearch module +description: Learn how to upgrade to a newer version of the Spryker CMS Page Search module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cmspagesearch +originalArticleId: c549427a-a784-47d9-938d-984b9b52fc23 +redirect_from: + - /2021080/docs/mg-cmspagesearch + - /2021080/docs/en/mg-cmspagesearch + - /docs/mg-cmspagesearch + - /docs/en/mg-cmspagesearch + - /v2/docs/mg-cmspagesearch + - /v2/docs/en/mg-cmspagesearch + - /v3/docs/mg-cmspagesearch + - /v3/docs/en/mg-cmspagesearch + - /v4/docs/mg-cmspagesearch + - /v4/docs/en/mg-cmspagesearch + - /v5/docs/mg-cmspagesearch + - /v5/docs/en/mg-cmspagesearch + - /v6/docs/mg-cmspagesearch + - /v6/docs/en/mg-cmspagesearch + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmspagesearch.html + - /module_migration_guides/mg-cmspagesearch.htm + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-cmspagesearch-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsstorage-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsstorage-module.md new file mode 100644 index 00000000000..c6fbef9b31a --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsstorage-module.md @@ -0,0 +1,34 @@ +--- +title: Upgrade the CmsStorage module +description: Learn how to upgrade to a newer version of the Spryker storage module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cmsstorage +originalArticleId: abc4e5f2-4f3c-488d-a713-aa722bea4358 +redirect_from: + - /2021080/docs/mg-cmsstorage + - /2021080/docs/en/mg-cmsstorage + - /docs/mg-cmsstorage + - /docs/en/mg-cmsstorage + - /v2/docs/mg-cmsstorage + - /v2/docs/en/mg-cmsstorage + - /v3/docs/mg-cmsstorage + - /v3/docs/en/mg-cmsstorage + - /v4/docs/mg-cmsstorage + - /v4/docs/en/mg-cmsstorage + - /v5/docs/mg-cmsstorage + - /v5/docs/en/mg-cmsstorage + - /v6/docs/mg-cmsstorage + - /v6/docs/en/mg-cmsstorage + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cmsstorage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cmsstorage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmsstorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmsstorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmsstorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmsstorage.html + - /module_migration_guides/mg-cmsstorage.htm + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-cmsstorage-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmsstorage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-cmsstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-content-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-content-module.md new file mode 100644 index 00000000000..833dc4d7e66 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-content-module.md @@ -0,0 +1,31 @@ +--- +title: Upgrade the Content module +description: Learn how to upgrade to a newer version of the Spryker content module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-content-201907 +originalArticleId: 7bca5584-2d31-4d9c-a66c-a168ffd83975 +redirect_from: + - /2021080/docs/mg-content-201907 + - /2021080/docs/en/mg-content-201907 + - /docs/mg-content-201907 + - /docs/en/mg-content-201907 + - /v3/docs/mg-content-201907 + - /v3/docs/en/mg-content-201907 + - /v4/docs/mg-content-201907 + - /v4/docs/en/mg-content-201907 + - /v5/docs/mg-content-201907 + - /v5/docs/en/mg-content-201907 + - /v6/docs/mg-content-201907 + - /v6/docs/en/mg-content-201907 + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-content.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-content.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-content.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-content.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-content.html + - /docs/scos/dev/module-migration-guides/migration-guide-content.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-content-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-content-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-content-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbanner-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbanner-module.md new file mode 100644 index 00000000000..9d4e386a0cc --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbanner-module.md @@ -0,0 +1,32 @@ +--- +title: Upgrade the ContentBanner module +description: Learn how to upgrade to a newer version of the Spryker content banner module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-contentbanner-201907 +originalArticleId: e8134885-8e77-45c6-ab17-bc937581a4c4 +redirect_from: + - /2021080/docs/mg-contentbanner-201907 + - /2021080/docs/en/mg-contentbanner-201907 + - /docs/mg-contentbanner-201907 + - /docs/en/mg-contentbanner-201907 + - /v3/docs/mg-contentbanner-201907 + - /v3/docs/en/mg-contentbanner-201907 + - /v4/docs/mg-contentbanner-201907 + - /v4/docs/en/mg-contentbanner-201907 + - /v5/docs/mg-contentbanner-201907 + - /v5/docs/en/mg-contentbanner-201907 + - /v6/docs/mg-contentbanner-201907 + - /v6/docs/en/mg-contentbanner-201907 + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-contentbanner.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-contentbanner.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-contentbanner.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-contentbanner.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-contentbanner.html + - /docs/scos/dev/module-migration-guides/migration-guide-contentbanner.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-contentbanner-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbanner-module.html +--- + + +{% include pbc/all/upgrade-modules/upgrade-the-contentbanner-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannergui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannergui-module.md new file mode 100644 index 00000000000..25fedd09e6d --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannergui-module.md @@ -0,0 +1,31 @@ +--- +title: Upgrade the ContentBannerGui module +description: Learn how to upgrade to a newer version of the Spryker content banner GUI module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-contentbannergui-201907 +originalArticleId: f6c315ec-d784-4771-8039-3756cd61e078 +redirect_from: + - /2021080/docs/mg-contentbannergui-201907 + - /2021080/docs/en/mg-contentbannergui-201907 + - /docs/mg-contentbannergui-201907 + - /docs/en/mg-contentbannergui-201907 + - /v3/docs/mg-contentbannergui-201907 + - /v3/docs/en/mg-contentbannergui-201907 + - /v4/docs/mg-contentbannergui-201907 + - /v4/docs/en/mg-contentbannergui-201907 + - /v5/docs/mg-contentbannergui-201907 + - /v5/docs/en/mg-contentbannergui-201907 + - /v6/docs/mg-contentbannergui-201907 + - /v6/docs/en/mg-contentbannergui-201907 + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-contentbannergui.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-contentbannergui.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-contentbannergui.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-contentbannergui.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-contentbannergui.html + - /docs/scos/dev/module-migration-guides/migration-guide-contentbannergui.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-contentbannergui-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannergui-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-contentbannergui-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannersrestapi-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannersrestapi-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannersrestapi-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentbannersrestapi-module.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilegui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilegui-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilegui-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilegui-module.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilewidget-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilewidget-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilewidget-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentfilewidget-module.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentgui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentgui-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentgui-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentgui-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentstorage-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentstorage-module.md new file mode 100644 index 00000000000..f2022e6cfcd --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentstorage-module.md @@ -0,0 +1,30 @@ +--- +title: Upgrade the ContentStorage module +description: Learn how to upgrade to a newer version of the Content Storage module from an older one in your Spryker Project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-contentstorage-201907 +originalArticleId: 3f552bca-14e4-4f4a-bb05-c65354188543 +redirect_from: + - /2021080/docs/mg-contentstorage-201907 + - /2021080/docs/en/mg-contentstorage-201907 + - /docs/mg-contentstorage-201907 + - /docs/en/mg-contentstorage-201907 + - /v3/docs/mg-contentstorage-201907 + - /v3/docs/en/mg-contentstorage-201907 + - /v4/docs/mg-contentstorage-201907 + - /v4/docs/en/mg-contentstorage-201907 + - /v5/docs/mg-contentstorage-201907 + - /v5/docs/en/mg-contentstorage-201907 + - /v6/docs/mg-contentstorage-201907 + - /v6/docs/en/mg-contentstorage-201907 + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-contentstorage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-contentstorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-contentstorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-contentstorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-contentstorage.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-contentstorage-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-contentstorage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-contentstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md new file mode 100644 index 00000000000..a1275400be6 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.md @@ -0,0 +1,11 @@ +--- +title: Migration guide - FileManager +description: Use the guide to update versions to the newer ones of the FileManager module. +last_updated: May 20, 2022 +template: module-migration-guide-template +redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanager-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-filemanager-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md new file mode 100644 index 00000000000..f2898660da7 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.md @@ -0,0 +1,11 @@ +--- +title: Migration guide - FileManagerStorage +description: Use the guide to update versions to the newer ones of the FileManagerStorage module. +last_updated: May 20, 2022 +template: module-migration-guide-template +redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerstorage-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-filemanagerstorage-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md new file mode 100644 index 00000000000..aae4a476a78 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.md @@ -0,0 +1,11 @@ +--- +title: Migration guide - FileManagerWidget +description: Use the guide to update versions to the newer ones of the FileManagerWidget module. +last_updated: May 20, 2022 +template: module-migration-guide-template +redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-filemanagerwidget-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-filemanagerwidget-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigation-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigation-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigation-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigation-module.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.md new file mode 100644 index 00000000000..f9cfc45a2db --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the NavigationGui module +description: A guide on how to upgrade to a newer version of the Spryker Navigation GUI module from an older version in your Spryker projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-navigation-gui +originalArticleId: 16ab6db2-ee08-4363-9223-8733a25a1f06 +redirect_from: + - /2021080/docs/mg-navigation-gui + - /2021080/docs/en/mg-navigation-gui + - /docs/mg-navigation-gui + - /docs/en/mg-navigation-gui + - /v1/docs/mg-navigation-gui + - /v1/docs/en/mg-navigation-gui + - /v2/docs/mg-navigation-gui + - /v2/docs/en/mg-navigation-gui + - /v3/docs/mg-navigation-gui + - /v3/docs/en/mg-navigation-gui + - /v4/docs/mg-navigation-gui + - /v4/docs/en/mg-navigation-gui + - /v5/docs/mg-navigation-gui + - /v5/docs/en/mg-navigation-gui + - /v6/docs/mg-navigation-gui + - /v6/docs/en/mg-navigation-gui + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-navigationgui.html + - /docs/scos/dev/module-migration-guides/2021080.0/migration-guide-navigationgui.html + - /docs/pbc/all/content-management-system/201907.0/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationgui-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-navigationgui-module.md %} diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.md new file mode 100644 index 00000000000..e8bec8117e6 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.md @@ -0,0 +1,33 @@ +--- +title: Upgrade the NavigationsRestApi module +description: A guide on how to upgrade to a newer version of the Spryker Navigation Rest API module from an older version in your Spryker projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-navigationsrestapi +originalArticleId: 7038210a-5f64-4293-9900-311f002dc5c7 +redirect_from: + - /2021080/docs/migration-guide-navigationsrestapi + - /2021080/docs/en/migration-guide-navigationsrestapi + - /docs/migration-guide-navigationsrestapi + - /docs/en/migration-guide-navigationsrestapi + - /v2/docs/navigationsrestapi-migration-guide + - /v2/docs/en/navigationsrestapi-migration-guide + - /v3/docs/navigationsrestapi-migration-guide + - /v3/docs/en/navigationsrestapi-migration-guide + - /v4/docs/migration-guide-navigationsrestapi + - /v4/docs/en/migration-guide-navigationsrestapi + - /v5/docs/migration-guide-navigationsrestapi + - /v5/docs/en/migration-guide-navigationsrestapi + - /v6/docs/migration-guide-navigationsrestapi + - /v6/docs/en/migration-guide-navigationsrestapi + - /docs/scos/dev/module-migration-guides/201903.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/scos/dev/module-migration-guides/201907.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/scos/dev/module-migration-guides/202005.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/migration-guide-navigationsrestapi.html + - /docs/pbc/all/content-management-system/202311.0/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-navigationsrestapi-module.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetgui-module.md b/docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetgui-module.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetgui-module.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetgui-module.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md index a260ce09e40..ca3d84bb429 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.md @@ -6,15 +6,16 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-mime-type-settings originalArticleId: 21caa74e-d4c1-4ba6-9cf7-1cd60f7368e8 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.html - /2021080/docs/managing-mime-type-settings - /2021080/docs/en/managing-mime-type-settings - /docs/managing-mime-type-settings - /docs/en/managing-mime-type-settings - /docs/scos/user/back-office-user-guides/202200.0/administration/mime-type-settings/managing-mime-type-settings.html - /docs/scos/user/back-office-user-guides/202204.0/administration/mime-type-settings/managing-mime-type-settings.html - - /docs/scos/user/back-office-user-guides/202204.0/administration/add-and-edit-mime-types.html + - /docs/scos/user/back-office-user-guides/202204.0/administration/add-and-edit-mime-types.html - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/add-and-edit-mime-types.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/add-and-edit-mime-types.html related: - title: Managing File Tree link: docs/pbc/all/content-management-system/page.version/base-shop/manage-in-the-back-office/manage-file-tree.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/best-practices-add-content-to-the-storefront-pages-using-templates-and-slots.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/best-practices-add-content-to-the-storefront-pages-using-templates-and-slots.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/best-practices-add-content-to-the-storefront-pages-using-templates-and-slots.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/best-practices-add-content-to-the-storefront-pages-using-templates-and-slots.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.md new file mode 100644 index 00000000000..706342ed9b7 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.md @@ -0,0 +1,55 @@ +--- +title: Add content items to CMS blocks +description: Learn how to add content items to CMS pages in the Spryker Cloud Commerce OS Back Office +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: + - /docs/scos/user/back-office-user-guides/202311.0/content/content-items/adding-content-items-to-cms-pages-and-blocks.html + - /docs/scos/user/back-office-user-guides/202311.0/content/content-items/editing-content-items-in-cms-pages-and-blocks.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.html +--- + +This document describes how to add content items to CMS blocks using the Back Office. + +## Prerequisites + +- Create the content items you want to add to pages. For instructions, see the docs: + - [Create abstract product list content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.html) + - [Create banner content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.html) + - [Create file list content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.html) + - [Create navigation content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.html) + - [Create product set content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.html) +- Make sure to review the [reference information](#reference-information-add-content-items-to-cms-blocks) before you start or just look it up as you go through the steps. + +## Add content items to a block + +1. Go to **Content > Blocks**. +2. On the **Overview of CMS Blocks** page, next to the block you want to add the content items to click **Edit Placeholder**. +3. On the **Edit Block Glossary: {Block ID}** page, click the tab of the placeholder you want to add the content items to. +4. Click the locale you want to add the content item to. +5. In the WYSIWYG editor, place your cursor where you want to insert the content item. +6. In the editor toolbar, click **Content Item** and select the content item type you want to add. + +![Content item menu page](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/content-item-menu-page.png) + +The **Insert a Content Item** pop-up window opens. + +![Insert content item window](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/insert-content-item-window.png) + +7. Select a content item and its template, and click **Insert**. + This closes the pop-up window. The selected content item is displayed as a widget in the editor. +![Widget UI element](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/widget-ui-element.png) +8. Optional: Add the content item to other placeholders or locales. +9. Optional: Add other content items to needed placeholders and locales. + +10. Click **Save**. + The page refreshes with a success message displayed. + +**Tips and tricks** + +To edit a content item widget, select the widget and click **Edit Widget**. + +## Reference information: Add content items to CMS blocks + + +{% include pbc/all/cart-and-checkout/manage-in-the-back-office/reference-information-add-content-items-to-cms-pages-and-blocks.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md index faf402766ef..f1bc88b6cc3 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-category-cms-blocks.md @@ -31,7 +31,7 @@ This topic describes how to create category CMS blocks in the Back Office. 4. For **TEMPLATE**, select **Category Block**. 5. Enter a **NAME**. 6. Optional: Select a **VALID FROM** date. -7. Optional: Select a **VALID TO** date. +7. Optional: Select a **VALID TO** date. 8. Optional: For **CATEGORIES: TOP**, enter and select one or more categories. 9. Optional: For **CATEGORIES: MIDDLE**, enter and select one or more categories. 10. Optional: For **CATEGORIES: BOTTOM**, enter and select one or more categories. @@ -63,4 +63,4 @@ This topic describes how to create category CMS blocks in the Back Office. ## Next steps -[Edit CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html) +[Edit CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html) diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md index dd029da9021..060b46f3cf4 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-cms-block originalArticleId: 6ff82722-c1ed-4fd5-b57e-402c7af92a70 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-cms-blocks.html - /2021080/docs/creating-cms-block - /2021080/docs/en/creating-cms-block - /docs/creating-cms-block @@ -63,4 +64,4 @@ Review the [reference information](#reference-information-create-a-cms-block) be ## Next steps -[Edit CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html) +[Edit CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html) diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md index dd5e1c63d9d..06b18daf8af 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-content-of-emails-via-cms-blocks originalArticleId: 082e03b7-4dce-4b06-b839-06e2e26a557b redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-email-cms-blocks.html - /2021080/docs/managing-content-of-emails-via-cms-blocks - /2021080/docs/en/managing-content-of-emails-via-cms-blocks - /docs/managing-content-of-emails-via-cms-blocks diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md similarity index 91% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md index a28ad229789..e6e9083fad9 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.md @@ -4,12 +4,12 @@ description: Learn how to create and implement product CMS blocks in the Spryker last_updated: June 2, 2022 template: back-office-user-guide-template redirect_from: -- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.html + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/blocks/create-product-cms-blocks.html related: - title: Edit CMS blocks link: docs/pbc/all/content-management-system/page.version/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html --- - ## Prerequisites - [Install product CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-product-cms-blocks.html). @@ -27,7 +27,7 @@ related: 4. For **TEMPLATE**, select **Product Block**. 5. Enter a **NAME**. 6. Optional: Select a **VALID FROM** date. -7. Optional: Select a **VALID TO** date. +7. Optional: Select a **VALID TO** date. 8. Optional: Enter and select one or more **PRODUCTS**. 9. Click **Save**. This opens the **Edit CMS Block Glossary** page with a success message displayed. diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md similarity index 95% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md index 5b9acce0f89..f07d47c8484 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-cms-blocks originalArticleId: 797e2d78-86eb-454d-afa1-481ee80ae7af redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-cms-blocks.html - /2021080/docs/managing-cms-blocks - /2021080/docs/en/managing-cms-blocks - /docs/managing-cms-blocks @@ -36,7 +37,7 @@ This opens the **Edit CMS Block** page. 4. Select a **TEMPLATE**. 5. Enter a **NAME**. 6. Select a **VALID FROM** date. -7. Select a **VALID TO** date. +7. Select a **VALID TO** date. 8. For **PRODUCTS**, do the following: - Next to the products you want to deassign, click **x**. - Enter and select products you want to assign. diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md similarity index 90% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md index 6e4fcaa978b..bcd43f42c3c 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.md @@ -4,12 +4,12 @@ description: Learn how to manage and edit the placeholders in CMS blocks in the last_updated: May 11, 2022 template: back-office-user-guide-template redirect_from: -- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html related: - title: CMS blocks overview link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-blocks-overview.html --- - This document describes how to edit placeholders in CMS blocks in the Back Office. ## Prerequisites @@ -24,7 +24,7 @@ This document describes how to edit placeholders in CMS blocks in the Back Offic This opens the **Blocks** page. 2. Next to the block you want to edit the placeholders of, click **Edit Placeholder**. This opens the **Edit CMS Block Glossary** page on the **Title** tab. -3. Add **CONTENT** to the needed locales and placeholders. +3. Add **CONTENT** to the needed locales and placeholders. 4. Click **Save**. This refreshes the page with a success message displayed. diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.md new file mode 100644 index 00000000000..d5ce2e3dbdc --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.md @@ -0,0 +1,64 @@ +--- +title: Create abstract product list content items +description: Learn how to create and manage abstract product list content items in the Spryker Cloud Commerce OS Back Office. +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.html +--- + +This topic describes how to create abstract product list content items in the Back Office. + +## Prerequisites + +Make sure to review [reference information](#reference-information-create-abstract-product-list-content-items) before you start, or look up the necessary information as you go through the process. + +## Create an abstract product list content item + +1. Go to **Content > Content Items**. +2. On the **Overview of Content Items** page, click **Add Content Item > Abstract Product List**. +3. On the **Create Content Item: Abstract Product List** page, enter a **NAME** +4. Optional: Enter a **DESCRIPTION**. +5. In the **Add more products** section, click **Add to list** next to the products you want to add to the list. + The products appear in the **Default** tab. +6. Optional: To reorder the added products, click **Move Up** or **Move Down** next to the needed products. +7. Optional: Repeat steps 5-6 on one or more locale-specific tabs. + +{% info_block infoBox "Multi-language setup" %} + +The following logic applies in a multi-language setup: +- Locale-specific products overwrite the default products when the Abstract Product List is rendered on a Storefront page with the [locale](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/multi-language-setup.html) selected. +- If no products are selected for a locale, the default products are displayed on a Storefront page with the locale selected. + +{% endinfo_block %} + +8. Click **Save**. + This opens the **Overview of Content Items** page with a success message displayed. The created content item is displayed in the list. + +**Tips and tricks** + +To clear product selection on a tab, click **Clear locale**. + +## Reference information: Create abstract product list content items + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Unique identifier of the content item. You will use it when adding the content item to CMS pages and blocks. | +| DESCRIPTION | Description for internal usage. | + + +### Reference information: Abstract product list content item widget + +The widget allows you to add an Abstract Product List content item to any placeholders of a page or block. + +**Use case example:** The widget can be used to display a list of products for a specific promoting campaign, for example, the Best Selling items, or a list of frequently used products on a page. + +You can view how it looks like on the store website: + +- **B2C** +Template used: Slider with product category info +![Abstract product list content item widget B2C](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Content+Item+Widgets+types%3A+Reference+Information/abstract-product-list-yves-b2c.png) + +- **B2B** +Template used: Product Slider for store/landing pages +![Abstract product list content item widget B2B](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Content+Item+Widgets+types%3A+Reference+Information/apl-template-b2b.png) diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.md new file mode 100644 index 00000000000..57b00101b8f --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.md @@ -0,0 +1,79 @@ +--- +title: Create banner content items +description: Learn how to create and manage banner content items in the Spryker Cloud Commerce OS Back Office. +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: + - /docs/scos/user/back-office-user-guides/202311.0/content/content-items/references/reference-information-content-item-widgets-types.html + - /docs/scos/user/back-office-user-guides/202311.0/content/content-items/creating-content-items.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.html +--- + +This topic describes how to create content items in the Back Office. + +## Prerequisites + +Make sure to review [reference information](#reference-information-create-banner-content-items) before you start, or look up the necessary information as you go through the process. + +## Create a banner content item + +1. Go to **Content > Content Items**. +2. On the **Overview of Content Items** page, click **Add Content Item > Banner**. +3. On the **Create Content Item: Banner** page, enter a **NAME**. +4. Optional: Enter a **DESCRIPTION**. +5. On the **Default** tab, enter the following: + - **TITLE**. + - **SUBTITLE** + - **IMAGE URL** + - **CLICK URL** + - **ALT-TEXT** +6. Optional: Repeat the previous step on the needed locale-specific tabs. + +{% info_block infoBox "Multi-language setup" %} + +The following logic applies in a multi-language setup: +- Locale-specific values overwrite the default values when the banner is rendered on a Storefront page with the [locale](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/multi-language-setup.html) selected. +- If the fields are not filled out for a locale, the default values are displayed on a Storefront page with the locale selected. + +{% endinfo_block %} + +7. Click **Save**. + This opens the **Overview of Content Items** page with a success message displayed. The content item is displayed in the list. + +**Tips and tricks** + +To clear all the fields on a tab, click **Clear locale**. + + + +## Reference information: Create banner content items + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Unique identifier of the content item. You will use it when adding the content item to CMS pages and blocks. | +| DESCRIPTION | Description for internal usage. | +| TITLE | Heading of the banner.| +| SUBTITLE| Text of the banner. | +| IMAGE URL | Address where the image element of the banner content item is stored. | +| CLICK URL | URL of the target page to which your shop visitors are redirected. | +| ALT-TEXT | Some additional text that describes the image. | + +### Reference information: Banner content item widget + +The widget allows you to display a Banner content item on the defined sections of a page or block. + +**Use case example:** The widget might be used to display a banner to promote products of a specific brand or hold a marketing campaign on the website. + +You can view how it looks like on the store website: + +- **B2C** + Template used: Big Banner w/Middle Title and Subtitle +
      + +
      + +- **B2B** + Template used: Big Banner Left Title, Subtitle and Button +![Banner content item widget B2B](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Content+Item+Widgets+types%3A+Reference+Information/banner-template-b2b.png) diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.md new file mode 100644 index 00000000000..b2e97a7584e --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.md @@ -0,0 +1,88 @@ +--- +title: Create file list content items +description: Learn how to create and manage file list content items in the Spryker Cloud Commerce OS Back Office. +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.html +--- + +This topic describes how to create file list content items in the Back Office. + +## Prerequisites + +Make sure to review [reference information](#reference-information-create-file-list-content-items) before you start, or look up the necessary information as you go through the process. + +## Create a navigation content item + +1. Go to **Content > Content Items**. +2. On the **Overview of Content Items** page, click **Add Content Item > File list**. +3. On the **Create Content Item: Product Set** page, enter a **NAME** +4. Optional: Enter a **DESCRIPTION**. +5. On the **Default** tab, add files to the list: +1. In the **Available Files** table, click **+Add to list** next to the needed files. +2. In the **Selected Files** table, arrange the files by clicking **Move Down** or **Move Up** next to the files you want to move. +6. Optional: Repeat the previous step on the needed locale-specific tabs. + +{% info_block infoBox "Multi-language setup" %} + +The following logic applies in a multi-language setup: +- Locale-specific values overwrite the default values when the banner is rendered on a Storefront page with the [locale](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/multi-language-setup.html) selected. +- If the fields are not filled out for a locale, the default values are displayed on a Storefront page with the locale selected. + +{% endinfo_block %} + +7. Click **Save**. + This opens the **Overview of Content Items** page with a success message displayed. The content item is displayed in the list. + + +**Tips and tricks** +To clear product selection on a tab, click **Clear locale**. + + +## Reference information: Create file list content items + +The following table describes the attributes on the *Create Content Item: File List* page. + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Name for a file list content item. | +| DESCRIPTION | Descriptive information on what a file list content item is used for. | +| Selected Files | Top table that displays the selected files. | +| Available Files | Bottom table that displays a list of files uploaded to the file manager. | +| ID | Sequence number. | +| File Name | File name. | + + +## Reference information: File list content item widget + +The widget allows you to insert a File List content item that will be displayed as a link or icon to download the file, such as video, image, zip, pdf, etc on a page or block. + +{% info_block infoBox %} + +You can add only files uploaded to **File Manager**. Thus, if you make any changes to files in the File Manager section, for example, remove the file, these changes will be applied in the Content Items section as well.
      See the *File Uploader Feature Overview* article to learn more about file types that can be uploaded to File Manager. + +{% endinfo_block %} + +**Use case example:** This widget can be used, for example, to submit some additional information or attach a pdf promotion presentation of your products to a page. + +You can view how it looks like on the store website: + +- **B2C** +
      Template used: File icon and size + +
      + +
      + + +- **B2B** +
      Template used: Text Link + +
      + +
      diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.md new file mode 100644 index 00000000000..9d39373d686 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.md @@ -0,0 +1,52 @@ +--- +title: Create navigation content items +description: Learn how to create and manage navigation content items in the Spryker Cloud Commerce OS Back Office. +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.html +--- + +This topic describes how to create navigation content items in the Back Office. + +## Prerequisites + +Make sure to review [reference information](#reference-information-create-navigation-content-items) before you start, or look up the necessary information as you go through the process. + +## Create a navigation content item + +1. Go to **Content > Content Items**. +2. On the **Overview of Content Items** page, click **Add Content Item > Navigation**. +3. On the **Create Content Item: Product Set** page, enter a **NAME**. +4. Optional: Enter a **DESCRIPTION**. +5. On the **Default** tab, for **NAVIGATION**, select a navigation element. +6. Optional: Repeat the previous step on the needed locale-specific tabs. + +{% info_block infoBox "Multi-language setup" %} + +The following logic applies in a multi-language setup: +- Locale-specific values overwrite the default values when the banner is rendered on a Storefront page with the [locale](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/multi-language-setup.html) selected. +- If the fields are not filled out for a locale, the default values are displayed on a Storefront page with the locale selected. + +{% endinfo_block %} + +7. Click **Save**. + This opens the **Overview of Content Items** page with a success message displayed. The content item is displayed in the list. + + +**Tips and tricks** +To clear navigation selection on a tab, click **Clear locale**. + + +## Reference information: Create navigation content items + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Name of the content item. | +| DESCRIPTION | Description of the content item. | +| NAVIGATION | A navigation element to display in the content item. To create one, see [Create navigation elements](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.html) | + +## Next steps + +- [Add content items to CMS pages and blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.html). +- [Edit content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/edit-content-items.html). diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.md new file mode 100644 index 00000000000..10761277d91 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.md @@ -0,0 +1,60 @@ +--- +title: Create product set content items +description: Learn how to create and manage product set content items in the Spryker Cloud Commerce OS Back Office. +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.html +--- + +This topic describes how to create product set content items in the Back Office. + +## Prerequisites + +Make sure to review [reference information](#reference-information-create-product-set-content-items) before you start, or look up the necessary information as you go through the process. + +## Create a product set content item + +1. Go to **Content > Content Items**. +2. On the **Overview of Content Items** page, click **Add Content Item > Product Set**. +3. On the **Create Content Item: Product Set** page, enter a **NAME** +4. Optional: Enter a **DESCRIPTION**. +5. In the **Available Product Sets** section, click **Add** next to the product set you want to add to the list. + The product set appears in the **Default** tab. +7. Optional: Repeat the previous step on one or more locale-specific tabs. + +{% info_block infoBox "Multi-language setup" %} + +The following logic applies in a multi-language setup: +- A locale-specific product set overwrites the default product set when the product set content item is rendered on a Storefront page with the [locale](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/multi-language-setup.html) selected. +- If no product set is selected for a locale, the default product set is displayed on a Storefront page with the locale selected. + +{% endinfo_block %} + +8. Click **Save**. + This opens the **Overview of Content Items** page with a success message displayed. The content item is displayed in the list. + + +## Reference information: Create product set content items + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Unique identifier of the content item. You will use it when adding the content item to CMS pages and blocks. | +| DESCRIPTION | Description for internal usage. | + + +### Reference information: Product set content item widget + +The widget allows you to add a Product Set content item to any placeholders of a page or block. The Product Set widget can be displayed as a slider or carousel. + +**Use case example:** The widget can be used to display a product set containing, for example, Basic Office Supplies, on a page from which your customers can select and add an item or all items to the cart with one click. + +You can view how it looks like on the store website: + +- **B2C** +Template used: Images left side, products right side and only add all button) +![Product set content item widget B2C](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Content+Item+Widgets+types%3A+Reference+Information/product-set-yves-b2c.png) + +- **B2B** +Template used: Product Set for landing pages +![Product set content item widget B2B](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Content+Item+Widgets+types%3A+Reference+Information/product-set-template-b2b.png) diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md index b0fb9799f36..2cd4b85445b 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/editing-content-items originalArticleId: 3b56fb8f-8503-472a-8601-b69c876c04b1 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/content-items/edit-content-items.html - /2021080/docs/editing-content-items - /2021080/docs/en/editing-content-items - /docs/editing-content-items diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md index dcae8d89d3d..50cd126eb95 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-content-in-the-back-office.md @@ -1,6 +1,6 @@ --- title: Manage content the Back Office -description: Learn more about Content items with these guides, helping you to create and manage different content items in the Spryker Back Office +description: Learn more about Content items with these guides, helping you to create and manage different content items in the Spryker Back Office last_updated: Apr 13, 2023 template: back-office-user-guide-template redirect_from: diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-list.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-list.md similarity index 95% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-list.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-list.md index a84711a7e56..7183b3d498b 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-list.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-list.md @@ -6,14 +6,15 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-file-list originalArticleId: b5a71151-eac1-4dd9-84e5-28ce7beb346a redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-list.html - /2021080/docs/managing-file-list - /2021080/docs/en/managing-file-list - /docs/managing-file-list - /docs/en/managing-file-list - /docs/scos/user/back-office-user-guides/202200.0/content/file-manager/managing-file-list.html - - /docs/scos/user/back-office-user-guides/202204.0/content/file-manager/managing-file-list.html + - /docs/scos/user/back-office-user-guides/202204.0/content/file-manager/managing-file-list.html - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/manage-file-list.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/manage-file-list.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/manage-file-list.html related: - title: Managing File Tree link: docs/pbc/all/content-management-system/page.version/base-shop/manage-in-the-back-office/manage-file-tree.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-tree.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-tree.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-tree.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-tree.md index 0e7296ffd8b..8723b37ab5a 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-tree.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-file-tree.md @@ -6,14 +6,15 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-file-tree originalArticleId: b9ec164d-4687-4d68-ab77-5e98b284dd1b redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-file-tree.html - /2021080/docs/managing-file-tree - /2021080/docs/en/managing-file-tree - /docs/managing-file-tree - /docs/en/managing-file-tree - /docs/scos/user/back-office-user-guides/202200.0/content/file-manager/managing-file-tree.html - - /docs/scos/user/back-office-user-guides/202204.0/content/file-manager/managing-file-tree.html + - /docs/scos/user/back-office-user-guides/202204.0/content/file-manager/managing-file-tree.html - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/manage-file-tree.html - - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/manage-file-tree.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/manage-file-tree.html related: - title: Managing File List link: docs/pbc/all/content-management-system/page.version/base-shop/manage-in-the-back-office/manage-file-list.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-slots.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-slots.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-slots.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-slots.md index d5f6cd4ed2a..b1f1119c562 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-slots.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/manage-slots.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-slots originalArticleId: 06d8bf64-4aee-4959-abae-f3fb849ccaa0 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/manage-slots.html - /docs/scos/user/back-office-user-guides/202001.0/content/slots/slots.html - /docs/scos/user/back-office-user-guides/202108.0/content/slots/managing-slots.html - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/manage-slots.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md index da50d65622c..e6d41ccd517 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.md @@ -4,6 +4,7 @@ description: Learn how to create and manage navigation elements in the Spryker B last_updated: Nov 22, 2022 template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-elements.html - /2021080/docs/managing-navigation-elements - /2021080/docs/en/managing-navigation-elements - /docs/managing-navigation-elements diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-nodes.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/create-navigation-nodes.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/create-navigation-nodes.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/create-navigation-nodes.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/delete-navigation-nodes.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/delete-navigation-nodes.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/delete-navigation-nodes.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/delete-navigation-nodes.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/duplicate-navigation-elements.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/duplicate-navigation-elements.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/navigation/duplicate-navigation-elements.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/duplicate-navigation-elements.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-elements.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-elements.md new file mode 100644 index 00000000000..3f781e25ef0 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-elements.md @@ -0,0 +1,28 @@ +--- +title: Edit navigation elements +description: Learn how to edit navigation elements in the Spryker Cloud Commerce OS Back Office +last_updated: Dec 2, 2022 +template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/navigation/edit-navigation-nodes.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-elements.html + +--- + +To edit a navigation element in the Back Office, follow the steps: + +1. Go to **Content > Navigation**. + This opens the **Overview of Navigation Elements** page. +2. In the **List of navigation elements** pane, click **Edit** next to the navigation element you want to edit. +3. On the **Edit Navigation Element: [Element Number]** page, enter a **NAME**. +4. Select or clear the **ACTIVE** checkbox to activate or deactivate the navigation element. +5. Click **Save**. +This opens the **Overview of Navigation Elements** page. You can see the message about the successful navigation element update. The changes are reflected in the **List of navigation elements** pane. + +## Reference information: Edit navigation elements + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Name of the navigation element. It is displayed on the Storefront. | +| KEY | Unique identifier of the navigation element used to reference it on the Storefront. | +| ACTIVE | Checkbox to define if the navigation element is active. Inactive navigation elements and their child nodes are not displayed on Storefront. | diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-nodes.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-nodes.md new file mode 100644 index 00000000000..0a188dc560e --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-nodes.md @@ -0,0 +1,34 @@ +--- +title: Edit navigation nodes +description: Learn how to edit navigation nodes in the Spryker Cloud Commerce OS Back Office +last_updated: Dec 2, 2022 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/navigation/edit-navigation-nodes.html +--- + +To edit a navigation node, follow the steps: + +1. Go to **Content > Navigation**. + This opens the **Overview of Navigation Elements** page. +2. In the **LIST OF NAVIGATION ELEMENTS** pane, select the navigation element owning the node you want to edit. +3. In the **NAVIGATION TREE** pane, select the node you want to edit. +4. In the **EDIT NODE** pane select a node **TYPE**. +5. Update the needed fields per locale. +6. Select **VALID FROM** and **VALID TO** dates. +7. To activate or deactivate the node, select or clear **ACTIVE** respectively. +4. Click **Save**. + +This displays a success message. + +## Reference information: Edit navigation nodes + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| TYPE | Type of the navigation node. For all the types, see [Navigation node types](#reference-information-navigation-node-types). | +| Title | Name of the navigation node. It is displayed on the Storefront. | +| Custom CSS class | CSS class defining the design of the navigation node. Usually, a front-end developer creates them. | +| VALID FROM and VALID TO | Navigation node is displayed on the Storefront between the dates defined in these fields, inclusively. | +| ACTIVE | Checkbox to define if the navigation node is active. Inactive navigation nodes and their sub-nodes are not displayed on the Storefront. | + +## Reference information: Navigation node types diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/add-content-items-to-cms-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/add-content-items-to-cms-pages.md new file mode 100644 index 00000000000..035ada34fc1 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/add-content-items-to-cms-pages.md @@ -0,0 +1,55 @@ +--- +title: Add content items to CMS pages +description: Learn how enrich your CMS pages and add content items to CMS pages in the Spryker Cloud Commerce OS Back Office +last_updated: Oct 22, 2022 +template: back-office-user-guide-template +redirect_from: +- docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/pages/add-content-items-to-cms-pages.html +- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/pages/add-content-items-to-cms-pages.html +--- + +This document describes how to add content items to Storefront pages using the Back Office. + +## Prerequisites + +- Create the content items you want to add to pages. For instructions, see the docs: + - [Create abstract product list content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-abstract-product-list-content-items.html) + - [Create banner content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.html) + - [Create file list content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-file-list-content-items.html) + - [Create navigation content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-navigation-content-items.html) + - [Create product set content items](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-product-set-content-items.html) +- Make sure to review the [reference information](#reference-information-add-content-items-to-cms-pages) before you start or just look it up as you go through the steps. + +## Add content items to a page + +1. Go to **Content > Pages**. +2. On the **Overview of CMS Pages** page, next to the page you want to add a content item to, click **Edit > Placeholders**. +3. On the **Edit Placeholders: CMS Page [Name]** page, click the tab of the placeholder you want to add the content item to. +4. Click the locale you want to add the content item to. +5. In the WYSIWYG editor, place your cursor where you want to insert the content item. +6. In the editor toolbar, click **Content Item** and select the content item type you want to add. + +![Content item menu page](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/content-item-menu-page.png) + +The **Insert a Content Item** pop-up window opens. + +![Insert content item window](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/insert-content-item-window.png) + +7. Select a content item and its template, and click **Insert**. + This closes the pop-up window. The selected content item is displayed as a widget in the editor. +![Widget UI element](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Content+Management+System/Content+Item+Widgets/Adding+Content+Item+Widgets+to+Pages+and+Blocks/widget-ui-element.png) +8. Optional: Add the content item to other placeholders or locales. +9. Optional: Add other content items to needed placeholders and locales. + +10. Click **Save**. + The page refreshes with a success message displayed. If the page is published and active, the added content items are displayed on the Storefront. + +**Tips and tricks** + +To edit a content item widget, select the widget and click **Edit Widget**. +To preview the changes on the Storefront, click **Preview**. + +## Reference information: Add content items to CMS pages + + +{% include pbc/all/cart-and-checkout/manage-in-the-back-office/reference-information-add-content-items-to-cms-pages-and-blocks.md %} diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md index d3e7f7f932a..dcb838943a5 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-a-cms-page originalArticleId: 5746d7b7-637d-4602-898d-a83ab9da0498 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/create-cms-pages.html - /2021080/docs/creating-a-cms-page - /2021080/docs/en/creating-a-cms-page - /docs/creating-a-cms-page diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md index a30d69daa66..e7d3fd5680c 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/editing-cms-pages originalArticleId: a0f086e5-f744-4a25-8e3d-fa8d065a34ba redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/edit-cms-pages.html - /2021080/docs/editing-cms-pages - /2021080/docs/en/editing-cms-pages - /docs/editing-cms-pages diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md index 82c51297066..9c0657e6f82 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-cms-pages originalArticleId: 3a2b07b3-3c56-421d-8bba-8ff7ed07ff62 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/preview-cms-pages.html - /2021080/docs/managing-cms-pages - /2021080/docs/en/managing-cms-pages - /docs/managing-cms-pages @@ -14,7 +15,7 @@ redirect_from: - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/pages/manage-cms-pages.html - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/pages/manage-cms-pages.html - /docs/pbc/all/content-management-system/202311.0/base-shop/manage-in-the-back-office/pages/manage-cms-pages.html - + related: - title: CMS Page overview link: docs/pbc/all/content-management-system/page.version/base-shop/cms-feature-overview/cms-pages-overview.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md similarity index 94% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md index b356a8aa05b..677ac18e6ba 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-cms-page-versions originalArticleId: 0110b8f0-26d9-41b8-99f7-1fc55efba8be redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/pages/view-cms-pages-and-history.html - /2021080/docs/managing-cms-page-versions - /2021080/docs/en/managing-cms-page-versions - /docs/managing-cms-page-versions diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md index e6a6f45653c..9380f08725e 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-product-sets originalArticleId: 20263bb8-2952-4db2-bde6-1a17a8e76017 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/create-product-sets.html - /2021080/docs/creating-product-sets - /2021080/docs/en/creating-product-sets - /docs/creating-product-sets diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/delete-product-sets.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/delete-product-sets.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/delete-product-sets.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/delete-product-sets.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md similarity index 97% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md index 457e518fdf5..71d1f6c5117 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-product-sets originalArticleId: eaa91090-6e3e-4af1-bc98-f9bae069939a redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.html - /2021080/docs/managing-product-sets - /2021080/docs/en/managing-product-sets - /docs/managing-product-sets diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md similarity index 84% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md index 4fc4721f6a2..4ac90535f29 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.md @@ -4,8 +4,9 @@ description: Learn how to reorder product sets that you have configured within t template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: -- /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/product-sets/reorder-product-sets.html -- /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.html + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.html + - /docs/pbc/all/content-management-system/202311.0/manage-in-the-back-office/product-sets/reorder-product-sets.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-in-the-back-office/product-sets/reorder-product-sets.html related: - title: Create product sets link: docs/pbc/all/content-management-system/page.version/base-shop/manage-in-the-back-office/product-sets/create-product-sets.html @@ -18,7 +19,6 @@ related: - title: Product Sets feature overview link: docs/pbc/all/content-management-system/page.version/base-shop/product-sets-feature-overview.html --- - This document describes how to reorder product sets in the Back Office by defining weight. A product set's weight, relatively to other the other product sets' weight on a page defines how high it's on a page. To reorder product sets by editing their weight, do the following: diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/view-product-sets.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/view-product-sets.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/product-sets/view-product-sets.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/product-sets/view-product-sets.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/redirects/create-cms-redirects.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/redirects/create-cms-redirects.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/redirects/create-cms-redirects.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/redirects/create-cms-redirects.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/redirects/edit-cms-redirects.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/redirects/edit-cms-redirects.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-in-the-back-office/redirects/edit-cms-redirects.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-in-the-back-office/redirects/edit-cms-redirects.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.md new file mode 100644 index 00000000000..20b74fe73d1 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.md @@ -0,0 +1,372 @@ +--- +title: "Glue API: Retrieve abstract product list content items" +description: Abstract Product List API provides resources to retrieve data on abstract products included in the Abstract Product List content item for all or specific locale +last_updated: Jun 22, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retireving-abstract-product-list-content-items +originalArticleId: 2fcfc554-7617-455e-bb22-ead08bb774b9 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/retrieving-content-items/retrieving-abstract-product-list-content-items.html + - /docs/scos/dev/glue-api-guides/202311.0/retrieving-content-items/retrieving-abstract-product-list-content-items.html + - /docs/pbc/all/content-management-system/202311.0/manage-using-glue-api/retrieve-abstract-product-list-content-items.html + - /docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-abstract-product-list-content-items.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-list-content-items.html +related: + - title: Content Items feature overview + link: docs/pbc/all/content-management-system/page.version/base-shop/content-items-feature-overview.html +--- + +This endpoint allows retrieving information about abstract product list content items. + +## Installation + +For details on the modules that provide the API functionality and how to install them, see [Content Items API](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-content-items-glue-api.html). + + + +## Retrieve Abstract Product List content item + +To retrieve information about an abstract product list content item, send the request: + +*** +`GET` **/content-product-abstract-lists/*{% raw %}{{{% endraw %}content_item_key{% raw %}}}{% endraw %}*** + +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}content_item_key{% raw %}}}{% endraw %}*** | Unique identifier of the content item to retrieve. | + +### Request + +| HEADER KEY | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| locale | | Defines the locale to retrieve the content item information for. If not specified, the endpoint returns the information for the *default* locale. | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | abstract-products | + +| SAMPLE REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/content-product-abstract-lists/apl-1` | Retrieve information about the abstract product list with ID `apl-1`. | +| `GET https://glue.mysprykershop.com/content-product-abstract-lists/apl-1?include=abstract-products` | Retrieve information about the abstract product list with id `apl-1`. Include information about its abstract products. | + + +
      +Response sample: retrieve Abstract Product List content item + +```json +{ +    "data": { +        "type": "content-product-abstract-lists", +        "id": "apl-1", +        "links": { +            "self": "https://glue.mysprykershop.com/content-product-abstract-lists/apl-1" +        } +    } +} +``` + +
      + +
      +Response sample: retrieve Abstract Product List content item with the details on its abstract products + +```json +{ +    "data": { +        "type": "content-product-abstract-lists", +        "id": "apl-1", +        "links": { +            "self": "https://glue.mysprykershop.com/content-product-abstract-lists/apl-1?include=abstract-products" +        }, +        "relationships": { +            "abstract-products": { +                "data": [ +                    { +                        "type": "abstract-products", +                        "id": "204" +                    }, +                    { +                        "type": "abstract-products", +                        "id": "205" +                    } +                ] +            } +        } +    }, +    "included": [ +        { +            "type": "abstract-products", +            "id": "204", +            "attributes": { +                "sku": "204", +                "averageRating": null, +                "reviewCount": 0, +                "name": "Sony PXW-FS5K", +                "description": "Take control and shoot your way Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic video images plus high-quality audio in cinematic 24 frames per second. Add some power to your shots: Add an E-mount lens with a power zoom and smoothly focus in on your subject with up to 11x magnification. Capture it all in HD: Capture all the detail with Full HD 1920 x 1080 video shooting (AVCHD format) at 24mbs for increased detail and clarity. DSLR quality photos: Shoot stills with DSLR-like picture quality and shallow depth of field for professional looking shots.", +                "attributes": { +                    "iso_sensitivity": "3200", +                    "sensor_type": "CMOS", +                    "white_balance": "Auto", +                    "wi_fi": "yes", +                    "brand": "Sony", +                    "color": "Black" +                }, +                "superAttributesDefinition": [ +                    "color" +                ], +                "superAttributes": { +                    "color": [ +                        "Black" +                    ] +                }, +                "attributeMap": { +                    "product_concrete_ids": [ +                        "204_29851280" +                    ], +                    "super_attributes": { +                        "color": [ +                            "Black" +                        ] +                    }, +                    "attribute_variants": [] +                }, +                "metaTitle": "Sony PXW-FS5K", +                "metaKeywords": "Sony,Smart Electronics", +                "metaDescription": "Take control and shoot your way Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic vide", +                "attributeNames": { +                    "iso_sensitivity": "ISO sensitivity", +                    "sensor_type": "Sensor type", +                    "white_balance": "White balance", +                    "wi_fi": "Wi-Fi", +                    "brand": "Brand", +                    "color": "Color" +                }, +                "url": "/en/sony-pxw-fs5k-204" +            }, +            "links": { +                "self": "https://glue.mysprykershop.com/abstract-products/204" +            } +        }, +        { +            "type": "abstract-products", +            "id": "205", +            "attributes": { +                "sku": "205", +                "averageRating": null, +                "reviewCount": 0, +                "name": "Toshiba CAMILEO S30", +                "description": "Reach out Reach out with your 10x digital zoom and control recordings on the large 3-inch touchscreen LCD monitor. Create multi-scene video files thanks to the new Pause feature button! Save the best moments of your life with your CAMILEO S30 camcorder. Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic video images plus high-quality audio in cinematic 24 frames per second.", +                "attributes": { +                    "total_megapixels": "8 MP", +                    "display": "LCD", +                    "self_timer": "10 s", +                    "weight": "118 g", +                    "brand": "Toshiba", +                    "color": "Black" +                }, +                "superAttributesDefinition": [ +                    "total_megapixels", +                    "color" +                ], +                "superAttributes": { +                    "color": [ +                        "Grey" +                    ] +                }, +                "attributeMap": { +                    "product_concrete_ids": [ +                        "205_6350138" +                    ], +                    "super_attributes": { +                        "color": [ +                            "Grey" +                        ] +                    }, +                    "attribute_variants": [] +                }, +                "metaTitle": "Toshiba CAMILEO S30", +                "metaKeywords": "Toshiba,Smart Electronics", +                "metaDescription": "Reach out Reach out with your 10x digital zoom and control recordings on the large 3-inch touchscreen LCD monitor. Create multi-scene video files thanks to", +                "attributeNames": { +                    "total_megapixels": "Total Megapixels", +                    "display": "Display", +                    "self_timer": "Self-timer", +                    "weight": "Weight", +                    "brand": "Brand", +                    "color": "Color" +                }, +                "url": "/en/toshiba-camileo-s30-205" +            }, +            "links": { +                "self": "https://glue.mysprykershop.com/abstract-products/205" +            } +        } +    ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + + +## Retrieve Abstract Product List with its abstract products + +To retrieve an Abstract Product List content item with its abstract products, you can retrieve [Abstract Product List data](#product-list) and include `abstract-products` as the resource relation. Alternatively, you can run this request: + +*** +`GET` **/content-product-abstract-lists/*{% raw %}{{{% endraw %}content_item_key{% raw %}}}{% endraw %}*/abstract-products** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}content_item_key{% raw %}}}{% endraw %}*** | Unique identifier of the content item to retrieve. | + +### Request + +| HEADER KEY | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| locale | | Defines the locale to retrieve the content item information for. If not specified, the endpoint returns the information for the *default* locale. | + +Request sample: retrieve Abstract Product List with its abstract products + +`GET https://mysprykershop.com/content-product-abstract-lists/apl-1/abstract-products` + +### Response + +
      +Response sample: retrieve Abstract Product List content item with the details on its abstract products + +```json +{ +    "data": [ +        { +            "type": "abstract-products", +            "id": "204", +            "attributes": { +                "sku": "204", +                "averageRating": null, +                "reviewCount": 0, +                "name": "Sony PXW-FS5K", +                "description": "Take control and shoot your way Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic video images plus high-quality audio in cinematic 24 frames per second. Add some power to your shots: Add an E-mount lens with a power zoom and smoothly focus in on your subject with up to 11x magnification. Capture it all in HD: Capture all the detail with Full HD 1920 x 1080 video shooting (AVCHD format) at 24mbs for increased detail and clarity. DSLR quality photos: Shoot stills with DSLR-like picture quality and shallow depth of field for professional looking shots.", +                "attributes": { +                    "iso_sensitivity": "3200", +                    "sensor_type": "CMOS", +                    "white_balance": "Auto", +                    "wi_fi": "yes", +                    "brand": "Sony", +                    "color": "Black" +                }, +                "superAttributesDefinition": [ +                    "color" +                ], +                "superAttributes": { +                    "color": [ +                        "Black" +                    ] +                }, +                "attributeMap": { +                    "product_concrete_ids": [ +                        "204_29851280" +                    ], +                    "super_attributes": { +                        "color": [ +                            "Black" +                        ] +                    }, +                    "attribute_variants": [] +                }, +                "metaTitle": "Sony PXW-FS5K", +                "metaKeywords": "Sony,Smart Electronics", +                "metaDescription": "Take control and shoot your way Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic vide", +                "attributeNames": { +                    "iso_sensitivity": "ISO sensitivity", +                    "sensor_type": "Sensor type", +                    "white_balance": "White balance", +                    "wi_fi": "Wi-Fi", +                    "brand": "Brand", +                    "color": "Color" +                }, +                "url": "/en/sony-pxw-fs5k-204" +            }, +            "links": { +                "self": "https://glue.mysprykershop.com/abstract-products/204" +            } +        }, +        { +            "type": "abstract-products", +            "id": "205", +            "attributes": { +                "sku": "205", +                "averageRating": null, +                "reviewCount": 0, +                "name": "Toshiba CAMILEO S30", +                "description": "Reach out Reach out with your 10x digital zoom and control recordings on the large 3-inch touchscreen LCD monitor. Create multi-scene video files thanks to the new Pause feature button! Save the best moments of your life with your CAMILEO S30 camcorder. Real cinematic images and sound: Explore a new dimension in creative artistry. Capture beautifully detailed, cinematic video images plus high-quality audio in cinematic 24 frames per second.", +                "attributes": { +                    "total_megapixels": "8 MP", +                    "display": "LCD", +                    "self_timer": "10 s", +                    "weight": "118 g", +                    "brand": "Toshiba", +                    "color": "Black" +                }, +                "superAttributesDefinition": [ +                    "total_megapixels", +                    "color" +                ], +                "superAttributes": { +                    "color": [ +                        "Grey" +                    ] +                }, +                "attributeMap": { +                    "product_concrete_ids": [ +                        "205_6350138" +                    ], +                    "super_attributes": { +                        "color": [ +                            "Grey" +                        ] +                    }, +                    "attribute_variants": [] +                }, +                "metaTitle": "Toshiba CAMILEO S30", +                "metaKeywords": "Toshiba,Smart Electronics", +                "metaDescription": "Reach out Reach out with your 10x digital zoom and control recordings on the large 3-inch touchscreen LCD monitor. Create multi-scene video files thanks to", +                "attributeNames": { +                    "total_megapixels": "Total Megapixels", +                    "display": "Display", +                    "self_timer": "Self-timer", +                    "weight": "Weight", +                    "brand": "Brand", +                    "color": "Color" +                }, +                "url": "/en/toshiba-camileo-s30-205" +            }, +            "links": { +                "self": "glue.mysprykershop.com/abstract-products/205" +            } +        } +    ], +    "links": { +        "self": "https://glue.mysprykershop.com/content-product-abstract-lists/apl-1/abstract-products" +    } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 2201 | Content item is not found. | +| 2202 | Content key is missing. | +| 2203 | Content type is invalid. | + +For generic Glue Application errors that can also occur, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md similarity index 96% rename from docs/pbc/all/content-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md index e29a1d89aae..30913fc2e9b 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.md @@ -5,6 +5,7 @@ last_updated: Jun 16, 2021 template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-banner-content-items redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-banner-content-items.html - /docs/scos/dev/glue-api-guides/202311.0/retrieving-content-items/retrieving-banner-content-items.html - /docs/pbc/all/content-management-system/202311.0/manage-using-glue-api/retrieve-banner-content-items.html - /docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-banner-content-items.html diff --git a/docs/pbc/all/content-management-system/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md similarity index 100% rename from docs/pbc/all/content-management-system/202410.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-cms-pages.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-navigation-trees.md b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-navigation-trees.md new file mode 100644 index 00000000000..dfdbe9f4284 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-navigation-trees.md @@ -0,0 +1,1126 @@ +--- +title: "Glue API: Retrieve navigation trees" +description: The topic demonstrates how to retrieve navigation trees with the help of API endpoints. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-navigation-trees +originalArticleId: 6dba4315-b7d0-485e-880e-b7d4ff125a3a +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/retrieving-navigation-trees.html + - /docs/scos/dev/glue-api-guides/202311.0/retrieving-navigation-trees.html + - /docs/pbc/all/content-management-system/202311.0/manage-using-glue-api/retrieve-navigation-trees.html + - /docs/pbc/all/content-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-navigation-trees.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-navigation-trees.html +related: + - title: Upgrade the NavigationsRestApi module + link: docs/pbc/all/content-management-system/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-navigationsrestapi-module.html + - title: Retrieving category trees + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html +--- + +The Navigation feature enables back-end developers to create navigation elements for Storefront. The navigation elements help shop users to navigate the shop and locate the necessary products and other content. Navigation elements can be linked to CMS pages, categories, as well as internal and external links. + +A navigation element with its child nodes forms a navigation tree. You can only retrieve the entire navigation tree but not a navigation element. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Navigation](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-navigation-feature.html). + +## Retrieving a navigation tree + +To retrieve a navigation tree, send the request: + +--- +`GET`**/navigations/*{% raw %}{{{% endraw %}navigation_key{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}navigation_key{% raw %}}}{% endraw %}*** | Unique identifier of a navigation tree to get information for. It is always case sensitive. | + +### Request + +Request sample: `GET http://glue.mysprykershop.com/navigations/SOCIAL_LINKS` + + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | category-nodes | + +{% info_block infoBox "Performance" %} + +If a navigation tree has a category child node, include the `category-nodes` resource to retrieve the category information without extra calls to the `/category-nodes` endpoint. Retrieving the category information can affect the performance of the Navigation API. We recommend doing it only when it's absolutely necessary. + +{% endinfo_block %} + +### Response + +
      +Response sample + +```json +{ + "data": { + "type": "navigations", + "id": "SOCIAL_LINKS", + "attributes": { + "name": "Social links", + "isActive": true, + "locale": null, + "nodes": [ + { + "isActive": true, + "nodeType": "external_url", + "title": "Twitter", + "url": "https://twitter.com/sprysys?lang=de", + "cssClass": "twitter", + "validFrom": null, + "validTo": null, + "children": [] + }, + { + "isActive": true, + "nodeType": "external_url", + "title": "Xing", + "url": "https://www.xing.com/companies/sprykersystemsgmbh", + "cssClass": "xing", + "validFrom": null, + "validTo": null, + "children": [] + }, + { + "isActive": true, + "nodeType": "external_url", + "title": "LinkedIn", + "url": "https://www.linkedin.com/company/spryker-systems-gmbh", + "cssClass": "linkedin", + "validFrom": null, + "validTo": null, + "children": [] + }, + { + "isActive": true, + "nodeType": "external_url", + "title": "YouTube", + "url": "https://www.youtube.com/channel/UC6lVOEbqXxUh0W5FMTvlPDQ", + "cssClass": "youtube", + "validFrom": null, + "validTo": null, + "children": [] + } + ] + }, + "links": { + "self": "http://glue.mysprykershop.com/navigations/SOCIAL_LINKS" + } + } +} +``` + +
      + +
      +Response sample with category nodes + +```json +{ + "data": { + "type": "navigations", + "id": "MAIN_NAVIGATION", + "attributes": { + "nodes": [ + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": 6, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Notebooks", + "url": "/en/computer/notebooks", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 8, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Tablets", + "url": "/en/computer/tablets", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 12, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartphones", + "url": "/en/telecom-&-navigation/smartphones", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 10, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartwatches", + "url": "/en/smart-wearables/smartwatches", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Top Categories", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 5, + "nodeType": "category", + "children": [ + { + "resourceId": 6, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Notebooks", + "url": "/en/computer/notebooks", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 7, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Workstations", + "url": "/en/computer/pc's/workstations", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 8, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Tablets", + "url": "/en/computer/tablets", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Computer", + "url": "/en/computer", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 2, + "nodeType": "category", + "children": [ + { + "resourceId": 4, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Digital Cameras", + "url": "/en/cameras-&-camcorders/digital-cameras", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 3, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Camcorders", + "url": "/en/cameras-&-camcorders/camcorders", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Cameras", + "url": "/en/cameras-&-camcorders", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": 11, + "nodeType": "category", + "children": [ + { + "resourceId": 12, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartphones", + "url": "/en/telecom-&-navigation/smartphones", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Telecom & Navigation", + "url": "/en/telecom-&-navigation", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 9, + "nodeType": "category", + "children": [ + { + "resourceId": 10, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Smartwatches", + "url": "/en/smart-wearables/smartwatches", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Smart Wearables", + "url": "/en/smart-wearables", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "Other Categories", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": 2, + "nodeType": "cms_page", + "children": [], + "isActive": true, + "title": "GTC", + "url": "/en/gtc", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 3, + "nodeType": "cms_page", + "children": [], + "isActive": true, + "title": "Data privacy", + "url": "/en/privacy", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 6, + "nodeType": "cms_page", + "children": [], + "isActive": true, + "title": "Demo Landing Page", + "url": "/en/demo-landing-page", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "CMS Pages", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "label", + "children": [ + { + "resourceId": null, + "nodeType": "external_url", + "children": [], + "isActive": true, + "title": "Spryker Tech Blog", + "url": "https://tech.spryker.com/", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "external_url", + "children": [], + "isActive": true, + "title": "Spryker Documentation", + "url": "http://spryker.github.io", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "External Links", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 13, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Product Bundles", + "url": "/en/product-bundles", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "link", + "children": [], + "isActive": true, + "title": "Product Sets", + "url": "/en/product-sets", + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": 14, + "nodeType": "category", + "children": [], + "isActive": true, + "title": "Variant Showcase", + "url": "/en/variant-showcase", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "isActive": true, + "title": "More", + "url": null, + "cssClass": null, + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "link", + "children": [], + "isActive": true, + "title": "Sale %", + "url": "/en/outlet", + "cssClass": "sale__red", + "validFrom": null, + "validTo": null + }, + { + "resourceId": null, + "nodeType": "link", + "children": [], + "isActive": true, + "title": "New", + "url": "/en/new", + "cssClass": null, + "validFrom": null, + "validTo": null + } + ], + "name": "Top Navigation", + "isActive": true + }, + "links": { + "self": "http://glue.mysprykershop.com/navigations/MAIN_NAVIGATION" + }, + "relationships": { + "category-nodes": { + "data": [ + { + "type": "category-nodes", + "id": "13" + }, + { + "type": "category-nodes", + "id": "14" + }, + { + "type": "category-nodes", + "id": "10" + }, + { + "type": "category-nodes", + "id": "12" + }, + { + "type": "category-nodes", + "id": "11" + }, + { + "type": "category-nodes", + "id": "9" + }, + { + "type": "category-nodes", + "id": "4" + }, + { + "type": "category-nodes", + "id": "3" + }, + { + "type": "category-nodes", + "id": "6" + }, + { + "type": "category-nodes", + "id": "7" + }, + { + "type": "category-nodes", + "id": "8" + }, + { + "type": "category-nodes", + "id": "5" + }, + { + "type": "category-nodes", + "id": "2" + } + ] + } + } + }, + "included": [ + { + "type": "category-nodes", + "id": "13", + "attributes": { + "nodeId": 13, + "name": "Product Bundles", + "metaTitle": "Product Bundles", + "metaKeywords": "Product Bundles", + "metaDescription": "These are multiple products bundled to a new product.", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 60 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/13" + } + }, + { + "type": "category-nodes", + "id": "14", + "attributes": { + "nodeId": 14, + "name": "Variant Showcase", + "metaTitle": "Variant Showcase"w, + "metaKeywords": "Variant Showcase", + "metaDescription": "These are products that have more than 1 variant.", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 50 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/14" + } + }, + { + "type": "category-nodes", + "id": "10", + "attributes": { + "nodeId": 10, + "name": "Smartwatches", + "metaTitle": "Smartwatches", + "metaKeywords": "Smartwatches", + "metaDescription": "Smartwatches", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 9, + "name": "Smart Wearables", + "metaTitle": "Smart Wearables", + "metaKeywords": "Smart Wearables", + "metaDescription": "Smart Wearables", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 70 + } + ], + "order": 70 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/10" + } + }, + { + "type": "category-nodes", + "id": "12", + "attributes": { + "nodeId": 12, + "name": "Smartphones", + "metaTitle": "Smartphones", + "metaKeywords": "Smartphones", + "metaDescription": "Smartphones", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 11, + "name": "Telecom & Navigation", + "metaTitle": "Telecom & Navigation", + "metaKeywords": "Telecom & Navigation", + "metaDescription": "Telecom & Navigation", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 80 + } + ], + "order": 80 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/12" + } + }, + { + "type": "category-nodes", + "id": "11", + "attributes": { + "nodeId": 11, + "name": "Telecom & Navigation", + "metaTitle": "Telecom & Navigation", + "metaKeywords": "Telecom & Navigation", + "metaDescription": "Telecom & Navigation", + "isActive": true, + "children": [ + { + "nodeId": 12, + "name": "Smartphones", + "metaTitle": "Smartphones", + "metaKeywords": "Smartphones", + "metaDescription": "Smartphones", + "isActive": true, + "children": [], + "parents": [], + "order": 80 + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 80 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/11" + } + }, + { + "type": "category-nodes", + "id": "9", + "attributes": { + "nodeId": 9, + "name": "Smart Wearables", + "metaTitle": "Smart Wearables", + "metaKeywords": "Smart Wearables", + "metaDescription": "Smart Wearables", + "isActive": true, + "children": [ + { + "nodeId": 10, + "name": "Smartwatches", + "metaTitle": "Smartwatches", + "metaKeywords": "Smartwatches", + "metaDescription": "Smartwatches", + "isActive": true, + "children": [], + "parents": [], + "order": 70 + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 70 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/9" + } + }, + { + "type": "category-nodes", + "id": "4", + "attributes": { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 90 + } + ], + "order": 100 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/4" + } + }, + { + "type": "category-nodes", + "id": "3", + "attributes": { + "nodeId": 3, + "name": "Camcorders", + "metaTitle": "Camcorders", + "metaKeywords": "Camcorders", + "metaDescription": "Camcorders", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 90 + } + ], + "order": 90 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/3" + } + }, + { + "type": "category-nodes", + "id": "6", + "attributes": { + "nodeId": 6, + "name": "Notebooks", + "metaTitle": "Notebooks", + "metaKeywords": "Notebooks", + "metaDescription": "Notebooks", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + } + ], + "order": 100 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/6" + } + }, + { + "type": "category-nodes", + "id": "7", + "attributes": { + "nodeId": 7, + "name": "Pc's/Workstations", + "metaTitle": "Pc's/Workstations", + "metaKeywords": "Pc's/Workstations", + "metaDescription": "Pc's/Workstations", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + } + ], + "order": 90 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/7" + } + }, + { + "type": "category-nodes", + "id": "8", + "attributes": { + "nodeId": 8, + "name": "Tablets", + "metaTitle": "Tablets", + "metaKeywords": "Tablets", + "metaDescription": "Tablets", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + } + ], + "order": 80 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/8" + } + }, + { + "type": "category-nodes", + "id": "5", + "attributes": { + "nodeId": 5, + "name": "Computer", + "metaTitle": "Computer", + "metaKeywords": "Computer", + "metaDescription": "Computer", + "isActive": true, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "metaTitle": "Notebooks", + "metaKeywords": "Notebooks", + "metaDescription": "Notebooks", + "isActive": true, + "children": [], + "parents": [], + "order": 100 + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "metaTitle": "Pc's/Workstations", + "metaKeywords": "Pc's/Workstations", + "metaDescription": "Pc's/Workstations", + "isActive": true, + "children": [], + "parents": [], + "order": 90 + }, + { + "nodeId": 8, + "name": "Tablets", + "metaTitle": "Tablets", + "metaKeywords": "Tablets", + "metaDescription": "Tablets", + "isActive": true, + "children": [], + "parents": [], + "order": 80 + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 100 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/5" + } + }, + { + "type": "category-nodes", + "id": "2", + "attributes": { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "children": [], + "parents": [], + "order": 100 + }, + { + "nodeId": 3, + "name": "Camcorders", + "metaTitle": "Camcorders", + "metaKeywords": "Camcorders", + "metaDescription": "Camcorders", + "isActive": true, + "children": [], + "parents": [], + "order": 90 + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "children": [], + "parents": [], + "order": null + } + ], + "order": 90 + }, + "links": { + "self": "http://glue.mysprykershop.com/category-nodes/2" + } + } + ] +} +``` + +
      +
      + +| FIELD | TYPE | DESCRIPTION | +| --- | --- | --- | +| name | String | Specifies the tree name. | +| isActive | Boolean | Specifies whether the tree is active.
      If the value of the field is *true*, the tree should be displayed to the customer. Otherwise, the tree should be hidden. | +| locale | String | Specifies a locale for the tree. | +| nodes | Array | Specifies an array of node elements that comprise the navigation tree. | +| title | String | Specifies the title that should be used to display the node anywhere on the frontend. | +| url | String | Specifies the URL link the node points to.
      • If the `node_type` parameter is set to `cms_page`, `category` or `link`, the URL is relative to the application domain. For example, `/en/product-sets`.
      • If the `node_type` parameter is set to external_url, the URL contains an absolute URI. For example, `http://example.com/mypage.html`.
      • If the `node_type` parameter is set to label, the URL is always empty, because labels are intended to be text-only elements.
      | +| isActive | Boolean | Specifies whether the node is active.
      If the value of the field is true, the node should be displayed to the customer. Otherwise, the node should be hidden. | +| nodeType | String | Specifies the node type. Should be one of the following values:
      • **label**—specifies a simple label (text-only element).
      • **cms_page**—specifies a link to a CMS page;
      • **category**—specifies a link to a category page.
      • **link**—specifies a link to any page within the shop.
      • **external_url**—specifies a link to an external web site.
      | +| cssClass | String | Specifies the CSS class to be used to render the node. | +| validFrom | String | Specifies a date that the node is valid from. | +| validTo | String | Specifies a date that the node is valid to. | +| children | Array | Specifies an array of node elements that are nested within the current element. | + +{% include pbc/all/glue-api-guides/{{page.version}}/category-nodes-response-attributes.md %} + + +### Possible errors + +| CODE | REASON | +| --- | --- | +| 1601 | Navigation is not found. | +| 1602 | Navigation ID is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/navigation-feature-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/navigation-feature-overview.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/base-shop/navigation-feature-overview.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/navigation-feature-overview.md index 080b0e9ae59..f218b3a7df4 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/navigation-feature-overview.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/navigation-feature-overview.md @@ -6,12 +6,13 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/navigation-feature-overview originalArticleId: 6d0a1210-9c3e-44b2-b6c9-aa0cf7780cba redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/navigation-feature-overview.html - /docs/scos/user/features/202005.0/navigation-feature-overview.html - /docs/scos/dev/feature-walkthroughs/201907.0/navigation-feature-walkthrough/navigation-module.html - /docs/scos/user/features/202200.0/navigation-feature-overview.html - /docs/scos/user/features/202311.0/navigation-feature-overview.html - - /docs/scos/dev/feature-walkthroughs/202200.0/navigation-feature-walkthrough/navigation-feature-walkthrough.html - - /docs/scos/dev/feature-walkthroughs/202311.0/navigation-feature-walkthrough/navigation-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202200.0/navigation-feature-walkthrough/navigation-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/navigation-feature-walkthrough/navigation-feature-walkthrough.html - /docs/pbc/all/content-management-system/202311.0/navigation-feature-overview.html - /docs/pbc/all/content-management-system/202204.0/base-shop/navigation-feature-overview.html --- diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/product-sets-feature-overview.md b/docs/pbc/all/content-management-system/202602.0/base-shop/product-sets-feature-overview.md new file mode 100644 index 00000000000..3589e315e4f --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/product-sets-feature-overview.md @@ -0,0 +1,59 @@ +--- +title: Product Sets feature overview +description: An overview of the Spryker product sets feature, allowing you to create a set of products to showcase to your customers. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-sets-feature-overview +originalArticleId: 7bc42ccb-f76c-400f-9372-251104ce0b77 +redirect_from: + - /docs/scos/user/features/202108.0/product-sets-feature-overview.html + - /docs/scos/user/features/202200.0/product-sets-feature-overview.html + - /docs/scos/user/features/202311.0/product-sets-feature-overview.html + - /docs/pbc/all/content-management-system/202311.0/product-sets-feature-overview.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/product-sets-feature-overview.html +--- + +The *Product Sets* feature lets you create and sell collections of products. For example, you can create a stationary workspace set, a set of clothing or accessories, or furniture for a specific room. The "Shop-the-Look" function is a common example of a product set, where you can build a collection of items based on relations or recommendations. + +![product-set-on-the-storefront](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Sets/product-set-on-the-storefront.png) + +When browsing a product set, a Storefront user can select variants per product in a set, add an individual or all products from the set to cart. + +![product-set-actions](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Sets/product-set-actions.png) + +A Back Office user can define the following: +- The order of products in a set displayed on the Storefront. +- The order of products sets displayed on the Storefront. It's relevant if you have multiple product sets on the same page. +- The unique product set URL. + +A Back Office user can add product sets to any page by [creating a product set content item](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/content-items/create-banner-content-items.html) and [adding it to CMS pages and blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.html). + + +For more details about product sets, watch the video: + +
      + +
      + +### Current constraints + +The feature has the following functional constraints which are going to be resolved in the future: +- Product sets are shared across all the stores of a project. +- You cannot restrict availability of a product set to a store. + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Get a general idea of the Product Sets feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/product-sets-feature-overview.html) | +| [Create product sets](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/product-sets/create-product-sets.html) | +| [Manage product sets](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/product-sets/edit-product-sets.html) | + +## Related Developer documents + +|INSTALLATION GUIDES | DATA IMPORT | +|---------|---------| +| [Product Sets feature integration](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.html) | [File details: product_set.csv](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-set.csv.html) | diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/third-party-integrations/censhare.md b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/censhare.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/third-party-integrations/censhare.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/censhare.md diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/coremedia.md b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/coremedia.md new file mode 100644 index 00000000000..25f56b297df --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/coremedia.md @@ -0,0 +1,44 @@ +--- +title: Coremedia +description: Take content to the next level with the CoreMedia Content Cloud that can be integrated in the Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/coremedia +originalArticleId: 40e49203-d3e1-4589-b7d8-29325af22520 +redirect_from: + - /2021080/docs/coremedia + - /2021080/docs/en/coremedia + - /docs/coremedia + - /docs/en/coremedia + - /docs/scos/user/technology-partners/202311.0/content-management/coremedia.html + - /docs/pbc/all/content-management-system/202311.0/third-party-integrations/coremedia.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/third-party-integrations/coremedia.html +--- + +## Partner Information + +[ABOUT COREMEDIA](https://www.coremedia.com) + +Take content to the next level with the CoreMedia Content Cloud, which enables the enterprise-level creation, orchestration, and preview of sophisticated omnichannel experiences, delivered across multiple brands, markets, channels, and languages. React to market trends instantly, stay ahead of the competition and become an instantly recognizable iconic brand. Be iconic. + +YOUR ADVANTAGES: +- Real-Time Integration of Product Catalog, Pricing and Promotions with no duplication of data – or manual copy&paste. +- Design your experiences for home page, category, product, promotion, landing and content pages with drag & drop. +- Make and publish changes instantly. +- Maintain a multitude of regionalized and localized content easily with our sophisticated translation workflows. +- Manage your digital assets in one place with automatic optimized conversion for all channels +- Real-time omni-channel preview on your desktop. +- Mix content and products freely. +- Make content and assets shoppable: Create shoppable banners, promotions, videos, blog articles +- Engage and convert your users by providing unique hyper-personalized, high-touch experiences. Be iconic! + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +We have an agreement with this technology provider. If you want to use it in your project, contact us. + +
      diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/e-spirit.md b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/e-spirit.md new file mode 100644 index 00000000000..6d9a5105ffb --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/e-spirit.md @@ -0,0 +1,48 @@ +--- +title: E-Spirit +description: Help your Spryker project engage customers and increase revenue with personalized, content-rich digital experiences anytime, anywhere by integrating E-Spirit. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/e-spirit +originalArticleId: 487dfa6d-a059-4660-956c-bbce54f4f85b +redirect_from: + - /2021080/docs/e-spirit + - /2021080/docs/en/e-spirit + - /docs/e-spirit + - /docs/en/e-spirit + - /docs/scos/user/technology-partners/202311.0/content-management/e-spirit.html + - /docs/pbc/all/content-management-system/202311.0/third-party-integrations/e-spirit.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/third-party-integrations/e-spirit.html +--- + +## Partner Information + +[ABOUT E-SPIRIT](https://www.e-spirit.com/) + +Content-rich e-commerce experiences for a Digital Experience Edge + +e-Spirit's FirstSpirit Digital Experience Platform, offered through a SaaS or on-premises model, helps retail and e-commerce companies engage customers and increase revenue with personalized, content-rich digital experiences anytime, anywhere. Savvy e-commerce marketers rely on the FirstSpirit platform—which includes a headless, hybrid and head-optional CMS, AI-driven personalization and omnichannel marketing capabilities—for individualized and synchronized content delivery across all channels to differentiate their companies and compel their customers to action for an e-commerce edge. More information can be found in the [E-Spirit documentation](https://docs.e-spirit.com/ecom/contentconnect-spryker/ContentConnect_Spryker_Documentation_EN.html). + +YOUR ADVANTAGES: + +- Easy to use content editing: No coding needed to add content for experience-driven commerce, such as promotional banners, product teasers, interactive images and videos, user generated content. +- Rapid start-up. +- Deep partnership with Spryker. +- Many leading e-commerce customers globally: Reitmans, Carter's, Converse, L'Oreal Luxe brands, Karstadt, TSI Holdings, Hugo Boss, etc. +- Content-driven commerce that simplifies connections across people, processes and technology to enable compelling digital experiences anytime, anywhere. +- Dynamic content experiences: Create content-rich online stores that increase engagement and influence buying behavior. +- AI-Powered, Personalized Content Delivery: Use the FirstSpirit Intelligent Content Engine to deliver personalized, relevant content that differentiates and compels customers to action +- Omnichannel Marketing: Deliver connected digital experiences on websites, mobile or other channels or devices to boost online and retail store sales. +- Digital Signage: Optimize the in-store experience with interactive digital signage that bridges the gap between the physical and digital world. +- Globalization & Localization: Ensure brand consistency across multiple regions, sites and languages to support local marketing efforts and global business objectives. + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +We can guide you through the integration process of this technology provider. To benchmark the capabilities of our implementation with your expectations, contact us. + +
      diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/magnolia.md b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/magnolia.md new file mode 100644 index 00000000000..6e9e795ed88 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/magnolia.md @@ -0,0 +1,40 @@ +--- +title: Magnolia +description: Connect content and Spryker Cloud Commerce OS by integrating Magnolia CMS in to your Spryker projects . +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/magnolia-cms +originalArticleId: 78c3fa55-94b6-483a-aa34-ff04a39e5505 +redirect_from: + - /2021080/docs/magnolia-cms + - /2021080/docs/en/magnolia-cms + - /docs/magnolia-cms + - /docs/en/magnolia-cms + - /docs/scos/user/technology-partners/202311.0/content-management/magnolia.html + - /docs/pbc/all/content-management-system/202311.0/third-party-integrations/magnolia.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/third-party-integrations/magnolia.html +--- + +## Partner Information + +[ABOUT MAGNOLIA CMS](https://www.magnolia-cms.com) + +Magnolia - the CMS that connects content and commerce. Magnolia CMS is a platform for building best-of-breed digital experiences. Enterprises such as Generali, Avis, PERI and REWE use it as a central hub for their web, mobile and DX initiatives. Magnolia is a privately-held company, founded in 1997 and with headquarters in Basel, Switzerland. + + YOUR ADVANTAGES: + +- **Enterprise grade** Magnolia has the robust features needed for enterprise-scale multi-everything digital experiences. +- **Flexible** Robust integration capabilities let you enjoy the benefits of headless while still building on your existing solutions. +- **Engaging personalization** Magnolia's personalization tools build on the easy-to-use authoring tools, making personalizing content as easy as creating it. +- **Powerful**Combine features to produce campaigns driven by date and visitor demographics. + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +We have an agreement with this technology provider. If you want to use it in your project, contact us. + +
      diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/styla.md b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/styla.md new file mode 100644 index 00000000000..727e243f9c8 --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/third-party-integrations/styla.md @@ -0,0 +1,41 @@ +--- +title: Styla +description: Design content and make it shoppable and inspiring customers to buy more by integrating Styla into Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/styla +originalArticleId: ffc0974c-d2e9-4a03-a4a3-093d72a647a1 +redirect_from: + - /2021080/docs/styla + - /2021080/docs/en/styla + - /docs/styla + - /docs/en/styla + - /docs/scos/user/technology-partners/202311.0/content-management/styla.html + - /docs/pbc/all/content-management-system/202311.0/third-party-integrations/styla.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/third-party-integrations/styla.html +--- + +## Partner Information + +[ABOUT STYLA](https://www.styla.com) +Styla is a content commerce suite that automatically designs content and makes it shoppable, inspiring customers to buy more. Styla's automation technology is creating the design itself and ensures that the content looks attractive on all devices. A seamless integration with all common e-commerce systems allows an easy embedding of products and creates a whole new world of shoppable inspiration. More information can be found in the [Styla documentation](https://docs.styla.com/styla-plugins). + +YOUR ADVANTAGES: + +- Design Automation +- Shoppable Content +- Unique brand experience all along customer journey +- Seamless Commerce Integration +- Plugin-based (fast Go-to-market) +- Detailed analytics + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +We can guide you through the integration process of this technology provider. To benchmark the capabilities of our implementation with your expectations, contact us. + +
      diff --git a/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-a-custom-content-item.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-a-custom-content-item.md new file mode 100644 index 00000000000..f4ce0ad958d --- /dev/null +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-a-custom-content-item.md @@ -0,0 +1,278 @@ +--- +title: Create a custom content item +description: If the content items shipped with Spryker do not fulfill your needs, the document shows how to create a new one. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/howto-create-a-custom-content-item +originalArticleId: 82c46d06-3f67-4bad-8142-b83624c79197 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/cms/howto-create-a-custom-content-item.html + - /docs/pbc/all/content-management-system/202311.0/tutorials-and-howtos/howto-create-a-custom-content-item.html + - /docs/pbc/all/content-management-system/202311.0/base-shop/tutorials-and-howtos/howto-create-a-custom-content-item.html + - /docs/pbc/all/content-management-system/202204.0/base-shop/tutorials-and-howtos/create-a-custom-content-item.html +--- + +By default, Spryker provides `Banner`, `Product Abstract List`, `Product Set` and `File List` content items. + +If you need another type of content to display in a CMS page or bock content or even inside a [Twig](https://twig.symfony.com/) template file, you can create it on the project level. + +You can do the following: + +- Introduce a new entity with all the properties required by your project. For example, see `ContentBanner` and `ContentBannerGui` modules. +- Use an entity that already exists in your shop database, like `Location`, `Partner`, or `Employee`. For example, see `ContentProduct` and `ContentProductGui` modules. + +To create a new custom content item, implement the following plugins in the order they are described. + +## Content form plugin + +To check the existing content form plugins, open `\Pyz\Zed\ContentGui\ContentGuiDependencyProvider::getContentPlugins()`. + +{% info_block infoBox %} + +Such plugins implement `\Spryker\Zed\ContentGuiExtension\Dependency\Plugin\ContentPluginInterface`. + +{% endinfo_block %} + +To create a new content form plugin, follow these steps: +1. Create a module for the new content type—for example, `src/Zed/ContentFooGui`, with a plugin inside. The following list represents the description of plugin methods: + - `getTypeKey()`—returns a string with the name of your content item—for example, Foo. + - `getTermKey()`—returns a string displaying the term for this content type in database—for example, `Foo`, `Foo List` or `Foo Query`. In database, a content type can have different term representations. Correspondingly, there are different ways of getting information about content. For example: + - `Foo List`—product list IDs. + - `Foo Query`—product query as part of SQL/Elasticsearch query. This value is displayed in the Back Office, in **Content Management > Content Items**. + - `getForm()`—a form class name with a namespace which is displayed on the **Content create** or **Content edit** pages. + - `getTransferObject()`—maps form data to a content term transfer object—for example, `ContentFooTermTransfer`. + +```php +fromArray($params); + } + + return $contentFooTermTransfer; + } +} +``` + + 1. Create `ContentFooTermForm`. The main part of the plugin is the `Form` class that implements `\Symfony\Component\Form\FormBuilderInterface`. + - For more information about Symfony forms, see [Forms](https://symfony.com/doc/current/forms.html). + - To learn about form creation procedure in Spryker, see [Creating forms](/docs/dg/dev/backend-development/forms/create-forms.html) + - `\Spryker\Zed\ContentBannerGui\Communication\Form\BannerContentTermForm` as an example of a simple form. + - `\Spryker\Zed\ContentProductGui\Communication\Form\ProductAbstractListContentTermForm` as an example of a form with a dedicated template and complex Javascript functionality. + +Each form shipped by default require at least one form field to be filled out before it can be submitted. However, you can add more form constraints with additional validation. + +```php +namespace Spryker\Zed\ContentFooGui\Communication\Form; + +use Spryker\Zed\Kernel\Communication\Form\AbstractType; + +class ContentFooTermForm extends AbstractType +{ + /** + * @return string + */ + public function getBlockPrefix(): string + { + return 'foo'; + } + + ** + * @param \Symfony\Component\Form\FormBuilderInterface $builder + * @param array $options + * + * @return void + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder->add('name', TextType::class, [ + 'label' => 'Name', + ]); + + $builder->add('city', TextType::class, [ + 'label' => 'City', + ]); + + $builder->add('address', TextType::class, [ + 'label' => 'Address', + ]); + + $builder->add('numberOfEmployees', IntegerType::class, [ + 'label' => 'Number of employees', + ]); + } + + /** + * User this method if you need to provide custom template path or additional data to template + * + * @param \Symfony\Component\Form\FormView $view + * @param \Symfony\Component\Form\FormInterface $form + * @param array $options + * + * @return void + */ + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['attr']['template_path'] = '@ContentFooGui/_includes/foo_form.twig'; + } +} +``` + +{% info_block warningBox "Verification" %} + +After enabling the plugin, make sure there is a new content item in the Back Office, in **Content Management > Content Items > Add Content Item**. + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/Feature+HowTos/HowTo+-+Create+a+New+Custom+Content+Item/add-content-item-menu.png) + +{% endinfo_block %} + +## Twig plugin + +After enabling the content form plugin, you have your new content item data in Storage. To fetch the item data from Storage, use `\Spryker\Client\ContentStorage\ContentStorageClientInterface::findContentTypeContextByKey(string $contentKey, string $localeName)`. + +- `$contentKey` is generated automatically after content saving. +- `$localeName` is an automatically provided locale by current Store. + +The method returns `ContentTypeContextTransfer`, where `ContentTypeContextTransfer::$parameters` is the data saved by the form created in the previous section. + +To create a new Twig plugin, follow these steps: +1. Using `ContentTypeContextTransfer::$term` and `ContentTypeContextTransfer::$parameters`, fill in the properties of your new content transfer object—for example, `ContentFooTransfer`, in `src/Shared/ContentFoo/Transfer/`. +2. Create a new module—for example, `src/Yves/ContentFooWidget`. +3. Implement a Twig function using `\Spryker\Shared\Twig\TwigFunction`—for example, `\SprykerShop\Yves\ContentBannerWidget\Twig\ContentBannerTwigFunction`. +4. Implement a Twig plugin using `\Spryker\Shared\TwigExtension\Dependency\Plugin\TwigPluginInterface`—for example, `\SprykerShop\Yves\ContentBannerWidget\Plugin\Twig\ContentBannerTwigPlugin`. + +{% info_block infoBox "Function parameters" %} + +The `$key` parameter is obligatory for the function—for example, `function (string $key)`. + +Optional: You can add the `$templateIdentifier` parameter—for example, `function (string $key, string $templateIdentifier)`. + +{% endinfo_block %} + +5. In `\Pyz\Yves\Twig\TwigDependencyProvider::getTwigPlugins()`, register your Twig plugin. + +Now you can use your plugin as a function in Twig files. If you've named your plugin `content_foo`, in a Twig file, the function looks like `{% raw %}{{{% endraw %} content_foo('content-key', 'big-header') {% raw %}}}{% endraw %}`. + +## WYSIWYG editor plugin + +The **CMS Block Glossary Edit** and **Placeholder Edit** pages contain the WYSIWYG editor to put content into a CMS block or page. In the WYSIWYG toolbar, the **Content Item** drop-down menu contains all the content items which you can add. For more details, see [Add content items to CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/add-content-items-to-cms-blocks.html). + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/Feature+HowTos/HowTo+-+Create+a+New+Custom+Content+Item/content-item-menu.png) + +To add the new content item to that list, do the following: + +1. In `src/Zed/ContentFooGui`, implement a plugin using `\Spryker\Zed\ContentGuiExtension\Dependency\Plugin\ContentGuiEditorPluginInterface`,for example–`ContentFooContentGuiEditorPlugin`. +Method descriptions: +- `getType()`: Returns a string displaying the content type—for example, Foo. +- `getTemplates()`: Returns an array of templates supported by your Twig plugin created in the previous section. If there are no supported templates defined, returns an empty array. +- `getTwigFunctionTemplate()`: Returns a Twig expression that is added into the content. + +```php +setIdentifier('big-header') // $templateIdentifier from step 2 + ->setName('Big Header'), // is visible in UI. + (new ContentWidgetTemplateTransfer()) + ->setIdentifier('full-width') + ->setName('Full Width'), + ]; + } + + /** + * @return string + */ + public function getTwigFunctionTemplate(): string + { + return "{% raw %}{{{% endraw %} content_foo('%KEY%', '%TEMPLATE%') {% raw %}}}{% endraw %}"; + } +} +``` + +2. Extend `\Pyz\Zed\CmsContentWidgetCmsContentWidgetDependencyProvider::getCmsContentWidgetParameterMapperPlugins()` to map Twig function name with the item key mapper plugin. Example: + +```php +class CmsContentWidgetDependencyProvider extends SprykerCmsContentWidgetDependencyProvider +{ + /** + * {@inheritDoc} + * + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CmsContentWidget\Dependency\Plugin\CmsContentWidgetParameterMapperPluginInterface> + */ + protected function getCmsContentWidgetParameterMapperPlugins(Container $container) + { + return [ + ... + 'content_foo' => new CmsContentItemKeyMapperPlugin(), + ]; + } +} +``` diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-a-visibility-condition-for-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-a-visibility-condition-for-cms-blocks.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-a-visibility-condition-for-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-a-visibility-condition-for-cms-blocks.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-cms-templates.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-cms-templates.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-cms-templates.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-cms-templates.md index 363847373cb..f0782cddb88 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-cms-templates.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/create-cms-templates.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-create-cms-templates originalArticleId: 6f52ee42-6c1a-4d0b-865b-3512b7f4b9aa redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/create-cms-templates.html - /docs/scos/dev/tutorials/201811.0/howtos/feature-howtos/cms/howto-create-cms-templates.html - /docs/scos/dev/tutorials/201903.0/howtos/feature-howtos/cms/howto-create-cms-templates.html - /docs/scos/dev/tutorials/201907.0/howtos/feature-howtos/cms/howto-create-cms-templates.html @@ -68,7 +69,7 @@ To learn how the template is created, check the following exemplary procedure: {% raw %}{{{% endraw %} spyCms('PlaceholderContactHeader') {% raw %}}}{% endraw %}
      {% raw %}{{{% endraw %} spyCms('PlaceholderPhoneNr') {% raw %}}}{% endraw %} +1 (000) 000-0000
      {% raw %}{{{% endraw %} spyCms('PlaceholderEmail') {% raw %}}}{% endraw %} info@companyname.com
      - {% raw %}{{{% endraw %} spyCms('PlaceholderStoreAddress') {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} spyCms('PlaceholderStoreAddress') {% raw %}}}{% endraw %}
      123 Demo Street
      diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-positions-for-category-cms-blocks.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/define-positions-for-category-cms-blocks.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-positions-for-category-cms-blocks.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/define-positions-for-category-cms-blocks.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md similarity index 93% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md index 9b43dc0f600..02b79507e17 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/howto-define-the-maxiumum-size-of-content-fields originalArticleId: 42fb6510-84dc-425f-902d-e5fd7436cd3a redirect_from: + - /docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.html - /docs/pbc/all/content-management-system/202311.0/tutorials-and-howtos/howto-define-the-maxiumum-size-of-content-fields.html - /docs/pbc/all/content-management-system/202311.0/base-shop/tutorials-and-howtos/howto-define-the-maximum-size-of-content-fields.html - /docs/pbc/all/content-management-system/202204.0/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.html diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/searchable-select-combo-box.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/searchable-select-combo-box.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/searchable-select-combo-box.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/searchable-select-combo-box.md diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md similarity index 99% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md index d2e9fe45afa..4a6dac62a34 100644 --- a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md +++ b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-personalized-catalog-pages.md @@ -474,7 +474,7 @@ The `render()` method takes a path for the route name as a parameter. It creates {% raw %}{{{% endraw %} render(path('personalized-product-index', {'limit': 12})) {% raw %}}}{% endraw %} {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} -``` +``` To check the results, go to `https://mysprykershop.com/my-offers`. diff --git a/docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/using-cms-blocks-in-content.md b/docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/using-cms-blocks-in-content.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/base-shop/tutorials-and-howtos/using-cms-blocks-in-content.md rename to docs/pbc/all/content-management-system/202602.0/base-shop/tutorials-and-howtos/using-cms-blocks-in-content.md diff --git a/docs/pbc/all/content-management-system/202512.0/content-management-system.md b/docs/pbc/all/content-management-system/202602.0/content-management-system.md similarity index 100% rename from docs/pbc/all/content-management-system/202512.0/content-management-system.md rename to docs/pbc/all/content-management-system/202602.0/content-management-system.md diff --git a/docs/pbc/all/content-management-system/202512.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md b/docs/pbc/all/content-management-system/202602.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md similarity index 98% rename from docs/pbc/all/content-management-system/202512.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md rename to docs/pbc/all/content-management-system/202602.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md index 849c7618ac5..bbdad167f4a 100644 --- a/docs/pbc/all/content-management-system/202512.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md +++ b/docs/pbc/all/content-management-system/202602.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.md @@ -4,6 +4,7 @@ description: This glue API document describes how to retrieve abstract products template: glue-api-storefront-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/content-management-system/202512.0/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.html - /docs/marketplace/dev/glue-api-guides/202311.0/content-items/retrieving-abstract-products-in-abstract-product-lists.html related: - title: Retrieving abstract products diff --git a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md deleted file mode 100644 index 1fbee33f6d2..00000000000 --- a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account + Order Management feature -description: This guide provides step-by-step instruction on integrating Company Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/company-account-order-management-feature-integration -originalArticleId: 459ba566-efc9-4a44-a990-65d13d137032 -redirect_from: - - /2021080/docs/company-account-order-management-feature-integration - - /2021080/docs/en/company-account-order-management-feature-integration - - /docs/company-account-order-management-feature-integration - - /docs/en/company-account-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/company-account-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/company-account-order-management-feature-integration.html -related: - - title: Company Account - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-account-feature-overview.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md deleted file mode 100644 index 6c43c197340..00000000000 --- a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Customer Account Management + Order Management feature -description: This guide provides step-by-step instruction on integrating Customer Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-order-management-feature-integration -originalArticleId: 749599c0-c1ab-4553-88ad-ee055c344ab8 -redirect_from: - - /2021080/docs/customer-account-management-order-management-feature-integration - - /2021080/docs/en/customer-account-management-order-management-feature-integration - - /docs/customer-account-management-order-management-feature-integration - - /docs/en/customer-account-management-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-order-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md deleted file mode 100644 index e9ed670c9d0..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Company account feature -description: Learn how to install Business on Behalf, Company Account Storage, and Company Account OAuth functionality into your Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/company-account-feature-integration -originalArticleId: f29e0e4a-c1f6-4812-ae43-a771909cb715 -redirect_from: - - /2021080/docs/company-account-feature-integration - - /2021080/docs/en/company-account-feature-integration - - /docs/company-account-feature-integration - - /docs/en/company-account-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/company-account-feature-integration.html -related: - - title: Glue API - Install the Company account feature - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html - - title: Install the Company Account + Order Management feature - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md deleted file mode 100644 index 1fbee33f6d2..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account + Order Management feature -description: This guide provides step-by-step instruction on integrating Company Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/company-account-order-management-feature-integration -originalArticleId: 459ba566-efc9-4a44-a990-65d13d137032 -redirect_from: - - /2021080/docs/company-account-order-management-feature-integration - - /2021080/docs/en/company-account-order-management-feature-integration - - /docs/company-account-order-management-feature-integration - - /docs/en/company-account-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/company-account-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/company-account-order-management-feature-integration.html -related: - - title: Company Account - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-account-feature-overview.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md deleted file mode 100644 index 9c78bd11684..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Customer Access feature -description: The guide walks you through the process of installing the Customer Access feature in the project. -last_updated: Mar 16, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-access-feature-integration -originalArticleId: d0b476f0-c6dd-4126-812e-bb37f259cd03 -redirect_from: - - /2021080/docs/customer-access-feature-integration - - /2021080/docs/en/customer-access-feature-integration - - /docs/customer-access-feature-integration - - /docs/en/customer-access-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-access-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-access-feature-integration.html -related: - - title: Install the Customer Access Glue API - link: docs/pbc/all/identity-access-management/page.version/install-and-upgrade/install-the-customer-access-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-access-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md deleted file mode 100644 index 4f77d2d5b72..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Customer Account Management + Agent Assist feature -description: Integrate the Customer Account Management + Agent Assist feature into your project. -last_updated: Nov 21, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-agent-assist-feature-integration -originalArticleId: ac6402fe-4140-479f-a08a-76c03b263afa -redirect_from: - - /2021080/docs/customer-account-management-agent-assist-feature-integration - - /2021080/docs/en/customer-account-management-agent-assist-feature-integration - - /docs/customer-account-management-agent-assist-feature-integration - - /docs/en/customer-account-management-agent-assist-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-agent-assist-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-agent-assist-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-agent-assist-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md deleted file mode 100644 index 714f58fbe1d..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Customer Account Management feature -description: The guide walks you through the process of adding Redirect support for Customer login functionality to your project. -last_updated: Feb 10, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-feature-integration -originalArticleId: 859d5c6d-7ca6-4cca-ae87-66f2951c2e96 -redirect_from: - - /2021080/docs/customer-account-management-feature-integration - - /2021080/docs/en/customer-account-management-feature-integration - - /docs/customer-account-management-feature-integration - - /docs/en/customer-account-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/customer-account-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/customer-account-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-feature-integration.html -related: - - title: Install the Customer Account Management + Order Management feature - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html - - title: Install the Customer Account Management Glue API - link: docs/pbc/all/identity-access-management/page.version/install-and-upgrade/install-the-customer-account-management-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md deleted file mode 100644 index 6c43c197340..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Customer Account Management + Order Management feature -description: This guide provides step-by-step instruction on integrating Customer Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-order-management-feature-integration -originalArticleId: 749599c0-c1ab-4553-88ad-ee055c344ab8 -redirect_from: - - /2021080/docs/customer-account-management-order-management-feature-integration - - /2021080/docs/en/customer-account-management-order-management-feature-integration - - /docs/customer-account-management-order-management-feature-integration - - /docs/en/customer-account-management-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-order-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md b/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md deleted file mode 100644 index 38b8c73e5b3..00000000000 --- a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account Glue API -description: Learn how ot install and configure the Spryker Company Account GLUE API in to your Spryker projects. -last_updated: Jul 13, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-company-account-api-feature-integration -redirect_from: - - /2021080/docs/glue-api-company-account-api-feature-integration - - /2021080/docs/en/glue-api-company-account-api-feature-integration - - /docs/glue-api-company-account-api-feature-integration - - /docs/en/glue-api-company-account-api-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-company-account-glue-api.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md deleted file mode 100644 index 97cc718b6a6..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Company Account + Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Spryker Company Account + Merchant B2B Contracts feature into the project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md deleted file mode 100644 index 4f77d2d5b72..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Customer Account Management + Agent Assist feature -description: Integrate the Customer Account Management + Agent Assist feature into your project. -last_updated: Nov 21, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-agent-assist-feature-integration -originalArticleId: ac6402fe-4140-479f-a08a-76c03b263afa -redirect_from: - - /2021080/docs/customer-account-management-agent-assist-feature-integration - - /2021080/docs/en/customer-account-management-agent-assist-feature-integration - - /docs/customer-account-management-agent-assist-feature-integration - - /docs/en/customer-account-management-agent-assist-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-agent-assist-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-agent-assist-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-agent-assist-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md deleted file mode 100644 index 3d1f2170c20..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Customer Account Management feature + Dynamic Multistore -description: Learn how to install the Customer Account Management feature + Dynamic Multistore. -last_updated: Apr 25, 2023 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-customer-account-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md deleted file mode 100644 index 6c43c197340..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Customer Account Management + Order Management feature -description: This guide provides step-by-step instruction on integrating Customer Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-order-management-feature-integration -originalArticleId: 749599c0-c1ab-4553-88ad-ee055c344ab8 -redirect_from: - - /2021080/docs/customer-account-management-order-management-feature-integration - - /2021080/docs/en/customer-account-management-order-management-feature-integration - - /docs/customer-account-management-order-management-feature-integration - - /docs/en/customer-account-management-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-order-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md deleted file mode 100644 index 6490b28cf0d..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Customer Account Management + Promotions & Discounts feature -description: Learn how to integrate the Customer Account Management + Promotions & Discounts feature into a Spryker project. -last_updated: Jun 19, 2025 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md b/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md deleted file mode 100644 index 38b8c73e5b3..00000000000 --- a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account Glue API -description: Learn how ot install and configure the Spryker Company Account GLUE API in to your Spryker projects. -last_updated: Jul 13, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-company-account-api-feature-integration -redirect_from: - - /2021080/docs/glue-api-company-account-api-feature-integration - - /2021080/docs/en/glue-api-company-account-api-feature-integration - - /docs/glue-api-company-account-api-feature-integration - - /docs/en/glue-api-company-account-api-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-company-account-glue-api.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md deleted file mode 100644 index e9ed670c9d0..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Company account feature -description: Learn how to install Business on Behalf, Company Account Storage, and Company Account OAuth functionality into your Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/company-account-feature-integration -originalArticleId: f29e0e4a-c1f6-4812-ae43-a771909cb715 -redirect_from: - - /2021080/docs/company-account-feature-integration - - /2021080/docs/en/company-account-feature-integration - - /docs/company-account-feature-integration - - /docs/en/company-account-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/company-account-feature-integration.html -related: - - title: Glue API - Install the Company account feature - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html - - title: Install the Company Account + Order Management feature - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index 1bd6329df2f..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Company Account + Merchant B2B Contract Requests feature -description: The guide walks you through the process of installing the Company Account + Merchant B2B Contract Requests feature into your Spryker project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md deleted file mode 100644 index 97cc718b6a6..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Company Account + Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Spryker Company Account + Merchant B2B Contracts feature into the project. -last_updated: Mar 13, 2024 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md deleted file mode 100644 index 1fbee33f6d2..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account + Order Management feature -description: This guide provides step-by-step instruction on integrating Company Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/company-account-order-management-feature-integration -originalArticleId: 459ba566-efc9-4a44-a990-65d13d137032 -redirect_from: - - /2021080/docs/company-account-order-management-feature-integration - - /2021080/docs/en/company-account-order-management-feature-integration - - /docs/company-account-order-management-feature-integration - - /docs/en/company-account-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/company-account-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/company-account-order-management-feature-integration.html -related: - - title: Company Account - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-account-feature-overview.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-company-account-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md deleted file mode 100644 index 4f77d2d5b72..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Customer Account Management + Agent Assist feature -description: Integrate the Customer Account Management + Agent Assist feature into your project. -last_updated: Nov 21, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-agent-assist-feature-integration -originalArticleId: ac6402fe-4140-479f-a08a-76c03b263afa -redirect_from: - - /2021080/docs/customer-account-management-agent-assist-feature-integration - - /2021080/docs/en/customer-account-management-agent-assist-feature-integration - - /docs/customer-account-management-agent-assist-feature-integration - - /docs/en/customer-account-management-agent-assist-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-agent-assist-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-agent-assist-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-agent-assist-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md deleted file mode 100644 index 6c43c197340..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Customer Account Management + Order Management feature -description: This guide provides step-by-step instruction on integrating Customer Account Management + Order Management feature into the Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-order-management-feature-integration -originalArticleId: 749599c0-c1ab-4553-88ad-ee055c344ab8 -redirect_from: - - /2021080/docs/customer-account-management-order-management-feature-integration - - /2021080/docs/en/customer-account-management-order-management-feature-integration - - /docs/customer-account-management-order-management-feature-integration - - /docs/en/customer-account-management-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-order-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md deleted file mode 100644 index 6490b28cf0d..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Customer Account Management + Promotions & Discounts feature -description: Learn how to integrate the Customer Account Management + Promotions & Discounts feature into a Spryker project. -last_updated: Jun 19, 2025 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md deleted file mode 100644 index 013127d7e24..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Reorder feature -description: Integrate the Reorder feature into your project -last_updated: May 25, 2025 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/customer-relationship-management/202505.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-reorder-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md deleted file mode 100644 index 38b8c73e5b3..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Company Account Glue API -description: Learn how ot install and configure the Spryker Company Account GLUE API in to your Spryker projects. -last_updated: Jul 13, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-company-account-api-feature-integration -redirect_from: - - /2021080/docs/glue-api-company-account-api-feature-integration - - /2021080/docs/en/glue-api-company-account-api-feature-integration - - /docs/glue-api-company-account-api-feature-integration - - /docs/en/glue-api-company-account-api-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-company-account-feature-integration.html - - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-company-account-glue-api.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md deleted file mode 100644 index f7e9e3041d3..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Glue API - Customer Account Management feature integration -description: Learn how ot install and configure the Spryker Company Customer Account management GLUE API in to your Spryker projects. -last_updated: Jul 13, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-customer-account-management-feature-integration -originalArticleId: fa53308d-8078-477d-9297-7597d51afbcf -redirect_from: - - /2021080/docs/glue-api-customer-account-management-feature-integration - - /2021080/docs/en/glue-api-customer-account-management-feature-integration - - /docs/glue-api-customer-account-management-feature-integration - - /docs/en/glue-api-customer-account-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-customer-account-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-customer-account-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-customer-account-management-feature-integration.html -related: - - title: Customer Account Management feature integration - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html - - title: Authenticating as a customer - link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html - - title: Confirming customer registration - link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-confirm-customer-registration.html - - title: Managing customer addresses - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.html - - title: Managing customer authentication tokens via OAuth 2.0 - link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html - - title: Managing customer passwords - link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-passwords.html - - title: Managing customers - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html ---- - - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-customer-account-management-glue-api.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md b/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md deleted file mode 100644 index 97599c38337..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Cart feature overview -last_updated: Jul 20, 2021 -template: concept-topic-template -originalLink: https://documentation.spryker.com/2021080/docs/cart -originalArticleId: eb211809-3be4-4b8a-bf28-a2c79140b11c -redirect_from: - - /docs/scos/dev/feature-walkthroughs/202005.0/cart-feature-walkthrough/cart-functionality.html - - /docs/scos/user/features/202009.0/cart-feature-overview/cart-feature-overview.html - - /docs/scos/user/features/202311.0/cart-feature-overview/cart-feature-overview.html - - /docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/cart-feature-walkthrough.html - - /docs/pbc/all/cart-and-checkout/202311.0/cart-feature-overview/cart-feature-overview.html - - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/cart-feature-overview/cart-feature-overview.html - - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html ---- - -The *Cart* feature lets your customers add products to their cart by selecting the preferred quantity of a product. Inside the cart, customers can change the number of items, switch between different variants of the product, add notes, apply vouchers, and remove items. - -Any changes the customer makes within the cart trigger an automatic sum-recalculation that is immediately applied to the total in the sum. Predefined taxes are applied and shown automatically. Additionally, logged-in customers can see and edit their cart from any device. - -The persistent cart functionality lets authenticated customers store their cart throughout multiple sessions. The Cart feature also ensures that your business rules, such as discounts, taxes, or shipping, are applied based on the customers' final choice of items. - -Your customers can place orders faster by adding simple products to their cart from the **Category** page. They can add products with one [product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) to the cart with one click. - -The feature supports [product groups](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-groups-feature-overview.html). If simple products are grouped, you can browse and add these products to your cart from the **Category** page. - -In a Spryker shop, the shopping cart widget is displayed in the header. With the widget, customers can easily create new shopping carts and view the existing ones by pointing to the cart icon. - -## Related Business User documents - -|OVERVIEWS| -|---| -| [Cart Notes](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-notes-overview.html) | -| [Cart Widget](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.html) | -| [Quick Order from the Catalog Page](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.html) | - -## Related Developer documents - -| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | TUTORIALS AND HOWTOS | REFERENCES | -|---------------------|----------------|------------------|-----------------------|------------| -| [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | [Upgrade the Cart module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html) | [Manage guest carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html) | [HowTo: Define if a cart should be deleted after placing an order](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.html) | [Calculation 3.0](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-3-0.html) | -| [Install the Cart + Shipment feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html) | [Upgrade the CartExtension module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.html) | [Manage carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Calculation data structure](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-data-structure.html) | -| [Install the Cart + Product Bundles feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.html) | [Upgrade the CartPage module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.html) | [Retrieve customer carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.html) | | [Calculator plugins](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculator-plugins.html) | -| [Install the Persistent Cart + Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.html) | [Upgrade the CartsRestApi module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.html) | [Manage items in carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Cart module: Reference information](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/cart-module-reference-information.html) | -| [Install the Cart + Agent Assist feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html) | [Upgrade the CartVariant module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.html) | [Manage guest cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html) | | | -| [Install the Cart + Non-splittable products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html) | | | | | -| [Install the Cart + Product feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html) | | | | | -| [Install the Cart + Product Group feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html) | | | | | -| | | | | | -| [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | | | | | - diff --git a/docs/pbc/all/customer-relationship-management/202512.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md b/docs/pbc/all/customer-relationship-management/202512.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md deleted file mode 100644 index 8b119992043..00000000000 --- a/docs/pbc/all/customer-relationship-management/202512.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Customer Account Management + Merchant Switcher feature -last_updated: Jan 06, 2021 -description: This document describes the process how to integrate the Customer Account Management + Merchant Switcher feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-switcher-customer-account-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-on-behalf-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-on-behalf-overview.md new file mode 100644 index 00000000000..a716170747e --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-on-behalf-overview.md @@ -0,0 +1,73 @@ +--- +title: Business on Behalf overview +description: Business on behalf allows having multiple company users per customer account with a possibility to select one company user to be a default user. +last_updated: Jun 24, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/business-on-behalf-overview +originalArticleId: 1963b84f-b12b-4148-97e4-d10d7366905e +redirect_from: + - /2021080/docs/business-on-behalf-overview + - /2021080/docs/en/business-on-behalf-overview + - /docs/business-on-behalf-overview + - /docs/en/business-on-behalf-overview + - /docs/scos/user/features/202311.0/company-account-feature-overview/business-on-behalf-overview.html + - /docs/scos/user/features/202204.0/company-account-feature-overview/business-on-behalf-overview.html +--- + +Every [business unit](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/business-units-overview.html) includes some company users that have specific permissions within this business unit. The *Business on Behalf* feature lets you have multiple company users per customer account with the possibility to assign one company user to be a *default user*. This default user can switch between the assigned business units. + +For example, as a shop owner, you might have a financial manager in your company who, for audit purposes, can access company business units' accounts to check their order histories and shopping lists. + +You can assign a user to multiple business units in the Back Office. After that, a single user can log in to several company accounts and manage all of them by a browser window. + +{% info_block warningBox %} + +Only customers having more than one Company user can make use of the feature. + +{% endinfo_block %} + +When you have access to multiple business units, you can: + +- Capture company information. +- Create orders on behalf of a business unit your account has been associated with. +- Manage business unit workflow. + +The following table describes some workflows where assigning a company user to multiple business units is helpful: + +| WORKFLOW | DESCRIPTION | EXAMPLE | +| --- | --- | --- | +| Implementation of specific processes within a company. | In a B2B company, most often, you have multiple business units, and you might have a company user who is entitled and responsible for making orders for (all) the business units. | Let's say you have a company that owns several restaurants. Each restaurant is represented as a business unit within your company. There is a manager who is responsible for certain product purchases for every restaurant within your company. Such a user needs access to all the business units to make orders on behalf of every restaurant. Or you might have a person responsible for approving orders within all or specific business units. In this case, you want an approver who would go through the business units and approve their orders.| +|Managing business units. | As a B2B company owner, you need to maintain all business units within your company. | You may set up business units for multiple office locations and assign an HR user to all of the business units so that they can handle the administrative functions within all the departments, like the following:
      • Create company accounts for new users
      • Assign roles
      • Add permissions
      • Delete users
      | + +Database relations without the Business on Behalf feature are as follows: + +![scheme1.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/customer-relationship-management/base-shop/company-account-feature-overview/business-on-behalf-overview.md/scheme1.png) + +That is, the customer data used is connected to the company user in a one-to-one relationship. + +The aim of the Business on Behalf feature is to have one-to-many relationships: + +![scheme2.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/customer-relationship-management/base-shop/company-account-feature-overview/business-on-behalf-overview.md/scheme2.png) + +## Business on Behalf on the Storefront + +Company users can assign and unassign a company business unit to their accounts on the Storefront: + +
      + +
      + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Assign a company user to a company unit](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-users/edit-company-users.html) | + + + +## See next + +[Customer Login by Token overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/customer-login-by-token-overview.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-units-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-units-overview.md new file mode 100644 index 00000000000..a115b45abf8 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/business-units-overview.md @@ -0,0 +1,94 @@ +--- +title: Business Units overview +description: Once a company administrator has created a company, and it has been activated and approved, they can start building the organizational structure. +last_updated: Jul 19, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/business-units-overview +originalArticleId: 7b1313e3-9240-4a26-a9ef-b00a8eb20fad +redirect_from: + - /2021080/docs/business-units-overview + - /2021080/docs/en/business-units-overview + - /docs/business-units-overview + - /docs/en/business-units-overview + - /docs/scos/user/features/202200.0/company-account-feature-overview/business-units-overview.html + - /docs/scos/user/features/202311.0/company-account-feature-overview/business-units-overview.html + - /docs/scos/user/features/202204.0/company-account-feature-overview/business-units-overview.html +--- + +Once a company administrator has created a company that has been activated and approved in the Back Office, they can start building their company's organizational structure in the **My Company** section of the webshop. + +The very first step of defining the company structure is setting up business units and creating the hierarchy of business units. + +The **business units hierarchy** poses a system in which business units are arranged into levels: + +- Upper level +- Lower level +- Same level + +The business unit of the upper level is referred to as a *parent business unit*, and the business units below it are its *child business units*. + +Upon company registration, a default business unit named "Headquarters" is automatically created under the **Business Units** section. + +![default-business-unit_1_.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/default-business-unit_1_.png) + +The company administrator can create, edit, delete as well as arrange business units in hierarchical order in the Business Units section. + +To create a business unit, its name and email address must be specified. + +{% info_block infoBox %} + +The user can also select a parent business unit of the newly created unit. If it's not specified, the new business unit is created with the "0" level in the hierarchy—for example, as a parent. + +{% endinfo_block %} + +![new-bu.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/new-bu.png) + +The parent and child business units are visually differentiated by means of indents. This differentiation is described in the following table: + +| LEVEL | INDENTS | +| --- | --- | +| 0 level business units (parents) | Have no indents before their lines. | +| 1 level business units | Have a single indent before them. | +| 2 level business units | Have a double indent. | +| ... | ... | + +Example: +![business-units-hierarchy.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/business-units-hierarchy.png) + +The following are special characteristics of business units: + +- You can't assign a parent business unit to its child. +- Deleting a parent business unit does not delete its children. The hierarchy is kept and just goes one level up. + +{% info_block infoBox %} + +A business unit is children that are one level below it, become 0 level parent business units, and their children become 1 level children. + +{% endinfo_block %} + +- A business unit can be assigned with one or multiple addresses. +- The existing addresses can be assigned to business units right at the stage of their creation, and the new addresses can be added on the **Edit Business Unit** page. + +![business-units-address.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/business-units-address.png) + +- The addresses can also be unassigned by clearing the check box of the respective address under the **Assign Addresses** section and clicking **Submit**. + +![unassign-address.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/unassign-address.png) + +This moves the address to the **UNASSIGNED ADDRESSES** section. + +![unassigned-addresses.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Business+Unit+Management/Business+Units+Management+Feature+Overview/unassigned-addresses.png) + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create company units](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-units/create-company-units.html) | +| [Edit company units](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-units/edit-company-units.html) | +| [Create company unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.html) | +| [Edit company unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.html) | + + +## See next + +[Company user rules and permissions overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.html) diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/company-account-feature-overview/company-account-feature-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-account-feature-overview.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/company-account-feature-overview/company-account-feature-overview.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-account-feature-overview.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-accounts-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-accounts-overview.md new file mode 100644 index 00000000000..894dd7ef4ac --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-accounts-overview.md @@ -0,0 +1,151 @@ +--- +title: Company Accounts overview +description: In the context of permissions management, the top level of a B2B business model hierarchy is a Company. Each company has its organizational structure. +last_updated: Jul 19, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/company-accounts-overview +originalArticleId: 843043bb-7eeb-4023-8296-1c564b95f682 +redirect_from: + - /2021080/docs/company-accounts-overview + - /2021080/docs/en/company-accounts-overview + - /docs/company-accounts-overview + - /docs/en/company-accounts-overview + - /docs/scos/user/features/202200.0/company-account-feature-overview/company-accounts-overview.html + - /docs/scos/user/features/202311.0/company-account-feature-overview/company-accounts-overview.html + - /docs/scos/user/features/202204.0/company-account-feature-overview/company-accounts-overview.html +--- + +*Company accounts* let you build an organizational structure for your B2B business. + +## Company + +The top level of every B2B business model hierarchy is a *company*. The company represents a legal organization related to stores and has specific metadata, like a tax number. A company can have a name, activity state, and status attributes. + +{% info_block warningBox "Company statuses" %} + +On initial registration of a company, in the Back Office, it appears with the *Pending* status. After the company has been checked, it gets the *Approved* status. + + +![companies_overview.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+Account/Company+Account+Feature+Overview/companies_overview.png) + +{% endinfo_block %} + +## Business unit + +A company consists of several *business units*, which you can consider physical divisions of the company. Business units can have a hierarchical structure too. They can have their own departments and teams. Business units also have metadata, like a tax number. + +![company-account-overview.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+Account/Company+Account+Feature+Overview/company-account-overview.png) + +## Company address + +The level below the business unit is the *company address*. The company address is a physical representation of a company. + +One company address can be assigned to several business units. For example, if IT and Sales departments are located in the same office, they can share one company address. + +However, a department may be distributed between several locations and have several addresses. For example, if it's a building company, and each unit is a construction site, for each order made for this department, one selects which address of the department the order is to be delivered to. Also, default billing and shipping addresses can't be assigned to business units. + +## Company user + +The process of a new company registration begins with the registration of a customer. A customer that is an employee of a company is referred to as a *company user*. A company user always belongs to at least one business unit. + +The company user contains all the information about the customer and has a one-to-one relationship with the customer. Actually, when a new company user is created, a respective customer is created too. Therefore, the customer and company user always go together. The only difference between them is that the company user can contain meta information related to its company. + + +## Company account on the Storefront + +Company users can perform the following actions on the Storefront: + +
      +Create a company + +
      + +
      + + +
      + + +
      +Create a business unit + + +
      + +
      + +
      + +
      +Edit a business unit + + +
      + +
      + + +
      + +
      +Delete a business unit + +
      + +
      + +
      + + +
      +Create a user + +
      + +
      + + +
      + +
      +Edit, enable, and disable a user + +
      + +
      + +
      + +
      +Delete a user + +
      + +
      + +
      + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Manage companies](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-companies.html) | + + +## See next + +[Business Units overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/business-units-overview.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.md new file mode 100644 index 00000000000..e106fe3f06a --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.md @@ -0,0 +1,147 @@ +--- +title: Company user roles and permissions overview +description: Usually employees within a company have different roles (purchasing, administration, supervision). These roles are referred to as Company Roles. +last_updated: Nov 4, 2024 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/company-user-roles-and-permissions-overview +originalArticleId: 444e741d-bc54-4eb6-9483-16c4a94b765d +redirect_from: + - /docs/scos/user/features/202108.0/company-account-feature-overview/company-user-roles-and-permissions-overview.html + - /docs/scos/user/features/202200.0/company-account-feature-overview/company-user-roles-and-permissions-overview.html + - /docs/scos/user/features/202311.0/company-account-feature-overview/company-user-roles-and-permissions-overview.html + - /docs/scos/user/features/202204.0/company-account-feature-overview/company-user-roles-and-permissions-overview.html +--- + +Usually, employees within a company have different roles, for example–purchasing, administration, supervision. These roles are related to company users and are referred to as *company roles*. There is a *default role* that is applied to all new users. + +When the first company user is created, the default role is Admin. After the Admin user has been created, they create the structure of the company and can define the default role to be used further on. + +![roles.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+User+Permissions/Company+Roles+and+Permissions+Feature+Overview/roles.png) + +## Permissions + +Each company role contains a set of permissions in the form of **Permission** keys attributed to them. + +The Permission keys define what the users are allowed to do. For example, a user can be allowed to add products to the cart. + +Permissions that can be used aren't limited in any way: you can create and integrate any permissions. Each of the permissions is represented as a plugin in the code. + +Here is another example of the connection between company roles and permissions: + +- When a user registers a company in the system, they create a request for a company account registration. +- After the company account has been approved, this first company user becomes the company administrator. +- Therefore, one of the roles within the company is an administrator who has all the permissions with regard to the company profile creation and management, user accounts, and user rights. + +### Users with multiple roles + +A single user can have several company roles assigned to them. It means that the same user can be a junior sales manager and team leader. + +If a user is assigned with two company roles that have quantitative permissions, the highest value takes precedence. For example, suppose junior sales managers are allowed to place an order for up to 1000 Euro, whereas team leaders can place orders for up to 2000 Euro. If a user has both roles assigned to him, they can place orders for up to 2000 Euro. + +Or, for example, if junior sales managers can't view specific products, but team leaders can, the users having both a junior sales manager and team leader roles can view those products. + + +![roles-permissions.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+User+Permissions/Company+Roles+and+Permissions+Feature+Overview/roles-permissions.png) + +Company roles and permissions and their relation to the organizational structure can be schematically represented as follows: + +![roles_structure.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+User+Permissions/Company+Roles+and+Permissions+Feature+Overview/roles_structure.png) + +## Permission types + +Permissions can be simple and complex. + + + + + + + + + + + + + + + + + + + + + +
      Permission TypeDescriptionExample
      Simple Simple permissions are those that do not have any logic behind them and answer the question "Does a customer have a permission?". Simple permissions implement only `PermissionPluginInterface` (Shared). +

      A company user is allowed (or not allowed) to access product details page.

      + +
      ComplexComplex permissions have some logic behind them and answer the question "Does the customer have a permission with some parameters and business logic?". Complex permissions implement ExecutablePermissionPluginInterface (Shared). +

      A company user is allowed (or not allowed) to place an order with grand total over 1000 Euro.

      + +
      InfrastructuralSome permissions can't be managed in the UI, but programmatically. Infrastructural permissions implement `InfrastructuralPermissionPluginInterface` (Shared). +

      Read shared cart, which is managed by the Shared Carts feature.

      +
      + + + +Some permissions can be configured for specific roles—for example, for a junior support engineer, *allow adding no more than X items to cart*. Or for example, some specific products are not allowed to be viewed by anyone but Admin and top managers. + +These values are referred to as *company role permissions*. + + +### Storefront and backend permissions + +Storefront permissions don't need to get any data from the database. They refer to key-value storage or search to check the right for actions. For example, the permission to view a product, page, or permission to place an order, permission to place an order with grand total less than X would be Storefront-side permissions. + + +Permissions that require some data from the database or additional business logic on top to check the rights for actions are referred to as backend permissions. For example, the permission to add to cart up to X [order value] is a backend-side permission. In this case, the process of permissions check is as follows: +1. After the user clicks **Add to cart**, the request comes to backend, and the prechecks are made following the "add to cart" request. +2. Then, the calculations are run. The calculations apply discounts per items, and then per cart (total). The logic behind this is simple: a user might have a discount for a specific item and a discount for an order starting from a specific order value. The order value is calculated taking the discount per items into account, and therefore the discount per cart is applied after all discounts per items have been calculated. +3. After the calculations have been made, the cart is saved. + + +The permissions can't be checked at the step when the user just clicks **Add to cart** because the actual order value has not been calculated yet (prechecks have not been made yet, discounts have not been calculated). Also, the permissions check request can't be started after the cart has been updated—that would be too late, as, the cart has already been persisted. The request for the rights check is made somewhere in between—specifically, right after the discounts have been calculated. That is why the so-called "termination hooks" have been implemented deep in logic, where the permissions checks are made. + +The termination hooks (plugin stack) do not allow the permissions to sneak into the business logic foundation so it remains clean from the permissions and not overwhelmed with "can" "if not; then…". + +![termination_hooks.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Company+Account+Management/Company+User+Permissions/Company+Roles+and+Permissions+Feature+Overview/termination_hooks.png) + +The termination hooks are performed one by one, and process termination can happen for any reason, and one of them would be the permissions. + +## Company permissions on the Storefront + +Every company role includes a set of permissions that can be enabled or disabled according to your needs by switching the toggle in the **Enable** column: + +- **Add company users**: allows adding company users. With this permission enabled, a user has the **Create User** button on the **Company Users** page. +- **Invite users**: allows inviting company users. With this permission enabled, a user has the **Invite Users** button on the **Company Users** page. +- **Enable / Disable company users**: allows enabling and disabling company users. With this permission enabled, a user can switch a toggle in the **Enable** column on the **Company Users** page. +- **See Company Menu**: allows access to the company menu. With this permission enabled, a user can navigate to a company menu from the header of the shop interface. +- **Create company roles**: allows to create company roles. +- **Edit company roles**: allows to edit company roles. +- **Delete company roles**: allows to delete company roles. +- **See company roles**: allows to see company roles. +- **Delete company users**: allows to delete company users. +- **Edit company users**: allows to edit company users. +- **Add company users**: allows to add company users. +- **Add item to cart**: allows adding products to the cart. Without this permission, the user gets the "This action is forbidden" error when trying to add the product to the cart. +- **Change item in cart**: allows changing products in the cart (changing the quantity or adding notes). +- **Remove item from cart**: allows deleting the products from the cart. +- **Place Order**: allows placing the order. Without this permission enabled, a user gets an error when trying to submit the order. If the [Approval Process](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html) feature is integrated into your project, then **Buy up to grand total** permission is also required to place an order. +- **Buy up to grand total (Requires "Send cart for approval")**: sets a limit for the grand total of the cart. If the amount in the cart is larger than the limit set in this permission, the user can't proceed to checkout. Works with **Send cart for approval** permission. This permission is available after enabling the [Approval Process](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html) feature. +- **Approve up to grand total**: with this permission enabled, a user can approve the cart. For more details, see [Approval Feature Overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html). +- **View Business Unit orders**: with this permission enabled, a user can see not only their own orders but also the orders of their business unit. +- **View Company orders**: with this permission enabled, a user can see not only their own orders, orders of their business unit, but also the orders of their company. +- **Send cart for approval (Requires "Buy up to grand total")**—lets a user send the cart for approval. Works together with Buy up to grand total permission. See [Approval Feature Overview](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html) for more details. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create company roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-roles/create-company-roles.html) | +| [Edit company roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.html) | +| [Create company users](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-users/create-company-users.html) | +| [Edit company users](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/company-users/edit-company-users.html) | + + +## See next + +[Business on Behalf overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/business-on-behalf-overview.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/customer-login-by-token-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/customer-login-by-token-overview.md new file mode 100644 index 00000000000..e04dd524e8e --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/company-account-feature-overview/customer-login-by-token-overview.md @@ -0,0 +1,27 @@ +--- +title: Customer Login by Token overview +description: With the feature in place, B2B customers can log in to Spryker shop using a token. In the article, you can find a description of the token structure. +last_updated: Aug 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-login-by-token-overview +originalArticleId: 0bcb6d05-e12f-4cee-8daf-553edff0a43d +redirect_from: + - /2021080/docs/customer-login-by-token-overview + - /2021080/docs/en/customer-login-by-token-overview + - /docs/customer-login-by-token-overview + - /docs/en/customer-login-by-token-overview + - /docs/scos/user/features/202311.0/company-account-feature-overview/customer-login-by-token-overview.html + - /docs/scos/user/features/202204.0/company-account-feature-overview/customer-login-by-token-overview.html +--- + +*Customer Login* by Token feature lets B2B users log in to Spryker Shop using a token. + +Most modern ecommerce applications let customers log in by token or, in other words, they support token-based authentication. They do so for several good reasons: + +- Tokens are stateless. They are stored on the client side and already contain all the information they need for authentication. No session information about the server is great for scaling your application. + +- Tokens are secure. Tokens (not cookies) are sent on every request, which helps to prevent attacks. Since the session is not stored, there is no session-based information that could be manipulated. + +- Extensibility and access control. In the token payload, you can specify user roles, permissions as well as resources that the user can access. Besides, you can share some permissions with other applications. + +For technical details see [Customer Login by Token reference information](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/domain-model-and-relationships/customer-login-by-token-reference-information.html) diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-access-feature-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-access-feature-overview.md similarity index 97% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-access-feature-overview.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-access-feature-overview.md index e45750a32e3..06c1876f07c 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-access-feature-overview.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-access-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/customer-access-feature-overview originalArticleId: 06776bb5-8993-4d13-af9b-d1a1e9d317fe redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-access-feature-overview.html - /2021080/docs/customer-access-feature-overview - /2021080/docs/en/customer-access-feature-overview - /docs/customer-access-feature-overview diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md similarity index 97% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md index 0fb4e485995..ccdfcac61e9 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management originalArticleId: 88f6dffa-517a-4a00-ac9f-4041ba9b9841 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html - /2021080/docs/customer-account-management - /2021080/docs/en/customer-account-management - /docs/customer-account-management diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-accounts-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-accounts-overview.md new file mode 100644 index 00000000000..a48f107f361 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-accounts-overview.md @@ -0,0 +1,123 @@ +--- +title: Customer Accounts overview +description: Learn more about the Spryker Customer Accounts with this overview guide, explaining what Customer accounts are and how you can use them for your business. +last_updated: Aug 13, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-accounts-overview +originalArticleId: 94150bcb-e1c5-4290-b661-71af9fc3cbb3 +redirect_from: + - /docs/order-history-reference-information + - /docs/en/order-history-reference-information + - /docs/scos/user/features/202311.0/customer-account-management-feature-overview/customer-accounts-overview.html + - /docs/scos/user/features/202204.0/customer-account-management-feature-overview/customer-accounts-overview.html +--- + +A *customer account* contains the following customer information about the Storefront: + +- Contact details +- Addresses +- Order history +- Preferences, such as language and shipping options + +There are slight differences in customer accounts' information for the B2B and B2C shops. The following table describes such differences and similarities: + +| CUSTOMER ACCOUNT SECTION | B2B SHOP | B2C SHOP | +| --- | --- | --- | +| Overview | ✓ | ✓| +| Profile | ✓ | ✓ | +| Addresses | ✓ | ✓ | +| Order History | ✓ | ✓ | +| Newsletter | ✓ | ✓ | +| Shopping Lists | ✓ | | +| Shopping Carts | ✓ | | +| Wishlist | | ✓ | + +For details about how customer accounts can be created, see [Customer Registration overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-account-management-feature-overview/customer-registration-overview.html). + + +Customers manage their accounts directly on the Storefront. If a customer updates an account, the data is synchronized, and the Back Office user sees the updated information in the Back Office > **Customers > Customers** section. The exceptions are newsletter subscriptions and password changes: this information is not stored in the Back Office. + + +To comply with international regulations, a Back Office user can delete a customer account on a customer request. + +{% info_block warningBox %} + +Deleting a customer account does not affect billing and order-related information. Deleting an account anonymizes customer information and address data. By default, customer email addresses are anonymized, letting customers return and re-register with a completely new account. + +{% endinfo_block %} + +A Back Office user can do the following: + +- Add notes attached for customers. +- Set a preferred locale per customer. +- Deleting customer data using an anonymization mechanism. +- Configure a non-linear customer reference for external communication. +- Set address books with default addresses for billing and shipping. +- Send a password token by email. +- Check the last orders of a customer in the shop. + +For details, see the following: +- [Create customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/create-customers.html) +- [Add notes to customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.html) + +## Customer account on the Storefront + +A customer can perform the following actions on the Storefront: + +
      +View the account activity + + +
      + +
      + +
      + +
      +Create, edit, and delete a customer address + + + +
      + +
      + +
      + +
      +Filter order history + +
      + +
      + +
      + +
      +Reorder selected items + +
      + +
      + +
      + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/create-customers.html) | +| [Edit customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/edit-customers.html) | +| [View customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/view-customers.html) | +| [Add notes to customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.html) | +| [Add customer addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html) | +| [Edit customer addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.html) | diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-groups-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-groups-overview.md new file mode 100644 index 00000000000..4618a0f80d0 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-groups-overview.md @@ -0,0 +1,24 @@ +--- +title: Customer Groups overview +description: The Customer Groups feature lets you organize customers into groups to help you target users for discounts and promotions. +last_updated: Jul 15, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-groups-overview +originalArticleId: 046cf042-1c53-4c82-8498-21ec52d2e51f +redirect_from: + - /2021080/docs/customer-groups-overview + - /2021080/docs/en/customer-groups-overview + - /docs/customer-groups-overview + - /docs/en/customer-groups-overview + - /docs/scos/user/features/202200.0/customer-account-management-feature-overview/customer-groups-overview.html + - /docs/scos/user/features/202311.0/customer-account-management-feature-overview/customer-groups-overview.html + - /docs/scos/user/features/202204.0/customer-account-management-feature-overview/customer-groups-overview.html +--- + +*Customer Groups* let you organize customers into groups to help you target users for discounts and promotions. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Manage customer groups](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-customer-groups.html) | diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-login-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-login-overview.md new file mode 100644 index 00000000000..77434c84878 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-login-overview.md @@ -0,0 +1,34 @@ +--- +title: Customer Login overview +description: Learn more about the Spryker Customer Login with this overview guide and learn how creating a strong password policy can enhance your security. +last_updated: Jan 27, 2026 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-login-overview +originalArticleId: 7641234a-88aa-4031-85e1-c67aa38eb030 +redirect_from: + - /2021080/docs/customer-login-overview + - /2021080/docs/en/customer-login-overview + - /docs/customer-login-overview + - /docs/en/customer-login-overview + - /docs/scos/user/features/202311.0/customer-account-management-feature-overview/customer-login-overview.html + - /docs/scos/user/features/202204.0/customer-account-management-feature-overview/customer-login-overview.html +--- + +The *Customer Login* feature with an enhanced secure password policy lets you prevent brute-force login attacks by configuring your project in the following ways: + +- Block a Storefront user account for some time after a certain number of login attempts. +- Enforce the use of strong passwords by defining requirements for a password, like its length and allowed and forbidden characters. + +You can define separate settings for a Storefront user and agent. + +## Demo Shop default configuration + +The feature's default configuration in the Spryker Demo Shop is as follows. When a user tries to log in and the number of unsuccessful login attempts reaches the preset limit (11 attempts for a Storefront user and 10 for an [agent](/docs/pbc/all/user-management/{{page.version}}/base-shop/agent-assist-feature-overview.html)), the user account is locked out for some time (5 minutes for a Storefront user and 6 for an agent). After the last unsuccessful attempt, the user is notified that the ban is applied, and the user cannot log in until the ban expires. + +To minimize login issues for real customers, the ban is applied by the IP address, which means you can log in to the same user account from one IP address while being locked out of another IP address. All information about blocked accounts is stored in key-value store (Redis or Valkey). + +When registering an account or changing an old password in the Demo Shop, the password must contain a combination of alphabetic, numeric, and special characters. The alphabetic characters must also be of mixed case (for example, one lower case and one upper case), and the password length must be from 8 to 64 characters. + +## Security concerns + +In order to enable brute-force protection, follow [this security release](/docs/about/all/releases/security-releases/security-release-notes-202306.0#introduced-changes-3). diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-registration-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-registration-overview.md new file mode 100644 index 00000000000..a4823cc29ce --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/customer-registration-overview.md @@ -0,0 +1,77 @@ +--- +title: Customer Registration overview +description: Get customers registered on to your store with the Spryker Customer Registration Feature, learn the different methods to register customers to your store. +last_updated: Jul 15, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-registration-overview +originalArticleId: b13eea5d-0524-4858-a94a-c993b12606ea +redirect_from: + - /2021080/docs/customer-registration-overview + - /2021080/docs/en/customer-registration-overview + - /docs/customer-registration-overview + - /docs/en/customer-registration-overview + - /docs/scos/user/features/202311.0/customer-account-management-feature-overview/customer-registration-overview.html + - /docs/scos/user/features/202204.0/customer-account-management-feature-overview/customer-registration-overview.html +--- + +In Spryker, customer registration is done by double opt-in. A double opt-in occurs when a user signs up, and an email with a registration confirmation link is sent to them. After they click the verification link, their account is activated, and they can start using the online store as registered customers. + +{% info_block infoBox "Email verification" %} + +There are multiple ways to register a customer. Regardless of how customers are registered, they always must verify their email addresses. + +{% endinfo_block %} + +## Registration flows + +There are five customer registration options: + +- Regular registration +- Checkout registration +- Registration by creating an account in the Back Office +- Registration by Glue API +- Registration by import + +### Regular registration + +The *regular registration* is the registration triggered from the registration page of the **My Account** page on the Storefront. It is a two-step process: + +1. A customer fills out the registration form and selects **Sign Up**. A message about the email verification is displayed. + +2. The customer selects the verification link in the email and gets redirected to the login page, where the message about successful account activation is displayed. + +### Checkout registration + +*Checkout registration* is the registration triggered from the login checkout step. A customer adds products to the cart as a guest user and proceeds to checkout. At the login checkout step, they choose to sign up. Then, they follow the [regular registration](#regular-registration). + +After checkout registration, the cart created by a customer as a guest user is converted into a registered user's cart and appears in the customer's list of carts. + +### Registration by creating an account in the Back Office + +A Back Office user can register a customer by entering customer account details. The verification email is sent to the email address specified by the Back Office user. Until the customer verifies their account using the link in the email, in the Back Office, the status of their account remains `Unverified`. Once they click the link, the status changes to `Verified`. + +To learn how a Back Office user creates customer accounts, see [Creating customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/create-customers.html). + +### Registration using Glue API + +A developer can register a customer by passing their customer account details using Glue API. The verification email is sent to the email address passed in the registration request. The customer activates the account by verifying their email address. Alternatively, a developer can verify the customer's email address using Glue API. + +{% info_block infoBox "Verifying a customer's email address using Glue API" %} + +A developer can verify a customer's email address using Glue API regardless of the way the account was created. + +{% endinfo_block %} + +To learn how a developer creates customer accounts using Glue API, see [Create a customer](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html). + +To learn how a developer confirms a customer's email address, see [Confirming customer registration](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-confirm-customer-registration.html). + +### Registration using import + +A developer can register a customer by importing their customer account details. The verification email is sent to the email address specified in the import file. The customer activates the account by verifying their email address. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/customers/create-customers.html) | diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/password-management-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/password-management-overview.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/password-management-overview.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/password-management-overview.md index f372a3e00d2..acb57a1b439 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/password-management-overview.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/customer-account-management-feature-overview/password-management-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/password-management-overview originalArticleId: 5319cfcb-db06-4238-9f68-c473289b1297 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/customer-account-management-feature-overview/password-management-overview.html - /2021080/docs/password-management-overview - /2021080/docs/en/password-management-overview - /docs/password-management-overview diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/domain-model-and-relationships/company-account-module-relations.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/company-account-module-relations.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/domain-model-and-relationships/company-account-module-relations.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/company-account-module-relations.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-login-by-token-reference-information.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-login-by-token-reference-information.md new file mode 100644 index 00000000000..eeedcbe61bb --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-login-by-token-reference-information.md @@ -0,0 +1,87 @@ +--- +title: "Customer Login by Token: reference information" +description: Learn about the Customer login by token within Spryker, using the base64url format for the tokens and how tokens are structured. +template: feature-walkthrough-template +last_updated: Nov 17, 2023 +originalLink: https://documentation.spryker.com/2021080/docs/customer-login-by-token-overview +redirect_from: +- /docs/scos/dev/feature-walkthroughs/202200.0/company-account-feature-walkthrough/customer-login-by-token-reference-information.html +- /docs/scos/dev/feature-walkthroughs/202311.0/company-account-feature-walkthrough/customer-login-by-token-reference-information.html +- /docs/scos/dev/feature-walkthroughs/202204.0/company-account-feature-walkthrough/customer-login-by-token-reference-information.html +--- + +A *token* is a unique identifier that contains all the information needed for authentication to fetch a specific resource without using a username and password. The tokens are JSON strings that are encoded in base64url format. + +The lifetime of the token is 8 hours by default, but this value can be changed at the project level. + +## Token structure + +Every token consists of three sections separated by periods. + +![Token structure](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Workflow+&+Process+Management/Customer+Login+by+Token/Customer+Login+by+Token+Feature+Overview/token-structure.png) + +- The *header* contains the information about the token type (JWT) and the encryption algorithm (RS256). For example: + +```json +{ + "typ": "JWT", + "alg": "RS256", + "jti": "9ced66ac5cefe17681576bf95b800078e3020142faaa524da871ffb2a63508952045e10453136bde" +} +``` + +Once the header is encoded, we get the part of the token: + +```text +eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjljZWQ2NmFjNWNlZmUxNzY4MTU3NmJmOTViODAwMDc4ZTMwMjAxNDJmYWFhNTI0ZGE4NzFmZmIyYTYzNTA4OTUyMDQ1ZTEwNDUzMTM2YmRlIn0 +``` + +- The *payload* stores multiple claims (statements) about the user's identity and additional data—for example, permissions. Here, you can find the needed information for transmission. The `id_customer` and `idcompanyuser` identifiers are included by default. However, you can extend the payload with any data according to your project requirements. + +Example payload: + +```json +{ + "aud": "frontend", + "jti": "9ced66ac5cefe17681576bf95b800078e3020142faaa524da871ffb2a63508952045e10453136bde", + "iat": 1557926620, + "nbf": 1557926620, + "exp": 1557955420, + "sub": " {/"customer_reference/":null,/"id_customer/":6,/"id_company_user/":/"1/",/"permissions/":null}", + "scopes": [] +} +``` + +The example above contains six [registered claims](https://www.iana.org/assignments/jwt/jwt.xhtml) that, when encoded, correspond to the following: + +```text +eyJhdWQiOiJmcm9udGVuZCIsImp0aSI6IjljZWQ2NmFjNWNlZmUxNzY4MTU3NmJmOTViODAwMDc4ZTMwMjAxNDJmYWFhNTI0ZGE4NzFmZmIyYTYzNTA4OTUyMDQ1ZTEwNDUzMTM2YmRlIiwiaWF0IjoxNTU3OTI2NjIwLCJuYmYiOjE1NTc5MjY2MjAsImV4cCI6MTU1Nzk1NTQyMCwic3ViIjoie1wiY3VzdG9tZXJfcmVmZXJlbmNlXCI6bnVsbCxcImlkX2N1c3RvbWVyXCI6NixcImlkX2NvbXBhbnlfdXNlclwiOlwiMVwiLFwicGVybWlzc2lvbnNcIjpudWxsfSIsInNjb3BlcyI6W119 +``` + +- The *signature* contains the hash of the header, payload, and secret needed. + +The following is an example signature: + +```json +RSASHA256( + base64UrlEncode(header) + "." + + base64UrlEncode(payload), + secret +) +``` + +The final part of the encoded token looks like this: + +```text +v6kvCtNMM-_x-sRWugigT2j7qXVXQ9Ds5a-65sD_d4Oaun0toGnM_A-458mCyV1FCdyOHU572hdz7w3SFcIHzFw4zGGr_cqMdBmCF6VJS21lcOK401j2Li4NJB-8TmOHMk1XmjrJ92EyBScvycTg8TCkY3w4jcIGN7TPGAwzvEWaJhIwqYGjEUcTWtsiIemeWijTWVYd4qE6gnXdzMeyekFLon9syLnXdxeAQ8qNM7BML5QfvazvuMBvFQWfatDcRd2SFfIkNmMrxEQ6daEaPEfyqpdXpHfhpzvuQpA0hQQ9BfYBrwvTskpH_CWTht7IsOqlY4KYRNIg-t3tcZYt6Q +``` + +Combining the three parts, an example URL with the full token looks like the following: + +```text +http://mysprykershop.com/access-token/eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjljZWQ2NmFjNWNlZmUxNzY4MTU3NmJmOTViODAwMDc4ZTMwMjAxNDJmYWFhNTI0ZGE4NzFmZmIyYTYzNTA4OTUyMDQ1ZTEwNDUzMTM2YmRlIn0.eyJhdWQiOiJmcm9udGVuZCIsImp0aSI6IjljZWQ2NmFjNWNlZmUxNzY4MTU3NmJmOTViODAwMDc4ZTMwMjAxNDJmYWFhNTI0ZGE4NzFmZmIyYTYzNTA4OTUyMDQ1ZTEwNDUzMTM2YmRlIiwiaWF0IjoxNTU3OTI2NjIwLCJuYmYiOjE1NTc5MjY2MjAsImV4cCI6MTU1Nzk1NTQyMCwic3ViIjoie1wiY3VzdG9tZXJfcmVmZXJlbmNlXCI6bnVsbCxcImlkX2N1c3RvbWVyXCI6NixcImlkX2NvbXBhbnlfdXNlclwiOlwiMVwiLFwicGVybWlzc2lvbnNcIjpudWxsfSIsInNjb3BlcyI6W119.v6kvCtNMM-_x-sRWugigT2j7qXVXQ9Ds5a-65sD_d4Oaun0toGnM_A-458mCyV1FCdyOHU572hdz7w3SFcIHzFw4zGGr_cqMdBmCF6VJS21lcOK401j2Li4NJB-8TmOHMk1XmjrJ92EyBScvycTg8TCkY3w4jcIGN7TPGAwzvEWaJhIwqYGjEUcTWtsiIemeWijTWVYd4qE6gnXdzMeyekFLon9syLnXdxeAQ8qNM7BML5QfvazvuMBvFQWfatDcRd2SFfIkNmMrxEQ6daEaPEfyqpdXpHfhpzvuQpA0hQQ9BfYBrwvTskpH_CWTht7IsOqlY4KYRNIg-t3tcZYt6Q +``` + +In the Spryker Commerce OS, token generation is performed using a facade method, which is why no GUI is present. To generate a token, see [HowTo: Generate a token for login](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/generate-login-tokens.html). + +To make the feature more flexible, we have implemented the functionality that lets you disable switching between the Business-on Behalf accounts. For example, if the user logs in to the pre-defined company account that has Business-on-Behalf feature integrated, the shop owner can disable the ability to switch between the accounts. In case the Business-on-Behalf is disabled, the company user logs in to the default account and can't switch between the company users within their company account. diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-module-overview-reference-information.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-module-overview-reference-information.md new file mode 100644 index 00000000000..528743e6e0d --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/domain-model-and-relationships/customer-module-overview-reference-information.md @@ -0,0 +1,93 @@ +--- +title: "Customer module overview: reference information" +last_updated: Aug 13, 2021 +description: This document describes how new customers can be created and managed and how to enable specific features related to customers. +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202200.0/customer-account-management-feature-walkthrough/reference-information-customer-module-overview.html + - /docs/scos/dev/feature-walkthroughs/202204.0/customer-account-management-feature-walkthrough/reference-information-customer-module-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/customer-account-management-feature-walkthrough/reference-information-customer-module-overview.html + - /docs/scos/dev/feature-walkthroughs/202204.0/customer-account-management-feature-walkthrough/customer-module-overview-reference-information.html +--- + +The Customer entity wraps data around registered customers. Customer data is managed from the Back Office by the shop administrator and from the shop website itself by customers. This document describes how new customers can be created and managed and how to enable specific features related to customers. + +## Customer registration + +Customer registration requires two steps: + +1. Creating a new customer: This step can be done from both the backend and frontend applications. Customers are created in the database if the entered details are valid. A registration key is generated for each customer and used as a token for customer registration confirmation. The key is embedded in the confirmation link sent by email. +2. Confirming customer registration: Only a customer can confirm registration through the frontend application. The customer accesses the link received in the email sent after the customer creation. When opening the link, an update is triggered that sets the customer as registered. + +After these two steps are performed, the customer can use the account. + +![customer.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Customer+Relationship+Management/Customer+Groups/Customer+Module+Overview/customer.png) + +## Customer address + +One customer can have many customer addresses stored in the database. + +There are two types of customer addresses: + +- Billing Address: the address to which the invoice or bill is registered. +- Shipping Address: the address to where the order is shipped. + +Customers are assigned a default billing and a default shipping address. Customers can update their addresses through their account (from Yves) or have them updated by the Back Office user (from the Back Office). + +## Password recovery + +Similar to the customer registration flow, password restore makes use of a token that acts as a temporary password for the customer. An email is sent to the user to reset the password. The mail contains a link where the password recovery token is embedded. This token is generated specifically for this request. After the customer accesses the URL and enters necessary confirmation data, the customer's password is updated. + +Out of the box, Spryker provides the plugin `CustomerRestorePasswordMailTypePlugin` (Customer module) to handle a restore password email template. To enable it, register this plugin in your `MailDependencyProvider`—for example, `Pyz/Zed/Mail/MailDependencyProvider`). + +{% info_block infoBox "Token link generation" %} + +By default, the `Customer` module leads to `'‹YVES HOST›/password/restore?token='`. If it's different in your project, configure the generation of restore links in `Spryker/Zed/Customer/CustomerConfig::getCustomerPasswordRestoreTokenUrl()` + +{% endinfo_block %} + +## Delete customer + +Customers can remove themselves by clicking **Delete Account** on the Yves Profile page. In addition, this functionality is also available in the Back Office (**Customer > View > Delete**). + +Complete removal from the customer table is strictly prohibited as it could affect the database consistency of e-commerce projects or even be illegal in terms of tax reporting and auditing. In Spryker, we don't remove identifiers from a customer table, but instead anonymize private information. Information related to orders and bills will stay untouched. + +{% info_block errorBox "Error" %} + +We use irreversible algorithms to make it impossible to repair deleted data. + +{% endinfo_block %} + +After the deletion, customers can use an old email for registration, as the new registration does not have any connections to an old one (anonymized). + +To prevent missing any customer-related information, do the following: + +1. Process removal for related customer objects. Here you could take care of information stored in dependent bundles or custom relations. To do so, implement the `CustomerAnonymizerPluginInterface`. As an example, take a look at the Newsletter module plugin for unsubscribing a customer from newsletters before removal `Spryker/Zed/Newsletter/Business/Anonymizer/SubscriptionAnonymizer`. +2. Anonymize customer address information. +3. Anonymize private customer information. Information directly related to customer fields—for example, first name, last name, and date of birth. + +{% info_block errorBox "Information privacy law " %} + +When creating a custom implementation, check and follow the applicable legislation in your country. + +{% endinfo_block %} + +## Customer experience + +Spryker consistently delivers the scalable operating system without coupling it to a project infrastructure. As a consequence, the project should take care of the impact of the **Customer Delete** functionality on customer experience. Read more about session-sensitive actions in [Upgrade the Customer module](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.html). + +### Case insensitive queries for email + +From version 7.0.0, on case-insensitive queries, using the `filterByEmail` conditions are enabled by default. If your version of the **Customer** module is older, you are still able to use this feature. + +To enable case insensitive fields in Propel for filtering queries, update the `PropelOrm` module to the 1.5.0 version. + +When the feature is enabled, add an attribute `caseInsensitive="true"` into the customer schema file on the project level (usually `src/Pyz/Zed/Customer/Persistence/Propel/Schema/spy_customer.schema.xml`). + +Finally, run `vendor/bin/console propel:diff` and `vendor/bin/console propel:model:build` to update Propel models. + +### Orders display on Customer View page + +From Customer module 7.6.0 (along with Sales module version 8.7.0), we support the display of customer orders in the **Customers** section of the Back Office. The **Customers View** page now has the Orders table listing all the orders of a respective customer. + +To enable the feature to see extra blocks on the **Customer View** page in the Back Office, go to the `CustomerConfig` class in the `Customer` module and add the `getCustomerDetailExternalBlocksUrls` function. This function should return an array where the key is the block name and the value is the URL where this block exists. As for the orders, they are in `/sales/customer/customer-orders`, which in our routing architecture points to Sales `module` -> `CustomerController` -> `CustomerOrdersAction`. If this behavior needs to be extended further, all that's needed is more key-value pairs for more controller actions that provide the data. diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/generate-login-tokens.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/generate-login-tokens.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/generate-login-tokens.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/generate-login-tokens.md index c6f36d724b1..72e34b3b065 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/generate-login-tokens.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/generate-login-tokens.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/howto-generate-a-token-for-login originalArticleId: d8eb9816-18d8-4da0-b856-1d3989a07932 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/generate-login-tokens.html - /2021080/docs/howto-generate-a-token-for-login - /2021080/docs/en/howto-generate-a-token-for-login - /docs/howto-generate-a-token-for-login diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company-business-unit.csv.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company-business-unit.csv.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company-business-unit.csv.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company-business-unit.csv.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company-user.csv.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company-user.csv.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company-user.csv.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company-user.csv.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company.csv.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company.csv.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-company.csv.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-company.csv.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-customer.csv.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-customer.csv.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-and-export-data/file-details-customer.csv.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-and-export-data/file-details-customer.csv.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-file-details-customer.csv.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-file-details-customer.csv.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-file-details-customer.csv.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-file-details-customer.csv.md index 9e4fa4beba2..754a405c982 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-file-details-customer.csv.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/import-file-details-customer.csv.md @@ -5,6 +5,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-customercsv originalArticleId: 08356679-8b76-4d14-b756-fb39a77d3da7 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/import-file-details-customer.csv.html - /2021080/docs/file-details-customercsv - /2021080/docs/en/file-details-customercsv - /docs/file-details-customercsv diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md new file mode 100644 index 00000000000..88205213f36 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.md @@ -0,0 +1,24 @@ +--- +title: Install the Company account feature +description: Learn how to install Business on Behalf, Company Account Storage, and Company Account OAuth functionality into your Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/company-account-feature-integration +originalArticleId: f29e0e4a-c1f6-4812-ae43-a771909cb715 +redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-feature.html + - /2021080/docs/company-account-feature-integration + - /2021080/docs/en/company-account-feature-integration + - /docs/company-account-feature-integration + - /docs/en/company-account-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/company-account-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/company-account-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/company-account-feature-integration.html +related: + - title: Glue API - Install the Company account feature + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html + - title: Install the Company Account + Order Management feature + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-company-account-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contract-requests-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-merchant-b2b-contracts-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md new file mode 100644 index 00000000000..1794e1db76c --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.md @@ -0,0 +1,20 @@ +--- +title: Install the Company Account + Order Management feature +description: This guide provides step-by-step instruction on integrating Company Account Management + Order Management feature into the Spryker-based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/company-account-order-management-feature-integration +originalArticleId: 459ba566-efc9-4a44-a990-65d13d137032 +redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-company-account-order-management-feature.html + - /2021080/docs/company-account-order-management-feature-integration + - /2021080/docs/en/company-account-order-management-feature-integration + - /docs/company-account-order-management-feature-integration + - /docs/en/company-account-order-management-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/company-account-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/company-account-order-management-feature-integration.html +related: + - title: Company Account + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-account-feature-overview.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-company-account-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-access-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md new file mode 100644 index 00000000000..3ac09f8274d --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.md @@ -0,0 +1,20 @@ +--- +title: Install the Customer Account Management + Agent Assist feature +description: Integrate the Customer Account Management + Agent Assist feature into your project. +last_updated: Nov 21, 2022 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-agent-assist-feature-integration +originalArticleId: ac6402fe-4140-479f-a08a-76c03b263afa +redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html + - /docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html + - /2021080/docs/customer-account-management-agent-assist-feature-integration + - /2021080/docs/en/customer-account-management-agent-assist-feature-integration + - /docs/customer-account-management-agent-assist-feature-integration + - /docs/en/customer-account-management-agent-assist-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-agent-assist-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-agent-assist-feature-integration.html + - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-agent-assist-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature-dynamic-multistore.md diff --git a/docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md new file mode 100644 index 00000000000..a7ad5bf643b --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Customer Account Management + Order Management feature +description: This guide provides step-by-step instruction on integrating Customer Account Management + Order Management feature into the Spryker-based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/customer-account-management-order-management-feature-integration +originalArticleId: 749599c0-c1ab-4553-88ad-ee055c344ab8 +redirect_from: + - /docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-order-management-feature.html + - /2021080/docs/customer-account-management-order-management-feature-integration + - /2021080/docs/en/customer-account-management-order-management-feature-integration + - /docs/customer-account-management-order-management-feature-integration + - /docs/en/customer-account-management-order-management-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/customer-account-management-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/customer-account-management-order-management-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-order-management-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..f10ec047016 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-promotions-and-discounts-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Customer Account Management + Promotions & Discounts feature +description: Learn how to integrate the Customer Account Management + Promotions & Discounts feature into a Spryker project. +last_updated: Jun 19, 2025 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-customer-account-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-service-points-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-service-points-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-service-points-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-service-points-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-shipment-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md new file mode 100644 index 00000000000..719d8278d2f --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.md @@ -0,0 +1,21 @@ +--- +title: Install the Company Account Glue API +description: Learn how ot install and configure the Spryker Company Account GLUE API in to your Spryker projects. +last_updated: Jul 13, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-company-account-api-feature-integration +redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html + - /docs/pbc/all/customer-relationship-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html + - /2021080/docs/glue-api-company-account-api-feature-integration + - /2021080/docs/en/glue-api-company-account-api-feature-integration + - /docs/glue-api-company-account-api-feature-integration + - /docs/en/glue-api-company-account-api-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-company-account-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-company-account-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-company-account-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-company-account-feature-integration.html + - /docs/pbc/all/customer-relationship-management/202403.0/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-company-account-glue-api.md %} diff --git a/docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-customer-account-management-glue-api.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-businessonbehalfdataimport-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-businessonbehalfdataimport-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-businessonbehalfdataimport-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-businessonbehalfdataimport-module.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companybusinessunit-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companybusinessunit-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companybusinessunit-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companybusinessunit-module.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuser-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuser-module.md new file mode 100644 index 00000000000..2cdfdf6a483 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuser-module.md @@ -0,0 +1,36 @@ +--- +title: Upgrade the CompanyUser module +description: Use the guide to update versions to the newer ones of the CompanyUser module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-companyuser +originalArticleId: 6353be44-e8fb-4d67-918e-c590edb16b31 +redirect_from: + - /2021080/docs/mg-companyuser + - /2021080/docs/en/mg-companyuser + - /docs/mg-companyuser + - /docs/en/mg-companyuser + - /v1/docs/mg-companyuser + - /v1/docs/en/mg-companyuser + - /v2/docs/mg-companyuser + - /v2/docs/en/mg-companyuser + - /v3/docs/mg-companyuser + - /v3/docs/en/mg-companyuser + - /v4/docs/mg-companyuser + - /v4/docs/en/mg-companyuser + - /v5/docs/mg-companyuser + - /v5/docs/en/mg-companyuser + - /v6/docs/mg-companyuser + - /v6/docs/en/mg-companyuser + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-companyuser.html + - /docs/scos/dev/module-migration-guides/migration-guide-companyuser.html + - /docs/pbc/all/customer-relationship-management/202204.0/install-and-upgrade/upgrade-modules/upgrade-the-companyuser-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-companyuser-module.md %} diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuserauthrestapi-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuserauthrestapi-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuserauthrestapi-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyuserauthrestapi-module.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyusersrestapi-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyusersrestapi-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyusersrestapi-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-companyusersrestapi-module.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md similarity index 92% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md index 3c6869767a5..0b633bcf41e 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-customer originalArticleId: a9b5453f-e5cc-4a5e-8b3b-b2037b9aeb77 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customer-module.html - /2021080/docs/mg-customer - /2021080/docs/en/mg-customer - /docs/mg-customer diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerpage-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerpage-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerpage-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerpage-module.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md similarity index 93% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md index 5f0751f315c..a2c8a8cad23 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-customer-reorder-widget originalArticleId: 53190406-dcf2-4815-ac3f-5508d1b57497 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.html - /2021080/docs/mg-customer-reorder-widget - /2021080/docs/en/mg-customer-reorder-widget - /docs/mg-customer-reorder-widget diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sharedcartpage-module.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sharedcartpage-module.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sharedcartpage-module.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sharedcartpage-module.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md similarity index 95% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md index e630bfd4eca..da0c82eac1b 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-company-roles originalArticleId: 3297455f-e357-4d29-94ae-0797c45f25a3 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/create-company-roles.html - /2021080/docs/managing-company-roles - /2021080/docs/en/managing-company-roles - /docs/managing-company-roles diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md similarity index 95% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md index 2fe443deb33..5e5092744af 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.md @@ -4,6 +4,7 @@ description: Learn how to edit a company roles in the Spryker Cloud Commerce OS template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-roles/edit-company-roles.html - /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-roles.html - /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-roles.html - /docs/scos/user/back-office-user-guides/202204.0/customer/company-roles/edit-company-roles.html diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md similarity index 95% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md index 1f4774d9fc1..b806da2068c 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-company-unit-addresses originalArticleId: b3bbc8db-3448-4aa1-8d93-eb435113d36c redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/create-company-unit-addresses.html - /2021080/docs/managing-company-unit-addresses - /2021080/docs/en/managing-company-unit-addresses - /docs/managing-company-unit-addresses diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md similarity index 80% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md index f13f16ab1c9..37f4fa6e779 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.md @@ -4,13 +4,13 @@ description: Learn how to edit company unit addresses in the Spryker Cloud Comme template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: -- /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-unit-addresses.html -- /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-unit-addresses.html + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-unit-addresses/edit-company-unit-addresses.html + - /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-unit-addresses.html + - /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-unit-addresses.html related: - title: Business Units overview link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/business-units-overview.html --- - To edit a company unit address in the Back Office, do the following: 1. Go to **Customers > Company Unit Addresses**. diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md similarity index 95% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md index f0631891bea..3667fcf5341 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/create-company-units.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-company-units originalArticleId: 6a9bb3d9-ef8f-444e-b5f7-7d6f964792c5 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/create-company-units.html - /2021080/docs/managing-company-units - /2021080/docs/en/managing-company-units - /docs/managing-company-units diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md similarity index 81% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md index f25df1434ac..da3e29669e8 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.md @@ -4,14 +4,14 @@ description: Learn how to edit company units configured in the Spryker Cloud Com template: back-office-user-guide-template last_updated: Mar 20, 2024 redirect_from: -- /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-units.html -- /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-units.html -- /docs/scos/user/back-office-user-guides/202204.0/customer/company-units/edit-company-units.html + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-units/edit-company-units.html + - /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-units.html + - /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-units.html + - /docs/scos/user/back-office-user-guides/202204.0/customer/company-units/edit-company-units.html related: - title: Business Units overview link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/business-units-overview.html --- - This document describes how to edit company units in the Back Office. You can add addresses to company units only when editing them. diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md index 12bf481f526..124053f910a 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/create-company-users.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-company-users originalArticleId: ff15efb5-30c1-4b0e-b56d-596d90d40123 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/create-company-users.html - /2021080/docs/managing-company-users - /2021080/docs/en/managing-company-users - /docs/managing-company-users diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md similarity index 85% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md index 05dc6d1bb8a..9009a99ccee 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.md @@ -4,9 +4,10 @@ description: Learn how to edit company users that are configured in the Spryker template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: -- /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-users.html -- /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-users.html -- /docs/scos/user/back-office-user-guides/202204.0/customer/company-users/edit-company-users.html + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/company-users/edit-company-users.html + - /docs/scos/user/back-office-user-guides/202200.0/customer/company-account/managing-company-users.html + - /docs/scos/user/back-office-user-guides/202311.0/customer/company-account/managing-company-users.html + - /docs/scos/user/back-office-user-guides/202204.0/customer/company-users/edit-company-users.html related: - title: Create company users link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-in-the-back-office/company-users/create-company-users.html @@ -17,7 +18,6 @@ related: - title: Company user roles and permissions overview link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.html --- - This document describes how to edit company users. ## Prerequisites diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md index f447f9d23e0..5999ece131c 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-addresses originalArticleId: f4e8cd51-98cc-44d9-83aa-293f510d75a5 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-customer-addresses.html - /2021080/docs/managing-customer-addresses - /2021080/docs/en/managing-customer-addresses - /docs/managing-customer-addresses diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md similarity index 88% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md index 7e4fe0ac638..2ab77feec30 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.md @@ -4,6 +4,7 @@ description: Learn how to add notes to your customers in the Spryker Cloud Comme template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/add-notes-to-customers.html - /docs/scos/user/back-office-user-guides/202311.0/customer/customers/add-notes-to-customers.html - /docs/scos/user/back-office-user-guides/202204.0/customer/customers/add-notes-to-customers.html related: diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/create-customers.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/create-customers.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/create-customers.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/create-customers.md index 12d4d1e1199..7102e75024d 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/create-customers.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/create-customers.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customers originalArticleId: 32a86d51-5bdd-428b-8ae4-5929326f4a26 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/create-customers.html - /2021080/docs/managing-customers - /2021080/docs/en/managing-customers - /docs/managing-customers diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md similarity index 94% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md index f1491ee74ff..c184668e0b6 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.md @@ -4,6 +4,7 @@ description: Learn how to edit customer addresses that are configured in the Spr template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customer-addresses.html - /docs/scos/user/back-office-user-guides/202311.0/customer/customers/edit-customer-addresses.html - /docs/scos/user/back-office-user-guides/202204.0/customer/customers/edit-customer-addresses.html related: diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customers.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customers.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customers.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customers.md index 8f1ec3b164e..666b8ea4abc 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customers.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/edit-customers.md @@ -4,6 +4,7 @@ description: Learn how to edit customers information in the Spryker Cloud Commer template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/edit-customers.html - /docs/scos/user/back-office-user-guides/202311.0/customer/customers/edit-customers.html - /docs/scos/user/back-office-user-guides/202204.0/customer/customers/edit-customers.html related: diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/view-customers.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/view-customers.md similarity index 93% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/view-customers.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/view-customers.md index ff9e0b0923c..ee2af6ce87f 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/view-customers.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/customers/view-customers.md @@ -4,6 +4,7 @@ description: Learn how you can view and explore all of your customers in the Spr template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/customers/view-customers.html - /docs/scos/user/back-office-user-guides/202311.0/customer/customers/view-customers.html - /docs/scos/user/back-office-user-guides/202204.0/customer/customers/view-customers.html related: diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies-and-customers-in-the-back-office.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-companies-and-customers-in-the-back-office.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies-and-customers-in-the-back-office.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-companies-and-customers-in-the-back-office.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-companies.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-companies.md index 85ac51e112f..1299fc47334 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-companies.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-companies originalArticleId: 5e075d70-a08b-4995-ad61-25bfc5a2e68b redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-companies.html - /2021080/docs/managing-companies - /2021080/docs/en/managing-companies - /docs/managing-companies diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-access.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-customer-access.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-access.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-customer-access.md diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-groups.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-customer-groups.md similarity index 96% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-groups.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-customer-groups.md index 32ed79d8c2a..c35a8673a73 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-groups.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-in-the-back-office/manage-customer-groups.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-groups originalArticleId: 3540b410-11bf-4d1f-a9f6-306009db8740 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-in-the-back-office/manage-customer-groups.html - /2021080/docs/managing-customer-groups - /2021080/docs/en/managing-customer-groups - /docs/managing-customer-groups diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md new file mode 100644 index 00000000000..65b8ada0e7e --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/cart-feature-overview.md @@ -0,0 +1,51 @@ +--- +title: Cart feature overview +last_updated: Jul 20, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/cart +originalArticleId: eb211809-3be4-4b8a-bf28-a2c79140b11c +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202005.0/cart-feature-walkthrough/cart-functionality.html + - /docs/scos/user/features/202009.0/cart-feature-overview/cart-feature-overview.html + - /docs/scos/user/features/202311.0/cart-feature-overview/cart-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/cart-feature-walkthrough/cart-feature-walkthrough.html + - /docs/pbc/all/cart-and-checkout/202311.0/cart-feature-overview/cart-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202311.0/base-shop/cart-feature-overview/cart-feature-overview.html + - /docs/pbc/all/cart-and-checkout/202204.0/base-shop/feature-overviews/cart-feature-overview/cart-feature-overview.html +--- + +The *Cart* feature lets your customers add products to their cart by selecting the preferred quantity of a product. Inside the cart, customers can change the number of items, switch between different variants of the product, add notes, apply vouchers, and remove items. + +Any changes the customer makes within the cart trigger an automatic sum-recalculation that is immediately applied to the total in the sum. Predefined taxes are applied and shown automatically. Additionally, logged-in customers can see and edit their cart from any device. + +The persistent cart functionality lets authenticated customers store their cart throughout multiple sessions. The Cart feature also ensures that your business rules, such as discounts, taxes, or shipping, are applied based on the customers' final choice of items. + +Your customers can place orders faster by adding simple products to their cart from the **Category** page. They can add products with one [product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) to the cart with one click. + +The feature supports [product groups](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-groups-feature-overview.html). If simple products are grouped, you can browse and add these products to your cart from the **Category** page. + +In a Spryker shop, the shopping cart widget is displayed in the header. With the widget, customers can easily create new shopping carts and view the existing ones by pointing to the cart icon. + +## Related Business User documents + +|OVERVIEWS| +|---| +| [Cart Notes](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-notes-overview.html) | +| [Cart Widget](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/cart-widget-overview.html) | +| [Quick Order from the Catalog Page](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/cart-feature-overview/quick-order-from-the-catalog-page-overview.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | TUTORIALS AND HOWTOS | REFERENCES | +|---------------------|----------------|------------------|-----------------------|------------| +| [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | [Upgrade the Cart module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cart-module.html) | [Manage guest carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html) | [HowTo: Define if a cart should be deleted after placing an order](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/tutorials-and-howtos/define-if-carts-are-deleted-after-placing-an-order.html) | [Calculation 3.0](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-3-0.html) | +| [Install the Cart + Shipment feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-shipment-feature.html) | [Upgrade the CartExtension module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartextension-module.html) | [Manage carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Calculation data structure](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculation-data-structure.html) | +| [Install the Cart + Product Bundles feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-bundles-feature.html) | [Upgrade the CartPage module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartpage-module.html) | [Retrieve customer carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.html) | | [Calculator plugins](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/calculator-plugins.html) | +| [Install the Persistent Cart + Comments feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-persistent-cart-comments-feature.html) | [Upgrade the CartsRestApi module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartsrestapi-module.html) | [Manage items in carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) | | [Cart module: Reference information](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/extend-and-customize/cart-module-reference-information.html) | +| [Install the Cart + Agent Assist feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-agent-assist-feature.html) | [Upgrade the CartVariant module](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cartvariant-module.html) | [Manage guest cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html) | | | +| [Install the Cart + Non-splittable products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-non-splittable-products-feature.html) | | | | | +| [Install the Cart + Product feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-feature.html) | | | | | +| [Install the Cart + Product Group feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-product-group-feature.html) | | | | | +| | | | | | +| [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) | | | | | + diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.md new file mode 100644 index 00000000000..f3fe7423737 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.md @@ -0,0 +1,111 @@ +--- +title: "Glue API: Retrieve business unit addresses" +description: Learn how to retrieve business unit addresses configured in your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-business-unit-addresses +originalArticleId: 9fd20b19-8917-4c1d-b1e6-b9eef0e4390f +redirect_from: + - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/retrieving-business-unit-addresses.html + - /docs/scos/dev/glue-api-guides/201907.0/managing-b2b-account/retrieving-business-unit-addresses.html + - /docs/scos/dev/glue-api-guides/202005.0/managing-b2b-account/retrieving-business-unit-addresses.html + - /docs/scos/dev/glue-api-guides/202120.0/managing-b2b-account/retrieving-business-unit-addresses.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/retrieving-business-unit-addresses.html +related: + - title: Retrieving companies + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html + - title: Retrieving company roles + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html + - title: Retrieving company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Retrieving business units + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html +--- + +This endpoint allows retrieving business unit addresses. + +## Retrieve a business unit address + +To retrieve a business unit address, send the request: + +*** +`GET` **/company-business-unit-addresses/*{% raw %}{{{% endraw %}business_unit_address_id{% raw %}}}{% endraw %}*** +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}business_unit_address_id{% raw %}}}{% endraw %}*** | Unique identifier of a business unit address to retrieve. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: retrieve a business unit address + +`GET http://glue.mysprykershop.com/company-business-unit-addresses/eec036ee-b999-5753-a7dd-8d0710a2312f` + + +### Response + + +
      +Response sample: retrieve a business unit address + +```json +{ + "data": { + "type": "company-business-unit-addresses", + "id": "eec036ee-b999-5753-a7dd-8d0710a2312f", + "attributes": { + "address1": "Seeburger Str.", + "address2": "270", + "address3": "Block A 3 floor", + "zipCode": "10115", + "city": "Berlin", + "phone": "4908892455", + "iso2Code": null, + "comment": "" + }, + "links": { + "self": "http://glue.mysprykershop.com/company-business-unit-addresses/eec036ee-b999-5753-a7dd-8d0710a2312f" + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/company-business-unit-addresses-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 2001 | Company business unit address is not found.| + +{% info_block infoBox "Note" %} + +If your current company account is not set, you may get the `404` status code. + +{% endinfo_block %} + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + + +## Next steps + +- [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.md new file mode 100644 index 00000000000..0bf1db65154 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.md @@ -0,0 +1,239 @@ +--- +title: "Glue API: Retrieve business units" +description: Learn how to retrieve business units that are configured in your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-business-units +originalArticleId: 4926546b-9757-4f24-91b1-05202d352c73 +redirect_from: + - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/retrieving-business-units.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-b2b-account/retrieving-business-units.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-b2b-account/retrieving-business-units.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/retrieving-business-units.html +related: + - title: Retrieving business unit addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html + - title: Retrieving companies + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html + - title: Retrieving company roles + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html + - title: Retrieving company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Business Units overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/business-units-overview.html + - title: Company Accounts overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-accounts-overview.html +--- + +In the B2B world, users represent their companies rather than act on their own behalf. Such users, called [Company Accounts](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/company-accounts-overview.html), are organized in business units depending on their job role and the scope of their activity. The endpoints allows retrieving business unit information. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html). + +## Retrieve a company business unit + +To retrieve a business unit, send the request: + +*** +`GET` **/company-business-units/*{% raw %}{{{% endraw %}business_unit_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}business_unit_id{% raw %}}}{% endraw %}*** | Unique identifier of a business unit to retrieve information for. Enter `mine` to retrieve information on the business unit of the current authenticated company user. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | companies, company-business-unit-addresses | + +| REQUEST | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/company-business-units/mine` | Retrieve business units of the current authenticated company user. | +| `GET http://glue.mysprykershop.com/company-business-units/b8a06475-73f5-575a-b1e9-1954de7a49ef` | Retrieve the business unit with the unique identifier `b8a06475-73f5-575a-b1e9-1954de7a49ef`. | +| `GET http://glue.mysprykershop.com/company-business-units/32b44d30-3c2d-5f0a-91d3-e66adad10dc1?include=companies` | Retrieve the business unit with the unique identifier `b8a06475-73f5-575a-b1e9-1954de7a49ef` and related companies included. | +| `GET http://glue.mysprykershop.com/company-business-units/32b44d30-3c2d-5f0a-91d3-e66adad10dc1?include=company-business-unit-addresses` | Retrieve the business unit with the unique identifier `b8a06475-73f5-575a-b1e9-1954de7a49ef` and related business unit addresses included. | + +#### Response + + +
      Response sample: retrieve business units of a company user + +```json +{ + "data": { + "type": "company-business-units", + "id": "b8a06475-73f5-575a-b1e9-1954de7a49ef", + "attributes": { + "name": "Hotel Tommy Berlin", + "email": "hotel.tommy@spryker.com", + "phone": "+49 (30) 1234 56789", + "externalUrl": "", + "bic": "OSDD DE 81 005", + "iban": "DE 91 10000000 0123456789", + "defaultBillingAddress": null + }, + "links": { + "self": "http://glue.mysprykershop.com/company-business-units/b8a06475-73f5-575a-b1e9-1954de7a49ef" + } + } +} +``` + +
      + + +
      +Response sample: retrieve the business unit with the unique identifier + +```json +{ + "data": [ + { + "type": "company-business-units", + "id": "5a6032dc-fbce-5d0d-9d57-11ade1947bac", + "attributes": { + "name": "Cleaning Mitte", + "email": "Cleaning.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "http://glue.mysprykershop.com/company-business-units/5a6032dc-fbce-5d0d-9d57-11ade1947bac" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/company-business-units/mine" + } +} +``` + +
      + + +
      Response sample: retrieve the business unit with the unique identifier and related companies included + +```json +{ + "data": { + "type": "company-business-units", + "id": "32b44d30-3c2d-5f0a-91d3-e66adad10dc1", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "0818f408-cc84-575d-ad54-92118a0e4273" + } + ] + } + } + }, + "included": [ + { + "type": "companies", + "id": "0818f408-cc84-575d-ad54-92118a0e4273", + "attributes": { + "isActive": true, + "name": "Test Company", + "status": "approved" + }, + "links": { + "self": "http://glue.mysprykershop.com/companies/0818f408-cc84-575d-ad54-92118a0e4273" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve the business unit with the unique identifier and related business unit addresses included + +```json +{ + "data": { + "type": "company-business-units", + "id": "32b44d30-3c2d-5f0a-91d3-e66adad10dc1", + "attributes": {...}, + "links": {...}, + "relationships": { + "company-business-unit-addresses": { + "data": [ + { + "type": "company-business-unit-addresses", + "id": "19a55c0d-7bf0-580c-a9e8-6edacdc1ecde" + } + ] + } + } + }, + "included": [ + { + "type": "company-business-unit-addresses", + "id": "19a55c0d-7bf0-580c-a9e8-6edacdc1ecde", + "attributes": { + "address1": "Kirncher Str.", + "address2": "7", + "address3": "", + "zipCode": "10247", + "city": "Berlin", + "phone": "4902890031", + "iso2Code": "DE", + "comment": "" + }, + "links": { + "self": "http://glue.mysprykershop.com/company-business-unit-addresses/19a55c0d-7bf0-580c-a9e8-6edacdc1ecde" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/company-business-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/company-business-unit-addresses-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/companies-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 1903 | Current company account is not set. Select the current company user with `/company-user-access-tokens` to access the resource collection. | +| 1901 | Specified business unit is not found or the user does not have access to it. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Retrieve company company roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html) +- [Retrieve business unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html) +- [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.md new file mode 100644 index 00000000000..a16106c36d2 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.md @@ -0,0 +1,114 @@ +--- +title: "Glue API: Retrieve companies" +description: Learn how to retrieve company information that is configured in your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-companies +originalArticleId: 238c375f-b541-445c-ad9c-ab1b4afb036f +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-b2b-account/retrieving-companies.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/retrieving-companies.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-b2b-account/retrieving-companies.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/retrieving-companies.html +related: + - title: Retrieving company roles + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html + - title: Retrieving company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Retrieving business units + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html + - title: Retrieving business unit addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Company Accounts overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-accounts-overview.html +--- + +This endpoint allows retrieving information about companies. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html). + +## Retrieve a company + +To retrieve information about a company, send the request: + +*** +`GET` **/companies/*{% raw %}{{{% endraw %}company_id{% raw %}}}{% endraw %}*** +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}company_id{% raw %}}}{% endraw %}*** | Unique identifier of a company to retrieve information about. Enter `mine` to retrieve information about the company of the currently authenticated company user. | + + +### Request + + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/companies/59b6c025-cc00-54ca-b101-191391adf2af` | Retrieve information about the company with id `59b6c025-cc00-54ca-b101-191391adf2af`. | +| `GET https://glue.mysprykershop.com/companies/mine` | Retrieve information about the company of the currently authenticated company user. | + +#### Response + +
      +Response sample: retrieve information about the companies of the currently authenticated company user + +```json +{ + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913", + "attributes": { + "isActive": true, + "name": "BoB-Hotel Mitte", + "status": "approved" + }, + "links": { + "self": "https://glue.mysprykershop.com/companies/88efe8fb-98bd-5423-a041-a8f866c0f913" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/companies/mine" + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/companies-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Authentication token is invalid. | +| 002 | Authentication token is missing. | +| 1801 | Specified company is not found, or the current authenticated company user does not have access to it. | +| 1803 | Current company account is not set. Select the current company user with `/company-user-access-tokens` to access the resource collection. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Retrieve business units](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) +- [Retrieve company company roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html) +- [Retrieve business unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html) +- [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.md new file mode 100644 index 00000000000..00a15a419ac --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.md @@ -0,0 +1,178 @@ +--- +title: "Glue API: Retrieve company roles" +description: Learn how to retrieve company roles that are configured within your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-company-roles +originalArticleId: 91e7d4fb-7088-4249-bb24-c146c3a63ea4 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-b2b-account/retrieving-company-roles.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/retrieving-company-roles.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-b2b-account/retrieving-company-roles.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/retrieving-company-roles.html +related: + - title: Retrieving companies + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html + - title: Retrieving company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Retrieving business units + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html + - title: Retrieving business unit addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html + - title: Company user roles and permissions overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html +--- + +In corporate environments, where users act as company representatives rather than private buyers, companies can leverage [Company Roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.html) to distribute scopes and permissions among [Company Users](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/company-accounts-overview.html). This endpoint allows retrieving information about the company roles. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html). + +## Retrieve a company role + +To retrieve a company role, send the request: + +*** +`GET` **/company-roles/*{% raw %}{{{% endraw %}company_role_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}company_role_id{% raw %}}}{% endraw %}*** | Unique identifier of a company role to retrieve. Enter `mine` to retrieve the company role of the current authenticated company user. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | | + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/company-roles/mine` | Retrieve all the company roles of the current authenticated company user. | +| `GET https://glue.mysprykershop.com/company-roles/2f0a9d3e-9e69-53eb-8518-284a0db04376` | Retrieve the company role with the id `2f0a9d3e-9e69-53eb-8518-284a0db04376`. | +| `GET https://glue.mysprykershop.com/company-roles/2f0a9d3e-9e69-53eb-8518-284a0db04376?include=companies` | Retrieve the company role with the id `2f0a9d3e-9e69-53eb-8518-284a0db04376` with related companies included. | + +#### Response + +
      +Response sample: Retrieve all the company roles of the current authenticated company user + +```json +{ + "data": [ + { + "type": "company-roles", + "id": "2f0a9d3e-9e69-53eb-8518-284a0db04376", + "attributes": { + "name": "Admin", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/company-roles/2f0a9d3e-9e69-53eb-8518-284a0db04376" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/company-roles/mine" + } +} +``` + +
      + + +
      +Response sample: retrieve a company role with the unique identifier + +```json +{ + "data": { + "type": "company-roles", + "id": "2f0a9d3e-9e69-53eb-8518-284a0db04376", + "attributes": { + "name": "Admin", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/company-roles/2f0a9d3e-9e69-53eb-8518-284a0db04376" + } + } +} +``` + +
      + + +
      +Response sample: retrieve a company role with the unique identifier and include the related companies + +```json +{ + "data": { + "type": "company-roles", + "id": "2f0a9d3e-9e69-53eb-8518-284a0db04376", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "0818f408-cc84-575d-ad54-92118a0e4273" + } + ] + } + } + }, + "included": [ + { + "type": "companies", + "id": "0818f408-cc84-575d-ad54-92118a0e4273", + "attributes": { + "isActive": true, + "name": "Test Company", + "status": "approved" + }, + "links": { + "self": "https://glue.mysprykershop.com/companies/0818f408-cc84-575d-ad54-92118a0e4273" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/company-roles-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/companies-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Authentication token is invalid. | +| 002 | Authentication token is missing. | +| 2101 | Company role is not found. | +| 2103 | Current company user is not set. Select the current company user with `/company-user-access-tokens` to access the resource collection. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Retrieve business unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html) +- [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.md new file mode 100644 index 00000000000..124d15a4d19 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.md @@ -0,0 +1,374 @@ +--- +title: "Glue API: Retrieve company users" +description: Learn how to retrieve company users that are configured within your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-company-users +originalArticleId: 4c9db88b-8496-4989-aff3-d0a676bf1a94 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-b2b-account/retrieving-company-users.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/retrieving-company-users.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-b2b-account/retrieving-company-users.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/retrieving-company-users.html +related: + - title: Retrieving companies + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html + - title: Retrieving company roles + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Retrieving business units + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html + - title: Retrieving business unit addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html + - title: Company Accounts overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-accounts-overview.html +--- + +This endpoint allows retrieving information about company users. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html). + +## Retrieve company users + +To retrieve all the company users that belong to the company of the authenticated company user, send the request: + +*** +`GET`**/company-users** +*** + +### Request + +| HEADER KEY | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| Authorization | ✓ | Alphanumeric string that authorizes the company user to send requests to protected resources. Get it by [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | + +Request sample: retrieve company users + +`GET https://glue.mysprykershop.com/company-users` + +### Response + +
      +Response sample: retrieve company users + +```json +{ + "data": [ + { + "type": "company-users", + "id": "3692d238-acb3-5b7e-8d24-8dab9c1f4505", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/3692d238-acb3-5b7e-8d24-8dab9c1f4505" + } + }, + { + "type": "company-users", + "id": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/4c677a6b-2f65-5645-9bf8-0ef3532bead1" + } + }, + { + "type": "company-users", + "id": "cfbe2644-a9bd-581b-977b-e72d1c9a9c54", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/cfbe2644-a9bd-581b-977b-e72d1c9a9c54" + } + }, + { + "type": "company-users", + "id": "e1019900-88c4-5582-af83-2c1ea8775ac5", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/e1019900-88c4-5582-af83-2c1ea8775ac5" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/company-users" + } +} +``` + +
      + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| isActive | Boolean | Defines if the company user is active. | +| isDefault | Boolean | Defines if the company user is default for the authenticated company user. | + +## Retrieve a company user + +To retrieve information about a company user, send the request: + +*** +`GET` **/company-users/*{% raw %}{{{% endraw %}company_user_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}company_user_id{% raw %}}}{% endraw %}*** | Unique identifier of a company user to retrieve information for. To get it, [retrieve company users](#retrieve-company-users). Enter `mine` to retrieve information on the company user available to the current authenticated company user. | + +### Request + +| HEADER KEY | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| Authorization | ✓ | Alphanumeric string that authorizes the company user to send requests to protected resources. Get it by [authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | companies, company-business-units, company-roles | + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/company-users/e1019900-88c4-5582-af83-2c1ea8775ac5` | Retrieve the company user with unique identifier `e1019900-88c4-5582-af83-2c1ea8775ac5`. | +| `GET https://glue.mysprykershop.com/company-users/min?include=companies,company-business-units,company-roles` | Retrieve company users and related companies, business units, and roles. | + +### Response + +
      +Response sample: retrieve a company user with the unique identifier + +```json +{ + "data": { + "type": "company-users", + "id": "e1019900-88c4-5582-af83-2c1ea8775ac5", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/e1019900-88c4-5582-af83-2c1ea8775ac5" + } + } +} +``` + +
      + +
      +Response sample: Retrieve company users and related companies, business units, and roles + +```json +{ + "data": [ + { + "type": "company-users", + "id": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "b2ea10b2-263a-5cd9-88dc-747309f0534a" + } + ] + }, + "company-roles": { + "data": [ + { + "type": "company-roles", + "id": "50c647a4-d27f-5d82-a587-1d0b7cc6b58d" + } + ] + } + } + }, + { + "type": "company-users", + "id": "cfbe2644-a9bd-581b-977b-e72d1c9a9c54", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/cfbe2644-a9bd-581b-977b-e72d1c9a9c54?include=companies,company-business-units" + }, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "35752ce6-e25f-5d04-8bef-d46b2c359695" + } + ] + } + } + }, + { + "type": "company-users", + "id": "e1019900-88c4-5582-af83-2c1ea8775ac5", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "5a6032dc-fbce-5d0d-9d57-11ade1947bac" + } + ] + } + } + } + ], + "links": {...}, + "included": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913", + "attributes": { + "isActive": true, + "name": "BoB-Hotel Mitte", + "status": "approved" + }, + "links": { + "self": "https://glue.mysprykershop.com/companies/88efe8fb-98bd-5423-a041-a8f866c0f913" + } + }, + { + "type": "company-business-units", + "id": "b2ea10b2-263a-5cd9-88dc-747309f0534a", + "attributes": { + "name": "Hotel Mitte", + "email": "Hotel.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/b2ea10b2-263a-5cd9-88dc-747309f0534a" + } + }, + { + "type": "company-business-units", + "id": "35752ce6-e25f-5d04-8bef-d46b2c359695", + "attributes": { + "name": "Service Mitte", + "email": "Service.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/company-business-units/35752ce6-e25f-5d04-8bef-d46b2c359695" + } + }, + { + "type": "company-business-units", + "id": "5a6032dc-fbce-5d0d-9d57-11ade1947bac", + "attributes": { + "name": "Cleaning Mitte", + "email": "Cleaning.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/company-business-units/5a6032dc-fbce-5d0d-9d57-11ade1947bac" + } + }, + { + "type": "company-roles", + "id": "50c647a4-d27f-5d82-a587-1d0b7cc6b58d", + "attributes": { + "name": "Buyer", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/company-roles/50c647a4-d27f-5d82-a587-1d0b7cc6b58d" + } + } + ] +} +``` + +
      + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| isActive | Boolean | Defines if the company user is active. | +| isDefault | Boolean | Defines if the company user is default for the authenticated company user. | + +{% include pbc/all/glue-api-guides/{{page.version}}/companies-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/company-business-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/company-roles-response-attributes.md %} + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing.| +| 1401 | Rest user is not a company user. | +| 1403 | Current company account is not set. Select the current company user with `/company-user-access-tokens` to access the resource collection. | +| 1404 | Specified company user is not found or does not have permissions to view the account. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Retrieve companies](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html) +- [Retrieve business units](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html) +- [Retrieve company company roles](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html) +- [Retrieve business unit addresses](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html) +- [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.md new file mode 100644 index 00000000000..a84e553f493 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.md @@ -0,0 +1,311 @@ +--- +title: "Glue API: Search by company users" +description: Learn how to search by company users that are configured within your store via the Spryker Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/searching-by-company-users +originalArticleId: a0cc11ce-40e9-4fcf-8cd5-eddd23b02363 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-b2b-account/searching-by-company-users.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-b2b-account/searching-by-company-users.html +related: + - title: Retrieving companies + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-companies.html + - title: Retrieving company roles + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-roles.html + - title: Retrieving company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-company-users.html + - title: "Glue API: Authenticating as a company user" + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html + - title: Managing company user authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Retrieving business units + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-units.html + - title: Retrieving business unit addresses + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-retrieve-business-unit-addresses.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Company Accounts overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/company-account-feature-overview/company-accounts-overview.html + - title: Merchant Custom Prices feature overview + link: docs/pbc/all/price-management/page.version/base-shop/merchant-custom-prices-feature-overview.html + - title: Password Management overview + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html +--- + +This endpoint allows [authenticated customers](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html#authenticate-as-a-customer) to search by the company users available to them. Usually, authenticated customers search for a company user which they want to authenticate as. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Company account Glue API](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-company-account-glue-api.html). + +## Retrieve available company users + +To retrieve company users of the current authenticated customer, send the request: + +*** +`GET`**/company-users/mine** +*** + +### Request + +| HEADER KEY | REQUIRED | DESCRIPTION | +| --- | --- | --- | +| Authorization | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | companies, company-business-units, company-roles | + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/company-users/mine` | Retrieve all the company users the current authenticated customer can authenticate as. | +| `GET https://glue.mysprykershop.com/company-users/mine?include=companies,company-business-units,company-roles` | Retrieve all the company users the current authenticated customer can authenticate as. Include information about the company and business unit each company user belongs to. Include information about the roles of each company user. | + +### Response + +
      +Response sample: retrieve all the company users the current authenticated customer can authenticate as + +```json +{ + "data": [ + { + "type": "company-users", + "id": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/4c677a6b-2f65-5645-9bf8-0ef3532bead1" + } + }, + { + "type": "company-users", + "id": "cfbe2644-a9bd-581b-977b-e72d1c9a9c54", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/cfbe2644-a9bd-581b-977b-e72d1c9a9c54" + } + }, + { + "type": "company-users", + "id": "e1019900-88c4-5582-af83-2c1ea8775ac5", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/e1019900-88c4-5582-af83-2c1ea8775ac5" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/company-users/mine" + } +} +``` + +
      + +
      +Response sample: Retrieve all the company users the current authenticated customer can authenticate as and include information about companies, company business units and company roles + +```json +{ + "data": [ + { + "type": "company-users", + "id": "4c677a6b-2f65-5645-9bf8-0ef3532bead1", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "b2ea10b2-263a-5cd9-88dc-747309f0534a" + } + ] + }, + "company-roles": { + "data": [ + { + "type": "company-roles", + "id": "50c647a4-d27f-5d82-a587-1d0b7cc6b58d" + } + ] + } + } + }, + { + "type": "company-users", + "id": "cfbe2644-a9bd-581b-977b-e72d1c9a9c54", + "attributes": { + "isActive": true, + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/company-users/cfbe2644-a9bd-581b-977b-e72d1c9a9c54?include=companies,company-business-units" + }, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "35752ce6-e25f-5d04-8bef-d46b2c359695" + } + ] + } + } + }, + { + "type": "company-users", + "id": "e1019900-88c4-5582-af83-2c1ea8775ac5", + "attributes": {...}, + "links": {...}, + "relationships": { + "companies": { + "data": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913" + } + ] + }, + "company-business-units": { + "data": [ + { + "type": "company-business-units", + "id": "5a6032dc-fbce-5d0d-9d57-11ade1947bac" + } + ] + } + } + } + ], + "links": {...}, + "included": [ + { + "type": "companies", + "id": "88efe8fb-98bd-5423-a041-a8f866c0f913", + "attributes": { + "isActive": true, + "name": "BoB-Hotel Mitte", + "status": "approved" + }, + "links": { + "self": "https://glue.mysprykershop.com/companies/88efe8fb-98bd-5423-a041-a8f866c0f913" + } + }, + { + "type": "company-business-units", + "id": "b2ea10b2-263a-5cd9-88dc-747309f0534a", + "attributes": { + "name": "Hotel Mitte", + "email": "Hotel.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/b2ea10b2-263a-5cd9-88dc-747309f0534a" + } + }, + { + "type": "company-business-units", + "id": "35752ce6-e25f-5d04-8bef-d46b2c359695", + "attributes": { + "name": "Service Mitte", + "email": "Service.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/company-business-units/35752ce6-e25f-5d04-8bef-d46b2c359695" + } + }, + { + "type": "company-business-units", + "id": "5a6032dc-fbce-5d0d-9d57-11ade1947bac", + "attributes": { + "name": "Cleaning Mitte", + "email": "Cleaning.Mitte@spryker.com", + "phone": "12345617", + "externalUrl": "", + "bic": "", + "iban": "", + "defaultBillingAddress": null + }, + "links": { + "self": "https://glue.mysprykershop.com/company-business-units/5a6032dc-fbce-5d0d-9d57-11ade1947bac" + } + }, + { + "type": "company-roles", + "id": "50c647a4-d27f-5d82-a587-1d0b7cc6b58d", + "attributes": { + "name": "Buyer", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/company-roles/50c647a4-d27f-5d82-a587-1d0b7cc6b58d" + } + } + ] +} +``` + +
      + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| id | String | Unique identifier of a company user. | +| isActive | Boolean | Defines if the company user is active. | +| isDefault | Boolean | Defines if this company user is default for the authenticated customer. | + +{% include pbc/all/glue-api-guides/{{page.version}}/companies-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/company-business-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/company-roles-response-attributes.md %} + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | The access token is invalid. | +| 002 | The access token is missing. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.md new file mode 100644 index 00000000000..53469881ee6 --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customer-addresses.md @@ -0,0 +1,392 @@ +--- +title: "Glue API: Manage customer addresses" +description: Learn how by using the Spryker Glue API you can Create, retrieve and delete customer addresses within your Spryker Project. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-addresses-via-glue-api +originalArticleId: 83f855ab-83ed-4a69-a087-196f88c0007b +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-customers/managing-customer-addresses.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-customers/managing-customer-addresses.html + - /docs/scos/dev/glue-api-guides/201907.0/managing-customers/managing-customer-addresses.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-customers/managing-customer-addresses.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-customers/managing-customer-addresses.html + - /docs/scos/dev/glue-api-guides/202204.0/managing-customers/managing-customer-addresses.html +related: + - title: Managing Wishlists + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html + - title: Login & Registration Forms + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/customer-account-management-feature-overview/customer-login-overview.html + - title: Password Management + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/customer-account-management-feature-overview/password-management-overview.html + - title: Customer Accounts + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/customer-account-management-feature-overview/customer-account-management-feature-overview.html + - title: Searching by company users + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html + - title: Confirming customer registration + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-confirm-customer-registration.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Managing customer authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html + - title: Managing customer authentication tokens via OAuth 2.0 + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html + - title: Managing customers + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html + - title: Managing customer passwords + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-passwords.html + - title: Retrieve customer carts + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-customer-carts.html + - title: Retrieving customer orders + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html +--- + +This endpoints allows retrieving and edit customer addresses. + +## Installation + +For details on the modules that provide the API functionality and how to install them, see [Glue API: Customer Access Feature Integration](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html). + +## Add an address + +To add an address to a customer, send the request: + +--- +`POST` **/customers/*{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*/addresses** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*** | Unique identifier of the customer to add the address to. To get it, [Retrieve customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html#retrieve-customers) or [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer). | + +### Request + +Request sample: add an address + +`POST http://glue.mysprykershop.com/customers/DE--1/addresses` + +```json +{ + "data" : { + "type": "addresses", + "attributes": { + "customer_reference": "DE--1", + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Third, 33, 11", + "address2": "b", + "address3": "aaa", + "zipCode": "12312", + "city": "Berlin", + "country": "Germany", + "iso2Code" : "DE", + "phone": "22111-3-4-5", + "isDefaultShipping": false, + "isDefaultBilling": false + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| customer_reference | String | ✓ | Unique identifier of the customer to add the address to. To get it, [Retrieve customers](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html#retrieve-customers) or [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer) | +| salutation | String | ✓ | Salutation to use when addressing the customer. | +| firstName | String | ✓ | Customer's first name. | +| lastName | String | ✓ | Customer's last name. | +| address1 | String | ✓ | The first line of the customer's address. | +| address2 | String | ✓ | The second line of the customer's address. | +| address3 | String | ✓ | The third line of the customer's address. | +| zipCode | String | ✓ | ZIP code. | +| city | String | ✓ | Specifies the city. | +| country | String | ✓ | Specifies the country. | +| iso2Code | String | ✓ | Specifies an ISO 2 Country Code to use. | +| company | String | ✓ | Customer's company. | +| phone | String | ✓ | Customer's phone number. | +| isDefaultShipping | Boolean | ✓ | Specifies whether the address should be used as the default shipping address of the customer. If the parameter is not set, the default value is true. | +| isDefaultBilling | Boolean | ✓ | Specifies whether the address should be used as the default billing address of the customer. If the parameter is not set, the default value is true. | + +### Response + +
      +Response sample: add an address + +```json +{ + "data": { + "type": "addresses", + "id": "5caa05f5-41f5-5e6c-a254-07d7887fb4e9", + "attributes": { + "salutation": "Mr", + "firstName": "Spencor", + "lastName": "Hopkin", + "address1": "Third, 33, 11", + "address2": "b", + "address3": "aaa", + "zipCode": "12312", + "city": "Berlin", + "country": "Germany", + "iso2Code": "DE", + "company": null, + "phone": "22111-3-4-5", + "isDefaultShipping": false, + "isDefaultBilling": false + }, + "links": { + "self": "https://glue.mysprykershop.com/customers/DE--1/addresses/5caa05f5-41f5-5e6c-a254-07d7887fb4e9" + } + } +} +``` + +
      + + + +{% include pbc/all/glue-api-guides/{{page.version}}/addresses-response-attributes.md %} + + +## Edit an address + +To edit an address, send the request: + +--- +`PATCH` **/customers/*{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*/addresses/*{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*** | Unique identifier of the customer to edit the address of. [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer) to get it. | +| ***{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** | Unique identifier of the address to edit. [Add an address](#add-an-address) to get it. | + +### Request + +Request sample: edit an address + +`PATCH http://glue.mysprykershop.com/customers/DE-25/addresses/3a6ee102-007f-5245-aaec-af5b6e05685b` + +
      +Request sample body + +
      + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| salutation | String | Salutation to use when addressing the customer. | +| firstName | String | Customer's first name. | +| lastName | String | Customer's last name. | +| address1 | String | The first line of the customer's address. | +| address2 | String | The second line of the customer's address. | +| address3 | String | The third line of the customer's address. | +| zipCode | String | ZIP code. | +| city | String | Specifies the city. | +| country | String | Specifies the country. | +| iso2Code | String | Specifies an ISO 2 Country Code to use. | +| company | String | Specifies the customer's company. | +| phone | String | Specifies the customer's phone number. | +| isDefaultShipping | Boolean | Specifies whether the address should be used as the default shipping address of the customer. If the parameter is not set, the default value is **true**. This is also the case for the first address to be saved. | +| isDefaultBilling | Boolean | Specifies whether the address should be used as the default billing address of the customer. If the parameter is not set, the default value is **true**. This is also the case for the first address to be saved. | + +### Response + +
      +Response sample: edit an address + +```json +{ + "data": { + "type": "addresses", + "id": 3a6ee102-007f-5245-aaec-af5b6e05685b, + "attributes": { + "salutation": "Mr", + "firstName": "John", + "lastName": "Doe", + "address1": "11 Second Street", + "address2": "4th Floor", + "address3": "Suite 555", + "zipCode": "12312", + "city": "Berlin", + "country": "United States", + "iso2Code": "US", + "company": null, + "phone": "22111-3-4-5", + "isDefaultShipping": false, + "isDefaultBilling": false + }, + "links": { + "self": "http://glue.mysprykershop.com.com/customers/DE--25/addresses/" + } + } + } +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/addresses-response-attributes.md %} + +## Retrieve customer's addresses + +To retrieve a list of customer's addresses, send the request: + +--- +`GET` **/customers/*{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*/addresses** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*** | Unique identifier of the customer to retrieve the list of. [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer) to get this id. | + +### Request + +Request sample: retrieve customer's addresses + +`GET http://glue.mysprykershop.com/customers/DE-25/addresses` + + +### Response + +
      +Response sample: retrieve customer's addresses + +```json +{ + "data": [ + { + "type": "addresses", + "id": "3a6ee102-007f-5245-aaec-af5b6e05685b", + "attributes": { + "salutation": "Mr", + "firstName": "Jason", + "lastName": "Voorhees", + "address1": "123 Sleep Street", + "address2": "123", + "address3": null, + "zipCode": "12345", + "city": "Dresden", + "country": "Germany", + "iso2Code": "DE", + "company": null, + "phone": null, + "isDefaultShipping": true, + "isDefaultBilling": true + }, + "links": { + "self": "http://glue.mysprykershop.com/customers/DE--25/addresses/3a6ee102-007f-5245-aaec-af5b6e05685b" + } + }, + { + "type": "addresses", + "id": "5f00ce65-dd64-5b49-ad3c-f5fae475e7e6", + "attributes": { + "salutation": "Mr", + "firstName": "John", + "lastName": "Doe", + "address1": "11 Second Street", + "address2": "4th Floor", + "address3": "Suite 555", + "zipCode": "12312", + "city": "Berlin", + "country": "United States", + "iso2Code": "US", + "company": null, + "phone": "22111-3-4-5", + "isDefaultShipping": false, + "isDefaultBilling": false + }, + "links": { + "self": "http://glue.mysprykershop.com/customers/DE--25/addresses/5f00ce65-dd64-5b49-ad3c-f5fae475e7e6" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/customers/DE--25/addresses" + } + } +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/addresses-response-attributes.md %} + +## Retrieve an address + +To retrieve an address, send the request: + +--- +`GET` **/customers/*{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*/addresses/*{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*** | Unique identifier of the customer to retrieve the address of. [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer) to get it. | +| ***{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** | Unique identifier of the address to retrieve. [Add an address](#add-an-address) to get it. | + +### Request + +Request sample: retrieve an address + +`GET http://glue.mysprykershop.com/customers/DE-25/addresses/3a6ee102-007f-5245-aaec-af5b6e05685b` + +### Response + +
      +Response sample: retrieve an address + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/addresses-response-attributes.md %} + +## Delete an address + +To delete an address, send the request: + +--- +`DELETE` **/customers/*{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*/addresses/*{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}customer_id{% raw %}}}{% endraw %}*** | Unique identifier of the customer to delete the address of. [Create a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html#create-a-customer) to get it. | +| ***{% raw %}{{{% endraw %}address_id{% raw %}}}{% endraw %}*** | Unique identifier of the address to delete. [Add an address](#add-an-address) to get it. | + +### Request + +Request sample: delete an address + +`DELETE http://glue.mysprykershop.com/customers/DE-25/addresses/3a6ee102-007f-5245-aaec-af5b6e05685b` + +### Response + +If the address is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 402 | Customer with the specified ID is not found. | +| 404 | Specified address cannot be found. | +| 405 | Customer reference is missing. | +| 409 | Failed to update an address. | +| 411 | Unauthorized request. | +| 412 | No address ID provided. | +| 901 | One of the following fields is not specified: `salutaion`, `firstName`, `lastName`, `city`, `address1`, `address2`, `zipCode`, `country`, `iso2Code`, `isDefaultShipping`, `isDefaultBilling` | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Next steps + +- [Manage carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) +- [Manage cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) +- [Manage gift cards](/docs/pbc/all/gift-cards/{{page.version}}/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html) +- [Manage wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) +- [Manage orders](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html) +- [Manage customer authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html) +- [Manage customer passwords](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-customer-passwords.html) diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md similarity index 99% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md index 3e73f68458c..9ca2e01b165 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customers-via-glue-api originalArticleId: 246e73d7-562f-414f-bbc0-d102ef54ff5c redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-manage-customers.html - /docs/scos/user/back-office-user-guides/202200.0/customer/customer-customer-access-customer-groups/managing-customers.html - /docs/scos/dev/glue-api-guides/202200.0/managing-customers/managing-customers.html - /docs/scos/dev/glue-api-guides/202311.0/managing-customers/managing-customers.html diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md similarity index 97% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md index 4afac1fd043..e989f8e6137 100644 --- a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-customer-orders originalArticleId: 4390b08b-349a-406e-8e41-983014e30ab5 redirect_from: + - /docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html - /docs/scos/dev/glue-api-guides/202005.0/managing-customers/retrieving-customer-orders.html - /docs/scos/dev/glue-api-guides/202200.0/managing-customers/retrieving-customer-orders.html - /docs/scos/dev/glue-api-guides/202311.0/managing-customers/retrieving-customer-orders.html diff --git a/docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/manage-customer-access-to-glue-api-resources.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/manage-customer-access-to-glue-api-resources.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/base-shop/manage-using-glue-api/manage-customer-access-to-glue-api-resources.md rename to docs/pbc/all/customer-relationship-management/202602.0/base-shop/manage-using-glue-api/manage-customer-access-to-glue-api-resources.md diff --git a/docs/pbc/all/customer-relationship-management/202602.0/base-shop/reorder-feature-overview.md b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/reorder-feature-overview.md new file mode 100644 index 00000000000..f22f2525e5d --- /dev/null +++ b/docs/pbc/all/customer-relationship-management/202602.0/base-shop/reorder-feature-overview.md @@ -0,0 +1,31 @@ +--- +title: Reorder feature overview +description: The Reorder feature simplifies the order placement process for your customers- it lets them reorder their previous orders in just one click. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/reorder-feature-overview +originalArticleId: ad6a726f-9327-4502-8670-d8e25e9c7340 +redirect_from: + - /2021080/docs/reorder-feature-overview + - /2021080/docs/en/reorder-feature-overview + - /docs/reorder-feature-overview + - /docs/en/reorder-feature-overview + - /docs/scos/user/features/202200.0/reorder-feature-overview.html + - /docs/scos/user/features/202311.0/reorder-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202200.0/reorder-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/reorder-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202204.0/reorder-feature-walkthrough.html + - /docs/scos/user/features/202204.0/reorder-feature-overview.html +--- + +One of the biggest factors that influences customer loyalty and persuades them to repeatedly buy from your shop is shopping convenience. Reorder feature simplifies the order placement process for your customers: it lets them reorder their previous orders in just one click. All the customers need to do is go to the **Order History** page in their *Customer Account* and reorder either the entire order or individual items from it. + +![Reorder orders on the View order page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Reorder/reorder_view_orders.png) + +![Reorder order details](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Reorder/reorder_order_details.png) + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES| +|---------|---------| +| [Install the Multiple Carts + Reorder feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-multiple-carts-reorder-feature.html) | [CustomerReorderWidget migration guide](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-customerreorderwidget-module.html) | diff --git a/docs/pbc/all/customer-relationship-management/202512.0/customer-relationship-management.md b/docs/pbc/all/customer-relationship-management/202602.0/customer-relationship-management.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202512.0/customer-relationship-management.md rename to docs/pbc/all/customer-relationship-management/202602.0/customer-relationship-management.md diff --git a/docs/pbc/all/customer-relationship-management/202410.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md b/docs/pbc/all/customer-relationship-management/202602.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md similarity index 100% rename from docs/pbc/all/customer-relationship-management/202410.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md rename to docs/pbc/all/customer-relationship-management/202602.0/marketplace/install-the-customer-account-management-merchant-switcher-feature.md diff --git a/docs/pbc/all/data-exchange/202410.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md b/docs/pbc/all/data-exchange/202410.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md deleted file mode 100644 index 4c119c004cb..00000000000 --- a/docs/pbc/all/data-exchange/202410.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Data Exchange API + Inventory Management feature -description: Install the Data Exchange API + Inventory Management features in your project. -last_updated: Sep 06, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/scos/dev/feature-integration-guides/202307.0/glue-api/data-exchange-api/install-the-data-exchange-api-inventory-management-feature.html -- /docs/pbc/all/data-exchange/202311.0/install-and-upgrade%5Cinstall-the-data-exchange-api-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-data-exchange-api-inventory-management-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md b/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md deleted file mode 100644 index eff8541646c..00000000000 --- a/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Data Exchange API + Category Management feature -description: Install the Data Exchange API + Category Management features in your project. -last_updated: Jan 31, 2024 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/data-exchange/202403.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-data-exchange-api-category-management-feature.md %} diff --git a/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md b/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md deleted file mode 100644 index 4c119c004cb..00000000000 --- a/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Data Exchange API + Inventory Management feature -description: Install the Data Exchange API + Inventory Management features in your project. -last_updated: Sep 06, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/scos/dev/feature-integration-guides/202307.0/glue-api/data-exchange-api/install-the-data-exchange-api-inventory-management-feature.html -- /docs/pbc/all/data-exchange/202311.0/install-and-upgrade%5Cinstall-the-data-exchange-api-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-data-exchange-api-inventory-management-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/data-exchange/202512.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md b/docs/pbc/all/data-exchange/202512.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md deleted file mode 100644 index eff8541646c..00000000000 --- a/docs/pbc/all/data-exchange/202512.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Data Exchange API + Category Management feature -description: Install the Data Exchange API + Category Management features in your project. -last_updated: Jan 31, 2024 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/data-exchange/202403.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-data-exchange-api-category-management-feature.md %} diff --git a/docs/pbc/all/data-exchange/202602.0/data-exchange.md b/docs/pbc/all/data-exchange/202602.0/data-exchange.md new file mode 100644 index 00000000000..fe662321062 --- /dev/null +++ b/docs/pbc/all/data-exchange/202602.0/data-exchange.md @@ -0,0 +1,19 @@ +--- +title: Data Exchange +description: Learn all about Spryker's data exchange options that you can use within your Spryker project. +template: concept-topic-template +last_updated: Dec 18, 2023 +redirect_from: + - /spryker-middleware.htm + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/spryker-middleware-powered-by-alumio.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/incrementally-import-products-with-spryker-middleware-powered-by-alumio.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/integration-apps.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app/create-tasks-and-import-products-from-akeneo-to-sccos.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app/configure-the-smpa-connection-with-akeneo-pim-and-sccos.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app/configure-the-data-integration-path-between-akeneo-and-sccos.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app.html + - /docs/pbc/all/data-exchange/{{page.version}}/spryker-middleware-powered-by-alumio/integration-apps/akeneo-pim-integration-app/configure-the-akeneo-pim-integration-app/configure-data-mapping-between-akeneo-and-sccos.html + - /docs/pbc/all/data-exchange/{{page.version}}/data-exchange-faq.html +--- + +{% include integrations/data-exchange-body.md %} \ No newline at end of file diff --git a/docs/pbc/all/data-exchange/202410.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md b/docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md similarity index 100% rename from docs/pbc/all/data-exchange/202410.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md rename to docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api-category-management-feature.md diff --git a/docs/pbc/all/data-exchange/202404.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md b/docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md similarity index 100% rename from docs/pbc/all/data-exchange/202404.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md rename to docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api-inventory-management-feature.md diff --git a/docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api.md b/docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api.md similarity index 100% rename from docs/pbc/all/data-exchange/202507.0/install-and-upgrade/install-the-data-exchange-api.md rename to docs/pbc/all/data-exchange/202602.0/install-and-upgrade/install-the-data-exchange-api.md diff --git a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md b/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md deleted file mode 100644 index 9ca3b713f8a..00000000000 --- a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Promotions & Discounts feature -description: Learn how to integrate the Promotions & Discounts feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md b/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md deleted file mode 100644 index c01b6d7d922..00000000000 --- a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Promotions & Discounts Glue API -description: Learn how to integrate the Promotions & Discounts Glue API into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-promotions-discounts-feature-integration -originalArticleId: e39ff236-644f-41fe-9aee-796304a59df2 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-promotions-and-discounts-glue-api.md %} diff --git a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md b/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md deleted file mode 100644 index b2e7262cd82..00000000000 --- a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Promotions & Discounts + Product labels feature -description: Learn how to integrate the Product Labels + Promotions & Discounts feature into a Spryker project. -last_updated: Feb 20, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md b/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md deleted file mode 100644 index 8b565f7d494..00000000000 --- a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Multiple Abstract Products as Promotional Products & Discounts feature -description: Add support of multiple abstract products as promotional products in the Promotions & Discounts feature. -last_updated: Aug 30, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md b/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md deleted file mode 100644 index d554cb6d47e..00000000000 --- a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Promotions & Discounts + Category Management feature -description: Learn how to add the category parameter to calculation and conditions queries in the Promotions & Discounts feature to your Spryker projects. -last_updated: Jan 11, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-category-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md b/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md deleted file mode 100644 index 9ca3b713f8a..00000000000 --- a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Promotions & Discounts feature -description: Learn how to integrate the Promotions & Discounts feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md b/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md deleted file mode 100644 index c01b6d7d922..00000000000 --- a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Promotions & Discounts Glue API -description: Learn how to integrate the Promotions & Discounts Glue API into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-promotions-discounts-feature-integration -originalArticleId: e39ff236-644f-41fe-9aee-796304a59df2 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-promotions-and-discounts-glue-api.md %} diff --git a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md b/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md deleted file mode 100644 index b2e7262cd82..00000000000 --- a/docs/pbc/all/discount-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Promotions & Discounts + Product labels feature -description: Learn how to integrate the Product Labels + Promotions & Discounts feature into a Spryker project. -last_updated: Feb 20, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md b/docs/pbc/all/discount-management/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md deleted file mode 100644 index 63f0c41d0c9..00000000000 --- a/docs/pbc/all/discount-management/202410.0/marketplace/install-the-marketplace-promotions-discounts-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Promotions & Discounts feature -last_updated: Sep 09, 2021 -description: This document describes the process how to integrate the Marketplace Promotions & Discounts feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-promotions-discounts-feature-integration.html -related: - - title: Marketplace Promotions and Discounts feature walkthrough - link: docs/pbc/all/discount-management/page.version/marketplace/marketplace-promotions-discounts-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-promotions-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md b/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md deleted file mode 100644 index 8b565f7d494..00000000000 --- a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Multiple Abstract Products as Promotional Products & Discounts feature -description: Add support of multiple abstract products as promotional products in the Promotions & Discounts feature. -last_updated: Aug 30, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md b/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md deleted file mode 100644 index d554cb6d47e..00000000000 --- a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Promotions & Discounts + Category Management feature -description: Learn how to add the category parameter to calculation and conditions queries in the Promotions & Discounts feature to your Spryker projects. -last_updated: Jan 11, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-category-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md b/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md deleted file mode 100644 index 9ca3b713f8a..00000000000 --- a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Promotions & Discounts feature -description: Learn how to integrate the Promotions & Discounts feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md b/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md deleted file mode 100644 index c01b6d7d922..00000000000 --- a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Promotions & Discounts Glue API -description: Learn how to integrate the Promotions & Discounts Glue API into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-promotions-discounts-feature-integration -originalArticleId: e39ff236-644f-41fe-9aee-796304a59df2 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-promotions-and-discounts-glue-api.md %} diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md b/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md deleted file mode 100644 index b2e7262cd82..00000000000 --- a/docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Promotions & Discounts + Product labels feature -description: Learn how to integrate the Product Labels + Promotions & Discounts feature into a Spryker project. -last_updated: Feb 20, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html - - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md b/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md deleted file mode 100644 index 8b565f7d494..00000000000 --- a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Multiple Abstract Products as Promotional Products & Discounts feature -description: Add support of multiple abstract products as promotional products in the Promotions & Discounts feature. -last_updated: Aug 30, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html - - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/multiple-abstract-products-as-promotional-products-and-discounts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-multiple-abstract-products-as-promotional-products-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/create-discounts-based-on-shipment.md b/docs/pbc/all/discount-management/202602.0/base-shop/create-discounts-based-on-shipment.md similarity index 99% rename from docs/pbc/all/discount-management/202512.0/base-shop/create-discounts-based-on-shipment.md rename to docs/pbc/all/discount-management/202602.0/base-shop/create-discounts-based-on-shipment.md index 913284b8837..60a805b75d3 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/create-discounts-based-on-shipment.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/create-discounts-based-on-shipment.md @@ -6,7 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-activate-a-discount-rule-based-on-a-shipment-carrier originalArticleId: 98408c10-05d0-4d84-a0a8-e01ba2cbdfea redirect_from: - - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-create-discounts-based-on-shipment.html + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-create-discounts-based-on-shipment.html - /docs/pbc/all/discount-management/202311.0/tutorials-and-howtos/howto-create-discounts-based-on-shipment.html - /docs/pbc/all/discount-management/202204.0/base-shop/tutorials-and-howtos/howto-create-discounts-based-on-shipment.html - /docs/pbc/all/discount-management/202204.0/base-shop/create-discounts-based-on-shipment.html diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-discount-management-data.md b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-discount-management-data.md similarity index 100% rename from docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-discount-management-data.md rename to docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-discount-management-data.md diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md similarity index 94% rename from docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md rename to docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md index ceb2fd652f4..e471f3e0d9b 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-discount-amountcsv originalArticleId: a9cdd839-b5fc-45ae-8177-625bd94789df redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.html - /2021080/docs/file-details-discount-amountcsv - /2021080/docs/en/file-details-discount-amountcsv - /docs/file-details-discount-amountcsv @@ -14,7 +15,7 @@ redirect_from: - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/discounts/file-details-discount-amount.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/discounts/file-details-discount-amount.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount-amount.csv.html - - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-amount.csv.html + - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-amount.csv.html - /docs/pbc/all/discount-management/202311.0/base-shop/import-and-export-data/file-details-discount-amount.csv.html - /docs/pbc/all/discount-management/202204.0/base-shop/import-and-export-data/import-file-details-discount-amount.csv.html related: diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md similarity index 94% rename from docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md rename to docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md index 332724b0306..1cb479278d9 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-discount-storecsv originalArticleId: 446bff7a-da3b-4dee-86aa-c245f3529bf1 redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.html - /2021080/docs/file-details-discount-storecsv - /2021080/docs/en/file-details-discount-storecsv - /docs/file-details-discount-storecsv @@ -13,8 +14,8 @@ redirect_from: - /docs/scos/dev/data-import/201811.0/data-import-categories/merchandising-setup/discounts/file-details-discount-store.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/discounts/file-details-discount-store.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/discounts/file-details-discount-store.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount-store.csv.html - - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-store.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount-store.csv.html + - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-store.csv.html - /docs/pbc/all/discount-management/202311.0/base-shop/import-and-export-data/file-details-discount-store.csv.html - /docs/pbc/all/discount-management/202204.0/base-shop/import-and-export-data/import-file-details-discount-store.csv.html related: diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md similarity index 96% rename from docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md rename to docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md index 9870c2d927a..de3b0c713f7 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-discount-vouchercsv originalArticleId: 741ea0dd-d3ad-40d0-98b3-6e16889b6794 redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.html - /2021080/docs/file-details-discount-vouchercsv - /2021080/docs/en/file-details-discount-vouchercsv - /docs/file-details-discount-vouchercsv @@ -13,8 +14,8 @@ redirect_from: - /docs/scos/dev/data-import/201811.0/data-import-categories/merchandising-setup/discounts/file-details-discount-voucher.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/discounts/file-details-discount-voucher.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/discounts/file-details-discount-voucher.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount-voucher.csv.html - - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-voucher.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount-voucher.csv.html + - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount-voucher.csv.html - /docs/pbc/all/discount-management/202311.0/base-shop/import-and-export-data/file-details-discount-voucher.csv.html - /docs/pbc/all/discount-management/202204.0/base-shop/import-and-export-data/import-file-details-discount-voucher.csv.html related: diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount.csv.md b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount.csv.md similarity index 96% rename from docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount.csv.md rename to docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount.csv.md index 56c5f223455..06851f669f2 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount.csv.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/import-and-export-data/import-file-details-discount.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-discountcsv originalArticleId: c8bfc425-7004-4064-8e37-ad8708f07183 redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/import-and-export-data/import-file-details-discount.csv.html - /2021080/docs/file-details-discountcsv - /2021080/docs/en/file-details-discountcsv - /docs/file-details-discountcsv @@ -14,7 +15,7 @@ redirect_from: - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/discounts/file-details-discount.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/discounts/file-details-discount.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/discounts/file-details-discount.csv.html - - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount.csv.html + - /docs/pbc/all/discount-management/202311.0/import-and-export-data/file-details-discount.csv.html - /docs/pbc/all/discount-management/202311.0/base-shop/import-and-export-data/file-details-discount.csv.html - /docs/pbc/all/discount-management/202204.0/base-shop/import-and-export-data/import-file-details-discount.csv.html related: diff --git a/docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md similarity index 100% rename from docs/pbc/all/discount-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md rename to docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-multiple-abstract-products-as-promotional-products-discounts-feature.md diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md new file mode 100644 index 00000000000..bc2bc02c29a --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Promotions & Discounts + Category Management feature +description: Learn how to add the category parameter to calculation and conditions queries in the Promotions & Discounts feature to your Spryker projects. +last_updated: Jan 11, 2022 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-category-management-feature.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-category-management-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-category-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..ad7d4665806 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.md @@ -0,0 +1,14 @@ +--- +title: Install the Promotions & Discounts feature +description: Learn how to integrate the Promotions & Discounts feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/promotions-and-discounts-feature-integration.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-feature.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md new file mode 100644 index 00000000000..e21ac233eaa --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.md @@ -0,0 +1,19 @@ +--- +title: Install the Promotions & Discounts Glue API +description: Learn how to integrate the Promotions & Discounts Glue API into a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-promotions-discounts-feature-integration +originalArticleId: e39ff236-644f-41fe-9aee-796304a59df2 +redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-promotions-and-discounts-feature-integration.html + - /docs/pbc/all/discount-management/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/integrate-the-promotions-and-discounts-glue-api.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-promotions-and-discounts-glue-api.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.md new file mode 100644 index 00000000000..e660c399076 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-order-managemet-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Promotions & Discounts + Order Management feature +description: Learn how to integrate the Order Management + Promotions & Discounts feature into a Spryker project. +last_updated: Sep 25, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-order-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md new file mode 100644 index 00000000000..e1da70bf51b --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Promotions & Discounts + Product labels feature +description: Learn how to integrate the Product Labels + Promotions & Discounts feature into a Spryker project. +last_updated: Feb 20, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-product-labels-feature.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/install-the-promotions-and-discounts-product-labels-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discount-module.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discount-module.md new file mode 100644 index 00000000000..a9edb6e3261 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discount-module.md @@ -0,0 +1,23 @@ +--- +title: Upgrade the Discount module +description: Learn how to upgrade and migrate to a newer version of the Spryker Discount module in Spryker Cloud Commerce OS to a new version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-discount +originalArticleId: 0ac48edb-ebcb-4442-b97c-61159da5cafd +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-discount.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-discount.html + - /module_migration_guides/mg-discount.htm + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discount.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discount-module.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/upgrade-the-discount-module.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/upgrade-the-discount-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-discount-module.md %} diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md similarity index 95% rename from docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md rename to docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md index a3acfe0cbcf..9bfcc514583 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountcalculatorconnector-module.md @@ -13,8 +13,8 @@ redirect_from: - /dev/module-migration-guides/202005.0/migration-guide-discountcalculatorconnector.html - /dev/module-migration-guides/202009.0/migration-guide-discountcalculatorconnector.html - /dev/module-migration-guides/202108.0/migration-guide-discountcalculatorconnector.html - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountcalculatorconnector.html - - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discountcalculatorconnector-module.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountcalculatorconnector.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discountcalculatorconnector-module.html - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/upgrade-the-discountcalculatorconnector-module.html - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/upgrade-the-discountcalculatorconnector-module.html related: diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotion-module.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotion-module.md new file mode 100644 index 00000000000..533bcf5739c --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotion-module.md @@ -0,0 +1,24 @@ +--- +title: Upgrade the DiscountPromotion module +description: Use the guide to migrate to a new version of the DiscountPromotion module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-discount-promotion +originalArticleId: f2b67c9c-08ac-44d6-a070-542221eec789 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-discountpromotion.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-discountpromotion.html + - /module_migration_guides/mg-discount-promotion.htm + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountpromotion.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discountpromotion-module.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/upgrade-the-discountpromotion-module.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/upgrade-the-discountpromotion-module.html +--- + + +{% include pbc/all/upgrade-modules/upgrade-the-discountpromotion-module.md %} diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotionwidget-module.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotionwidget-module.md new file mode 100644 index 00000000000..15a3a3dd6da --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountpromotionwidget-module.md @@ -0,0 +1,22 @@ +--- +title: Upgrade the DiscountPromotionWidget module +description: Use the guide to migrate to a newer version of the DiscountPromotionWidget module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-discount-promotion-widget +originalArticleId: a6eec8b0-01f7-4fc1-8db2-b895922d1024 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-discountpromotionwidget.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountpromotionwidget.html + - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discountpromotionwidget-module.html + - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/upgrade-the-discountpromotionwidget-module.html + - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/upgrade-the-discountpromotionwidget-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-discountpromotionwidget-module.md %} diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md similarity index 97% rename from docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md rename to docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md index d62c9d04840..bf57997048b 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-discountsalesaggregatorconnector-module.md @@ -13,7 +13,7 @@ redirect_from: - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-discountsalesaggregatorconnector.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-discountsalesaggregatorconnector.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-discountsalesaggregatorconnector.html - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountsalesaggregatorconnector.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-discountsalesaggregatorconnector.html - /docs/pbc/all/discount-management/202311.0/install-and-upgrade/upgrade-the-discountsalesaggregatorconnector-module.html - /docs/pbc/all/discount-management/202311.0/base-shop/install-and-upgrade/upgrade-the-discountsalesaggregatorconnector-module.html - /docs/pbc/all/discount-management/202204.0/base-shop/install-and-upgrade/upgrade-the-discountsalesaggregatorconnector-module.html diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md similarity index 96% rename from docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md index 187ed4a44bd..05208f8eea6 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.md @@ -4,9 +4,10 @@ description: Learn how to promote products using the discounts module in the bac template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.html - /docs/scos/user/back-office-user-guides/202311.0/merchandising/discount/best-practices-promote-products-with-discounts.html - - /docs/pbc/all/discount-management/202311.0/manage-in-the-back-office/best-practices-promote-products-with-discounts.html - - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.html + - /docs/pbc/all/discount-management/202311.0/manage-in-the-back-office/best-practices-promote-products-with-discounts.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.html related: - title: Promotions & Discounts feature overview link: docs/pbc/all/discount-management/page.version/base-shop/promotions-discounts-feature-overview.html diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/create-discounts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/create-discounts.md new file mode 100644 index 00000000000..8b781e6c034 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/create-discounts.md @@ -0,0 +1,232 @@ +--- +title: Create discounts +description: Learn how to create discounts using the discounts module in the back office of Spryker Cloud Commerce OS. +last_updated: Aug 27, 2021 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/creating-a-voucher +originalArticleId: 5d9e5e07-5260-4f0a-8118-aaa324af6fbc +redirect_from: + - /2021080/docs/creating-a-voucher + - /2021080/docs/en/creating-a-voucher + - /docs/creating-a-voucher + - /docs/en/creating-a-voucher + - /docs/scos/user/back-office-user-guides/202311.0/merchandising/discount/creating-vouchers.html + - /docs/scos/user/back-office-user-guides/202311.0/merchandising/discount/create-discounts.html + - /docs/pbc/all/discount-management/manage-in-the-back-office/create-discounts.html + - /docs/pbc/all/discount-management/202311.0/manage-in-the-back-office/create-discounts.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/create-discounts.html + - /docs/pbc/all/discount-management/202505.0/base-shop/manage-in-the-back-office/create-discounts.html +--- + +This document describes how to create discounts in the Back Office. + +## Prerequisites + +If you are new to discounts, you might want to start with [Best practices: Promote products with discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.html). + +There is a [reference information](#reference-information-define-general-settings-of-the-discount) for each section. Review it before you start, or look up the necessary information as you go through the process. + +To create a discount, do the following: +1. Go to **Merchandising > Discount**. +2. On the **Discount** page, click **Create new discount**. + +## 1. Define general settings of the discount + +1. On the **Create Discount** page, click the **General information** tab. +2. For **STORE RELATION**, select one or more stores you want the discount to be displayed in. +3. Select a **DISCOUNT TYPE**. +4. Enter a **NAME**. +5. Optional: Enter a **DESCRIPTION**. +6. Optional: Enter a **PRIORITY**. +7. Optional: To make the discount exclusive, select **EXCLUSIVE**. +8. Select a **VALID FROM** date. +9. Select a **VALID TO** date. +10. Click **Next**. + +## 2. Define discount calculation and the products to apply the discount to + +1. Click the **Discount calculation** tab. +2. Select a **CALCULATOR TYPE**. +3. Based on the calculator type you've selected, do one of the following: + - **Fixed amount**: Enter the needed discounted prices. + - **Percentage**: For **VALUE**, enter a percentage to be discounted. +4. Select a **DISCOUNT APPLICATION TYPE**. +5. Depending on the discount application type you've selected, do the following: + - **QUERY STRING**: Add a query using the query builder or by entering a plain query. + - **PROMOTIONAL PRODUCT**: + 1. Enter **ABSTRACT PRODUCT SKU**. + 2. Enter a **QUANTITY**. +6. Click **Next**. + +## 3. Define on what conditions the discount can be applied + + +1. Click the **Conditions** tab. +2. For **APPLY WHEN**, add a query using the query builder or by entering a plain query. +3. For **THE DISCOUNT CAN BE APPLIED IF THE QUERY APPLIES FOR AT LEAST X ITEM(S).**, enter a number. +4. Click **Save**. + +This refreshes the page with a success message displayed. + +## 4. Generate voucher codes + +If you are creating a cart rule, proceed to step [5. Activate the discount](#activate-the-discount) + +1. Click the **Voucher codes** tab. +2. Enter a **QUANTITY**. +2. Optional: Enter a **CUSTOM CODE**. +3. Optional: For **ADD RANDOM GENERATED CODE LENGTH**, select a number. +4. Enter a **MAX NUMBER OF USES**. +5. Click **Generate**. + This refreshes the page with a success message displayed. The created voucher codes are displayed in the **Generated Discount Codes** section. + +## 5. Activate the discount + +Optional: To make the discount redeemable on the Storefront, click **Activate** in the top-right corner. + +This refreshes the page with a success message displayed. + +## Reference information: Define general settings of the discount + +| ATTRIBUTE |DESCRIPTION | +| --- | --- | +| STORE RELATION | The stores to display the discount in. | +| DISCOUNT TYPE | Defines how the discount is applied:
      • **Cart rule**: the discount is applied automatically to the products defined in [Define discount calculation and the products to apply the discount to](#define-discount-calculation-and-the-products-to-apply-the-discount-to).
      • **Voucher codes**: the discount is applied to the products defined in [Define discount calculation and the products to apply the discount to](#define-discount-calculation-and-the-products-to-apply-the-discount-to) when a customer enters a voucher code generated in [Generate voucher codes](#generate-voucher-codes).
      | +| NAME | The unique ID of the discount that is displayed in the Back Office and on the Storefront. | +| DESCRIPTION | The description is displayed only in the Back Office. | +| PRIORITY | Defines the order of discounts being applied. Accepts integers from `1` to `9999` with `1` being the highest priority. | +| NON-EXCLUSIVE | Defines that this discount can be applied to a cart together with other non-exclusive discounts. | +| EXCLUSIVE | Defines that this discount, when applied to a cart, discards all non-exclusive discounts. If multiple exclusive discounts are applied to a cart, only the discount with the bigger discount value is applied. | +| VALID FROM and VALID TO | Inclusively, define the dates between which the discount can be applied.| + +## Reference information: Define discount calculation and the products to apply the discount to + +This section contains information for defining discount calculation and the product to apply the discount to. + +### CALCULATOR TYPE + +The discount can be calculated in two ways: +- **Percentage**: The discount is calculated as a percentage of the discounted items. +- **Fixed amount**: A fixed amount is discounted. + +Example: + +| PRODUCT PRICE | CALCULATOR TYPE | AMOUNT | DISCOUNT APPLIED | PRICE TO PAY | +| --- | --- | --- | --- | --- | +| 50 € | Percentage | 10 |5 € | 45 € | +| 50 € | Fixed amount | 10 €| 10 €| 40 €| + +### DISCOUNT APPLICATION TYPE: QUERY STRING + +A query string defines what products a discount applies to. A query string consists of decision rules. Only the products that fulfill all the decision rules are discountable. You can define a query string by entering a plain query or by using a query builder. + +Query builder: +![Discount_Calculation_Query](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/query-string.png) + +Plain query: +![Discount_Calculation_Plain Query](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/discount-calculation-plain-query.png) + +A decision rule consists of the following: +- Attribute. For example, *attribute.color*. +- Relation operator. For example, *equal*. +- Value. For example, *black*. + + +You can find query examples in the following table. + +|PLAIN QUERY|EXPLANATION| +|---|---| +|day-of-week = '1'| Discount applies to any orders that are placed on Monday.| +|shipment-carrier != '1' AND price-mode = 'GROSS_MODE'| Discount applies if the shipment carrier with the identifier `1` is not chosen, and if gross pricing is selected.| +|currency != 'EUR' OR price-mode = 'GROSS_MODE'| Discount applies if the selected currency is not the Euro, or if the pricing mode is gross.| + + +### DISCOUNT APPLICATION TYPE: PROMOTIONAL PRODUCT + +The promotional product lets you select a product that is to be displayed in a customer's cart with a discount. The **ABSTRACT PRODUCT SKU** defines the discounted product, and **QUANTITY** defines how many products a customer can buy with a discount. +![Application type](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/Application+type.png) + +To give away a promotional product for free, select percentage calculator type and enter 100 percents. + +## Reference information: Define on what conditions the discount can be applied + +Similarly to [defining discounted products](#discount-application-type-query-string), the conditions on which a discount is a applied are defined using a query string. + +Example: The discount is applied if five or more items are in the cart, and if it's Tuesday or Wednesday. +![Discount Condition](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Conditions:+Reference+Information/discount-condition.png) + +The **THE DISCOUNT CAN BE APPLIED IF THE QUERY APPLIES FOR AT LEAST X ITEM(S).** defines a minimum number of items that must fulfill the query for the discount to be applies. By default, the minimum order amount value is 1. It means that the discount is applied if there is one item in a cart the fulfills the query. + +Example: The discount is applied if 4 or more items with an Intel Core processor are in the cart. +![Threshold](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Conditions:+Reference+Information/threshold.png) + + + +## Reference information: Generate voucher codes + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| QUANTITY | The number of vouchers to generate. | +| CUSTOM CODE | Any custom symbols you want the voucher codes to contain. If you are adding a single custom code, for **ADD RANDOM GENERATED CODE LENGTH**, select **No additional random characters**. If you add random characters, they are by default appended to the end of the custom code. To specify where to place the random characters, add `[code]` to the custom code. For example, `black[code]friday`. | +| ADD RANDOM GENERATED CODE LENGTH | A number of random alphanumeric symbols to add to the code. If you entered a **CUSTOM CODE**, the random characters are appended to the end of it. If you are generating more than one code, you must select **3** or more. | +| MAX NUMBER OF USES | Defines the maximum number of times a voucher code can be redeemed. | + +{% info_block infoBox "Voucher code collections" %} + +The voucher codes of a discount belong to a voucher code collection. One customer may only redeem one voucher code per collection per cart. At the same time, a customer can redeem two vouchers in one cart if they belong to different voucher code collections. + +{% endinfo_block %} + + +## Decision rules: Attributes and operators + +This section describes complex decision rule attributes: + + +| ATTRIBUTE | VALUE TYPE | DESCRIPTION | +|-|-|-| +|calendar-week|Number| The number of a week in a year: 1-52. | +|grand-total| Decimal number | The sum of all totals. | +|sub-total| Decimal number | The sum of item prices without shipment expenses and discounts. | +|item-price| Decimal number | The price of one item. | +|item-quantity|Number| The number of items. | +|month|Number| The month of the year: 1-12. | +|time| hour:minute | The time of the day. | +|total-quantity|Number| The total cart quantity. | +|attribute.*|String, number| Depends on your product attributes setup. | +|customer-group|String| Any value, use a customer group name for an exact match. | +| customer-order-count | Number | Any value. Checked against the number of placed orders in a customer account. | +| product-offer-reference | String | Unique identifier of a [product offer](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html). Marketplace only. | + + +|RELATION OPERATOR|IN PLAIN QUERY|VALUE TYPE|DESCRIPTION| +|-|-|-|-| +|Contains|CONTAINS|String, Number| Checks if the value is contained in the field. | +|Doesn't contain|DOES NOT CONTAIN|String, Number| Checks if the value is not contained in the field. | +|Equal | = | String, Number | Checks if the value is equal to the value of the right operand| +|Not Equal|!=|String, Number| Checks if the value is not equal to the value of the right operand| +|In|IS IN|List| Values need to be semicolon-separated| +|Not In|IS NOT IN|List| Values need to be semicolon-separated| +|Less|<|Number| Checks if the value is less than the value of the right operand| +|Less or equal|<=|Number| Checks if the value is less than or equal to the value of the right operand| +|Greater|>|Number| Checks if the value is greater than the value of the right operand| +|Greater or equal|>=|Number| Checks if the value is greater than or equal to the value of the right operand | + +## Next steps + +[Edit discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-discounts.html) + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/edit-discounts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/edit-discounts.md new file mode 100644 index 00000000000..d1d67545065 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/edit-discounts.md @@ -0,0 +1,214 @@ +--- +title: Edit discounts +description: Use these procedures to view and update discounts, activate/deactivate discounts, and add voucher codes in the Back Office. +last_updated: Jul 12, 2021 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-discounts +originalArticleId: 6d463da9-6259-4ad5-8c28-46081f008600 +redirect_from: + - /2021080/docs/managing-discounts + - /2021080/docs/en/managing-discounts + - /docs/managing-discounts + - /docs/en/managing-discounts + - /docs/scos/user/back-office-user-guides/202311.0/merchandising/discount/edit-discounts.html + - /docs/pbc/all/discount-management/202311.0/manage-in-the-back-office/edit-discounts.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/edit-discounts.html +--- + +This document describes how to edit discounts in the Back Office. + +## Prerequisites + +If you are new to discounts, you might want to start with [Best practices: Promote products with discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/best-practices-promote-products-with-discounts.html). + +Review the [reference information](#reference-information-edit-general-settings-of-a-discount) before you start, or look up the necessary information as you go through the process. + + +To edit a discount, do the following: +1. Go to **Merchandising > Discount**. + This opens the **Discount** page. +2. Next to the discount you want to edit, click **Edit**. + +## Edit general settings of a discount + +1. On the **Edit Discount** page, click the **General information** tab. +2. For **STORE RELATION**, clear or select stores. +3. Select a **DISCOUNT TYPE**. +4. Update **NAME**. +5. Update **DESCRIPTION**. +6. Update **PRIORITY**. +7. Update exclusivity by selecting **EXCLUSIVE** or **NON-EXCLUSIVE**. +8. Select a **VALID FROM** date. +9. Select a **VALID TO** date. +10. Click **Save**. + This refreshes the page with a success message displayed. + +## Edit discount calculation and the products to apply the discount to + +1. Click the **Discount calculation** tab. +2. Select a **CALCULATOR TYPE**. +3. Based on the selected calculator type, do one of the following: + - **Fixed amount**: Update the discounted prices. + - **Percentage**: For **VALUE**, update the percentage to be discounted. +4. Select a **DISCOUNT APPLICATION TYPE**. +5. Depending on the discount application type you've selected, do the following: + - **QUERY STRING**: Update the query using the query builder or by entering a plain query. + - **PROMOTIONAL PRODUCT**: + 1. Enter **ABSTRACT PRODUCT SKU**. + 2. Enter a **QUANTITY**. +6. Click **Save**. + This refreshes the page with a success message displayed. + + +## Edit the conditions on which the discount can be applied + + +1. Click the **Conditions** tab. +2. For **APPLY WHEN**, update the query using the query builder or by entering a plain query. +3. Update **THE DISCOUNT CAN BE APPLIED IF THE QUERY APPLIES FOR AT LEAST X ITEM(S).**. +4. Click **Save**. + This refreshes the page with a success message displayed. + +## Voucher discount: Generate voucher codes + +1. Click the **Voucher codes** tab. +2. Enter a **QUANTITY**. +2. Optional: Enter a **CUSTOM CODE**. +3. Optional: For **ADD RANDOM GENERATED CODE LENGTH**, select a number. +4. Enter a **MAX NUMBER OF USES**. +5. Click **Generate**. + This refreshes the page with a success message displayed. The created voucher codes are displayed in the **Generated Discount Codes** section. + + +**Tips and tricks** +To download voucher codes, click **Export**. + +## Reference information: Edit general settings of a discount + +| ATTRIBUTE |DESCRIPTION | +| --- | --- | +| STORE RELATION | The stores in which the discount is applicable. | +| DISCOUNT TYPE | Defines how the discount is applied:
      • **Cart rule**: the discount is applied automatically to the products defined in [Edit discount calculation and the products to apply the discount to](#edit-discount-calculation-and-the-products-to-apply-the-discount-to).
      • **Voucher codes**: the discount applies to the products defined in [Edit discount calculation and the products to apply the discount to](#edit-discount-calculation-and-the-products-to-apply-the-discount-to) when a customer enters a voucher code generated in [Voucher discount: Generate voucher codes](#voucher-discount-generate-voucher-codes).
      | +| NAME | The unique ID of the discount that is displayed in the Back Office and on the Storefront. | +| DESCRIPTION | The description is displayed only in the Back Office. | +| PRIORITY | Defines the order of discounts being applied. Accepts integers from `1` to `9999` with `1` being the highest priority. | +| NON-EXCLUSIVE | Defines that this discount can be applied to a cart together with other non-exclusive discounts. | +| EXCLUSIVE | Defines that this discount, when applied to a cart, discards all non-exclusive discounts. If multiple exclusive discounts are applied to a cart, only the discount with the bigger discount value is applied. | +| VALID FROM and VALID TO | Inclusively, define the dates between which the discount can be applied.| + +## Reference information: Edit discount calculation and the products to apply the discount to + +This section contains information for defining discount calculations and the product the discount applies to. + +### CALCULATOR TYPE + +The discount can be calculated in two ways: +- **Percentage**: The discount is calculated as a percentage of the discounted items. +- **Fixed amount**: A fixed amount is discounted. + +Example: + +| PRODUCT PRICE | CALCULATOR TYPE | AMOUNT | DISCOUNT APPLIED | PRICE TO PAY | +| --- | --- | --- | --- | --- | +| 50 € | Percentage | 10 |5 € | 45 € | +| 50 € | Fixed amount | 10 €| 10 €| 40 €| + +### DISCOUNT APPLICATION TYPE: QUERY STRING + +A query string defines what products a discount applies to. A query string consists of decision rules. Only the products that fulfill all the decision rules are discountable. You can define a query string by entering a plain query or by using a query builder. + +Query builder: +![Discount_Calculation_Query](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/query-string.png) + +Plain query: +![Discount_Calculation_Plain Query](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/discount-calculation-plain-query.png) + +A decision rule consists of the following: +- Attribute. For example, *attribute.color*. +- Relation operator. For example, *equal*. +- Value. For example, *black*. + + +You can find query examples in the following table. + +|PLAIN QUERY|EXPLANATION| +|---|---| +|day-of-week = '1'| Discount applies to any orders that are placed on Monday.| +|shipment-carrier != '1' AND price-mode = 'GROSS_MODE'| Discount applies if the shipment carrier with the identifier `1` is not chosen,and if gross pricing is selected.| +|currency != 'EUR' OR price-mode = 'GROSS_MODE'|Discount applies if the selected currency is not the Euro, or if the pricing mode is gross.| + + +### DISCOUNT APPLICATION TYPE: PROMOTIONAL PRODUCT + +The promotional product lets you select a product that is to be displayed in a customer's cart with a discount. The **ABSTRACT PRODUCT SKU** defines the discounted product, and **QUANTITY** defines how many products a customer can buy with a discount. +![Application type](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Calculation:+Reference+Information/Application+type.png) + +To give away a promotional product for free, select percentage calculator type and enter 100 percent. + +## Reference information: Edit the conditions on which the discount can be applied + +Similarly do [defining discounted products](#discount-application-type-query-string), the conditions in which a discount is a applied are defined using a query string. + +Example: The discount is applied if five or more items are in the cart, and if it's Tuesday or Wednesday. +![Discount Condition](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Conditions:+Reference+Information/discount-condition.png) + +The **THE DISCOUNT CAN BE APPLIED IF THE QUERY APPLIES FOR AT LEAST X ITEM(S).** defines a minimum number of items that must fulfill the query for the discount to be applies. By default, the minimum order amount value is 1. It means that the discount is applied if there is one item in a cart the fulfills the query. + +Example: The discount is applied if 4 or more items with an Intel Core processor are in the cart. +![Threshold](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Discount/Discount+Conditions:+Reference+Information/threshold.png) + + + +## Reference information: Generate voucher codes + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| QUANTITY | The number of vouchers to generate. | +| CUSTOM CODE | Any custom symbols you want the voucher codes to contain. If you are adding a single custom code, in **ADD RANDOM GENERATED CODE LENGTH**, select **No additional random characters**. If you add random characters, they are by default appended to the end of the custom code. To specify where to place the random characters, add `[code]` to the custom code. For example, `black[code]friday`. | +| ADD RANDOM GENERATED CODE LENGTH | A number of random alphanumeric symbols to add to the code. If you entered a **CUSTOM CODE**, the random characters will be appended to the end of it. If you are generating more than one code, you must select **3** or more. | +| MAX NUMBER OF USES | Defines the maximum number of times a voucher code can be redeemed. | + +{% info_block infoBox "Voucher code collections" %} + +The voucher codes of a discount belong to a voucher code collection. One customer may only redeem one voucher code per collection per cart. At the same time, a customer can redeem two vouchers in one cart if they belong to different voucher code collections. + +{% endinfo_block %} + + +## Decision rules: Attributes and operators + +This section contains additional information for defining decision rules. + + +| ATTRIBUTE | VALUE TYPE | DESCRIPTION | +|-|-|-|-| +|calendar-week|Number| The number of a week in a year: 1-52. | +|day-of-week|Number| The day of week: 1-7. | +|grand-total| Decimal number | The sum of all totals. | +|sub-total| Decimal number | The sum of item prices without shipment expenses and discounts. | +|item-price| Decimal number | The price of one item. | +|item-quantity|Number| The number of items. | +|month|Number| The month of the year: 1-12. | +|sku|String| The SKU of a product. | +|time| hour:minute | The time of the day. | +|total-quantity|Number| The total cart quantity. | +|attribute.*|String, number| Any value. | +|customer-group|String| Any value, use a customer group name for an exact match. | + + +|RELATION OPERATOR|IN PLAIN QUERY|VALUE TYPE|DESCRIPTION| +|-|-|-|-| +|Contains|CONTAINS|String, Number| Checks if the value is contained in the field. | +|Doesn't contain|DOES NOT CONTAIN|String, Number| Checks if the value is not contained in the field. | +|Equal | = | String, Number |Checks if the value is equal to the value of the right operand| +|Not Equal|!=| String, Number|Checks if the value is not equal to the value of the right operand| +|In|IS IN|List| The values need to be semicolon-separated| +|Not In|IS NOT IN|List| The values need to be semicolon-separated| +|Less|<|Number| Checks if the value is less than the value of the right operand| +|Less or equal|<=|Number| Checks if the value is less than or equal to the value of the right operand| +|Greater|>|Number| Checks if the value is greater than the value of the right operand| +|Greater or equal|>=|Number| Checks if the value is greater than or equal to the value of the right operand | + +## Next steps + +[Edit discounts](/docs/pbc/all/discount-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-discounts.html) diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/export-voucher-codes.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/export-voucher-codes.md similarity index 95% rename from docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/export-voucher-codes.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/export-voucher-codes.md index a775f7a38d4..517b6aac47f 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/export-voucher-codes.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/export-voucher-codes.md @@ -7,7 +7,7 @@ redirect_from: - /docs/scos/user/back-office-user-guides/202311.0/merchandising/discount/export-voucher-codes.html - /docs/pbc/all/discount-management/manage-in-the-back-office/export-voucher-codes.html - /docs/pbc/all/discount-management/202311.0/manage-in-the-back-office/export-voucher-codes.html - - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/export-voucher-codes.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-in-the-back-office/export-voucher-codes.html related: - title: Promotions & Discounts feature overview link: docs/pbc/all/discount-management/page.version/base-shop/promotions-discounts-feature-overview.html diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/manage-discounts-in-the-back-office.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/manage-discounts-in-the-back-office.md similarity index 100% rename from docs/pbc/all/discount-management/202512.0/base-shop/manage-in-the-back-office/manage-discounts-in-the-back-office.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-in-the-back-office/manage-discounts-in-the-back-office.md diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md similarity index 99% rename from docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md index 8ef5ff65ba0..db7839fb005 100644 --- a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.md @@ -4,6 +4,7 @@ description: Learn how to add items with discounts to carts of registered users last_updated: July 29, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/add-items-with-discounts-to-carts-of-registered-users.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/add-items-with-discounts-to-carts-of-registered-users.html - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-carts-of-registered-users.html diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md similarity index 99% rename from docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md index 4af916d7c46..0ed6159aab6 100644 --- a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.md @@ -4,6 +4,7 @@ description: Learn how to add items with discounts to guest carts via the Spryke last_updated: July 29, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-add-items-with-discounts-to-guest-carts.html - /docs/pbc/all/discount-management/manage-via-glue-api/add-items-with-discounts-to-guest-carts.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/add-items-with-discounts-to-guest-carts.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/add-items-with-discounts-to-guest-carts.html diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-carts-of-registered-users.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-carts-of-registered-users.md new file mode 100644 index 00000000000..c92c0478c56 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-carts-of-registered-users.md @@ -0,0 +1,234 @@ +--- +title: "Glue API: Manage discount vouchers in carts of registered users" +description: Learn how to manage discount vouchers in carts of registered users via Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-discount-vouchers-in-carts-of-registered-users +originalArticleId: fdd347a8-d5ae-4799-87f5-b4030c57cdec +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/carts-of-registered-users/managing-discount-vouchers-in-carts-of-registered-users.html + - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/manage-discount-vouchers-in-carts-of-registered-users.html + - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/manage-discount-vouchers-in-carts-of-registered-users.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-carts-of-registered-users.html +related: + - title: Manage carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html + - title: Manage items in carts of registered users + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html +--- + +This endpoint allows managing discount vouchers in carts of registered users. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html). + +## Apply a discount voucher to a cart of a registered user + +To apply a discount voucher to a cart of a registered user, send the request: + +*** +`POST`**/carts/*{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*/vouchers** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*** | The unique ID of the cart to apply the discount voucher to. To get it, [Create a cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#create-a-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts). | + +### Request + +| HEADER KEY | HEADER TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | String | ✓ | An alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | vouchers | + +
      +Request sample: apply a discount voucher to a cart of a registered user + +`POST https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers` + +```json +{ + "data": { + "type": "vouchers", + "attributes": { + "code": "sprykerku2f" + } + } +} +``` + +
      + +
      +Request sample: apply a discount voucher to a cart of a registered user with details on discount voucher information + +`POST https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers?include=vouchers` + +```json +{ + "data": { + "type": "vouchers", + "attributes": { + "code": "mydiscount-qa1ma" + } + } +} +``` + +
      + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| code | String | yes | The unique ID of a discount voucher to apply. | + +### Response + +
      +Response sample: apply a discount voucher to a cart of a registered user + +```json +{ + "data": { + "type": "carts", + "id": "c9310692-2ab0-5edc-bb41-fee6aa828d55", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 21831, + "taxTotal": 19752, + "subtotal": 145540, + "grandTotal": 123709, + "priceToPay": 123709 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/carts/c9310692-2ab0-5edc-bb41-fee6aa828d55" + } + } +} +``` + +
      + +
      +Response sample: apply a discount voucher to a cart of a registered user with details on discount voucher information + +```json +{ + "data": { + "type": "carts", + "id": "56a0b4e4-21d8-516f-acd5-90581c996676", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": {...}, + "discounts": [ + { + "displayName": "My Discount", + "amount": 83133, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 33253, + "code": null + } + ], + "thresholds": [] + }, + "links": {...}, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "mydiscount-qa1ma" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "mydiscount-qa1ma", + "attributes": { + "amount": 83133, + "code": "mydiscount-qa1ma", + "discountType": "voucher", + "displayName": "My Discount", + "isExclusive": false, + "expirationDateTime": "2020-02-29 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "https://glue.mysprykershop.com/vouchers/mydiscount-qa1ma?include=vouchers" + } + } + ] +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + + +## Remove a discount voucher from a registered user's cart + +To remove a discount voucher, send the request: + +*** +`DELETE`**/carts/*{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*/vouchers/*{% raw %}{{{% endraw %}voucher_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*** | The unique ID of the registered user's cart to remove the discount voucher from. To get it, [Retrieve a registered user's cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts). | +| ***{% raw %}{{{% endraw %}voucher_id{% raw %}}}{% endraw %}*** | The unique ID of the voucher to remove. To get it, [Retrieve a registered user's cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-a-registered-users-cart) or [Retrieve a registered user's carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-carts-of-registered-users.html#retrieve-registered-users-carts) with the `vouchers` resource included. | + +### Request + +| HEADER KEY | HEADER TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | String | ✓ | An alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: remove a discount voucher from a registered user's cart + +`DELETE https://glue.mysprykershop.com/carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers/mydiscount-we3ca` + +### Response + +If the voucher is deleted successfully, the endpoints returns the `204 No Data` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 003 | Failed to log in the user. | +| 3301 | Cart or voucher with the specified ID is not found. | +| 3302 | Incorrect voucher code or the voucher cannot be applied. | +| 3303 | Cart code can't be removed. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-guest-carts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-guest-carts.md new file mode 100644 index 00000000000..a3402b046c4 --- /dev/null +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-guest-carts.md @@ -0,0 +1,245 @@ +--- +title: "Glue API: Manage discount vouchers in guest carts" +description: Learn how to manage discount vouchers in guest carts via the Spryker Glue API in your Spryker projects. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-discount-vouchers-in-guest-carts +originalArticleId: ba8ecd12-244b-4dc4-bf64-b52977347916 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-carts/guest-carts/managing-discount-vouchers-in-guest-carts.html + - /docs/scos/dev/glue-api-guides/201903.0/managing-carts/guest-carts/managing-discount-vouchers-in-guest-carts.html + - /docs/scos/dev/glue-api-guides/201907.0/managing-carts/guest-carts/managing-discount-vouchers-in-guest-carts.html + - /docs/scos/dev/glue-api-guides/202005.0/managing-carts/guest-carts/managing-discount-vouchers-in-guest-carts.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-carts/guest-carts/managing-discount-vouchers-in-guest-carts.html + - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/manage-discount-vouchers-in-guest-carts.html + - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/manage-discount-vouchers-in-guest-carts.html + - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-manage-discount-vouchers-in-guest-carts.html +related: + - title: Manage guest cart items + link: docs/pbc/all/cart-and-checkout/page.version/marketplace/manage-using-glue-api/guest-carts/manage-guest-cart-items.html + - title: Managing gift cards of guest users + link: docs/pbc/all/gift-cards/page.version/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.html +--- + +This endpoint allows managing discount vouchers in guest carts. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Promotions & Discounts feature Glue API](/docs/pbc/all/discount-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-glue-api.html). + +## Apply a discount voucher to a guest cart + +To apply a discount voucher to a guest cart, send the request: + +*** +`POST`**/guest-carts/*{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*/vouchers** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*** | The unique ID of the guest cart to apply the discount voucher to. To get it, [Create a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart) or [Retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | The guest user's unique ID. The value should correspond to the value used when [creating the guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| Include | Adds resource relationships to the request. | vouchers | + + +
      +Request sample: apply a discount voucher to a guest cart + +`POST https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers` + +```json +{ + "data": { + "type": "vouchers", + "attributes": { + "code": "sprykerku2f" + } + } +} +``` + +
      + +
      +Request sample: apply a discount voucher to a guest cart with discount voucher information included + +`POST https://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers?include=vouchers` + +```json +{ + "data": { + "type": "vouchers", + "attributes": { + "code": "mydiscount-qa1ma" + } + } +} +``` + +
      + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| code | String | yes | The unique ID of a discount voucher to apply. | + + +### Response + +
      +Response sample: apply a discount voucher to a guest cart + +```json +{ + "data": { + "type": "guest-carts", + "id": "c9310692-2ab0-5edc-bb41-fee6aa828d55", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "totals": { + "expenseTotal": 0, + "discountTotal": 21831, + "taxTotal": 19752, + "subtotal": 145540, + "grandTotal": 123709, + "priceToPay": 123709 + }, + "discounts": [ + { + "displayName": "5% discount on all white products", + "amount": 7277, + "code": null + } + ], + "thresholds": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/guest-carts/c9310692-2ab0-5edc-bb41-fee6aa828d55" + } + } +} +``` + +
      + + + +
      +Response sample: apply a discount voucher to a guest cart with discount voucher information included + +```json +{ + "data": { + "type": "guest-carts", + "id": "56a0b4e4-21d8-516f-acd5-90581c996676", + "attributes": { + "priceMode": "GROSS_MODE", + "currency": "EUR", + "store": "DE", + "name": "Shopping cart", + "isDefault": true, + "totals": {...}, + "discounts": [ + { + "displayName": "My Discount", + "amount": 83133, + "code": null + }, + { + "displayName": "10% Discount for all orders above", + "amount": 33253, + "code": null + } + ], + "thresholds": [] + }, + "links": {...}, + "relationships": { + "vouchers": { + "data": [ + { + "type": "vouchers", + "id": "mydiscount-qa1ma" + } + ] + } + } + }, + "included": [ + { + "type": "vouchers", + "id": "mydiscount-qa1ma", + "attributes": { + "amount": 83133, + "code": "mydiscount-qa1ma", + "discountType": "voucher", + "displayName": "My Discount", + "isExclusive": false, + "expirationDateTime": "2020-02-29 00:00:00.000000", + "discountPromotionAbstractSku": null, + "discountPromotionQuantity": null + }, + "links": { + "self": "http://glue.mysprykershop.com/vouchers/mydiscount-qa1ma?include=vouchers" + } + } + ] +} +``` + +
      + + +{% include pbc/all/glue-api-guides/{{page.version}}/vouchers-cart-rules-response-attributes.md %} + + + +## Remove a discount voucher from a guest cart + +To remove a discount voucher, send the request: + +*** +`DELETE`**/guest-carts/*{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*/vouchers/*{% raw %}{{{% endraw %}voucher_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}uuid{% raw %}}}{% endraw %}*** | The unique ID of the guest cart to remove the discount voucher from. To get it, [Retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart). | +| ***{% raw %}{{{% endraw %}voucher_id{% raw %}}}{% endraw %}*** | The unique ID of the voucher to remove. To get it, [Retrieve a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#retrieve-a-guest-cart) with the `vouchers` resource included. | + +### Request + +| HEADER KEY | HEADER VALUE EXAMPLE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| X-Anonymous-Customer-Unique-Id | 164b-5708-8530 | ✓ | The guest user's unique ID. The value should correspond to the value used when [creating the guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html#create-a-guest-cart). | + + +Request sample: remove a discount voucher from a guest cart + +`DELETE http://glue.mysprykershop.com/guest-carts/1ce91011-8d60-59ef-9fe0-4493ef3628b2/vouchers/mydiscount-we3ca` + +### Response + +If the voucher is deleted successfully, the endpoints returns the `204 No Data` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 101 | Cart with the specified ID is not found. | +| 109 | `X-Anonymous-Customer-Unique-Id` header is empty. | +| 3301 | Voucher with the specified ID is not found. | +| 3302 | Incorrect voucher code or the voucher cannot be applied.| +| 3303| Cart code can't be removed. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md similarity index 99% rename from docs/pbc/all/discount-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md index eb9ec4830fd..61ef77df5ab 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.md @@ -9,7 +9,7 @@ redirect_from: - /docs/scos/dev/glue-api-guides/201811.0/retrieving-promotional-items.html - /docs/scos/dev/glue-api-guides/201903.0/retrieving-promotional-items.html - /docs/scos/dev/glue-api-guides/201907.0/retrieving-promotional-items.html - - /docs/scos/dev/glue-api-guides/202311.0/retrieving-promotional-items.html + - /docs/scos/dev/glue-api-guides/202311.0/retrieving-promotional-items.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/manage-discounts-via-glue-api.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/manage-discounts-via-glue-api.html - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-manage-discounts.html diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md similarity index 99% rename from docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md index 93479e725f0..dc94a2c6c8d 100644 --- a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.md @@ -4,6 +4,7 @@ description: Learn how to retrieve cart rules, vouchers, and promotional items i last_updated: July 28, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/retrieve-discounts-in-carts-of-registered-users.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/retrieve-discounts-in-carts-of-registered-users.html - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-carts-of-registered-users.html diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md similarity index 99% rename from docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md index 1606c0815e0..59aa9ee7c38 100644 --- a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.md @@ -4,6 +4,7 @@ description: Learn how to retrieve cart rules, vouchers, and promotional items i last_updated: Jul 25, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/retrieve-discounts-in-customer-carts.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/retrieve-discounts-in-customer-carts.html - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-customer-carts.html diff --git a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md similarity index 98% rename from docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md rename to docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md index 3be627df445..bebad350552 100644 --- a/docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.md @@ -4,6 +4,7 @@ description: Learn how you can retrieve discounts in guest carts via the Spryker last_updated: July 25, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/discount-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.html - /docs/pbc/all/discount-management/202311.0/manage-via-glue-api/retrieve-discounts-in-guest-carts.html - /docs/pbc/all/discount-management/202311.0/base-shop/manage-via-glue-api/retrieve-discounts-in-guest-carts.html - /docs/pbc/all/discount-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-discounts-in-guest-carts.html diff --git a/docs/pbc/all/discount-management/202512.0/base-shop/promotions-discounts-feature-overview.md b/docs/pbc/all/discount-management/202602.0/base-shop/promotions-discounts-feature-overview.md similarity index 99% rename from docs/pbc/all/discount-management/202512.0/base-shop/promotions-discounts-feature-overview.md rename to docs/pbc/all/discount-management/202602.0/base-shop/promotions-discounts-feature-overview.md index c2bbfe05eab..2a3ef91f2ce 100644 --- a/docs/pbc/all/discount-management/202512.0/base-shop/promotions-discounts-feature-overview.md +++ b/docs/pbc/all/discount-management/202602.0/base-shop/promotions-discounts-feature-overview.md @@ -6,11 +6,12 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/promotions-discounts-feature-overview originalArticleId: bdb56333-569c-42ac-9a12-2f8ecc84c6b5 redirect_from: + - /docs/pbc/all/discount-management/202512.0/base-shop/promotions-discounts-feature-overview.html - /docs/scos/user/features/201903.0/promotions-discounts-feature-overview.html - /docs/scos/user/features/202108.0/promotions-discounts-feature-overview.html - /docs/scos/user/features/202200.0/promotions-discounts-feature-overview.html - /docs/scos/user/features/202311.0/promotions-discounts-feature-overview.html - - /docs/pbc/all/discount-management/202204.0/base-shop/promotions-discounts-feature-overview.html + - /docs/pbc/all/discount-management/202204.0/base-shop/promotions-discounts-feature-overview.html --- The *Discount Management* feature lets shop owners provide free value to their customers by discounting the percentage or fixed sum of an order's subtotal, or an item's price on predefined conditions. @@ -77,7 +78,7 @@ The same decision rules look as follows as a plain query: `total-quantity = '3' AND day-of-week = '5'` -You can switch between Query Builder and Plain query modes to see how the specified decision rules look in either of them. +You can switch between Query Builder and Plain query modes to see how the specified decision rules look in either of them. Decision rules are combined with *AND* and *OR* combination operators. With the AND operator, all the rules must be fulfilled for the discount to be applied. With the OR operator, at least one must be fulfilled for the discount to be applied. diff --git a/docs/pbc/all/discount-management/202512.0/discount-management.md b/docs/pbc/all/discount-management/202602.0/discount-management.md similarity index 100% rename from docs/pbc/all/discount-management/202512.0/discount-management.md rename to docs/pbc/all/discount-management/202602.0/discount-management.md diff --git a/docs/pbc/all/discount-management/202404.0/marketplace/install-the-marketplace-promotions-discounts-feature.md b/docs/pbc/all/discount-management/202602.0/marketplace/install-the-marketplace-promotions-discounts-feature.md similarity index 100% rename from docs/pbc/all/discount-management/202404.0/marketplace/install-the-marketplace-promotions-discounts-feature.md rename to docs/pbc/all/discount-management/202602.0/marketplace/install-the-marketplace-promotions-discounts-feature.md diff --git a/docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-domain-model-and-relationships.md b/docs/pbc/all/discount-management/202602.0/marketplace/marketplace-promotions-discounts-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-domain-model-and-relationships.md rename to docs/pbc/all/discount-management/202602.0/marketplace/marketplace-promotions-discounts-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-overview.md b/docs/pbc/all/discount-management/202602.0/marketplace/marketplace-promotions-discounts-feature-overview.md similarity index 98% rename from docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-overview.md rename to docs/pbc/all/discount-management/202602.0/marketplace/marketplace-promotions-discounts-feature-overview.md index aa60c64cb7d..639d94a608b 100644 --- a/docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-overview.md +++ b/docs/pbc/all/discount-management/202602.0/marketplace/marketplace-promotions-discounts-feature-overview.md @@ -4,6 +4,7 @@ description: This document contains concept information for the Marketplace Prom template: concept-topic-template last_updated: Jul 17, 2023 redirect_from: + - /docs/pbc/all/discount-management/202512.0/marketplace/marketplace-promotions-discounts-feature-overview.html - /docs/marketplace/user/features/202311.0/marketplace-promotions-and-discounts-feature-overview.html - /docs/marketplace/dev/feature-walkthroughs/202311.0/marketplace-promotions-and-discounts-feature-walkthrough.html - /docs/pbc/all/discount-management/202505.0/marketplace/marketplace-promotions-discounts-feature-overview.html @@ -93,7 +94,7 @@ The same decision rules look as follows as a plain query: ![Plain query](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Promotions+&+Discounts/Discount/Discount+Feature+Overview/plain-query.png) -You can switch between Query Builder and Plain query modes to see how the specified decision rules look in either of them. +You can switch between Query Builder and Plain query modes to see how the specified decision rules look in either of them. Decision rules are combined with *AND* and *OR* combination operators. With the AND operator, all the rules should be fulfilled for the discount to be applied. With the OR operator, at least one of them should be fulfilled for the discount to be applied. diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md b/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md deleted file mode 100644 index 7be58ea10a7..00000000000 --- a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Upgrade the Currency module -description: Learn how to upgrade to a newer version of the Dynamic multi store currency module within your Spryker project. -last_updated: Jun 16, 2021 -template: module-migration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/mg-currency -originalArticleId: 9f4fb3f2-3ab9-42fd-9fd0-dda4131e8444 -redirect_from: - - /2021080/docs/mg-currency - - /2021080/docs/en/mg-currency - - /docs/mg-currency - - /docs/en/mg-currency - - /v1/docs/mg-currency - - /v1/docs/en/mg-currency - - /v2/docs/mg-currency - - /v2/docs/en/mg-currency - - /v3/docs/mg-currency - - /v3/docs/en/mg-currency - - /v4/docs/mg-currency - - /v4/docs/en/mg-currency - - /v5/docs/mg-currency - - /v5/docs/en/mg-currency - - /v6/docs/mg-currency - - /v6/docs/en/mg-currency - - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-currency.html - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-currency.html ---- - -{% include pbc/all/upgrade-modules/upgrade-the-currency-module.md %} diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/add-fields-to-back-office-forms.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/add-fields-to-back-office-forms.md similarity index 100% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/add-fields-to-back-office-forms.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/add-fields-to-back-office-forms.md diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/delete-stores.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/delete-stores.md similarity index 100% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/delete-stores.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/delete-stores.md diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/dynamic-multistore-feature-overview.md similarity index 99% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/dynamic-multistore-feature-overview.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/dynamic-multistore-feature-overview.md index 91ec254dd14..4421b7046a8 100644 --- a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/dynamic-multistore-feature-overview.md @@ -3,6 +3,8 @@ title: Dynamic Multistore description: A list of features that are within Spryker Dynamic Multistore allowing you to create and manage multiple online stores from the Spryker Back Office. last_updated: Nov 12, 2024 template: concept-topic-template +redirect_from: + - /docs/pbc/all/dynamic-multistore/202512.0/base-shop/dynamic-multistore-feature-overview.html related: - title: Install Dynamic Multistore link: docs/pbc/all/dynamic-multistore/page.version/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.html @@ -11,7 +13,7 @@ related: - title: Install the Dynamic Multistore Glue API link: docs/pbc/all/dynamic-multistore/page.version/base-shop/install-and-upgrade/install-the-dynamic-multistore-glue-api.html - title: Install Dynamic Multistore + the Marketplace MerchantPortal Core feature - link: docs/pbc/all/dynamic-multistore/page.version/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.html + link: docs/pbc/all/dynamic-multistore/page.version/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.html --- *Dynamic Multistore* (DMS) lets you create and manage multiple stores within the same region in the Back Office. It streamlines the setup and maintenance of distinct stores tailored to various customer segments, regions, or product categories. diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/enable-dynamic-multistore.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/enable-dynamic-multistore.md similarity index 98% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/enable-dynamic-multistore.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/enable-dynamic-multistore.md index 0338034e801..133b302ac12 100644 --- a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/enable-dynamic-multistore.md +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/enable-dynamic-multistore.md @@ -3,6 +3,8 @@ title: Enable Dynamic Multistore description: Learn how to enable the Dynamic Store feature on the latest codebase last_updated: Dec 19, 2024 template: howto-guide-template +redirect_from: + - /docs/pbc/all/dynamic-multistore/202512.0/base-shop/enable-dynamic-multistore.html --- diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/import-stores.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/import-stores.md similarity index 100% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/import-stores.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/import-stores.md diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-availability-notification-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-availability-notification-feature.md new file mode 100644 index 00000000000..548a213f5f4 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-availability-notification-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + Availability Notification feature +description: Learn how to integrate the Dynamic multiple stores & Availability Notification feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-availability-notification-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cart-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cart-feature.md new file mode 100644 index 00000000000..9d0b9c6f34e --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cart-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + Cart feature +description: Learn how to integrate the Dynamic multiple stores & Cart feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cart-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cms-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cms-feature.md new file mode 100644 index 00000000000..822708b51e2 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-cms-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + CMS feature +description: Learn how to integrate the Dynamic multiple stores & CMS feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-cms-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-customer-account-management-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-customer-account-management-feature.md new file mode 100644 index 00000000000..92b962d5db1 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-customer-account-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + Customer Account Management feature +description: Learn how to integrate the Dynamic multiple stores & Customer Account Management feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-customer-account-management-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-prices-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-prices-feature.md new file mode 100644 index 00000000000..372c5b4327f --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-prices-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + the Prices feature +description: Learn how to integrate the Dynamic multiple stores & Prices feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-prices-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-product-feature.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-product-feature.md new file mode 100644 index 00000000000..56ef832e641 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore-product-feature.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + Product feature +description: Learn how to integrate the Dynamic multiple stores & Product feature into a Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-product-feature.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.md new file mode 100644 index 00000000000..dd639e26beb --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-features/install-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore +description: Learn how you can integrate the Dynamic Store feature into your Spryker project +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore.md %} diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-the-dynamic-multistore-glue-api.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-the-dynamic-multistore-glue-api.md new file mode 100644 index 00000000000..4e98ce23874 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/install-the-dynamic-multistore-glue-api.md @@ -0,0 +1,8 @@ +--- +title: Install the Dynamic Multistore Glue API +description: A tutorial guide showing you how to Install the Dynamic Multistore feature in to your Spryker project. +last_updated: Nov 12, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-glue-api/{{page.version}}/install-the-dynamic-multistore-glue-api.md %} diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md similarity index 92% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md index 3dd622113d0..a39820ee1d2 100644 --- a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-country originalArticleId: 9f4fb3f2-3ab9-42fd-9fd0-dda4131e8555 redirect_from: + - /docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-country-module.html - /2021080/docs/mg-country - /2021080/docs/en/mg-country - /docs/mg-country diff --git a/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md new file mode 100644 index 00000000000..a12f71fc069 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the Currency module +description: Learn how to upgrade to a newer version of the Dynamic multi store currency module within your Spryker project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-currency +originalArticleId: 9f4fb3f2-3ab9-42fd-9fd0-dda4131e8444 +redirect_from: + - /docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html + - /2021080/docs/mg-currency + - /2021080/docs/en/mg-currency + - /docs/mg-currency + - /docs/en/mg-currency + - /v1/docs/mg-currency + - /v1/docs/en/mg-currency + - /v2/docs/mg-currency + - /v2/docs/en/mg-currency + - /v3/docs/mg-currency + - /v3/docs/en/mg-currency + - /v4/docs/mg-currency + - /v4/docs/en/mg-currency + - /v5/docs/mg-currency + - /v5/docs/en/mg-currency + - /v6/docs/mg-currency + - /v6/docs/en/mg-currency + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-currency.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-currency-module.md %} diff --git a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md similarity index 90% rename from docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md rename to docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md index f37ad818a9f..91578e92bba 100644 --- a/docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md +++ b/docs/pbc/all/dynamic-multistore/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-locale originalArticleId: 0566d4d5-bb4d-4079-a74f-f50e2f02ef32 redirect_from: + - /docs/pbc/all/dynamic-multistore/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-locale-module.html - /2021080/docs/migration-guide-locale - /2021080/docs/en/migration-guide-locale - /docs/migration-guide-locale diff --git a/docs/pbc/all/dynamic-multistore/202512.0/dynamic-multistore.md b/docs/pbc/all/dynamic-multistore/202602.0/dynamic-multistore.md similarity index 100% rename from docs/pbc/all/dynamic-multistore/202512.0/dynamic-multistore.md rename to docs/pbc/all/dynamic-multistore/202602.0/dynamic-multistore.md diff --git a/docs/pbc/all/dynamic-multistore/202602.0/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.md b/docs/pbc/all/dynamic-multistore/202602.0/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.md new file mode 100644 index 00000000000..3e477d8668b --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202602.0/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.md @@ -0,0 +1,8 @@ +--- +title: Install Dynamic Multistore + the Marketplace MerchantPortal Core feature +last_updated: Apr 25, 2023 +description: This document describes the process how to integrate Dynamic Store + the Marketplace MerchantPortal Core feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md %} diff --git a/docs/pbc/all/emails/202512.0/emails.md b/docs/pbc/all/emails/202602.0/emails.md similarity index 98% rename from docs/pbc/all/emails/202512.0/emails.md rename to docs/pbc/all/emails/202602.0/emails.md index 49aa5713311..72bbe544314 100644 --- a/docs/pbc/all/emails/202512.0/emails.md +++ b/docs/pbc/all/emails/202602.0/emails.md @@ -12,7 +12,7 @@ redirect_from: - /docs/en/mailing-notifications-feature-overview - /docs/scos/user/features/202200.0/mailing-and-notifications-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202200.0/mailing-and-notifications-feature-walkthrough.html - - /docs/pbc/all/emails/202204.0/emails.html + - /docs/pbc/all/emails/202204.0/emails.html --- The *Emails* capability lets you manage newsletters and notifications. diff --git a/docs/pbc/all/emails/202512.0/howto-create-and-register-a-mail-provider.md b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-provider.md similarity index 98% rename from docs/pbc/all/emails/202512.0/howto-create-and-register-a-mail-provider.md rename to docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-provider.md index c79e995af40..fe6e660b23e 100644 --- a/docs/pbc/all/emails/202512.0/howto-create-and-register-a-mail-provider.md +++ b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-provider.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-create-register-provider-plugin originalArticleId: 423f4609-d088-428a-bbe9-6718a7e235ed redirect_from: + - /docs/pbc/all/emails/202512.0/howto-create-and-register-a-mail-provider.html - /2021080/docs/ht-create-register-provider-plugin - /2021080/docs/en/ht-create-register-provider-plugin - /docs/ht-create-register-provider-plugin diff --git a/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-type-builder-plugin.md b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-type-builder-plugin.md new file mode 100644 index 00000000000..ca136ada6b0 --- /dev/null +++ b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mail-type-builder-plugin.md @@ -0,0 +1,130 @@ +--- +title: "HowTo: Create and register a MailTypeBuilderPlugin" +description: Use this guide to create and register the MailTypeBuilderPlugin in the Mail module. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/ht-mail-create-mailtype-plugin +originalArticleId: ba04380c-00b9-4815-9023-839c99a31497 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/howto-create-and-register-a-mailtypeplugin + - /2021080/docs/ht-mail-create-mailtype-plugin + - /2021080/docs/en/ht-mail-create-mailtype-plugin + - /docs/ht-mail-create-mailtype-plugin + - /docs/en/ht-mail-create-mailtype-plugin + - /v6/docs/ht-make-product-shown-on-frontend-by-url + - /v6/docs/en/ht-make-product-shown-on-frontend-by-url + - /v5/docs/ht-make-product-shown-on-frontend-by-url + - /v5/docs/en/ht-make-product-shown-on-frontend-by-url + - /v4/docs/ht-make-product-shown-on-frontend-by-url + - /v4/docs/en/ht-make-product-shown-on-frontend-by-url + - /v3/docs/ht-make-product-shown-on-frontend-by-url + - /v3/docs/en/ht-make-product-shown-on-frontend-by-url + - /v2/docs/ht-make-product-shown-on-frontend-by-url + - /v2/docs/en/ht-make-product-shown-on-frontend-by-url + - /v1/docs/ht-make-product-shown-on-frontend-by-url + - /v1/docs/en/ht-make-product-shown-on-frontend-by-url + - /docs/pbc/all/emails/202204.0/howto-create-and-register-a-mail-type-builder-plugin.html +--- + +`MailTypeBuilderPlugin` is used to build the entire `MailTransfer` through an easy-to-use interface. Create the `MailTypeBuilderPlugin` within the `Mail` module, which sends out the emails, and implement `MailTypeBuilderPluginInterface`. +Then, in the `build()` method, set up your email. + +All `MailTransfers` need to know which mail type has to be used for further internal processing. The mail type has to be a string. + +In most cases, you can add a specific transfer to the `MailTransfer`—for example, a `CustomerTransfer` when a customer registers. This transfer object is available in your `MailTypeBuilderPlugin` through the `MailTransfer`. + +Let's say you have a module named `FooBar`, where you want to add automated mail sending. To enable that feature, follow these steps: + +Example of a `FooBarMailTypeBuilderPlugin`: + +```php +setSubject(static::GLOSSARY_KEY_MAIL_SUBJECT) + ->setSubjectTranslationParameters([static::PARAMETER_NAME => $fooBarTransfer->getFooBarNameOrFail()]) + ->addTemplate( + (new MailTemplateTransfer()) + ->setName(static::MAIL_TEMPLATE_HTML) + ->setIsHtml(true), + ) + ->addTemplate( + (new MailTemplateTransfer()) + ->setName(static::MAIL_TEMPLATE_TEXT) + ->setIsHtml(false), + ) + ->addRecipient( + (new MailRecipientTransfer()) + ->setEmail($mailTransfer->getFooBar()->getEmail()) + ->setName($mailTransfer->getFooBar()->getName()), + ); + } +} +``` + +Register the `FooBarMailTypeBuilderPlugin`: + +```php +setType('MAIL_TYPE'); + $mailTransfer->setFooBar(new FooBarTransfer()); + $mailTransfer->setLocale('DE'); +``` + +Call `MailFacade::handleMail($mailTransfer)`. + +If everything is set up properly the mail will be sent. + +Follow [Tutorial sending an email](/docs/pbc/all/emails/{{page.version}}/tutorial-sending-an-email.html) to get more information. + +{% endinfo_block %} diff --git a/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mailtypeplugin.md b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mailtypeplugin.md new file mode 100644 index 00000000000..477dcddc4df --- /dev/null +++ b/docs/pbc/all/emails/202602.0/howto-create-and-register-a-mailtypeplugin.md @@ -0,0 +1,106 @@ +--- +title: "HowTo: Create and register a MailTypePlugin" +description: Use the guide to create and register the MailTypePlugin in the Mail module. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/ht-mail-create-mailtype-plugin +originalArticleId: ba04380c-00b9-4815-9023-839c99a31497 +redirect_from: + - /2021080/docs/ht-mail-create-mailtype-plugin + - /2021080/docs/en/ht-mail-create-mailtype-plugin + - /docs/ht-mail-create-mailtype-plugin + - /docs/en/ht-mail-create-mailtype-plugin + - /v6/docs/ht-make-product-shown-on-frontend-by-url + - /v6/docs/en/ht-make-product-shown-on-frontend-by-url + - /v5/docs/ht-make-product-shown-on-frontend-by-url + - /v5/docs/en/ht-make-product-shown-on-frontend-by-url + - /v4/docs/ht-make-product-shown-on-frontend-by-url + - /v4/docs/en/ht-make-product-shown-on-frontend-by-url + - /v3/docs/ht-make-product-shown-on-frontend-by-url + - /v3/docs/en/ht-make-product-shown-on-frontend-by-url + - /v2/docs/ht-make-product-shown-on-frontend-by-url + - /v2/docs/en/ht-make-product-shown-on-frontend-by-url + - /v1/docs/ht-make-product-shown-on-frontend-by-url + - /v1/docs/en/ht-make-product-shown-on-frontend-by-url + - /docs/pbc/all/emails/202204.0/howto-create-and-register-a-mai%E2%80%A6 + - /docs/pbc/all/emails/202204.0/howto-create-and-register-a-mailtypeplugin.html +--- + +This document shows how to create and register a mail provider you want to use. + +## Create a `MailTypePlugin` + +`MailType` is a class used to build the entire `MailTransfer` through an easy-to-use interface. Create the `MailTypePlugin` within the `Mail` module, which sends out the emails, and implement `MailTypePluginInterface`. Then, in the `build()` method, set up your email. + +`MailType` is a class used to build the entire `MailTransfer` through an easy-to-use interface. Create the `MailTypePlugin` within the `Mail` module, which sends out the emails, and implement `MailTypePluginInterface`. Then, in the `build()` method, set up your email. + +Within the `build()` method, you have access to the `MailBuilderInterface`, which makes it easy to enrich the `MailTransfer` with the information needed to send out the emails. You also have access to the `MailTransfer` itself through the `MailBuilderInterface`. This one, for example, is used to get the recipient information from a given transfer object. + +In most cases, you can add a specific transfer to the `MailTransfer`—for example, a `CustomerTransfer` when a customer registers. This transfer object is available in your `MailType` through the `MailTransfer`. + +Example of a `MailTypePlugin`: + +```php +setSubject($mailBuilder) + ->setHtmlTemplate($mailBuilder) + ->setTextTemplate($mailBuilder) + ->setSender($mailBuilder) + ->setRecipient($mailBuilder); + } + + ... + +} +``` + +## Register the `MailTypePlugin` + +To add your `MailType` to the `MailTypeCollection`, add it to your `MailDependencyProvider`: + +```php +extend(self::MAIL_TYPE_COLLECTION, function (MailTypeCollectionAddInterface $mailCollection) { + $mailCollection->add(new YourMailTypePlugin()); + + return $mailCollection; + } + + ... +} +... +``` diff --git a/docs/pbc/all/emails/202602.0/install-the-mailing-and-notifications-feature.md b/docs/pbc/all/emails/202602.0/install-the-mailing-and-notifications-feature.md new file mode 100644 index 00000000000..66c293fb383 --- /dev/null +++ b/docs/pbc/all/emails/202602.0/install-the-mailing-and-notifications-feature.md @@ -0,0 +1,158 @@ +--- +title: Install the Mailing and Notifications feature +description: The guide describes the process of installing the mailing provider in your project. +last_updated: Feb 19, 2026 +template: feature-integration-guide-template +redirect_from: + - /docs/scos/dev/feature-integration-guides/202311.0/mailing-and-notifications-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/mailing-and-notifications-feature-integration.html +--- + +{% info_block errorBox %} + +The following feature integration guide expects the basic feature to be in place. +This guide describes all the required steps in order to integrate a mailing provider into your project. + +{% endinfo_block %} + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---|---|---| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/symfony-mailer:^1.1.0 --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| SymfonyMailer | spryker/symfony-mailer | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| Mail.subjectTranslationParameters | property | added | src/Generated/Shared/Transfer/MailTransfer | +| MailRecipient.nameTranslationParameters | property | added | src/Generated/Shared/Transfer/MailRecipientTransfer | +| MailSender.nameTranslationParameters | property | added | src/Generated/Shared/Transfer/MailSenderTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | NAMESPACE | +| --- | --- | --- | +| SymfonyMailerProviderPlugin | Provides mail sending using `SymfonyMailer` component. | Spryker\Zed\SymfonyMailer\Communication\Plugin\Mail | + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php +extend(static::MAIL_PROVIDER_COLLECTION, function (MailProviderCollectionAddInterface $mailProviderCollection) { + $mailProviderCollection + ->addProvider(new SymfonyMailerProviderPlugin(), [ + MailConfig::MAIL_TYPE_ALL, + ]); + + return $mailProviderCollection; + }); + + return $container; + } +} +``` + +To verify that everything is set up correctly and send an email, see [How to create and register MailTypeBuilderPlugin](/docs/pbc/all/emails/{{page.version}}/howto-create-and-register-a-mail-type-builder-plugin.html). + + +## Migrate from SwiftMailer to Symfony Mailer + +If your application is using SwiftMailer, the following variables have the values: +1. SPRYKER_SMTP_PORT = 587 +2. SPRYKER_SMTP_ENCRYPTION='tls' + +To migrate to Symfony Mailer, follow the steps: + +1. Force the port for SMTP to 465 and release this change with the migration release: + +```php +$config[SymfonyMailerConstants::SMTP_PORT] = '465'; +``` + +2. Create a support ticket to change `SPRYKER_SMTP_PORT` to 465. + +3. Revert configuration to the previous state to use a port from the env variable: + +```php +$config[SymfonyMailerConstants::SMTP_PORT] = getenv('SPRYKER_SMTP_PORT') ?: null; +``` + +4. Redeploy the application. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/emails/202512.0/third-party-integrations/install-and-configure-inxmail.md b/docs/pbc/all/emails/202602.0/third-party-integrations/install-and-configure-inxmail.md similarity index 100% rename from docs/pbc/all/emails/202512.0/third-party-integrations/install-and-configure-inxmail.md rename to docs/pbc/all/emails/202602.0/third-party-integrations/install-and-configure-inxmail.md diff --git a/docs/pbc/all/emails/202512.0/third-party-integrations/integrate-inxmail.md b/docs/pbc/all/emails/202602.0/third-party-integrations/integrate-inxmail.md similarity index 100% rename from docs/pbc/all/emails/202512.0/third-party-integrations/integrate-inxmail.md rename to docs/pbc/all/emails/202602.0/third-party-integrations/integrate-inxmail.md diff --git a/docs/pbc/all/emails/202512.0/third-party-integrations/inxmail-api-requests.md b/docs/pbc/all/emails/202602.0/third-party-integrations/inxmail-api-requests.md similarity index 100% rename from docs/pbc/all/emails/202512.0/third-party-integrations/inxmail-api-requests.md rename to docs/pbc/all/emails/202602.0/third-party-integrations/inxmail-api-requests.md diff --git a/docs/pbc/all/emails/202512.0/third-party-integrations/inxmail-order-referenced-commands.md b/docs/pbc/all/emails/202602.0/third-party-integrations/inxmail-order-referenced-commands.md similarity index 100% rename from docs/pbc/all/emails/202512.0/third-party-integrations/inxmail-order-referenced-commands.md rename to docs/pbc/all/emails/202602.0/third-party-integrations/inxmail-order-referenced-commands.md diff --git a/docs/pbc/all/emails/202512.0/third-party-integrations/inxmail.md b/docs/pbc/all/emails/202602.0/third-party-integrations/inxmail.md similarity index 100% rename from docs/pbc/all/emails/202512.0/third-party-integrations/inxmail.md rename to docs/pbc/all/emails/202602.0/third-party-integrations/inxmail.md diff --git a/docs/pbc/all/emails/202602.0/tutorial-sending-an-email.md b/docs/pbc/all/emails/202602.0/tutorial-sending-an-email.md new file mode 100644 index 00000000000..1bc3141fd3d --- /dev/null +++ b/docs/pbc/all/emails/202602.0/tutorial-sending-an-email.md @@ -0,0 +1,320 @@ +--- +title: "Tutorial: Sending an email" +description: The tutorial provides code samples on how to process customer registration information in Zed to register the customer and send a confirmation email. +last_updated: Sep 27, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/sending-an-email +originalArticleId: cdce91fc-fc1b-40f5-9442-b88f5036c86c +redirect_from: + - /2021080/docs/sending-an-email + - /2021080/docs/en/sending-an-email + - /docs/sending-an-email + - /docs/en/sending-an-email + - /v6/docs/sending-an-email + - /v6/docs/en/sending-an-email + - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/tutorial-sending-an-email + - /docs/pbc/all/emails/202204.0/tutorial-sending-an-email.html +--- + +The following example represents a real-world scenario: `CustomerRegistration`. + +A customer goes through the registration process in your frontend (Yves) and all customer information is sent to Zed. Zed uses the information to register the customer. Once the registration is completed, the customer receives a confirmation email. + +## 1. Handle mail usage + +In the model which handles the registration, you can override the `sendRegistrationToken` function: + +```php +setType(CustomCustomerRegistrationMailTypeBuilderPlugin::MAIL_TYPE); + + // Set the CustomerTransfer to the MailTransfer + // this can be any Transfer object which is + // needed in the Mail + $mailTransfer->setCustomer($customerTransfer); + + // Set the LocaleTransfer which should be used + // for, for example, translation inside your templates + $mailTransfer->setLocale($customerTransfer->getLocale()); + + // Trigger the mail facade to handle the mail + $this->mailFacade->handleMail($mailTransfer); + } +} +``` + +Also, override factory: + +```php +getConfig(); + + $customer = new Customer( + $this->getQueryContainer(), + $this->createCustomerReferenceGenerator(), + $config, + $this->createEmailValidator(), + $this->getMailFacade(), + $this->getLocaleQueryContainer(), + $this->getStore(), + $this->createCustomerExpander(), + $this->getPostCustomerRegistrationPlugins() + ); + + return $customer; + } +} +``` + +All `MailTransfers` need to know which mail type (nothing more than a string) must be used for further internal processing. + +A simple example is as follows: + +```php +protected function sendRegistrationToken() +{ + $mailTransfer = new MailTransfer(); + $mailTransfer->setType(YourMailTypePlugin::MAIL_TYPE); + $this->mailFacade->handleMail($mailTransfer); +} +``` + +## 2. Creating a MailTypeBuilderPlugin + +Create `MailTypeBuilderPlugin` implementing the `MailTypeBuilderPluginInterface`. For more information about creating a `MailTypeBuilderPlugin`, see [HowTo: Create and register a MailTypeBuilderPlugin](/docs/pbc/all/emails/{{page.version}}/howto-create-and-register-a-mailtypeplugin.html): + +
      Code sample: + +```php +requireCustomer()->getCustomer(); + + return $mailTransfer + ->setSubject(static::GLOSSARY_KEY_MAIL_SUBJECT) + ->addTemplate( + (new MailTemplateTransfer()) + ->setName(static::MAIL_TEMPLATE_HTML) + ->setIsHtml(true), + ) + ->addTemplate( + (new MailTemplateTransfer()) + ->setName(static::MAIL_TEMPLATE_TEXT) + ->setIsHtml(false), + ) + ->addRecipient( + (new MailRecipientTransfer()) + ->setEmail($customerTransfer->getEmail()) + ->setName(sprintf('%s %s', $customerTransfer->getFirstName(), $customerTransfer->getLastName())), + ); + } +} +``` + +
      + +## 3. Registering a plugin + +When the plugin is created, it must be registered in `MailDependencyProvider`: + +```php +setSubject('Registration {customerName}') + ->setSubjectTranslations([ + '{customerName}' => 'Spencor Hopkins' + ]) + ->addRecipient( + (new MailRecipientTransfer()) + ->setName('{customerName}') + ->setNameTranslationParameters([ + '{customerName}' => 'Spencor Hopkins' + ]), + ) + ->addSender( + (new MailSenderTransfer()) + ->setName('{senderName}') + ->setNameTranslationParameters([ + '{senderName}' => 'Spryker' + ]), + ); + } +} +``` + +{% info_block infoBox "Info" %} +Note `MailSenderTransfer.setName()` and `MailRecipientTransfer.setName()` as well as `MailTransfer.setSubject()` allow setting up the translations. +Besides that `MailSenderTransfer.setNameTranslations()` and `MailRecipientTransfer.setNameTranslations()` are used in order to translate with parameters. +{% endinfo_block %} + +## Set templates + +Usually, you have a `.twig` file which contains the template you want to use for mail. + +Set the template in `MailTransfer` which must be used in your `MailTypeBuilderPlugin` plugin. + +```php +addTemplate( + (new MailTemplateTransfer()) + ->setName(static::MAIL_TEMPLATE_TEXT) + ->setIsHtml(false), + ); + } +} +``` + +The provider determines the template's final look. It can contain plain text or HTML. For example, you can even have a template that generates JSON: + +```twig +{ + customer: "{% raw %}{{{% endraw %} mail.customer.firstName {% raw %}}}{% endraw %} {% raw %}{{{% endraw %} mail.customer.lastName {% raw %}}}{% endraw %}", +} +``` + +In the following example, you have a plain text template with: + +```twig +{% raw %}{{{% endraw %} 'mail.customer.registration.text' | trans {% raw %}}}{% endraw %} +``` + +The templates must be placed within the module's `Presentation` layer—for example, `src/Pyz/Zed/Customer/Presentation/Mail/customer_registration.text.twig`. You can use the same trans filter as used with Yves and Zed templates. + +`TwigRenderer` is the default renderer, but you can add your own renderer by implementing `RendererInterface`. + +We also provide a basic layout file, where you can inject concrete content files into. If you want to build your own layout, you need the following in your template: + +```twig +{% raw %}{%{% endraw %} for template in mail.templates {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if not template.isHtml {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} include "@" ~ template.name with {mail: mail} {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} +``` + +The preceeding template is used for plain text messages, and templates can also be used to generate JSON or query strings like `customer={% raw %}{{{% endraw %} mail.customer.firstName {% raw %}}}{% endraw %}&orderReference={% raw %}{{{% endraw %} mail.order.orderReference {% raw %}}}{% endraw %}`. It's up to your provider to decide what to render. + +For HTML messages, you need to have this in your layout file: + +```twig +{% raw %}{%{% endraw %} for template in mail.templates {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if template.isHtml {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} include "@" ~ template.name with {mail: mail} {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} +``` + +When you complete the steps, to activate the mail functionality, call `MailFacade::handleMail()`. diff --git a/docs/pbc/all/gift-cards/202404.0/install-the-gift-cards-feature.md b/docs/pbc/all/gift-cards/202404.0/install-the-gift-cards-feature.md deleted file mode 100644 index 95683a56d38..00000000000 --- a/docs/pbc/all/gift-cards/202404.0/install-the-gift-cards-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Gift Cards feature -description: The guide walks you through the process of installing the Gift Cards feature in the project. -last_updated: Feb 17 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-integration -originalArticleId: 88dbe1af-1473-45f0-9f49-864c9d153f52 -redirect_from: - - /2021080/docs/gift-cards-feature-integration - - /2021080/docs/en/gift-cards-feature-integration - - /docs/gift-cards-feature-integration - - /docs/en/gift-cards-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/gift-cards-feature-integration.html - - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/install-the-gift-cards-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-gift-cards-feature.md %} diff --git a/docs/pbc/all/gift-cards/202410.0/enable-gift-cards.md b/docs/pbc/all/gift-cards/202410.0/enable-gift-cards.md deleted file mode 100644 index 1bf2bd74c80..00000000000 --- a/docs/pbc/all/gift-cards/202410.0/enable-gift-cards.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Enabling gift cards -description: The guide walks you through the process of installing the Gift Cards feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/enabling-gift-cards -originalArticleId: 825ee2b5-083e-42e3-ae76-738ecb396112 -redirect_from: - - /2021080/docs/enabling-gift-cards - - /2021080/docs/en/enabling-gift-cards - - /docs/enabling-gift-cards - - /docs/en/enabling-gift-cards - - /docs/scos/dev/feature-integration-guides/202311.0/enabling-gift-cards.html - - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/enable-gift-cards.html -related: - - title: Gift Cards feature walkthrough - link: docs/pbc/all/gift-cards/page.version/gift-cards.html ---- - -{% include pbc/all/install-features/{{page.version}}/enable-gift-cards.md %} diff --git a/docs/pbc/all/gift-cards/202410.0/install-the-gift-cards-feature.md b/docs/pbc/all/gift-cards/202410.0/install-the-gift-cards-feature.md deleted file mode 100644 index 95683a56d38..00000000000 --- a/docs/pbc/all/gift-cards/202410.0/install-the-gift-cards-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Gift Cards feature -description: The guide walks you through the process of installing the Gift Cards feature in the project. -last_updated: Feb 17 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-integration -originalArticleId: 88dbe1af-1473-45f0-9f49-864c9d153f52 -redirect_from: - - /2021080/docs/gift-cards-feature-integration - - /2021080/docs/en/gift-cards-feature-integration - - /docs/gift-cards-feature-integration - - /docs/en/gift-cards-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/gift-cards-feature-integration.html - - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/install-the-gift-cards-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-gift-cards-feature.md %} diff --git a/docs/pbc/all/gift-cards/202507.0/install-the-gift-cards-feature.md b/docs/pbc/all/gift-cards/202507.0/install-the-gift-cards-feature.md deleted file mode 100644 index 95683a56d38..00000000000 --- a/docs/pbc/all/gift-cards/202507.0/install-the-gift-cards-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Gift Cards feature -description: The guide walks you through the process of installing the Gift Cards feature in the project. -last_updated: Feb 17 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-integration -originalArticleId: 88dbe1af-1473-45f0-9f49-864c9d153f52 -redirect_from: - - /2021080/docs/gift-cards-feature-integration - - /2021080/docs/en/gift-cards-feature-integration - - /docs/gift-cards-feature-integration - - /docs/en/gift-cards-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/gift-cards-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/gift-cards-feature-integration.html - - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/install-the-gift-cards-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-gift-cards-feature.md %} diff --git a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-gift-cards-data.md b/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-gift-cards-data.md deleted file mode 100644 index ecfe322d04d..00000000000 --- a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-gift-cards-data.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Import Gift Cards data -description: Learn how to import gift card data through file imports within your Spryker Cloud Commerce OS Projects. -last_updated: Jun 16, 2021 -template: data-import-template -originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-import -originalArticleId: dcdc9aa2-7092-46aa-8821-e6853c9c8e54 -redirect_from: - - /2021080/docs/gift-cards-import - - /2021080/docs/en/gift-cards-import - - /docs/gift-cards-import - - /docs/en/gift-cards-import - - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/gift-cards/gift-cards.html - - /docs/pbc/all/gift-cards/202311.0/import-and-export-data/import-of-gift-cards.html - - /docs/pbc/all/gift-cards/202204.0/import-and-export-data/import-gift-cards-data.html ---- - -To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to the Gift Cards PBC: - -- [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html): allows you to load information about the different types of gift cards. -- [gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html): allows you to define the amount of money for each gift card. - -The table below provides details on Gift Cards data importers, their purpose, CSV files, dependencies, and other details. Each data importer contains links to CSV files used to import the corresponding data, including specifications of mandatory and unique fields, dependencies, detailed explanations, recommendations, templates, and content examples. - -| DATA IMPORTER | PURPOSE | CONSOLE COMMAND | FILES | DEPENDENCIES | -| --- | --- | --- | --- |--- | -| Gift Card Abstract Configuration | Imports gift card product configuration information. A Gift Card Product is a regular product in the shop which represents a Gift Card that Customer can buy. The Gift Card Abstract Product configuration represents a type of Gift Cards with a code pattern (for example, "Xmas", "Happy-B", etc.). |`data:import:gift-card-abstract-configuration` | [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html) |[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | -| Gift Card Concrete Configuration | Imports gift card product configuration information. This data is used to configure the amount of money that will be top-up (loaded) in the Gift Card. |`data:import:gift-card-concrete-configuration` |[gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html)| [product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) | diff --git a/docs/pbc/all/gift-cards/202512.0/import-gift-cards-data.md b/docs/pbc/all/gift-cards/202512.0/import-gift-cards-data.md deleted file mode 100644 index 20531c913bc..00000000000 --- a/docs/pbc/all/gift-cards/202512.0/import-gift-cards-data.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Import Gift Cards data -last_updated: Jun 16, 2021 -template: data-import-template -originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-import -originalArticleId: dcdc9aa2-7092-46aa-8821-e6853c9c8e54 -redirect_from: - - /2021080/docs/gift-cards-import - - /2021080/docs/en/gift-cards-import - - /docs/gift-cards-import - - /docs/en/gift-cards-import - - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/gift-cards/gift-cards.html - - /docs/pbc/all/gift-cards/202311.0/import-and-export-data/import-of-gift-cards.html - - /docs/pbc/all/gift-cards/202204.0/import-and-export-data/import-gift-cards-data.html ---- - -To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to the Gift Cards PBC: - -- [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html): allows you to load information about the different types of gift cards. -- [gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html): allows you to define the amount of money for each gift card. - -The table below provides details on Gift Cards data importers, their purpose, CSV files, dependencies, and other details. Each data importer contains links to CSV files used to import the corresponding data, including specifications of mandatory and unique fields, dependencies, detailed explanations, recommendations, templates, and content examples. - -| DATA IMPORTER | PURPOSE | CONSOLE COMMAND | FILES | DEPENDENCIES | -| --- | --- | --- | --- |--- | -| Gift Card Abstract Configuration | Imports gift card product configuration information. A Gift Card Product is a regular product in the shop which represents a Gift Card that Customer can buy. The Gift Card Abstract Product configuration represents a type of Gift Cards with a code pattern (for example, "Xmas", "Happy-B", etc.). |`data:import:gift-card-abstract-configuration` | [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html) |[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | -| Gift Card Concrete Configuration | Imports gift card product configuration information. This data is used to configure the amount of money that will be top-up (loaded) in the Gift Card. |`data:import:gift-card-concrete-configuration` |[gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html)| [product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) | diff --git a/docs/pbc/all/gift-cards/202404.0/enable-gift-cards.md b/docs/pbc/all/gift-cards/202602.0/enable-gift-cards.md similarity index 100% rename from docs/pbc/all/gift-cards/202404.0/enable-gift-cards.md rename to docs/pbc/all/gift-cards/202602.0/enable-gift-cards.md diff --git a/docs/pbc/all/gift-cards/202512.0/gift-cards.md b/docs/pbc/all/gift-cards/202602.0/gift-cards.md similarity index 99% rename from docs/pbc/all/gift-cards/202512.0/gift-cards.md rename to docs/pbc/all/gift-cards/202602.0/gift-cards.md index ac6b0105624..391deee60e7 100644 --- a/docs/pbc/all/gift-cards/202512.0/gift-cards.md +++ b/docs/pbc/all/gift-cards/202602.0/gift-cards.md @@ -6,9 +6,10 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-overview originalArticleId: 942e081b-6312-483d-bc93-761af98f1f44 redirect_from: + - /docs/pbc/all/gift-cards/202512.0/gift-cards.html - /docs/scos/user/features/202009.0/gift-cards-feature-overview.html - /docs/scos/user/features/202200.0/gift-cards-feature-overview.html - - /docs/scos/user/features/202311.0/gift-cards-feature-overview.html + - /docs/scos/user/features/202311.0/gift-cards-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/gift-cards-feature-walkthrough.html - /docs/pbc/all/gift-cards/202204.0/gift-cards.html --- diff --git a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md similarity index 96% rename from docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md rename to docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md index 710da1e2243..15bb65424e3 100644 --- a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md +++ b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-gift-card-abstract-configurationcsv originalArticleId: c11ce919-bf0c-4dc1-bcd5-65f0c477a8de redirect_from: + - /docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-abstract-configuration.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-abstract-configuration.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-abstract-configuration.csv.html diff --git a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md similarity index 96% rename from docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md rename to docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md index 2361e77e592..f244405870a 100644 --- a/docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md +++ b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-gift-card-concrete-configurationcsv originalArticleId: 6346beb6-6aec-440e-a458-dbf86e05e33d redirect_from: + - /docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-concrete-configuration.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-concrete-configuration.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/special-product-types/gift-cards/file-details-gift-card-concrete-configuration.csv.html diff --git a/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-gift-cards-data.md b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-gift-cards-data.md new file mode 100644 index 00000000000..fcd97ce345d --- /dev/null +++ b/docs/pbc/all/gift-cards/202602.0/import-and-export-data/import-gift-cards-data.md @@ -0,0 +1,29 @@ +--- +title: Import Gift Cards data +description: Learn how to import gift card data through file imports within your Spryker Cloud Commerce OS Projects. +last_updated: Jun 16, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-import +originalArticleId: dcdc9aa2-7092-46aa-8821-e6853c9c8e54 +redirect_from: + - /docs/pbc/all/gift-cards/202512.0/import-and-export-data/import-gift-cards-data.html + - /2021080/docs/gift-cards-import + - /2021080/docs/en/gift-cards-import + - /docs/gift-cards-import + - /docs/en/gift-cards-import + - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/gift-cards/gift-cards.html + - /docs/pbc/all/gift-cards/202311.0/import-and-export-data/import-of-gift-cards.html + - /docs/pbc/all/gift-cards/202204.0/import-and-export-data/import-gift-cards-data.html +--- + +To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to the Gift Cards PBC: + +- [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html): allows you to load information about the different types of gift cards. +- [gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html): allows you to define the amount of money for each gift card. + +The table below provides details on Gift Cards data importers, their purpose, CSV files, dependencies, and other details. Each data importer contains links to CSV files used to import the corresponding data, including specifications of mandatory and unique fields, dependencies, detailed explanations, recommendations, templates, and content examples. + +| DATA IMPORTER | PURPOSE | CONSOLE COMMAND | FILES | DEPENDENCIES | +| --- | --- | --- | --- |--- | +| Gift Card Abstract Configuration | Imports gift card product configuration information. A Gift Card Product is a regular product in the shop which represents a Gift Card that Customer can buy. The Gift Card Abstract Product configuration represents a type of Gift Cards with a code pattern (for example, "Xmas", "Happy-B", etc.). |`data:import:gift-card-abstract-configuration` | [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html) |[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | +| Gift Card Concrete Configuration | Imports gift card product configuration information. This data is used to configure the amount of money that will be top-up (loaded) in the Gift Card. |`data:import:gift-card-concrete-configuration` |[gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html)| [product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) | diff --git a/docs/pbc/all/gift-cards/202512.0/import-file-details-gift-card-abstract-configuration.csv.md b/docs/pbc/all/gift-cards/202602.0/import-file-details-gift-card-abstract-configuration.csv.md similarity index 100% rename from docs/pbc/all/gift-cards/202512.0/import-file-details-gift-card-abstract-configuration.csv.md rename to docs/pbc/all/gift-cards/202602.0/import-file-details-gift-card-abstract-configuration.csv.md diff --git a/docs/pbc/all/gift-cards/202512.0/import-file-details-gift-card-concrete-configuration.csv.md b/docs/pbc/all/gift-cards/202602.0/import-file-details-gift-card-concrete-configuration.csv.md similarity index 100% rename from docs/pbc/all/gift-cards/202512.0/import-file-details-gift-card-concrete-configuration.csv.md rename to docs/pbc/all/gift-cards/202602.0/import-file-details-gift-card-concrete-configuration.csv.md diff --git a/docs/pbc/all/gift-cards/202602.0/import-gift-cards-data.md b/docs/pbc/all/gift-cards/202602.0/import-gift-cards-data.md new file mode 100644 index 00000000000..9fce6f03ee5 --- /dev/null +++ b/docs/pbc/all/gift-cards/202602.0/import-gift-cards-data.md @@ -0,0 +1,27 @@ +--- +title: Import Gift Cards data +last_updated: Jun 16, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-import +originalArticleId: dcdc9aa2-7092-46aa-8821-e6853c9c8e54 +redirect_from: + - /2021080/docs/gift-cards-import + - /2021080/docs/en/gift-cards-import + - /docs/gift-cards-import + - /docs/en/gift-cards-import + - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/gift-cards/gift-cards.html + - /docs/pbc/all/gift-cards/202311.0/import-and-export-data/import-of-gift-cards.html + - /docs/pbc/all/gift-cards/202204.0/import-and-export-data/import-gift-cards-data.html +--- + +To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to the Gift Cards PBC: + +- [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html): allows you to load information about the different types of gift cards. +- [gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html): allows you to define the amount of money for each gift card. + +The table below provides details on Gift Cards data importers, their purpose, CSV files, dependencies, and other details. Each data importer contains links to CSV files used to import the corresponding data, including specifications of mandatory and unique fields, dependencies, detailed explanations, recommendations, templates, and content examples. + +| DATA IMPORTER | PURPOSE | CONSOLE COMMAND | FILES | DEPENDENCIES | +| --- | --- | --- | --- |--- | +| Gift Card Abstract Configuration | Imports gift card product configuration information. A Gift Card Product is a regular product in the shop which represents a Gift Card that Customer can buy. The Gift Card Abstract Product configuration represents a type of Gift Cards with a code pattern (for example, "Xmas", "Happy-B", etc.). |`data:import:gift-card-abstract-configuration` | [gift_card_abstract_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-abstract-configuration.csv.html) |[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | +| Gift Card Concrete Configuration | Imports gift card product configuration information. This data is used to configure the amount of money that will be top-up (loaded) in the Gift Card. |`data:import:gift-card-concrete-configuration` |[gift_card_concrete_configuration.csv](/docs/pbc/all/gift-cards/{{page.version}}/import-and-export-data/import-file-details-gift-card-concrete-configuration.csv.html)| [product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) | diff --git a/docs/pbc/all/gift-cards/202410.0/install-and-upgrade/enable-gift-cards.md b/docs/pbc/all/gift-cards/202602.0/install-and-upgrade/enable-gift-cards.md similarity index 100% rename from docs/pbc/all/gift-cards/202410.0/install-and-upgrade/enable-gift-cards.md rename to docs/pbc/all/gift-cards/202602.0/install-and-upgrade/enable-gift-cards.md diff --git a/docs/pbc/all/gift-cards/202602.0/install-and-upgrade/install-the-gift-cards-feature.md b/docs/pbc/all/gift-cards/202602.0/install-and-upgrade/install-the-gift-cards-feature.md new file mode 100644 index 00000000000..d04a037ac5f --- /dev/null +++ b/docs/pbc/all/gift-cards/202602.0/install-and-upgrade/install-the-gift-cards-feature.md @@ -0,0 +1,20 @@ +--- +title: Install the Gift Cards feature +description: Learn how to install the Spryker Gift Card feature within your Spryker Cloud Commerce OS project. +last_updated: Feb 17 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-integration +originalArticleId: 88dbe1af-1473-45f0-9f49-864c9d153f52 +redirect_from: + - /2021080/docs/gift-cards-feature-integration + - /2021080/docs/en/gift-cards-feature-integration + - /docs/gift-cards-feature-integration + - /docs/en/gift-cards-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/gift-cards-feature-integration.html + - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/install-the-gift-cards-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-gift-cards-feature.md %} diff --git a/docs/pbc/all/gift-cards/202602.0/install-the-gift-cards-feature.md b/docs/pbc/all/gift-cards/202602.0/install-the-gift-cards-feature.md new file mode 100644 index 00000000000..54e16c26d4e --- /dev/null +++ b/docs/pbc/all/gift-cards/202602.0/install-the-gift-cards-feature.md @@ -0,0 +1,20 @@ +--- +title: Install the Gift Cards feature +description: The guide walks you through the process of installing the Gift Cards feature in the project. +last_updated: Feb 17 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/gift-cards-feature-integration +originalArticleId: 88dbe1af-1473-45f0-9f49-864c9d153f52 +redirect_from: + - /2021080/docs/gift-cards-feature-integration + - /2021080/docs/en/gift-cards-feature-integration + - /docs/gift-cards-feature-integration + - /docs/en/gift-cards-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/gift-cards-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/gift-cards-feature-integration.html + - /docs/pbc/all/gift-cards/202204.0/install-and-upgrade/install-the-gift-cards-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-gift-cards-feature.md %} diff --git a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md similarity index 98% rename from docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md rename to docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md index 0dd7328b4d7..d6ded533453 100644 --- a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md +++ b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-gift-cards-of-guest-users originalArticleId: 59818732-fa5a-43df-acd9-3d4ea91ee1ac redirect_from: + - /docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-guest-users.html - /docs/scos/dev/glue-api-guides/201811.0/managing-carts/guest-carts/managing-gift-cards-of-guest-users.html - /docs/scos/dev/glue-api-guides/201903.0/managing-carts/guest-carts/managing-gift-cards-of-guest-users.html - /docs/scos/dev/glue-api-guides/201907.0/managing-carts/guest-carts/managing-gift-cards-of-guest-users.html diff --git a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md similarity index 98% rename from docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md rename to docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md index 6763061546f..1e7a2a04aa5 100644 --- a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md +++ b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-gift-cards-of-registered-users originalArticleId: 8f557adb-ea3b-498c-872e-b2177d6202ed redirect_from: + - /docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html - /docs/scos/dev/glue-api-guides/201811.0/managing-carts/carts-of-registered-users/managing-gift-cards-of-registered-users.html - /docs/scos/dev/glue-api-guides/201903.0/managing-carts/carts-of-registered-users/managing-gift-cards-of-registered-users.html - /docs/scos/dev/glue-api-guides/201907.0/managing-carts/carts-of-registered-users/managing-gift-cards-of-registered-users.html diff --git a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md similarity index 96% rename from docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md rename to docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md index 711808dc396..8bd505cda22 100644 --- a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md +++ b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.md @@ -4,10 +4,10 @@ description: Learn how to retrieve Spryker gift cards in carts of registered use last_updated: Aug 22, 2022 template: glue-api-storefront-guide-template redirect_from: -- /docs/pbc/all/gift-cards/202311.0/manage-using-glue-api/retrieve-gift-cards-in-carts-of-registered-users.html -- /docs/pbc/all/gift-cards/202204.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.html + - /docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-carts-of-registered-users.html + - /docs/pbc/all/gift-cards/202311.0/manage-using-glue-api/retrieve-gift-cards-in-carts-of-registered-users.html + - /docs/pbc/all/gift-cards/202204.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.html --- - This document describes how to retrieve gift cards in carts of registered users using Glue API. To retrieve full information about carts of registered users, see [Manage carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html). ## Installation diff --git a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md similarity index 96% rename from docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md rename to docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md index 3085d01c1a6..2902aa8f366 100644 --- a/docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md +++ b/docs/pbc/all/gift-cards/202602.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.md @@ -4,9 +4,9 @@ description: Learn how you can retrieve gift cards in guest carts by using the S last_updated: Aug 12, 2022 template: glue-api-storefront-guide-template redirect_from: -- /docs/pbc/all/gift-cards/202311.0/manage-using-glue-api/retrieve-gift-cards-in-guest-carts.html + - /docs/pbc/all/gift-cards/202507.0/manage-using-glue-api/glue-api-retrieve-gift-cards-in-guest-carts.html + - /docs/pbc/all/gift-cards/202311.0/manage-using-glue-api/retrieve-gift-cards-in-guest-carts.html --- - This document describes how to retrieve gift cards in guest carts using Glue API. To retrieve full information about guest carts, see [Manage guest carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-carts.html). ## Installation diff --git a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-microsoft-azure-active-directory.md b/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-microsoft-azure-active-directory.md deleted file mode 100644 index 37651541d01..00000000000 --- a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-microsoft-azure-active-directory.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install Microsoft Azure Active Directory -description: Learn how to integrate Microsoft Azure Active Directory into a Spryker project. -last_updated: Jun 17, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/microsoft-azure-active-directory -originalArticleId: 11224ada-6cfc-4217-94e9-085e64755ad6 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202108.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201811.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201903.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201907.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/202005.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/202311.0/microsoft-azure-active-directory.html - - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-microsoft-azure-active-directory.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-microsoft-azure-active-directory.md %} diff --git a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md b/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md deleted file mode 100644 index d09856d64a9..00000000000 --- a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Spryker Core Back Office feature -description: Learn how you can integrate the Spryker Core Back Office feature into a Spryker project. -last_updated: Feb 8, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-back-office-feature-integration -originalArticleId: 53f711aa-6007-4fe2-8baf-ad91c72f33f4 -redirect_from: - - /docs/back-office-feature-integration - - /docs/en/back-office-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/spryker-core-back-office-feature-integration.html - - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-microsoft-azure-active-directory.md b/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-microsoft-azure-active-directory.md deleted file mode 100644 index 37651541d01..00000000000 --- a/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-microsoft-azure-active-directory.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install Microsoft Azure Active Directory -description: Learn how to integrate Microsoft Azure Active Directory into a Spryker project. -last_updated: Jun 17, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/microsoft-azure-active-directory -originalArticleId: 11224ada-6cfc-4217-94e9-085e64755ad6 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202108.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201811.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201903.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/201907.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/202005.0/microsoft-azure-active-directory.html - - /docs/scos/dev/feature-integration-guides/202311.0/microsoft-azure-active-directory.html - - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-microsoft-azure-active-directory.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-microsoft-azure-active-directory.md %} diff --git a/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md b/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md deleted file mode 100644 index d09856d64a9..00000000000 --- a/docs/pbc/all/identity-access-management/202507.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Spryker Core Back Office feature -description: Learn how you can integrate the Spryker Core Back Office feature into a Spryker project. -last_updated: Feb 8, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-back-office-feature-integration -originalArticleId: 53f711aa-6007-4fe2-8baf-ad91c72f33f4 -redirect_from: - - /docs/back-office-feature-integration - - /docs/en/back-office-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/spryker-core-back-office-feature-integration.html - - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md b/docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md deleted file mode 100644 index d09856d64a9..00000000000 --- a/docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Spryker Core Back Office feature -description: Learn how you can integrate the Spryker Core Back Office feature into a Spryker project. -last_updated: Feb 8, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-back-office-feature-integration -originalArticleId: 53f711aa-6007-4fe2-8baf-ad91c72f33f4 -redirect_from: - - /docs/back-office-feature-integration - - /docs/en/back-office-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-back-office-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/spryker-core-back-office-feature-integration.html - - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/identity-access-management/202512.0/configure-basic-htaccess-authentication.md b/docs/pbc/all/identity-access-management/202602.0/configure-basic-htaccess-authentication.md similarity index 100% rename from docs/pbc/all/identity-access-management/202512.0/configure-basic-htaccess-authentication.md rename to docs/pbc/all/identity-access-management/202602.0/configure-basic-htaccess-authentication.md diff --git a/docs/pbc/all/identity-access-management/202602.0/identity-access-management.md b/docs/pbc/all/identity-access-management/202602.0/identity-access-management.md new file mode 100644 index 00000000000..07388eaa8b5 --- /dev/null +++ b/docs/pbc/all/identity-access-management/202602.0/identity-access-management.md @@ -0,0 +1,97 @@ +--- +title: Identity Access Management +description: Learn all about the Spryker Identity Access Management capability and how to create and manage accounts within your Spryker project. +last_updated: Oct 2, 2022 +template: concept-topic-template +redirect_from: + - /docs/scos/user/back-office-user-guides/201811.0/logging-in-to-the-back-office.html + - /docs/scos/user/back-office-user-guides/201903.0/logging-in-to-the-back-office.html + - /docs/scos/user/back-office-user-guides/201907.0/logging-in-to-the-back-office.html + - /docs/scos/user/back-office-user-guides/202005.0/logging-in-to-the-back-office.html + - /docs/scos/user/back-office-user-guides/202204.0/logging-in-to-the-back-office.html + - /docs/pbc/all/identity-access-management/202204.0/identity-access-management.html +--- + +The Identity Access Management capability enables all types of users in a Spryker shop to create and manage accounts. Different levels of security let users manage the access of other users. + +## Back Office authentication + +Back Office supports login via two types of accounts: + +- Back Office account. +- Account of a third-party service that is configured as a single sign-on. + +### Login with a Back Office account + +Only an existing Back Office user with sufficient permissions or a developer can create Back Office accounts. That is, if you want to onboard a new Back Office user, you need to create an account for them. For instructions on creating accounts in the Back Office, see [Create users](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html). + + +To log in, on the Back Office login page, a user enters the email address and password of their account. If the credentials are correct and their account is active at that time, they are logged in. + +If a user does not remember their password, they can reset it using the form available on the login page. + +### Login with a single sign-on + +Your project can have a single sign-on(SSO) login configured for the Back Office. SSO lets users log into the Back Office with accounts of a third-party service. + +The feature is shipped with an exemplary ECO module that supports SSO authentication via Microsoft Azure Active Directory. With the existing infrastructure, you can develop your own ECO modules for the identity managers you need. SSO uses the [OpenID](https://en.wikipedia.org/wiki/OpenID) protocol for authentication. + +To log in with an SSO, on the Back Office login page, users click **Login with {Third-party service name}**. This opens the sign-in page of the configured service. Users sign in with their accounts and get redirected to the Back Office. + +If a user chooses to log in using a third party, they are redirected to the OAuth provider's sign-in page—for example, Microsoft Azure. If the user successfully signs into the third-party service, the check is made if the user exists in the Spryker database. If the user exists in the database and is active, the user is logged in. + +The following sections describe different ways of handling users that have access to your SSO service, but don't have a Back Office account. + +### SSO authentication strategies + +Depending on your access and security requirements, you can have one of the following strategies implemented for SSO authentication. + + +#### Registration is required only with the SSO service + +If a user logs in with an SSO but does not have a Back Office account, the following happens: +- Based on the third-party system's user data, such as first name, last name, and email, a Back Office account is created. +- The user is assigned to the default user group. +- The user is logged into the Back Office. + +The login process looks like this: + +![image](https://confluence-connect.gliffy.net/embed/image/5b0f6ab5-d4d5-4b53-b82a-d73bec9c81ea.png?utm_medium=live&utm_source=custom) + +#### Registration is required with the SSO service and with Spryker + +If a user logs in with an SSO but does not have a Back Office account, the user is not logged in. To be able to log in, a user must have a Back Office account registered using the email address used for their account with the SSO service. Usually, this strategy is used when not all the users that have access to the SSO service need access to the Back Office. + + +![image](https://confluence-connect.gliffy.net/embed/image/5b0f6ab5-d4d5-4b53-b82a-d73bec9c81ea.png?utm_medium=live&utm_source=custom) + +## Glue API authentication + +For details about Glue API authentication, see [Glue API authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html) + +## Current constraints + +The feature has the following functional constraint: + +Each of the identity managers is an ECO module that must be developed separately. After the module development, the identity manager's roles and permissions must be mapped to the roles and permissions in Spryker. The mapping is always implemented at the project level. + + + +## Related Developer documents + +|INSTALLATION GUIDES | GLUE API GUIDES | +| - | - | +| [Install the Spryker Core Back Office feature](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | [Authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html) | +| [Install Microsoft Azure Active Directory](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-microsoft-azure-active-directory.html) | [Authentication and authorization](/docs/integrations/spryker-glue-api/authenticating-and-authorization/authenticating-and-authorization.html) | +| [Install the Customer Access Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-access-glue-api.html) | [Create customers](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-create-customers.html) | +| | [Confirm customer registration](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-confirm-customer-registration.html) | +| | [Manage customer passwords](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-customer-passwords.html) | +| | [Authenticate as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html) | +| | [Manage customer authentication tokens via OAuth 2.0](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html) | +| | [Manage customer authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html) | +| | [Authenticate as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html) | +| | [Authenticating as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html) | +| | [Manage company user authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html) | +| | [Authenticate as an agent assist](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html) | +| | [Managing agent assist authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html) | +| | [Delete expired refresh tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.html) | diff --git a/docs/pbc/all/identity-access-management/202404.0/install-and-upgrade/install-microsoft-azure-active-directory.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-microsoft-azure-active-directory.md similarity index 100% rename from docs/pbc/all/identity-access-management/202404.0/install-and-upgrade/install-microsoft-azure-active-directory.md rename to docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-microsoft-azure-active-directory.md diff --git a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-customer-access-glue-api.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-customer-access-glue-api.md similarity index 100% rename from docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-customer-access-glue-api.md rename to docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-customer-access-glue-api.md diff --git a/docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-customer-account-management-glue-api.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-customer-account-management-glue-api.md similarity index 100% rename from docs/pbc/all/identity-access-management/202410.0/install-and-upgrade/install-the-customer-account-management-glue-api.md rename to docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-customer-account-management-glue-api.md diff --git a/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md new file mode 100644 index 00000000000..1368882a283 --- /dev/null +++ b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/install-the-spryker-core-back-office-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Spryker Core Back Office feature +description: Learn how you can integrate the Spryker Core Back Office feature into a Spryker project. +last_updated: Feb 8, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-back-office-feature-integration +originalArticleId: 53f711aa-6007-4fe2-8baf-ad91c72f33f4 +redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html + - /docs/back-office-feature-integration + - /docs/en/back-office-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-back-office-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-back-office-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-back-office-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/spryker-core-back-office-feature-integration.html + - /docs/pbc/all/identity-access-management/202204.0/install-and-upgrade/install-the-spryker-core-back-office-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-back-office-feature.md %} diff --git a/docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/upgrade-the-oauth-module.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/upgrade-the-oauth-module.md similarity index 100% rename from docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/upgrade-the-oauth-module.md rename to docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/upgrade-the-oauth-module.md diff --git a/docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/upgrade-the-oauthcompanyuser-module.md b/docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/upgrade-the-oauthcompanyuser-module.md similarity index 100% rename from docs/pbc/all/identity-access-management/202512.0/install-and-upgrade/upgrade-the-oauthcompanyuser-module.md rename to docs/pbc/all/identity-access-management/202602.0/install-and-upgrade/upgrade-the-oauthcompanyuser-module.md diff --git a/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.md new file mode 100644 index 00000000000..0b6d12069db --- /dev/null +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.md @@ -0,0 +1,74 @@ +--- +title: "Glue API: Authenticate as a Back Office user" +description: Learn how to authenticate as a Back Office user using the Spryker Glue API for your Spryker users +last_updated: Nov 13, 2023 +template: glue-api-storefront-guide-template +--- + +This endpoint allows authenticating as a Back Office user. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Customer Account Management Glue API](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html). + +## Authenticate as a Back Office user + +--- +`POST` **/token** + +--- + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| Content-Type | application/x-www-form-urlencoded | ✓ | `x-www-form-urlencoded` is a URL encoded form. This is the default value if the encrypted attribute is not set to anything. The keys and values are encoded in key-value tuples separated by `&`, with a `=` between the key and the value. Non-alphanumeric characters in both keys and values are percent encoded. | + +
      Request sample: authenticate as a Back Office user + +| REQUEST BODY KEY | VALUE | +|-|-| +| grant_type | password | +| username | sonia@spryker.com | +| password | change123 | + +
      + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +|-|-|-|-| +| grant_type | password | ✓ | Method through which the application can gain Access Tokens and by which you grant limited access to the resources to another entity without exposing credentials. | +| username | String | ✓ | Back Office user's username. You define it when [creating](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html) or [editing users](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/edit-users.html). | +| password | String | ✓ | Back Office user's password. You define it when [creating](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html) or [editing users](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/edit-users.html). | + +### Response + +
      Response sample: authenticate as a Back Office user + +```json +{ + "token_type": "Bearer", + "expires_in": 28800, + "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJmcm9udGVuZCIsImp0aSI6IjMwZWM0NDEwMDBhYzM3NmJmZTU2NGVjNjVhODdjYWY0ODUzZGMwYjZjOGM2MzRlZTk2ODlmOTZkMzZmODIzMzgzNDM1MWYzMTM3MzZiYTYyIiwiaWF0IjoxNjk5MzQ3ODM0LjQ2MTU5MDEsIm5iZiI6MTY5OTM0NzgzNC40NjE1OTI5LCJleHAiOjE2OTkzNzY2MzQuNDQyNjc2MSwic3ViIjoie1widXNlcl9yZWZlcmVuY2VcIjpudWxsLFwiaWRfdXNlclwiOjQsXCJ1dWlkXCI6XCIwZDc0M2NjMy1hNzcyLTUxNDUtOTcxZS1kNDAxOGVlN2E0ODlcIn0iLCJzY29wZXMiOlsidXNlciJdfQ.o96j8nuU8EPf674f449KZxGAQi3TGL17U45DNqiJUZQJXpABmJG-qUug4HdlFLnzIMMHLUKIdsjF4Dd2ArOJ_1o6uaxtPB_z_4Kau8bUiittTye1y0wJ3YjCy1VbQIKynIJ7E0_VCOv1Ok0gRiYJC5hfwiHOhXdIbkoG1d9CWWE542nAm1xH__QDYlrwh57RJBLAXB7HCF7EGobQkYiiQXnJ4-qPkSHGL_sXuHQgnkXD7qLpLILv0TwCe-ZrOM1RwI53AFyKrZDU2cJQdFNTF3zI6hsadZOTcvRVk8wS95G3KKrAuURHi46w13oLqFL3-V1lq_JnjCZp3Uu68xGtiA", + "refresh_token": "def5020074bed6be1f1310453251c9f9cffff6ed531b7d1ea31dbc7e5ef072a7f56a54fbda6a6b2126d46b9a8b9b4ae649ca1502cc0f01fbbcfb95ab79299a9b6fe310966fdcb58b8688b424b95b123503fdc388d318fad63f1e86a184321f097b4c4e51648952448bcee315df2cac018089591c31348b5e107e8d37e8256afbd142da1011b9cf390715c11f5dfeff0b106bd5bd3df1a142c8c72fcafc5b682f2fb110e03a387c1041a21e3ee15165dff52b159fc6ef57c50b2c3b39381d604648c413d7ca6845f5ae62fb649caabd6f5f87da2535406b91c6f042fc98989289f9f0ab7b7be33597418149a394aea31194be458db2877c22b7eb48f190f351e7bbaee7563f0a5e16cc5bb1da9449c713771c47d164e105a2d27b378824fa322c5038df8e64049eb5bdbd28e8994e59e4c05da788fb064a081d78e14cb360be1fe76621f2da11d85255031f59f5859033b5029c53ac647f61c132fa5f3e04853d126d58f5bd115aadc9f3d36543167f285c115e7593212b7d85816ecf3749e3d19f17d8f86f999fca3e5a9dbea3a6026a321f52309b2068f1487cf11212f0515f5399906fbc167dda9ae3325b500f150397c7b07858568decc7668244bc59cd439fc8e7255f970c20" +} +``` + +
      + +| ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-| +| token_type | String | Type of the authentication token. Set this type when sending a request with the token. | +| access_token | String | Authentication token used to send requests to the protected resources available for this Back Office user. | +| expires_in | Integer | Time in seconds in which the `access_token` token expires. | +| refresh_token | String | Authentication token used to refresh `access_token`. | + + +## Possible errors + +| ERROR NAME | DESCRIPTION | +|-|-| +| invalid_grant | The provided user credentials are incorrect or invalid. | +| unsupported_grant_type | The provided grant type is not supported. The grant type must be `password`. | + + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md similarity index 98% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md index 468dc929d3d..98f99713391 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/authenticating-as-a-company-user originalArticleId: 90ca8812-0b3c-473d-bcd7-b12805da2070 redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html - /docs/scos/dev/glue-api-guides/201811.0/managing-b2b-account/authenticating-as-a-company-user.html - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/authenticating-as-a-company-user.html - /docs/scos/dev/glue-api-guides/202200.0/managing-b2b-account/authenticating-as-a-company-user.html diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md similarity index 99% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md index d0ec41029c0..5027379542d 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/authenticating-as-a-customer originalArticleId: 4d61554f-dce0-40a2-9091-2db810bcf9a2 redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-a-customer.html - /docs/scos/dev/glue-api-guides/201903.0/managing-customers/authenticating-as-a-customer.html - /docs/scos/dev/glue-api-guides/201907.0/managing-customers/authenticating-as-a-customer.html - /docs/scos/dev/glue-api-guides/202200.0/managing-customers/authenticating-as-a-customer.html diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md similarity index 96% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md index d44da2d6622..78111543244 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.md @@ -6,7 +6,8 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/authenticating-as-an-agent-assist originalArticleId: 33952f89-fed4-4e33-95f4-79e969752e9d redirect_from: -- /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html + - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html related: - title: Agent Assist feature overview link: docs/pbc/all/user-management/page.version/base-shop/agent-assist-feature-overview.html @@ -17,7 +18,6 @@ related: - title: Search by customers as an agent assist link: docs/pbc/all/user-management/page.version/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html --- - Log into the Storefront as an [agent assist](/docs/pbc/all/user-management/{{page.version}}/base-shop/agent-assist-feature-overview.html) to help customers by performing actions on their behalf. After you've logged in, you can search by customers and impersonate them to perform any action available to them. ## Installation diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-confirm-customer-registration.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-confirm-customer-registration.md similarity index 97% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-confirm-customer-registration.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-confirm-customer-registration.md index 6a14bd26e5c..df25f745e0b 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-confirm-customer-registration.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-confirm-customer-registration.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/confirming-customer-registration originalArticleId: ce75d090-7be3-4d28-98a2-4ea49eb0d00c redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-confirm-customer-registration.html - /docs/scos/dev/glue-api-guides/201811.0/managing-customers/confirming-customer-registration.html - /docs/scos/dev/glue-api-guides/201903.0/managing-customers/confirming-customer-registration.html - /docs/scos/dev/glue-api-guides/201907.0/managing-customers/confirming-customer-registration.html diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-create-customers.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-create-customers.md similarity index 95% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-create-customers.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-create-customers.md index f33dc5765af..9cfb1f196be 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-create-customers.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-create-customers.md @@ -5,7 +5,8 @@ last_updated: Nov 2, 2022 template: glue-api-storefront-guide-template originalArticleId: 246e73d7-562f-414f-bbc0-d102ef54ff5c redirect_from: -- /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-create-customers.html + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-create-customers.html + - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-create-customers.html related: - title: Searching by company users link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html @@ -20,9 +21,6 @@ related: - title: Managing customer passwords link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-customer-passwords.html --- - - - ## Installation For details on the modules that provide the API functionality and how to install them, see [Glue API: Customer Access Feature Integration](/docs/pbc/all/identity-access-management/{{page.version}}/install-and-upgrade/install-the-customer-account-management-glue-api.html). diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md similarity index 94% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md index 7d016fc4f61..3efb3607f8c 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/deleting-expired-refresh-tokens originalArticleId: acf43e94-6fa4-46dd-8f39-b971e5f6aa04 redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.html - /docs/scos/dev/glue-api-guides/202204.0/deleting-expired-refresh-tokens.html - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-delete-expired-refresh-tokens.html related: diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md similarity index 97% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md index 32122dad8c0..74972ee0bd0 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.md @@ -6,7 +6,8 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-agent-assist-authentication-tokens originalArticleId: a3ef0b2b-9ad0-4970-9f9f-bf5f2d975c65 redirect_from: -- /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html + - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html related: - title: Agent Assist feature overview link: docs/pbc/all/user-management/page.version/base-shop/agent-assist-feature-overview.html @@ -17,7 +18,6 @@ related: - title: Search by customers as an agent assist link: docs/pbc/all/user-management/page.version/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html --- - This endpoint allows to refresh an agent assist access token or revoke a refresh token. diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md similarity index 98% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md index e8851f6bc3f..ec42f57cdf2 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-company-user-authentication-tokens originalArticleId: 93de3785-709e-48d2-a1f5-d5edf0e4bc93 redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-company-user-authentication-tokens.html - /docs/scos/dev/glue-api-guides/201811.0/managing-b2b-account/managing-company-user-authentication-tokens.html - /docs/scos/dev/glue-api-guides/201903.0/managing-b2b-account/managing-company-user-authentication-tokens.html - /docs/scos/dev/glue-api-guides/201907.0/managing-b2b-account/managing-company-user-authentication-tokens.html diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md similarity index 98% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md index af9b53b5ef1..69c4cb159bf 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.md @@ -6,7 +6,8 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-authentication-tokens-via-oauth-20 originalArticleId: 4fe6c88f-3879-4f9f-bb91-c6a867d120fa redirect_from: -- /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html + - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens-via-oauth-2.0.html related: - title: Searching by company users link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/company-account/glue-api-search-by-company-users.html @@ -27,7 +28,6 @@ related: - title: Retrieving customer orders link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html --- - This endpoint allows authenticating as a customer and refreshing customer authentication tokens via OAuth 2.0. ## Installation diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md similarity index 99% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md index 58e93ac895b..a3bc4e3256b 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-authentication-tokens originalArticleId: a0374f0f-170f-446e-aadd-32dbe7c1526a redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html - /docs/scos/dev/glue-api-guides/201907.0/managing-customers/managing-customer-authentication-tokens.html - /docs/scos/dev/glue-api-guides/202005.0/managing-customers/managing-customer-authentication-tokens.html - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-customer-authentication-tokens.html diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-passwords.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-passwords.md similarity index 98% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-passwords.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-passwords.md index fb17479c989..52066bcca28 100644 --- a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-passwords.md +++ b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-manage-customer-passwords.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-customer-passwords originalArticleId: 51bec82b-e9f6-4c92-a87d-4f609d8176e8 redirect_from: + - /docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-manage-customer-passwords.html - /docs/scos/dev/glue-api-guides/202005.0/managing-customers/managing-customer-passwords.html - /docs/pbc/all/identity-access-management/202204.0/manage-using-glue-api/glue-api-manage-customer-passwords.html related: diff --git a/docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-retrieve-protected-resources.md b/docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-retrieve-protected-resources.md similarity index 100% rename from docs/pbc/all/identity-access-management/202512.0/manage-using-glue-api/glue-api-retrieve-protected-resources.md rename to docs/pbc/all/identity-access-management/202602.0/manage-using-glue-api/glue-api-retrieve-protected-resources.md diff --git a/docs/pbc/all/merchant-management/202404.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md b/docs/pbc/all/merchant-management/202404.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md deleted file mode 100644 index ac25a2b917c..00000000000 --- a/docs/pbc/all/merchant-management/202404.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Merchant Product Restrictions feature -description: Merchant Product Restrictions allows setting access to particular products. This guide describes the process of integrating the feature into a project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-product-restrictions-feature-integration -originalArticleId: e9b57fe0-4e95-4757-b9bd-5a7850138616 -redirect_from: - - /2021080/docs/merchant-product-restrictions-feature-integration - - /2021080/docs/en/merchant-product-restrictions-feature-integration - - /docs/merchant-product-restrictions-feature-integration - - /docs/en/merchant-product-restrictions-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-product-restrictions-feature-integration.html -related: - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Product Lists feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html - - title: Install the Prices feature - link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html - - title: Install the Product Images + Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-product-restrictions-feature.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md b/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md deleted file mode 100644 index 6d25b141bb4..00000000000 --- a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Opening Hours feature -last_updated: Mar 31, 2021 -description: This document describes how to integrate the Merchant Portal Core feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-opening-hours-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-opening-hours-feature.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md deleted file mode 100644 index 3ca6572f68f..00000000000 --- a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Merchant feature -last_updated: Jul 05, 2021 -description: This document describes the process how to integrate the Marketplace Merchant into the Spryker Merchant Portal. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md deleted file mode 100644 index 797f91962ac..00000000000 --- a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product feature -last_updated: Jan 05, 2021 -description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-feature-integration.html -related: - - title: Marketplace Product feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-feature.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md b/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md deleted file mode 100644 index b663800bf29..00000000000 --- a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Install the Marketplace Merchant Glue API" -description: This document describes the process how to integrate the Marketplace Merchant Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-merchant-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-merchant-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md deleted file mode 100644 index 2a1669af31f..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Merchant Contracts feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-b2b-contracts-feature-integration -originalArticleId: 78cceb48-e5e8-45b6-b515-f6622788fd63 -redirect_from: - - /2021080/docs/merchant-b2b-contracts-feature-integration - - /2021080/docs/en/merchant-b2b-contracts-feature-integration - - /docs/merchant-b2b-contracts-feature-integration - - /docs/en/merchant-b2b-contracts-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-b2b-contracts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-b2b-contracts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md b/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md deleted file mode 100644 index ac25a2b917c..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Merchant Product Restrictions feature -description: Merchant Product Restrictions allows setting access to particular products. This guide describes the process of integrating the feature into a project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-product-restrictions-feature-integration -originalArticleId: e9b57fe0-4e95-4757-b9bd-5a7850138616 -redirect_from: - - /2021080/docs/merchant-product-restrictions-feature-integration - - /2021080/docs/en/merchant-product-restrictions-feature-integration - - /docs/merchant-product-restrictions-feature-integration - - /docs/en/merchant-product-restrictions-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-product-restrictions-feature-integration.html -related: - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Product Lists feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html - - title: Install the Prices feature - link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html - - title: Install the Product Images + Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-product-restrictions-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md deleted file mode 100644 index 8b154ef5bc5..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Category feature -last_updated: Mar 04, 2021 -description: This document describes the process how to integrate the Merchant Category feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-category-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-category-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md deleted file mode 100644 index 6d25b141bb4..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Opening Hours feature -last_updated: Mar 31, 2021 -description: This document describes how to integrate the Merchant Portal Core feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-opening-hours-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-opening-hours-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md deleted file mode 100644 index 3ca6572f68f..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Merchant feature -last_updated: Jul 05, 2021 -description: This document describes the process how to integrate the Marketplace Merchant into the Spryker Merchant Portal. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md deleted file mode 100644 index 797f91962ac..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product feature -last_updated: Jan 05, 2021 -description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-feature-integration.html -related: - - title: Marketplace Product feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md deleted file mode 100644 index bbce1a8d856..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product Options feature -description: This document describes the process how to integrate the Merchant Portal — Marketplace Product Options Management into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-options-management-feature-integration.html -related: - - title: Marketplace Product Options feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-options-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md deleted file mode 100644 index 12399671b62..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product + Tax feature -last_updated: Jan 05, 2021 -description: With this integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product + Tax feature into a Spryker B2B project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-tax-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md deleted file mode 100644 index b663800bf29..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Install the Marketplace Merchant Glue API" -description: This document describes the process how to integrate the Marketplace Merchant Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-merchant-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-merchant-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md deleted file mode 100644 index e29bbfc1d0c..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Install the Merchant Category Glue API" -last_updated: Mar 04, 2021 -description: This document describes the process how to integrate the Merchant Category Glue API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/merchant-category-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-merchant-category-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md b/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md deleted file mode 100644 index 29928810994..00000000000 --- a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Install the Merchant Opening Hours Glue API" -last_updated: Dec 04, 2020 -description: This document describes how to integrate the Merchant Opening Hours Glue API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/merchant-opening-hours-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-merchant-opening-hours-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md deleted file mode 100644 index 2a1669af31f..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Merchant Contracts feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-b2b-contracts-feature-integration -originalArticleId: 78cceb48-e5e8-45b6-b515-f6622788fd63 -redirect_from: - - /2021080/docs/merchant-b2b-contracts-feature-integration - - /2021080/docs/en/merchant-b2b-contracts-feature-integration - - /docs/merchant-b2b-contracts-feature-integration - - /docs/en/merchant-b2b-contracts-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-b2b-contracts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-b2b-contracts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md b/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md deleted file mode 100644 index bc989434d33..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Merchants and Merchant Relations feature -description: Learn how to install the Spryker Cloud Commerce OS Merchants and Merchant relations feature in your Spryker B2B Project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-merchant-relations-feature-integration -originalArticleId: d39fb2d4-f0fd-45c2-9d11-b7ad693f0f03 -redirect_from: - - /2021080/docs/merchant-merchant-relations-feature-integration - - /2021080/docs/en/merchant-merchant-relations-feature-integration - - /docs/merchant-merchant-relations-feature-integration - - /docs/en/merchant-merchant-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/merchants-and-merchant-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchants-and-merchant-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchants-and-merchant-relations-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index bcb502f90ec..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant B2B Contract Requests feature -last_updated: Mar 12, 2024 -description: Integrate the Marketplace Merchant B2B Contract Requests feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md deleted file mode 100644 index 145d7721801..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant B2B Contracts feature -last_updated: Mar 12, 2024 -description: Integrate the Marketplace Merchant B2B Contracts feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md deleted file mode 100644 index d80d148663d..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Merchant + Promotions & Discounts feature -description: Learn how to integrate the Marketplace Merchant + Promotions & Discounts feature into a Spryker project. -last_updated: Dec 19, 2024 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/merchant-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md deleted file mode 100644 index 8b154ef5bc5..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Category feature -last_updated: Mar 04, 2021 -description: This document describes the process how to integrate the Merchant Category feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-category-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-category-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md deleted file mode 100644 index 6d25b141bb4..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Opening Hours feature -last_updated: Mar 31, 2021 -description: This document describes how to integrate the Merchant Portal Core feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-opening-hours-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-opening-hours-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md deleted file mode 100644 index 3ca6572f68f..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Merchant feature -last_updated: Jul 05, 2021 -description: This document describes the process how to integrate the Marketplace Merchant into the Spryker Merchant Portal. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md deleted file mode 100644 index dd53ba9efcb..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature -last_updated: Sep 13, 2021 -description: Learn how to integrate the Marketplace Merchant Portal Product Offer Management + Merchant Portal Order Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md deleted file mode 100644 index 337539aa207..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product + Inventory Management feature -last_updated: Sep 13, 2021 -description: Learn how to integrate theMerchant Portal - Marketplace Product + Inventory Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-inventory-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md deleted file mode 100644 index 12399671b62..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product + Tax feature -last_updated: Jan 05, 2021 -description: With this integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product + Tax feature into a Spryker B2B project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-tax-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md deleted file mode 100644 index b663800bf29..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Install the Marketplace Merchant Glue API" -description: This document describes the process how to integrate the Marketplace Merchant Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-merchant-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-merchant-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-merchant-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md deleted file mode 100644 index e29bbfc1d0c..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Install the Merchant Category Glue API" -last_updated: Mar 04, 2021 -description: This document describes the process how to integrate the Merchant Category Glue API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/merchant-category-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-merchant-category-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md b/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md deleted file mode 100644 index 29928810994..00000000000 --- a/docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Install the Merchant Opening Hours Glue API" -last_updated: Dec 04, 2020 -description: This document describes how to integrate the Merchant Opening Hours Glue API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/merchant-opening-hours-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-merchant-opening-hours-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md deleted file mode 100644 index 2a1669af31f..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Merchant B2B Contracts feature -description: The guide walks you through the process of installing the Merchant Contracts feature into the project. -last_updated: Mar 12, 2024 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-b2b-contracts-feature-integration -originalArticleId: 78cceb48-e5e8-45b6-b515-f6622788fd63 -redirect_from: - - /2021080/docs/merchant-b2b-contracts-feature-integration - - /2021080/docs/en/merchant-b2b-contracts-feature-integration - - /docs/merchant-b2b-contracts-feature-integration - - /docs/en/merchant-b2b-contracts-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-b2b-contracts-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-b2b-contracts-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md b/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md deleted file mode 100644 index ac25a2b917c..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Merchant Product Restrictions feature -description: Merchant Product Restrictions allows setting access to particular products. This guide describes the process of integrating the feature into a project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-product-restrictions-feature-integration -originalArticleId: e9b57fe0-4e95-4757-b9bd-5a7850138616 -redirect_from: - - /2021080/docs/merchant-product-restrictions-feature-integration - - /2021080/docs/en/merchant-product-restrictions-feature-integration - - /docs/merchant-product-restrictions-feature-integration - - /docs/en/merchant-product-restrictions-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-product-restrictions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchant-product-restrictions-feature-integration.html -related: - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Product Lists feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html - - title: Install the Prices feature - link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html - - title: Install the Product Images + Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-product-restrictions-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md b/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md deleted file mode 100644 index bc989434d33..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Merchants and Merchant Relations feature -description: Learn how to install the Spryker Cloud Commerce OS Merchants and Merchant relations feature in your Spryker B2B Project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-merchant-relations-feature-integration -originalArticleId: d39fb2d4-f0fd-45c2-9d11-b7ad693f0f03 -redirect_from: - - /2021080/docs/merchant-merchant-relations-feature-integration - - /2021080/docs/en/merchant-merchant-relations-feature-integration - - /docs/merchant-merchant-relations-feature-integration - - /docs/en/merchant-merchant-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/merchants-and-merchant-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/merchants-and-merchant-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchants-and-merchant-relations-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchant-relations.md b/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchant-relations.md deleted file mode 100644 index 84d0923d261..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchant-relations.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Create merchant relations -description: Learn how to create Spryker Cloud Commerce OS merchant relations in the Back Office for your Spryker B2B Project. -last_updated: Jun 16, 2021 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/managing-merchant-relations -originalArticleId: caba074b-6e6c-4db0-bf93-0ecec4e10ba7 -redirect_from: - - /2021080/docs/managing-merchant-relations - - /2021080/docs/en/managing-merchant-relations - - /docs/managing-merchant-relations - - /docs/en/managing-merchant-relations - - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants-and-merchant-relations/managing-merchant-relations.html - - /docs/scos/user/back-office-user-guides/202311.0/marketplace/merchant-relations/create-merchant-relations.html - - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchant-relations/create-merchant-relations.html -related: - - title: Edit merchant relations - link: docs/pbc/all/merchant-management/page.version/base-shop/manage-in-the-back-office/edit-merchant-relations.html - - title: Merchants and Merchant Relations feature overview - link: docs/pbc/all/merchant-management/page.version/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html ---- - -This document describes how to create merchant relations in the Back Office. - -## Prerequisites - -- [Create a merchant](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchants.html). -- [Create a company](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-companies.html). -- Optional: [Create a product list](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html). It's needed to allow or deny a company access to certain products. -- Review the [reference information](#reference-information-create-a-merchant-relation) before you start, or look up the necessary information as you go through the process. - -## Create a merchant relation - -1. Go to **Marketplace > Merchant Relations**. -2. On the **Overview of Merchant relation** page, click **Add Merchant relation**. -3. On the **Create Merchant Relation** page, select a **MERCHANT**. -4. Select a **COMPANY**. -5. Click **Confirm**. -6. Select a **BUSINESS UNIT OWNER**. -7. Optional: Enter and select one or more **ASSIGNED BUSINESS UNITS**. -8. Optional: Enter and select one or more **ASSIGNED PRODUCT LISTS**. -9. Click **Save**. - -## Reference information: Create a merchant relation - -| ATTRIBUTE |DESCRIPTION | -| --- | --- | -| MERCHANT | A merchant that will be selling products to the company. | -| COMPANY | A company that will be buying products from the merchant. | -| BUSINESS UNIT OWNER | The business unit that has a contract with the merchant. | -| ASSIGNED BUSINESS UNITS | The business units that will be ordering products from the merchant. | -| ASSIGNED PRODUCT LISTS | Product lists to allow or deny the company access to. If you add an allowlist product list, only the product from the list will be available to the company. If you don't select any lists, the entire product catalog will be available to the company. | - - -## Next steps - -- Define merchant-specific prices. For instructions, see [Creating abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) and [Creating a product variant](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/products/create-product-variants.html). -- Define order thresholds for merchants. For instructions, see [Manage merchant order thresholds](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.html). diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchants.md b/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchants.md deleted file mode 100644 index a6756d498aa..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchants.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Create merchants -description: Learn how you can create new merchants in the Spryker Cloud Commerce OS Back Office for your Spryker B2B project. -last_updated: Sep 1, 2021 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/managing-merchants -originalArticleId: e35ca668-b297-45bb-86ab-2fb4e519abfe -redirect_from: - - /2021080/docs/managing-merchants - - /2021080/docs/en/managing-merchants - - /docs/managing-merchants - - /docs/en/managing-merchants - - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants-and-merchant-relations/managing-merchants.html - - docs/scos/user/back-office-user-guides/202311.0/marketplace/merchants/create-merchants.html - - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants/create-merchants.html -related: - - title: Edit merchants - link: docs/pbc/all/merchant-management/page.version/base-shop/manage-in-the-back-office/edit-merchants.html - - title: Merchants and Merchant Relations feature overview - link: docs/pbc/all/merchant-management/page.version/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html ---- - -This document describes how to create merchants in the Back Office. - - -{% info_block infoBox "" %} - -In a non-marketplace environment: -- In B2B: Multiple merchants may exist, representing different companies selling goods. -- In B2C: There are no merchants, as the system is focused on direct sales from the business to the consumer. - -{% endinfo_block %} - - -## Prerequisites - -Review the [reference information](#reference-information-create-a-merchant) before you start, or look up the necessary information as you go through the process. - -## Create a merchant - -1. Go to **Marketplace > Merchants**. -2. On the **Overview of Merchants** page, click **Add Merchant**. -3. On the **Create Merchant** page, enter a **NAME**. -4. Optional: Enter a **REGISTRATION NUMBER**. -5. Enter a **MERCHANT REFERENCE**. -6. Enter an **EMAIL** -7. To make the merchant active after creating it, select the **IS ACTIVE** checkbox. -8. For **STORE RELATION**, select the stores you want the merchant to be active in. -9. Enter **MERCHANT URL** for each locale. -10. Click **Save**. - -## Reference information: Create a merchant - -| ATTRIBUTE | DESCRIPTION | -| --- | --- | -| NAME | Merchant's name that will be displayed on the Storefront. | -| REGISTRATION NUMBER | Unique registration identifier of the merchant. | -| MERCHANT REFERENCE | Unique merchant identifier in Spryker and an ERP. | -| EMAIL | Merchant's email address. Each email address can only be used by one merchant. | -| IS ACTIVE | Defines if the merchant's profile and products will be displayed on the Storefront after you create it. | -| STORE RELATION | The stores in which the merchant's profile and products will be displayed. | -| MERCHANT URL | URL of the merchant's profile per store. | - -## Next steps - -[Edit merchants](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-merchants.html) -[Create merchant relations](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchant-relations.html) diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md b/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md deleted file mode 100644 index c9bf7adfc01..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "Import file details: merchant_stock.csv" -last_updated: Feb 26, 2021 -description: This document describes the merchant_stock.csv file to configure merchant stock information in your Spryker shop. -template: import-file-template -redirect_from: - - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-stock.csv.html - - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-stock.csv.html -related: - - title: Marketplace Merchant feature overview - link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html - - title: Execution order of data importers in Demo Shop - link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html ---- - -This document describes the `merchant_stock.csv` file to configure [merchant stock](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) information in your Spryker shop. - - -## Import file dependencies - -- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) -- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) - -## Import file parameters - - -| PARAMETER | REQUIRED | TYPE | DEFAULT VALUE | REQUIREMENTS OR COMMENTS | DESCRIPTION | -| ------------- | -------- | ------ | ------------- | --------------------------------- | ----------------- | -| merchant_reference | ✓ | String | | Unique | Identifier of the merchant in the system. | -| stock_name | ✓ | String | | Stock name is defined as described in [merchant warehouse](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html). | Name of the stock. | - - -## Import template file and content example - -| FILE | DESCRIPTION | -| --------------------- | --------------------- | -| [template_merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/template_merchant_stock.csv) | Import file template with headers only. | -| [merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/merchant_stock.csv) | Example of the import file with Demo Shop data. | - -## Import command - -```bash -data:import merchant-stock -``` diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md deleted file mode 100644 index bcb502f90ec..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant B2B Contract Requests feature -last_updated: Mar 12, 2024 -description: Integrate the Marketplace Merchant B2B Contract Requests feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md deleted file mode 100644 index 145d7721801..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant B2B Contracts feature -last_updated: Mar 12, 2024 -description: Integrate the Marketplace Merchant B2B Contracts feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md deleted file mode 100644 index b2a6af9fff0..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant feature -last_updated: Aug 7, 2024 -description: Learn how you can install the Marketplace Merchant feature in to your Spryker B2B Marketplace project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md b/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md deleted file mode 100644 index d80d148663d..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Merchant + Promotions & Discounts feature -description: Learn how to integrate the Marketplace Merchant + Promotions & Discounts feature into a Spryker project. -last_updated: Dec 19, 2024 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/merchant-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md deleted file mode 100644 index 797f91962ac..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Merchant Portal - Marketplace Product feature -last_updated: Jan 05, 2021 -description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-feature-integration.html -related: - - title: Marketplace Product feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-feature.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md b/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md deleted file mode 100644 index 8151686508c..00000000000 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Create merchants -last_updated: Jan 24, 2024 -description: Learn how to create and configure merchants in the Spryker Back Office for you Spryker B2B Marketplace projects. -template: back-office-user-guide-template -redirect_from: - - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchants.html -related: - - title: Marketplace Merchant feature overview - link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html ---- - -To create a merchant in the Back Office, follow the steps: - -1. Go to **Marketplace > Merchants**. -2. On the **Overview of Merchants** page, click **Add Merchant**. -3. On the **Create Merchant** page in the **General** tab, enter the following information: -- **NAME**. -- Optional: **REGISTRATION NUMBER**. -- **MERCHANT REFERENCE**. -- **EMAIL**. -3. Optional: To activate the merchant after creating it, select **IS ACTIVE**. -4. Optional: For **STORE RELATION**, select one or more stores to assign the merchant to. -5. For **MERCHANT URL**, enter the URLs of merchant profile per store. -6. Click **Save**. - This opens the **Overview of Merchants** page with a success message displayed. The created merchant is displayed in the list. -7. Optional: To give the merchant access to the marketplace, click **Approve Access** next to it. - This refreshes the page with a success message displayed. The merchant is now **Approved**. - - -{% include pbc/all/manage-in-the-back-office/merchant-management/manage-merchant-users/merchant-general-information-attributes.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/domain-model-and-relationships/merchant-b2b-contracts-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/base-shop/domain-model-and-relationships/merchant-b2b-contracts-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/domain-model-and-relationships/merchant-b2b-contracts-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/domain-model-and-relationships/merchant-b2b-contracts-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/domain-model-and-relationships/merchant-product-restrictions-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/base-shop/domain-model-and-relationships/merchant-product-restrictions-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/domain-model-and-relationships/merchant-product-restrictions-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/domain-model-and-relationships/merchant-product-restrictions-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-comments-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-comments-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-comments-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-comments-feature.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-company-account-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-company-account-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-company-account-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-company-account-feature.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contract-requests-feature.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-comments-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-comments-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-comments-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-comments-feature.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-company-account-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-company-account-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-company-account-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-company-account-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..c636b928b93 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Merchant B2B Contracts feature +description: The guide walks you through the process of installing the Merchant Contracts feature into the project. +last_updated: Mar 12, 2024 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/merchant-b2b-contracts-feature-integration +originalArticleId: 78cceb48-e5e8-45b6-b515-f6622788fd63 +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html + - /docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html + - /2021080/docs/merchant-b2b-contracts-feature-integration + - /2021080/docs/en/merchant-b2b-contracts-feature-integration + - /docs/merchant-b2b-contracts-feature-integration + - /docs/en/merchant-b2b-contracts-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/merchant-b2b-contracts-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/merchant-b2b-contracts-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchant-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md new file mode 100644 index 00000000000..6801b186564 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.md @@ -0,0 +1,30 @@ +--- +title: Install the Merchant Product Restrictions feature +description: Merchant Product Restrictions allows setting access to particular products. This guide describes the process of integrating the feature into a project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/merchant-product-restrictions-feature-integration +originalArticleId: e9b57fe0-4e95-4757-b9bd-5a7850138616 +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html + - /2021080/docs/merchant-product-restrictions-feature-integration + - /2021080/docs/en/merchant-product-restrictions-feature-integration + - /docs/merchant-product-restrictions-feature-integration + - /docs/en/merchant-product-restrictions-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/merchant-product-restrictions-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/merchant-product-restrictions-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/merchant-product-restrictions-feature-integration.html +related: + - title: Install the Configurable Bundle feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html + - title: Install the Product feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html + - title: Product Lists feature integration + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html + - title: Install the Prices feature + link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html + - title: Install the Product Images + Configurable Bundle feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-merchant-product-restrictions-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/install-the-merchants-and-merchant-relations-feature.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/upgrade-the-merchant-module.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/upgrade-the-merchant-module.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/upgrade-the-merchant-module.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/upgrade-the-merchant-module.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/upgrade-the-merchantgui-module.md b/docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/upgrade-the-merchantgui-module.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/install-and-upgrade/upgrade-the-merchantgui-module.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/install-and-upgrade/upgrade-the-merchantgui-module.md diff --git a/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchant-relations.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchant-relations.md new file mode 100644 index 00000000000..64151454a01 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchant-relations.md @@ -0,0 +1,59 @@ +--- +title: Create merchant relations +description: Learn how to create Spryker Cloud Commerce OS merchant relations in the Back Office for your Spryker B2B Project. +last_updated: Jun 16, 2021 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-merchant-relations +originalArticleId: caba074b-6e6c-4db0-bf93-0ecec4e10ba7 +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchant-relations.html + - /2021080/docs/managing-merchant-relations + - /2021080/docs/en/managing-merchant-relations + - /docs/managing-merchant-relations + - /docs/en/managing-merchant-relations + - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants-and-merchant-relations/managing-merchant-relations.html + - /docs/scos/user/back-office-user-guides/202311.0/marketplace/merchant-relations/create-merchant-relations.html + - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchant-relations/create-merchant-relations.html +related: + - title: Edit merchant relations + link: docs/pbc/all/merchant-management/page.version/base-shop/manage-in-the-back-office/edit-merchant-relations.html + - title: Merchants and Merchant Relations feature overview + link: docs/pbc/all/merchant-management/page.version/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html +--- + +This document describes how to create merchant relations in the Back Office. + +## Prerequisites + +- [Create a merchant](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchants.html). +- [Create a company](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-companies.html). +- Optional: [Create a product list](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html). It's needed to allow or deny a company access to certain products. +- Review the [reference information](#reference-information-create-a-merchant-relation) before you start, or look up the necessary information as you go through the process. + +## Create a merchant relation + +1. Go to **Marketplace > Merchant Relations**. +2. On the **Overview of Merchant relation** page, click **Add Merchant relation**. +3. On the **Create Merchant Relation** page, select a **MERCHANT**. +4. Select a **COMPANY**. +5. Click **Confirm**. +6. Select a **BUSINESS UNIT OWNER**. +7. Optional: Enter and select one or more **ASSIGNED BUSINESS UNITS**. +8. Optional: Enter and select one or more **ASSIGNED PRODUCT LISTS**. +9. Click **Save**. + +## Reference information: Create a merchant relation + +| ATTRIBUTE |DESCRIPTION | +| --- | --- | +| MERCHANT | A merchant that will be selling products to the company. | +| COMPANY | A company that will be buying products from the merchant. | +| BUSINESS UNIT OWNER | The business unit that has a contract with the merchant. | +| ASSIGNED BUSINESS UNITS | The business units that will be ordering products from the merchant. | +| ASSIGNED PRODUCT LISTS | Product lists to allow or deny the company access to. If you add an allowlist product list, only the product from the list will be available to the company. If you don't select any lists, the entire product catalog will be available to the company. | + + +## Next steps + +- Define merchant-specific prices. For instructions, see [Creating abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) and [Creating a product variant](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/products/create-product-variants.html). +- Define order thresholds for merchants. For instructions, see [Manage merchant order thresholds](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.html). diff --git a/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchants.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchants.md new file mode 100644 index 00000000000..6a5bb45131f --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/create-merchants.md @@ -0,0 +1,68 @@ +--- +title: Create merchants +description: Learn how you can create new merchants in the Spryker Cloud Commerce OS Back Office for your Spryker B2B project. +last_updated: Sep 1, 2021 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-merchants +originalArticleId: e35ca668-b297-45bb-86ab-2fb4e519abfe +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/create-merchants.html + - /2021080/docs/managing-merchants + - /2021080/docs/en/managing-merchants + - /docs/managing-merchants + - /docs/en/managing-merchants + - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants-and-merchant-relations/managing-merchants.html + - docs/scos/user/back-office-user-guides/202311.0/marketplace/merchants/create-merchants.html + - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchants/create-merchants.html +related: + - title: Edit merchants + link: docs/pbc/all/merchant-management/page.version/base-shop/manage-in-the-back-office/edit-merchants.html + - title: Merchants and Merchant Relations feature overview + link: docs/pbc/all/merchant-management/page.version/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html +--- + +This document describes how to create merchants in the Back Office. + + +{% info_block infoBox "" %} + +In a non-marketplace environment: +- In B2B: Multiple merchants may exist, representing different companies selling goods. +- In B2C: There are no merchants, as the system is focused on direct sales from the business to the consumer. + +{% endinfo_block %} + + +## Prerequisites + +Review the [reference information](#reference-information-create-a-merchant) before you start, or look up the necessary information as you go through the process. + +## Create a merchant + +1. Go to **Marketplace > Merchants**. +2. On the **Overview of Merchants** page, click **Add Merchant**. +3. On the **Create Merchant** page, enter a **NAME**. +4. Optional: Enter a **REGISTRATION NUMBER**. +5. Enter a **MERCHANT REFERENCE**. +6. Enter an **EMAIL** +7. To make the merchant active after creating it, select the **IS ACTIVE** checkbox. +8. For **STORE RELATION**, select the stores you want the merchant to be active in. +9. Enter **MERCHANT URL** for each locale. +10. Click **Save**. + +## Reference information: Create a merchant + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| NAME | Merchant's name that will be displayed on the Storefront. | +| REGISTRATION NUMBER | Unique registration identifier of the merchant. | +| MERCHANT REFERENCE | Unique merchant identifier in Spryker and an ERP. | +| EMAIL | Merchant's email address. Each email address can only be used by one merchant. | +| IS ACTIVE | Defines if the merchant's profile and products will be displayed on the Storefront after you create it. | +| STORE RELATION | The stores in which the merchant's profile and products will be displayed. | +| MERCHANT URL | URL of the merchant's profile per store. | + +## Next steps + +[Edit merchants](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-merchants.html) +[Create merchant relations](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchant-relations.html) diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md similarity index 95% rename from docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md index 04536a6feb4..2adcc9f588e 100644 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/edit-merchant-relations.md @@ -4,6 +4,7 @@ description: Learn how to edit merchant relations in the Spryker Cloud Commerce template: back-office-user-guide-template last_updated: Nov 17, 2023 redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchant-relations.html - /docs/scos/user/back-office-user-guides/202311.0/marketplace/merchant-relations/edit-merchant-relations.html - /docs/scos/user/back-office-user-guides/202204.0/marketplace/merchant-relations/edit-merchant-relations.html related: diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchants.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/edit-merchants.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/edit-merchants.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/edit-merchants.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/manage-merchant-relation-requests.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/manage-merchant-relation-requests.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/manage-merchant-relation-requests.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/manage-merchant-relation-requests.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/manage-merchants-in-the-back-office.md b/docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/manage-merchants-in-the-back-office.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/base-shop/manage-in-the-back-office/manage-merchants-in-the-back-office.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/manage-in-the-back-office/manage-merchants-in-the-back-office.md diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md similarity index 98% rename from docs/pbc/all/merchant-management/202512.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md index 0da406c4ecc..bda2281eaf1 100644 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.md @@ -4,6 +4,7 @@ description: In the context of Spryker B2B eCommerce platform, there can be thre last_updated: Jul 22, 2021 template: concept-topic-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html - /docs/scos/user/features/201811.0/merchant-b2b-contracts/merchant-b2b-contracts.html - /docs/scos/user/features/202311.0/merchant-b2b-contracts/merchant-b2b-contracts.html - /docs/scos/user/features/202204.0/merchant-b2b-contracts-feature-overview.html diff --git a/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/merchant-product-restrictions-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/merchant-product-restrictions-feature-overview.md new file mode 100644 index 00000000000..6b86dea1430 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/merchant-product-restrictions-feature-overview.md @@ -0,0 +1,54 @@ +--- +title: Merchant Product Restrictions feature overview +description: Merchant Product Restrictions lets merchants define the products that are available to each of their B2B customers. +last_updated: Jul 22, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/merchant-product-restrictions-feature-overview +originalArticleId: 9d02b7ac-0e20-47bf-8f5b-656279a8278d +redirect_from: + - /2021080/docs/merchant-product-restrictions-feature-overview + - /2021080/docs/en/merchant-product-restrictions-feature-overview + - /docs/merchant-product-restrictions-feature-overview + - /docs/en/merchant-product-restrictions-feature-overview + - /docs/scos/user/features/202311.0/merchant-product-restrictions-feature-overview.html + - /docs/scos/user/features/202204.0/merchant-product-restrictions-feature-overview.html +--- + +The *Product Restrictions* feature lets merchants define the products that are available to each of their B2B customers. + +In terms of the [Merchant concept](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-b2b-contracts-and-contract-requests-feature-overview.html), a *merchant* is an entity that sells products in a B2B environment. + +Product Restrictions from a merchant to a buyer give merchants [another layer](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/customer-access-feature-overview.html) of control over the information a customer can see in the shop application. Based on product restrictions, you can do the following actions: + +- Create a list of products. +- Hide the product information for the products (pricing, appearance in the search/filters). +- Limit access to a product details page. + +Product Restriction works on the basis of allowlist and excludelist lists. That means that products that are added to an allowlist are always shown to a customer while products from an excludelist are hidden from the customer view. + +To restrict the products, a shop administrator needs to create a product list, include the necessary products to the list and excludelist them for a specific merchant relationship. All other products will be available for that merchant relationship. + +To create product lists, follow [Create product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html). + +You can check more cases of product restrictions workflow on the [Restricted Products Behavior](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.html) page. + +## Current constraints + +- When a single product from the product set is added to an excludelist, the other items are displayed in the shop. We are going to update the logic in a way that in case any of the items in the product set is added to the excludelist, all relevant product sets containing this item will be added to the excludelist too. +- The current functionality allows displaying the whole product bundle even if it contains the customer-specific products from the excludelist. We are working on updating the logic so that if the bundle product includes an item from the excludelist, the whole bundle will also also be hidden from a customer. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html) | +| [Edit product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html) | +| [Create merchant relations](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchant-relations.html) | +| [Edit merchant relations](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-merchant-relations.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | +|---------| +| [Merchant B2B Contracts feature integration](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-b2b-contracts-feature.html) | +| [Install the Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-feature.html) | diff --git a/docs/pbc/all/merchant-management/202512.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md similarity index 98% rename from docs/pbc/all/merchant-management/202512.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md rename to docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md index 5849e537601..1005ff301f3 100644 --- a/docs/pbc/all/merchant-management/202512.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md +++ b/docs/pbc/all/merchant-management/202602.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.md @@ -4,6 +4,7 @@ last_updated: Aug 13, 2021 description: In this document, you can find commonly encountered cases of product restrictions behavior template: concept-topic-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.html - docs/scos/dev/feature-walkthroughs/202311.0/merchant-product-restrictions-feature-walkthrough/restricted-products-behavior.html - /docs/scos/dev/feature-walkthroughs/202204.0/merchant-product-restrictions-feature-walkthrough/restricted-products-behavior.html --- diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/marketplace-merchant-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/marketplace-merchant-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/marketplace-merchant-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/marketplace-merchant-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-category-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-category-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-category-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-category-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-opening-hours-feature-domain-model.md b/docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-opening-hours-feature-domain-model.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/domain-model-and-relationships/merchant-opening-hours-feature-domain-model.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/domain-model-and-relationships/merchant-opening-hours-feature-domain-model.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md similarity index 95% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md index 360db96ed0a..05be853fdf1 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.md @@ -4,6 +4,7 @@ last_updated: Jun 07, 2021 description: learn about the merchant profile address csv file to configure merchant profile addresses in your Spryker B2B shop. template: import-file-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-category.csv.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-category.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-category.csv.html related: diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md similarity index 95% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md index b39c335f6b9..1163e770195 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.md @@ -4,6 +4,7 @@ last_updated: Jun 07, 2021 description: This document describes the merchant_open_hours_date_schedule.csv file to configure Merchant opening hours information in your Spryker shop. template: import-file-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-date-schedule.csv.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-open-hours-date-schedule.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-open-hours-date-schedule.csv.html related: diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md similarity index 95% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md index 009c4aef2b2..a511ff9c75f 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.md @@ -4,6 +4,7 @@ last_updated: Jun 07, 2021 description: This document describes the merchant_open_hours_week_day_schedule.csv file to configure merchant opening hours information in your Spryker shop. template: import-file-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-open-hours-week-day-schedule.csv.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-open-hours-week-day-schedule.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-open-hours-week-day-schedule.csv.html related: diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md similarity index 96% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md index 698a69c8001..4c9cd2c22c3 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.md @@ -4,6 +4,7 @@ last_updated: Jun 07, 2021 description: Learn about the merchant profile address csv file to configure merchant profile addresses in your Spryker B2B shop. template: import-file-template redirect_from: +- /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile-address.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-profile-address.csv.html related: - title: Marketplace Merchant feature overview diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md similarity index 97% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md index 54f916b19ee..399d5e602e0 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.md @@ -4,6 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the merchant_profile.csv file to configure merchant information in your Spryker shop. template: import-file-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-profile.csv.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-profile.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-profile.csv.html related: diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md new file mode 100644 index 00000000000..4c59963c5ca --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md @@ -0,0 +1,45 @@ +--- +title: "Import file details: merchant_stock.csv" +last_updated: Feb 26, 2021 +description: This document describes the merchant_stock.csv file to configure merchant stock information in your Spryker shop. +template: import-file-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html + - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-stock.csv.html + - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant-stock.csv.html +related: + - title: Marketplace Merchant feature overview + link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html + - title: Execution order of data importers in Demo Shop + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html +--- + +This document describes the `merchant_stock.csv` file to configure [merchant stock](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) information in your Spryker shop. + + +## Import file dependencies + +- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) +- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) + +## Import file parameters + + +| PARAMETER | REQUIRED | TYPE | DEFAULT VALUE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| ------------- | -------- | ------ | ------------- | --------------------------------- | ----------------- | +| merchant_reference | ✓ | String | | Unique | Identifier of the merchant in the system. | +| stock_name | ✓ | String | | Stock name is defined as described in [merchant warehouse](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html). | Name of the stock. | + + +## Import template file and content example + +| FILE | DESCRIPTION | +| --------------------- | --------------------- | +| [template_merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/template_merchant_stock.csv) | Import file template with headers only. | +| [merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/merchant_stock.csv) | Example of the import file with Demo Shop data. | + +## Import command + +```bash +data:import merchant-stock +``` diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-store.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-store.csv.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-store.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-store.csv.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-user.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-user.csv.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-user.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-user.csv.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md similarity index 92% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md index 8816418a3d9..f01b8adcc71 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant.csv.md @@ -4,6 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the merchant.csv file to configure merchant information in your Spryker shop. template: import-file-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant.csv.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant.csv.html related: - title: Marketplace Merchant feature overview @@ -11,6 +12,7 @@ related: - title: Execution order of data importers in Demo Shop link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant.csv.html - /docs/scos/dev/tutorials/201907.0/howtos/feature-howtos/howto-import-merchants-and-merchant-relations.html - /docs/marketplace/dev/data-import/202311.0/file-details-merchant.csv.html - /docs/pbc/all/merchant-management/202311.0/marketplace/import-and-export-data/file-details-merchant.csv.html diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-merchant-management-data.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-merchant-management-data.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/import-merchant-management-data.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/import-merchant-management-data.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md similarity index 95% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md index ae2d2639289..f630756757f 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.md @@ -4,6 +4,8 @@ description: Learn about the Spryker merchant commission CSV file and how to con last_updated: Jul 07, 2024 description: Import merchant comissions. template: import-file-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.html --- This document describes the `merchant_commission.csv` file to configure [merchant commission](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-commission-feature-overview.html). diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_amount.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_amount.csv.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_amount.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_amount.csv.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_group.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_group.csv.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_group.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_group.csv.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.md new file mode 100644 index 00000000000..314d463f1af --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.md @@ -0,0 +1,36 @@ +--- +title: "Import file details: merchant_commission_merchant.csv" +description: Learn about the Spryker merchant commission merchant CSV file and how to assign commisions within your Spryker Marketplace project. +last_updated: Jul 07, 2024 +description: Import relations of merchant comissions to merchants. +template: import-file-template +--- + +This document describes the `merchant_commission_merchant.csv` file to assign [merchant commission](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-commission-feature-overview.html) to merchants. + +## Import file dependencies + +- [merchant_commission.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant-comission.csv.html) +- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) + +## Import file parameters + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-------------------------|----------|-----------|--------------|----------------------------------------| +| merchant_commission_key | ✓ | String | mc4 | Merchant commission to assign the merchant to. | +| merchant_reference | ✓ | String | MER000001 | Merchant to assign the commission to. | + + +## Import template file and content example + +| FILE | DESCRIPTION | +| ---------------------------------- | --------------------------- | +| [template_merchant_commission_merchant.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/merchant-management/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.md/template_merchant_commission_merchant.csv) | Import file template with headers only. | +| [merchant_commission_merchant.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/merchant-management/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.md/merchant_commission_merchant.csv) | Example of the import file with Demo Shop data. | + + +## Import command + +```bash +console data:import:merchant-commission-merchant +``` diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_store.csv.md b/docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_store.csv.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_store.csv.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_store.csv.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md new file mode 100644 index 00000000000..30cd7e7a07c --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Merchant B2B Contract Requests feature +last_updated: Mar 12, 2024 +description: Integrate the Marketplace Merchant B2B Contract Requests feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contract-requests-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contract-requests-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md new file mode 100644 index 00000000000..17158648ac0 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Merchant B2B Contracts feature +last_updated: Mar 12, 2024 +description: Integrate the Marketplace Merchant B2B Contracts feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-b2b-contracts-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-b2b-contracts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.md new file mode 100644 index 00000000000..ad0de5fd422 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-category-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Commission + Category Management feature +last_updated: June 26, 2024 +description: Integrate the Category Management + Marketplace Merchant Commission feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-category-management-marketplace-merchant-commission.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..f0800779886 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Commission feature +last_updated: Aug 7, 2024 +description: This document describes how to integrate the Marketplace Merchant Commission feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-commission-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.md new file mode 100644 index 00000000000..0112686a0f7 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-prices-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Commission + Prices feature +last_updated: June 26, 2024 +description: Integrate the Prices + Marketplace Merchant Commission feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-prices-marketplace-merchant-commission-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.md new file mode 100644 index 00000000000..a2e39fd76cc --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-product-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Commission + Product feature +last_updated: June 26, 2024 +description: Learn how you can Integrate the Product + Marketplace Merchant Commission feature into a Spryker B2B Marketplace project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-product-marketplace-merchant-commission-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md new file mode 100644 index 00000000000..9568a37f9fe --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Merchant feature +last_updated: Aug 7, 2024 +description: Learn how you can install the Marketplace Merchant feature in to your Spryker B2B Marketplace project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-cms-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-cms-feature.md new file mode 100644 index 00000000000..f882215a1d6 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-cms-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Portal Core + CMS feature +last_updated: Jan 6, 2025 +description: This document describes how to integrate the Marketplace Merchant Portal Core + CMS feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-portal-core-cms-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-dynamic-multistore.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-dynamic-multistore.md new file mode 100644 index 00000000000..2539f62c51d --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace MerchantPortal Core + Dynamic Multistore +last_updated: Apr 25, 2023 +description: This document describes the process how to integrate the Marketplace MerchantPortal Core + Dynamic Store feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-portal-core-dynamic-multistore.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.md diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..ec394082969 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Merchant + Promotions & Discounts feature +description: Learn how to integrate the Marketplace Merchant + Promotions & Discounts feature into a Spryker project. +last_updated: Dec 19, 2024 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature.html + - /docs/pbc/all/merchant-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-promotions-and-discounts-feature +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md new file mode 100644 index 00000000000..a6d8e6e572f --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Merchant Opening Hours feature +last_updated: Mar 31, 2021 +description: This document describes how to integrate the Merchant Portal Core feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-opening-hours-feature-integration.html + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-opening-hours-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-opening-hours-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md new file mode 100644 index 00000000000..1927bf6c29a --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Merchant Portal - Marketplace Merchant feature +last_updated: Jul 05, 2021 +description: This document describes the process how to integrate the Marketplace Merchant into the Spryker Merchant Portal. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-feature.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-merchant-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-merchant-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.md new file mode 100644 index 00000000000..b5467cb4cb6 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-order-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Merchant Portal + Marketplace Order Management feature +last_updated: Sep 13, 2021 +description: This integration guide provides steps on how to integrate the B2B Marketplace Merchant Portal Order Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md new file mode 100644 index 00000000000..78f8462708f --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.md @@ -0,0 +1,14 @@ +--- +title: Install the Merchant Portal - Marketplace Product feature +last_updated: Jan 05, 2021 +description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-feature.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-feature-integration.html +related: + - title: Marketplace Product feature walkthrough + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-feature.md %} diff --git a/docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-inventory-management-feature.md diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md similarity index 100% rename from docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-options-feature.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md new file mode 100644 index 00000000000..d25152ce1bc --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Merchant Portal - Marketplace Product + Tax feature +last_updated: Jan 05, 2021 +description: With this integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product + Tax feature into a Spryker B2B project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-marketplace-product-tax-feature.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/merchant-portal-marketplace-product-tax-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-self-registration-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-self-registration-feature.md new file mode 100644 index 00000000000..41d99c3ff8a --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-self-registration-feature.md @@ -0,0 +1,233 @@ +--- +title: Install the Merchant Self-Registration feature +last_updated: Feb 19, 2026 +description: Learn how to install the Merchant Self-Registration feature in your Spryker Marketplace project. +template: feature-integration-guide-template +--- + +This document describes how to install the Merchant Self-Registration feature in your project. + +## Install the feature core + +Follow the steps below to install the Merchant Self-Registration feature core. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------|-----------|---------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +### 1) Install the required modules + +Install the required modules by using Composer: + +```bash +composer require spryker/merchant-registration-request:"^1.1.0" spryker-shop/merchant-registration-request-page:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} +Verify that the following modules are installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------------------|------------------------------------------------------| +| MerchantRegistrationRequest | vendor/spryker/merchant-registration-request | +| MerchantRegistrationRequestPage | vendor/spryker-shop/merchant-registration-request-page | + +{% endinfo_block %} + +### 2) Set up the database schema and transfer objects + +1. Apply the database changes and generate entity and transfer changes: + +```bash +console propel:install +``` + +{% info_block warningBox "Verification" %} +Verify that the following changes appear in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------------|-------|---------| +| spy_merchant_registration_request | table | created | + +{% endinfo_block %} + +2. Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} +Verify that the following transfer objects are created: + +| TRANSFER | TYPE | EVENT | PATH | +|--------------------------------------|-------|---------|---------------------------------------------------------------------------| +| MerchantRegistrationRequest | class | Created | src/Generated/Shared/Transfer/MerchantRegistrationRequestTransfer | +| MerchantRegistrationResponse | class | Created | src/Generated/Shared/Transfer/MerchantRegistrationResponseTransfer | +| SpyMerchantRegistrationRequestEntity | class | Created | src/Generated/Shared/Transfer/SpyMerchantRegistrationRequestEntityTransfer | + +{% endinfo_block %} + +### 3) Add translations + +1. Append glossary entries for the Back Office and Storefront according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +merchant_registration_request_page.page_title,Register and get started on the Spryker Marketplace,en_US +merchant_registration_request_page.page_title,Registrieren und loslegen auf den Spryker Marktplatz,de_DE +merchant_registration_request_page.company_subform_title,Company Registration,en_US +merchant_registration_request_page.company_subform_title,Registrierung des Unternehmens,de_DE +merchant_registration_request_page.company_subform_text,Fill in your company details to initiate your registration process as a marketplace merchant.,en_US +merchant_registration_request_page.company_subform_text,"Geben Sie Ihre Unternehmensdaten ein, um den Registrierungsprozess als Marktplatz-Händler zu starten.",de_DE +merchant_registration_request_page.account_subform_title,Merchant User Account creation,en_US +merchant_registration_request_page.account_subform_title,Händler-Benutzerkonto erstellen,de_DE +merchant_registration_request_page.account_subform_text,Add the details of your first merchant user account.,en_US +merchant_registration_request_page.account_subform_text,Fügen Sie die Details Ihres ersten Händler-Benutzerkontos hinzu.,de_DE +merchant_registration_request_page.accept_terms,Accept terms,en_US +merchant_registration_request_page.accept_terms,AGB akzeptieren,de_DE +merchant_registration_request_page.contact_person_role,Role,en_US +merchant_registration_request_page.contact_person_role,Role,de_DE +merchant_registration_request_page.contact_person_phone,Phone,en_US +merchant_registration_request_page.contact_person_phone,Telefonnummer,de_DE +merchant_registration_request_page.contact_person_first_name,First name,en_US +merchant_registration_request_page.contact_person_first_name,Vorname,de_DE +merchant_registration_request_page.contact_person_last_name,Last name,en_US +merchant_registration_request_page.contact_person_last_name,Nachname,de_DE +merchant_registration_request_page.contact_person_title,Title,en_US +merchant_registration_request_page.contact_person_title,Titel,de_DE +merchant_registration_request_page.email,Email,en_US +merchant_registration_request_page.email,E-Mail,de_DE +merchant_registration_request_page.company_name,Company name,en_US +merchant_registration_request_page.company_name,Unternehmensname,de_DE +merchant_registration_request_page.country,Country,en_US +merchant_registration_request_page.country,Land,de_DE +merchant_registration_request_page.street,Street,en_US +merchant_registration_request_page.street,Straße,de_DE +merchant_registration_request_page.house_number,House Number,en_US +merchant_registration_request_page.house_number,Hausnummber,de_DE +merchant_registration_request_page.zip_code,Zip Code,en_US +merchant_registration_request_page.zip_code,PLZ,de_DE +merchant_registration_request_page.city,City,en_US +merchant_registration_request_page.city,Stadt,de_DE +merchant_registration_request_page.merchant_registration_number,Registration number,en_US +merchant_registration_request_page.merchant_registration_number,Registrierungsnummer,de_DE +merchant_registration_request_page.form_submit,Submit registration request,en_US +merchant_registration_request_page.form_submit,Registrierungsanfrage senden,de_DE +merchant_registration_request_page.success,Merchant registration request has been successfully submitted for review.,en_US +merchant_registration_request_page.success,Die Händlerregistrierungsanfrage wurde erfolgreich zur Überprüfung übermittelt.,de_DE +merchant_registration_request.error.email_already_exists,Email address already registered.,en_US +merchant_registration_request.error.email_already_exists,E-Mail-Adresse bereits registriert.,de_DE +merchant_registration_request.error.company_name_already_exists,Company name already registered.,en_US +merchant_registration_request.error.company_name_already_exists,Unternehmensname bereits registriert.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} +Verify that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables. +{% endinfo_block %} + +### 4) Configure navigation + +1. Add the Merchant Registrations section to the Back Office navigation: + +**config/Zed/navigation.xml** + +```xml + + + + + Marketplace + fa-shopping-basket + + + + Merchant Registrations + merchant-registration-request + list + index + + + + +``` + +2. Build the navigation cache: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} +Verify that in the Back Office, under **Marketplace**, you can see the **Merchant Registrations** menu item. +{% endinfo_block %} + +### 5) Set up Storefront routing + +Register the route provider plugin to enable the merchant registration page in the Storefront: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|--------------------------------------------------------------|---------------|------------------------------------------------------------------| +| MerchantRegistrationRequestPageRouteProviderPlugin | Adds routes for the merchant registration request pages. | | SprykerShop\Yves\MerchantRegistrationRequestPage\Plugin\Router | + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new MerchantRegistrationRequestPageRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} +Verify that the `/merchant-registration-request` route is available in the Storefront by navigating to `https://mysprykershop.com/merchant-registration-request`. +{% endinfo_block %} + +### 6) Set up Storefront navigation + +To add a link to the merchant registration page in the Storefront footer, import the following navigation node: + +1. Prepare navigation node data: + +**data/import/common/common/navigation_node.csv** + +```csv +navigation_key,node_key,parent_node_key,node_type,title.en_US,url.en_US,css_class.en_US,title.de_DE,url.de_DE,css_class.de_DE,valid_from,valid_to +FOOTER_NAVIGATION,nav-el-footer--5,,link,Sell on Spryker,/en/merchant-registration-request,footer-navigation__item,Auf Spryker verkaufen,/de/merchant-registration-request,footer-navigation__item,, +``` + +2. Import data: + +```bash +console data:import navigation-node +``` + +{% info_block warningBox "Verification" %} +Verify that the **Sell on Spryker** link appears in the Storefront footer and navigates to the merchant registration request page. +{% endinfo_block %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.md new file mode 100644 index 00000000000..e91a3c76f46 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-customer-account-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Merchant Switcher + Customer Account Management feature +last_updated: Jan 06, 2021 +description: This document describes the process how to integrate the Merchant Switcher + Customer Account Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-switcher-customer-account-management-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.md new file mode 100644 index 00000000000..93169349165 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Merchant Switcher feature +last_updated: Jan 06, 2021 +description: This integration guide provides steps on how to integrate the Merchant Switcher feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-switcher-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.md new file mode 100644 index 00000000000..3d5af324f52 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-switcher-wishlist-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Merchant Switcher + Wishlist feature +last_updated: Oct 08, 2021 +description: This document describes the process how to integrate the Merchant Switcher + Wishlist feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-switcher-wishlist-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md new file mode 100644 index 00000000000..4f4d86c5bfa --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.md @@ -0,0 +1,12 @@ +--- +title: "Install the Marketplace Merchant Glue API" +description: This document describes the process how to integrate the Marketplace Merchant Glue API feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/pbc/all/merchant-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-merchant-glue-api.html + - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-merchant-feature-integration.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-merchant-feature-integration.html +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-merchant-glue-api.md %} diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md similarity index 100% rename from docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.md diff --git a/docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md similarity index 100% rename from docs/pbc/all/merchant-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-opening-hours-glue-api.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal.md b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal.md new file mode 100644 index 00000000000..e5d9187d35f --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal.md @@ -0,0 +1,12 @@ +--- +title: Install the Merchant Portal +last_updated: Aug 31, 2022 +description: Learn how you can integrate the Merchant Portal feature into a Spryker B2B Marketplace project. +draft: true +template: feature-integration-guide-template +related: + - title: Merchant Portal overview + link: docs/marketplace/user/intro-to-spryker-marketplace/merchant-portal.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-feature.md %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/back-office-import-merchant-commissions.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/back-office-import-merchant-commissions.md new file mode 100644 index 00000000000..a54012015d1 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/back-office-import-merchant-commissions.md @@ -0,0 +1,53 @@ +--- +title: "Back Office: Import merchant commissions" +description: Learn how to import merchant commissions in the Spryker Back Office for your Spryker B2B Marketplace projects. +last_updated: Jun 16, 2024 +template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202407.0/marketplace/import-and-export-data/merchant-commission/import-file-details-merchant_commission_merchant.csv.html +--- + +To import [merchant commissions](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-commission-feature-overview.html), follow the steps: + +1. In the Back Office, go to **Marketplace >Merchant Commissions**. +2. On the **Merchant Commissions** page, click **Import**. + This opens the **Import Merchant Commissions** page. + +3. Optional: If you don't have a file with merchant commissions, to prepare it, in **1 Download template**, click on **commissions_template.csv**. + This downloads the file. Fill the file with merchant commission data using the template and the [reference](#reference-information-merchant-commissions-import-file). + +4. In **2 Import CSV file**, click **Choose File** and select the file with commissions on your machine. + This displays the name of the file next to **Choose File**. + +5. To import the selected file with commissions, click **Upload**. + This opens the **Import Merchant Commissions** page. The imported merchant commissions are displayed in the table. + +## Reference information: Merchant commissions import file + +{% info_block infoBox "" %} + +- Some editors change the symbols based on your location. To make sure you can import commissions, we recommend using Google Sheets to edit import files. +- For an example of a filled out file, you can export the existing default commissions by clicking **Export** on the **Merchant Commissions** page. + + +{% endinfo_block %} + +This section explains how to fill out a merchant commission import file. For more information about the fields in this file, see [Marketplace Merchant Commissions feature overview](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-commission-feature-overview.html). + +| COLUMN | REQUIRED | DATA EXAMPLE | DATA EXPLANATION | +|---------------------------|----------|---------------------------------------------|------------------| +| key | ✓ | mc1 | Unique identifier of the merchant commission. | +| name | ✓ | Merchant Commission 1 | Name of the merchant commission. Accepted length: 1 to 255 characters. Must be unique. | +| description | | | Description of the merchant commission. | +| valid_from | ✓ | 6/30/2029 0:00:00 | Start date of the merchant commission validity in UTC. | +| valid_to | ✓ | 8/30/2029 0:00:00 | End date of the merchant commission validity in UTC. | +| is_active | ✓ | 1 | Defines if the merchant commission is active (1) or inactive (0). | +| amount | | 5 | Commission in percentage. Accepts decimals—for example, `10.99` means 10.99%. If `calculator_type_plugin` is set to `fixed`, `amount` must be `0`. | +| calculator_type_plugin | ✓ | percentage | Defines how commission is calculated. By default, accepts `percentage` and `fixed`. | +| group | ✓ | primary | Can be `primary` or `secondary`. | +| priority | ✓ | 1 | Defines which commission to apply within a group. Priority is defined in ascending order starting from one. | +| item_condition | | item-price >= '500' AND category IS IN 'computer' | Condition for the item. `500` refers to $500 in this case. | +| order_condition | | price-mode = "GROSS_MODE" | Condition for the order. | +| stores | ✓ | AT,DE | Defines the stores to apply the commission in. Accepts multiple values. | +| merchants_allow_list | | MER000002,MER000006 | One or more merchants to apply the commission to. | +| fixed_amount_configuration | | EUR\|0.5\|0.5,CHF\|0.5\|0.5 | Defines fixed amount commission configuration if a fixed commission applies to each item in the order. Format: `CURRENCY\|GROSS AMOUNT\|NET AMOUNT`. `0.5` refers to 50 cents in this example. | diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md similarity index 99% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md index 35ea11d3885..8fc4c2c05ab 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-registration-requests.md @@ -124,7 +124,7 @@ To reject a merchant registration request, do the following: 1. In the Back Office, go to **Marketplace** > **Merchant Registrations**. 2. In the **Actions** column, click **View** for the request you want to reject. 3. Optional: Add an internal comment explaining why the request is being rejected. -4. In the top-right corner, click **Decline Merchant**. +4. In the top-right corner, click **Decline Merchant**. This opens the **Reject Request** confirmation page. 5. Review the confirmation message: "Reject this request if you do not want to create a merchant account." 6. Click **Reject Request** to confirm. diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/create-merchant-relations.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/create-merchant-relations.md new file mode 100644 index 00000000000..24e0a837d29 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/create-merchant-relations.md @@ -0,0 +1,43 @@ +--- +title: Create merchant relations +description: Learn how to create merchant relations in the Spryker Marketplace Back Office for your Spryker B2B Projects. +template: back-office-user-guide-template +last_updated: Nov 17, 2023 +--- + +This document describes how to create merchant relations in the Back Office. + +## Prerequisites + +- [Create a merchant](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchants.html). +- [Create a company](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-companies.html). +- Optional: [Create a product list](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html). It's needed to allow or deny a company access to certain products. +- Review the [reference information](#reference-information-create-a-merchant-relation) before you start, or look up the necessary information as you go through the process. + +## Create a merchant relation + +1. Go to **B2B Contracts > Merchant Relations**. +2. On the **Overview of Merchant relation** page, click **Add Merchant relation**. +3. On the **Create Merchant Relation** page, select a **MERCHANT**. +4. Select a **COMPANY**. +5. Click **Confirm**. +6. Select a **BUSINESS UNIT OWNER**. +7. Optional: Enter and select one or more **ASSIGNED BUSINESS UNITS**. +8. Optional: Enter and select one or more **ASSIGNED PRODUCT LISTS**. +9. Click **Save**. + +## Reference information: Create a merchant relation + +| ATTRIBUTE |DESCRIPTION | +| --- | --- | +| MERCHANT | A merchant that will be selling products to the company. | +| COMPANY | A company that will be buying products from the merchant. | +| BUSINESS UNIT OWNER | The business unit that has a contract with the merchant. | +| ASSIGNED BUSINESS UNITS | The business units that will be ordering products from the merchant. | +| ASSIGNED PRODUCT LISTS | Product lists to allow or deny the company access to. If you add an allowlist product list, only the product from the list will be available to the company. If you don't select any lists, the entire product catalog will be available to the company. | + + +## Next steps + +- Define merchant-specific prices. For instructions, see [Creating abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) and [Creating a product variant](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/products/create-product-variants.html). +- Define order thresholds for merchants. For instructions, see [Manage merchant order thresholds](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-in-the-back-office/define-merchant-order-thresholds.html). diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-relations/edit-merchant-relations.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/edit-merchant-relations.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-relations/edit-merchant-relations.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/edit-merchant-relations.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-relations/manage-merchant-relation-requests.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/manage-merchant-relation-requests.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchant-relations/manage-merchant-relation-requests.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-relations/manage-merchant-relation-requests.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/create-merchant-users.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/create-merchant-users.md new file mode 100644 index 00000000000..302ee228e32 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/create-merchant-users.md @@ -0,0 +1,30 @@ +--- +title: Create merchant users +last_updated: Jan 24, 2024 +description: Learn how to create merchant users in the Spryker Marketplace Back Office for your Spryker B2B projects. +template: back-office-user-guide-template +redirect_from: + - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchant-users.html + - /docs/pbc/all/merchant-management/202311.0/marketplace/manage-in-the-back-office/manage-merchant-users.html +--- + +A [merchant user](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.html) is a user that performs tasks on behalf of a merchant in the Merchant Portal. To create a merchant user in the Back Office, follow the steps: + +1. Go to **Marketplace > Merchants**. +2. Next to the merchant you want to create a merchant user for, click **Edit**. + This opens the **Edit Merchant: {Merchant_ID}** page. +3. Click the **Users** tab. +4. Click **Add Merchant User**. +5. On the **CREATE MERCHANT USER** page, enter the following details: +- **E-MAIL** +- **FIRST NAME** +- **LAST NAME** +6. Click **Create**. + This opens the **Edit Merchant: {MERCHANT_ID}** page with a success message displayed. The merchant user is displayed in the list. + +7. Optional: Activate the merchant user by clicking **Activate** next to it. + This refreshes the page with a success message displayed. A password reset email has been sent to the user's email address. After resetting the password, the user can log into the Merchant Portal. + +| ATTRIBUTE | DESCRIPTION | +|-|-| +| E-MAIL | This email address is used as a username to log into the Merchant Portal. | diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/edit-merchant-users.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/edit-merchant-users.md new file mode 100644 index 00000000000..3067cfcb761 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchant-users/edit-merchant-users.md @@ -0,0 +1,35 @@ +--- +title: Edit merchant users +last_updated: Jan 24, 2024 +description: Learn how to edit merchant users in the Spryker Marketplace Back Office for your Spryker B2B projects. +template: back-office-user-guide-template +redirect_from: + - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchant-users.html + - /docs/pbc/all/merchant-management/202311.0/marketplace/manage-in-the-back-office/manage-merchant-users.html +--- + +A [merchant user](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.html) is a user that performs tasks on behalf of a merchant in the Merchant Portal. To edit a merchant user in the Back Office, follow the steps: + +1. Go to **Marketplace > Merchants**. + +2. Next to the merchant you want to edit a merchant user for, click **Edit**. + This opens the **Edit Merchant: {Merchant_ID}** page. + +3. Click the **Users** tab. + +4. Next to the merchant user you want to edit, click **Edit**. + +5. On the **Edit Merchant user** page, enter any of the following: +- **E-MAIL** +- **FIRST NAME** +- **LAST NAME** + +6. Select a **STATUS**. + +7. Click **Save** + This opens the **Edit Merchant: {MERCHANT_ID}** page with a success message displayed. The merchant user is displayed in the list. + +| ATTRIBUTE | DESCRIPTION | +|-|-| +| E-MAIL | This email address is used as a username to log into the Merchant Portal. | +| STATUS | Only users with the **Active** status have access to the Merchant Portal. To be able to active merchant users, the merchant needs to be approved. | diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants-and-merchant-users-in-the-back-office.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants-and-merchant-users-in-the-back-office.md new file mode 100644 index 00000000000..2cc999ff098 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants-and-merchant-users-in-the-back-office.md @@ -0,0 +1,28 @@ +--- +title: Manage merchants and merchant users in the Back Office +description: This section explains how to create merchant records and manage merchant records and users. +last_updated: Jan 17, 2023 +template: concept-topic-template +redirect_from: + - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/merchants.html +--- + +This section contains guides on managing merchants and merchant users in the Back Office: + +- [Create merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.html) +- [Edit merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.html) +- [View merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.html) +- [Create merchant users](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchant-users/create-merchant-users.html) +- [Edit merchant users](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchant-users/edit-merchant-users.html) + +{% include pbc/all/manage-in-the-back-office/log-into-the-back-office.md %} + + + +## Next steps + +- [Create merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.html) +- [Edit merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.html) +- [View merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.html) +- [Create merchant users](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchant-users/create-merchant-users.html) +- [Edit merchant users](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-in-the-back-office/manage-merchant-users/edit-merchant-users.html) diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md new file mode 100644 index 00000000000..621a104569a --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.md @@ -0,0 +1,32 @@ +--- +title: Create merchants +last_updated: Jan 24, 2024 +description: Learn how to create and configure merchants in the Spryker Back Office for you Spryker B2B Marketplace projects. +template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.html + - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchants.html +related: + - title: Marketplace Merchant feature overview + link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html +--- + +To create a merchant in the Back Office, follow the steps: + +1. Go to **Marketplace > Merchants**. +2. On the **Overview of Merchants** page, click **Add Merchant**. +3. On the **Create Merchant** page in the **General** tab, enter the following information: +- **NAME**. +- Optional: **REGISTRATION NUMBER**. +- **MERCHANT REFERENCE**. +- **EMAIL**. +3. Optional: To activate the merchant after creating it, select **IS ACTIVE**. +4. Optional: For **STORE RELATION**, select one or more stores to assign the merchant to. +5. For **MERCHANT URL**, enter the URLs of merchant profile per store. +6. Click **Save**. + This opens the **Overview of Merchants** page with a success message displayed. The created merchant is displayed in the list. +7. Optional: To give the merchant access to the marketplace, click **Approve Access** next to it. + This refreshes the page with a success message displayed. The merchant is now **Approved**. + + +{% include pbc/all/manage-in-the-back-office/merchant-management/manage-merchant-users/merchant-general-information-attributes.md %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md similarity index 94% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md index 6d6302fe2cf..c930fec6d36 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.md @@ -4,6 +4,7 @@ last_updated: Apr 23, 2021 description: This guide explains how to create and manage merchant records on the Merchants page. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/edit-merchants.html - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchants.html related: - title: Managing merchant users @@ -85,7 +86,7 @@ In this tab, all the fields are optional. - **LATITUDE** - **LONGITUDE** -6. Click **Save**. +6. Click **Save**. This opens the **Overview of Merchants** page with a success message displayed. | ATTRIBUTE | DESCRIPTION | @@ -102,7 +103,7 @@ In this tab, all the fields are optional. | NUMBER | Building number. | | ZIP CODE | Zip code. | | CITY | City. | -| ADDITION TO ADDRESS | Additional address information that might be useful for customers. | +| ADDITION TO ADDRESS | Additional address information that might be useful for customers. | | LATITUDE | Defines the merchant's location. | | LONGITUDE | Defines the merchant's location. | @@ -117,13 +118,13 @@ In this tab, all the fields are optional. - **TERMS AND CONDITIONS** - **DATA PRIVACY** - **IMPRINT** -3. Click **Save**. - This opens the **Overview of Merchants** page with a success message displayed. +3. Click **Save**. + This opens the **Overview of Merchants** page with a success message displayed. | ATTRIBUTE | DESCRIPTION | |-|-| | CANCELLATION POLICY | Cancellation policy. | -| TERMS AND CONDITIONS | Terms and conditions. | +| TERMS AND CONDITIONS | Terms and conditions. | | DATA PRIVACY | Data privacy statement. | | IMPRINT | Imprint information. | diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md similarity index 97% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md index cba012d30a0..7804fb9f59f 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.md @@ -4,6 +4,7 @@ last_updated: Oct 11, 2024 description: This guide explains how to view merchant records on the Merchants page. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-back-office/manage-merchants/view-merchants.html - /docs/marketplace/user/back-office-user-guides/202311.0/marketplace/merchants/managing-merchants.html related: - title: Managing merchant users diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/edit-merchant-profiles.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/edit-merchant-profiles.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/edit-merchant-profiles.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/edit-merchant-profiles.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-account-details-and-settings.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-account-details-and-settings.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-account-details-and-settings.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-account-details-and-settings.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relation-requests.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relation-requests.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relation-requests.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relation-requests.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relations.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relations.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relations.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchant-relations.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchants-in-the-merchant-portal.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchants-in-the-merchant-portal.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchants-in-the-merchant-portal.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchants-in-the-merchant-portal.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchants-performance-data.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchants-performance-data.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-merchants-performance-data.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-merchants-performance-data.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-addresses.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-addresses.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-addresses.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-addresses.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-opening-hours.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-opening-hours.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-opening-hours.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchant-opening-hours.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md similarity index 99% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md index fbe745b0247..7a1274c03d5 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.md @@ -4,6 +4,7 @@ description: Learn how to retrieve merchants in your Spryker marketplace project template: glue-api-storefront-guide-template last_updated: Jan 12, 2024 redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html - /docs/marketplace/dev/glue-api-guides/202311.0/merchants/retrieving-merchants.html related: - title: Retrieving merchant opening hours diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/manage-merchants-using-glue-api.md b/docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/manage-merchants-using-glue-api.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/manage-using-glue-api/manage-merchants-using-glue-api.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/manage-using-glue-api/manage-merchants-using-glue-api.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-b2b-contracts-and-contract-requests-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-b2b-contracts-and-contract-requests-feature-overview.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-b2b-contracts-and-contract-requests-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-b2b-contracts-and-contract-requests-feature-overview.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-commission-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-commission-feature-overview.md similarity index 99% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-commission-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-commission-feature-overview.md index e9390d8fe63..c7c7db90a3e 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-commission-feature-overview.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-commission-feature-overview.md @@ -3,6 +3,8 @@ title: Marketplace Merchant Commission feature overview last_updated: Apr 23, 2021 description: Everything you need to know about the Spryker Marketplace Merchant Commission feature for your Spryker B2B projects. template: concept-topic-template +redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-commission-feature-overview.html --- diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/main-merchant.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/main-merchant.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/main-merchant.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/main-merchant.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md similarity index 99% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md index c4202d16402..4d7953881e3 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.md @@ -10,7 +10,7 @@ related: link: docs/pbc/all/merchant-management/page.version/marketplace/manage-in-the-back-office/manage-merchants/create-merchants.html --- -A *merchant* is a seller of goods or services, either a business or a private person working in the Marketplace environment. Merchants manage their business in the *Merchant Portal*. The *Merchant Portal* lets merchants upload and manage merchant products and [offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html), define prices and stock, fulfill orders, and edit merchant profile information. Merchant can have employees who can access the Merchant Portal and perform actions on the merchant's behalf there. These employees are referred to as [*merchant users*](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.html). +A *merchant* is a seller of goods or services, either a business or a private person working in the Marketplace environment. Merchants manage their business in the *Merchant Portal*. The *Merchant Portal* lets merchants upload and manage merchant products and [offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html), define prices and stock, fulfill orders, and edit merchant profile information. Merchant can have employees who can access the Merchant Portal and perform actions on the merchant's behalf there. These employees are referred to as [*merchant users*](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.html). Merchant is the core entity of the Spryker Marketplace and the second main entity after customers since the Marketplace connects the buying customers and the selling customers. Every merchant in the Spryker Marketplace has a unique identifier in the system called *Merchant SKU*. diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md similarity index 97% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md index 840988d7703..2de1c009a76 100644 --- a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.md @@ -4,6 +4,7 @@ description: This document contains concept information for The Merchant users f template: concept-topic-template last_updated: Jan 12, 2024 redirect_from: + - /docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-feature-overview/merchant-users-overview.html - /docs/marketplace/user/features/202311.0/marketplace-merchant-feature-overview/merchant-users-overview.html related: - title: Managing merchant users diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/gui-modules.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/gui-modules.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/gui-modules.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/gui-modules.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/marketplace-merchant-portal-core-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/marketplace-merchant-portal-core-feature-overview.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/marketplace-merchant-portal-core-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/marketplace-merchant-portal-core-feature-overview.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/merchant-user.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/merchant-user.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/marketplace-merchant-portal-core-feature-overview/merchant-user.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/merchant-user.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/persistence-acl-configuration.md b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/persistence-acl-configuration.md new file mode 100644 index 00000000000..9d603ff16b9 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/marketplace-merchant-portal-core-feature-overview/persistence-acl-configuration.md @@ -0,0 +1,139 @@ +--- +title: Persistence ACL configuration +last_updated: Oct 20, 2021 +description: Learn how you can configure Persistence ACL within your Spryker Marketplace B2B project. +template: concept-topic-template +redirect_from: + - /docs/marketplace/dev/feature-walkthroughs/202311.0/persistence-acl-feature-walkthrough/persistence-acl-feature-configuration.html +--- + +Merchant Portal comes with the pre-configured [Persistence ACL](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/persistence-acl-feature-overview.html) feature to secure sensitive data. + +By default, the feature creates and assigns a set of ACL roles to merchant users to restrict access to other merchant data in the system. + +![Module dependency graph](https://confluence-connect.gliffy.net/embed/image/15952dbf-4cef-49ee-b7fa-117d39c1c525.png?utm_medium=live&utm_source=custom) + +## Merchant and MerchantUser setup workflow + +While the `Merchant` and `MerchantUser` entries are created, all the necessary ACL and Persistence ACL entities are created as well. +This ensures the correct operation of the Merchant Portal, and at the same time, protects the key merchant data. + +![New Merchant and MerchantUser sequence diagram](https://confluence-connect.gliffy.net/embed/image/54b0907f-b289-42ab-9b5c-1566959896b0.png?utm_medium=live&utm_source=custom) + +### New merchant + +When a new `Merchant` entity is added to the system, a merchant-specific role is automatically created. +This role is automatically added to all merchant users, letting them operate with the merchant-specific data: `ProductOffer`, `ProductOrder`. + +### New merchant user + +When a `MerchantUser` entity is added to the system, a merchant user-specific role is automatically created. +This role is needed to manage the merchant user-specific data, that is, the profile. + +The following roles are automatically added to a newly created merchant user: +- Merchant-specific role. +- MerchantUser-specific role. +- Product viewer for offer creation (this role is needed to create new product offers). + +## Persistence ACL configuration overview + +![Configuration overview](https://confluence-connect.gliffy.net/embed/image/97d83074-7b22-4ef0-9d6f-92fdb1ac1b01.png?utm_medium=live&utm_source=custom) + +The preceding diagram is simplified and does not represent the entire configuration. It only reflects basic concepts. +As the diagram shows, the configuration is represented by three main composite objects: +- `ProductOffer` +- `MerchantProduct` +- `SalesOrder` + +They all inherit from `Merchant`, which is also a composite object. +Each merchant has its own data segment. Thanks to this, the merchant users have access exclusively to the data of their merchant. +You can also check some entities that are configured as publicly readable: +- `\Orm\Zed\Locale\Persistence\SpyLocale` +- `\Orm\Zed\Country\Persistence\SpyCountry` +- `\Orm\Zed\Currency\Persistence\SpyCurrency` + +See the complete configuration of the `PersistenceAcl` module at [AclEntityMetadataConfigExpander](https://github.com/spryker/acl-merchant-portal/blob/master/src/Spryker/Zed/AclMerchantPortal/Business/Expander/AclEntity/AclEntityMetadataConfigExpander.php) + +## How to extend the initial Persistence ACL configuration + +Even though the Merchant Portal comes with the Persistence ACL configuration, which is fully ready for the full-fledged merchant operation and provides data protection, you can extend or override this configuration. To do this, implement `\Spryker\Zed\AclEntityExtension\Dependency\Plugin\AclEntityMetadataConfigExpanderPluginInterface`. +To override the rules that are created automatically when creating a merchant and a user's merchant, it's enough to override such methods as: +- `\Spryker\Zed\AclMerchantPortal\AclMerchantPortalConfig::getMerchantAclRoleEntityRules()` +- `\Spryker\Zed\AclMerchantPortal\AclMerchantPortalConfig::getMerchantUserAclRoleEntityRules()` + +### Configuration example of a new system object + +Let's consider an exemplary configuration of a new system entity `\Foo\Bar\MerchantSubscriber`. + +![Configuration for a new entity](https://confluence-connect.gliffy.net/embed/image/dd5b7b6e-2f65-47d8-a641-c52824b0f209.png?utm_medium=live&utm_source=custom) + +It is logical to inherit this entity from the merchant and give the merchant users the right to manage data. +This lets you restrict access to data so that only the merchant user will have access to them. + +```php +getAclEntityMetadataCollectionOrFail()->addAclEntityMetadata( + MerchantSubscriber::class, + (new AclEntityMetadataTransfer()) + ->setEntityName(MerchantSubscriber::class) + ->setParent( + (new AclEntityParentMetadataTransfer()) + ->setEntityName(SpyMerchant::class) + ) + ); + + return $aclEntityMetadataConfigTransfer; + } +} +``` + +Then, grant the rights of the merchant to users to manage the new entity: + +```php +setEntity(MerchantSubscriber::class) + ->setScope(AclEntityConstants::SCOPE_INHERITED) + ->setPermissionMask(AclEntityConstants::OPERATION_MASK_CRUD); + + return $aclEntityRuleTransfers; + } +} +``` + +{% info_block warningBox "Module updates" %} + +Do not lock [spryker/acl-merchant-portal](https://github.com/spryker/acl-merchant-portal) module version and keep it up-to-date to receive security patches for ACL in Merchant Portal. + +{% endinfo_block %} diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/merchant-category-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/merchant-category-feature-overview.md new file mode 100644 index 00000000000..82510b988e2 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/merchant-category-feature-overview.md @@ -0,0 +1,20 @@ +--- +title: Merchant Category feature overview +last_updated: Apr 23, 2021 +description: Learn all about Spryker Merchant Categories and how you can easily organise merchants to allow customers to easily find their products according to the categories. +template: concept-topic-template +redirect_from: + - /docs/marketplace/user/features/202311.0/merchant-category-feature-overview.html +--- + +As the Marketplace environment presupposes having a lot of sellers—merchants, classification and categorization of merchants arise at some point. For this purpose, the Merchant Category entity exists. By defining merchant categories for merchants, you add flexibility to the working process and let customers implement different business logic on your project. +For shoppers, it's convenient to find the necessary and relevant merchants and their products according to certain merchant categories. + +To create merchant categories, you should import them. For details, see [File details: merchant_category.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-category.csv.html). + +## Related Developer documents + +| INSTALLATION GUIDES | DATA IMPORT | +|---|---| +| [Merchant Category feature integration](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-category-feature.html) |[File details: merchant_category.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-category.csv.html) | +| [Glue API: Merchant Category integration](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-merchant-category-glue-api.html) | | diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/merchant-opening-hours-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/merchant-opening-hours-feature-overview.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/merchant-opening-hours-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/merchant-opening-hours-feature-overview.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/merchant-self-registration-feature-overview.md b/docs/pbc/all/merchant-management/202602.0/marketplace/merchant-self-registration-feature-overview.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/merchant-self-registration-feature-overview.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/merchant-self-registration-feature-overview.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/third-party-integrations/channelpilot-marketplace.md b/docs/pbc/all/merchant-management/202602.0/marketplace/third-party-integrations/channelpilot-marketplace.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/third-party-integrations/channelpilot-marketplace.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/third-party-integrations/channelpilot-marketplace.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-modules.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-modules.md new file mode 100644 index 00000000000..40fdaaab3ac --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-modules.md @@ -0,0 +1,180 @@ +--- +title: Create GUI modules +description: Learn how you can create a new GUI module within your Spryker marketplace project. +template: howto-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/dev/howtos/how-to-create-gui-module.html +--- + +This document describes how to create a new GUI module and add it to navigation. + +## Prerequisites + +To install the Marketplace Merchant Portal Core feature providing the `ZedUi`, `Navigation` and ACL related modules, follow the [Install the Marketplace Merchant Portal Core feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html). + +## 1) Create a new module + +1. Create a new folder `Pyz\Zed\ExampleMerchantPortalGui` with a controller and corresponding Twig template: + +**src/Pyz/Zed/ExampleMerchantPortalGui/Communication/Controller/ExampleController.php** + +```php +viewResponse(); + } +} +``` + +**src/Pyz/Zed/ExampleMerchantPortalGui/Presentation/Example/index.twig** + +{% raw %} + +```twig +{% extends '@ZedUi/Layout/merchant-layout-main.twig' %} +{% import _self as view %} + +{% block headTitle %} + {{ 'Test page' | trans }} +{% endblock %} + +{% block content %} + Test content +{% endblock %} + +``` + +{% endraw %} + +2. Clear the router cache: + +```bash +console router:cache:warm-up +``` + +## 2) Set up ACL rules + +1. Adjust `Spryker\Zed\AclMerchantPortal\AclMerchantPortalConfig::getMerchantAclRoleRules()`—add a newly introduced module to the allowed bundles list. + +```php + public function getMerchantAclRoleRules(): array + { + $bundleNames = [ + 'dashboard-merchant-portal-gui', + 'merchant-profile-merchant-portal-gui', + 'product-offer-merchant-portal-gui', + 'product-merchant-portal-gui', + 'sales-merchant-portal-gui', + 'dummy-merchant-portal-gui', + 'example-merchant-portal-gui', + ]; + + $ruleTransfers = []; + + foreach ($bundleNames as $bundleName) { + $ruleTransfers[] = (new RuleTransfer()) + ->setBundle($bundleName) + ->setController(static::RULE_VALIDATOR_WILDCARD) + ->setAction(static::RULE_VALIDATOR_WILDCARD) + ->setType(static::RULE_TYPE_ALLOW); + } + + return $ruleTransfers; + } +``` + +2. Add a new merchant to the `merchant.csv` data import file and run the following command: + +```bash +console data:import merchant +``` + +{% info_block warningBox "Verification" %} + +Check the `spy_acl_rule` database table and make sure that ACL rules for `example-merchant-portal-gui` bundle are introduced for a new merchant. + +{% endinfo_block %} + +3. To deny access to Back Office users, adjust `Pyz/Zed/Acl/AclConfig::getInstallerRules()` to disallow the `example-merchant-portal-gui` bundle. + +```php + public function getInstallerRules() + { + $installerRules = parent::getInstallerRules(); + $installerRules = $this->addMerchantPortalInstallerRules($installerRules); + + return $installerRules; + } + + protected function addMerchantPortalInstallerRules(array $installerRules): array + { + $bundleNames = [ + 'dashboard-merchant-portal-gui', + 'merchant-profile-merchant-portal-gui', + 'product-merchant-portal-gui', + 'product-offer-merchant-portal-gui', + 'security-merchant-portal-gui', + 'sales-merchant-portal-gui', + 'user-merchant-portal-gui', + 'dummy-merchant-portal-gui', + 'example-merchant-portal-gui', + ]; + + foreach ($bundleNames as $bundleName) { + $installerRules[] = [ + 'bundle' => $bundleName, + 'controller' => AclConstants::VALIDATOR_WILDCARD, + 'action' => AclConstants::VALIDATOR_WILDCARD, + 'type' => static::RULE_TYPE_DENY, + 'role' => AclConstants::ROOT_ROLE, + ]; + } + + return $installerRules; + } +``` + +## 3) Navigation + +1. Adjust `config/Zed/navigation.xml` with a link for a new page: + +**config/Zed/navigation.xml** + +```xml + + + + + Example + example-merchant-portal-gui + example + index + fa-chart-area + + + +``` + +2. Add a new navigation item: + +```bash +console navigation:build-cache +``` + +{% info_block warningBox "Verification" %} + +Login as a new merchant, go to any Merchant Portal page, make sure a new navigation item is presented and leads to a newly introduced page. + +{% endinfo_block %} diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-table-column-types.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-table-column-types.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-table-column-types.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-table-column-types.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-table-filter-types.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-table-filter-types.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-table-filter-types.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-table-filter-types.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-tables.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-tables.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-gui-tables.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-gui-tables.md diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-merchant-commission-calculator-type-plugins.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-merchant-commission-calculator-type-plugins.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/create-merchant-commission-calculator-type-plugins.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-merchant-commission-calculator-type-plugins.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-merchant-commission-collector-rule.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-merchant-commission-collector-rule.md new file mode 100644 index 00000000000..8e1b46391c6 --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/create-merchant-commission-collector-rule.md @@ -0,0 +1,370 @@ +--- +title: Create merchant commission collector rules +description: Learn how to create and register merchant commission collector rules to your Spryker Marketplace project. +template: howto-guide-template +last_updated: Jul 22, 2024 +--- + +This document describes how to create and register merchant commission collector rules. Collector rules are used to collect items by specific criteria. Implementing and registering a `CollectorRulePlugin` lets you build a particular query string used in the merchant commission's item condition and collect items that satisfy the condition. + +Approximate time to complete: 2 hours. + +## Prerequisites + +- [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) +- [Install the Marketplace Merchant Commission feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-commission-feature.html) + + +## 1) Adjust transfer definitions + +1. To provide the required order item data, adjust the definition of the `MerchantCommissionCalculationRequestItem` transfer object. +`MerchantCommissionCalculationRequestItemTransfer` is populated with data from the `spy_sales_order_item` database table. To provide the discount amount of the order item, add the `discountAmountAggregation` property to the transfer object. + +**src/Pyz/Shared/DiscountMerchantCommission/Transfer/discount_merchant_commission.transfer.xml** + +```xml + + + + + + + + +``` + +2. Generate the transfer objects: + +```bash +console transfer:generate +``` + +## 2) Add RuleEngineFacade to the module's dependency provider + +**src/Pyz/Zed/DiscountMerchantCommission/DiscountMerchantCommissionDependencyProvider.php** + +```php +addRuleEngineFacade($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function addRuleEngineFacade(Container $container): Container + { + $container->set(static::FACADE_RULE_ENGINE, function (Container $container) { + return $container->getLocator()->ruleEngine()->facade(); + }); + + return $container; + } +} +``` + +## 3) Implement the collector rule + +Implement a custom class used to compare the order item discount amount against the provided clause. + +**src/Pyz/Zed/DiscountMerchantCommission/Business/CollectorRule/DiscountAmountMerchantCommissionItemCollectorRuleInterface.php** + +```php + + */ + public function collect( + MerchantCommissionCalculationRequestTransfer $merchantCommissionCalculationRequestTransfer, + RuleEngineClauseTransfer $ruleEngineClauseTransfer + ): array; +} +``` + +
      + src/Pyz/Zed/DiscountMerchantCommission/Business/CollectorRule/DiscountAmountMerchantCommissionItemCollectorRule.php + +```php +ruleEngineFacade = $ruleEngineFacade; + } + + /** + * @param \Generated\Shared\Transfer\MerchantCommissionCalculationRequestTransfer $merchantCommissionCalculationRequestTransfer + * @param \Generated\Shared\Transfer\RuleEngineClauseTransfer $ruleEngineClauseTransfer + * + * @return list<\Generated\Shared\Transfer\MerchantCommissionCalculationRequestItemTransfer> + */ + public function collect( + MerchantCommissionCalculationRequestTransfer $merchantCommissionCalculationRequestTransfer, + RuleEngineClauseTransfer $ruleEngineClauseTransfer + ): array { + $clonedRuleEngineClauseTransfer = (new RuleEngineClauseTransfer())->fromArray($ruleEngineClauseTransfer->toArray()); + $clonedRuleEngineClauseTransfer = $this->convertDecimalToCent($clonedRuleEngineClauseTransfer); + + $collectedItems = []; + foreach ($merchantCommissionCalculationRequestTransfer->getItems() as $merchantCommissionCalculationRequestItemTransfer) { + if ( + $this->ruleEngineFacade->compare( + $clonedRuleEngineClauseTransfer, + $this->getUnitDiscountAmount($merchantCommissionCalculationRequestItemTransfer), + ) + ) { + $collectedItems[] = $merchantCommissionCalculationRequestItemTransfer; + } + } + + return $collectedItems; + } + + /** + * @param \Generated\Shared\Transfer\RuleEngineClauseTransfer $ruleEngineClauseTransfer + * + * @return \Generated\Shared\Transfer\RuleEngineClauseTransfer + */ + protected function convertDecimalToCent(RuleEngineClauseTransfer $ruleEngineClauseTransfer): RuleEngineClauseTransfer + { + return $ruleEngineClauseTransfer->setValue((int)($ruleEngineClauseTransfer->getValueOrFail() * 100)); + } + + /** + * @param \Generated\Shared\Transfer\MerchantCommissionCalculationRequestItemTransfer $merchantCommissionCalculationRequestItemTransfer + * + * @return int + */ + protected function getUnitDiscountAmount(MerchantCommissionCalculationRequestItemTransfer $merchantCommissionCalculationRequestItemTransfer): int + { + return (int)($merchantCommissionCalculationRequestItemTransfer->getDiscountAmountFullAggregation() / $merchantCommissionCalculationRequestItemTransfer->getQuantityOrFail()); + } +} +``` + + + +## 4) Introduce a factory method to create the collector rule class + +**src/Pyz/Zed/DiscountMerchantCommission/Business/DiscountMerchantCommissionBusinessFactory.php** + +```php +getRuleEngineFacade()); + } + + /** + * @return \Spryker\Zed\RuleEngine\Business\RuleEngineFacadeInterface + */ + public function getRuleEngineFacade(): RuleEngineFacadeInterface + { + return $this->getProvidedDependency(DiscountMerchantCommissionDependencyProvider::FACADE_RULE_ENGINE); + } +} +``` + +## 5) Introduce a facade method to collect commissionable items by discount amount + +**src/Pyz/Zed/DiscountMerchantCommission/Business/DiscountMerchantCommissionFacadeInterface.php** + +```php + + */ + public function collectByDiscountAmount( + MerchantCommissionCalculationRequestTransfer $merchantCommissionCalculationRequestTransfer, + RuleEngineClauseTransfer $ruleEngineClauseTransfer + ): array; +} +``` + +**src/Pyz/Zed/DiscountMerchantCommission/Business/DiscountMerchantCommissionFacade.php** + +```php + + */ + public function collectByDiscountAmount( + MerchantCommissionCalculationRequestTransfer $merchantCommissionCalculationRequestTransfer, + RuleEngineClauseTransfer $ruleEngineClauseTransfer + ): array { + return $this->getFactory() + ->createDiscountAmountMerchantCommissionItemCollectorRule() + ->collect($merchantCommissionCalculationRequestTransfer, $ruleEngineClauseTransfer); + } +} +``` + +## 6) Implement the collector rule plugin + +The plugin will call our `DiscountAmountMerchantCommissionItemCollectorRule` class to collect order items. In our example, the plugin only accepts the `number` data type, but you can adjust it to accept other data types, like `list` or `string`. +The `getFieldName()` method returns the field name as it's used in the item collector query string–for example, `discount-amount >= '100'`. + +```php + + */ + public function collect(TransferInterface $collectableTransfer, RuleEngineClauseTransfer $ruleEngineClauseTransfer): array + { + return $this->getFacade()->collectByDiscountAmount($collectableTransfer, $ruleEngineClauseTransfer); + } + + /** + * @return string + */ + public function getFieldName(): string + { + return 'discount-amount'; + } + + /** + * @return list + */ + public function acceptedDataTypes(): array + { + return ['number']; + } +} +``` + +## 6) Register a new collector rule plugin + +To register the plugin, add it to the `MerchantCommissionDependencyProvider::getRuleEngineCollectorRulePlugins()` method. + +**src/Pyz/Zed/MerchantCommission/MerchantCommissionDependencyProvider.php** + +```php + + */ + protected function getRuleEngineCollectorRulePlugins(): array + { + return [ + new DiscountAmountMerchantCommissionItemCollectorRulePlugin(), + ]; + } +} +``` + +Now you can import merchant commissions with item conditions based on order item discount amount value and calculate commissions for collected items. diff --git a/docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/extend-gui-tables.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/extend-gui-tables.md similarity index 100% rename from docs/pbc/all/merchant-management/202512.0/marketplace/tutorials-and-howtos/extend-gui-tables.md rename to docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/extend-gui-tables.md diff --git a/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/extend-merchant-portal-dashboard.md b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/extend-merchant-portal-dashboard.md new file mode 100644 index 00000000000..39fce4285fa --- /dev/null +++ b/docs/pbc/all/merchant-management/202602.0/marketplace/tutorials-and-howtos/extend-merchant-portal-dashboard.md @@ -0,0 +1,71 @@ +--- +title: "Extend Merchant Portal dashboard" +description: Learn how to extend the merchant portal dashboards in the merchant portal within your Spryker projects. +template: howto-guide-template +last_updated: Nov 17, 2023 +redirect_from: + - /docs/marketplace/dev/howtos/how-to-extend-merchant-portal-dashboard.html +--- + +This document describes how to extend the Merchant Portal dashboard. + +## 1) Create a plugin + +Introduce a new plugin which implements `Spryker\Zed\DashboardMerchantPortalGuiExtension\Dependency\Plugin\MerchantDashboardCardPluginInterface`, for example: + +```php +setTitle('Card title') + ->setContent('Card content') + ->setActionButtons(new ArrayObject([ + (new MerchantDashboardActionButtonTransfer()) + ->setTitle('Button title') + ->setUrl('button-url'), + ])); + } +} +``` + +## 2) Register a plugin + +Add a newly introduced plugin to `Pyz\Zed\DashboardMerchantPortalGui\DashboardMerchantPortalGuiDependencyProvider`: + +```php + diff --git a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md b/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md deleted file mode 100644 index 2d47b4aed28..00000000000 --- a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Queue Data Import feature -description: This guide will navigate you through the process of integrating the Queue Data feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/queue-data-import-feature-integration -originalArticleId: 2181f26d-9254-4213-a2a8-e1544f9bdfea -redirect_from: - - /2021080/docs/queue-data-import-feature-integration - - /2021080/docs/en/queue-data-import-feature-integration - - /docs/queue-data-import-feature-integration - - /docs/en/queue-data-import-feature-integration - - /docs/scos/dev/feature-integration-guides/202212.0/queue-data-import-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/queue-data-import-feature-integration.html -related: - - title: Data import - link: docs/dg/dev/data-import/page.version/data-import.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-queue-data-import-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md b/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md deleted file mode 100644 index 406012d911b..00000000000 --- a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the REST Schema Validation Glue API -description: This guide will navigate you through the process of installing and configuring the REST Schema Validation feature in Spryker OS. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-rest-schema-validation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-rest-schema-validation-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md b/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md deleted file mode 100644 index c70d0282f36..00000000000 --- a/docs/pbc/all/miscellaneous/202410.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Install the Spryker Core Glue API -description: Learn how to install the Spryker Core feature in your project using the Spryker GLUE API. -last_updated: Jun 17, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-spryker-core-feature-integration -originalArticleId: e7a1a56e-b305-4a95-87b4-7cf7d6868603 -redirect_from: - - /2021080/docs/glue-api-spryker-core-feature-integration - - /2021080/docs/en/glue-api-spryker-core-feature-integration - - /docs/glue-api-spryker-core-feature-integration - - /docs/en/glue-api-spryker-core-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-glue-application-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-glue-application-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-installation-and-configuration.html -related: - - title: Install the Spryker Core feature - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-features/install-the-spryker-core-feature.html - - title: Spryker Core feature walkthrough - link: docs/pbc/all/miscellaneous/page.version/spryker-core-feature-overview/spryker-core-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-spryker-core-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-features/install-the-permissions-feature.md b/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-features/install-the-permissions-feature.md deleted file mode 100644 index 804ad7f580b..00000000000 --- a/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-features/install-the-permissions-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Permissions feature -description: The guide provides a step-by-step procedure to install the Permissions feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/permissions-feature-integration -originalArticleId: d694ce3f-d8ca-45a6-83df-b77ba6111f60 -redirect_from: - - /2021080/docs/permissions-feature-integration - - /2021080/docs/en/permissions-feature-integration - - /docs/permissions-feature-integration - - /docs/en/permissions-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/permissions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/permissions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/permissions-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-permissions-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md b/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md deleted file mode 100644 index 406012d911b..00000000000 --- a/docs/pbc/all/miscellaneous/202507.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the REST Schema Validation Glue API -description: This guide will navigate you through the process of installing and configuring the REST Schema Validation feature in Spryker OS. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-rest-schema-validation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-rest-schema-validation-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md deleted file mode 100644 index e1ec9df674d..00000000000 --- a/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Glue API: Add push notification providers" -description: Learn how to add push notification providers using Spryker Glue API in your Spryker projects. -last_updated: Dec 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you add push notification providers to further subscribe to notifications. - -## Installation - -[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) - -## Retrieve push notification providers - -*** -`POST` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers** -*** - - - -| PATH | DESCRIPTION | -| --- | --- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | - - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - - -Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` - -```json -{ - "data": { - "type": "push-notificatoin-providers", - "attributes": { - "name": "Fulfillment App provider" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} - - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "push-notification-providers", - "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "attributes": { - "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "name": "Fulfillment App provider" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - - -## Possible errors - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md deleted file mode 100644 index 4f622909f91..00000000000 --- a/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "Glue API: Update push notification providers" -description: Learn how to update push notification providers using the Spryker Glue API for your Spryker projects. -last_updated: Dec 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you update push notification providers. - -## Installation - -[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) - -## Retrieve push notification providers - -*** -`PATCH` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers/{% raw %}*{{push_notification_provider_id}}*{% endraw %}** -*** - - - -| PATH | DESCRIPTION | -| --- | --- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | -| {% raw %}***{{push_notification_provider_id}}***{% endraw %} | ID of a push notification provider to update. | - - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - - -Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` - -```json -{ - "data": { - "type": "push-notificatoin-providers", - "attributes": { - "name": "FA provider" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "push-notification-providers", - "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "attributes": { - "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "name": "FA provider" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - - -## Possible errors - -| CODE | REASON | -| --- | --- | -|5001| The push notification provider with the specified ID doesn't exist. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-permissions-feature.md b/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-permissions-feature.md deleted file mode 100644 index 804ad7f580b..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-permissions-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Permissions feature -description: The guide provides a step-by-step procedure to install the Permissions feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/permissions-feature-integration -originalArticleId: d694ce3f-d8ca-45a6-83df-b77ba6111f60 -redirect_from: - - /2021080/docs/permissions-feature-integration - - /2021080/docs/en/permissions-feature-integration - - /docs/permissions-feature-integration - - /docs/en/permissions-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/permissions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/permissions-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/permissions-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-permissions-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md b/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md deleted file mode 100644 index 2d47b4aed28..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Queue Data Import feature -description: This guide will navigate you through the process of integrating the Queue Data feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/queue-data-import-feature-integration -originalArticleId: 2181f26d-9254-4213-a2a8-e1544f9bdfea -redirect_from: - - /2021080/docs/queue-data-import-feature-integration - - /2021080/docs/en/queue-data-import-feature-integration - - /docs/queue-data-import-feature-integration - - /docs/en/queue-data-import-feature-integration - - /docs/scos/dev/feature-integration-guides/202212.0/queue-data-import-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/queue-data-import-feature-integration.html -related: - - title: Data import - link: docs/dg/dev/data-import/page.version/data-import.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-queue-data-import-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md b/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md deleted file mode 100644 index 3681da324d4..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Spryker Core feature -description: The procedure to integrate Spryker Core feature into your Spryker Cloud Commerce OS project. -last_updated: May 20, 2025 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-feature-integration -originalArticleId: f99d3cf9-e933-4a3b-888e-72cf8f4ea31b -redirect_from: - - /2021080/docs/spryker-core-feature-integration - - /2021080/docs/en/spryker-core-feature-integration - - /docs/spryker-core-feature-integration - - /docs/en/spryker-core-feature-integration - - /v20/docs/install-core-module - - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-feature-integration.html - - /docs/pbc/all/miscellaneous/202403.0/install-and-upgrade/install-features/install-the-spryker-core-feature.html - - /docs/pbc/all/miscellaneous/202505.0/install-and-upgrade/install-features/install-the-spryker-core-feature.html -related: - - title: Install the Spryker Core Glue API - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html - - title: Spryker Core feature walkthrough - link: docs/pbc/all/miscellaneous/page.version/spryker-core-feature-overview/spryker-core-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md b/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md deleted file mode 100644 index 406012d911b..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the REST Schema Validation Glue API -description: This guide will navigate you through the process of installing and configuring the REST Schema Validation feature in Spryker OS. -template: feature-integration-guide-template -last_updated: Nov 17, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-rest-schema-validation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-rest-schema-validation-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md b/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md deleted file mode 100644 index c70d0282f36..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Install the Spryker Core Glue API -description: Learn how to install the Spryker Core feature in your project using the Spryker GLUE API. -last_updated: Jun 17, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-spryker-core-feature-integration -originalArticleId: e7a1a56e-b305-4a95-87b4-7cf7d6868603 -redirect_from: - - /2021080/docs/glue-api-spryker-core-feature-integration - - /2021080/docs/en/glue-api-spryker-core-feature-integration - - /docs/glue-api-spryker-core-feature-integration - - /docs/en/glue-api-spryker-core-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-spryker-core-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-glue-application-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-glue-application-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-installation-and-configuration.html -related: - - title: Install the Spryker Core feature - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-features/install-the-spryker-core-feature.html - - title: Spryker Core feature walkthrough - link: docs/pbc/all/miscellaneous/page.version/spryker-core-feature-overview/spryker-core-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-spryker-core-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md deleted file mode 100644 index e1ec9df674d..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Glue API: Add push notification providers" -description: Learn how to add push notification providers using Spryker Glue API in your Spryker projects. -last_updated: Dec 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you add push notification providers to further subscribe to notifications. - -## Installation - -[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) - -## Retrieve push notification providers - -*** -`POST` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers** -*** - - - -| PATH | DESCRIPTION | -| --- | --- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | - - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - - -Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` - -```json -{ - "data": { - "type": "push-notificatoin-providers", - "attributes": { - "name": "Fulfillment App provider" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} - - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "push-notification-providers", - "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "attributes": { - "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "name": "Fulfillment App provider" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - - -## Possible errors - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md b/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md deleted file mode 100644 index ff8ac7ebfc7..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: "Glue API: Retrieve push notification providers" -description: Learn how to retrieve push notification providers using the Spryker Glue API for your Spryker projects. -last_updated: Dec 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you retrieve push notification providers to further subscribe to notifications. - -## Installation - -[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) - -## Retrieve push notification providers - -*** -`GET` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers** -*** - - - -| PATH | DESCRIPTION | -| --- | --- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | - - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - - -Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` - -### Response - -
      -Retrieve push notification providers - -```json -{ - "data": [ - { - "type": "push-notification-providers", - "id": "2a304ddf-d51b-514f-bd11-6e818a27fe23", - "attributes": { - "uuid": "2a304ddf-d51b-514f-bd11-6e818a27fe23", - "name": "web-push-php" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" - } - }, - { - "type": "push-notification-providers", - "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "attributes": { - "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "name": "Fulfillment App provider" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" - } - } - ], - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers" - } -} -``` - -
      - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - -## Retrieve a push notification provider - - -*** -`GET` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers/*{% raw %}*{{push_notification_provider_id}}{% endraw %}*** -*** - - -| PATH PARAMETER | DESCRIPTON | -| ------------------ | -------------------- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | -| {% raw %}***{{push_notification_provider_id}}***{% endraw %} | ID of a push notification provider to retrieve. To get it, [retrieve push notification providers](#retrieve-push-notification-providers). | - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| ------------- | ------------ | -------- | ------------------------------------------------------------ | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - -Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` - -### Response - -Response sample: - -```json -{ - "data": { - "type": "push-notification-providers", - "id": "2a304ddf-d51b-514f-bd11-6e818a27fe23", - "attributes": { - "uuid": "2a304ddf-d51b-514f-bd11-6e818a27fe23", - "name": "web-push-php" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - - - -## Possible errors - -| CODE | REASON | -| --- | --- | -|5001| The push notification provider with the specified ID doesn't exist. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md deleted file mode 100644 index 4f622909f91..00000000000 --- a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "Glue API: Update push notification providers" -description: Learn how to update push notification providers using the Spryker Glue API for your Spryker projects. -last_updated: Dec 23, 2023 -template: glue-api-storefront-guide-template ---- - -This endpoint lets you update push notification providers. - -## Installation - -[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) - -## Retrieve push notification providers - -*** -`PATCH` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers/{% raw %}*{{push_notification_provider_id}}*{% endraw %}** -*** - - - -| PATH | DESCRIPTION | -| --- | --- | -| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | -| {% raw %}***{{push_notification_provider_id}}***{% endraw %} | ID of a push notification provider to update. | - - - -### Request - -| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | -| --- | --- | --- | --- | -| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | - - -Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` - -```json -{ - "data": { - "type": "push-notificatoin-providers", - "attributes": { - "name": "FA provider" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} - - -### Response - -Response sample: - -```json -{ - "data": { - "type": "push-notification-providers", - "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "attributes": { - "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", - "name": "FA provider" - }, - "links": { - "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" - } - } -} -``` - - -{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} - - - -## Possible errors - -| CODE | REASON | -| --- | --- | -|5001| The push notification provider with the specified ID doesn't exist. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/crawler-control.md b/docs/pbc/all/miscellaneous/202602.0/crawler-control.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/crawler-control.md rename to docs/pbc/all/miscellaneous/202602.0/crawler-control.md diff --git a/docs/pbc/all/miscellaneous/202512.0/import-and-export-data/import-file-details-glossary.csv.md b/docs/pbc/all/miscellaneous/202602.0/import-and-export-data/import-file-details-glossary.csv.md similarity index 95% rename from docs/pbc/all/miscellaneous/202512.0/import-and-export-data/import-file-details-glossary.csv.md rename to docs/pbc/all/miscellaneous/202602.0/import-and-export-data/import-file-details-glossary.csv.md index b9c6dea56e0..afb5f06962b 100644 --- a/docs/pbc/all/miscellaneous/202512.0/import-and-export-data/import-file-details-glossary.csv.md +++ b/docs/pbc/all/miscellaneous/202602.0/import-and-export-data/import-file-details-glossary.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-glossarycsv originalArticleId: 8933e30e-35fd-4c8b-be0c-78c4b38054f8 redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/import-and-export-data/import-file-details-glossary.csv.html - /2021080/docs/file-details-glossarycsv - /2021080/docs/en/file-details-glossarycsv - /docs/file-details-glossarycsv diff --git a/docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-features/install-the-permissions-feature.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-permissions-feature.md similarity index 100% rename from docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-features/install-the-permissions-feature.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-permissions-feature.md diff --git a/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-push-notification-feature.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-push-notification-feature.md new file mode 100644 index 00000000000..e1099afab2d --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-push-notification-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Push Notification feature +description: Learn how to integrate the Push notification feature into your Spryker Cloud Commerce OS project +last_updated: Sep 9, 2024 +template: feature-integration-guide-template +redirect_From: + - /docs/scos/dev/feature-integration-guides/202311.0/install-the-push-notification-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-push-notification-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md similarity index 100% rename from docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-queue-data-import-feature.md diff --git a/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-sitemap-feature.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-sitemap-feature.md new file mode 100644 index 00000000000..3c0d65348fd --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-sitemap-feature.md @@ -0,0 +1,409 @@ +--- +title: Install the Sitemap feature +description: Learn the prerequisites and how to enable and integrate Sitemap feature into a Spryker based project. +last_updated: Feb 19, 2026 +template: howto-guide-template +redirect_from: + - /docs/dg/dev/integrate-and-configure/integrate-sitemap-generation.html + - /docs/pbc/all/miscellaneous/202505.0/install-and-upgrade/install-features/install-the-sitemap-feature.html +--- + + +The Sitemap feature generates sitemaps for your Spryker application, enhancing SEO by helping search engines index your pages efficiently. It offers various configuration options to customize sitemap generation. This document explains how to integrate the Sitemap module into a Spryker project. + + +## Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-----------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + + +## 1) Install modules + +1. Install the required modules using Composer: + +```bash +composer require spryker/sitemap:"^1.0.0" spryker/sitemap-extension:"^1.1.0" spryker-shop/shop-ui:"^1.85.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|------------------------------------| +| Sitemap | vendor/spryker/sitemap | +| SitemapExtension | vendor/spryker/sitemap-extension | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +2. Optional: To enable sitemap functionality to include additional types of data, install the following modules using Composer: + +```bash +composer require spryker/category-storage:"^2.11.0" spryker/cms-storage:"^2.9.0" spryker/merchant-storage:"^1.4.0" spryker/product-set-storage:"^1.12.0" spryker/product-storage:"^1.43.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------------|------------------------------------| +| CategoryStorage | vendor/spryker/category-storage | +| CmsStorage | vendor/spryker/cms-storage | +| MerchantStorage | vendor/spryker/merchant-storage | +| ProductSetStorage| vendor/spryker/product-set-storage | +| ProductStorage | vendor/spryker/product-storage | +| Sitemap | vendor/spryker/sitemap | +| SitemapExtension | vendor/spryker/sitemap-extension | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +## 2) Adjust configuration + + +Adjust the following configuration. + +### 2.1) Configure the filesystem service for sitemap + + +{% info_block infoBox "Storage requirements" %} + +Sitemap files can be large, especially for stores with a large product catalog. Make sure your S3 storage has sufficient space and monitor your local cache directory to prevent excessive disk usage. + +{% endinfo_block %} + +Add the configuration for regular and caching filesystems: + + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\Sitemap\SitemapConstants; + +$config[FileSystemConstants::FILESYSTEM_SERVICE] = [ + SitemapConstants::FILESYSTEM_NAME => [ + 'sprykerAdapterClass' => Aws3v3FilesystemBuilderPlugin::class, + 'path' => '/', + 'key' => 'YOUR_AWS_KEY', + 'secret' => 'YOUR_AWS_SECRET', + 'bucket' => 'YOUR_AWS_BUCKET', + 'region' => 'YOUR_AWS_REGION', + ], + SitemapConstants::FILESYSTEM_NAME_CACHE => [ + 'sprykerAdapterClass' => LocalFilesystemBuilderPlugin::class, + 'root' => APPLICATION_ROOT_DIR . '/data/sitemaps/cache', + 'path' => '/', + ], +``` + +
      + +For more details on sitemap caching, see [Configure Sitemap caching interval](#configure-the-sitemap-caching-interval). + + +### 2.2) Configure the base URL and host mappings for sitemap + +The following configuration ensures that the application uses the correct hostnames based on the mode it's operating in: + +- When Dynamic Store is disabled, `STORE_TO_YVES_HOST_MAPPING` is used to map stores to hostnames +- When Dynamic Store is enabled, `REGION_TO_YVES_HOST_MAPPING` is used to map regions to hostnames + +**config/Shared/config_default.php** + +```php +$config[SitemapConstants::BASE_URL_YVES_PORT] = $yvesPort; + +$config[SitemapConstants::STORE_TO_YVES_HOST_MAPPING] = [ + 'DE' => getenv('SPRYKER_YVES_HOST_DE'), + 'AT' => getenv('SPRYKER_YVES_HOST_AT'), + 'US' => getenv('SPRYKER_YVES_HOST_US'), +]; + +$config[SitemapConstants::REGION_TO_YVES_HOST_MAPPING] = [ + 'EU' => getenv('SPRYKER_YVES_HOST_EU'), + 'US' => getenv('SPRYKER_YVES_HOST_US'), +]; +``` + + + +### 2.3) Add a Jenkins job for sitemap generation + +1. Add the following configuration: + +**config/Zed/cronjobs/jenkins.php** + +```php +$jobs[] = [ + 'name' => 'generate-sitemap-files', + 'command' => '$PHP_BIN vendor/bin/console sitemap:generate', + 'schedule' => '0 0 * * *', + 'enable' => true, +]; +``` + +2. Apply the updated cron job configuration: + +```bash +vendor/bin/console scheduler:setup +``` + +### 2.4) Configure the sitemap caching interval + +The caching mechanism minimizes the number of requests to the S3 Bucket. When the first request is made, a copy of the sitemap file is stored locally. Subsequent requests use the cached version instead of fetching the file from S3 again. The cached file remains valid if its last updated date is within the interval specified by the `getSitemapFileTimeThreshold()` method, which returns the interval in seconds. By default, this interval is set to 86400 seconds or 24 hours. You can adjust it by extending the `SitemapConfig` class and overriding the `getSitemapFileTimeThreshold()` method. + +**src/Pyz/Yves/Sitemap/SitemapConfig.php** + +```php + +src/Pyz/Yves/Router/RouterDependencyProvider.php + +```php + + +
      +src/Pyz/Zed/Console/ConsoleDependencyProvider.php + +```php + + +
      +src/Pyz/Zed/Sitemap/SitemapDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +Generate a sitemap: + +```bash +vendor/bin/console sitemap:generate +``` + +Make sure you can access the sitemap by sending a request to `https://yves.eu.mysprykershop.com/sitemap.xml`. + +{% endinfo_block %} diff --git a/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md new file mode 100644 index 00000000000..f607bdc42ea --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-features/install-the-spryker-core-feature.md @@ -0,0 +1,30 @@ +--- +title: Install the Spryker Core feature +description: The procedure to integrate Spryker Core feature into your Spryker Cloud Commerce OS project. +last_updated: May 20, 2025 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/spryker-core-feature-integration +originalArticleId: f99d3cf9-e933-4a3b-888e-72cf8f4ea31b +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-features/install-the-spryker-core-feature.html + - /2021080/docs/spryker-core-feature-integration + - /2021080/docs/en/spryker-core-feature-integration + - /docs/spryker-core-feature-integration + - /docs/en/spryker-core-feature-integration + - /v20/docs/install-core-module + - /docs/scos/dev/feature-integration-guides/202200.0/spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201811.0/spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202212.0/spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/spryker-core-feature-integration.html + - /docs/pbc/all/miscellaneous/202403.0/install-and-upgrade/install-features/install-the-spryker-core-feature.html + - /docs/pbc/all/miscellaneous/202505.0/install-and-upgrade/install-features/install-the-spryker-core-feature.html +related: + - title: Install the Spryker Core Glue API + link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html + - title: Spryker Core feature walkthrough + link: docs/pbc/all/miscellaneous/page.version/spryker-core-feature-overview/spryker-core-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-spryker-core-feature.md %} diff --git a/docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md similarity index 100% rename from docs/pbc/all/miscellaneous/202404.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-rest-schema-validation-glue-api.md diff --git a/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md new file mode 100644 index 00000000000..b99cc91ee2a --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.md @@ -0,0 +1,29 @@ +--- +title: Install the Spryker Core Glue API +description: Learn how to install the Spryker Core feature in your project using the Spryker GLUE API. +last_updated: Jun 17, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-spryker-core-feature-integration +originalArticleId: e7a1a56e-b305-4a95-87b4-7cf7d6868603 +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html + - /2021080/docs/glue-api-spryker-core-feature-integration + - /2021080/docs/en/glue-api-spryker-core-feature-integration + - /docs/glue-api-spryker-core-feature-integration + - /docs/en/glue-api-spryker-core-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-spryker-core-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202212.0/glue-api/glue-api-glue-application-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-glue-application-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-installation-and-configuration.html +related: + - title: Install the Spryker Core feature + link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-features/install-the-spryker-core-feature.html + - title: Spryker Core feature walkthrough + link: docs/pbc/all/miscellaneous/page.version/spryker-core-feature-overview/spryker-core-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-spryker-core-glue-api.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-api-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-api-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-api-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-api-module.md diff --git a/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.md new file mode 100644 index 00000000000..2b7b400be51 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.md @@ -0,0 +1,19 @@ +--- +title: Upgrade the Collector module +description: Use the guide to update versions to the newer ones of the Collector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-collector +originalArticleId: 975dcda9-cfad-4a74-834b-c88c25a83771 +redirect_from: + - docs/scos/dev/module-migration-guides/201811.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/201903.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/201907.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/202001.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/202005.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/202009.0/migration-guide-collector.html + - docs/scos/dev/module-migration-guides/202108.0/migration-guide-collector.html + - /docs/scos/dev/module-migration-guides/migration-guide-collector.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-collector-module.md %} diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-flysystem-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-flysystem-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-flysystem-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-flysystem-module.md diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-monitoring-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-monitoring-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-monitoring-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-monitoring-module.md diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quote-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quote-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quote-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quote-module.md diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-rabbitmq-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-rabbitmq-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-rabbitmq-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-rabbitmq-module.md diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-setup-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-setup-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-setup-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-setup-module.md diff --git a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-transfer-module.md b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-transfer-module.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-transfer-module.md rename to docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-transfer-module.md diff --git "a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" "b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" similarity index 91% rename from "docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" rename to "docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" index bc46925c1be..a6d7f9f8513 100644 --- "a/docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" +++ "b/docs/pbc/all/miscellaneous/202602.0/install-and-upgrade/upgrade-modules/upgrade\342\200\223the-console-module.md" @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-console originalArticleId: 212964c4-49d0-49c3-9750-e5821f0ed974 redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/install-and-upgrade/upgrade-modules/upgrade–the-console-module.html - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-console.html - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-console.html - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-console.html diff --git a/docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/add-translations.md b/docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/add-translations.md new file mode 100644 index 00000000000..5116f5e77c9 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/add-translations.md @@ -0,0 +1,39 @@ +--- +title: Add translations +description: Learn how to add new translations in the Spryker Cloud Commerce OS Back Office to your Spryker projects. +last_updated: June 3, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-glossary +originalArticleId: a485b9af-b90b-4847-904c-3f87891de5c9 +redirect_from: + - /2021080/docs/managing-glossary + - /2021080/docs/en/managing-glossary + - /docs/managing-glossary + - /docs/en/managing-glossary + - /docs/scos/user/back-office-user-guides/202200.0/administration/glossary/managing-glossary.html + - /docs/scos/user/back-office-user-guides/202204.0/administration/glossary/managing-glossary.html + - /docs/scos/user/back-office-user-guides/202204.0/administration/glossary/add-translations.html +--- + +To add a translation in the Back Office, follow the steps: + +1. Go to the **Administration > Glossary**. +2. On the **Glossary** page, click **Create Translation**. +3. On the **Create Translation** page, enter a **NAME**. +4. Optional: Enter translations per locale. +5. Click **Save**. + This opens the **Glossary** page with a success message displayed. The translation is displayed in the list. +6. Ask your development team to add the translation on the code level. + Now you can add translations to content. See [Next steps](#next-steps) for details. + +![Example of translations](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Glossary/Managing+Glossary/managing-glossary.png) + +## Reference information: NAME + +A **NAME** of a translation is a glossary key, a unique identifier of the translation. You use it to add translations to different types of content. When the content is rendered on the Storefront, the glossary key is replaced with a translation based on selected locale and the translation you entered for the locale. + + +## Next steps + +- Add translations to CMS block by editing [placeholders in CMS blocks](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/blocks/edit-placeholders-in-cms-blocks.html). +- Add translations to CMS page by editing [placeholders in CMS pages](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/manage-in-the-back-office/pages/edit-cms-pages.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-in-the-back-office/edit-translations.md b/docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/edit-translations.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/manage-in-the-back-office/edit-translations.md rename to docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/edit-translations.md diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-in-the-back-office/manage-translations-in-the-back-office.md b/docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/manage-translations-in-the-back-office.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/manage-in-the-back-office/manage-translations-in-the-back-office.md rename to docs/pbc/all/miscellaneous/202602.0/manage-in-the-back-office/manage-translations-in-the-back-office.md diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md similarity index 97% rename from docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md rename to docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md index 30c55985ebb..af0d95d7f5f 100644 --- a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md +++ b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md @@ -3,6 +3,8 @@ title: "Glue API: Add push notification subscriptions" description: Learn how to add push notification subscription using Spryker Glue API to your Spryker Projects. last_updated: Dec 23, 2023 template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.html --- This endpoint lets you subscribe to push notifications using Glue API. diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-retrieve-store-configuration.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-retrieve-store-configuration.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/glue-api-retrieve-store-configuration.md rename to docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/glue-api-retrieve-store-configuration.md diff --git a/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md new file mode 100644 index 00000000000..355aebae16b --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md @@ -0,0 +1,82 @@ +--- +title: "Glue API: Add push notification providers" +description: Learn how to add push notification providers using Spryker Glue API in your Spryker projects. +last_updated: Dec 23, 2023 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.html +--- + +This endpoint lets you add push notification providers to further subscribe to notifications. + +## Installation + +[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) + +## Retrieve push notification providers + +*** +`POST` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers** +*** + + + +| PATH | DESCRIPTION | +| --- | --- | +| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | + + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | + + +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` + +```json +{ + "data": { + "type": "push-notificatoin-providers", + "attributes": { + "name": "Fulfillment App provider" + } + } +} +``` + + +{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} + + + +### Response + +Response sample: + +```json +{ + "data": { + "type": "push-notification-providers", + "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", + "attributes": { + "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", + "name": "Fulfillment App provider" + }, + "links": { + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + } + } +} +``` + + +{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} + + + +## Possible errors + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md similarity index 92% rename from docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md rename to docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md index abd52447022..fb700802486 100644 --- a/docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md @@ -3,6 +3,8 @@ title: "Glue API: Delete push notification providers" description: Learn how to delete push notification providers using Spryker Glue API for your Spryker projects. last_updated: Dec 23, 2023 template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.html --- This endpoint lets you delete push notification providers. diff --git a/docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md similarity index 100% rename from docs/pbc/all/miscellaneous/202507.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md rename to docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md diff --git a/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md new file mode 100644 index 00000000000..c1c9c2aca96 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md @@ -0,0 +1,86 @@ +--- +title: "Glue API: Update push notification providers" +description: Learn how to update push notification providers using the Spryker Glue API for your Spryker projects. +last_updated: Dec 23, 2023 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.html +--- + +This endpoint lets you update push notification providers. + +## Installation + +[Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) + +## Retrieve push notification providers + +*** +`PATCH` **{% raw %}*{{backend_url}}*{% endraw %}/push-notification-providers/{% raw %}*{{push_notification_provider_id}}*{% endraw %}** +*** + + + +| PATH | DESCRIPTION | +| --- | --- | +| {% raw %}***{{backend_url}}***{% endraw %} | URL of your Backend Glue API. | +| {% raw %}***{{push_notification_provider_id}}***{% endraw %} | ID of a push notification provider to update. | + + + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | + + +Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` + +```json +{ + "data": { + "type": "push-notificatoin-providers", + "attributes": { + "name": "FA provider" + } + } +} +``` + + +{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-request-attributes.md %} + + +### Response + +Response sample: + +```json +{ + "data": { + "type": "push-notification-providers", + "id": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", + "attributes": { + "uuid": "ffb5875e-00d3-5436-ae67-08b7c9837f3e", + "name": "FA provider" + }, + "links": { + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + } + } +} +``` + + +{% include pbc/all/glue-api-guides/{{page.version}}/push-notification-providers-response-attributes.md %} + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +|5001| The push notification provider with the specified ID doesn't exist. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/miscellaneous/202602.0/push-notification-feature-overview.md b/docs/pbc/all/miscellaneous/202602.0/push-notification-feature-overview.md new file mode 100644 index 00000000000..7a262b65f5f --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/push-notification-feature-overview.md @@ -0,0 +1,49 @@ +--- +title: Push Notification feature overview +description: The Push Notifications feature lets you receive push notifications +last_updated: Feb 2, 2023 +template: concept-topic-template +redirect_from: + - /docs/scos/user/features/202311.0/push-notification-feature-overview.html + - /docs/pbc/all/push-notification/202311.0/unified-commerce/push-notification-feature-overview.html +--- + +The *Push Notification* feature lets users subscribe to the web push notifications, which are sent from the server to all registered subscriptions. + +## Key pair + +To set up the process, you need to generate a private and public key pair. These two keys are generated once for a website and are known as *Voluntary Application Server Identification for Web Push (VAPID)* keys. The private key must be hidden from the end user and must only be used on the server side to encrypt created notifications. The utilization of VAPID protection guarantees that only authorized servers are permitted to send notifications to clients. + +## Subscribing to notifications + +To let users subscribe to the web push notifications, the site page needs a service worker with which the user is registered on the server and received messages are processed. The service worker is downloaded to the user's platform in the background, which lets it be executed outside of the site page's context. + +After a user subscribes to the service, the service worker is registered. The service worker requests all required information through the web push API and sends this through an HTTP request to the server. The server stores this information in its database to send notifications to the client. + +## Sending notifications + +Notifications are sent from the server to all registered subscriptions with an HTTP request. To correctly identify a user, a signature must be transmitted in the request header. The signature is created from the private key and public key used for registration. The actual message and further information are transmitted as user data. If the encryption and formatting are correct and the signature is validated, the push service sends the notification to the user. + +## Push Notifications diagram + +The following sequence diagram shows how sending and receiving push notifications works on a high level. + +
      + + +1. A user opens a page that wants to send push notifications. The website installs a service worker, which is permanently saved by the browser and used later to display push notifications. +2. The website displays an authorization prompt to the user. +3. If the user accepts to receive push notifications, the browser contacts its own push service—for example, Mozilla Push Service or Google Firebase Cloud Messaging (FCM)—to create a new mailbox and a secret URL called an endpoint. Anyone who knows this URL can send push notifications to that browser. +4. The browser gives the endpoint to the web page through a Javascript callback, and the endpoint is sent to the Spryker Cloud Commerce OS (SCCOS) application server for storage. +5. To send a notification, the SCCOS application server contacts the browser push service with an HTTP POST request. The request URL is the endpoint of the recipient. The browser is constantly connected to its own push service and fetches new notifications. +6. The service worker is activated by the push message and is responsible for displaying the web notifications to the user. + +## Related Developer documents + +| INSTALLATION GUIDES | GLUE API GUIDES | +|---------| - | +| [Install the Push Notification feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-push-notification-feature.html) | [Add push notification providers](/docs/pbc/all/miscellaneous/{{page.version}}/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.html) | +| | [Retrieve push notification providers](/docs/pbc/all/miscellaneous/{{page.version}}/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.html) | +| | [Update push notification providers](/docs/pbc/all/miscellaneous/{{page.version}}/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.html) | +| | [Delete push notification providers](/docs/pbc/all/miscellaneous/{{page.version}}/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.html) | +| | [Add push notification subscription](/docs/pbc/all/miscellaneous/{{page.version}}/manage-using-glue-api/glue-api-add-push-notification-subscriptions.html) | diff --git a/docs/pbc/all/miscellaneous/202512.0/sitemap-feature-overview.md b/docs/pbc/all/miscellaneous/202602.0/sitemap-feature-overview.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/sitemap-feature-overview.md rename to docs/pbc/all/miscellaneous/202602.0/sitemap-feature-overview.md diff --git a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/how-translations-are-managed.md b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/how-translations-are-managed.md similarity index 96% rename from docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/how-translations-are-managed.md rename to docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/how-translations-are-managed.md index 2557ff8e9af..9fb636a06d6 100644 --- a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/how-translations-are-managed.md +++ b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/how-translations-are-managed.md @@ -4,6 +4,7 @@ last_updated: Aug 20, 2021 description: The key concept for rendering web pages with translated content very fast and with limited resource usage is using a key-value storage template: concept-topic-template redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/how-translations-are-managed.html - /docs/scos/dev/feature-walkthroughs/202212.0/spryker-core-feature-walkthrough/how-translations-are-managed.html - /docs/scos/dev/feature-walkthroughs/202204.0/spryker-core-feature-walkthrough/how-translations-are-managed.html --- diff --git a/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/howto-add-support-for-number-formatting-in-the-storefront.md b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/howto-add-support-for-number-formatting-in-the-storefront.md new file mode 100644 index 00000000000..2a82917d661 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/howto-add-support-for-number-formatting-in-the-storefront.md @@ -0,0 +1,109 @@ +--- +title: "HowTo: Add support for number formatting in the Storefront" +description: Learn how to add support for numbers formatting in the Spryker Storefront User Interface. +template: howto-guide-template +last_updated: Feb 19, 2026 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-add-support-for-number-formatting-in-the-storefront.html +--- + +Number formats can vary by locales. For example, if in the DE locale there is a number *123.456,78*, in the US locale it would be *123,456.78*. To enable the proper number formatting by locale in your store, follow the instructions in this document. + +## Prerequisites + +To add support for number formatting in the Storefront, integrate the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------------------------------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/util-number +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|------------|-----------------------------| +| UtilNumber | vendor/spryker/util-number | +| ShopUi | vendor/spryker-shop/shop-ui | + +{% endinfo_block %} + +## 2) Set up transfer objects + +Generate transfers: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Ensure the following transfers have been created: + +| TRANSFER | TYPE | EVENT | PATH | +|---------------------------|-------|---------|----------------------------------------------------------------| +| NumberFormatConfig | class | created | src/Generated/Shared/Transfer/NumberFormatConfigTransfer | +| NumberFormatFilter | class | created | src/Generated/Shared/Transfer/NumberFormatFilterTransfer | +| NumberFormatIntRequest | class | created | src/Generated/Shared/Transfer/NumberFormatIntRequestTransfer | +| NumberFormatFloatRequest | class | created | src/Generated/Shared/Transfer/NumberFormatFloatRequestTransfer | + +{% endinfo_block %} + +## 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------|-----------------------------------------------------------------------|---------------|---------------------------------------------------------------| +| NumberFormatterTwigPlugin | Extends Twig with `formatInt()` and `formatFloat()` filter functions. | None | SprykerShop\Yves\ShopUi\Plugin\Twig\NumberFormatterTwigPlugin | + +**src/Pyz/Yves/Twig/TwigDependencyProvider.php** + +```php + + */ + protected function getTwigPlugins(): array + { + return [ + ... + new NumberFormatterTwigPlugin(), + ]; + } +} +``` + +## 4) Install npm dependency + +Add `autonumeric` dependency: + +```bash +npm install autonumeric@~4.6.0 +``` + +## 5) Build the Storefront UI frontend + +Enable Javascript and CSS changes for the Storefront: + +```bash +console frontend:yves:build +``` + +After applying all these changes, you can see formatted prices and numbers in the Storefront forms and views. diff --git a/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/spryker-core-feature-overview.md b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/spryker-core-feature-overview.md new file mode 100644 index 00000000000..27b0a52bd29 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/spryker-core-feature-overview.md @@ -0,0 +1,30 @@ +--- +title: Spryker Core feature overview +description: Learn all about the basis of all the functionality in Spryker with the Spryker Core features overview. +last_updated: Jul 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/spryker-core +originalArticleId: 422423d0-beff-4da2-9ab7-4940262da733 +redirect_from: + - /2021080/docs/spryker-core + - /2021080/docs/en/spryker-core + - /docs/spryker-core + - /docs/en/spryker-core + - /docs/scos/user/features/201907.0/spryker-core-feature-overview/spryker-core-feature-overview.html + - /docs/scos/user/features/201903.0/spryker-core-feature-overview/spryker-core-feature-overview.html + - /docs/scos/user/features/201811.0/spryker-core-feature-overview/spryker-core-feature-overview.html + - /docs/scos/user/features/202212.0/spryker-core-feature-overview/spryker-core-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/spryker-core-back-office-feature-walkthrough/spryker-core-back-office-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202204.0/spryker-core-feature-walkthrough/spryker-core-feature-walkthrough.html + - /docs/scos/user/features/202204.0/spryker-core-feature-overview/spryker-core-feature-overview.html +--- + +The Spryker Core feature is the very basis of all the functionality in Spryker. + +## Related Developer documents + +|INSTALLATION GUIDES | TUTORIALS AND HOWTOS | REFERENCES| +|---------|---------|---------| +| [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | [Tutorial: Managing glossary key](/docs/dg/dev/internationalization-and-multi-store/managing-glossary-keys.html) | [How translations are managed](/docs/pbc/all/miscellaneous/{{page.version}}/spryker-core-feature-overview/how-translations-are-managed.html) | +| | | [URL redirects overview](/docs/pbc/all/miscellaneous/{{page.version}}/spryker-core-feature-overview/url-redirects-overview.html) | +| | | [Vault for Tokens overview](/docs/pbc/all/miscellaneous/{{page.version}}/spryker-core-feature-overview/vault-for-tokens-overview.html) | diff --git a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/url-redirects-overview.md b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/url-redirects-overview.md similarity index 96% rename from docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/url-redirects-overview.md rename to docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/url-redirects-overview.md index 4cf14318b43..6d99f713fe4 100644 --- a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/url-redirects-overview.md +++ b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/url-redirects-overview.md @@ -4,6 +4,7 @@ last_updated: Aug 20, 2021 description: With URL redirects, you can create content redirects and increase your store's search engine visibility template: concept-topic-template redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/url-redirects-overview.html - /docs/scos/user/back-office-user-guides/202005.0/content/redirects/redirects.html - /docs/scos/dev/feature-walkthroughs/202108.0/spryker-core-feature-walkthrough/url-redirects-overview.html - /docs/scos/dev/feature-walkthroughs/202212.0/spryker-core-feature-walkthrough/url-redirects-overview.html diff --git a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/vault-for-tokens-overview.md b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/vault-for-tokens-overview.md similarity index 95% rename from docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/vault-for-tokens-overview.md rename to docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/vault-for-tokens-overview.md index eb7604d8ed2..9fc0c8acef9 100644 --- a/docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/vault-for-tokens-overview.md +++ b/docs/pbc/all/miscellaneous/202602.0/spryker-core-feature-overview/vault-for-tokens-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/v3/docs/vault-for-tokens-feature-overview originalArticleId: 74b81715-3f9b-4f34-af9d-30ca5f480597 redirect_from: + - /docs/pbc/all/miscellaneous/202512.0/spryker-core-feature-overview/vault-for-tokens-overview.html - /2021080/docs/vault-for-tokens-feature-overview - /2021080/docs/en/vault-for-tokens-feature-overview - /docs/vault-for-tokens-feature-overview diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/dixa.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/dixa.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/dixa.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/dixa.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/iadvize.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/iadvize.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/iadvize.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/iadvize.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/live-chat-service.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/live-chat-service.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/live-chat-service.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/live-chat-service.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/optimise-it.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/optimise-it.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/customer-service/optimise-it.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/customer-service/optimise-it.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/ab-tasty.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/ab-tasty.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/ab-tasty.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/ab-tasty.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/baqend.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/baqend.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/baqend.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/ab-testing-and-performance/baqend.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/channelpilot-analytics.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/channelpilot-analytics.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/channelpilot-analytics.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/channelpilot-analytics.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md similarity index 99% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md index f9f90b71deb..cfd7312951b 100644 --- a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md +++ b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/exporting-product-data-for-fact-finder.md @@ -35,7 +35,7 @@ related: - title: Installing and configuring FACT-Finder web components link: docs/pbc/all/miscellaneous/page.version/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.html --- - + ## Output Folder Define an output folder where the CSV files will be generated by adding the following line in your configuration file: diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/fact-finder.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/fact-finder.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/fact-finder.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/fact-finder.md diff --git a/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.md new file mode 100644 index 00000000000..3463e3e2218 --- /dev/null +++ b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.md @@ -0,0 +1,340 @@ +--- +title: Installing and configuring FACT-Finder web components +description: Learn how to integrate Fact Finder Web Components into Spryker Cloud Commerce OS. +last_updated: Aug 31, 2022 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/fact-finder-web-components +originalArticleId: 2c240c0e-67be-43d0-87fe-256dcf2f0a8f +redirect_from: + - /2021080/docs/fact-finder-web-components + - /2021080/docs/en/fact-finder-web-components + - /docs/fact-finder-web-components + - /docs/en/fact-finder-web-components + - /docs/scos/dev/technology-partner-guides/202200.0/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.html + - /docs/scos/dev/technology-partner-guides/202212.0/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.html + - /docs/scos/dev/technology-partner-guides/202311.0/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder-web-components.html +--- + +This document shows how to install and configure FACT-Finder web components. + +## Installation + +Install the `fact-finder-web-components` module: + +```bash +composer require spryker-eco/fact-finder-web-components +``` + +## Configuration + +To set up the authorization configuration, use the following code example: + +**config/Shared/config_default.php** + +```php +... +// ---------- FACT-Finder components +$config[FactFinderWebComponentsConstants::COMMUNICATION_COMPONENT_CONFIG] = [ + 'properties' => [ + 'url' => 'http://search-web-components.fact-finder.de/FACT-Finder-7.2', + 'version' => '7.2', + 'default-query' => 'trousers', + 'channel' => 'heroku-fact-finder-de_DE', + 'search-immediate' => false, + ], +]; +... +``` + +To set up the components configuration, use the following config code as an example: + +
      +config/Shared/config_default.php + +```php +... +$config[FactFinderWebComponentsConstants::BREADCRUMB_COMPONENT_CONFIG] = [ + 'properties' => [ + 'show-only' => false, + ], + 'items' => [ + 'search', + 'filter', + 'advisor', + ], +]; + +$config[FactFinderWebComponentsConstants::SEARCH_BOX_COMPONENT_CONFIG] = [ + 'properties' => [ + 'suggest-onfocus' => 'true', + 'use-suggest' => 'true', + ], +]; + +$config[FactFinderWebComponentsConstants::SEARCH_BUTTON_COMPONENT_CONFIG] = [ + 'suggest-onfocus' => false, + 'hidesuggest-onblur' => true, + 'select-onclick' => false, + 'use-suggest' => false, + 'suggest-delay' => 0, +]; + +$config[FactFinderWebComponentsConstants::HEADER_NAVIGATION_COMPONENT_CONFIG] = [ + 'properties' => [ + 'group-count' => 4, + 'group-size' => 4, + 'hide-empty-groups' => '1', + 'fetch-initial' => '1', + ], +]; + +$config[FactFinderWebComponentsConstants::SUGGEST_CONFIG] = [ + 'properties' => [], + 'productItemType' => 'productName', + 'searchItems' => [ + [ + 'type' => 'searchTerm', + 'title' => 'Search term', + ], + [ + 'type' => 'category', + 'title' => 'Category', + ], + [ + 'type' => 'brand', + 'title' => 'Brand', + ], + ], +]; + +$config[FactFinderWebComponentsConstants::RECORD_LIST_COMPONENT_CONFIG] = [ + 'properties' => [], + 'record' => '', +]; + +$config[FactFinderWebComponentsConstants::CHECKOUT_TRACKING_CONFIG] = [ + 'properties' => [ + 'disable-auto-tracking' => true, + ], + 'items' => [ + [ + 'recordId' => 'd44c3c7b5e52f7a6b27041c1e789e954', + 'count' => '2', + ], + [ + 'recordId' => '19532fa96a8e60a27328f01520cc4', + 'count' => '4', + ], + ], +]; + +$config[FactFinderWebComponentsConstants::RECORD_COMPONENT_CONFIG] = [ + 'subscribe' => 'true', + 'is-recommendation' => false, + 'infinite-scrolling' => true, + 'infinite-debounce-delay' => 32, + 'infinite-scroll-margin' => 0, +]; + +$config[FactFinderWebComponentsConstants::ASN_GROUP_COMPONENT_CONFIG] = [ + 'opened' => false, + 'collapsible' => true, + 'lazy-load' => true, +]; + +$config[FactFinderWebComponentsConstants::ASN_GROUP_ELEMENT_CONFIG] = [ + 'selected' => true, +]; + +$config[FactFinderWebComponentsConstants::ASN_REMOVE_ALL_FILTER_CONFIG] = [ + 'align' => 'vertical', + 'show-always' => true, + 'remove-params' => false, +]; + +$config[FactFinderWebComponentsConstants::ASN_SLIDER_CONFIG] = [ + 'properties' => [ + 'align' => 'vertical', + ], +]; + +$config[FactFinderWebComponentsConstants::ASN_SLIDER_CONTROL_CONFIG] = [ + 'submit-on-input' => true, +]; + +$config[FactFinderWebComponentsConstants::PAGING_COMPONENT_CONFIG] = [ + 'properties' => [ + ], +]; + +$config[FactFinderWebComponentsConstants::PRODUCTS_PER_PAGE_COMPONENT_CONFIG] = [ + 'properties' => [ + ], + 'dropdown' => '', + 'list' => '', + 'item' => '', +]; + +$config[FactFinderWebComponentsConstants::SORT_BOX_COMPONENT_CONFIG] = [ + 'properties' => [ + ], + 'items' => [ + [ + 'key' => 'default.template', + 'title' => 'factfinder.web-components.sort.box.default.style', + ], + [ + 'key' => 'Price.asc', + 'title' => 'factfinder.web-components.sort.box.overriden.for', + ], + [ + 'key' => 'null.desc', + 'title' => 'factfinder.web-components.sort.box.relevance', + ], + ], +]; + +$config[FactFinderWebComponentsConstants::SIMILAR_PRODUCTS_COMPONENT_CONFIG] = [ + 'properties' => [ + 'max-results' => 4, + ], + 'list' => '', + 'record' => '', +]; + +$config[FactFinderWebComponentsConstants::SIMILAR_PRODUCT_ID_CONFIG] = [ + 'recordId' => 'd44c3c7b5e52f7a6b27041c1e789e954', +]; + +$config[FactFinderWebComponentsConstants::RECOMMENDATION_CONFIG] = [ + 'properties' => [ + 'max-results' => 4, + ], + 'list' => '', + 'record' => '', +]; + +$config[FactFinderWebComponentsConstants::RECOMMENDATION_RECORD_ID_CONFIG] = [ + 'recordId' => '19532fa96a8e60a27328f01520cc4', +]; + +$config[FactFinderWebComponentsConstants::TAG_CLOUD_COMPONENT_CONFIG] = [ + 'properties' => [ + ], +]; + +$config[FactFinderWebComponentsConstants::PUSHED_PRODUCTS_COMPONENT_CONFIG] = [ + 'properties' => [ + ], + 'list' => '', + 'record' => '', +]; + +$config[FactFinderWebComponentsConstants::CAMPAIGN_COMPONENT_CONFIG] = [ + 'properties' => [ + ], + 'answer' => '', + 'question' => '', + 'feedbacktext' => '', +]; +... +``` + +
      + +## Integration into the project + +**frontend/settings.js** + +```js +// define project relative paths to context +const paths = { + ... + + // eco folders + eco: { + // all modules + modules: './vendor/spryker-eco' + }, + + // project folders + project: { + ... + } +}; + +// export settings +module.exports = { + ... + + // define settings for suite-frontend-builder finder + find: { + // webpack entry points (components) finder settings + componentEntryPoints: { + // absolute dirs in which look for + dirs: [ + ... + path.join(context, paths.eco.modules), + ... + ], + ... + }, + + ... + } +} +``` + +**src/Pyz/Yves/ShopUi/Theme/default/vendor.ts** + +```js +// add ff-web-components polyfill +import 'ff-web-components/dist/bundle'; +``` + +**package.json** + +```json +"dependencies": { + "ff-web-components": "git+https://github.com/FACT-Finder-Web-Components/ff-web-components.git#release/3.0" +}, +``` + +## Frontend integration + +Add the required communication element: + +```twig +{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} include atom('communication', 'FactFinderWebComponents') with { + data: { + properties: { + component: 'url="http://search-web-components.fact-finder.de/FACT-Finder-7.2" version="7.2" default-query="trousers" channel="bergfreunde-co-uk" search-immediate="true"' + } + } + } only {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +Add a widget: + +```twig +{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} include atom('communication', 'FactFinderWebComponents') with { + data: { + properties: { + component: 'url="http://search-web-components.fact-finder.de/FACT-Finder-7.2" version="7.2" default-query="trousers" channel="bergfreunde-co-uk" search-immediate="true"' + } + } + } only {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} include atom('header-navigation', 'FactFinderWebComponents') with { + data: { + properties: { + component: 'group-count="4" group-size="4" hide-empty-groups="1" fetch-initial="1"' + } + } + } only {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-fact-finder.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-the-fact-finder-ng-api.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-the-fact-finder-ng-api.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-the-fact-finder-ng-api.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/installing-and-configuring-the-fact-finder-ng-api.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md similarity index 99% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md index d5258082c79..7428ff9e615 100644 --- a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md +++ b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/marketing-and-conversion/analytics/fact-finder/integrating-fact-finder.md @@ -124,7 +124,7 @@ To use the `FactFindeSdk` module directly in your module, you have to add a clie **To add a client to the dependency provider, do the following:**: -1. Add to the dependency provider: +1. Add to the dependency provider: ```php chat((new OpenAiChatRequestTransfer())->setMessage('Hello')); + +``` + +Make sure `$openAiChatResponseTransfer` contains the OpenAI response. + +{% endinfo_block %} diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/common-solutions.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/common-solutions.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/common-solutions.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/common-solutions.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/data-virtuality.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/data-virtuality.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/data-virtuality.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/data-virtuality.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md similarity index 96% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md index 24b38db6b28..419d8e6009d 100644 --- a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md +++ b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly.md @@ -6,8 +6,8 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/loggly-queue originalArticleId: 27b2bc47-2cf9-466c-b944-5a9768b601b3 redirect_from: - - /docs/scos/user/technology-partners/202200.0/operational-tools-monitoring-legal-etc/loggly.html - + - /docs/scos/user/technology-partners/202200.0/operational-tools-monitoring-legal-etc/loggly.html + --- The [Loggly](https://github.com/spryker-eco/loggly) module provides a plugin to read log messages from a queue and send the messages via https to [Loggly](https://www.loggly.com/). diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly/configure-loggly.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly/configure-loggly.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly/configure-loggly.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly/configure-loggly.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/loggly/loggly.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/mindcurv.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/mindcurv.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/mindcurv.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/mindcurv.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/plusserver.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/plusserver.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/plusserver.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/plusserver.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/proclane.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/proclane.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/proclane.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/proclane.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/shopmacher.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/shopmacher.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/shopmacher.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/shopmacher.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/tideways.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/tideways.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/tideways.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/tideways.md diff --git a/docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md b/docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md similarity index 100% rename from docs/pbc/all/miscellaneous/202512.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md rename to docs/pbc/all/miscellaneous/202602.0/third-party-integrations/operational-tools-monitoring-legal/vshn.md diff --git a/docs/pbc/all/multi-factor-authentication/202512.0/create-multi-factor-authentication-methods.md b/docs/pbc/all/multi-factor-authentication/202602.0/create-multi-factor-authentication-methods.md similarity index 98% rename from docs/pbc/all/multi-factor-authentication/202512.0/create-multi-factor-authentication-methods.md rename to docs/pbc/all/multi-factor-authentication/202602.0/create-multi-factor-authentication-methods.md index e5481158910..673be1b38d7 100644 --- a/docs/pbc/all/multi-factor-authentication/202512.0/create-multi-factor-authentication-methods.md +++ b/docs/pbc/all/multi-factor-authentication/202602.0/create-multi-factor-authentication-methods.md @@ -12,6 +12,7 @@ related: link: docs/pbc/all/multi-factor-authentication/page.version/install-email-multi-factor-authentication-method.html redirect_from: + - /docs/pbc/all/multi-factor-authentication/202512.0/create-multi-factor-authentication-methods.html - /docs/pbc/all/multi-factor-authentication/202505.0/create-multi-factor-authentication-methods.html --- @@ -54,19 +55,19 @@ class YourMfaTypePlugin extends AbstractPlugin implements MultiFactorAuthPluginI * @var string */ protected const YOUR_MULTI_FACTOR_AUTH_TYPE = 'your-multi-factor-auth-type'; - + /** * {@inheritDoc} * * @api - * + * * @var string */ public function getName(): string { return static::YOUR_MULTI_FACTOR_AUTH_TYPE; } - + /** * {@inheritDoc} * diff --git a/docs/pbc/all/multi-factor-authentication/202602.0/install-email-multi-factor-authentication-method.md b/docs/pbc/all/multi-factor-authentication/202602.0/install-email-multi-factor-authentication-method.md new file mode 100644 index 00000000000..c47fbc04b33 --- /dev/null +++ b/docs/pbc/all/multi-factor-authentication/202602.0/install-email-multi-factor-authentication-method.md @@ -0,0 +1,598 @@ +--- +title: Install email Multi-Factor Authentication method +description: Learn how to install and configure email multi-factor authentication in Spryker for all user types. +template: howto-guide-template +last_updated: Aug 22, 2025 +--- + +Email Multi-Factor Authentication (MFA) is a security mechanism that verifies identity using an authentication code sent to an email address. This document describes how to install and configure email MFA. + +For more information about MFA, see [Multi-Factor Authentication feature overview](/docs/pbc/all/multi-factor-authentication/{{page.version}}/multi-factor-authentication.html). + +## Prerequisites + +[Install the Multi-Factor Authentication feature](/docs/pbc/all/multi-factor-authentication/{{page.version}}/install-multi-factor-authentication-feature.html) + +## 1) Set up transfer objects + +Generate transfer objects: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------|----------|---------|-------------------------------------------------------------------------| +| Mail.multiFactorAuth | property | added | src/Generated/Shared/Transfer/MailTransfer | + +{% endinfo_block %} + +## 2) Add translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```csv +multi_factor_auth.email.text,"To proceed with your request, please use the following verification code: %code%. If you did not request this code, please ignore this email.",en_US +multi_factor_auth.email.text,"Um mit Ihrer Anfrage fortzufahren, verwenden Sie bitte den folgenden Bestätigungscode: %code%. Wenn Sie diesen Code nicht angefordert haben, ignorieren Sie bitte diese E-Mail.",de_DE +mail.multi_factor_auth.email.subject,"Verification Code for Secure Access",en_US +mail.multi_factor_auth.email.subject,"Bestätigungscode für sicheren Zugriff",de_DE +``` + + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +## 3) Import data + +Import MFA email templates per store: + +**data/import/common/AT/cms_block_store.csv** + +```csv +cms-block-email--multi_factor_auth_email--html,AT +cms-block-email--multi_factor_auth_email--text,AT +``` + + + +**data/import/common/DE/cms_block_store.csv** + +```csv +cms-block-email--multi_factor_auth_email--html,DE +cms-block-email--multi_factor_auth_email--text,DE +``` + + + +**data/import/common/US/cms_block_store.csv** + +```csv +cms-block-email--multi_factor_auth_email--html,US +cms-block-email--multi_factor_auth_email--text,US +``` + +data/import/common/common/cms_block.csv + +```csv +{% raw %} +cms-block-email--multi_factor_auth_email--html,customer_multi_factor_auth_email--html,HTML Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.html.twig,1,,,,,,,"


      {{ 'mail.customer.multi_factor_auth.email.subject' | trans }}

      {{ 'customer.multi_factor_auth.email.text' | trans({'%code%': mail.multiFactorAuth.multiFactorAuthCode.code}) }}
      ","


      {{ 'mail.customer.multi_factor_auth.email.subject' | trans }}

      {{ 'customer.multi_factor_auth.email.text' | trans({'%code%': mail.multiFactorAuth.multiFactorAuthCode.code}) }}
      " +cms-block-email--multi_factor_auth_email--text,customer_multi_factor_auth_email--text,TEXT Email Template With Header And Footer,@CmsBlock/template/email-template-with-header-and-footer.text.twig,1,,,,,,,"{{ 'mail.customer.multi_factor_auth.email.subject' | trans }} {{ 'customer.multi_factor_auth.email.text' | trans({'%code%': mail.multiFactorAuth.multiFactorAuthCode.code}) }}","{{ 'mail.customer.multi_factor_auth.email.subject' | trans }} {{ 'customer.multi_factor_auth.email.text' | trans({'%code%': mail.multiFactorAuth.multiFactorAuthCode.code}) }}" +{% endraw %} +``` + + +## 4) Set up behavior + +Set up the following behaviors. + +### 4.1) Set up email MFA for customers + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerEmailMultiFactorAuthPlugin | Handles email MFA, enabling customers to verify their identity using a code sent to their registered email address. | | Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email | +| CustomerEmailMultiFactorAuthMailTypeBuilderPlugin | Builds and processes an email template for sending MFA codes to customers. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\Customer | +| CustomerEmailCodeSenderStrategyPlugin | Sends an authentication code to a customer's email address. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\Customer | + +**src/Pyz/Yves/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php +namespace Pyz\Yves\MultiFactorAuth; + +use Spryker\Yves\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email\CustomerEmailMultiFactorAuthPlugin; + +class MultiFactorAuthDependencyProvider extends SprykerMultiFactorAuthDependencyProvider +{ + protected function getCustomerMultiFactorAuthPlugins(): array + { + return [ + new CustomerEmailMultiFactorAuthPlugin(), + ]; + } +} +``` + + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php +namespace Pyz\Zed\Mail; + +use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\Customer\CustomerEmailMultiFactorAuthMailTypeBuilderPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new CustomerEmailMultiFactorAuthMailTypeBuilderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\Customer\CustomerEmailCodeSenderStrategyPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getCustomerSendStrategyPlugins(): array + { + return [ + new CustomerEmailCodeSenderStrategyPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, go to the MFA setup page: `https://yves.mysprykershop.com/multi-factor-auth/set`. Make sure the following applies: +- The **Set up Multi-Factor Authentication** menu item is displayed in the customer profile navigation menu +- The **Email** authentication method is displayed in the list of available authentication methods +2. For **Email Multi-Factor Authentication**, click **Activate**. + This sends a verification code to the customer's email address. +3. Enter the received code in the confirmation form. + If the code is valid, Email MFA should be successfully activated. +4. Log out and attempt to log in with the same account. + Make sure you're prompted to enter an MFA code. +5. Enter the code in the form. + Make sure this logs you in successfully. +6. In the customer profile, try updating the email address, password, or deleting the account. Make sure the following applies: +- Completing the actions requires entering an MFA code +- You can perform several actions without entering a code within the configured grace period + +{% endinfo_block %} + +### 4.2) Set up email MFA for Back Office, Merchant Portal, and Agent Merchant Portal users + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|---------------|-----------------------------------------------------------------| +| UserEmailMultiFactorAuthPlugin | Handles email MFA, enabling Back Office users to verify their identity using a code sent to their registered email address. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Factors\Email | +| UserEmailCodeSenderStrategyPlugin | Sends an authentication code to a user's email address. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\User | +| UserEmailMultiFactorAuthMailTypeBuilderPlugin | Builds and processes an email template for sending MFA codes to users. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User | + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php + +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Factors\Email\UserEmailMultiFactorAuthPlugin; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\User\UserEmailCodeSenderStrategyPlugin; + +class MultiFactorAuthDependencyProvider extends SprykerMultiFactorAuthDependencyProvider +{ + protected function getUserMultiFactorAuthPlugins(): array + { + return [ + new UserEmailMultiFactorAuthPlugin(), + ]; + } + + protected function getUserSendStrategyPlugins(): array + { + return [ + new UserEmailCodeSenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + +namespace Pyz\Zed\Mail; + +use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User\UserEmailMultiFactorAuthMailTypeBuilderPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new UserEmailMultiFactorAuthMailTypeBuilderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Go to the MFA setup page depending on your application: +- Back Office: `https://backoffice.mysprykershop.com/multi-factor-auth/user-management/set-up` +- Merchant Portal: `https://mp.mysprykershop.com/multi-factor-auth/user-management-merchant-portal/set-up` +- Agent Merchant Portal: `https://mp.mysprykershop.com/multi-factor-auth/user-management-agent-merchant-portal/set-up` + +Make sure the following applies: +- The **Set up Multi-Factor Authentication** menu item is displayed in the user profile dropdown navigation menu +- The **Email** authentication method is displayed in the list of available authentication methods + +2. For **Email Multi-Factor Authentication**, click **Activate**. + This sends a verification code to the user's email address. +3. Enter the received code in the confirmation form. + If the code is valid, Email MFA should be successfully activated. +4. Log out and attempt to log in with the same account. + Make sure you're prompted to enter an MFA code. +5. Enter the code in the form. + Make sure this logs you in successfully. +6. In the user profile, try updating the email address, password, or deleting the account. Make sure the following applies: +- Completing the actions requires entering an MFA code +- You can perform several actions without entering a code within the configured grace period + +{% endinfo_block %} + +### 4.3) Set up email MFA for agent users + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------| +| AgentUserEmailMultiFactorAuthPlugin | Handles email MFA, enabling agents to verify their identity using a code sent to their registered email address. | | Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email | +| UserEmailMultiFactorAuthMailTypeBuilderPlugin | Builds and processes an email template for sending MFA codes to users. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User | + +**src/Pyz/Yves/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php + +namespace Pyz\Yves\MultiFactorAuth; + +use Spryker\Yves\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email\AgentUserEmailMultiFactorAuthPlugin; + +class MultiFactorAuthDependencyProvider extends SprykerMultiFactorAuthDependencyProvider +{ + protected function getAgentMultiFactorAuthPlugins(): array + { + return [ + new AgentUserEmailMultiFactorAuthPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php + +namespace Pyz\Zed\Mail; + +use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User\UserEmailMultiFactorAuthMailTypeBuilderPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new UserEmailMultiFactorAuthMailTypeBuilderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. On the Storefront, go to the MFA setup page: `https://yves.mysprykershop.com/DE/en/agent/multi-factor-auth/set`. Make sure the following applies: +- The **Set up Multi-Factor Authentication** menu item is displayed in the agent user profile navigation menu +- The **Email** authentication method is displayed in the list of available authentication methods +2. For **Email Multi-Factor Authentication**, click **Activate**. + This sends a verification code to the user's email address. +3. Enter the received code in the confirmation form. + If the code is valid, Email MFA should be successfully activated. +4. Log out and attempt to log in with the same account. + Make sure you're prompted to enter an MFA code. +5. Enter the code in the form. + Make sure this logs you in successfully. +6. In the user profile, try updating the email address, password, or deleting the account. Make sure the following applies: +- Completing the actions requires entering an MFA code +- You can perform several actions without entering a code within the configured grace period. + +{% endinfo_block %} + +### 4.4) Set up email MFA for Glue Rest or Storefront API + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------|------------------------------------------------------------------| +| CustomerEmailMultiFactorAuthPlugin | Handles email MFA, enabling agents to verify their identity using a code sent to their registered email address. | | Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email | +| CustomerEmailMultiFactorAuthMailTypeBuilderPlugin | Builds and processes an email template for sending MFA codes to customers. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\Customer | +| CustomerEmailCodeSenderStrategyPlugin | Sends an authentication code to an customer's email address. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\Customer | + +**src/Pyz/Glue/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php + +use Spryker\Glue\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerGlueApplicationDependencyProvider; +use Spryker\Yves\MultiFactorAuth\Plugin\Factors\Email\CustomerEmailMultiFactorAuthPlugin; + +class MultiFactorAuthDependencyProvider extends SprykerGlueApplicationDependencyProvider +{ + protected function getCustomerMultiFactorAuthPlugins(): array + { + return [ + new CustomerEmailMultiFactorAuthPlugin(), + ]; + } +} +``` + + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php +namespace Pyz\Zed\Mail; + +use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\Customer\CustomerEmailMultiFactorAuthMailTypeBuilderPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new CustomerEmailMultiFactorAuthMailTypeBuilderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\Customer\CustomerEmailCodeSenderStrategyPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getCustomerSendStrategyPlugins(): array + { + return [ + new CustomerEmailCodeSenderStrategyPlugin(), + ]; + } +} +``` + +### 4.5) Set up email MFA for Glue Backend API + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|---------------|----------------------------------------------------------------| +| UserEmailMultiFactorAuthPlugin | Handles email MFA, enabling users to verify their identity via an authentication code sent to their registered email. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Factors\Email | +| UserEmailMultiFactorAuthMailTypeBuilderPlugin | Builds and processes an email template for sending MFA codes to users. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User | +| UserEmailCodeSenderStrategyPlugin | Sends an authentication code to a users's email address. | | Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\User | +| TwigApplicationPlugin | Renders email Twig templates containing MFA verification codes. | | Spryker\Zed\Twig\Communication\Plugin\Application | + +**src/Pyz/Glue/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php + +use Spryker\Glue\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerGlueApplicationDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Factors\Email\UserEmailMultiFactorAuthPlugin; + +class MultiFactorAuthDependencyProvider extends SprykerGlueApplicationDependencyProvider +{ + protected function getUserMultiFactorAuthPlugins(): array + { + return [ + new UserEmailMultiFactorAuthPlugin(), + ]; + } +} +``` + + +**src/Pyz/Zed/Mail/MailDependencyProvider.php** + +```php +namespace Pyz\Zed\Mail; + +use Spryker\Zed\Mail\MailDependencyProvider as SprykerMailDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Mail\User\UserEmailMultiFactorAuthMailTypeBuilderPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getMailTypeBuilderPlugins(): array + { + return [ + new UserEmailMultiFactorAuthMailTypeBuilderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthDependencyProvider.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthDependencyProvider as SprykerMultiFactorAuthDependencyProvider; +use Spryker\Zed\MultiFactorAuth\Communication\Plugin\Sender\User\UserEmailCodeSenderStrategyPlugin; + +class MailDependencyProvider extends SprykerMailDependencyProvider +{ + protected function getUserSendStrategyPlugins(): array + { + return [ + new UserEmailCodeSenderStrategyPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/GlueBackendApiApplication/GlueBackendApiApplicationDependencyProvider.php** + +```php +namespace Pyz\Glue\GlueBackendApiApplication; + +use Spryker\Glue\GlueBackendApiApplication\GlueBackendApiApplicationDependencyProvider as SprykerGlueBackendApiApplicationDependencyProvider; +use Spryker\Zed\Twig\Communication\Plugin\Application\TwigApplicationPlugin; + +class GlueBackendApiApplicationDependencyProvider extends SprykerGlueBackendApiApplicationDependencyProvider +{ + protected function getApplicationPlugins(): array + { + return [ + // This plugin enables the Backend API to process Twig templates that format and display the verification codes sent to users' email addresses during the authentication process. + new TwigApplicationPlugin(), + ]; + } +} +``` + + +{% info_block warningBox "Verification" %} + +Make sure you can authenticate with MFA using Glue API. For instructions, see [Authenticate through MFA](/docs/pbc/all/multi-factor-authentication/{{page.version}}/manage-using-glue-api/glue-api-authenticate-through-mfa.html). + +{% endinfo_block %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-feature.md b/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-feature.md new file mode 100644 index 00000000000..bbf24e11191 --- /dev/null +++ b/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-feature.md @@ -0,0 +1,1045 @@ +--- +title: Install the Multi-Factor Authentication feature +description: This document describes how to install the Multi-Factor Authentication (MFA) feature in your Spryker project. +template: feature-integration-guide-template +last_updated: Feb 19, 2026 +redirect_from: + - /docs/pbc/all/multi-factor-authentication/202505.0/install-multi-factor-authentication-feature.html +--- + +This document describes how to install the [Multi-Factor Authentication (MFA) feature](/docs/pbc/all/multi-factor-authentication/{{page.version}}/multi-factor-authentication.html). + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|----------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Spryker Core Back Office | {{page.release_tag}} | [Install the Spryker Core Back Office feature](/docs/pbc/all/back-office/{{page.version}}/base-shop/install-and-upgrade/install-the-spryker-core-back-office-feature.html) | +| Customer Account Management | {{page.release_tag}} | [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | +| Agent assist | {{page.release_tag}} | [Install the Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | +| Glue Rest API | {{page.release_tag}} | [Install the Spryker Core Glue API](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html) | +| Back Office dropdown navigation | {{page.release_tag}} | [Install Back Office dropdown navigation](/docs/pbc/all/back-office/{{page.version}}/base-shop/install-and-upgrade/install-back-office-dropdown-navigation.html) | +| Backend API Application | {{page.release_tag}} | [Integrate Backend API Application](/docs/integrations/spryker-glue-api/backend-api/integrate-backend-api/integrate-backend-api.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/multi-factor-auth:"^2.1.0" spryker/multi-factor-auth-extension:"^1.2.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------------------------|--------------------------------------------| +| MultiFactorAuth | vendor/spryker/multi-factor-auth | +| MultiFactorAuthExtension | vendor/spryker/multi-factor-auth-extension | + +{% endinfo_block %} + +## 2) Set up configuration + +MFA is configured separately for customers and users (Back Office users and agents). Make sure to define values for both user types by implementing the corresponding methods in the `MultiFactorAuthConfig` class, such as `getCustomerCodeLength()` and `getUserCodeLength()`. + +### Configure MFA code length for customers + +**src/Pyz/Shared/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Shared\MultiFactorAuth; + +use Spryker\Shared\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Defines the length of the authentication code for customer. + * + * @api + * + * @return int + */ + public function getCustomerCodeLength(): int + { + return 6; + } +} +``` + +### Configure MFA code length for users + +**src/Pyz/Shared/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Shared\MultiFactorAuth; + +use Spryker\Shared\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specification: + * - Returns the multi-factor authentication code length for user. + * + * @api + * + * @return int + */ + public function getUserCodeLength(): int + { + return 6; + } +} +``` + +### Configure MFA code validity time for customers + +Configure the time interval in minutes during which an authentication code is valid by extending the `MultiFactorAuthConfig` class: + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Defines the time interval in minutes during which the authentication code is valid. + * + * @api + * + * @return int + */ + public function getCustomerCodeValidityTtl(): int + { + return 30; + } +} +``` + +### Configure MFA code validity time for users + +Configure the time interval in minutes during which an authentication code is valid by extending the `MultiFactorAuthConfig` class: + + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specification: + * - Returns the code validity TTL in minutes for user. + * + * @api + * + * @return int + */ + public function getUserCodeValidityTtl(): int + { + return 30; + } +} +``` + + +### Configure brute-force protection limit for customers + +Configure the maximum number of failed MFA attempts a customer can make before brute force protection is triggered. This is done by extending the `MultiFactorAuthConfig` class: + + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Defines the number of failed attempts a customer can make to enter the authentication code in order to prevent brute force attacks. + * + * @api + * + * @return int + */ + public function getCustomerAttemptLimit(): int + { + return 3; + } +} +``` + + + +### Configure brute-force protection limit for users + +Configure the maximum number of failed MFA attempts a customer can make before brute force protection is triggered. This is done by extending the `MultiFactorAuthConfig` class: + + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specification: + * - Returns the multi-factor authentication code validation attempt limit for user. + * + * @api + * + * @return int + */ + public function getUserAttemptsLimit(): int + { + return 3; + } +} +``` + + +### Configure protected routes and forms for customers + +**src/Pyz/Yves/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Yves\MultiFactorAuth; + +use Spryker\Yves\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Defines the routes and forms that require MFA authentication. + * + * @api + * + * @return array> + */ + public function getEnabledRoutesAndForms(): array + { + return [ + 'YOUR_ROUTE_NAME' => ['YOUR_FORM_NAME'], + ]; + } +} +``` + +{% info_block warningBox "" %} + +You can configure multiple forms on the same page to require MFA authentication. + +{% endinfo_block %} + + +### Configure protected routes and forms for users + + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Returns a list of enabled routes and their corresponding forms for user multi-factor authentication in the following format + * [ + * 'routeName' => ['formName'], + * ] + * + * @api + * + * @return array> + */ + public function getEnabledRoutesAndForms(): array + { + return [ + 'YOUR_ROUTE_NAME' => ['YOUR_FORM_NAME'], + ]; + } +} +``` + +{% info_block warningBox "" %} + +You can configure multiple forms on the same page to require MFA authentication. + +{% endinfo_block %} + + +### Configure protected routes and forms for Storefront API + +**src/Pyz/Glue/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Glue\MultiFactorAuth; + +use Spryker\Glue\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * @return array + */ + public function getRestApiMultiFactorAuthProtectedResources(): array + { + return [ + 'YOUR_RESOURCE_NAME', + ]; + } +} +``` + + +### Configure protected routes for Backend API + +Only resource routes are supported for MFA protection. Custom routes defined via `RouteProviderPlugins` can't be protected with MFA. + +For more information about Glue Backend API resources, see [Create backend resources](/docs/integrations/spryker-glue-api/backend-api/developing-apis/create-backend-resources.html). + +**src/Pyz/Glue/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Glue\MultiFactorAuth; + +use Spryker\Glue\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * @return array + */ + public function getMultiFactorAuthProtectedBackendResources(): array + { + return [ + 'YOUR_RESOURCE_NAME', + ]; + } +} + +``` + +### Configure Back Office ACL access + +To allow access to MFA requests during the login process in the Back Office, define a public ACL rule. + + +**config/Shared/config_default.php** + +```php +$config[AclConstants::ACL_DEFAULT_RULES] = [ + [ + 'bundle' => 'multi-factor-auth', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], +]; +``` + +**src/Pyz/Zed/SecurityGui/SecurityGuiConfig.php** + +```php + [ + 'isRegularExpression' => false, + ], + '/multi-factor-auth-trigger' => [ + 'isRegularExpression' => false, + ], + '/multi-factor-auth-type-activate' => [ + 'isRegularExpression' => false, + ], + '/multi-factor-auth-type-verify' => [ + 'isRegularExpression' => false, + ], + '/multi-factor-auth-type-deactivate' => [ + 'isRegularExpression' => false, + ], + ]; + } +} +``` + + +## 3) Set up the database schema and transfer objects + +Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|-----------------------------------------------|-------|-------| +| spy_customer_multi_factor_auth | table | added | +| spy_customer_multi_factor_auth_codes | table | added | +| spy_customer_multi_factor_auth_codes_attempts | table | added | +| spy_user_multi_factor_auth | table | added | +| spy_user_multi_factor_auth_codes | table | added | +| spy_user_multi_factor_auth_codes_attempts | table | added | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-----------------------------------|----------|---------|-------------------------------------------------------------------------| +| MultiFactorAuth | class | created | src/Generated/Shared/Transfer/MultiFactorAuthTransfer | +| MultiFactorAuthCode | class | created | src/Generated/Shared/Transfer/MultiFactorAuthCodeTransfer | +| MultiFactorAuthTypesCollection | class | created | src/Generated/Shared/Transfer/MultiFactorAuthTypesCollectionTransfer | +| MultiFactorAuthValidationRequest | class | created | src/Generated/Shared/Transfer/MultiFactorAuthValidationRequestTransfer | +| MultiFactorAuthValidationResponse | class | created | src/Generated/Shared/Transfer/MultiFactorAuthValidationResponseTransfer | +| MultiFactorAuthCriteria | class | created | src/Generated/Shared/Transfer/MultiFactorAuthCriteria | +| MultiFactorAuthCodeCriteria | class | created | src/Generated/Shared/Transfer/MultiFactorAuthCodeCriteriaTransfer | + +{% endinfo_block %} + +## 4) Add translations + +1. Append glossary according to your configuration: + +
      +data/import/common/common/glossary.csv + +```csv +multi_factor_auth.multi_factor_auth.list.title,"Set up Multi-Factor Authentication",en_US +multi_factor_auth.multi_factor_auth.list.title,"Multi-Faktor-Authentifizierung einrichten",de_DE +multi_factor_auth.error.invalid_code,"Invalid multi-factor authentication code. You have %remainingAttempts% attempt(s) left.",en_US +multi_factor_auth.error.invalid_code,"Ungültiger Multi-Faktor-Authentifizierungscode. Sie haben %remainingAttempts% Versuch(e) verbleiben.",de_DE +multi_factor_auth.error.attempts_exceeded,"You have exceeded the number of allowed attempts. Please try again after the page has been refreshed.",en_US +multi_factor_auth.error.attempts_exceeded,"Sie haben die Anzahl der zulässigen Versuche überschritten. Bitte versuchen Sie es erneut, nachdem die Seite aktualisiert wurde.",de_DE +multi_factor_auth.error.expired_code,"The multi-factor authentication code has expired. Please try again.",en_US +multi_factor_auth.error.expired_code,"Der Multi-Faktor-Authentifizierungscode ist abgelaufen. Bitte versuchen Sie es erneut.",de_DE +multi_factor_auth.error.authentication_method_not_selected,"Unable to proceed. A multi-factor authentication method must be selected. Please refresh the page and try again or contact support if the problem persists.",en_US +multi_factor_auth.error.authentication_method_not_selected,"Kann nicht fortgesetzt werden. Es muss eine Multi-Faktor-Authentifizierungsmethode ausgewählt werden. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut oder wenden Sie sich an den Support, wenn das Problem weiterhin besteht.",de_DE +multi_factor_auth.error.corrupted_code,"The provided code is empty or invalid. Please try again.",en_US +multi_factor_auth.error.corrupted_code,"Der angegebene Code ist leer oder ungültig. Bitte versuchen Sie es erneut.",de_DE +multi_factor_auth.method.select,"Select Authentication Method",en_US +multi_factor_auth.method.select,"Authentifizierungsmethode auswählen",de_DE +multi_factor_auth.code.validation,"Enter Authentication Code",en_US +multi_factor_auth.code.validation,"Authentifizierungscode eingeben",de_DE +multi_factor_auth.enter_code_for_method,"We sent the authentication code to your %type%. Type it below to continue.",en_US +multi_factor_auth.enter_code_for_method,"Wir haben Ihnen den Authentifizierungscode per %type% gesendet. Geben Sie ihn unten ein, um fortzufahren.",de_DE +multi_factor_auth.access_denied,"Access is strictly restricted until multi-factor authentication verification is successfully completed. Please ensure that JavaScript is enabled in your browser, refresh the page, and try again. If the problem persists, you may need to complete the multi-factor authentication process again.",en_US +multi_factor_auth.access_denied,"Zugriff ist bis zur erfolgreichen Vollziehung der Multi-Faktor-Authentifizierung eingeschränkt. Bitte stellen Sie sicher, dass JavaScript in Ihrem Browser aktiviert ist, die Seite aktualisieren und erneut versuchen. Wenn das Problem weiterhin besteht, sollten Sie die Multi-Faktor-Authentifizierungprozess erneut abschließen.",de_DE +multi_factor_auth.activation.success,"The multi-factor authentication has been activated.",en_US +multi_factor_auth.activation.success,"Die Multi-Faktor-Authentifizierung wurde aktiviert.",de_DE +multi_factor_auth.deactivation.success,"The multi-factor authentication has been deactivated.",en_US +multi_factor_auth.deactivation.success,"Die Multi-Faktor-Authentifizierung wurde deaktiviert.",de_DE +multi_factor_auth.activation.error,"The multi-factor authentication could not be activated.",en_US +multi_factor_auth.activation.error,"Die Multi-Faktor-Authentifizierung konnte nicht aktiviert werden.",de_DE +multi_factor_auth.deactivation.error,"The multi-factor authentication could not be deactivated.",en_US +multi_factor_auth.deactivation.error,"Die Multi-Faktor-Authentifizierung konnte nicht deaktiviert werden.",de_DE +multi_factor_auth.selection.error.required,"Please choose how you would like to verify your identity.",en_US +multi_factor_auth.selection.error.required,"Bitte wählen Sie aus, wie Sie Ihre Identität überprüfen möchten.",de_DE +multi_factor_auth.continue,"Continue",en_US +multi_factor_auth.continue,"Fortfahren",de_DE +multi_factor_auth.verify_code,"Verify Code",en_US +multi_factor_auth.verify_code,"Code überprüfen",de_DE +multi_factor_auth.required_options,"You must choose one option to continue!",en_US +multi_factor_auth.required_options,"Sie müssen eine Option auswählen, um fortzufahren!",de_DE +multi_factor_auth.invalid_csrf_token,"Invalid CSRF token.",en_US +multi_factor_auth.invalid_csrf_token,"Ungültiges CSRF-Token.",de_DE +multi_factor_auth.note_mfa_affects,"Note, any changes made here will also affect how MFA works in other environments like the Back Office, since your accounts are linked.",en_US +multi_factor_auth.note_mfa_affects,"Hinweis: Alle hier vorgenommenen Änderungen wirken sich auch darauf aus, wie MFA in anderen Umgebungen wie dem Back Office funktioniert, da Ihre Konten verknüpft sind.",de_DE +``` + +
      + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data are added to the `spy_glossary` table. + +{% endinfo_block %} + +## 5) Set up widgets + +{% info_block warningBox "Only for customers or agents" %} + +Apply the changes in this section only if you're integrating MFA for customers or agents in Yves (Storefront). + +{% endinfo_block %} + +Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|----------------------------------|-----------------------------------------------------------|---------------|-----------------------------------------| +| MultiFactorAuthHandlerWidget | Provides MFA handling functionality. | | SprykerShop\Yves\MultiFactorAuth\Widget | +| SetMultiFactorAuthMenuItemWidget | Adds an MFA menu item to the customer profile navigation. | | SprykerShop\Yves\MultiFactorAuth\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + +frontend/settings.json + +```javascript +{ + const globalSettings = { + ... + paths: { + ... + sprykerCore: './vendor/spryker/spryker/Bundles', + ... + }; + + const paths = { + ... + sprykerCore: globalSettings.paths.sprykerCore, + ... + }; + + return { + ... + find: { + componentEntryPoints: { + dirs: [ + ... + join(globalSettings.context, paths.sprykerCore), + ... + ], + ... + }, + componentStyles: { + dirs: [ + ... + join(globalSettings.context, paths.sprykerCore), + ... + ], + ... + }, + ... + }, + ... + }; +} +``` + +
      + +**tsconfig.mp.json** + +```javascript +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "paths": { + ... + "@mp/multi-factor-auth": ["vendor/spryker/spryker/Bundles/MultiFactorAuth/mp.public-api.ts"], + ... + } + } +} +``` + + +2. Build the MFA frontend assets: + +```bash +docker/sdk up --assets +``` + +{% info_block warningBox "Verification" %} + +- Integrate one of the supported MFA methods, see [Multi-Factor Authentication](/docs/pbc/all/multi-factor-authentication/{{page.version}}/multi-factor-authentication.html#multi-factor-authentication-methods). +- Make sure the **Set up Multi-Factor Authentication** menu item is displayed in the navigation menu. +- Clicking the menu should open one the following pages depending on your user: + - Customers:`https://yves.mysprykershop.com/multi-factor-auth/set` + - Agents: `https://yves.mysprykershop.com/agent/multi-factor-auth/set` + - Back Office users: `https://backoffice.mysprykershop.com/multi-factor-auth/user-management/set-up` + +{% endinfo_block %} diff --git a/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-merchant-portal-feature.md b/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-merchant-portal-feature.md new file mode 100644 index 00000000000..bd6f361946a --- /dev/null +++ b/docs/pbc/all/multi-factor-authentication/202602.0/install-multi-factor-authentication-merchant-portal-feature.md @@ -0,0 +1,561 @@ +--- +title: Install the Multi-Factor Authentication Merchant Portal feature +description: This document describes how to install the Multi-Factor Authentication Merchant Portal (MFA MP) feature in your Spryker project. +template: feature-integration-guide-template +last_updated: Feb 19, 2026 +--- + +This document describes how to install the Multi-Factor Authentication (MFA) feature for the Merchant Portal. + +## Prerequisites + +| FEATURE | VERSION | INSTALLATION GUIDE | +|----------------------------------|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Marketplace Merchant Portal Core | {{page.release_tag}} | [Install the Marketplace Merchant Portal Core](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-core-feature.html) | +| Merchant Portal Agent Assist | {{page.release_tag}} | [Install the Merchant Portal Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.html) | +| Multi-Factor Authentication | {{page.release_tag}} | [Install the Multi-Factor Authentication feature](/docs/pbc/all/multi-factor-authentication/{{page.version}}/install-multi-factor-authentication-feature.html) | + +## 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/multi-factor-auth-merchant-portal:"^1.2.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-------------------------------|--------------------------------------------------| +| MultiFactorAuthMerchantPortal | vendor/spryker/multi-factor-auth-merchant-portal | + +{% endinfo_block %} + +## 2) Set up configuration + +Set up the configuration in the following sections. + +### Configure protected routes and forms for users + +You can configure multiple forms on the same page to require MFA. + +**src/Pyz/Zed/MultiFactorAuth/MultiFactorAuthConfig.php** + +```php +namespace Pyz\Zed\MultiFactorAuth; + +use Spryker\Zed\MultiFactorAuth\MultiFactorAuthConfig as SprykerMultiFactorAuthConfig; + +class MultiFactorAuthConfig extends SprykerMultiFactorAuthConfig +{ + /** + * Specifications: + * - Returns a list of enabled routes and their corresponding forms for user multi-factor authentication in the following format + * [ + * 'routeName' => ['formName'], + * ] + * + * @api + * + * @return array> + */ + public function getEnabledRoutesAndForms(): array + { + return [ + 'YOUR_ROUTE_NAME' => ['YOUR_FORM_NAME'], + ]; + } +} +``` + + +### Configure Back Office ACL access + +To allow access to MFA requests for the Back Office login, define a public ACL rule. + + +**config/Shared/config_default.php** + +```php +$config[AclConstants::ACL_DEFAULT_RULES] = [ + [ + 'bundle' => 'multi-factor-auth-merchant-portal', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], + [ + 'bundle' => 'agent-security-merchant-portal-gui', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], + +]; +``` + + +### Configure navigation + + +Add the MFA setup navigation item to one of the following files: + +Merchant Portal: `config/Zed/navigation-secondary-merchant-portal.xml` + +```xml + + + Set up Multi-Factor Authentication + multi-factor-auth-merchant-portal + user-management + set-up + +``` + +Merchant Agent Portal: `config/Zed/navigation-secondary-merchant-portal.xml` + + +```xml + + + Set up Multi-Factor Authentication + multi-factor-auth-merchant-portal + agent-user-management + set-up + +``` + + + + + +### Configure whitelisted routes + +To allow MFA routes to bypass default security restrictions during login or MFA validation flows in the Merchant Portal, extend the whitelisted route and path patterns in one of the following files: + +Merchant Portal: `src/Pyz/Zed/SecurityMerchantPortalGui/SecurityMerchantPortalGuiConfig.php` + +```php + - - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-feature.md %} diff --git a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md deleted file mode 100644 index da7986e322e..00000000000 --- a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Merchant + Product Offer Service Points Availability feature -description: Install the Marketplace Merchant + Product Offer Service Points Availability feature -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-merchant-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md deleted file mode 100644 index 48c35f2838f..00000000000 --- a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer Service Points Availability feature -description: Learn how to integrate the Product Offer Service Points Availability feature into your project -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/service-points/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md deleted file mode 100644 index 59ae6b82274..00000000000 --- a/docs/pbc/all/offer-management/202404.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer + Service Points feature -description: Learn how to integrate the Product Offer + Service Points feature into your project -last_updated: Sep 04, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md b/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md deleted file mode 100644 index 8d8138530d2..00000000000 --- a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Checkout feature -last_updated: May 3, 2021 -description: This document describes the process how to integrate the Marketplace Product Offer + Checkout feature into a Spryker Marketplace project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md b/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md deleted file mode 100644 index ed42b12d400..00000000000 --- a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer Shipment Availability feature -description: Learn how to integrate the Spryker Product Offer Shipment Availability feature into your Spryker marketplace project -last_updated: Sep 04, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/install-the-product-offer-shipment-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md b/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md deleted file mode 100644 index e671c9eb4a0..00000000000 --- a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Product Offer Shipment feature -description: Learn how to integrate the Product Offer Shipment feature into your project -last_updated: Jul 31, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-product-offer-shipment-feature.html - - /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-shipment-feature.html ---- - - - - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md b/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md deleted file mode 100644 index ab03a7e8c90..00000000000 --- a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Product Offer Glue API -description: This document describes the process how to integrate the Marketplace Product Offer Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-product-offer-feature-integration.html -related: - - title: Marketplace Product Offer feature walkthrough - link: docs/pbc/all/offer-management/page.version/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-glue-api.md %} diff --git a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md deleted file mode 100644 index da7986e322e..00000000000 --- a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Merchant + Product Offer Service Points Availability feature -description: Install the Marketplace Merchant + Product Offer Service Points Availability feature -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-merchant-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md deleted file mode 100644 index 549e975a7a7..00000000000 --- a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Service Points feature -description: Learn how you can install and implement the Marketplace Product Offer + Service Points feature in to your Spryker Unified Commerce project. -last_updated: July 05, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-product-offer-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md deleted file mode 100644 index 48c35f2838f..00000000000 --- a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer Service Points Availability feature -description: Learn how to integrate the Product Offer Service Points Availability feature into your project -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/service-points/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md deleted file mode 100644 index 59ae6b82274..00000000000 --- a/docs/pbc/all/offer-management/202410.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer + Service Points feature -description: Learn how to integrate the Product Offer + Service Points feature into your project -last_updated: Sep 04, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md b/docs/pbc/all/offer-management/202507.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md index 53319eb2f44..883d0c738d2 100644 --- a/docs/pbc/all/offer-management/202507.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md +++ b/docs/pbc/all/offer-management/202507.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md @@ -4,7 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the product_offer_validity.csv file to configure product offer validity dates in your Spryker shop. template: import-file-template redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-product-offer-validity.csv.html + - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-product-offer-validity.csv.html related: - title: Marketplace Product Offer feature walkthrough link: docs/pbc/all/offer-management/202507.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md deleted file mode 100644 index eed322d10e9..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Cart feature -last_updated: Dec 17, 2020 -description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart feature into a Spryker Marketplace project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md deleted file mode 100644 index 8d8138530d2..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Checkout feature -last_updated: May 3, 2021 -description: This document describes the process how to integrate the Marketplace Product Offer + Checkout feature into a Spryker Marketplace project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md deleted file mode 100644 index 9f8c9167148..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Promotions & Discounts feature -description: Learn how to integrate the Marketplace Product Offer + Promotions & Discounts feature into a Spryker project. -last_updated: Dec 17, 2024 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/offer-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md deleted file mode 100644 index 78c8fb487ed..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Quick Add to Cart feature -last_updated: May 16, 2022 -description: This article describes the process how to integrate the Marketplace Product Offer + Quick Add to Cart feature into a Spryker Marketplace project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md deleted file mode 100644 index ed42b12d400..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer Shipment Availability feature -description: Learn how to integrate the Spryker Product Offer Shipment Availability feature into your Spryker marketplace project -last_updated: Sep 04, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/install-the-product-offer-shipment-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md b/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md deleted file mode 100644 index e671c9eb4a0..00000000000 --- a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Product Offer Shipment feature -description: Learn how to integrate the Product Offer Shipment feature into your project -last_updated: Jul 31, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-product-offer-shipment-feature.html - - /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-shipment-feature.html ---- - - - - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md deleted file mode 100644 index da7986e322e..00000000000 --- a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Merchant + Product Offer Service Points Availability feature -description: Install the Marketplace Merchant + Product Offer Service Points Availability feature -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-merchant-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md deleted file mode 100644 index 549e975a7a7..00000000000 --- a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Service Points feature -description: Learn how you can install and implement the Marketplace Product Offer + Service Points feature in to your Spryker Unified Commerce project. -last_updated: July 05, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-product-offer-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md deleted file mode 100644 index 48c35f2838f..00000000000 --- a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer Service Points Availability feature -description: Learn how to integrate the Product Offer Service Points Availability feature into your project -last_updated: Sep 21, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/service-points/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-availability-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md deleted file mode 100644 index 59ae6b82274..00000000000 --- a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Offer + Service Points feature -description: Learn how to integrate the Product Offer + Service Points feature into your project -last_updated: Sep 04, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md b/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md deleted file mode 100644 index 236f30b4560..00000000000 --- a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant Portal Product Offer Data Import feature -last_updated: Oct 2, 2025 -description: This integration guide provides steps on how to integrate the Spryker Marketplace Merchant Portal Product Offer Data Import feature into a Spryker project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md b/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md deleted file mode 100644 index 9f8c9167148..00000000000 --- a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product Offer + Promotions & Discounts feature -description: Learn how to integrate the Marketplace Product Offer + Promotions & Discounts feature into a Spryker project. -last_updated: Dec 17, 2024 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/offer-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offer-module.md b/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offer-module.md new file mode 100644 index 00000000000..84646ae535e --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offer-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the Offer module +description: Use the guide to learn how to update the Spryker Offer module from an older version to a newer one in your Spryker projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-offer +originalArticleId: 1ffe0839-2ca7-4606-b192-73089d72c4e7 +redirect_from: + - /2021080/docs/mg-offer + - /2021080/docs/en/mg-offer + - /docs/mg-offer + - /docs/en/mg-offer + - /v1/docs/mg-offer + - /v1/docs/en/mg-offer + - /v2/docs/mg-offer + - /v2/docs/en/mg-offer + - /v3/docs/mg-offer + - /v3/docs/en/mg-offer + - /v4/docs/mg-offer + - /v4/docs/en/mg-offer + - /v5/docs/mg-offer + - /v5/docs/en/mg-offer + - /v6/docs/mg-offer + - /v6/docs/en/mg-offer + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-offer.html + - /docs/scos/dev/module-migration-guides/migration-guide-offer.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-offer-module.md %} diff --git a/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offergui-module.md b/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offergui-module.md new file mode 100644 index 00000000000..6fadda0c879 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/base-shop/upgrade-modules/upgrade-the-offergui-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the OfferGui module +description: Use the guide to learn how to update the Spryker OfferGui module from an older version to a newer one in your Spryker projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-offer-gui +originalArticleId: a1ebc096-e9a6-462b-a150-678344c8a7c9 +redirect_from: + - /2021080/docs/mg-offer-gui + - /2021080/docs/en/mg-offer-gui + - /docs/mg-offer-gui + - /docs/en/mg-offer-gui + - /v1/docs/mg-offer-gui + - /v1/docs/en/mg-offer-gui + - /v2/docs/mg-offer-gui + - /v2/docs/en/mg-offer-gui + - /v3/docs/mg-offer-gui + - /v3/docs/en/mg-offer-gui + - /v4/docs/mg-offer-gui + - /v4/docs/en/mg-offer-gui + - /v5/docs/mg-offer-gui + - /v5/docs/en/mg-offer-gui + - /v6/docs/mg-offer-gui + - /v6/docs/en/mg-offer-gui + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-offergui.html + - /docs/scos/dev/module-migration-guides/migration-guide-offergui.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-offergui-module.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/buy-box-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/buy-box-feature-overview.md new file mode 100644 index 00000000000..f979b3c89af --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/buy-box-feature-overview.md @@ -0,0 +1,85 @@ +--- +title: Buy Box feature overview +description: The Buy Box feature displays multiple merchant offers on product pages, letting customers compare and select which merchant to purchase from. +last_updated: February 12, 2026 +template: concept-topic-template +related: + - title: Install the Buy Box feature + link: /docs/pbc/all/offer-management/page.version/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.html + - title: Product Availability Display feature overview + link: /docs/pbc/all/warehouse-management-system/page.version/base-shop/product-availability-display-feature-overview.html +--- + +The Buy Box feature displays multiple merchant offers for the same product on the product detail page in a marketplace environment. When multiple merchants sell the same product, the Buy Box shows all available offers. This lets you compare prices and availability and select the merchant you want to purchase from. + +## Buy Box display + +The Buy Box appears on the product detail page and presents merchant offers in a structured list. + +Buy Box showing multiple merchant offers + +### Merchant offer information + +Each offer in the Buy Box displays the following information: + +- Merchant name with a link to the merchant profile page +- Product price offered by the merchant +- Radio button for merchant selection +- Availability status (when the [Product Availability Display feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/product-availability-display-feature-overview.html) is installed) + +### Merchant selection + +You select your preferred merchant using radio buttons. Only one merchant can be selected at a time. When you add the product to the cart, the selected merchant's offer is added. + +Merchant selection in Buy Box + +The first offer in the list is selected by default. The default selection depends on the configured sorting strategy. + +### URL-based merchant selection + +The Buy Box supports URL parameters that let you preselect a specific merchant offer. When the URL contains a merchant selection parameter, the corresponding offer is selected instead of the default offer. + +## Sorting strategies + +You can sort offers in the Buy Box by the following criteria: + +- **Price**: Lowest to highest (default) +- **Stock availability**: Highest to lowest stock quantity (requires the [Product Availability Display feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/product-availability-display-feature-overview.html)) + +When you sort by stock availability, merchants marked as never out of stock appear first, followed by merchants with the highest stock quantities. + +The sorting strategy determines which offer is pre-selected by default when customers first view the product page. + +## Integration with Product Availability Display + +When the Product Availability Display feature is installed, the Buy Box shows availability information for each merchant offer. This lets you compare prices and stock availability across merchants. + +Buy Box with availability per merchant + +For details about availability display, see [Product Availability Display feature overview](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/product-availability-display-feature-overview.html). + +## Configuration + +You can configure the Buy Box feature at the code level. The following configuration option is available: + +- Sorting strategy: by price or by stock availability + +For configuration details, see [Install the Buy Box feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.html). + +## Use cases + +Use the Buy Box feature in the following scenarios: +- Multiple merchants sell the same product in a marketplace +- Customers need to compare offers from different merchants +- Merchant selection should be visible and explicit on the product page + +## Current constraints + +- Merchant ratings or reviews are not displayed within the Buy Box. Links to merchant profiles are provided. +- Offers cannot be filtered based on shipping location, delivery time, or other criteria. +- Shipping costs per merchant are not shown. +- The feature does not provide offer recommendations based on customer preferences or purchase history. + +## Related documents + +- [Install the Buy Box feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.html) diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/glue-api-retrieve-product-offers.md b/docs/pbc/all/offer-management/202602.0/marketplace/glue-api-retrieve-product-offers.md new file mode 100644 index 00000000000..571607e81fe --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/glue-api-retrieve-product-offers.md @@ -0,0 +1,286 @@ +--- +title: "Glue API: Retrieve product offers" +description: Learn how to retrieve Spryker Marketplace product offers via the Spryker API for your Marketplace projects. +template: glue-api-storefront-guide-template +last_updated: Nov 21, 2023 +related: + - title: Retrieving product offer prices + link: docs/pbc/all/price-management/page.version/marketplace/glue-api-retrieve-product-offer-prices.html + - title: Retrieving product offer availabilities + link: docs/pbc/all/warehouse-management-system/page.version/marketplace/glue-api-retrieve-product-offer-availability.html +--- + +Product offers let different merchants sell the same product on the Marketplace. Product offers are created per concrete products, and you can get the offer information via retrieving the product information. + +In your development, product offers API can help you to retrieve relevant extended information for product offers. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: + +- [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) + +## Retrieve a product offer + +To retrieve the product offers, send the request: + +--- +`GET` {% raw %}**/product-offers/*{{offerId}}***{% endraw %} + +--- + +| PATH PARAMETER | DESCRIPTION | +| ------------------ | ---------------------- | +| {% raw %}***{{offerId}}***{% endraw %} | Unique identifier of a product offer to retrieve the availability of. To get it, [retrieve the offers of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.html). | + + + +### Request + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| -------------------- | ----------------- | ---------------- | +| include | Adds resource relationships to the request. |
      • product-offer-availabilities
      • product-offer-prices
      • merchants
      | + +| REQUEST | USAGE | +| ---------- | ----------- | +| `GET https://glue.mysprykershop.com/product-offers/offer56`| Retrieve information about an offer with the `offer56` ID. | +| `GET https://glue.mysprykershop.com/product-offers/offer78?product-offer-prices` | Retrieve information about the offer with `offer78` ID with the product offer prices. | +| `GET https://glue.mysprykershop.com/product-offers/offer101?product-offer-availabilities` | Retrieve the product offer with the `offer101` ID with the product offer availability. | +| `GET https://glue.mysprykershop.com/product-offers/offer101?merchants` | Retrieve the product offer with the `offer101` ID, including the merchant it belongs to. | + +### Response + +
      +Response sample: retrieve an offer + +```json +{ + "data": { + "type": "product-offers", + "id": "offer56", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.comm/product-offers/offer56" + } + } +} +``` + +
      + +
      +Response sample: retrieve an offer with product offer prices included + +```json +{ + "data": { + "type": "product-offers", + "id": "offer78", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer78" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer78" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer78", + "attributes": { + "price": 40522, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 40522, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 38400, + "netAmount": 39100, + "quantity": 3 + } + + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer78/product-offer-prices" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve an offer with product offer availabilities included + +```json +{ + "data": { + "type": "product-offers", + "id": "offer101", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000006", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.comm/product-offers/offer101?include=product-offer-prices,product-offer-availabilities" + }, + "relationships": { + "product-offer-availabilities": { + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer101" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-availabilities", + "id": "offer101", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.comm/product-offers/offer101/product-offer-availabilities" + } + + } + ] +} +``` + +
      + +
      +Response sample: retrieve an offer with merchant information included + +```json +{ + "data": { + "type": "product-offers", + "id": "offer101", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000006", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.comm/product-offers/offer101?include=product-offer-prices,product-offer-availabilities,merchants" + }, + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000006" + } + ] + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000006", + "attributes": { + "merchantName": "Sony Experts", + "merchantUrl": "/en/merchant/sony-experts", + "contactPersonRole": "Brand Manager", + "contactPersonTitle": "Ms", + "contactPersonFirstName": "Michele", + "contactPersonLastName": "Nemeth", + "contactPersonPhone": "030/123456789", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-logo.png", + "publicEmail": "support@sony-experts.com", + "publicPhone": "+49 30 234567691", + "description": "Capture your moment with the best cameras from Sony. From pocket-size to professional-style, they all pack features to deliver the best quality pictures.Discover the range of Sony cameras, lenses and accessories, and capture your favorite moments with precision and style with the best cameras can offer.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/sonyexperts-banner.png", + "deliveryTime": "1-3 days", + "latitude": "11.547788", + "longitude": "48.131058", + "faxNumber": "+49 30 234567600", + "legalInformation": { + "terms": "

      General Terms

      (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

      (2) We do not collect information from visitors of our site or other details to help you with your experience.

      Using your Information

      We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

      To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

      Protecting visitor information

      Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

      ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

      Sony Experts

      Matthias-Pschorr-Straße 1
      80336 München
      DE

      Phone: 030 1234567
      Email: support@sony-experts.com

      Represented by
      Managing Director: Max Mustermann
      Register Court: Munich
      Register Number: HYY 134306

      ", + "dataPrivacy": "Sony Experts values the privacy of your personal data." + } + }, + "links": { + "self": "https://glue.mysprykershop.comm/merchants/MER000006" + } + } + ] +} +``` + +
      + + + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --------------- | -------- | -------------------- | +| merchantSku | String | The merchant's unique identifier of the product offer. | +| merchantReference | String | Unique identifier of the merchant. | +| isDefault | Boolean | Defines if the product offer is [default](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html#product-offers-on-the-product-details-page) for the concrete product. | + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + +For the response attributes of the other included resources, see the following: +- [Retrieve product offer prices](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + + + + + +## Other management options + +You can use the product offers resource as follows: + +- [Retrieve product offers of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.html) +- Add product offers to a guest cart—[Creating a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.html#retrieve-a-guest-cart). +- Retrieve information for the product offers in a guest cart—[Retrieving a guest cart](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/guest-carts/manage-guest-carts.html#retrieve-a-guest-cart). +- Add product offers to a registered user's cart—[Adding items to a cart of a registered user](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-items-in-carts-of-registered-users.html#add-an-item-to-a-registered-users-cart). +- Retrieve information for the product offers in registered users' carts—[Retrieving all carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/marketplace/manage-using-glue-api/carts-of-registered-users/manage-carts-of-registered-users.html#retrieve-registered-users-carts). + +## Possible errors + +| CODE | DESCRIPTION | +| - | - | +| 3701 | Product offer was not found. | +| 3702 | Product offer ID is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md similarity index 95% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md index cbc4a8d4a31..f8262298041 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.md @@ -4,7 +4,8 @@ last_updated: Jun 07, 2021 description: This document describes the combined_merchant_product_offer.csv file to configure product offers in your Spryker shop. template: import-file-template redirect_from: -- /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-combined-merchant-product-offer.csv.html + - /docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.html + - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-combined-merchant-product-offer.csv.html related: - title: Marketplace Product Offer feature walkthrough link: docs/pbc/all/offer-management/page.version/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html @@ -13,7 +14,6 @@ related: - title: Execution order of data importers in Demo Shop link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html --- - This document describes the `combined_merchant_product_offer.csv` file to configure [Merchant product offer](/docs/pbc/all/offer-management/{{site.version}}/marketplace/marketplace-product-offer-feature-overview.html) information in your Spryker shop. {% info_block infoBox "" %} @@ -26,7 +26,7 @@ To learn more about bulk importing with the help of the configuration file, see ## Import file dependencies - [merchant.csv](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) -- `stores.php` configuration file of the demo shop PHP project +- `stores.php` configuration file of the demo shop PHP project ## Import file parameters diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md similarity index 95% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md index 8c56940ff2d..014bf7c43c8 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.md @@ -4,6 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the merchant_product_offer_store.csv file to configure merchant product offer store information in your Spryker shop. template: import-file-template redirect_from: +- /docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer-store.csv.html - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-merchant-product-offer-store.csv.html related: - title: Marketplace Product Offer feature walkthrough diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md similarity index 96% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md index 69fba1a5678..497b5dd4723 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.md @@ -4,6 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the `merchant_product_offer.csv` file to configure merchant product offer information in your Spryker shop. template: import-file-template redirect_from: +- /docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-offer.csv.html - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-merchant-product-offer.csv.html related: - title: Marketplace Product Offer feature walkthrough diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-shipment-type.csv.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-shipment-type.csv.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-shipment-type.csv.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-shipment-type.csv.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md similarity index 95% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md index e3a7d0ded46..7b96336bf34 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.md @@ -4,6 +4,7 @@ last_updated: Feb 26, 2021 description: This document describes the product_offer_validity.csv file to configure product offer validity dates in your Spryker shop. template: import-file-template redirect_from: +- /docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-validity.csv.html - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/file-details-product-offer-validity.csv.html related: - title: Marketplace Product Offer feature walkthrough diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-offer-management-data.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-offer-management-data.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-and-export-data/import-offer-management-data.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-and-export-data/import-offer-management-data.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/import-offers-ui.md b/docs/pbc/all/offer-management/202602.0/marketplace/import-offers-ui.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/import-offers-ui.md rename to docs/pbc/all/offer-management/202602.0/marketplace/import-offers-ui.md diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.md new file mode 100644 index 00000000000..95181256b07 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-buy-box-feature.md @@ -0,0 +1,295 @@ +--- +title: Install the Buy Box feature +description: Learn how to install the Buy Box feature that displays multiple merchant offers with selection and sorting +last_updated: February 13, 2026 +template: feature-integration-guide-template +related: + - title: Buy Box feature overview + link: /docs/pbc/all/offer-management/page.version/marketplace/buy-box-feature-overview.html + - title: Product Availability Display feature overview + link: /docs/pbc/all/warehouse-management-system/page.version/base-shop/product-availability-display-feature-overview.html +--- + +Use this guide to install the Buy Box feature for marketplace scenarios. + +## Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------|---------|-------------------| +| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | +| Marketplace Product | {{site.version}} | [Install the Marketplace Product feature](/docs/pbc/all/product-information-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.html) | +| Marketplace Product Offer | {{site.version}} | [Install the Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) | +| Marketplace Inventory Management | {{site.version}} | [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{site.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | +| Marketplace Merchant | {{site.version}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | + +## 1. Install the required modules + +Install the required modules by using Composer: + +```bash +composer require spryker-feature/buy-box:"dev-master" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------|-------------------| +| BuyBox | vendor/spryker-feature/buy-box | + +{% endinfo_block %} + +## 2. Set up configuration + +Add the following configuration to your project: + +**src/Pyz/Yves/BuyBox/BuyBoxConfig.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + BuyBoxWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `BuyBoxWidget` is registered by checking that the buy box appears on product detail pages in marketplace mode with multiple merchant offers. + +{% endinfo_block %} + +## 5. Set up templates + +Integrate the BuyBoxWidget into the product detail page template. + +**src/Pyz/Yves/ProductDetailPage/Theme/default/components/molecules/product-configurator/product-configurator.twig** + +```twig +{% raw %} +{% extends molecule('product-configurator', '@SprykerShop:ProductDetailPage') %} + +{% set isProductConcrete = data.product.idProductConcrete is not empty %} +{% set buyBoxWidget = findWidget('BuyBoxWidget', [data.product, app.request]) %} +{% set productOffersCount = buyBoxWidget.products | length %} +{% set showProductAvailability = isProductConcrete and productOffersCount == 0 %} +{% set isAvailable = isProductConcrete and (data.product.available or productOffersCount) %} + +{% block body %} + {# ... existing code ... #} + + {% widget 'AddToCartFormWidget' args [config, data.product, isDisabled, options] with { + data: { + isService: sspServiceDetectorWidget and sspServiceDetectorWidget.isService, + }, + embed: { + showProductAvailability: showProductAvailability, + buyBoxWidget: buyBoxWidget, + }, + } only %} + {% block embeddedData %} + {# ... existing code ... #} + + {% if not shipmentTypeServicePointSelectorWidget or not shipmentTypeServicePointSelectorWidget.hasShipmentTypeWithRequiredLocation %} +
      + {% widget embed.buyBoxWidget %} + {% block content %} + {{ parent() }} + {% endblock %} + {% endwidget %} +
      + {% endif %} + + {# ... rest of the template ... #} + {% endblock %} + {% endwidget %} + + {# ... rest of the template ... #} +{% endblock %} +{% endraw %} +``` + +{% info_block infoBox "Template change summary" %} + +This template change: +- Calculates `productOffersCount` by using the `BuyBoxWidget`. +- Sets `showProductAvailability` so availability displays only when no product offers exist. +- Passes `buyBoxWidget` through the embed context to render it within `AddToCartFormWidget`. +- Replaces the default merchant product widgets with the unified `BuyBoxWidget` display. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the Buy Box displays correctly on product detail pages: +- When multiple merchant offers exist, the Buy Box shows all available offers. +- Each offer displays merchant information and price. +- You can select different merchant offers. +- When no product offers exist, availability information displays instead. + +{% endinfo_block %} + +## 6. Import glossary data + +Import glossary keys for buy box translations: + +**data/import/common/common/glossary.csv** + +```csv +buy_box.sold_by,"Sold by",en_US +buy_box.sold_by,"Verkauft von",de_DE +buy_box.view_merchant,"View seller",en_US +buy_box.view_merchant,"Händler ansehen",de_DE +``` + +Run the data import: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the glossary keys have been imported by checking the `spy_glossary_key` and `spy_glossary_translation` tables. Verify that the buy box displays the correct translations on the storefront. + +{% endinfo_block %} + +## 7. Set up frontend + +Build the frontend to include the new styles and assets: + +```bash +console frontend:yves:build +``` + +## 8. Optional: Add stock-based sorting and availability per offer + +To enable stock-based sorting and show availability per merchant offer, install the Product Availability Display feature and configure the integration. + +### Install Product Availability Display feature + +Follow the [Install the Product Availability Display feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.html) guide to install the availability modules. + +### Add availability to product offers + +Register the plugin that adds availability data to product offers: + +**src/Pyz/Client/ProductOfferStorage/ProductOfferStorageDependencyProvider.php** + +```php + + */ + protected function getProductOfferStorageBulkExpanderPlugins(): array + { + return [ + new ProductOfferAvailabilityProductOfferStorageBulkExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `ProductOfferAvailabilityProductOfferStorageBulkExpanderPlugin` is registered by viewing a product with multiple merchant offers and verifying that each offer displays its own availability information. + +{% endinfo_block %} + +### Configure stock-based sorting + +To sort offers by stock instead of price, update your Buy Box configuration (from step 2) to use `SORT_BY_STOCK`: + +**src/Pyz/Yves/BuyBox/BuyBoxConfig.php** + +```php +public function getSortingStrategy(): string +{ + return static::SORT_BY_STOCK; // Sort by highest to lowest stock +} +``` + +This enables stock-aware Buy Box functionality with per-offer availability and stock-based sorting. diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md similarity index 100% rename from docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-data-import-feature.md diff --git a/docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md similarity index 100% rename from docs/pbc/all/offer-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-feature.md diff --git a/docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-merchant-portal-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-merchant-portal-feature.md similarity index 100% rename from docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-merchant-portal-feature.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-management-merchant-portal-order-management-merchant-portal-feature.md diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md new file mode 100644 index 00000000000..8c26d732ec2 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Portal Product Offer Shipment feature +last_updated: Sep 16, 2023 +description: This integration guide provides steps on how to integrate the Marketplace Merchant Portal Product Offer Shipment feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-portal-product-offer-shipment-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md new file mode 100644 index 00000000000..97256ec862f --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Product Offer + Cart feature +last_updated: Dec 17, 2020 +description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart feature into a Spryker Marketplace project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-cart-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md new file mode 100644 index 00000000000..495292ed1d7 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Offer + Checkout feature +last_updated: May 3, 2021 +description: This document describes the process how to integrate the Marketplace Product Offer + Checkout feature into a Spryker Marketplace project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-checkout-feature.html + - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-offer-checkout-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-checkout-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.md new file mode 100644 index 00000000000..6c10d78dba1 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Offer feature +last_updated: Mar 7, 2022 +description: This document describes the process how to integrate the Marketplace Product Offer feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Product Offer feature walkthrough + link: docs/pbc/all/offer-management/page.version/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-marketplace-product-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-marketplace-product-feature.md new file mode 100644 index 00000000000..b4dfd2afa84 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-marketplace-product-feature.md @@ -0,0 +1,13 @@ +--- +title: Install the Marketplace Product Offer + Marketplace Product feature +last_updated: Jun 25, 2021 +description: This document describes the process how to integrate the Marketplace Product + Marketplace Product Offer feature into a Spryker Marketplace project. +template: feature-integration-guide-template +related: + - title: Marketplace Product feature walkthrough + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html + - title: Marketplace Product Offer feature walkthrough + link: docs/pbc/all/offer-management/page.version/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-marketplace-product-offer-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md new file mode 100644 index 00000000000..eda72f10d62 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Offer + Promotions & Discounts feature +description: Learn how to integrate the Marketplace Product Offer + Promotions & Discounts feature into a Spryker project. +last_updated: Dec 17, 2024 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.html + - /docs/pbc/all/offer-management/202505.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-promotions-and-discounts-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..b3d628e60b0 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Product Offer + Quick Add to Cart feature +last_updated: May 16, 2022 +description: This article describes the process how to integrate the Marketplace Product Offer + Quick Add to Cart feature into a Spryker Marketplace project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-quick-add-to-cart-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md new file mode 100644 index 00000000000..62814b685a8 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Product Offer Shipment Availability feature +description: Learn how to integrate the Spryker Product Offer Shipment Availability feature into your Spryker marketplace project +last_updated: Sep 04, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-availability-feature.html + - /docs/pbc/all/offer-management/202311.0/marketplace/import-and-export-data/install-the-product-offer-shipment-availability-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md new file mode 100644 index 00000000000..12a33aeeea6 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.md @@ -0,0 +1,15 @@ +--- +title: Install the Product Offer Shipment feature +description: Learn how to integrate the Product Offer Shipment feature into your project +last_updated: Jul 31, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/install-the-product-offer-shipment-feature.html + - /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-shipment-feature.html +--- + + + + +{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-shipment-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.md new file mode 100644 index 00000000000..9bbcecf4867 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-cart-glue-api.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Product Offer + Cart Glue API +description: This integration guide provides steps on how to integrate the Spryker Marketplace Product Offer + Cart Glue API feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-cart-glue-api.md %} diff --git a/docs/pbc/all/offer-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md similarity index 100% rename from docs/pbc/all/offer-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.md diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.md new file mode 100644 index 00000000000..d60de698335 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-wishlist-glue-api.md @@ -0,0 +1,205 @@ +--- +title: Install the Marketplace Product Offer + Wishlist Glue API +last_updated: Feb 19, 2026 +description: This article describes how to integrate the Spryker Marketplace Product Offer + Wishlist Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +--- + +This document describes how to integrate the Marketplace Product Offer + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|-|-|-| +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer API | {{page.release_tag}} | [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker/merchant-product-offer-wishlist-rest-api:"^1.0.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| MerchantProductOfferWishlistRestApi | spryker/merchant-product-offer-wishlist-rest-api | + +{% endinfo_block %} + +### 2) Set up transfer objects + +Generate transfer changes: + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|-|-|-|-| +| WishlistItemRequest.productOfferReference | property | Created | src/Generated/Shared/Transfer/WishlistItemRequestTransfer | +| RestWishlistItemsAttributes.productOfferReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | +| RestWishlistItemsAttributes.merchantReference | property | Created | src/Generated/Shared/Transfer/RestWishlistItemsAttributesTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|-------------|-------------|---------------|-----------------| +| ValidMerchantProductOfferAddItemPreCheckPlugin | Validates merchant product offer in a wishlist item before the add item operation is executed. | | Spryker\Zed\MerchantProductOfferWishlist\Communication\Plugin\Wishlist | +| ValidMerchantProductOfferUpdateItemPreCheckPlugin | Validates merchant product offer in a wishlist item before the update item operation is executed. | | Spryker\Zed\MerchantProductOfferWishlist\Communication\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesMapperPlugin | Populates `RestWishlistItemsAttributes.id` with the following pattern: `{WishlistItem.sku}_{WishlistItemTransfer.productOfferReference}`. | | Spryker\Glue\MerchantProductOfferWishlistRestApi\Plugin\Wishlist | +| ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin | Checks if the requested wishlist item exists in the wishlist item collection. | | Spryker\Zed\MerchantProductOfferWishlistRestApi\Communication\Plugin | +| MerchantByMerchantReferenceResourceRelationshipPlugin | Adds `merchants` resources as a relationship by the merchant references in the attributes. | | Spryker\Glue\MerchantsRestApi\Plugin\GlueApplication | + +
      src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php + +```php +addRelationship( + WishlistsRestApiConfig::RESOURCE_WISHLIST_ITEMS, + new MerchantByMerchantReferenceResourceRelationshipPlugin() + ); + + return $resourceRelationshipCollection; + } +} +``` + +
      + +
      src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php + +```php + + */ + protected function getAddItemPreCheckPlugins(): array + { + return [ + new ValidMerchantProductOfferAddItemPreCheckPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\WishlistExtension\Dependency\Plugin\UpdateItemPreCheckPluginInterface> + */ + protected function getUpdateItemPreCheckPlugins(): array + { + return [ + new ValidMerchantProductOfferUpdateItemPreCheckPlugin(), + ]; + } + +} +``` + +
      + +
      src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +
      + +
      src/Pyz/Zed/WishlistsRestApi/WishlistsRestApiDependencyProvider.php + +```php + + */ + protected function getRestWishlistItemsAttributesDeleteStrategyPlugins(): array + { + return [ + new ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin(), + ]; + } +} +``` + +
      + +{% info_block warningBox "Verification" %} + +Make sure that the `ProductOfferRestWishlistItemsAttributesMapperPlugin` is set up by sending the request to `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get `attributes` in the response. + +Make sure that the `ValidMerchantProductOfferAddItemPreCheckPlugin` is set up by sending the request to `POST https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items`. You should have the wishlist item added only when the product has the specified offer reference, offer is active and approved, and merchant, who owns it, is active and approved. + +Make sure that the `ValidMerchantProductOfferUpdateItemPreCheckPlugin` is set up by sending the request `PATCH https://glue.mysprykershop.com/wishlists/{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}/wishlist-items/{% raw %}{{{% endraw %}wishlist_item_id{% raw %}}}{% endraw %}`. You should have the wishlist item updated only when the product has the specified offer reference, offer is active and approved, and merchant, who owns it, is active and approved. + +Make sure that the `ProductOfferRestWishlistItemsAttributesDeleteStrategyPlugin` is set up by sending the request to `DELETE https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}/wishlist-items/{% raw %}{{wishlistItemId}}{% endraw %}`. You should get the product offer wishlist item deleted. + +{% endinfo_block %} diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferdataimport-module.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferdataimport-module.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferdataimport-module.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferdataimport-module.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductoffersrestapi-module.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductoffersrestapi-module.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductoffersrestapi-module.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductoffersrestapi-module.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferstorage-module.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferstorage-module.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferstorage-module.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-merchantproductofferstorage-module.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productmerchantportalgui-module.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productmerchantportalgui-module.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productmerchantportalgui-module.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productmerchantportalgui-module.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productofferpricesrestapi-module.md b/docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productofferpricesrestapi-module.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productofferpricesrestapi-module.md rename to docs/pbc/all/offer-management/202602.0/marketplace/install-and-upgrade/upgrade-modules/upgrade-the-productofferpricesrestapi-module.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md b/docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md similarity index 99% rename from docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md rename to docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md index b51dc67a89d..5b4519b61db 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/create-product-offers.md @@ -29,15 +29,15 @@ To create a product offer in the Merchant Portal, follow the steps: 2. Select a **STORE**. 3. Select a **CURRENCY**. 4. Optional: Enter any of the prices: - + - **NET DEFAULT** - **GROSS DEFAULT** - **NET ORIGINAL** - **GROSS ORIGINAL** - + 5. Optional: Enter a **VOLUME QUANTITY**. 6. Repeat steps 1-5 until you add all the needed prices. - + 10. Optional: Select **Validity Dates**. 11. Scroll up and select **Create**. This opens the **Offers** page with a success message displayed. The created product offer is displayed in the list. diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/edit-product-offers.md b/docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/edit-product-offers.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/edit-product-offers.md rename to docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/edit-product-offers.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-product-offers-in-the-merchant-portal.md b/docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-product-offers-in-the-merchant-portal.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/manage-in-the-merchant-portal/manage-product-offers-in-the-merchant-portal.md rename to docs/pbc/all/offer-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-product-offers-in-the-merchant-portal.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/manage-merchant-product-offers.md b/docs/pbc/all/offer-management/202602.0/marketplace/manage-merchant-product-offers.md similarity index 96% rename from docs/pbc/all/offer-management/202512.0/marketplace/manage-merchant-product-offers.md rename to docs/pbc/all/offer-management/202602.0/marketplace/manage-merchant-product-offers.md index 7fd175f092c..8541f440137 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/manage-merchant-product-offers.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/manage-merchant-product-offers.md @@ -3,6 +3,8 @@ title: Manage merchant product offers last_updated: Apr 19, 2021 description: This document describes how to view and manage merchant product offers in the Back Office. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202512.0/marketplace/manage-merchant-product-offers.html related: - title: Marketplace Product Offer feature overview link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html @@ -37,7 +39,7 @@ You can sort by offers belonging to a certain Merchant: On the **Offers** page, there is a table with all the offers available in the Marketplace. The table includes: - Offer ID -- Reference +- Reference - Merchant - SKU - Name diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-domain-model-and-relationships.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-domain-model-and-relationships.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md similarity index 95% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md index c6cd9fe704f..4fb151be0bd 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Merchant Portal Product Offer Management feature overview description: This document describes product offer management in the Merchant Portal. template: concept-topic-template +redirect_from: + - /docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-management-feature-overview.html last_updated: Nov 21, 2023 related: - title: Managing marketplace product offers diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-shipment-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-shipment-feature-overview.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-merchant-portal-product-offer-shipment-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-merchant-portal-product-offer-shipment-feature-overview.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/marketplace-product-offer-feature-domain-model-and-relationships.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/marketplace-product-offer-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/marketplace-product-offer-feature-domain-model-and-relationships.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/marketplace-product-offer-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-in-the-back-office.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-in-the-back-office.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-in-the-back-office.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-in-the-back-office.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-storage.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-storage.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-storage.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-storage.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-store-relation.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-store-relation.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-store-relation.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-store-relation.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-validity-dates.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-validity-dates.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-validity-dates.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-domain-model-and-relationships/product-offer-validity-dates.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-overview.md similarity index 99% rename from docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-overview.md index c8a0fea5014..0d39db7fb38 100644 --- a/docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-overview.md +++ b/docs/pbc/all/offer-management/202602.0/marketplace/marketplace-product-offer-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Product Offer feature overview description: This document contains concept information for the Product offers feature in the Spryker Commerce OS. template: concept-topic-template +redirect_from: + - /docs/pbc/all/offer-management/202512.0/marketplace/marketplace-product-offer-feature-overview.html last_updated: Jan 12, 2024 related: - title: Managing product offers diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/product-offer-shipment-availability-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/product-offer-shipment-availability-feature-overview.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/product-offer-shipment-availability-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/marketplace/product-offer-shipment-availability-feature-overview.md diff --git a/docs/pbc/all/offer-management/202512.0/marketplace/product-offer-shipment-feature-overview.md b/docs/pbc/all/offer-management/202602.0/marketplace/product-offer-shipment-feature-overview.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/marketplace/product-offer-shipment-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/marketplace/product-offer-shipment-feature-overview.md diff --git a/docs/pbc/all/offer-management/202602.0/marketplace/render-merchant-product-offers-on-the-storefront.md b/docs/pbc/all/offer-management/202602.0/marketplace/render-merchant-product-offers-on-the-storefront.md new file mode 100644 index 00000000000..be63d6f564b --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/marketplace/render-merchant-product-offers-on-the-storefront.md @@ -0,0 +1,65 @@ +--- +title: Render merchant product offers on the Storefront +last_updated: Nov 05, 2021 +description: Learn how to render the Merchant Product Offers on different types of Spryker Storefront pages. +template: howto-guide-template +redirect_from: + - /docs/marketplace/dev/feature-walkthroughs/202204.0/marketplace-product-offer-feature-walkthrough/rendering-product-offers-on-the-storefront.html +--- + +This document explains how to render merchant product offers on the Storefront. + +## Prerequisites + +The [MerchantProductOfferWidget](https://github.com/spryker-shop/merchant-product-offer-widget) module is responsible for rendering product offers on the Storefront. Make sure it's installed in your project before adding the product offers to the Storefront. + +## Rendering product offers on the product details page + +To render the MerchantProductOfferWidget on the product details page, add it to the `product-configurator.twig` molecule at the project and vendor levels. + +Project level path: `/src/Pyz/Yves/ProductDetailPage/Theme/default/components/molecules/product-configurator/product-configurator.twig` + +Vendor level path: `/vendor/spryker/spryker-shop/Bundles/ProductDetailPage/src/SprykerShop/Yves/ProductDetailPage/Theme/default/components/molecules/product-configurator/product-configurator.twig` + +```twig +{% raw %} +Widget code: {% widget 'MerchantProductOfferWidget' args [data.product] only %}{% endwidget %} +{% endraw %} + +``` + +## Rendering product offers on the cart page + +To render the MerchantProductOfferWidget module to the *Cart* page, add it to the `product-cart-item.twig` molecule at the vendor level: + +```twig +{% raw %} +Widget code: {% widget 'ProductOfferSoldByMerchantWidget' args [data.product] only %}{% endwidget %} +{% endraw %} +``` + +## Rendering product offers on the checkout pages + +To render the MerchantProductOfferWidget module on the checkout pages, change the *summary-item* molecule at the summary (`/vendor/spryker/spryker-shop/Bundles/CheckoutPage/src/SprykerShop/Yves/CheckoutPage/Theme/default/views/summary/summary.twig`) and shipment (`/vendor/spryker/spryker-shop/Bundles/CheckoutPage/src/SprykerShop/Yves/CheckoutPage/Theme/default/views/shipment/shipment.twig`) steps to the *summery-note* molecule with the new data parameters: + +```twig +{% raw %} +{% embed molecule('summary-node', 'CheckoutPage') with { + data: { + node: item, + }, +.... +{% endembed %} +{% endraw %} + +``` + +{% info_block infoBox "Info" %} + +Keep in mind that: + +- *summary-node* already includes a new summary-product-packaging-unit-node molecule. + +- *summary-product-packaging-unit-node* molecule already includes a widget with offers. + +{% endinfo_block %} diff --git a/docs/pbc/all/offer-management/202512.0/offer-management.md b/docs/pbc/all/offer-management/202602.0/offer-management.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/offer-management.md rename to docs/pbc/all/offer-management/202602.0/offer-management.md diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/glue-api-retrieve-product-offer-service-point-availability.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/glue-api-retrieve-product-offer-service-point-availability.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/glue-api-retrieve-product-offer-service-point-availability.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/glue-api-retrieve-product-offer-service-point-availability.md diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/import-file-details-product-offer-service.csv.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/import-file-details-product-offer-service.csv.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/import-file-details-product-offer-service.csv.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/import-file-details-product-offer-service.csv.md diff --git a/docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md similarity index 100% rename from docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-merchant-portal-product-offer-service-points-feature.md diff --git a/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md new file mode 100644 index 00000000000..25d0c3486ce --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Merchant + Product Offer Service Points Availability feature +description: Install the Marketplace Merchant + Product Offer Service Points Availability feature +last_updated: Sep 21, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-marketplace-merchant-product-offer-service-points-availability-feature.html + - /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-merchant-product-offer-service-points-availability-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-merchant-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md new file mode 100644 index 00000000000..93e1a5de0f4 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-marketplace-product-offer-service-points-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Marketplace Product Offer + Service Points feature +description: Learn how you can install and implement the Marketplace Product Offer + Service Points feature in to your Spryker Unified Commerce project. +last_updated: July 05, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202311.0/marketplace/install-and-upgrade/install-the-marketplace-product-offer-service-points-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md new file mode 100644 index 00000000000..e8e69437c3c --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Product Offer Service Points Availability feature +description: Learn how to integrate the Product Offer Service Points Availability feature into your project +last_updated: Sep 21, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-availability-feature.html + - /docs/pbc/all/service-points/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-availability-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-availability-feature.md %} diff --git a/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md new file mode 100644 index 00000000000..c7e16017626 --- /dev/null +++ b/docs/pbc/all/offer-management/202602.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Product Offer + Service Points feature +description: Learn how to integrate the Product Offer + Service Points feature into your project +last_updated: Sep 04, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202507.0/unified-commerce/install-features/install-the-product-offer-service-points-feature.html + - /docs/pbc/all/offer-management/202311.0/unified-commerce/install-and-upgrade/install-the-product-offer-service-points-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/marketplace-merchant-portal-product-offer-service-point-feature-overview.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/marketplace-merchant-portal-product-offer-service-point-feature-overview.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/marketplace-merchant-portal-product-offer-service-point-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/marketplace-merchant-portal-product-offer-service-point-feature-overview.md diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/product-offer-service-feature-overview.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/product-offer-service-feature-overview.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/product-offer-service-feature-overview.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/product-offer-service-feature-overview.md diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/product-offer-service-points-availability-feature.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/product-offer-service-points-availability-feature.md similarity index 100% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/product-offer-service-points-availability-feature.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/product-offer-service-points-availability-feature.md diff --git a/docs/pbc/all/offer-management/202512.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md b/docs/pbc/all/offer-management/202602.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md similarity index 96% rename from docs/pbc/all/offer-management/202512.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md rename to docs/pbc/all/offer-management/202602.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md index f1fcd596990..9975706339d 100644 --- a/docs/pbc/all/offer-management/202512.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md +++ b/docs/pbc/all/offer-management/202602.0/unified-commerce/unified-commerce-create-and-edit-product-offers.md @@ -2,6 +2,8 @@ title: "Unified Commerce: Create and edit product offers" description: Learn how to create and edit product offers for your Spryker Unified Commerce Project. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/offer-management/202512.0/unified-commerce/unified-commerce-create-and-edit-product-offers.html last_updated: Jan 19, 2024 --- diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md b/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md deleted file mode 100644 index 98620c2c2a0..00000000000 --- a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Order Management feature -description: Learn how to integrate the Order Management feature into a Spryker project. -last_updated: Apr 14, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-features/install-the-order-management-feature.html - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-order-management-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/order-management-feature-integration.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-order-management-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md deleted file mode 100644 index 9d6e05a2472..00000000000 --- a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Quick Add to Cart + Non-splittable Products feature -description: Install the Quick Add to Cart and Non-splittable Products features in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md b/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md deleted file mode 100644 index 588f9ee9018..00000000000 --- a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Reclamations feature integration -description: Learn how you can integrate the Reclamations feature in to your Spryker Order Management System. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/reclamations-feature-integration -originalArticleId: a4e601de-2e86-44a0-8806-d3ba35776f6b -redirect_from: - - /2021080/docs/reclamations-feature-integration - - /2021080/docs/en/reclamations-feature-integration - - /docs/reclamations-feature-integration - - /docs/en/reclamations-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/reclamations-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-reclamations-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/reclamations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-reclamations-feature.md %} diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md b/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md deleted file mode 100644 index a31063de3c1..00000000000 --- a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Splittable Order Items feature -description: Learn with Order Management system how to Integrate the Splittable Order Items feature into your Spryker project. -last_updated: Jun 20, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/splittable-order-items-integration -originalArticleId: ea499c83-900d-4788-bcaf-c7981220b441 -redirect_from: - - /v3/docs/splittable-order-items-integration - - /v3/docs/en/splittable-order-items-integration - - /docs/scos/dev/feature-integration-guides/202311.0/splittable-order-items-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-splittable-order-items-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/splittable-order-items-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-splittable-order-items-feature.md %} diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md b/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md deleted file mode 100644 index dc8d04f1597..00000000000 --- a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Install the Order Management Glue API -description: Learn how to install the Spryker order management Glue API for your Spryker Cloud Commerce OS project -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-order-management-feature-integration -originalArticleId: ad1c861b-392a-48e1-858e-f22b0adf7851 -redirect_from: - - /2021080/docs/glue-api-order-management-feature-integration - - /2021080/docs/en/glue-api-order-management-feature-integration - - /docs/glue-api-order-management-feature-integration - - /docs/en/glue-api-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-glue-api/install-the-order-management-glue-api.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-order-management-feature-integration.html -related: - - title: Install the Order Management feature - link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html - - title: Retrieving orders - link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html - - title: Retrieving customer orders - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-order-management-glue-api.md %} diff --git a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md deleted file mode 100644 index 9d6e05a2472..00000000000 --- a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Quick Add to Cart + Non-splittable Products feature -description: Install the Quick Add to Cart and Non-splittable Products features in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-non-splittable-products-feature.md %} diff --git a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md b/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md deleted file mode 100644 index 588f9ee9018..00000000000 --- a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Reclamations feature integration -description: Learn how you can integrate the Reclamations feature in to your Spryker Order Management System. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/reclamations-feature-integration -originalArticleId: a4e601de-2e86-44a0-8806-d3ba35776f6b -redirect_from: - - /2021080/docs/reclamations-feature-integration - - /2021080/docs/en/reclamations-feature-integration - - /docs/reclamations-feature-integration - - /docs/en/reclamations-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/reclamations-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-reclamations-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/reclamations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-reclamations-feature.md %} diff --git a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md b/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md deleted file mode 100644 index a31063de3c1..00000000000 --- a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Splittable Order Items feature -description: Learn with Order Management system how to Integrate the Splittable Order Items feature into your Spryker project. -last_updated: Jun 20, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/splittable-order-items-integration -originalArticleId: ea499c83-900d-4788-bcaf-c7981220b441 -redirect_from: - - /v3/docs/splittable-order-items-integration - - /v3/docs/en/splittable-order-items-integration - - /docs/scos/dev/feature-integration-guides/202311.0/splittable-order-items-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-splittable-order-items-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/splittable-order-items-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-splittable-order-items-feature.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md deleted file mode 100644 index cb0c220a268..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Order Amendment feature -description: Learn how to integrate the Order Amendment feature into a Spryker project. -last_updated: Mar 28, 2025 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/order-management-system/202505.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-order-amendment-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md deleted file mode 100644 index 588f9ee9018..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Reclamations feature integration -description: Learn how you can integrate the Reclamations feature in to your Spryker Order Management System. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/reclamations-feature-integration -originalArticleId: a4e601de-2e86-44a0-8806-d3ba35776f6b -redirect_from: - - /2021080/docs/reclamations-feature-integration - - /2021080/docs/en/reclamations-feature-integration - - /docs/reclamations-feature-integration - - /docs/en/reclamations-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/reclamations-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-reclamations-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/reclamations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-reclamations-feature.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md deleted file mode 100644 index 8e77be4580f..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Reorder feature -description: Integrate the Reorder feature into your project -last_updated: May 25, 2025 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-reorder-feature.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md deleted file mode 100644 index a31063de3c1..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Splittable Order Items feature -description: Learn with Order Management system how to Integrate the Splittable Order Items feature into your Spryker project. -last_updated: Jun 20, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/splittable-order-items-integration -originalArticleId: ea499c83-900d-4788-bcaf-c7981220b441 -redirect_from: - - /v3/docs/splittable-order-items-integration - - /v3/docs/en/splittable-order-items-integration - - /docs/scos/dev/feature-integration-guides/202311.0/splittable-order-items-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-splittable-order-items-feature.html - - /docs/scos/dev/feature-integration-guides/202204.0/splittable-order-items-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-splittable-order-items-feature.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md deleted file mode 100644 index dc8d04f1597..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Install the Order Management Glue API -description: Learn how to install the Spryker order management Glue API for your Spryker Cloud Commerce OS project -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-order-management-feature-integration -originalArticleId: ad1c861b-392a-48e1-858e-f22b0adf7851 -redirect_from: - - /2021080/docs/glue-api-order-management-feature-integration - - /2021080/docs/en/glue-api-order-management-feature-integration - - /docs/glue-api-order-management-feature-integration - - /docs/en/glue-api-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-glue-api/install-the-order-management-glue-api.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-order-management-feature-integration.html -related: - - title: Install the Order Management feature - link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html - - title: Retrieving orders - link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html - - title: Retrieving customer orders - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-order-management-glue-api.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md b/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md deleted file mode 100644 index 7adcea065b2..00000000000 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Install the Order Management Glue API -last_updated: Jul 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-order-management-feature-integration -originalArticleId: ad1c861b-392a-48e1-858e-f22b0adf7851 -redirect_from: - - /2021080/docs/glue-api-order-management-feature-integration - - /2021080/docs/en/glue-api-order-management-feature-integration - - /docs/glue-api-order-management-feature-integration - - /docs/en/glue-api-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-order-management-feature-integration.html - - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-glue-api/install-the-order-management-glue-api.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-order-management-feature-integration.html -related: - - title: Install the Order Management feature - link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html - - title: Retrieving orders - link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html - - title: Retrieving customer orders - link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-order-management-glue-api.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/datapayload-conversion.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/datapayload-conversion.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/datapayload-conversion.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/datapayload-conversion.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/multi-language-setup.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/multi-language-setup.md new file mode 100644 index 00000000000..5c4777daf52 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/multi-language-setup.md @@ -0,0 +1,257 @@ +--- +title: Multi-language setup +description: This document explains multi-language setup details and things to consider when setting up multi-locales in your Spryker projects. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/multi-language-setup +originalArticleId: cf160490-ae8e-45c1-80a6-bcd667498ae0 +redirect_from: + - /2021080/docs/multi-language-setup + - /2021080/docs/en/multi-language-setup + - /docs/multi-language-setup + - /docs/en/multi-language-setup + - /v6/docs/multi-language-setup + - /v6/docs/en/multi-language-setup + - /v5/docs/multi-language-setup + - /v5/docs/en/multi-language-setup + - /v4/docs/multi-language-setup + - /v4/docs/en/multi-language-setup + - /docs/scos/dev/back-end-development/data-manipulation/datapayload-conversion/multi-language-setup.html +--- + +All textual elements can be created in various languages to support content creation for multiple language setups—for example, for your international stores. +- Customers can switch locales in the shop. +- Locales can be shared among stores. + +The `Glossary` module is responsible for managing glossary keys that hold the localized content in the database. + +For each entry in glossary keys, there is a corresponding entry in the `Touch` table. The `Touch` table has a time stamp that marks the last update made on the glossary keys that needs to be also updated in the frontend key-value storage. + +The glossary keys are kept in sync on the key-value storage by using a cron job that periodically runs the update storage collector command. The storage collector grabs the glossary key entries that were marked for an update in the `Touch` table after the last storage update command was run. + +## Set up stores with multiple locales + +This section describes the steps that you need to consider when you have to set up stores with multiple locales. + +### Configure locales for store + +The stores' configuration can be found in the `config/Shared/stores.php` file. + +For each store, you can define a set of locales, and the first locale is the default one. + +```php + [ + // first entry is default + 'en' => 'en_US', + 'de' => 'de_DE', + ] +``` + +{% info_block infoBox %} + +In the previous example, the `en` key is associated with the `en_US` locale. + +{% endinfo_block %} + +### URL routing for stores with multiple locales + +In Yves, the key for the selected locale is contained in the URL. If URL does not contain any key, the default locale is considered the current one. + +In Demoshop, for listing the current content of the cart, the following URLs are routed to the same controller and action: + +| URL | LOCALE | +| --- | --- | +| `https://mysprykershop.com/cart` | en_US | +| `https://mysprykershop.com/de/cart` | de_DE | +| `https://mysprykershop.com/en/cart` | en_US | + +#### Routing the URLs + +For URL routing, when defining the controllers in your controller provider, you must include the allowed locales for the application. + +The allowed locales pattern can be retrieved using `getAllowedLocalesPattern` from the base class of the controller provider—`AbstractYvesControllerProvider`. + +```php +getAllowedLocalesPattern(); + +$this->createGetController('/{cart}', static::ROUTE_CART, 'Cart', 'Cart') + ->assert('cart', $allowedLocalesPattern . 'cart|cart') + ->value('cart', 'cart'); +``` + +### Products with localized attributes + +The details of the abstract products are stored localized in the `spy_product_abstract_localized_attributes` table. Each abstract product has an entry in this table that corresponds to each locale, containing the associated attributes for the defined locale. + +Similarly, the details of the concrete products are kept localized in the `spy_product_localized_attributes` table. + +The localized attributes are loaded in the key-value data storage by the Collectors so that the details can be rendered in Yves according to the selected locale. + +The following details are stored localized in Demoshop for both abstract and concrete products: + +- Name +- Short description +- Long description + +#### Importing products with localized attributes + +When importing product data in your application. you need to consider the list of locales that are defined for the store. + +The CSV file containing the product data that needs to be imported must contain the name of the product for each locale: + +- `name.en_US, name.de_DE` + +The CSV file that contains the attributes for the products that need to be imported must contain a short and long description for each locale: + +- `short_description.en_US, short_description.de_DE` +- `long_description.en_US, long_description.de_DE` + +### Categories with localized attributes + +The details of the categories are kept in `spy_category_attribute`. For each category defined in the `spy_category` table, there is an entry for each defined locale containing the details of the category localized. + +The attributes are loaded in the key-value data storage by the Collectors so that the details can be rendered in Yves according to the selected locale. + +The following category details are stored localized: + +- `meta_title` +- `meta_description` +- `category_image_name` + +#### Importing categories with localized attributes + +The product categories are imported through the `Importer` module. + +Similar to importing product data, you need to consider each locale defined in the application when importing the attributes for the categories. + +A CSV file containing the product data that needs to be imported must contain the name of the product for each locale: + +- `category_name.en_US, category_name.de_DE` +- `low_pic.en_US, low_pic.de_DE` +- `category_description.en_US, category_description.de_DE` + +### Importing CMS blocks and pages + +The CMS blocks and pages can render localized content through the use of placeholders. The placeholders have a glossary key associated. At runtime, the placeholder is replaced with the glossary value that corresponds to the current locale. Also, a static page has a distinct URL for each locale defined in the application. + +{% info_block infoBox %} + +For more details on CMS, see [Defining the maximum size of content fields](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/tutorials-and-howtos/define-the-maximum-size-of-content-fields.html). + +{% endinfo_block %} + +The CMS blocks and pages are imported through XML files. The structure of the XML file is straightforward. It contains a list of blocks; each block has a template associated, a name, and a list of placeholders for each locale. + +Example: + +```xml + + + + + data_privacy_block + + + + + privacy_policy + Datenschutzerklärung + + + + + + + privacy_policy + Data Privacy Policy + + + + + + +``` + +The XML file structure for loading static pages is similar to the one for importing blocks; the only differences are that a page also has an associated URL for each locale and doesn't have a name linked to it. + +```xml + + + + + + + /de/datenschutz + + + privacy_policy + Datenschutzerklärung + + + + + /en/privacy + + + privacy_policy + Data Privacy Policy + + + + + + +``` + +**Localized URLs** + +The `spy_url` table stores the URLs that correspond to: + +- Category pages +- Product details pages +- Static pages defined in CMS + +Each category has a distinct URL for each configured locale and product details page. These URLs are automatically created and stored in the DB when importing products and categories through the `Importer` module. + +{% info_block infoBox %} + +For example, `/en/computers` and `/de/computers` are the URLs for the same category but different locales. + +{% endinfo_block %} + +The URLs assigned for each imported CMS static page are distinct for each defined locale. + +- `/en/privacy` and `/de/datenschutz` point to the same template; when rendered, they are loaded with the glossary values that correspond to the associated locale. + +The XML file structure for loading static pages is similar to the one for importing blocks; the only differences are that a page has also an associated URL for each locale, and it doesn't have a name linked to it. + +```xml + + + + + + + /de/datenschutz + + + privacy_policy + Datenschutzerklärung + + + + + /en/privacy + + + privacy_policy + Data Privacy Policy + + + + + + +``` diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/refund-process-management.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/refund-process-management.md similarity index 97% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/refund-process-management.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/refund-process-management.md index dc66c72d3bd..3dd97ff1e77 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/refund-process-management.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/refund-process-management.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/refund-process-management originalArticleId: d86ae613-8789-4f31-badb-b758769de71e redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/refund-process-management.html - /2021080/docs/refund-process-management - /2021080/docs/en/refund-process-management - /docs/refund-process-management diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/common-pitfalls-in-oms-design.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md similarity index 99% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md index 99698c5347f..2d90e833c51 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/order-process-modelling-state-machines originalArticleId: 6beb29fc-d94c-4c76-8ad0-e0d71bbb21ff redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html - /2021080/docs/order-process-modelling-state-machines - /2021080/docs/en/order-process-modelling-state-machines - /docs/order-process-modelling-state-machines @@ -23,7 +24,7 @@ redirect_from: - /v1/docs/order-process-modelling-state-machines - /v1/docs/en/order-process-modelling-state-machines - /capabilities/order_management/state_machine/order-process-modelling-state-machines.htm - - /docs/scos/dev/back-end-development/data-manipulation/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html + - /docs/scos/dev/back-end-development/data-manipulation/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html related: - title: Order management system multi-thread link: docs/pbc/all/order-management-system/page.version/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.html diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md similarity index 99% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md index 5a3cc1babae..266c0c00146 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/state-machine/state-machine-console-commands.md @@ -22,7 +22,7 @@ redirect_from: - /v2/docs/en/state-machine-cronjob - /v1/docs/state-machine-cronjob - /v1/docs/en/state-machine-cronjob - - /docs/scos/dev/back-end-development/data-manipulation/datapayload-conversion/state-machine/state-machine-console-commands.html + - /docs/scos/dev/back-end-development/data-manipulation/datapayload-conversion/state-machine/state-machine-console-commands.html related: - title: Order management system multi-thread link: docs/pbc/all/order-management-system/page.version/base-shop/datapayload-conversion/state-machine/order-management-system-multi-thread.html diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-create-breadcrumb-navigation.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-create-breadcrumb-navigation.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-create-breadcrumb-navigation.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-create-breadcrumb-navigation.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-use-case-scenario.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-use-case-scenario.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-use-case-scenario.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-use-case-scenario.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-workflow-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-workflow-overview.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/datapayload-conversion/step-engine/step-engine-workflow-overview.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/datapayload-conversion/step-engine/step-engine-workflow-overview.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/disable-split-delivery-on-the-storefront.md b/docs/pbc/all/order-management-system/202602.0/base-shop/disable-split-delivery-on-the-storefront.md similarity index 95% rename from docs/pbc/all/order-management-system/202512.0/base-shop/disable-split-delivery-on-the-storefront.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/disable-split-delivery-on-the-storefront.md index a775bff1342..f3d69dc8b87 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/disable-split-delivery-on-the-storefront.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/disable-split-delivery-on-the-storefront.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-disable-split-delivery-in-yves-interface originalArticleId: 1e1999de-4213-4495-9ac8-da9a49eb04df redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/disable-split-delivery-on-the-storefront.html - /2021080/docs/ht-disable-split-delivery-in-yves-interface - /2021080/docs/en/ht-disable-split-delivery-in-yves-interface - /docs/ht-disable-split-delivery-in-yves-interface diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/display-custom-names-for-order-item-states-on-the-storefront.md b/docs/pbc/all/order-management-system/202602.0/base-shop/display-custom-names-for-order-item-states-on-the-storefront.md new file mode 100644 index 00000000000..fc2f516f41e --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/display-custom-names-for-order-item-states-on-the-storefront.md @@ -0,0 +1,66 @@ +--- +title: Display custom names for order item states on the Storefront +description: Learn how you can change the state names in your Spryker Order State Machine to display a more customer friendly naming convention within your shop +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/howto-display-custom-names-for-order-item-states-on-the-storefront +originalArticleId: 1e420a56-ad89-4c61-8e20-7913396610ab +redirect_from: + - /2021080/docs/howto-display-custom-names-for-order-item-states-on-the-storefront + - /2021080/docs/en/howto-display-custom-names-for-order-item-states-on-the-storefront + - /docs/howto-display-custom-names-for-order-item-states-on-the-storefront + - /docs/en/howto-display-custom-names-for-order-item-states-on-the-storefront + - /v6/docs/howto-display-custom-names-for-order-item-states-on-the-storefront + - /v6/docs/en/howto-display-custom-names-for-order-item-states-on-the-storefront +--- + +For the order items states on the Storefront, it's not always appropriate to display the states as they are in the state machine, as they do not make much sense for Buyers. For example, for the OMS *confirmed* state, you might want to display this sate as, for example, *waiting for shipment* for the Storefront users. + +To display custom order states on the Storefront, do the following: + +1. In your project, go to `/config/Zed/oms` and open the .XML file of the payment method or sub-process you want to change the order states on the Storefront for. For example, let's take the default Spryker [DummyPayment01.xml](https://github.com/spryker-shop/suite/blob/master/config/Zed/oms/DummyPayment01.xml). +2. Specify the `display` value of the necessary state, as you want it on the Storefront. In the following example, the `display` value of the `confirmed` OMS sate is set to `waiting for shipment`: + +**config/Zed/oms/DummyPayment01.xml** + +```xml +?xml version="1.0"?> + + + + + DummyRefund + DummyReturn + DummyInvoice + CreateGiftCard + + + + ... + + cancellable + +``` + +{% info_block infoBox "Info" %} + +You can have the same display values for different OMS states. + +{% endinfo_block %} + +3. In Back Office, go to **Administration > Glossary**. +4. In the **LIST OF TRANSLATIONS** table, in the **NAME** column, find the state name as you specified for the `display` parameter—for example, `waiting for shipment`. +5. Provide the new glossary keys, that is, translations of the state: + 1. In the **ACTIONS** column, click **Edit**. The **Edit Translation** page opens. + 2. For the available locales, enter translations and click **Save**. The **Overview of Translation** page opens, where you can see the translations of the order state for the Storefront. + +On the Storefront, on the **Order Overview** and **Order History** pages, customers can see the states that correspond to the values of the `display` parameter you set in XML files of the respective payment methods and sub-processes. + +{% info_block infoBox "Info" %} + +If you delete the `display` parameter with its value, the OMS state, the one specified in the `state name` parameter, is displayed on the Storefront. + +{% endinfo_block %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/custom-order-reference-module-relations.md b/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/custom-order-reference-module-relations.md new file mode 100644 index 00000000000..a7008e1f12a --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/custom-order-reference-module-relations.md @@ -0,0 +1,19 @@ +--- +title: "Custom Order Reference: module relations" +description: Learn about the module relations for the Custom order reference within the Spryker Order Management System. +last_updated: Jun 16, 2021 +template: feature-walkthrough-template +originalLink: https://documentation.spryker.com/2021080/docs/custom-order-reference-module-relations +originalArticleId: 4edd02ad-f7db-4db0-b231-a6fbad0c100b +redirect_from: + - /2021080/docs/custom-order-reference-module-relations + - /2021080/docs/en/custom-order-reference-module-relations + - /docs/custom-order-reference-module-relations + - /docs/en/custom-order-reference-module-relations + - /docs/scos/dev/feature-walkthroughs/202311.0/order-management-feature-walkthrough/custom-order-reference-module-relations.html + - /docs/scos/dev/feature-walkthroughs/202204.0/order-management-feature-walkthrough/custom-order-reference-module-relations.html +--- + +The module relations for the [Custom Order Reference](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/custom-order-reference-overview.html) feature can be represented like this: + +![Custom order Reference Module Relations](https://confluence-connect.gliffy.net/embed/image/48319fea-1661-457f-9b4f-b8029dea8e70.png?utm_medium=live&utm_source=custom) diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/domain-model-and-relationships/order-management-feature-domain-model-and-relationships.md b/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/order-management-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/domain-model-and-relationships/order-management-feature-domain-model-and-relationships.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/order-management-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/sales-module-reference-information.md b/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/sales-module-reference-information.md new file mode 100644 index 00000000000..e410d225bd4 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/domain-model-and-relationships/sales-module-reference-information.md @@ -0,0 +1,42 @@ +--- +title: "Sales module: reference information" +last_updated: Aug 18, 2021 +description: The Sales module provides order management functionality obtained through the ZED UI that renders orders with details and the Client API to get customer orders +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202311.0/order-management-feature-walkthrough/sales-module-reference-information.html + - /docs/scos/dev/feature-walkthroughs/202204.0/order-management-feature-walkthrough/sales-module-reference-information.html +--- + +The Sales module provides the order management functionality. The functionality is obtained through the ZED UI that renders orders with orders details and the Client API to get customer orders. + +## Getting totals for order + +To get the Order with totals, the facade method `SalesFacade::getOrderByIdSalesOrder()` creates an order level which returns the OrderTransfer with a hydrated grandTotal, subtotal, expense, discounts, and more. + +{% info_block warningBox "" %} + +This is an improvement from the Sales 5.0 version where you had to use `SalesAggregatorFacade` to get totals. This version has been deprecated. + +{% endinfo_block %} + + +## Persisting order calculated values + +All calculated values are persisted now, when order are first placed. The values are stored by orderSaver plugins from checkout bundle. Check `/Pyz/Zed/Checkout/CheckoutDependencyProvider::getCheckoutOrderSavers` for currently available plugins. + +Some values can change during time when order refunded or partially refunded, with `canceled_amount` and `refundable_amount` being recalculated and new values persisted. At the same time, totals also change, but they do not overwrite old entry. Instead, it creates a new row in `spy_sales_order_total`. With this, you have a history of order totals from the time order was placed. + +The following ER diagram shows persisted calculated values: +![ER diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Sales/sales_persisting_order_values.png) + +## Extension points + +HydrateOrderPluginInterface—this is an action which happens when the `SalesFacade::getOrderByIdSalesOrder()` method is called. This can be done when you wish to populate `OrderTransfer` with additional data. This plugins accepts passes `OrderTransfer` for additional population. + +There are already few plugins provided: + +- `DiscountOrderHydratePlugin`—populates `OrderTransfer` with discount related data as it was stored when order is placed. +- `ProductOptionOrderHydratePlugin`—populates `OrderTransfer` with product option related data. +- `ProductBundleOrderHydratePlugin`—populates `OrderTransfer` with product bundle related data. +- `ShipmentOrderHydratePlugin`—populates `OrderTransfer` with shipment related data. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/email-invoices-using-bcc.md b/docs/pbc/all/order-management-system/202602.0/base-shop/email-invoices-using-bcc.md similarity index 96% rename from docs/pbc/all/order-management-system/202512.0/base-shop/email-invoices-using-bcc.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/email-invoices-using-bcc.md index 952ab3e15b1..3e63b8c0fa9 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/email-invoices-using-bcc.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/email-invoices-using-bcc.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/howto-emailing-invoices-using-bcc originalArticleId: 5fdd0927-fb7a-43b7-9feb-caa171a3c51a redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/email-invoices-using-bcc.html - /2021080/docs/howto-emailing-invoices-using-bcc - /2021080/docs/en/howto-emailing-invoices-using-bcc - /docs/howto-emailing-invoices-using-bcc diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/glue-api-retrieve-orders.md b/docs/pbc/all/order-management-system/202602.0/base-shop/glue-api-retrieve-orders.md new file mode 100644 index 00000000000..3d5904842eb --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/glue-api-retrieve-orders.md @@ -0,0 +1,1220 @@ +--- +title: "Glue API: Retrieve orders" +description: Learn how you can retrieve all orders of a customer or a particular order via Glue API within your Order Management System. +last_updated: Jul 13, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-orders +originalArticleId: 5774ec3a-945c-46f1-a51c-475e6e1d9df9 +redirect_from: + - /docs/scos/dev/glue-api-guides/{{page.version}}/retrieving-orders.html + - /docs/scos/dev/glue-api-guides/202204.0/retrieving-orders.html +related: + - title: Retrieving customer orders + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html + - title: Order Management feature overview + link: docs/pbc/all/order-management-system/page.version/base-shop/order-management-feature-overview/order-management-feature-overview.html +--- + +This endpoint allows retrieving customer's orders. + +In your development, this resource can help you to: + +- Make the order history available to customers +- Make order details available to enable reordering functionality + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: + +- [Install the Shipment Glue API](/docs/pbc/all/carrier-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) +- [Install the Order Management Glue API](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html) +- [Glue API: Measurement Units Feature Integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) +- [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) +- [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) + +## Retrieve all orders + +To retrieve a list of all orders made by a registered customer, send the request: + +--- +`GET` **/orders** + +--- + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| STRING PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| offset | Offset of the order at which to begin the response.
      Works only together with `page[limit]`.
      To work correctly, the value should be devisable by the value of `page[limit]`.
      The default value is `0`. | From `0` to any. | +| limit | Maximum number of entries to return.
      Works only together with `page[offset]`.
      The default value is `10`. | From `1` to any. | + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/orders` | Retrieve all orders. | +| `GET https://glue.mysprykershop.com/orders?page[limit]=10` | Retrieve 10 orders. | +| `GET https://glue.mysprykershop.com/orders?page[offset]=10&page[limit]=10` | Retrieve 10 orders starting from the eleventh order. | +| `GET https://glue.mysprykershop.com/orders?page[offset]=20` | Retrieve all orders starting from the twenty first order. | + +### Response + +
      +Response sample: retrieve a single order + +```json +{ + "data": [ + { + "type": "orders", + "id": "DE--1", + "attributes": { + "createdAt": "2019-11-01 09:21:14.307061", + "totals": { + "expenseTotal": 1000, + "discountTotal": 23286, + "taxTotal": 34179, + "subtotal": 236355, + "grandTotal": 214069, + "canceledTotal": 0 + }, + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE" + }, + "links": { + "self": "https://glue.mysprykershop.com/orders/DE--1" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/orders" + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/orders-response-attributes.md %} + + +## Retrieve an order + +To retrieve detailed information on an order, send the request: + +--- +`GET` **/orders/*{% raw %}{{{% endraw %}order_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTON | +| ------------------ | -------------------- | +| ***{% raw %}{{{% endraw %}order_id{% raw %}}}{% endraw %}*** | Unique identifier of an order. [Retrieve all orders](#retrieve-all-orders) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ------------- | ------------ | -------- | ------------------------------------------------------------ | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| STRING PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| ---------------- | ---------------- | --------------- | +| include | Adds resource relationships to the request. | order-shipments, concrete-products, abstract-products | + +| REQUEST | USAGE | +| ------------------ | --------------------- | +| `GET https://glue.mysprykershop.com/orders/DE--1` | Retrieve information about the order with the id `DE--6`. | +| `GET https://glue.mysprykershop.com/orders/DE--6?include=order-shipments` | Retrieve information about the order with the id `DE--6` with order shipments included. | + +### Response + +
      +Response sample: retrieve an order + +```json +{ + "data": { + "type": "orders", + "id": "DE--6", + "attributes": { + "merchantReferences": [], + "itemStates": [ + "payment pending" + ], + "createdAt": "2021-01-05 13:43:23.000000", + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE", + "totals": { + "expenseTotal": 1180, + "discountTotal": 0, + "taxTotal": 12173, + "subtotal": 75064, + "grandTotal": 76244, + "canceledTotal": 0, + "remunerationTotal": 0 + }, + "billingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "middleName": null, + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "company": "spryker", + "city": "Berlin", + "zipCode": "10115", + "poBox": null, + "phone": "+49 (30) 2084 98350", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "shippingAddress": null, + "items": [ + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S5 mini", + "sku": "066_23294028", + "sumPrice": 39353, + "quantity": 1, + "unitGrossPrice": 39353, + "sumGrossPrice": 39353, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 39353, + "unitTaxAmountFullAggregation": 6283, + "sumTaxAmountFullAggregation": 6283, + "refundableAmount": 39353, + "canceledAmount": 0, + "sumSubtotalAggregation": 39353, + "unitSubtotalAggregation": 39353, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 39353, + "sumPriceToPayAggregation": 39353, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "3db99597-99a0-58a9-a0ea-696e8da0026e", + "isReturnable": false, + "idShipment": 11, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "Blue" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Sony Xperia Z3 Compact", + "sku": "076_24394207", + "sumPrice": 35711, + "quantity": 1, + "unitGrossPrice": 35711, + "sumGrossPrice": 35711, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 35711, + "unitTaxAmountFullAggregation": 5702, + "sumTaxAmountFullAggregation": 5702, + "refundableAmount": 35711, + "canceledAmount": 0, + "sumSubtotalAggregation": 35711, + "unitSubtotalAggregation": 35711, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 35711, + "sumPriceToPayAggregation": 35711, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "40274175-4398-5927-8980-48ead5053e69", + "isReturnable": false, + "idShipment": 12, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "White" + }, + "image": "https://images.icecat.biz/img/norm/medium/24394207-3552.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [ + { + "unitAmount": 786, + "sumAmount": 786, + "displayName": "10% Discount for all orders above", + "description": "Get a 10% discount on all orders above certain value depending on the currency and net/gross price. This discount is not exclusive and can be combined with other discounts.", + "voucherCode": null, + "quantity": 1 + } + ], + "productOptions": [], + "amount": null + } + ], + "expenses": [ + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Express", + "sumPrice": 590, + "unitGrossPrice": 590, + "sumGrossPrice": 590, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 94, + "sumTaxAmount": 94, + "unitPriceToPayAggregation": 590, + "sumPriceToPayAggregation": 590, + "taxAmountAfterCancellation": null, + "idShipment": 11, + "idSalesExpense": 11 + }, + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Express", + "sumPrice": 590, + "unitGrossPrice": 590, + "sumGrossPrice": 590, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 94, + "sumTaxAmount": 94, + "unitPriceToPayAggregation": 590, + "sumPriceToPayAggregation": 590, + "taxAmountAfterCancellation": null, + "idShipment": 12, + "idSalesExpense": 12 + } + ], + "payments": [ + { + "amount": 76244, + "paymentProvider": "DummyPayment", + "paymentMethod": "Invoice" + } + ], + "shipments": [], + "calculatedDiscounts": [], + "bundleItems": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/orders/DE--6" + } + } +} +``` + +
      + +
      +Response sample: retrieve an order with order shipments included + +```json +{ + "data": { + "type": "orders", + "id": "DE--6", + "attributes": { + "merchantReferences": [], + "itemStates": [ + "payment pending" + ], + "createdAt": "2021-01-05 13:43:23.000000", + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE", + "totals": { + "expenseTotal": 1180, + "discountTotal": 0, + "taxTotal": 12173, + "subtotal": 75064, + "grandTotal": 76244, + "canceledTotal": 0, + "remunerationTotal": 0 + }, + "billingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "middleName": null, + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "company": "spryker", + "city": "Berlin", + "zipCode": "10115", + "poBox": null, + "phone": "+49 (30) 2084 98350", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "shippingAddress": null, + "items": [ + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S5 mini", + "sku": "066_23294028", + "sumPrice": 39353, + "quantity": 1, + "unitGrossPrice": 39353, + "sumGrossPrice": 39353, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 39353, + "unitTaxAmountFullAggregation": 6283, + "sumTaxAmountFullAggregation": 6283, + "refundableAmount": 39353, + "canceledAmount": 0, + "sumSubtotalAggregation": 39353, + "unitSubtotalAggregation": 39353, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 39353, + "sumPriceToPayAggregation": 39353, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "3db99597-99a0-58a9-a0ea-696e8da0026e", + "isReturnable": false, + "idShipment": 11, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "Blue" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/23294028_3275.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Sony Xperia Z3 Compact", + "sku": "076_24394207", + "sumPrice": 35711, + "quantity": 1, + "unitGrossPrice": 35711, + "sumGrossPrice": 35711, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 35711, + "unitTaxAmountFullAggregation": 5702, + "sumTaxAmountFullAggregation": 5702, + "refundableAmount": 35711, + "canceledAmount": 0, + "sumSubtotalAggregation": 35711, + "unitSubtotalAggregation": 35711, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 35711, + "sumPriceToPayAggregation": 35711, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "40274175-4398-5927-8980-48ead5053e69", + "isReturnable": false, + "idShipment": 12, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": null, + "salesOrderConfiguredBundleItem": null, + "metadata": { + "superAttributes": { + "color": "White" + }, + "image": "https://images.icecat.biz/img/norm/medium/24394207-3552.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + } + ], + "expenses": [ + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Express", + "sumPrice": 590, + "unitGrossPrice": 590, + "sumGrossPrice": 590, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 94, + "sumTaxAmount": 94, + "unitPriceToPayAggregation": 590, + "sumPriceToPayAggregation": 590, + "taxAmountAfterCancellation": null, + "idShipment": 11, + "idSalesExpense": 11 + }, + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Express", + "sumPrice": 590, + "unitGrossPrice": 590, + "sumGrossPrice": 590, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 94, + "sumTaxAmount": 94, + "unitPriceToPayAggregation": 590, + "sumPriceToPayAggregation": 590, + "taxAmountAfterCancellation": null, + "idShipment": 12, + "idSalesExpense": 12 + } + ], + "payments": [ + { + "amount": 76244, + "paymentProvider": "DummyPayment", + "paymentMethod": "Invoice" + } + ], + "shipments": [], + "calculatedDiscounts": [], + "bundleItems": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/orders/DE--6?include=order-shipments" + }, + "relationships": { + "order-shipments": { + "data": [ + { + "type": "order-shipments", + "id": "11" + }, + { + "type": "order-shipments", + "id": "12" + } + ] + } + } + }, + "included": [ + { + "type": "order-shipments", + "id": "11", + "attributes": { + "itemUuids": [ + "3db99597-99a0-58a9-a0ea-696e8da0026e" + ], + "methodName": "Express", + "carrierName": "Spryker Dummy Shipment", + "requestedDeliveryDate": null, + "shippingAddress": { + "salutation": "Mrs", + "firstName": "Sonia", + "middleName": null, + "lastName": "Wagner", + "address1": "Julie-Wolfthorn-Straße", + "address2": "25", + "address3": "new one", + "company": "spryker", + "city": "Berlin", + "zipCode": "10115", + "poBox": null, + "phone": "+49 (30) 2084 98350", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/order-shipments/11" + } + }, + { + "type": "order-shipments", + "id": "12", + "attributes": { + "itemUuids": [ + "40274175-4398-5927-8980-48ead5053e69" + ], + "methodName": "Express", + "carrierName": "Spryker Dummy Shipment", + "requestedDeliveryDate": "2021-09-29", + "shippingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "middleName": null, + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new one", + "company": "spryker", + "city": "Berlin", + "zipCode": "10115", + "poBox": null, + "phone": "+49 (30) 2084 98350", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/order-shipments/12" + } + } + ] +} +``` + +
      + +
      +Response sample: retrieve an order with the details on a configurable bundle + +```json +{ + "data": { + "type": "orders", + "id": "DE--3", + "attributes": { + "merchantReferences": [], + "itemStates": [ + "payment pending" + ], + "createdAt": "2021-01-06 11:38:13.249588", + "currencyIsoCode": "EUR", + "priceMode": "GROSS_MODE", + "totals": { + "expenseTotal": 980, + "discountTotal": 0, + "taxTotal": 3812, + "subtotal": 197788, + "grandTotal": 198768, + "canceledTotal": 0, + "remunerationTotal": 0 + }, + "billingAddress": { + "salutation": "Mr", + "firstName": "Spencor", + "middleName": null, + "lastName": "Hopkin", + "address1": "Julie-Wolfthorn-Straße", + "address2": "1", + "address3": "new address", + "company": "spryker", + "city": "Berlin", + "zipCode": "10115", + "poBox": null, + "phone": "+49 (30) 2084 98350", + "cellPhone": null, + "description": null, + "comment": null, + "email": null, + "country": "Germany", + "iso2Code": "DE" + }, + "shippingAddress": null, + "items": [ + { + "merchantReference": null, + "state": "payment pending", + "name": "Acer Extensa M2610", + "sku": "112_312526171", + "sumPrice": 43723, + "quantity": 1, + "unitGrossPrice": 43723, + "sumGrossPrice": 43723, + "taxRate": "0.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 43723, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "refundableAmount": 43723, + "canceledAmount": 0, + "sumSubtotalAggregation": 43723, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 43723, + "taxRateAverageAggregation": "0.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "dedc66da-9af9-504f-bdfc-e45b23118786", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 3, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 3, + "configurableBundleTemplateSlotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + "metadata": { + "superAttributes": { + "color": "Black", + "processor_cache": "3 MB" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/31252617_9321.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Acer Extensa M2610", + "sku": "112_312526171", + "sumPrice": 43723, + "quantity": 1, + "unitGrossPrice": 43723, + "sumGrossPrice": 43723, + "taxRate": "0.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 43723, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "refundableAmount": 43723, + "canceledAmount": 0, + "sumSubtotalAggregation": 43723, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 43723, + "taxRateAverageAggregation": "0.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "93b87cb5-fc00-562f-a799-3ec28695ca51", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 4, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 4, + "configurableBundleTemplateSlotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + "metadata": { + "superAttributes": { + "color": "Black", + "processor_cache": "3 MB" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/31252617_9321.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S6", + "sku": "047_26408568", + "sumPrice": 5724, + "quantity": 1, + "unitGrossPrice": 5724, + "sumGrossPrice": 5724, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 5724, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 914, + "refundableAmount": 5724, + "canceledAmount": 0, + "sumSubtotalAggregation": 5724, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 5724, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "c319e465-5160-59f1-a5b8-85073d1472b7", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 3, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 3, + "configurableBundleTemplateSlotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + }, + "metadata": { + "superAttributes": { + "color": "Gold" + }, + "image": "https://images.icecat.biz/img/norm/medium/26408568-7449.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S6", + "sku": "047_26408568", + "sumPrice": 5724, + "quantity": 1, + "unitGrossPrice": 5724, + "sumGrossPrice": 5724, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 5724, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 914, + "refundableAmount": 5724, + "canceledAmount": 0, + "sumSubtotalAggregation": 5724, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 5724, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "7ab614ca-d564-5292-8931-60f2c52c140d", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 4, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 4, + "configurableBundleTemplateSlotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + }, + "metadata": { + "superAttributes": { + "color": "Gold" + }, + "image": "https://images.icecat.biz/img/norm/medium/26408568-7449.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Acer Extensa M2610", + "sku": "112_312526171", + "sumPrice": 43723, + "quantity": 1, + "unitGrossPrice": 43723, + "sumGrossPrice": 43723, + "taxRate": "0.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 43723, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "refundableAmount": 43723, + "canceledAmount": 0, + "sumSubtotalAggregation": 43723, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 43723, + "taxRateAverageAggregation": "0.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "3b0d7d32-c519-5eea-92f1-408c54113c25", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 5, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 5, + "configurableBundleTemplateSlotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + "metadata": { + "superAttributes": { + "color": "Black", + "processor_cache": "3 MB" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/31252617_9321.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Acer Extensa M2610", + "sku": "112_312526171", + "sumPrice": 43723, + "quantity": 1, + "unitGrossPrice": 43723, + "sumGrossPrice": 43723, + "taxRate": "0.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 43723, + "unitTaxAmountFullAggregation": 0, + "sumTaxAmountFullAggregation": 0, + "refundableAmount": 43723, + "canceledAmount": 0, + "sumSubtotalAggregation": 43723, + "unitSubtotalAggregation": 43723, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 43723, + "sumPriceToPayAggregation": 43723, + "taxRateAverageAggregation": "0.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "b39c7e1c-12ba-53d3-8d81-5c363d5307e9", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 6, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 6, + "configurableBundleTemplateSlotUuid": "9626de80-6caa-57a9-a683-2846ec5b6914" + }, + "metadata": { + "superAttributes": { + "color": "Black", + "processor_cache": "3 MB" + }, + "image": "https://images.icecat.biz/img/gallery_mediums/31252617_9321.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S6", + "sku": "047_26408568", + "sumPrice": 5724, + "quantity": 1, + "unitGrossPrice": 5724, + "sumGrossPrice": 5724, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 5724, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 914, + "refundableAmount": 5724, + "canceledAmount": 0, + "sumSubtotalAggregation": 5724, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 5724, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "b189d4f2-da12-59f3-8e05-dfb4d95b1781", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 5, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 5, + "configurableBundleTemplateSlotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + }, + "metadata": { + "superAttributes": { + "color": "Gold" + }, + "image": "https://images.icecat.biz/img/norm/medium/26408568-7449.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + }, + { + "merchantReference": null, + "state": "payment pending", + "name": "Samsung Galaxy S6", + "sku": "047_26408568", + "sumPrice": 5724, + "quantity": 1, + "unitGrossPrice": 5724, + "sumGrossPrice": 5724, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "unitPrice": 5724, + "unitTaxAmountFullAggregation": 914, + "sumTaxAmountFullAggregation": 914, + "refundableAmount": 5724, + "canceledAmount": 0, + "sumSubtotalAggregation": 5724, + "unitSubtotalAggregation": 5724, + "unitProductOptionPriceAggregation": 0, + "sumProductOptionPriceAggregation": 0, + "unitExpensePriceAggregation": 0, + "sumExpensePriceAggregation": null, + "unitDiscountAmountAggregation": 0, + "sumDiscountAmountAggregation": 0, + "unitDiscountAmountFullAggregation": 0, + "sumDiscountAmountFullAggregation": 0, + "unitPriceToPayAggregation": 5724, + "sumPriceToPayAggregation": 5724, + "taxRateAverageAggregation": "19.00", + "taxAmountAfterCancellation": null, + "orderReference": null, + "uuid": "349f3ce2-0396-5ed4-a2df-c9e053cb3350", + "isReturnable": false, + "idShipment": 3, + "bundleItemIdentifier": null, + "relatedBundleItemIdentifier": null, + "salesOrderConfiguredBundle": { + "idSalesOrderConfiguredBundle": 6, + "configurableBundleTemplateUuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "Smartstation Kit", + "quantity": 1 + }, + "salesOrderConfiguredBundleItem": { + "idSalesOrderConfiguredBundle": 6, + "configurableBundleTemplateSlotUuid": "2a5e55b1-993a-5510-864c-a4a18558aa75" + }, + "metadata": { + "superAttributes": { + "color": "Gold" + }, + "image": "https://images.icecat.biz/img/norm/medium/26408568-7449.jpg" + }, + "salesUnit": null, + "calculatedDiscounts": [], + "productOptions": [], + "amount": null + } + ], + "expenses": [ + { + "type": "SHIPMENT_EXPENSE_TYPE", + "name": "Standard", + "sumPrice": 490, + "unitGrossPrice": 490, + "sumGrossPrice": 490, + "taxRate": "19.00", + "unitNetPrice": 0, + "sumNetPrice": 0, + "canceledAmount": null, + "unitDiscountAmountAggregation": null, + "sumDiscountAmountAggregation": null, + "unitTaxAmount": 78, + "sumTaxAmount": 78, + "unitPriceToPayAggregation": 490, + "sumPriceToPayAggregation": 490, + "taxAmountAfterCancellation": null, + "idShipment": 3, + "idSalesExpense": 3 + } + ], + "payments": [ + { + "amount": 198768, + "paymentProvider": "DummyPayment", + "paymentMethod": "Invoice" + } + ], + "shipments": [], + "calculatedDiscounts": [], + "bundleItems": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/orders/DE--3" + } + } +} +``` + +
      + +{% include pbc/all/glue-api-guides/{{page.version}}/orders-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/order-shipments-response-attributes.md %} + +## Possible errors + +| CODE | REASON | +| --- | --- | +|001| Access token is invalid. | +|002| Access token is missing. | +|801| Order with the given order reference is not found. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/import-and-export-order-management-system-data.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/import-and-export-order-management-system-data.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/import-and-export-order-management-system-data.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/import-and-export-order-management-system-data.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/import-file-details-order-status.csv.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/import-file-details-order-status.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/import-file-details-order-status.csv.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/import-file-details-order-status.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-expenses.csv.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-expenses.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-expenses.csv.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-expenses.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-items.csv.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-items.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-items.csv.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-order-items.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-orders.csv.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-orders.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/export-file-details-orders.csv.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/export-file-details-orders.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md similarity index 77% rename from docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md index 75b65159743..92d00c2bd9f 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/exporting-data originalArticleId: 0a38b991-f10c-4f6c-90db-247a62cda2e7 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/import-and-export-data/orders-data-export/orders-data-export.html - /docs/scos/dev/data-import/202212.0/data-export.html - /docs/scos/dev/sdk/data-export.html related: @@ -13,4 +14,4 @@ related: link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-sales-data-export-feature.html --- -{% include integrations/orders-data-export-body.md %} \ No newline at end of file +{% include integrations/orders-data-export-body.md %} diff --git a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md similarity index 100% rename from docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-order-amendment-feature.md diff --git a/docs/pbc/all/order-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md similarity index 100% rename from docs/pbc/all/order-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.md diff --git a/docs/pbc/all/order-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md similarity index 100% rename from docs/pbc/all/order-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-non-splittable-products-feature.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md new file mode 100644 index 00000000000..a43d85fb430 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.md @@ -0,0 +1,19 @@ +--- +title: Reclamations feature integration +description: Learn how you can integrate the Reclamations feature in to your Spryker Order Management System. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/reclamations-feature-integration +originalArticleId: a4e601de-2e86-44a0-8806-d3ba35776f6b +redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.html + - /2021080/docs/reclamations-feature-integration + - /2021080/docs/en/reclamations-feature-integration + - /docs/reclamations-feature-integration + - /docs/en/reclamations-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/reclamations-feature-integration.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-reclamations-feature.html + - /docs/scos/dev/feature-integration-guides/202204.0/reclamations-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-reclamations-feature.md %} diff --git a/docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md similarity index 100% rename from docs/pbc/all/order-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-reorder-feature.md diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-sales-data-export-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-sales-data-export-feature.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-features/install-the-sales-data-export-feature.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-sales-data-export-feature.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md new file mode 100644 index 00000000000..4b70bb7587e --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.md @@ -0,0 +1,17 @@ +--- +title: Install the Splittable Order Items feature +description: Learn with Order Management system how to Integrate the Splittable Order Items feature into your Spryker project. +last_updated: Jun 20, 2022 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/v3/docs/splittable-order-items-integration +originalArticleId: ea499c83-900d-4788-bcaf-c7981220b441 +redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-features/install-the-splittable-order-items-feature.html + - /v3/docs/splittable-order-items-integration + - /v3/docs/en/splittable-order-items-integration + - /docs/scos/dev/feature-integration-guides/202311.0/splittable-order-items-feature-integration.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-features/install-the-splittable-order-items-feature.html + - /docs/scos/dev/feature-integration-guides/202204.0/splittable-order-items-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-splittable-order-items-feature.md %} diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-checkout-glue-api.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md new file mode 100644 index 00000000000..66fb66299b6 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.md @@ -0,0 +1,32 @@ +--- +title: Install the Order Management Glue API +description: Learn how to install the Spryker order management Glue API for your Spryker Cloud Commerce OS project +last_updated: Jul 27, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-order-management-feature-integration +originalArticleId: ad1c861b-392a-48e1-858e-f22b0adf7851 +redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/install-glue-api/install-the-order-management-glue-api.html + - /2021080/docs/glue-api-order-management-feature-integration + - /2021080/docs/en/glue-api-order-management-feature-integration + - /docs/glue-api-order-management-feature-integration + - /docs/en/glue-api-order-management-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-order-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-order-management-feature-integration.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/install-glue-api/install-the-order-management-glue-api.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-order-management-feature-integration.html +related: + - title: Install the Order Management feature + link: docs/pbc/all/order-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-order-management-feature.html + - title: Retrieving orders + link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html + - title: Retrieving customer orders + link: docs/pbc/all/customer-relationship-management/page.version/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html + - title: Check out purchases + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-order-management-glue-api.md %} diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shipment-glue-api.md diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-checkout-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-checkout-glue-api.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-checkout-glue-api.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-checkout-glue-api.md diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-order-management-glue-api.md diff --git a/docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md similarity index 100% rename from docs/pbc/all/order-management-system/202410.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/install-the-shipment-glue-api.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md similarity index 98% rename from docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md index 292f3ee395e..b5bf46ab496 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/split-delivery-migration-concept.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/split-delivery-concept originalArticleId: 6b5f2740-8a4a-405b-bf72-2849ce60c2a8 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/split-delivery-migration-concept.html - /2021080/docs/split-delivery-concept - /2021080/docs/en/split-delivery-concept - /docs/split-delivery-concept diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-manualorderentrygui-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-manualorderentrygui-module.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-manualorderentrygui-module.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-manualorderentrygui-module.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-oms-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-oms-module.md new file mode 100644 index 00000000000..23f8066910a --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-oms-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the OMS module +description: Use the guide to upgrade to a newer version of the Spryker Cloud Commerce OS Order Management System module from an older version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-oms +originalArticleId: 1f2d5a9b-1907-4cb4-bf1f-1867cc835dcd +redirect_from: + - /2021080/docs/mg-oms + - /2021080/docs/en/mg-oms + - /docs/mg-oms + - /docs/en/mg-oms + - /v1/docs/mg-oms + - /v1/docs/en/mg-oms + - /v2/docs/mg-oms + - /v2/docs/en/mg-oms + - /v3/docs/mg-oms + - /v3/docs/en/mg-oms + - /v4/docs/mg-oms + - /v4/docs/en/mg-oms + - /v5/docs/mg-oms + - /v5/docs/en/mg-oms + - /v6/docs/mg-oms + - /v6/docs/en/mg-oms + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-oms.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-oms.html + - /module_migration_guides/mg-oms.htm + - /docs/scos/dev/module-migration-guides/migration-guide-oms.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-oms-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-oms-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-oms-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-oms-module.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.md new file mode 100644 index 00000000000..24427a3419c --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.md @@ -0,0 +1,30 @@ +--- +title: Upgrade the OrdersRestApi module +description: Use the guide to upgrade to a newer version of the Spryker Cloud Commerce OS Orders Rest API from an older version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-ordersrestapi +originalArticleId: 03c5442b-1b7e-4ae7-93cc-09424333732c +redirect_from: + - /2021080/docs/mg-ordersrestapi + - /2021080/docs/en/mg-ordersrestapi + - /docs/mg-ordersrestapi + - /docs/en/mg-ordersrestapi + - /v4/docs/mg-ordersrestapi + - /v4/docs/en/mg-ordersrestapi + - /v5/docs/mg-ordersrestapi + - /v5/docs/en/mg-ordersrestapi + - /v6/docs/mg-ordersrestapi + - /v6/docs/en/mg-ordersrestapi + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/migration-guide-ordersrestapi.html + - /docs/scos/dev/module-migration-guides/202005.0/glue-api/migration-guide-ordersrestapi.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/migration-guide-ordersrestapi.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/migration-guide-ordersrestapi.html + - /docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.html + - /module_migration_guides/glue_api/ordersrestapi-migration-guide.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-ordersrestapi-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-ordersrestapi-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-ordersrestapi-module.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.md new file mode 100644 index 00000000000..87a33bba432 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.md @@ -0,0 +1,38 @@ +--- +title: Upgrade the Refund module +description: Use the guide to learn how to update the Refund module to a newer version. +last_updated: Aug 2, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-refund +originalArticleId: 30c8c793-2247-4074-8e0e-9418ee1b0ba5 +redirect_from: + - /2021080/docs/mg-refund + - /2021080/docs/en/mg-refund + - /docs/mg-refund + - /docs/en/mg-refund + - /v1/docs/mg-refund + - /v1/docs/en/mg-refund + - /v2/docs/mg-refund + - /v2/docs/en/mg-refund + - /v3/docs/mg-refund + - /v3/docs/en/mg-refund + - /v4/docs/mg-refund + - /v4/docs/en/mg-refund + - /v5/docs/mg-refund + - /v5/docs/en/mg-refund + - /v6/docs/mg-refund + - /v6/docs/en/mg-refund + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-refund.html + - /docs/scos/dev/module-migration-guides/migration-guide-refund.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-refund-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-refund-module.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sales-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sales-module.md new file mode 100644 index 00000000000..3d39248a0f6 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sales-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the Sales module +description: Use the guide to learn how to update the Sales module to a newer version for your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-sales +originalArticleId: 9cf868be-faa9-44e7-890f-a6911748bcc8 +redirect_from: + - /2021080/docs/mg-sales + - /2021080/docs/en/mg-sales + - /docs/mg-sales + - /docs/en/mg-sales + - /v1/docs/mg-sales + - /v1/docs/en/mg-sales + - /v2/docs/mg-sales + - /v2/docs/en/mg-sales + - /v3/docs/mg-sales + - /v3/docs/en/mg-sales + - /v4/docs/mg-sales + - /v4/docs/en/mg-sales + - /v5/docs/mg-sales + - /v5/docs/en/mg-sales + - /v6/docs/mg-sales + - /v6/docs/en/mg-sales + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-sales.html + - /docs/scos/dev/module-migration-guides/migration-guide-sales.html + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-sales-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sales-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-sales-module.html +--- +--- + +{% include pbc/all/upgrade-modules/upgrade-the-sales-module.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salesquantity-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salesquantity-module.md new file mode 100644 index 00000000000..0b63ecc5c2b --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salesquantity-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the SalesQuantity module +description: Use the guide to learn how to update to a newer version of the SalesQuantity module for your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-sales-quantity +originalArticleId: f62cc4d4-f994-4e3a-8924-6788236a1640 +redirect_from: + - /2021080/docs/mg-sales-quantity + - /2021080/docs/en/mg-sales-quantity + - /docs/mg-sales-quantity + - /docs/en/mg-sales-quantity + - /v1/docs/mg-sales-quantity + - /v1/docs/en/mg-sales-quantity + - /v2/docs/mg-sales-quantity + - /v2/docs/en/mg-sales-quantity + - /v3/docs/mg-sales-quantity + - /v3/docs/en/mg-sales-quantity + - /v4/docs/mg-sales-quantity + - /v4/docs/en/mg-sales-quantity + - /v5/docs/mg-sales-quantity + - /v5/docs/en/mg-sales-quantity + - /v6/docs/mg-sales-quantity + - /v6/docs/en/mg-sales-quantity + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-salesquantity.html + - /docs/scos/dev/module-migration-guides/migration-guide-salesquantity.html + - /module_migration_guides/mg-sales-quantity.htm + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-salesquantity-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salesquantity-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salesquantity-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-salesquantity-module.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salessplit-module.md b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salessplit-module.md new file mode 100644 index 00000000000..b76f39763a5 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salessplit-module.md @@ -0,0 +1,39 @@ +--- +title: Upgrade the SalesSplit module +description: Use the guide to learn how to update a newer version of the SalesSplit module for your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-sales-split +originalArticleId: 69221dd7-e110-4c2f-9dee-d8d8e1abac8f +redirect_from: + - /2021080/docs/mg-sales-split + - /2021080/docs/en/mg-sales-split + - /docs/mg-sales-split + - /docs/en/mg-sales-split + - /v1/docs/mg-sales-split + - /v1/docs/en/mg-sales-split + - /v2/docs/mg-sales-split + - /v2/docs/en/mg-sales-split + - /v3/docs/mg-sales-split + - /v3/docs/en/mg-sales-split + - /v4/docs/mg-sales-split + - /v4/docs/en/mg-sales-split + - /v5/docs/mg-sales-split + - /v5/docs/en/mg-sales-split + - /v6/docs/mg-sales-split + - /v6/docs/en/mg-sales-split + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-salessplit.html + - /docs/scos/dev/module-migration-guides/migration-guide-salessplit.html + - /module_migration_guides/mg-sales-split.htm + - /docs/pbc/all/order-management-system/202311.0/base-shop/install-and-update/upgrade-modules/upgrade-the-salessplit-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salessplit-module.html + - /docs/pbc/all/order-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-salessplit-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-salessplit-module.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/manage-orders-in-the-back-office.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/manage-orders-in-the-back-office.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/manage-orders-in-the-back-office.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/manage-orders-in-the-back-office.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md similarity index 92% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md index b061fd303e6..f6497d346f9 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.md @@ -4,6 +4,7 @@ description: Learn how to add and remove custom order references in the Back Off template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.html - /docs/scos/user/back-office-user-guides/202311.0/sales/orders/adding-and-removing-custom-order-references.html - /docs/scos/user/back-office-user-guides/202204.0/sales/orders/adding-and-removing-custom-order-references.html related: diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md similarity index 97% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md index 133217720fb..d52f72a1111 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-orders originalArticleId: 6d125a8a-63ca-4ddc-bb74-1526aa1fe44b redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html - /docs/scos/user/back-office-user-guides/202204.0/sales/orders/managing-orders.html - /docs/scos/user/back-office-user-guides/202311.0/sales/orders/changing-the-state-of-order-items.html - /docs/scos/user/back-office-user-guides/202204.0/sales/orders/changing-the-state-of-order-items.html @@ -30,7 +31,7 @@ Review the [reference information](#reference-information-changing-the-state-of- This opens the **Order Overview** page. 2. In the **TRIGGER ALL MATCHING STATES INSIDE THIS ORDER** pane, click **Pay**. - The page refreshes with the success message displayed. You can check the new state of the items in the order in the **ORDER ITEMS** pane. + The page refreshes with the success message displayed. You can check the new state of the items in the order in the **ORDER ITEMS** pane. 3. Repeat step 2 until the items are in the needed state. ## Changing the state of items in a shipment diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/comment-orders.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/comment-orders.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/comment-orders.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/comment-orders.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-returns.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/create-returns.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-returns.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/create-returns.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-shipments.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/create-shipments.md similarity index 95% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-shipments.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/create-shipments.md index 1bf9a5200ab..38f28fe26e1 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-shipments.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/create-shipments.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-order-shipments originalArticleId: 417c59db-8d1a-469b-bbef-858d312a1450 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/create-shipments.html - /2021080/docs/managing-order-shipments - /2021080/docs/en/managing-order-shipments - /docs/managing-order-shipments @@ -48,7 +49,7 @@ If you have more than one item in an order, you can create a new shipment as fol 1. In the **ORDER ITEMS** section, click **Create Shipment**. This opens the **Create Shipment** page. 2. For **DELIVERY ADDRESS**, select an existing customer's address or **New address**. - If you selected **New address**, address fields appear. Fill out the details of the new address. + If you selected **New address**, address fields appear. Fill out the details of the new address. 3. Select a **SHIPMENT METHOD**. 4. Optional: Enter a **REQUESTED DELIVERY DATE**. 5. Select one or more **ORDER ITEMS INSIDE THIS SHIPMENT**. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md similarity index 98% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md index e34c50687bf..a1768442231 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-billing-addresses-in-orders.md @@ -24,7 +24,7 @@ Review the [reference information](#reference-information-editing-billing-addres 1. On the **Orders** page, next to the order you want to edit the billing address of, click **View**. This opens the **Order Overview** page. 2. In the **CUSTOMER** section click **Edit**. - The **Edit Address** page opens. + The **Edit Address** page opens. 3. Update any of the address details and click **Save**. This opens the **Order Overview** page with the success message displayed. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md similarity index 95% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md index a789e874d83..76b60b957aa 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/edit-shipments.md @@ -4,6 +4,7 @@ description: Learn how to edit shipments of orders in the Spryker Cloud Commerce template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/edit-shipments.html - /docs/scos/user/back-office-user-guides/202311.0/sales/orders/editing-shipments.html - /docs/scos/user/back-office-user-guides/202204.0/sales/orders/editing-shipments.html related: @@ -40,7 +41,7 @@ If you create or edit a shipment of an order created by a customer, the grand to 1. In the **ORDER ITEMS** section, next to the shipment you want to edit, click **Edit Shipment**. This opens the **Create Shipment** page. 2. For **DELIVERY ADDRESS**, select a different customer's address or **New address**. - If you selected **New address**, address fields appear. Fill out the details of the new address. + If you selected **New address**, address fields appear. Fill out the details of the new address. 3. Select a **SHIPMENT METHOD**. 4. Enter a **REQUESTED DELIVERY DATE**. 5. Click **Save**. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/view-returns-of-an-order.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/view-returns-of-an-order.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/orders/view-returns-of-an-order.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/orders/view-returns-of-an-order.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md similarity index 96% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md index 79e0c15a956..76f470c8241 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.md @@ -4,6 +4,7 @@ description: Learn how to change the state of order items in reclamations in the last_updated: Aug 10, 2021 template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.html - /docs/scos/user/back-office-user-guides/202311.0/sales/reclamations/changing-the-state-of-order-items-in-reclamations.html - /docs/scos/user/back-office-user-guides/202204.0/sales/reclamations/changing-the-state-of-order-items-in-reclamations.html related: @@ -26,7 +27,7 @@ To start working with item states in reclamations, do the following: 1. Go to **Sales > Reclamations**. This opens the **Reclamations** page. 2. Next to the reclamation containing the items you want to change the state of, click **View**. - This opens the **View reclamation** page. + This opens the **View reclamation** page. Review the [reference information](#reference-information-changing-the-state-of-order-items-in-reclamations) before you start, or look up the necessary information as you go through the process. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md similarity index 94% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md index 07b7b4fc1b8..4e2232589df 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.md @@ -4,6 +4,7 @@ description: Learn how you can create new reclamations in the Spryker Cloud Comm template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/create-reclamations.html - /docs/scos/user/back-office-user-guides/202311.0/sales/orders/creating-reclamations.html - /docs/scos/user/back-office-user-guides/202204.0/sales/orders/creating-reclamations.html related: diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md similarity index 95% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md index 03a4e01798e..67744441c1f 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-reclamations originalArticleId: 20fab61a-f966-4fe9-9702-c04e1f77ccb1 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/reclamations/view-reclamations.html - /2021080/docs/managing-reclamations - /2021080/docs/en/managing-reclamations - /docs/managing-reclamations diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-refunds.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/view-refunds.md similarity index 94% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-refunds.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/view-refunds.md index 597371eef94..493ad783435 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-refunds.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/view-refunds.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/viewing-refunds originalArticleId: 36f1525b-6f90-41be-b0bf-75d368e91b8c redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-refunds.html - /2021080/docs/viewing-refunds - /2021080/docs/en/viewing-refunds - /docs/viewing-refunds diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-the-order-matrix.md b/docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/view-the-order-matrix.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/manage-in-the-back-office/view-the-order-matrix.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/manage-in-the-back-office/view-the-order-matrix.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/order-amendment-feature-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-amendment-feature-overview.md similarity index 98% rename from docs/pbc/all/order-management-system/202512.0/base-shop/order-amendment-feature-overview.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/order-amendment-feature-overview.md index 2b8db1c2c55..c8f27139fe2 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/order-amendment-feature-overview.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-amendment-feature-overview.md @@ -1,9 +1,10 @@ --- title: Order Amendment feature overview -description: +description: last_updated: Jun 03, 2025 template: concept-topic-template redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/order-amendment-feature-overview.html - /docs/pbc/all/order-management-system/202505.0/base-shop/order-management-feature-overview/order-management-feature-overview.html - /docs/pbc/all/order-management-system/202505.0/base-shop/order-amendment-feature-overview.html --- diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/custom-order-reference-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/custom-order-reference-overview.md new file mode 100644 index 00000000000..4825d493203 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/custom-order-reference-overview.md @@ -0,0 +1,90 @@ +--- +title: Custom Order Reference overview +description: An overview of Sprykers Custom Order Reference feature to help companies manage their orders using their own custom reference. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/custom-order-reference-overview +originalArticleId: f2b2d82f-8854-446d-b8e9-63df552a5038 +redirect_from: + - /2021080/docs/custom-order-reference-overview + - /2021080/docs/en/custom-order-reference-overview + - /docs/custom-order-reference-overview + - /docs/en/custom-order-reference-overview + - /docs/scos/user/features/202311.0/order-management-feature-overview/custom-order-reference-overview.html + - /docs/scos/user/features/202204.0/order-management-feature-overview/custom-order-reference-overview.html +--- + +*Custom Order Reference* helps you control purchases and link the internal orders to external systems from your company using your external order reference. With the feature in place, you can add a custom order reference, such as an invoice, to the order on Yves. + +{% info_block infoBox "Info" %} + +Keep in mind that the custom order references are available only for logged-in users. + +{% endinfo_block %} + + +In the Storefront, you, as a buyer, can add a custom order reference to the order or edit it (if needed) on the **Cart** page and then view it on the **Summary** page. Once the order has been placed, the reference becomes non-editable and is displayed on the **Order Details** page in your customer account. + +
      +Cart page + +
      + +
      + +
      + +
      +Summary page + + +
      + +
      + +
      + +
      + +Order Details page + +
      + +
      + +
      + +When working with the order in the Back Office, you, as a Back Office user, can view, edit, or remove the custom order reference on the order details page. + +
      + +
      + + + +## Custom Order Reference with the RFQ, approval process, and share cart by a link + +If you submit a [quote request](/docs/pbc/all/request-for-quote/{{page.version}}/request-for-quote.html) and then convert it to the shopping cart, the cart gets locked. However, you still can add and update the customer order reference for the locked cart. + +In the [Approval Process](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html) scenarios, both an approver and buyer can add or edit the custom order reference during the checkout. + +When [sharing a cart by a link with external users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.html), they can only view the custom order reference. However, when [sharing a cart by a link with internal users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/persistent-cart-sharing-feature-overview.html), they can update the custom order reference for the shopping cart with the read-only and full-access permissions. + + +## Current constraints + +If you added a custom order reference to the cart, submitted a request for quote, and then converted the RFQ to the cart, the custom order reference will be removed. Thus, you will need to add the reference once the RFQ has been converted to the cart. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Adding and removing custom order references](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/add-and-remove-custom-order-references.html) | diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/invoice-generation-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/invoice-generation-overview.md new file mode 100644 index 00000000000..b2855bd3a74 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/invoice-generation-overview.md @@ -0,0 +1,95 @@ +--- +title: Invoice Generation overview +description: This document provides the details about Invoice Generation provided by Spryker Commerce OS. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/invoice-generation-overview +originalArticleId: 34bc81a9-6809-4998-8ccb-956963c063a0 +redirect_from: + - /2021080/docs/invoice-generation-overview + - /2021080/docs/en/invoice-generation-overview + - /docs/invoice-generation-overview + - /docs/en/invoice-generation-overview + - /docs/scos/user/features/202311.0/order-management-feature-overview/invoice-generation-overview.html + - /docs/scos/user/features/202204.0/order-management-feature-overview/invoice-generation-overview.html +--- + +Invoices can be generated and sent to customer's email every time they place an order in the shop. + +{% info_block infoBox "" %} + +You can send a hidden copy of the invoice to yourself or your employees. Keep in mind that sending the hidden copy to yourself is the only way to keep invoices for your reference, as for now, the generated invoices are not saved in the Back Office or on the Storefront. + +{% endinfo_block %} + +You can generate an invoice only once the order has acquired the `confirmed` state. The invoice generation and sending are triggered in the Back Office by initiating the `invoice-generate` event on the **View Order** page. For details about how a Back Office User initiates events for orders, see [Changing order statuses](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html). After generating the invoice, the OMS state of the order changes to `exported`. + +{% info_block infoBox "" %} + +You can use the default OMS states to be displayed on the **Order Details** pages on the Storefront or set custom states so they would make more sense for the Storefront users. For details about how to set the custom states for orders on the Storefront, see [HowTo: Display Custom Names for Order Item States on the Storefront](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/display-custom-names-for-order-item-states-on-the-storefront.html). + +{% endinfo_block %} + +By default, the invoice can be generated only for the whole order (not for individual order items) and only once. However, on the project level, you can set up a configuration that forces the repeated invoice generation by running a console command. For details, see [HowTo: Emailing Invoices Using BCC](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/email-invoices-using-bcc.html). + + +## Invoice template + +The invoice template is not provided out of the box and needs to be added in the SalesInvoiceConfig.php file. Otherwise, the exception is thrown, and the invoice is not generated. + +Check out the example of the Spryker invoice template: +![Generated Invoice](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Invoice+Generation/generated-invoice.png) + +In the generated invoice template, the following data is *not hardcoded*: + +- Customer billing address +- Invoice creation date +- Invoice number +- All order data in the table + +All other text is hardcoded. This text is glossary keys, and you can change them for your project as you want. + +{% info_block infoBox "Product bundles" %} + +Keep in mind that bundled product always has a 0-tax rate. However, all of the bundled items are represented separately in the invoice and can have their own tax rates which are reflected in the invoice. For example, in the preceding image, Sony Bundle is the bundled product with a 0% tax rate, and *Sony HDR-AS20*, *Sony SmartWatch 3*, *Sony Xperia Z3 Compact* are its bundled items with their tax rates. + +{% endinfo_block %} + +## Current constraints + +- Product options are not fully supported in the generated invoice for now. If product options have one tax rate and the product itself another, the tax rate difference is not reflected in the invoice. The invoice shows prices that already include tax rates of products and product options. +- PDF files of the invoices are not generated. + +{% info_block infoBox "Liability" %} + +The invoice generation feature can help streamline your operational processes but comes with responsibility for legal compliance. It's your responsibility with regard to each project to make sure the setup complies with the legal requirements applicable to your company. + + +{% endinfo_block %} + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Trigger invoice generation in the Back Office](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html) | + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/oms-order-management-system-matrix.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/oms-order-management-system-matrix.md new file mode 100644 index 00000000000..406e289dd70 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/oms-order-management-system-matrix.md @@ -0,0 +1,62 @@ +--- +title: OMS (Order management system) matrix +description: Efficiently keep track of orders and their states with the Spryker Order Management System Matrix Feature. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/oms-matrix +originalArticleId: 756b7c08-cc99-41f8-83f6-09e6eba4780b +redirect_from: + - /2021080/docs/oms-matrix + - /2021080/docs/en/oms-matrix + - /docs/oms-matrix + - /docs/en/oms-matrix + - /docs/scos/user/features/202200.0/order-management-feature-overview/oms-order-management-system-matrix.html + - /docs/scos/user/features/202311.0/order-management-feature-overview/oms-order-management-system-matrix.html + - /docs/scos/user/features/202204.0/order-management-feature-overview/oms-order-management-system-matrix.html +--- + +The *OMS Matrix* gives you a quick overview of all orders and their current statuses taken from the State Machine. It lets you see how many order items currently exist in each status and for how long they have been there. From this overview, you can easily go into details per status and order page. + +It is a view into all sales order items and their current states. The matrix shows how many items exist per state and how long they stay here already. + +They have started highly manually: every step from order to fulfillment was done by a support team. A typical culture of heroes. With the increasing amount of sales orders, the entire process or subprocesses have been automated—for example with a lot of if-then-else statements. This easily ends up in unmaintainable spaghetti code. Others have introduced an ERP system, which results in a distributed logic between shop and ERP. In both cases, the documentation of the implemented process can only be found in the code and development efficiency decreases with the increasing complexity. But this has also an effect on operations: Support teams need to use many tools to understand the flow of a sales order. Process insight and process performance indicators are missing. Typically, there is a set of KPI aggregated in a data warehouse, but KPI reflects a result, if you want to understand why a specific result was realized, Process Performance Indicators let you dig deeper. + +## Process Management + +Business Process Management is a management discipline that focuses on processes rather than on departments or functional units. Processes describe how and where value is created for a customer. Typically, processes start outside of the company and then are processed within to finally end outside again. + +Order 2 Cash is an important process that describes all activities needed that an incoming sales order needs to go through to finally end in a positive cash flow. So rather than managing a single department (finance, fulfillment, logistics), the entire flow of tasks is in focus. Because only a well-orchestrated collaboration of all departments and third parties like logistics leads to efficient value creation for the customer. The process is the link between customers, departments, suppliers, and logistics. + +![Process management](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/OMS+matrix/process_management.png) + +### How to manage a business process + +First of all, it's important to understand what tasks are executed in which order. Defining the "to be" process ensures common understanding for all involved parties. A process model helps make implicit knowledge of an individual player explicitly understandable for everyone involved. This understanding helps align everyone and execute tasks in a standardized fashion. + +If a "to be" process is established, it needs to be monitored. Does the idea of how a sales order should be processed reflects the reality? Process performance indicators help measure how efficiently a process creates value for the customer. Together with the process model, they give the basis to improve the process. If a process is executed more often, aspects that were an edge case at the beginning, are now worth to be explicitly modeled in the next version. + +{% info_block infoBox "Managing the sales process" %} + +The goal of continuous process improvement is to enter a cycle of redesign, execution, and monitoring. That means a specific process is actively managed. Ideally, an improvement iteration can be done in a very short time. + +{% endinfo_block %} + +## Sales order processing in the ecommerce world + +Processes in the ecommerce world have the potential to be highly automated. That means that the different tasks are executed in the IT landscape. Often spanning different IT systems. Creation of sales order in a shop system, fulfillment with the help of fulfillment provider, finance, and controlling in an ERP system. To actively manage these processes, an understanding of the implemented processes is needed as well as a possibility to measure their performance. During my time as a consultant, we did often archeology projects, as I used to call them. To understand the current implementation we had to analyze the code. Documentation was typically only maintained until the mid of a project. Process performance indicators were nearly always missing. Only indirect measurements were possible. This is not a good basis for continuous improvement. If you don't know where you are, you can't tell where to go next. + +At the same time processes are highly individual. If you sell concert tickets, music, or other digital products, you need totally different processes than someone who sells physical goods. And if you have a make-to-order process installed, it looks different again. + +So the driving forces are the need to design and execute highly individual processes and manage them continuously to increase process efficiency. A classical approach with specification and implementation is slow and error-prone. Spryker takes a totally different approach, instead of writing specifications and implementing them, process model are executed. That is right: the process model itself is understood by the Spryker engine. + +## Sales order process management with Spryker + +A typical improvement cycle with Spryker looks like this: first, the "to be" processes are modeled involving process and technical experts. This makes sure business and its aspects are reflected. Misunderstandings can be identified very fast and a common understanding of the order processing process can be established in the company. The process model is then transferred into a technical notation that the Spryker engine can execute. The process model lets you add hooks that execute PHP coding. Examples are sending a shipment notification email, creating a credit card pre-authorization, or registering a shipment with the logistic provider. The process model itself orchestrates these technical functions. It tells in which order which technical building blocks have to be executed. + +![Sales order process](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/OMS+matrix/sales_order_process.png) + +Every state in the process model can be mapped to a business state. This lets you measure process performance. How many processes are in the pick pack ship subprocess? How much time does it typically take? How many credit card authorizations have failed? How long does it take to process a return? Furthermore, the Spryker user interface lets you track where in the process every sales order item is. This gives a process insight to support teams that talk with customers. How many processes fail? Is a problem an edge case, or is it worth to be automated? All kinds of Process Performance Indicators (PPI) can be defined. + +If it's about to start the next process improvement iteration, the current process model is already available. No need to look into the coding to understand what the engine actually executes. The process model combined with the performance indicator forms the basis for the next improvement. Which can also be realized in a very short time. The process models need to be updated, and new hooks are implemented. Then the new process can be executed and monitored again. + +The advantages are clear: highly individual processes can be designed with a model that allows a common understanding of all stakeholders. The process itself can be measured and weak spots identified. This lets the company do what is actually supposed to do: continuously improve the way how customer value is created. diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-cancellation-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-cancellation-overview.md new file mode 100644 index 00000000000..9b00103ce0a --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-cancellation-overview.md @@ -0,0 +1,73 @@ +--- +title: Order Cancellation overview +description: Sometimes customers need to cancel their order, learn all about the Spryker Order Cancellation feature allowing orders to be canceled within a timed period. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/order-cancellation-overview +originalArticleId: 454fec27-cd49-4939-ba51-4a6b9c80468b +redirect_from: + - /2021080/docs/order-cancellation-overview + - /2021080/docs/en/order-cancellation-overview + - /docs/order-cancellation-overview + - /docs/en/order-cancellation-overview + - /docs/scos/user/features/202204.0/order-management-feature-overview/order-cancellation-overview.html +--- + +Order cancellation makes the shopping experience of B2B and B2C shoppers more flexible by allowing them to cancel their orders within a defined time period. Also, it optimizes the workflow of sales and customer service by allowing them to cancel orders on customers' behalf in the Back Office. + +For example, a customer changes their mind about an item in an order they have placed. Instead of contacting customer service, they can cancel the order and place a new one with the needed items. + +A customer can cancel orders on the **Order History** and **Order Details** pages. + +
      Order cancellation representation - Order History Page + + +![order-history-page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Order+Cancellation/Order+Cancellation+Feature+Overview/order-history-page.png) + +
      + +
      Order cancellation representation - Order Details Page + +![order-details-page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Order+Cancellation/Order+Cancellation+Feature+Overview/order-details-page.png) + +
      + + +To learn how B2B and B2C shoppers can cancel orders on the Storefront, see [Order cancellation on the Storefront](#storefront). + +To learn how a Back Office user can cancel orders, see [Changing Order Statuses](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html). + +## Timeframes and statuses + +A customer can cancel an order only within a defined time period. By default, the time period is 30 minutes. After the time period has passed, the buttons to cancel the order are not available. A Back Office user can skip the cancellation time period. + +Also, they can cancel an order only if all the included items are in the states that are defined as cancellable. By default, the `payment pending` and `confirmed` states are cancellable. If at least one of the items in an order is in a different state, the buttons to cancel the order are not available. + +In the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html), a developer can configure different order states to be cancellable and change the cancellation time period. + +{% info_block warningBox "State machine" %} + +Ensure that, in your state machine, the *refunded* state always goes before the `cancelled` state. Otherwise, you can't refund the money for a canceled order. You can check the order of the states in the Back Office > **Administration > OMS**. + +{% endinfo_block %} + +To learn how a Back Office user can skip timeout or cancel an order by changing order statuses, see [Changing the state of order items](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html) + + + +## Order cancellation on the Storefront + +This is how the Order Cancellation feature works on the Spryker Demo Shop Storefront: + +
      + +
      + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Changing the state of order items](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/change-the-state-of-order-items.html) | diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/order-management-feature-overview/order-management-feature-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-management-feature-overview.md similarity index 97% rename from docs/pbc/all/order-management-system/202512.0/base-shop/order-management-feature-overview/order-management-feature-overview.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-management-feature-overview.md index c4dbfc92e83..3f2dbfda6a3 100644 --- a/docs/pbc/all/order-management-system/202512.0/base-shop/order-management-feature-overview/order-management-feature-overview.md +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/order-management-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/order-management originalArticleId: f9fbd2cd-af2f-4850-a07a-1cb4d8934171 redirect_from: + - /docs/pbc/all/order-management-system/202512.0/base-shop/order-management-feature-overview/order-management-feature-overview.html - /docs/scos/user/features/202108.0/order-management-feature-overview/order-management-feature-overview.html - /docs/scos/user/features/202200.0/order-management-feature-overview/order-management-feature-overview.html - /docs/scos/user/features/202311.0/order-management-feature-overview/order-management-feature-overview.html @@ -18,7 +19,7 @@ In B2B companies, it's important to control employees' purchases and add order r *Invoice Generation* lets you generate and send invoices to customers after they placed an order. At the same time, you can also keep the invoices for your records by sending a copy of the invoices to your own email address. -With *Order Cancellation*, let your customers cancel orders within a defined period and avoid doing it manually on your side on the customer's behalf. For example, a customer may change their mind about the color of an item they have ordered. Instead of contacting support representatives, they can cancel the order right away and replace it with the needed color. +With *Order Cancellation*, let your customers cancel orders within a defined period and avoid doing it manually on your side on the customer's behalf. For example, a customer may change their mind about the color of an item they have ordered. Instead of contacting support representatives, they can cancel the order right away and replace it with the needed color. To make it easier for your customers to manage their orders and shipments, you can offer them to split a single order into multiple shipments with *Split Delivery*. For example, they might want to buy presents for the holidays and ship them to different addresses. With just the standard single delivery, they would have to place multiple orders for this. Split Delivery allows delivering order items to different shipping addresses and on different days, with different shipment methods. diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/split-delivery-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/split-delivery-overview.md new file mode 100644 index 00000000000..05127f139f9 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/split-delivery-overview.md @@ -0,0 +1,80 @@ +--- +title: Split Delivery overview +description: The feature lets you deliver order items to different shipping addresses and on different days, with different shipment methods. +last_updated: Aug 18, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/split-delivery-overview +originalArticleId: 0d0d041f-19c0-44e7-968e-30fd35ae62dd +redirect_from: + - /2021080/docs/split-delivery-overview + - /2021080/docs/en/split-delivery-overview + - /docs/split-delivery-overview + - /docs/en/split-delivery-overview + - /docs/scos/user/features/202311.0/order-management-feature-overview/split-delivery-overview.html + - /docs/scos/user/features/202204.0/order-management-feature-overview/split-delivery-overview.html +--- + +*Split Delivery* enables the same order as *shipments* to multiple delivery addresses, or on different dates, or with different shipment methods. A *shipment* is a set of two or more products combined by the same delivery address. + +Each shipment defines: + +- Delivery address +- Shipment method +- Delivery date requested from a customer + +In the Storefront, Split Delivery lets you, as a customer, set different delivery addresses for the order items, specify the date when you want the items to be delivered, and select shipment methods per each shipment. + +In the Back Office, the Split Delivery lets you, as a Back Office user, view, update, and create multiple shipments for an order that had originally one delivery address. + +## Split Delivery on the Storefront + +{% info_block warningBox %} + +Keep in mind that Split Delivery works *only* if there are several product items in one order. + +{% endinfo_block %} + +In the *Address* checkout step, the **Define to multiple addresses** drop-down option lets you assign a delivery address per cart item. + +Then, in the *Shipment* checkout step, you can see the products grouped by the same delivery address. The number of shipments equals the number of the same delivery addresses. For each shipment, you can select a shipment method and, optionally, a delivery date. + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Shop+User+Guides/Checkout/Shop+Guide+-+Summary+Step/summary-step-new.png) + +For more details about how to add multiple delivery addresses to order items in the Storefront, see [Multi-step checkout](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/checkout-feature-overview/multi-step-checkout-overview.html). + +## Split Delivery in the Back Office + +In the Back Office, the shipments are displayed on the **View Order: *[Order ID]*** page, in the **Order Items** section. + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Split+Delivery/Split+Delivery+Feature+Overview/shipments-zed.png) + +Here you can perform the following actions on shipments: + +- Create a new shipment for the whole order. +- Modify a delivery address, a shipment method (without any impact on order totals), and a delivery date. +- Move items between shipments. +- Change the state of each item or all items per shipment. + +For more details about how to create and manage shipments in the Back Office, see [Creating shipments](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/create-shipments.html). + +## Constraints + +### Gift card compatibility + +The Split Delivery is not compatible with the Gift Cards feature. If you want to buy a Gift card, only *one* delivery address can be selected for the whole order. + +### Limitation for payment service providers + +Most of payment service providers (PSP) support a single delivery address for a given order, while Split Delivery lets your customers add multiple shipments to the same order. In this case, you need to modify the configuration of the online store to let your customers deliver order items to different addresses. For information about how to do that, see [HowTo: Disable Split Delivery in Yves Interface](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/disable-split-delivery-on-the-storefront.html). + + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create shipments](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/create-shipments.html) | +| [Editing shipments](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/orders/edit-shipments.html) | diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/splittable-order-items-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/splittable-order-items-overview.md new file mode 100644 index 00000000000..6045edb2cf3 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/order-management-feature-overview/splittable-order-items-overview.md @@ -0,0 +1,52 @@ +--- +title: Splittable Order Items overview +description: Product concretes are splittable. Avoid the creation of numerous sales order items, make them non-splittable (no many sales orders, only one will be created). +last_updated: Aug 18, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/splittable-order-items-overview +originalArticleId: 9f4bfeca-f799-42ba-ac91-0c8052aa6970 +redirect_from: + - /2021080/docs/splittable-order-items-overview + - /2021080/docs/en/splittable-order-items-overview + - /docs/splittable-order-items-overview + - /docs/en/splittable-order-items-overview + - /docs/scos/user/features/202200.0/order-management-feature-overview/splittable-order-items-overview.html + - /docs/scos/user/features/202311.0/order-management-feature-overview/splittable-order-items-overview.html + - /docs/scos/user/features/202204.0/order-management-feature-overview/splittable-order-items-overview.html +--- + +As a final step of checkout, for each item in the cart, sales order items are created. By default, each product concrete is splittable. For example, if the product concrete is a pallet containing 1000 cans, 1000 sales order items will be created in the database upon checkout. To avoid the creation of numerous individual sales order items for such products, you can make them non-splittable; that is, instead of many sales orders, just one will be created. This can be achieved by specifying either `true` or `false` value for `is_quantity_splittable` field in the product table. The `is_quantity_splittable` attribute (`true` by default) controls how many sales order items are created as a result of checkout. + +Depending on the `is_quantity_splittable` value, a different number of splittable order items (SOI) is created. But the following is always true: + +```text +cart item quantity = sum(SOI[i].quantity) +``` + +The following table shows quantities that are created in the system if a concrete product containing five products has the `is_quantity_splittable` attribute set to `true` and `false`: + +| CART ITEM | IS_QUANTITY_SPLITTABLE | CART ITEM QUANTITY | Number of SOIs created | QUANTITIES WITHIN THE SOIS | +| --- | --- | --- | --- | --- | +| example concrete 1 | true | 5 | 5 | _1 | +| example concrete 2 | false | 5 | 1 | 5 | + +Product concrete with `is_quantity_splittable = true` has a separate line for each order item in the webshop: +![Order details](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Splittable+Order+Items/Splittable+Order+Items+Feature+Overview/SOI.png) + +Product concrete with `is_quantity_splittable = false` is counted as one sales item in the web shop: +![is_quantity_splittable = false](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Order+Management/Splittable+Order+Items/Splittable+Order+Items+Feature+Overview/SOI-false.png) + +You can import splittable information for product concretes in the `product_concrete.csv` file by setting the value of the `is_splittable` field to either 1 or 0. + +Import concrete products: + +```bash +console data:import product-concrete +``` + + +For non-splittable order items, a Back Office user sees just one product per non-splittable item in the Back Office. For example, if a customer makes an order containing a non-splittable product in the quantity of 2, just 1 sales item with quantity = 2 (1 line) is created in the database. A Back Office user also sees just one sales order item (1 line) in the **Number of Items** column of the **Order Overview** page, and the actual quantity of items in the order is shown in the **Quantity** field of the **Order Details** page. + +Both non-splittable and splittable order items can be refunded in the Back Office. However, unlike splittable orders, you can't refund orders with unsplittable items partially - only the whole order can be refunded, irrespective of its quantity. There are 2 prices in the `ItemTransfer` which are in balance: `RefundableAmount` and `CanceledAmount`. The refundable amount is calculated by the formula: + +`refundable amount: sumPriceToPayAggregation - canceledAmount` diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md b/docs/pbc/all/order-management-system/202602.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/process-incoming-HTTP-requests-from-external-erp-services-for-order-updates.md diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/reclamations-feature-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/reclamations-feature-overview.md new file mode 100644 index 00000000000..ac99fa94e34 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/reclamations-feature-overview.md @@ -0,0 +1,53 @@ +--- +title: Reclamations feature overview +description: With the reclamations in place, you can do three things- create a new connected order, return money paid for the order, or close the reclamation. +last_updated: Aug 3, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/reclamations-feature-overview +originalArticleId: 9b753eb0-0fd3-476f-8f2d-da9687683900 +redirect_from: + - /2021080/docs/reclamations-feature-overview + - /2021080/docs/en/reclamations-feature-overview + - /docs/reclamations-feature-overview + - /docs/en/reclamations-feature-overview + - /docs/scos/user/features/202311.0/reclamations-feature-overview.html + - /docs/scos/user/features/202204.0/reclamations-feature-overview.html +--- + +Handling order claims are the reality of doing business for most ecommerce sites. A customer might have bought an item and then discovered that it does not fit, or they might have stumbled upon another item and want to order it instead of the order already placed, or an item is faulty, or additional parts are needed. + +The *Reclamations* feature provides a way for administrators to handle all the customer order claims. The shop administrators can create, view, and edit the reclamations in the dedicated section of the Administration Interface. The editing implies making a refund (depending on your state machine configuration) or closing the reclamation. Thus, the Reclamation feature makes the process of claims-handling easier, faster, and more efficient for the store administrators, as well as helps to improve customer service. + +Once a Back Office user has received a claim regarding an order from the customer, they can go to [Overview of Orders](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/reclamations/create-reclamations.html) in the Back Office and click **Claim** to register the claim for the order (for all items or separate items of the order). + +After the reclamation has been created, it appears on the [Reclamations](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/reclamations/view-reclamations.html) page under the **Sales** menu in the Back Office. Each reclamation is linked to a specific order by order ID; however, one and the same order can have more than one reclamation. + +With the reclamations in place, you can find the problematic issues with orders that a shop owner has (for example, the product is faulty or broken) and manage them. + +{% info_block errorBox %} + +Because of the specificity of the state machine for every project, out of the box, the `Refunded` state is not reflected in OMS in any way. It is just a mark for the shop administrators signifying that the order has been refunded. + +{% endinfo_block %} + +The reclamations can have two states— `Open` and `Closed`. The closed state of a reclamation means that there is nothing to do about it anymore. Therefore it can not be reopened. + +## Current constraints + +A Back Office user can create a Reclamation in the Back Office as an action item for a company. The rest needs to be configured according to the project needs. + +In the Back Office in the order list, a Back Office user doesn't have the functionality to filter the orders by a business unit. All the orders within the shop system (for example, from multiple company accounts) are displayed here. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create a new order-related reclamation](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/reclamations/create-reclamations.html) | +| [View reclamations](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/reclamations/view-reclamations.html) | +| [Changing the state of order items in reclamations](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/reclamations/change-the-state-of-order-items-in-reclamations.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | +|---------| +|[Reclamations feature integration](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-reclamations-feature.html)| diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/refunds-feature-overview.md b/docs/pbc/all/order-management-system/202602.0/base-shop/refunds-feature-overview.md new file mode 100644 index 00000000000..544bb102f00 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/refunds-feature-overview.md @@ -0,0 +1,31 @@ +--- +title: Refunds feature overview +description: Refunds can be handled automatically in the Admin Interface, once the order has been delivered. All refunds can be listed per order or as a full overview. +last_updated: Sep 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/refunds-feature-overview +originalArticleId: c997df28-f136-4dac-b2c0-c411170fa22b +redirect_from: + - /docs/scos/user/features/202108.0/refunds-feature-overview.html + - /docs/scos/user/features/202200.0/refunds-feature-overview.html + - /docs/scos/user/features/202311.0/refunds-feature-overview.html + - /docs/scos/user/features/202204.0/refunds-feature-overview.html +--- + +Refunds can be handled automatically in the Back Office once the order has been delivered. Your customers can return the entire order or parts thereof by means of the order splitting mechanism. Every order contains information about the total possible refund value and how much has already been refunded. + +All refunds can be listed per order or as a full overview. All sales order items contain information about how much money can be refunded in total and how much has been refunded so far. + +For the refunded items, you can use the default OMS states to be displayed on the **Return Details** pages on the Storefront or set custom state names so they would make more sense for the Storefront users. For details about setting the custom state names on the Storefront for refunded orders, see [HowTo: display custom names for order item states on the Storefront](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/display-custom-names-for-order-item-states-on-the-storefront.html). + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [View refunds](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/manage-in-the-back-office/view-refunds.html) | + +## Related Developer documents + +| MIGRATION GUIDES | TUTORIALS AND HOWTOS | +|---------|---------| +| [Refund migration guide](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-refund-module.html) | [Refund process management](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/refund-process-management.html) | diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-build-a-state-machine.md b/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-build-a-state-machine.md new file mode 100644 index 00000000000..2d8cbaf3e66 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-build-a-state-machine.md @@ -0,0 +1,524 @@ +--- +title: "State machine cookbook: build a state machine" +description: This tutorial helps you model a state machine using Spryker to manage your sale orders. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/state-machine-cookbook-2 +originalArticleId: fd0561bd-b4a9-45b4-80aa-a4b9911eb86e +redirect_from: + - /2021080/docs/state-machine-cookbook-2 + - /2021080/docs/en/state-machine-cookbook-2 + - /docs/state-machine-cookbook-2 + - /docs/en/state-machine-cookbook-2 + - /v6/docs/tate-machine-cookbook-2 + - /v6/docs/en/tate-machine-cookbook-2 + - /v5/docs/tate-machine-cookbook-2 + - /v5/docs/en/tate-machine-cookbook-2 + - /v4/docs/tate-machine-cookbook-2 + - /v4/docs/en/tate-machine-cookbook-2 + - /v3/docs/tate-machine-cookbook-2 + - /v3/docs/en/tate-machine-cookbook-2 + - /v2/docs/tate-machine-cookbook-2 + - /v2/docs/en/tate-machine-cookbook-2 + - /v1/docs/tate-machine-cookbook-2 + - /v1/docs/en/tate-machine-cookbook-2 + - /docs/scos/dev/best-practices/state-machine-cookbook/state-machine-cookbook-part-2-building-a-state-machine.html + - /docs/scos/dev/best-practices/state-machine-cookbook/state-machine-cookbook-build-a-state-machine.html +--- + +{% info_block infoBox %} + +This tutorial helps you model a state machine using Spryker to manage your sale orders. + +{% endinfo_block %} + +First of all, it's important to know which tasks must be executed after an order is submitted and in which order. Keep in mind that you can define more than one state machine in your system to cover the use case scenarios you want to enable in your shop. + +Before starting the development and configuration for a new state machine, it's important to draw on paper the sequence of the processes that must take place after an order is placed and to think about any scenario that could take place—the order is over or underpaid, or the order could not be delivered at the given address. Of course, the state machine can be improved or fixed if you observe that not every possible use case scenario is covered or if the order is not managed as expected. + +To illustrate how to create and implement a state machine, let's create one that manages prepaid orders. Keep in mind that this tutorial is not intended to be a complete use case for a production environment. + +This use case scenario must implement the following behaviors: + +- The payment must be done before packing the order. +- After the order is paid, it can be packed and shipped to the customer. +- The customer can return order items within 100 days since the order was placed. +- If the customer returns the order items, the refund process must be initiated. +- After 100 days have passed, the order is considered completed. +- After a return, the order is considered completed. + +To model the prepaid state machine, follow these steps: + +1. Create the XML file. +2. Identify the states. +3. Identify the events. +4. Define the transitions. +5. Development. +6. Integrate the State Machine. + +Each step is described in detail in the following sections. + +### Create an XML file + +To start defining your new state machine, create a new XML file under `config/Zed/oms/` called `Prepayment.xml`. For the moment the file contains only the name of the process that is currently being built (Prepayment). + +```xml + + + + + + + +``` + +The process has the `main="true"` attribute because this process manages an entire workflow. Given that there are many parts that are similar between the state machines that a system needs, you can reuse parts of them as subprocesses. Subprocesses are described in the XML file similar to the oms processes, the only difference is the value of this attribute (`main="false"`). + +{% info_block infoBox %} + +To see a graphical representation of the current state of your state machine in Zed, register the state machine in the OmsConfig. + +{% endinfo_block %} + + +```php + + + + + + + + + + + + + + + + + + + + + + +``` + +You can check the current state of your state machine in Zed: [Prepayment](http://zed.mysprykershop.com/oms/index/draw?process=Prepayment&format=svg&font=14). You'll see the states defined before, without any links between them. To pass from one state to another, a transition must be defined between two states. To be able to tell when a transition can be fired, an event attached to that transition must take place. + +### Identify events + +Next, let's identify the events that can tell if a transition can be fired. + +| # | EVENT | EVEVT TRIGGER | Comments | +| :--: | :------------------: | :---------------: | :----------------------------------------------------------: | +| | Create invoice | onEnter="true" | Event fired automatically | +| | Send invoice | onEnter="true" | | +| | Waiting for payment | onEnter="true" | | +| | Payment not received | timeout="1hour" | Fired after the specified time has passed | +| | Order canceled | manual="true" | Event fired after user action (either from back-office or from the shop interface) | +| | Payment received | manual="true" | Export order onEnter="true" | +| | Ship order | manual="true" | | +| | Items not returned | timeout="100days" | | +| | Ready for return | onEnter="true" | | +| | Items returned | manual="true" | | +| | Refund payment | manual="true" | | + +Now that you have identified the events, you can add them to the XML file that defines your state machine. + +```xml + + + + + + + + + + + + + + +``` + +{% info_block infoBox "Timeout Events " %} + +If the state machine's current state is the source state for a transition that has a timeout event attached, it's checked periodically by a cronjob to see whether that amount of time has already passed. + +{% endinfo_block %} + +## Define transitions + +Transitions draw the links from one state to another. They are bound to an event, which defines when the transition can be fired (when the state machine can move from the current state to another state). + +A transition can have a condition attached, which is checked when the state machine is currently in the source state by a cronjob that runs periodically. Basically, the condition is linked to a PHP class that contains logic that checks if the transition can take place. + +Now, let's draw the possible transitions between the previously defined states and set up the corresponding event for each of them. + +```xml + + + new + invoice generated + create invoice + + + + invoice generated + invoice sent + send invoice + + + + invoice sent + waiting for payment + waiting for payment + + + + waiting for payment + cancelled + cancel + + + + waiting for payment + payment reminder sent + payment not received + + + + waiting for payment + payment received + payment received + + + + payment reminder sent + cancelled + cancel + + + + payment reminder sent + payment received + payment received + + + + payment received + exported order + export order + + + + exported order + order shipped + ship order + + + + order shipped + ready for return + ready for return + + + + ready for return + completed + item not returned + + + + ready for return + refund initiated + items returned + + + + refund initiated + completed + refund payment + + + +``` + +You can check the current state of your state machine in Zed: [Prepayment](http://zed.mysprykershop.com/oms/index/draw?process=Prepayment&format=svg&font=14). + +You can highlight the best-case scenario by adding the `happy="true"` attribute to the transitions, where is the case, as in the following example: + +```xml + + ready for return + completed + item not returned + +``` + +This transition would be the happy case, rather than the situation when the user returns some order items. If you check again the visual representation of the state machine being built, you can observe that the best-case scenario transitions are now highlighted. + +{% info_block warningBox %} + +Adding the `happy` attribute does not interfere with the behavior of the state machine; it just helps you visualize better the business processes that are modeled in the state machine. + +{% endinfo_block %} + +### Implement the commands and conditions + +Now you can visualize the transitions defined in your state machine and you have an idea about the business processes that are involved when a prepaid order is submitted, but your state machine doesn't do much for the moment. You need to attach the logic that gets executed when an event is fired or condition to check if a transition is possible. Update the XML file that defines your state machine by adding the necessary commands and conditions to it. + +```xml + + + + + + + + + + + + + + + + + + + + + + + new + invoice generated + create invoice + + + + invoice generated + invoice sent + send invoice + + + + invoice sent + waiting for payment + waiting for payment + + + + waiting for payment + cancelled + cancel + + + + waiting for payment + payment reminder sent + payment not received + + + + waiting for payment + payment received + payment received + + + + payment reminder sent + cancelled + cancel + + + + payment reminder sent + payment received + payment received + + + + payment received + exported order + export order + + + + exported order + order shipped + ship order + + + + order shipped + ready for return + ready for return + + + + ready for return + completed + item not returned + + + + ready for return + refund initiated + items returned + + + + refund initiated + completed + refund payment + + + + + + + + + + + + + + + + + + + +``` + + +Now check again the [Prepayment](http://zed.mysprykershop.com/oms/index/draw?process=Prepayment&format=svg&font=14) state machine in Zed. Some of the events now have commands associated and some of the transitions appear to have conditions attached, but they are marked as not yet implemented. For your state machine to be functional, you need to implement the configured commands and conditions. + +The implementation for the commands must be placed in `the` OMS module on the project level, under `Communication/Plugin/Oms/Commandand` for the conditions under `Communication/Plugin/Oms/Condition`. After you finish with the implementation, the code must be linked to the XML file where the state machine is defined. To pass the right implementations of `commands/conditions` to your state machine, register the plugins in the `OmsDependencyProvider`: the conditions are registered under `thegetConditionPlugins()` and the commands under the `getCommandPlugins()` operation. + +**Example**: + +```php + new IsRefundApprovedPlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Oms\Communication\Plugin\Oms\Command\CommandInterface[] + */ + protected function getCommandPlugins(Container $container) + { + return [ + 'Prepayment/CreateInvoice' => new CreateInvoicePlugin(), + 'Prepayment/SendInvoice' => new SendInvoicePlugin(), + 'Prepayment/UpdatePaymentStatus' => new UpdatePaymentStatusPlugin(), + 'Prepayment/UpdateOrder' => new UpdateOrderPlugin(), + 'Prepayment/RefundPayment' => new RefundPaymentPlugin(), + 'Prepayment/CancelOrder' => new CancelOrderPlugin(), + + ]; + } +} +``` + +Now check again the [Prepayment](http://zed.mysprykershop.com/oms/index/draw?process=Prepayment&format=svg&font=14) state machine in Zed. The implementation is linked to the state machine. + +## Integrate the state machine + +You can have more than one state machine defined in your application and apply them according to the details of the order that gets submitted. + +For example, you can have a state machine that doesn't involve shipping for goods that are delivered electronics. Also, you can have a dedicated state machine for each payment method (invoice payment method involves other patterns than credit card payment does). + +The mapping between a submitted order and the corresponding state machine that can process the payment is done in the `SalesConfig` class, under the `determineProcessForOrderItem(OrderTransfer $order, QuoteTransfer $request)` operation; here, set the corresponding process for your order. + +```php +setProcess('Prepayment'); +``` diff --git a/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md b/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md new file mode 100644 index 00000000000..64a58b5fdeb --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.md @@ -0,0 +1,589 @@ +--- +title: "State machine cookbook: State machine fundamentals" +description: In Spryker you can use the OMS module to automate the management of orders or the StateMachine module to automate other processes you define in your shop. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/state-machine-cookbook +originalArticleId: c69ec585-3962-4da9-a973-ca1e23d256d8 +redirect_from: + - /2021080/docs/state-machine-cookbook + - /2021080/docs/en/state-machine-cookbook + - /docs/state-machine-cookbook + - /docs/en/state-machine-cookbook + - /v6/docs/state-machine-cookbook + - /v6/docs/en/state-machine-cookbook + - /v5/docs/state-machine-cookbook + - /v5/docs/en/state-machine-cookbook + - /v4/docs/state-machine-cookbook + - /v4/docs/en/state-machine-cookbook + - /v3/docs/state-machine-cookbook + - /v3/docs/en/state-machine-cookbook + - /v2/docs/state-machine-cookbook + - /v2/docs/en/state-machine-cookbook + - /v1/docs/state-machine-cookbook + - /v1/docs/en/state-machine-cookbook + - /docs/scos/dev/best-practices/state-machine-cookbook/state-machine-cookbook-part-i-state-machine-fundamentals.html + - /docs/scos/dev/best-practices/state-machine-cookbook/state-machine-cookbook-state-machine-fundamentals.html +--- + +State machines are a model of computation used to automate processes. In Spryker, you can use the `OMS` module to automate the management of orders or the `StateMachine` module to automate other processes you define in your shop. Both behave similarly, but the `OMS` one is a customized solution to manage the orders in a shop. + +The machine can be in one of a finite number of states, and it can be only in one state at a time—for example, a state machine is in the `waiting for payment` state. + +{% info_block infoBox %} + +State machines can model problems that involve performing a predetermined sequence of actions that depend on a sequence of events—for example, the order is shipped if the payment is successful. + +{% endinfo_block %} + + +## State machine components + +E-Commerce companies need to implement highly individual processes that need to be continuously improved. Instead of building a code for every process or adapting the standard functionality of a shop system, Spryker takes a totally different approach. The order process is modeled with states and transitions, and it's then transferred to an XML notation. The XML format is understood and executed by Spryker's Zed engine. Zed executes the process model; no need to program a specification anymore. + +You can define a state machine for each process you identify in your application. For example, the process of managing orders that use a credit card as a payment type differs from those that use invoices. You can define a separate state machine for each, and when a new order is submitted, you can choose which of the available state machines you want to manage. + +### States + +What are the relevant elements of a state machine? States lets you describe in which state a sales order according to the sales order item is. States can reflect everything that needs to be considered in your order processing. If you have a build-to-order process, one state can be `waiting for production finished`. If you sell digital goods, one state can be `download for customer activated`. In case of physical goods, a state called `shipped` reflects that the sales order or some items have been shipped. + +How are the states modeled in XML? A list of state elements can be defined with this simple XML. First, the state has a name that allows referencing the state. The display attribute allows defining a glossary key that contains the translation for the state name. + +```xml + + + + invoicable + + + +``` + +Furthermore, a state can contain several flags. + +### Flagged items + +Sometimes you need to have the ability to check if items are in a certain state. For determining if an order is flagged, `OmsFacade` exposes two operations: +- `isOrderFlagged($idOrder, $flag)`—checks if an order contains at least a flag (at least one order item is flagged). +- `isOrderFlaggedAll($idOrder, $flag)`—checks if the entire order is flagged (all order items are flagged). + +**Example:** + +```xml + +.. + + ready for invoice + + +``` + +### Transitions + +States can be connected one to another through transitions, similar to a finite graph. Such a transition is bound to an event, which tells when the order or order item can leave the current state. For example, the states `waiting for credit card capture` and `captured` are connected with a transition that expects an external event `capture successful`. States and transition define the possible flow a sales order can take and also which flow is actually not possible. + +Technically, transitions are very simple. A source and a target state are defined. The event tells when the transition can be fired. + +The event element can be omitted. This way, an external call like `saveOrder` or `triggerEvent` is finished. It means that the control flow of the code goes back to the invoking method. Zed continues the execution of the process model with the help of a cronjob. If the event element is omitted and a condition is used, Zed uses the condition to evaluate if the transition can be fired. + +```xml + + paid + shipped + ship it + +``` + +#### Transitions attributes + +You can attach the following attributes to a transition: + +| ATTRIBUTE | DESCRIIPTION | EXAMPLE | +| --------- | ------------------------------------------------------------ | --------------------------------- | +| happy | Marks the transition as the happy case. When Zed renders the process model, this transition is marked with a green shade. | `happy="true"` | +| condition | Allows adding PHP coding that double checks whether this transition can be fired or not. The condition is evaluated when the defined event has been fired. | `condition="PackageName/ClassName"` | + +### Conditions + +A transition can be conditioned: the state machine can move from one state to another if a certain condition associated with that transition is being satisfied. This can be modeled in the XML file that describes the process, as in the following example: + +```xml + + paid + shipped + ship it + +``` + +The mapping between the string that identifies the condition in the XML file and the actual implementation of the condition is done in `OmsDependencyProvider`, in the `getConditionPlugins` method: + +```php + $container->getLocator()->oms()->pluginOmsConditionPaymentIsCompleted(), + //.. +]; +} +``` + +Another use case of using conditions is when you need to go to different target states depending on the result returned after evaluating the condition. Basically, it's a way of implementing an *if-else* block in a state machine. + +Example: +![State machine condition](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/State+Machine+Cookbook/State+Machine+Cookbook+-+Part+I+-+State+Machine+Fundamentals/state-machine-condition.png) + +In the preceding example, transitions are defined with the same source state (`Payment Pending`) and event (`Pay`) but different target states (`Cancelled` and `Paid`). This means that when the `Pay` event is triggered, and the state machine is in the `Payment Pending` state, you have two options for the next state. The condition is evaluated, and if it returns true, the transition that has the condition attached gets executed. In this case, the state machine moves to the `Paid` state. If it's evaluated as false, the other transition gets executed—the state machine moves to the `Cancelled` state. + +You can see the corresponding XML for this use case: + +```xml + + payment pending + paid + pay + + + payment pending + cancelled + pay + +``` + +#### Implementing a condition + +Conditions are classes that implement `ConditionInterface`, which expects a method check. This returns either true or false, which tells Zed whether or not a transition can be executed. + +```php + + shipped + delivered + +``` + +#### Transition representation + +![Transition representation](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/State+Machine+Cookbook/State+Machine+Cookbook+-+Part+I+-+State+Machine+Fundamentals/state-machine-transition-representation.png) + +For performance reasons, it's not recommended to create scenarios where a lot of items wait. This check is executed every minute and can be time-consuming. + +### Events + +An event can be triggered from the outside, and it starts a transition. + +By triggering an event, you tell the state machine which transition to execute and to which state to move from the current source state. + +Triggering an event follows the transition that has the current state as a source state and the triggered event type attached to it. The event triggers the transaction, and the related command is executed. The condition is checked afterward. If no condition is evaluated to true, the item stays in the source state and the timeout is reset because it moved away for a moment. + +{% info_block errorBox %} + +Event names must be verbs like `ship`, `pay`, `authorize`, while state names must express that something happened or will happen (like `paid` or `payment pending`, `closed`, `cancelled`). + +{% endinfo_block %} + +This is how an event is defined: + +```xml + +``` + +#### Event types + +**OnEnter events** + +A special type of event is the `OnEnter` event. If this event is attached to a transition, the state machine automatically executes it when the current state is the same as the source state of the transition. By using the `OnEnter` events, you can model a chain of commands that you want to get executed because the state machine always looks if there is another thing to do after any transition that gets executed. + +For example, after the payment is successfully submitted, you want to start the export process automatically. To achieve this, you can define a transition between the `Paid` and `Exported` states with an `OnEnter` event attached to it. This means that after the payment is registered, the order is ready to be prepared for shipping. +![OnEnter Events](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/State+Machine+Cookbook/State+Machine+Cookbook+-+Part+I+-+State+Machine+Fundamentals/state-machine-onenter-events.png) + +**Manually executable events** + +To trigger an event manually, mark it as manually executable. When an order is in the same state as the source state of a transition that has a manually executable event attached to it, in the Back Office, on the order details page, you can see a button that corresponds to that event. By clicking the button, you trigger the event associated with it. + +On the default Zed Order Details page, you can trigger an event for a single item, group of items, or all items of the order. +![Manually executable events](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/State+Machine+Cookbook/State+Machine+Cookbook+-+Part+I+-+State+Machine+Fundamentals/manually-executable-events.png) + + + +**Timeout events** + +Events can be triggered after a defined period of time has passed through a timeout. + +Let's assume you are trying to define the prepayment process, in which if, after 15 days, no payment is received, the reminder sent is fired because of the timeout. How is the reminder then technically sent? This can be implemented through a command attached to the send first reminder event. The command attribute references a PHP class that implements a specific interface. Every time the event is fired (automatically, after the timeout), Zed makes sure the associated command is executed. If an exception occurs in the command coding, the order or order item stays in the source state. + +```xml + + payment pending + first reminder sent + sendFirstReminder + + +... + + +... + +``` + +You can also set the date and time when the timeout is started. For details, see [OMS Timeout Processor](/docs/pbc/all/order-management-system/{{site.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html#oms-timeout-processor) + +#### Invoking an event + +Events can be triggered through the following: + +- timeout automatically +- onEnter +- facade calls +- oms:check-conditions + +**Events triggered through timeout** + +An event associated with a transition can have a timeout interval set. When that timeout interval passes, the order is transitioned to the target state. + +```xml +.. + + completed but returnable + completed success + not returned + + + + + + +.. +``` + +The textual timeout is evaluated with `\DateInterval::createFromDateString()`. For more information, see [DateInterval::createFromDateString](https://www.php.net/manual/en/dateinterval.createfromdatestring.php). + +#### Events triggered automatically using onEnter + +If an event has the `onEnter` attribute set to `True`, it's automatically triggered when the order is in the source state of the transition that contains the event. + +```xml +.. + + paid + invoice created + create invoice + + + + +.. + + +``` + +In the preceding example, after an order is paid, the invoice is automatically created (when the state machine reaches the state `paid`, it fires the `create invoice` event that runs the `Oms/CreateInvoice` command and transitions it to the `invoice created` state). + +**Events triggered through facade calls** + +The Order Management System facade contains several methods that allow triggering an event: + +- `triggerEvent` +- `triggerEventForNewItem` +- `triggerEventForNewOrderItems` +- `triggerEventForOneOrderItem` +- `triggerEventForOrderItems` + +This is typically used if an external event is raised. + +Examples of external events are as follows: +- An asynchronous payment response. +- A fulfillment message from the ERP. + +Therefore you can implement a service that receives such a message. The next step is to correlate the event with a sales order or with the sales order items. That means you need to find the Sales Order for which the event has been raised. Correlation criteria can be the Sales Order ID or a payment transaction code that was previously saved in Zed. Afterward, the methods `triggerEventForOrderItems` or `triggerEventForNewOrderItems` can be used to trigger an event. + +{% info_block errorBox %} + +The process needs to be in a state where it's actually waiting for the event you are triggering. Otherwise, the event is not processed. + +{% endinfo_block %} + +#### Locking the triggered events + +Every time the event is triggered, a dedicated lock based on the order item IDs is acquired. This is necessary to make sure that the same event is not triggered several times by incoming parallel requests. + +Every time an attempt to trigger an event takes place, the locking process works as follows: + +- Try to acquire a lock for target order items. +- If the lock doesn't exist already, proceed with the process; fail otherwise—the event has already been triggered by another request. +- When the process is finished (successfully or not), the lock is released. + +Additionally, a cronjob cleans outdated locks for which the process did not finish successfully. You can configure the desired lock timeout interval in a module configuration file `Zed\Oms\OmsConfig::getStateMachineLockerTimeoutInterval()` and the frequency of the cleanup job in the cronjob configuration. + +### Commands + +A transition from one state to another has an event associated with it. The event can have a command associated with it, which is a piece of logic that gets executed when the event is fired. The attached command is specified in the XML file that describes the state machine, where the event is being defined: + +```xml + + + ... + +``` + +The mapping between the string that identifies the command in the XML file and the actual implementation of the command is done in `OmsDependencyProvider`, in the `getCommandPlugins` method: + +```php + $container->getLocator()->oms()->pluginOmsCommandSendPaymentRequest(), + //.. + ]; +} +``` + +In the preceding example, `Oms/SendPaymentRequest` is mapped to `Plugin/Oms/Command/SendPaymentRequest`. + +#### Implementing a command + +There are two types of commands: + +- Commands by order item—they get executed for each order item; implements `CommandByItemInterface`. +- Commands by order—executed for all items of the order which are in the same transition; implements `CommandByOrderInterface`. + +Depending on whether you want to execute the command for all sales order items that undergo the transition or separately for each sales order item, you choose the interface you want to implement. The fully qualified class name (including namespace) is added to the corresponding event. + +The `run()` method gets executed when the event linked to the command is fired. + +```php + + + completion + cancellation + .. + +.. +``` + +And specify the path to the file in which the transitions of that subprocess are described: + +```xml + + .. + + + +``` + +In the main process, add the corresponding transitions between the starting and ending states of the included subprocesses and other states (that are defined in other subprocesses or in the main process). + +### Putting it all together + +The following snippet shows how all elements are brought together in an XML file. Note that you can also define subprocesses. This lets you reuse a subprocess from several processes. Therefore, `subprocess` used is declared in the `` section. For each subprocess, you need to define a process element that contains the name and file location as attributes. + +```xml + + + + + invoice creation + + + + + ... + + + + + ... + + + + + + ... + + + + + +``` + +## Linking processes with code + +Events can have commands attached to them, which is logic that gets executed when that event is fired. + +Example: + +```xml + + +.. + +``` + +The mapping between this string and the actual implementation of the command is done through the OMS dependency provider. + +Similar to this, the mapping between a string linked to a condition and the implementation of the condition is also done through the OMS dependency provider. + +A transition from one state to another can be conditioned. It's only possible to make that transition if a condition is satisfied: + +```xml + + paid + shipped + ship it + +``` + +## Configure OMS cronjobs + +Spryker has three dedicated console commands for managing orders: + +- Check timeout (oms:check-timeout). +- Check condition (oms:check-condition). +- Clear locks (oms:clear-locks). + +The `check timeout` console command checks if the timeout was reached for orders that are in a state that's a source for a transition that has an event with a timeout attached. If the timeout is reached, the order moves to the next state. + +The `check condition` console command evaluates if the condition is satisfied for orders that are in a state that's source for a transition that has a condition attached. If the condition is satisfied, the order moves to the next state. + +The `clear locks` console command cleans up outdated event trigger locks from the database. For the three console commands, a cronjob must be scheduled so that they are automatically executed on the configured time interval. + +{% info_block infoBox "Cronjob Configuration" %} + +Cronjobs are configured in the `jobs.php` configuration file that's placed under `config/Zed/cronjobs`. + +{% endinfo_block %} + +The following is an example of configuring the jobs for these commands: + +```bash +/* STATE MACHINE */ +$jobs[] = [ + 'name' => 'check-statemachine-conditions', + 'command' => '$PHP_BIN vendor/bin/console oms:check-condition', + 'schedule' => '*/10 * * * *', + 'enable' => true, + 'run_on_non_production' => true, + 'stores' => $allStores, +]; + +$jobs[] = [ + 'name' => 'check-statemachine-timeouts', + 'command' => '$PHP_BIN vendor/bin/console oms:check-timeout', + 'schedule' => '*/10 * * * *', + 'enable' => true, + 'run_on_non_production' => true, + 'stores' => $allStores, +]; + +$jobs[] = [ + 'name' => 'oms-clear-locks', + 'command' => '$PHP_BIN vendor/bin/console oms:clear-locks', + 'schedule' => '0 6 * * *', + 'enable' => true, + 'run_on_non_production' => true, + 'stores' => $allStores, +]; +``` + +In the preceding example, `check timeout` and `check condition` jobs are configured to run the console commands every 10 minutes (`*/10 * * * *`); clear locks are configured to run every day at 6 o'clock. + +For more information on how to define a cron expression, see the [CRON expression](https://en.wikipedia.org/wiki/Cron#CRON_expression) section. + +## Versioning the state machines + +The ideal case would be that after designing your state machines and you start using them in the production environment, they stay the same and don't need any further adjustments. + +However, you all know that a software product is subject to change in time. The state machines that model the order processing touch many critical parts of the system, so it might need updates in the future. + +When a state machine is changed, but there are already orders which use this process, this part becomes important. + + +{% info_block infoBox "Info" %} + +We recommend using versioning for your state machines. + +{% endinfo_block %} + + +**Example**: + +The first version of a state machine that is responsible for managing orders that use Paypal as a payment provider can be called `Paypal01`, and the XML that defines this state machine can be placed in the `Paypal01.xml` file. If an update is needed, the updated state machine can be called `Paypal02` and handle new orders that use Paypal for payment. The checkout must be changed so that all new orders use the new process while the existing ones use the old one. + +As you can notice from the example, all changes that are BC breaking result in a higher number. However, you can change state machines without BC breaks as well—for example, when you just add states and transitions. BC break can be when you rename states or change the logic. diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/state-machine-cookbook/state-machine-cookbook.md b/docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/state-machine-cookbook/state-machine-cookbook.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/state-machine-cookbook/state-machine-cookbook.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/collectai.md b/docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/collectai.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/collectai.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/collectai.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/nekom-cc-gmbh.md b/docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/nekom-cc-gmbh.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/nekom-cc-gmbh.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/nekom-cc-gmbh.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/nitrobox.md b/docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/nitrobox.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/nitrobox.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/nitrobox.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/tradebyte.md b/docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/tradebyte.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/third-party-integrations/tradebyte.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/third-party-integrations/tradebyte.md diff --git a/docs/pbc/all/order-management-system/202512.0/base-shop/unique-random-order-reference-generator.md b/docs/pbc/all/order-management-system/202602.0/base-shop/unique-random-order-reference-generator.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/base-shop/unique-random-order-reference-generator.md rename to docs/pbc/all/order-management-system/202602.0/base-shop/unique-random-order-reference-generator.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/create-merchant-oms-flows.md b/docs/pbc/all/order-management-system/202602.0/marketplace/create-merchant-oms-flows.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/create-merchant-oms-flows.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/create-merchant-oms-flows.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/glue-api-retrieve-marketplace-orders.md b/docs/pbc/all/order-management-system/202602.0/marketplace/glue-api-retrieve-marketplace-orders.md similarity index 99% rename from docs/pbc/all/order-management-system/202512.0/marketplace/glue-api-retrieve-marketplace-orders.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/glue-api-retrieve-marketplace-orders.md index 27b9cf86449..70795ef075c 100644 --- a/docs/pbc/all/order-management-system/202512.0/marketplace/glue-api-retrieve-marketplace-orders.md +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/glue-api-retrieve-marketplace-orders.md @@ -697,8 +697,8 @@ To retrieve detailed information about an order, send the request: "description": "Get a 10% discount on all orders above certain value depending on the currency and net/gross price. This discount is not exclusive and can be combined with other discounts.", "voucherCode": null, "quantity": 1 - } - ], + } + ], "productOptions": [], "amount": null } diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-order-expenses.csv.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-order-expenses.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-order-expenses.csv.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-order-expenses.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-order-items.csv.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-order-items.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-order-items.csv.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-order-items.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-orders.csv.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-orders.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/export-file-details-merchant-orders.csv.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/export-file-details-merchant-orders.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-oms-process.csv.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-oms-process.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-oms-process.csv.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-oms-process.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-order-status.csv.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-order-status.csv.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-order-status.csv.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-order-status.csv.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/marketplace-import-and-export-order-management-system-data.md b/docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/marketplace-import-and-export-order-management-system-data.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/import-and-export-data/marketplace-import-and-export-order-management-system-data.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/import-and-export-data/marketplace-import-and-export-order-management-system-data.md diff --git a/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-feature.md b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-feature.md new file mode 100644 index 00000000000..0313e09b6af --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Order Management feature +last_updated: Jun 24, 2024 +description: This document describes how to integrate the Marketplace Order Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-order-management-feature.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-merchant-portal-feature.md b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-merchant-portal-feature.md new file mode 100644 index 00000000000..4b0e9f85aa3 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-merchant-portal-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Order Management + Merchant Portal feature +last_updated: Sep 13, 2021 +description: This integration guide provides steps on how to integrate the Marketplace Merchant Portal Order Management feature into a Spryker Marketplace project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-order-management-feature.md %} diff --git a/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.md b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.md new file mode 100644 index 00000000000..6d35862c730 --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/install-features/install-the-marketplace-order-management-order-threshold-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Order Management + Order Threshold feature +last_updated: Dec 16, 2020 +description: This document describes the process how to integrate the Marketplace Order Management Feature + Order Threshold feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Order Management feature walkthrough + link: docs/pbc/all/order-management-system/page.version/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-order-management-order-threshold-feature.md %} diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-main-merchant-orders.md b/docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-main-merchant-orders.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-main-merchant-orders.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-main-merchant-orders.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-orders-in-the-back-office.md b/docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-orders-in-the-back-office.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-orders-in-the-back-office.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-orders-in-the-back-office.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md b/docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-orders.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/manage-merchant-orders.md b/docs/pbc/all/order-management-system/202602.0/marketplace/manage-merchant-orders.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/manage-merchant-orders.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/manage-merchant-orders.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-domain-model-and-relationships.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-domain-model-and-relationships.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-interaction.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-interaction.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-interaction.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-interaction.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-overview.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-overview.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-overview.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-and-merchant-state-machines-overview/marketplace-and-merchant-state-machines-overview.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md similarity index 97% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md index 4c41eabcb32..769c0bb87b3 100644 --- a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Order Management feature overview description: This article explains all about the Spryker Marketplace order feature in the Spryker Cloud Commerce OS. template: concept-topic-template +redirect_from: + - /docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-management-feature-overview.html last_updated: Nov 21, 2023 related: - title: Marketplace order overview @@ -76,7 +78,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde {% info_block warningBox "Warning" %} -In some cases, because of rounding, the amounts of Marketplace order totals can differ from the amounts of the Merchant order totals in a matter of a cent or less. You can modify the behavior by changing the rounding algorithms on the project level. +In some cases, because of rounding, the amounts of Marketplace order totals can differ from the amounts of the Merchant order totals in a matter of a cent or less. You can modify the behavior by changing the rounding algorithms on the project level. {% endinfo_block %} diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md similarity index 97% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md index 3bc68150bb3..c774c86299b 100644 --- a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md +++ b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.md @@ -2,6 +2,8 @@ title: Marketplace Order overview description: Learn all about the Spryker Marketplace order feature and how orders work within your project. template: concept-topic-template +redirect_from: + - /docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/marketplace-order-overview.html last_updated: Nov 21, 2023 related: - title: Marketplace Order Management feature overview @@ -76,7 +78,7 @@ Rounding rules for a regular SCOS sales order also apply to the Marketplace orde {% info_block warningBox "Warning" %} -In some cases, because of rounding, the amounts of Marketplace order totals can differ from the amounts of the Merchant order totals in a matter of a cent or less. You can modify the behavior by changing the rounding algorithms on the project level. +In some cases, because of rounding, the amounts of Marketplace order totals can differ from the amounts of the Merchant order totals in a matter of a cent or less. You can modify the behavior by changing the rounding algorithms on the project level. {% endinfo_block %} diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/merchant-order-overview.md b/docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/merchant-order-overview.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/marketplace-order-management-feature-overview/merchant-order-overview.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/marketplace-order-management-feature-overview/merchant-order-overview.md diff --git a/docs/pbc/all/order-management-system/202512.0/marketplace/merchant-oms.md b/docs/pbc/all/order-management-system/202602.0/marketplace/merchant-oms.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/marketplace/merchant-oms.md rename to docs/pbc/all/order-management-system/202602.0/marketplace/merchant-oms.md diff --git a/docs/pbc/all/order-management-system/202512.0/order-management-system.md b/docs/pbc/all/order-management-system/202602.0/order-management-system.md similarity index 100% rename from docs/pbc/all/order-management-system/202512.0/order-management-system.md rename to docs/pbc/all/order-management-system/202602.0/order-management-system.md diff --git a/docs/pbc/all/order-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-order-management-service-points-feature.md b/docs/pbc/all/order-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-order-management-service-points-feature.md new file mode 100644 index 00000000000..0859b2cf13e --- /dev/null +++ b/docs/pbc/all/order-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-order-management-service-points-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Order Management + Service Points feature +description: Learn how to integrate the Order Management + Service Points feature into your project +last_updated: Aug 04, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-order-management-feature.md %} diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md b/docs/pbc/all/payment-service-provider/202410.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md deleted file mode 100644 index 4310c0d237c..00000000000 --- a/docs/pbc/all/payment-service-provider/202410.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Payments Glue API -description: Learn how to install the payments glue api in to your Spryker Cloud Commerce OS project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-payments-feature-integration -originalArticleId: 37aaeca3-9205-4ca3-8332-6a1ab7b31c80 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-payments-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-payments-feature-integration.html - - /docs/pbc/all/payment-service-provider/202311.0/install-and-upgrade/install-the-payments-glue-api.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-payments-feature-integration.html -related: - - title: Install the Payments feature - link: docs/pbc/all/payment-service-provider/page.version/base-shop/install-and-upgrade/install-the-payments-feature.html - - title: Payments feature walkthrough - link: docs/pbc/all/payment-service-provider/page.version/base-shop/payments-feature-overview.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - - title: Updating payment data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-payments-glue-api.md %} diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md b/docs/pbc/all/payment-service-provider/202512.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md deleted file mode 100644 index 4310c0d237c..00000000000 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Payments Glue API -description: Learn how to install the payments glue api in to your Spryker Cloud Commerce OS project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-payments-feature-integration -originalArticleId: 37aaeca3-9205-4ca3-8332-6a1ab7b31c80 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-payments-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-payments-feature-integration.html - - /docs/pbc/all/payment-service-provider/202311.0/install-and-upgrade/install-the-payments-glue-api.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-payments-feature-integration.html -related: - - title: Install the Payments feature - link: docs/pbc/all/payment-service-provider/page.version/base-shop/install-and-upgrade/install-the-payments-feature.html - - title: Payments feature walkthrough - link: docs/pbc/all/payment-service-provider/page.version/base-shop/payments-feature-overview.html - - title: Check out purchases - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html - - title: Updating payment data - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-payments-glue-api.md %} diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md deleted file mode 100644 index 05b8c4ee81b..00000000000 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md +++ /dev/null @@ -1,439 +0,0 @@ ---- -title: Integrate Payone -description: Learn how you can integrate the Payone app into your Spryker shop using Spryker App Composition Platform. -template: howto-guide-template -last_updated: Sep 22, 2025 -redirect_from: - - /docs/pbc/all/payment-service-providers/payone/integrate-payone.html - - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/payone/integration-in-the-back-office/integrate-payone.html - - /docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/integration-in-the-back-office/integrate-payone.html ---- - -This document describes how to integrate Payone using the Payone app. - -## Prerequisites - -- Fulfill [App Composition Platform prerequisites](/docs/dg/dev/acp/install-prerequisites-and-enable-acp.html). -- Install the modules for Payone. To check the list of required modules and their versions, in the Back Office, go to **Apps**>**Payone**. The list of modules is displayed in **Requirements** > **Spryker module list** section. - - -## Integrate Payone - -{% info_block infoBox "" %} - -Your project codebase can already have some of the changes described in this guide. Adjust the code according to your codebase. - -{% endinfo_block %} - -To integrate Payone, follow the steps: - -1. Configure shared configs: - -
      - config/Shared/config_default.php - -```php -use Spryker\Shared\MessageBroker\MessageBrokerConstants; -use Spryker\Shared\OauthClient\OauthClientConstants; -use Spryker\Shared\Oms\OmsConstants; -use Spryker\Shared\Payment\PaymentConstants; -use Spryker\Shared\Sales\SalesConstants; -use Spryker\Zed\MessageBrokerAws\MessageBrokerAwsConfig; -use Spryker\Zed\Payment\PaymentConfig; - -//... -$trustedHosts - = $config[HttpConstants::ZED_TRUSTED_HOSTS] - = $config[HttpConstants::YVES_TRUSTED_HOSTS] - = array_filter(explode(',', getenv('SPRYKER_TRUSTED_HOSTS') ?: '')); - -$config[KernelConstants::DOMAIN_WHITELIST] = array_merge($trustedHosts, [ - $sprykerBackendHost, - $sprykerFrontendHost, - //... - 'threedssvc.pay1.de', // trusted Payone domain - 'www.sofort.com', // trusted Payone domain - -]); -$config[PaymentConstants::TENANT_IDENTIFIER] - = $config[KernelAppConstants::TENANT_IDENTIFIER] - = getenv('SPRYKER_TENANT_IDENTIFIER') ?: ''; - -$config[OmsConstants::PROCESS_LOCATION] = [ - //... - OmsConfig::DEFAULT_PROCESS_LOCATION, - APPLICATION_ROOT_DIR . '/vendor/spryker/sales-payment/config/Zed/Oms', # this line must be added if your use unmodified ForeignPaymentStateMachine01.xml -]; -$config[OmsConstants::ACTIVE_PROCESSES] = [ - //... - 'ForeignPaymentStateMachine01', # this line must be added or add your modified version of this OMS -]; -$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ - //... - PaymentConfig::PAYMENT_FOREIGN_PROVIDER => 'ForeignPaymentStateMachine01', # this line must be added or add your modified version of this OMS -]; - -$config[MessageBrokerConstants::MESSAGE_TO_CHANNEL_MAP] = [ - //... - AddPaymentMethodTransfer::class => 'payment-method-commands', - UpdatePaymentMethodTransfer::class => 'payment-method-commands', - DeletePaymentMethodTransfer::class => 'payment-method-commands', - CancelPaymentTransfer::class => 'payment-commands', - CapturePaymentTransfer::class => 'payment-commands', - RefundPaymentTransfer::class => 'payment-commands', - PaymentAuthorizedTransfer::class => 'payment-events', - PaymentAuthorizationFailedTransfer::class => 'payment-events', - PaymentCapturedTransfer::class => 'payment-events', - PaymentCaptureFailedTransfer::class => 'payment-events', - PaymentRefundedTransfer::class => 'payment-events', - PaymentRefundFailedTransfer::class => 'payment-events', - PaymentCanceledTransfer::class => 'payment-events', - PaymentCancellationFailedTransfer::class => 'payment-events', - PaymentCreatedTransfer::class => 'payment-events', - PaymentUpdatedTransfer::class => 'payment-events', - PaymentOverpaidTransfer::class => 'payment-events', - PaymentUnderpaidTransfer::class => 'payment-events', -]; - -$config[MessageBrokerConstants::CHANNEL_TO_RECEIVER_TRANSPORT_MAP] = [ - //... - 'payment-events' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, - 'payment-method-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, -]; - -$config[MessageBrokerConstants::CHANNEL_TO_SENDER_TRANSPORT_MAP] = [ - //... - 'payment-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, -]; - -// ---------------------------------------------------------------------------- -// ------------------------------ OAUTH --------------------------------------- -// ---------------------------------------------------------------------------- -//... -$config[AppCatalogGuiConstants::OAUTH_PROVIDER_NAME] - = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_ACP] - = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_MESSAGE_BROKER] - = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_PAYMENT_AUTHORIZE] - = OauthAuth0Config::PROVIDER_NAME; -$config[OauthClientConstants::OAUTH_GRANT_TYPE_FOR_PAYMENT_AUTHORIZE] = OauthAuth0Config::GRANT_TYPE_CLIENT_CREDENTIALS; -$config[OauthClientConstants::OAUTH_OPTION_AUDIENCE_FOR_ACP] - = $config[TaxAppConstants::OAUTH_OPTION_AUDIENCE] - = $config[OauthClientConstants::OAUTH_OPTION_AUDIENCE_FOR_PAYMENT_AUTHORIZE] = 'aop-app'; -``` - -
      - -2. Configure dependencies in `MessageBroker`: - -
      - src/Pyz/Zed/MessageBroker/MessageBrokerDependencyProvider.php - -```php -namespace Pyz\Zed\MessageBroker; - -use Spryker\Zed\MessageBroker\MessageBrokerDependencyProvider as SprykerMessageBrokerDependencyProvider; -use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentMethodMessageHandlerPlugin; -use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin; -use Spryker\Zed\SalesPaymentDetail\Communication\Plugin\MessageBroker\PaymentCreatedMessageHandlerPlugin; -use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\CorrelationIdMessageAttributeProviderPlugin; -use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TenantActorMessageAttributeProviderPlugin; -use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TimestampMessageAttributeProviderPlugin; -use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TransactionIdMessageAttributeProviderPlugin; -use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\ValidationMiddlewarePlugin; -use Spryker\Zed\OauthClient\Communication\Plugin\MessageBroker\AccessTokenMessageAttributeProviderPlugin; -use Spryker\Zed\Session\Communication\Plugin\MessageBroker\SessionTrackingIdMessageAttributeProviderPlugin; -use Spryker\Zed\Store\Communication\Plugin\MessageBroker\CurrentStoreReferenceMessageAttributeProviderPlugin; - -class MessageBrokerDependencyProvider extends SprykerMessageBrokerDependencyProvider -{ - /** - * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageHandlerPluginInterface> - */ - public function getMessageHandlerPlugins(): array - { - return [ - //... - new PaymentOperationsMessageHandlerPlugin(); - new PaymentMethodMessageHandlerPlugin(), - new PaymentCreatedMessageHandlerPlugin(), // [Optional] This plugin is handling the `PaymentCreated`/`PaymentUpdated` messages sent from Payone ACP app. - ]; - } - - /** - * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageAttributeProviderPluginInterface> - */ - public function getMessageAttributeProviderPlugins(): array - { - return [ - new CorrelationIdMessageAttributeProviderPlugin(), - new TimestampMessageAttributeProviderPlugin(), - new AccessTokenMessageAttributeProviderPlugin(), - new TransactionIdMessageAttributeProviderPlugin(), - new SessionTrackingIdMessageAttributeProviderPlugin(), - new TenantActorMessageAttributeProviderPlugin(), - new CurrentStoreReferenceMessageAttributeProviderPlugin(), - ]; - } - - - /** - * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MiddlewarePluginInterface> - */ - public function getMiddlewarePlugins(): array - { - return [ - new ValidationMiddlewarePlugin(), - ]; - } -} -``` - -
      - -3. Configure channels in the `MessageBroker` configuration: - -**src/Pyz/Zed/MessageBroker/MessageBrokerConfig.php** - -```php -namespace Pyz\Zed\MessageBroker; - -use Spryker\Zed\MessageBroker\MessageBrokerConfig as SprykerMessageBrokerConfig; - -class MessageBrokerConfig extends SprykerMessageBrokerConfig -{ - /** - * @return array - */ - public function getDefaultWorkerChannels(): array - { - return [ - //... - 'payment-events', - 'payment-method-commands', - ]; - } - - //... -} -``` - -4. Configure the `Payment` module: - -**src/Pyz/Zed/Payment/PaymentConfig.php** - -```php -namespace Pyz\Zed\Payment; - -use Generated\Shared\Transfer\ExpenseTransfer; -use Generated\Shared\Transfer\GiftCardTransfer; -use Generated\Shared\Transfer\ItemTransfer; -use Generated\Shared\Transfer\QuoteTransfer; -use Generated\Shared\Transfer\TaxTotalTransfer; -use Generated\Shared\Transfer\TotalsTransfer; -use Spryker\Zed\Payment\PaymentConfig as SprykerPaymentConfig; - -class PaymentConfig extends SprykerPaymentConfig -{ - public function getQuoteFieldsForForeignPayment(): array - { - return array_merge_recursive(parent::getQuoteFieldsForForeignPayment(), [ - QuoteTransfer::TOTALS => [ - TotalsTransfer::DISCOUNT_TOTAL => 'discountTotal', - TotalsTransfer::TAX_TOTAL => [ - TaxTotalTransfer::AMOUNT => 'taxTotal', - ], - ], - QuoteTransfer::ITEMS => [ - ItemTransfer::TAX_RATE => 'taxRate', - ], - QuoteTransfer::EXPENSES => [ - ExpenseTransfer::TAX_RATE => 'taxRate', - ], - QuoteTransfer::GIFT_CARDS => [ - GiftCardTransfer::ACTUAL_VALUE => 'actualValue', - ], - ]); - } -} -``` - -5. Configure plugins in `Checkout`: - -**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** - -```php -namespace Pyz\Zed\Checkout; - -use Spryker\Zed\Checkout\CheckoutDependencyProvider as SprykerCheckoutDependencyProvider; -use Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentAuthorizationCheckoutPostSavePlugin; - -class CheckoutDependencyProvider extends SprykerCheckoutDependencyProvider -{ - /** - * @param \Spryker\Zed\Kernel\Container $container - * - * @return array<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> - */ - protected function getCheckoutPostHooks(Container $container): array - { - return [ - //... - new PaymentAuthorizationCheckoutPostSavePlugin(), - ]; - } -} -``` - -6. Configure plugins in `CheckoutPage`: - -**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php** - -```php -namespace Pyz\Yves\CheckoutPage; - -use SprykerShop\Yves\CheckoutPage\CheckoutPageDependencyProvider as SprykerShopCheckoutPageDependencyProvider; -use SprykerShop\Yves\PaymentPage\Plugin\PaymentPage\PaymentForeignPaymentCollectionExtenderPlugin; - -class CheckoutPageDependencyProvider extends SprykerShopCheckoutPageDependencyProvider -{ - /** - * @return array<\SprykerShop\Yves\CheckoutPageExtension\Dependency\Plugin\PaymentCollectionExtenderPluginInterface> - */ - protected function getPaymentCollectionExtenderPlugins(): array - { - return [ - //... - new PaymentForeignPaymentCollectionExtenderPlugin(), - ]; - } -} -``` - -7. Configure plugins in `Router`: - -**src/Pyz/Yves/Router/RouterDependencyProvider.php** - -```php -namespace Pyz\Yves\Router; - -use Spryker\Yves\Router\RouterDependencyProvider as SprykerRouterDependencyProvider; -use SprykerShop\Yves\PaymentPage\Plugin\Router\PaymentPageRouteProviderPlugin; - -class RouterDependencyProvider extends SprykerRouterDependencyProvider -{ - /** - * @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface> - */ - protected function getRouteProvider(): array - { - $routeProviders = [ - //... - new PaymentPageRouteProviderPlugin(), - ]; - } -} -``` - -8. Configure plugins in `Oms`: - -**\Pyz\Zed\Oms\OmsDependencyProvider** - -```php -use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCancelPaymentMessageCommandPlugin; -use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCapturePaymentMessageCommandPlugin; -use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendRefundPaymentMessageCommandPlugin; -use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\RefundCommandPlugin; - - -protected function extendCommandPlugins(Container $container): Container -{ - $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { - //... - // ----- Payone commands ----- - $commandCollection->add(new SendCapturePaymentMessageCommandPlugin(), 'Payment/Capture'); - $commandCollection->add(new SendRefundPaymentMessageCommandPlugin(), 'Payment/Refund'); - $commandCollection->add(new RefundCommandPlugin(), 'Payment/Refund/Confirm'); - $commandCollection->add(new SendCancelPaymentMessageCommandPlugin(), 'Payment/Cancel'); - }); -} -``` - -9. In `src/Pyz/Zed/KernelApp/KernelAppDependencyProvider.php`, add or update the following plugins: - - -```php -// ... - -use Spryker\Zed\OauthClient\Communication\Plugin\KernelApp\OAuthRequestExpanderPlugin; - - // ... - - /** - * @return array<\Spryker\Shared\KernelAppExtension\RequestExpanderPluginInterface> - */ - public function getRequestExpanderPlugins(): array - { - return [ - new OAuthRequestExpanderPlugin(), - ]; - } - -``` - -10. [Integrate Payone into OMS](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html#configuring-oms-for-your-project). - -### Introduce template changes in `CheckoutPage` - -If you rewrote `@CheckoutPage/views/payment/payment.twig` on the project level, do the following: - -1. Make sure that the form molecule uses the following code for the payment selection choices: - -```twig -{% raw %} -{% for name, choices in data.form.paymentSelection.vars.choices %} - ... - {% embed molecule('form') with { - data: { - form: data.form[data.form.paymentSelection[key].vars.name], - ... - } - {% endembed %} -{% endfor %} -{% endraw %} -``` - -2. Payment provider names now have glossary keys instead of a name itself. To accommodate this change, configure names to be translated according to your glossary: - -```twig -{% raw %} -{% for name, choices in data.form.paymentSelection.vars.choices %} - ... -
      {{ name | trans }}
      -{% endfor %} -{% endraw %} -``` - -3. Optional: Add the glossary keys for all the new external payment providers and methods to your glossary data import file. Example: - -```csv -... -Payone,Payone Payments,en_US -Credit Card,Credit Card (Payone),en_US -``` - -4. Import the glossary: - -```bash -console data:import glossary -``` - -## Optional: Show payment details in the Back Office Order Details page - - -1. Install the `spryker/sales-payment-detail: ^1.2.0` module. -2. [Retrieve and use payment details from third-party PSPs](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/retrieve-and-use-payment-details-from-third-party-psps.html). - - -## Next steps - -[Configure the Payone app](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.html) for your store. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md deleted file mode 100644 index b7768ef1236..00000000000 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md +++ /dev/null @@ -1,483 +0,0 @@ ---- -title: Integrate PayOne -description: Integrate Payone into the Spryker Commerce OS by following the instructions from this article. -last_updated: Jun 16, 2021 -template: concept-topic-template -originalLink: https://documentation.spryker.com/2021080/docs/payone-integration-with-project-scos -originalArticleId: a86017aa-d5ce-44cf-b568-6cda73261766 -redirect_from: - - /docs/scos/user/technology-partners/202311.0/payment-partners/bs-payone/scos-integration/payone-integration-into-the-scos-project.html - - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/payone/manual-integration/integrate-payone.html ---- - -{% info_block errorBox %} - -PayOne is not compatible with gift cards. We will update this document once the issue is resolved. - -{% endinfo_block %} - -**Objectives:** -- Place order with PayPal express checkout. -- Be redirected to summary page of standard checkout. -- Have a shipping method selector on summary page. - -## Frontend Update - -To make JavaScript and CSS styles enabled in the Suite, update: -`/tsconfig.json` in section "include": - -```php -./vendor/spryker-eco/**/*", -``` - -Update `/frontend/settings.js`: - -add entry to 'paths': - -```php -// eco folders -eco: { - // all modules - modules: './vendor/spryker-eco' -}, -``` - -add one more directory to `module.exports.find.componentEntryPoints.dirs`: - -```php -path.join(context, paths.eco.modules) -``` - -Run `npm run yves` after applying these changes. -Because of the pending update to Suite, you also have to apply Checkout template `.../src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig` update: - -```xml -{% raw %}{%{% endraw %} extends template('page-layout-checkout', 'CheckoutPage') {% raw %}%}{% endraw %} - -{% raw %}{%{% endraw %} define data = { - backUrl: _view.previousStepUrl, - forms: { - payment: _view.paymentForm - }, - title: 'checkout.step.payment.title' | trans -} {% raw %}%}{% endraw %} - -{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} embed molecule('form') with { - class: 'box', - data: { - form: data.forms.payment, - options: { - attr: { - id: 'payment-form' - } - }, - submit: { - enable: true, - text: 'checkout.step.summary' | trans - }, - cancel: { - enable: true, - url: data.backUrl, - text: 'general.back.button' | trans - } - } - } only {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} block fieldset {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} for name, choices in data.form.paymentSelection.vars.choices {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} set paymentProviderIndex = loop.index0 {% raw %}%}{% endraw %} -
      {% raw %}{{{% endraw %} ('checkout.payment.provider.' ~ name) | trans {% raw %}}}{% endraw %}
      -
        - {% raw %}{%{% endraw %} for key, choice in choices {% raw %}%}{% endraw %} -
      • - {% raw %}{%{% endraw %} embed molecule('form') with { - data: { - form: data.form[data.form.paymentSelection[key].vars.value], - enableStart: false, - enableEnd: false - }, - embed: { - index: loop.index ~ '-' ~ paymentProviderIndex, - toggler: data.form.paymentSelection[key], - } - } only {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} block fieldset {% raw %}%}{% endraw %} - {% raw %}{{{% endraw %} form_row(embed.toggler, { - required: false, - component: molecule('toggler-radio'), - attributes: { - 'target-selector': '.js-payment-method-' ~ embed.index, - 'class-to-toggle': 'is-hidden' - } - }) {% raw %}}}{% endraw %} - - {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} -
      • - {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} -
      - {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} -{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} -``` - -Run `console cache:empty` afterwards to make this template used during rendering. - -## Backend Update - -First of all we need to provide a URL to Payone module, which will be used to redirect user when the quote is filled with data obtained from PayPal. - To achieve this, make the following steps: - -1. Add custom controller action to `src/Pyz/Yves/Checkout/Controller/CheckoutController.php`: - -```php -/** -* @return \Symfony\Component\HttpFoundation\RedirectResponse -*/ -public function paypalExpressCheckoutEntryPointAction() -{ -$this->getFactory() -->createExpressCheckoutHandler() -->fulfillPostConditionsUntilSummaryStep(); -return $this->redirectResponseInternal(CheckoutPageControllerProvider::CHECKOUT_SUMMARY); -} -``` - -2. Register a new controller action in controller provider: - -```php -... -const CHECKOUT_PAYPAL_EXPRESS_CHECKOUT_ENTRY_POINT = 'checkout-paypal-express-checkout-entry-point'; -... -protected function defineControllers(Application $app) -{ -... -$this->createController('/{checkout}/paypal-express-checkout-entry-point', self::CHECKOUT_PAYPAL_EXPRESS_CHECKOUT_ENTRY_POINT, 'Checkout', 'Checkout', 'paypalExpressCheckoutEntryPoint') -->assert('checkout', $allowedLocalesPattern . 'checkout|checkout') -->value('checkout', 'checkout') -->method('GET'); -... -} -``` - -3. Create `ExpressCheckoutHandler` class `src/Pyz/Yves/CheckoutPage/Handler/ExpressCheckoutHandler.php` with corresponding interface: - -```php -namespace Pyz\Yves\CheckoutPage\Handler; -use Generated\Shared\Transfer\ExpenseTransfer; -use Spryker\Client\Cart\CartClientInterface; -use Spryker\Shared\Shipment\ShipmentConstants; -class ExpressCheckoutHandler implements ExpressCheckoutHandlerInterface -{ -/** -* @var \Spryker\Client\Cart\CartClientInterface -*/ -protected $cartClient; -/** -* @param \Spryker\Client\Cart\CartClientInterface $cartClient -*/ -public function __construct(CartClientInterface $cartClient) -{ -$this->cartClient = $cartClient; -} -/** -* @return void -*/ -public function fulfillPostConditionsUntilSummaryStep() -{ -$quoteTransfer = $this->cartClient->getQuote(); -$quoteTransfer->addExpense( -(new ExpenseTransfer())->setType(ShipmentConstants::SHIPMENT_EXPENSE_TYPE) -); -} -} -``` - -4. Add `ExpressCheckoutHandler` related method in `src/Pyz/Yves/CheckoutPage/CheckoutPageFactory.php`: - -```php -/** -* @return \Pyz\Yves\CheckoutPage\Handler\ExpressCheckoutHandler -*/ -public function createExpressCheckoutHandler() -{ -return new ExpressCheckoutHandler( -$this->getCartClient() -); -} -``` - -5. Extend `ShipmentForm` class to override a property_path option (create `src/Pyz/Yves/Shipment/Form/ShipmentSubForm.php`): - -```php -namespace Pyz\Yves\Shipment\Form; -class ShipmentSubForm extends ShipmentForm -{ -/** -* @const string -*/ -const SHIPMENT_SELECTION_PROPERTY_PATH = self::SHIPMENT_SELECTION; -} -``` - -6. Adjust summary form by adding a shipment subform in `src/Pyz/Yves/CheckoutPage/Form/Steps/SummaryForm.php`: - -```php -class SummaryForm extends AbstractType -{ -/** -* Builds the form. -* -* This method is called for each type in the hierarchy starting from the -* top most type. Type extensions can further modify the form. -* -* @see FormTypeExtensionInterface::buildForm() -* -* @param \Symfony\Component\Form\FormBuilderInterface $builder The form builder -* @param array $options The options -* -* @return void -*/ -public function buildForm(FormBuilderInterface $builder, array $options) -{ -$builder->add( -'shipmentForm', -ShipmentSubForm::class, -array_merge( -$options, -[ -'data_class' => ShipmentTransfer::class, -'property_path' => 'shipment', -] -) -); -} -/** -* @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver -* -* @return void -*/ -public function configureOptions(OptionsResolver $resolver) -{ -$resolver->setRequired('shipmentMethods'); -$resolver->setDefaults([ -'data_class' => QuoteTransfer::class, -]); -} -/** -* Returns the name of this type. -* -* @return string The name of this type -*/ -public function getName() -{ -return 'summaryForm'; -} -} -``` - -7. Create shipment subform template for summary page in `src/Pyz/Yves/CheckoutPage/Theme/default/checkout/partials/shipment.twig`: - -```php - -
      - - {% raw %}{%{% endraw %} set shipmentForm = summaryForm.shipmentForm {% raw %}%}{% endraw %} - -
      -
        - - {% raw %}{%{% endraw %} for name, choices in shipmentForm.idShipmentMethod.vars.choices {% raw %}%}{% endraw %} - -

        {% raw %}{{{% endraw %} name {% raw %}}}{% endraw %}

        - - {% raw %}{%{% endraw %} for key, choice in choices {% raw %}%}{% endraw %} -
      • - -
      • - {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} - {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} -
      -
      -
      -``` - -8. Update summary twig template in `src/Pyz/Yves/CheckoutPage/Theme/default/checkout/summary.twig`. -Move `"form_start"` expression to the top of a content section and `"form_end"` to the end: - -```php -... -{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} -{% raw %}{{{% endraw %} form_start(summaryForm, {'attr': {'class': 'row'{% raw %}}}{% endraw %}) {% raw %}}}{% endraw %} -... -... -... -{% raw %}{{{% endraw %} form_end(summaryForm) {% raw %}}}{% endraw %} -{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} -``` - -9. Remove `{% raw %}{%{% endraw %} include '@checkout/checkout/partials/voucher-form.twig' {% raw %}%}{% endraw %}` include from summary template. Include `checkout/partials/shipment.twig` in your summary template: - -```php - ... -{% raw %}{{{% endraw %} 'checkout.step.summary.shipping' | trans {% raw %}}}{% endraw %} - {% raw %}{%{% endraw %} include '@checkout/checkout/partials/shipment.twig' {% raw %}%}{% endraw %} - ... -``` - -10. Add shipment form data provider and remove voucher form from summary form collection(It is just an example, if you need voucher form, you need to adjust summary page on your own). In `src/Pyz/Yves/CheckoutPage/Form/FormFactory.php`: - -```php -/** -* @param \Generated\Shared\Transfer\QuoteTransfer -* -* @return \Spryker\Yves\StepEngine\Form\FormCollectionHandlerInterface -*/ -public function createSummaryFormCollection() -{ -return $this->createFormCollection($this->createSummaryFormTypes(), $this->getShipmentFormDataProviderPlugin()); -} - -.... - - -/** -* @return \Symfony\Component\Form\FormTypeInterface[] -*/ -protected function createSummaryFormTypes() -{ -return [ -$this->createSummaryForm(), -//$this->createVoucherFormType(), -]; -} -``` - -11. Handle shipment form data, when summary form is submitted. Inject two dependencies into `src/Pyz/Yves/CheckoutPage/Process/Steps/SummaryStep.php`: - -```php -/** -* @var \Spryker\Client\Calculation\CalculationClientInterface -*/ -protected $calculationClient; -/** -* @var \Spryker\Yves\StepEngine\Dependency\Plugin\Handler\StepHandlerPluginCollection -*/ -protected $shipmentPlugins; -/** -* @param \Spryker\Yves\ProductBundle\Grouper\ProductBundleGrouperInterface $productBundleGrouper -* @param \Spryker\Client\Cart\CartClientInterface $cartClient -* @param \Spryker\Client\Calculation\CalculationClientInterface $calculationClient -* @param \Spryker\Client\Calculation\CalculationClientInterface $shipmentPlugins -* @param string $stepRoute -* @param string $escapeRoute -*/ -public function __construct( -ProductBundleGrouperInterface $productBundleGrouper, -CartClientInterface $cartClient, -CalculationClientInterface $calculationClient, -StepHandlerPluginCollection $shipmentPlugins, -$stepRoute, -$escapeRoute -) { -parent::__construct($stepRoute, $escapeRoute); -$this->productBundleGrouper = $productBundleGrouper; -$this->cartClient = $cartClient; -$this->calculationClient = $calculationClient; -$this->shipmentPlugins = $shipmentPlugins; -} -``` - -12. Extend `execute` method: - -```php -/** -* @param \Symfony\Component\HttpFoundation\Request $request -* @param \Spryker\Shared\Kernel\Transfer\AbstractTransfer|\Generated\Shared\Transfer\QuoteTransfer $quoteTransfer -* -* @return \Generated\Shared\Transfer\QuoteTransfer -*/ -public function execute(Request $request, AbstractTransfer $quoteTransfer) -{ -$shipmentHandler = $this->shipmentPlugins->get(CheckoutPageDependencyProvider::PLUGIN_SHIPMENT_STEP_HANDLER); -$shipmentHandler->addToDataClass($request, $quoteTransfer); -$this->calculationClient->recalculate($quoteTransfer); -$this->markCheckoutConfirmed($request, $quoteTransfer); -return $quoteTransfer; -} -``` - -13. Add the Payone checkout plugins to `Pyz\Zed\Checkout\CheckoutDependencyProvider`: - -```php - + */ + protected function getCheckoutSummaryStepPreConditionPlugins(): array + { + return [ + new PaymentAppCancelOrderOnSummaryPageAfterRedirectFromHostedPaymentPagePlugin(), + ]; + } +} +``` + +2. Update the OMS state configuration by adding the `exclude from customer` flag to the `payment cancellation pending` state: + + +**SalesPayment/config/Zed/Oms/Subprocess/PaymentCancel01.xml** + +```xml + + exclude from customer + +``` + +The `exclude from customer` flag is used to prevent cancelled payment orders from appearing in registered customers' order history. For more information about the flag, see [Order Process Modelling via State Machines](https://docs.spryker.com/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html#state-machine-module). + +## Testing + +Test the implementation by executing the following tests. + +### Basic flow test + +1. Add products to cart +2. Proceed to checkout +3. Reach the payment step and get redirected to hosted payment page +4. Use the browser back button + +Make sure the following applies: +- The original order has been cancelled +- You can place a new order with the same items + +### Stock verification test + +1. Add the last available item of a product to cart +2. Proceed to checkout +3. Reach the payment step and get redirected to hosted payment page +4. Use the browser back button + +Make sure the following applies: +- The item becomes available +- You can place a new order with the same item + +### Order status test + +1. Log in as a customer +2. Add products to cart +3. Proceed to checkout +4. Reach the payment step and get redirected to hosted payment page +5. Use the browser back button + +Make sure the following applies: +- In the Back Office, order status changes to **payment cancellation pending** +- Order is not displayed in customer account + +## Troubleshooting + +Solutions to common issues. + + +### Order still visible in customer account + +- Verify that the `exclude from customer` flag is properly set in the state machine configuration +- Check if the order state transition to `payment cancellation pending` is executed successfully +- Verify that the state is properly configured in the OMS + +### Stock issues + +- Verify that the order cancellation workflow works properly +- Verify stock update triggers + diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/debug-payment-integrations-locally.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/debug-payment-integrations-locally.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/debug-payment-integrations-locally.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/debug-payment-integrations-locally.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/define-return-urls-for-payments.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/define-return-urls-for-payments.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/define-return-urls-for-payments.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/define-return-urls-for-payments.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/hydrate-payment-methods-for-an-order.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/hydrate-payment-methods-for-an-order.md new file mode 100644 index 00000000000..da69f49e98b --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/hydrate-payment-methods-for-an-order.md @@ -0,0 +1,71 @@ +--- +title: Hydrate payment methods for an order +description: This doc describes how to use PaymentDependencyProvider::PAYMENT_HYDRATION_PLUGINS and how to add other payment methods into the order. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/ht-hydrate-payment-methods-for-order +originalArticleId: 4e35e87f-d4a5-4a06-8cf5-d830eec89b5d +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/howto-hydrate-payment-methods-for-an-order.html + - /docs/pbc/all/payment-service-provider/202311.0/hydrate-payment-methods-for-an-order.html + - /docs/pbc/all/payment-service-provider/202311.0/hydrate-payment-methods-for-an-order.html +--- + +{% info_block warningBox "Warning" %} + +`PaymentOrderHydratePlugin` and `PaymentDependencyProvider::PAYMENT_HYDRATION_PLUGINS` are deprecated, the new plugin is `\Spryker\Zed\SalesPayment\Communication\Plugin\Sales\SalesPaymentOrderExpanderPlugin`, which automatically adds all payments from `spy_sales_payment` into `OrderTransfer`. + +{% endinfo_block %} + +## Multiple payments + +Spryker Commerce OS lets you have multiple payments per checkout. Payments are stored in `QuoteTransfer::payments` and persisted when `CheckoutClient::placeOrder` is called in the last checkout step. + +Each payment method must provide the payment amount it shares from the order's grand total. This amount is stored in the `PaymentTransfer::amount` field. When an order is placed in the last step, all payments are persisted in the `spy_sales_payment` table. + +## Payment hydration for order + +The [Sales](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/domain-model-and-relationships/sales-module-reference-information.html) module provides plugins to hydrate `OrderTransfer`, which is called when `SalesFacade::getOrderByIdSalesOrder` is invoked. + +This plugin invokes the payment hydration plugin stack, which must be injected to `\Spryker\Zed\Payment\PaymentDependencyProvider::PAYMENT_HYDRATION_PLUGINS`, for example: + +```php +injectPaymentPlugin($container); + return $container; + } + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function injectPaymentPlugin(Container $container) + { + $container->extend(PaymentDependencyProvider::PAYMENT_HYDRATION_PLUGINS, function (PaymentHydratorPluginCollectionInterface $pluginCollection) { + $pluginCollection->add(‘PaymentProvider’, new PaymentProviderSalesOrderPaymentHydrationPlugin()) // this plugin must implement \Spryker\Zed\Payment\Dependency\Plugin\Sales\PaymentHydratorPluginInterface + return $pluginCollection; + }); + return $container; + } +} +?> +``` + +The plugin receives `OrderTransfer` and `PaymentTransfer`, which are the payment you need to hydrate with additional data. + +Plugins must populate the `PaymentTransfer` object and return it back. After this step, you can get payment information when calling `SalesFacade::getOrderByIdSalesOrder`. We also included a simple Zed UI twig block for payments to display more information about payment methods used on the order details page. + +To enable it, follow these steps: + +1. Go to `\Pyz\Zed\Sales\SalesConfig::getSalesDetailExternalBlocksUrls`. +2. Add`‘payments’ => ‘/payment/sales/list’`, to the `$projectExternalBlocks` array. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md index adfc2a1828b..10421820d18 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-payment-method-storecsv originalArticleId: c862d612-e933-43dd-afce-27dbc5a0ba37 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method-store.csv.html - /2021080/docs/file-details-payment-method-storecsv - /2021080/docs/en/file-details-payment-method-storecsv - /docs/file-details-payment-method-storecsv diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md similarity index 95% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md index b344f749a18..23c5e5b66fa 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-payment-methodcsv originalArticleId: 77b583a2-c11e-433a-8883-4fa5a4fb2815 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/import-file-details-payment-method.csv.html - /2021080/docs/file-details-payment-methodcsv - /2021080/docs/en/file-details-payment-methodcsv - /docs/file-details-payment-methodcsv diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/payment-service-provider-data-import-and-export.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/payment-service-provider-data-import-and-export.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/import-and-export-data/payment-service-provider-data-import-and-export.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/import-and-export-data/payment-service-provider-data-import-and-export.md diff --git a/docs/pbc/all/payment-service-provider/202410.0/base-shop/install-and-upgrade/install-the-payments-feature.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/install-the-payments-feature.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202410.0/base-shop/install-and-upgrade/install-the-payments-feature.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/install-the-payments-feature.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md new file mode 100644 index 00000000000..458d1b0c28c --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/install-the-payments-glue-api.md @@ -0,0 +1,25 @@ +--- +title: Install the Payments Glue API +description: Learn how to install the payments glue api in to your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-payments-feature-integration +originalArticleId: 37aaeca3-9205-4ca3-8332-6a1ab7b31c80 +redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/install-and-upgrade/install-the-payments-glue-api.html + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-payments-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-payments-feature-integration.html + - /docs/pbc/all/payment-service-provider/202311.0/install-and-upgrade/install-the-payments-glue-api.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-payments-feature-integration.html +related: + - title: Install the Payments feature + link: docs/pbc/all/payment-service-provider/page.version/base-shop/install-and-upgrade/install-the-payments-feature.html + - title: Payments feature walkthrough + link: docs/pbc/all/payment-service-provider/page.version/base-shop/payments-feature-overview.html + - title: Check out purchases + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html + - title: Updating payment data + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-payments-glue-api.md %} diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/upgrade-the-payment-module.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/upgrade-the-payment-module.md new file mode 100644 index 00000000000..6cfa1d7f5ee --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/install-and-upgrade/upgrade-the-payment-module.md @@ -0,0 +1,20 @@ +--- +title: Upgrade the Payment module +description: Use the guide to migrate to a newer version of the Spryker Payment module in your Spryker Cloud Commerce OS project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-payment +originalArticleId: fe27c0bc-2f52-42f0-8dbf-5a7ba050bc34 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-payment.html + - /docs/scos/dev/module-migration-guides/migration-guide-payment.html + - /docs/pbc/all/payment-service-provider/202311.0/install-and-upgrade/upgrade-the-payment-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-payment-module.md %} diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/interact-with-third-party-payment-providers-using-glue-api.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/interact-with-third-party-payment-providers-using-glue-api.md new file mode 100644 index 00000000000..7590d309233 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/interact-with-third-party-payment-providers-using-glue-api.md @@ -0,0 +1,193 @@ +--- +title: Interact with third party payment providers using Glue API +description: This document shows how to interact with third party payment providers through Glue API +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/t-interacting-with-third-party-payment-providers-via-glue-api +originalArticleId: c9d486b4-ac75-46f5-917e-f3935043f018 +redirect_from: + - /docs/scos/dev/tutorials/201907.0/advanced/glue-api/tutorial-interacting-with-third-party-payment-providers-via-glue-api.html + - /docs/scos/dev/tutorials-and-howtos/advanced-tutorials/glue-api/tutorial-interacting-with-third-party-payment-providers-via-glue-api.html + - /docs/pbc/all/payment-service-provider/202311.0/interact-with-third-party-payment-providers-using-glue-api.html + - /docs/pbc/all/payment-service-provider/202311.0/interact-with-third-party-payment-providers-using-glue-api.html + - /docs/scos/dev/glue-api-guides/202204.0/glue-api-tutorials/interact-with-third-party-payment-providers-using-glue-api.html +--- + +This tutorial shows how to invoke third parties in the API payment process. + +The checkout process of Spryker Glue API can be leveraged to involve third parties in the process of order confirmation. This can be required, for example, when the method of payment selected by the user requires additional steps to complete the purchase. These can include but are not limited to card validation or processing a bank transfer. + +{% info_block infoBox %} + +For details, see [Checking out purchases and getting checkout data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-check-out-purchases.html). + +{% endinfo_block %} + +To invoke third parties in the API payment process, proceed with the steps in the following sections: + +## 1. Create a new module + +To implement third-party interactions, first create a new module or extend an existing one. Let us create one on the Project level. The module needs to interact with two layers of Spryker Commerce OS: `Glue` (API) and `Zed` (backend). Thus, you need to create the following folders for the `MyModule` module: + +- `src/Pyz/Glue/MyModule` +- `src/Pyz/Zed/MyModule` + +The module needs to implement two plugins: + +- A plugin that maps the response of the `/checkout` API endpoint and fills it with the necessary attributes. + +{% info_block infoBox %} + +The `redirectUrl` and `isExternalRedirect` attributes are auto-mapped out of the box. If necessary, you can add your own attributes. For example, if a payment system requires a vendor ID for order confirmation, you can create a separate attribute to pass the ID to the API Client. + +{% endinfo_block %} + +- A plugin to process the response of the payment service provider. +The overall interaction diagram between Glue API, the API Client, and the third party is as follows: + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/Advanced/Glue+API/Tutorial+Interacting+with+Third+Party+Payment+Providers+via+Glue+API/multi-step-checkout-glue-infrastructure.png) + +## 2. Implement the Checkout response mapper plugin + +First, implement a plugin that maps the checkout response and fills it with the necessary redirect URL and other attributes that are mapped. To do so, create a plugin file on the `Glue` layer: `src/Pyz/Glue/MyModule/Plugin/CheckoutRestApi/CheckoutResponseMapperPlugin.php`. + +The plugin must implement `CheckoutResponseMapperPluginInterface`. Using the `mapRestCheckoutResponseTransferToRestCheckoutResponseAttributesTransfer` function of the interface, you can set the redirect URL and specify whether it's an internal or external redirect. + +**Sample implementation** + +```php +getCheckoutResponse()->getRedirectUrl(); + + $restCheckoutResponseAttributesTransfer + ->setIsExternalRedirect($restCheckoutResponseTransfer->getCheckoutResponse()->getIsExternalRedirect()) + ->setRedirectUrl($restCheckoutResponseTransfer->getCheckoutResponse()->getRedirectUrl()); + + return $restCheckoutResponseAttributesTransfer; + } +} +``` + +## 3. Implement payload processor plugin + +After a user completes payment verification, the payment service provider submits a payload containing the relevant payment information. The payload is submitted by the API client to the `/order-payments` endpoint. + +To process the data, we need to implement another plugin on the `Zed` layer. The plugin updates the payment information in the database. Create a plugin file as follows: `src/Pyz/Zed/MyModule/Communication/Plugin/OrderPaymentsRestApi/OrderPaymentUpdaterPlugin.php`. + +The plugin must extend the `OrderPaymentUpdaterPluginInterface` and implement the following two functions: + +- `isAppplicable`: This function determines whether a specific payment is processed by the plugin. The function returns true if the payment must be processed; otherwise, it returns false. +- `updateOrderPayment`: This function updates the payment data in the database. + +To help you understand which payments need to be processed, you can use the optional `paymentIdentifier` field in `POST` requests to the `/order-payments` endpoint. To make sure it's always present in a request, you may require the API client to set the field to a specific value to invoke your payment plugin. The value of the field can be retrieved using the `getPaymentIdentifier` helper function. + +{% info_block infoBox %} + +For details, see [Update payment data](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/check-out/glue-api-update-payment-data.html). + +{% endinfo_block %} + +
      Sample implementation + +```php +getPaymentIdentifier()) { + return true; + } + + return false; + } + + /** + * @param \Generated\Shared\Transfer\UpdateOrderPaymentRequestTransfer $updateOrderPaymentRequestTransfer + * + * @return \Generated\Shared\Transfer\UpdateOrderPaymentResponseTransfer + */ + public function updateOrderPayment(UpdateOrderPaymentRequestTransfer $updateOrderPaymentRequestTransfer): UpdateOrderPaymentResponseTransfer + { + $payload = $updateOrderPaymentRequestTransfer->getDataPayload(); + + return (new UpdateOrderPaymentResponseTransfer()) + ->setIsSuccessful(true) + ->setPaymentIdentifier($updateOrderPaymentRequestTransfer->getPaymentIdentifier()) + ->setDataPayload($updateOrderPaymentRequestTransfer->getDataPayload()); + } +} +``` + +
      + +## 4. Wire the plugins + +Wire the plugins so that they can be invoked during checkout. The *Checkout Response Mapper Plugin* needs to be registered in `\Pyz\Glue\CheckoutRestApi\CheckoutRestApiDependencyProvider::getCheckoutResponseMapperPlugins()`: + +```php +... + /** + * @return \Spryker\Glue\CheckoutRestApiExtension\Dependency\Plugin\CheckoutResponseMapperPluginInterface[] + */ + protected function getCheckoutResponseMapperPlugins(): array + { + return [ + ... + new CheckoutResponseMapperPlugin + ]; + } +... +``` + +The *Payment Processor Plugin* is registered in `\Spryker\Zed\OrderPaymentsRestApi\OrderPaymentsRestApiDependencyProvider::getOrderPaymentUpdaterPlugins()` + +```php +... + /** + * @return \Spryker\Zed\OrderPaymentsRestApiExtension\Dependency\Plugin\OrderPaymentUpdaterPluginInterface[] + */ + protected function getOrderPaymentUpdaterPlugins(): array + { + return [ + ... + new OrderPaymentUpdaterPlugin + ]; + } +... +``` + +After wiring the plugins, the response of the `/checkout` endpoint contains a correct redirect URL, and the `/order-payments` endpoint processes payloads received from the payment provider. Try accessing the endpoints to verify that the plugins process the data. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/edit-payment-methods.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/edit-payment-methods.md similarity index 94% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/edit-payment-methods.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/edit-payment-methods.md index c15a25aa85a..fc18943a214 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/edit-payment-methods.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/edit-payment-methods.md @@ -6,12 +6,13 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-payment-methods originalArticleId: d0dc8732-295d-4072-8dc2-63f439feb324 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/edit-payment-methods.html - /docs/scos/user/back-office-user-guides/201811.0/administration/payment-methods/managing-payment-methods.html - /docs/scos/user/back-office-user-guides/201903.0/administration/payment-methods/managing-payment-methods.html - /docs/scos/user/back-office-user-guides/201907.0/administration/payment-methods/managing-payment-methods.html - /docs/scos/user/back-office-user-guides/202204.0/administration/payment-methods/managing-payment-methods.html - /docs/scos/user/back-office-user-guides/202311.0/administration/payment-methods/edit-payment-methods.html - - /docs/pbc/all/payment-service-provider/202311.0/manage-in-the-back-office/edit-payment-methods.html + - /docs/pbc/all/payment-service-provider/202311.0/manage-in-the-back-office/edit-payment-methods.html - /docs/scos/user/back-office-user-guides/202204.0/administration/payment-methods/edit-payment-methods.html related: - title: Payments feature overview diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/manage-payment-methods-in-the-back-office.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/manage-payment-methods-in-the-back-office.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/manage-payment-methods-in-the-back-office.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/manage-payment-methods-in-the-back-office.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/view-payment-methods.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/view-payment-methods.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/view-payment-methods.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/view-payment-methods.md index 70907412206..26e1bc5a4da 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/manage-in-the-back-office/view-payment-methods.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/manage-in-the-back-office/view-payment-methods.md @@ -5,7 +5,7 @@ last_updated: June 2, 2022 template: back-office-user-guide-template redirect_from: - /docs/scos/user/back-office-user-guides/202311.0/administration/payment-methods/view-payment-methods.html - - /docs/pbc/all/payment-service-provider/202311.0/manage-in-the-back-office/view-payment-methods.html + - /docs/pbc/all/payment-service-provider/202311.0/manage-in-the-back-office/view-payment-methods.html - /docs/scos/user/back-office-user-guides/202204.0/administration/payment-methods/view-payment-methods.html related: - title: Payments feature overview diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/payment-method-strategies.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/payment-method-strategies.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/payment-method-strategies.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/payment-method-strategies.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-domain-model-and-relationships.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/payments-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-domain-model-and-relationships.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/payments-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-overview.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/payments-feature-overview.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-overview.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/payments-feature-overview.md index b8d763da9f4..5208671e4fd 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-overview.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/payments-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/payments-feature-overview originalArticleId: db728134-17d6-4023-8d7a-55177ee5af44 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/payments-feature-overview.html - /docs/scos/user/features/202108.0/payments-feature-overview.html - /docs/scos/user/features/202200.0/payments-feature-overview.html - /docs/scos/user/features/202311.0/payments-feature-overview.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/retrieve-and-use-payment-details-from-third-party-psps.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/retrieve-and-use-payment-details-from-third-party-psps.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/retrieve-and-use-payment-details-from-third-party-psps.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/retrieve-and-use-payment-details-from-third-party-psps.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/adyen.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/adyen.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/adyen.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/adyen.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/enable-filtering-of-payment-methods-for-adyen.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/enable-filtering-of-payment-methods-for-adyen.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/enable-filtering-of-payment-methods-for-adyen.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/enable-filtering-of-payment-methods-for-adyen.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/install-and-configure-adyen.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/install-and-configure-adyen.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/install-and-configure-adyen.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/install-and-configure-adyen.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/integrate-adyen-payment-methods.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/integrate-adyen-payment-methods.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/integrate-adyen-payment-methods.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/integrate-adyen-payment-methods.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/integrate-adyen.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/integrate-adyen.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/adyen/integrate-adyen.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/adyen/integrate-adyen.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/afterpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/afterpay.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/afterpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/afterpay.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/install-and-configure-afterpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/install-and-configure-afterpay.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/install-and-configure-afterpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/install-and-configure-afterpay.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/integrate-afterpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/integrate-afterpay.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/afterpay/integrate-afterpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/afterpay/integrate-afterpay.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md index 858f5c79884..ac9bf2be884 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-sandbox-simulations.md @@ -55,7 +55,7 @@ And one setting is spryker related only. It is a level of logging of Handling or $config[AmazonpayConstants::ERROR_REPORT_LEVEL] ``` -The value `ERRORS_ONLY` is recommended for production so that all errors can be investigated and fixed then. +The value `ERRORS_ONLY` is recommended for production so that all errors can be investigated and fixed then. ## Localization diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-state-machine.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-state-machine.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-state-machine.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay-state-machine.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/amazon-pay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/amazon-pay.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/configure-amazon-pay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/configure-amazon-pay.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/configure-amazon-pay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/configure-amazon-pay.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/handling-orders-with-amazon-pay-api.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/handling-orders-with-amazon-pay-api.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/handling-orders-with-amazon-pay-api.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/handling-orders-with-amazon-pay-api.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/obtain-an-amazon-order-reference-and-information-about-shipping-addresses.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/obtain-an-amazon-order-reference-and-information-about-shipping-addresses.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/amazon-pay/obtain-an-amazon-order-reference-and-information-about-shipping-addresses.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/amazon-pay/obtain-an-amazon-order-reference-and-information-about-shipping-addresses.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato-risk-check.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato-risk-check.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato-risk-check.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato-risk-check.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato-store-order.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato-store-order.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato-store-order.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato-store-order.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato.md index c09a829dde7..5f3634531ff 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/arvato.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/arvato.md @@ -23,7 +23,7 @@ related: - [Installing and configuring Arvato](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/arvato/install-and-configure-arvato.html) - [Arvato - Risk Check](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/arvato/arvato-risk-check.html) -- [Arvato - Store Order](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/arvato/arvato-store-order.html) +- [Arvato - Store Order](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/arvato/arvato-store-order.html) --- diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/install-and-configure-arvato.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/install-and-configure-arvato.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/arvato/install-and-configure-arvato.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/arvato/install-and-configure-arvato.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billie.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billie.md new file mode 100644 index 00000000000..74a416fbd80 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billie.md @@ -0,0 +1,48 @@ +--- +title: Billie +description: Provide various payment options from Billie and how they can enhance your Spryker Cloud Commerce OS Project. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/billie +originalArticleId: 5274b1b6-4f70-425b-99a9-d8a266193110 +redirect_from: + - /2021080/docs/billie + - /2021080/docs/en/billie + - /docs/billie + - /docs/en/billie + - /docs/scos/user/technology-partners/202311.0/payment-partners/billie.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/billie.html +--- + +## Partner Information + +[ABOUT BILLIE](https://www.billie.io/) + +Billie is Germany's innovative online-only provider of flexible working capital solutions. Whether it's our award-wining, 100% digital factoring platform or our B2B-PayAfterDelivery solution for online stores: + +Aspiring start-ups, established SMEs and world-leading hidden champions all trust in Billie when it comes to fast, reliable and simple liquidity provision. + +Focus fully on your core business — Billie takes care of your debtor management, provides a white-label dunning & collection process and includes full protection against payment defaults. + +Offer your business customers their preferred payment option, fully integrated into your online store's checkout process: easily integrate our B2B-PayAfterDelivery module and experience dramatically improved conversion rates by allowing your customers to pay by invoice. Experience reliable payouts to your bank account on the next business day. + +YOUR ADVANTAGES: +- Fully automated PayAfterDelivery module for your B2B-eCommerce store +- Credit checks and decisions in real time +- Improved conversion rates during checkout by providing the most preferred B2B-payment method +- Payouts to your bank account on the next working day +- 100% protection against payment defaults for all processed invoices +- Full service coverage of dunning & collection process in your design and wording +- Holistic management of your debtors +- Reduced accounting overhead by automated and secure processing of all incoming cash flows + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md index 3f95e53f32d..bc219e38a47 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/billpay-payment-methods originalArticleId: 139410c0-8709-4f24-8016-b5b8afa7b435 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/billpay/billpay-switching-invoice-payments-to-a-preauthorize-mode.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/billpay/billpay-switching-invoice-payments-to-a-preauthorize-mode.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/billpay/billpay.html diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay.md new file mode 100644 index 00000000000..dac706099dd --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/billpay.md @@ -0,0 +1,62 @@ +--- +title: Billpay +description: Billpay is the provider for the preferred, local payment methods Invoice, Direct Debit and Installments. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/billpay +originalArticleId: 1aba685d-52bb-4060-bed0-62178fa04d71 +redirect_from: + - /docs/scos/user/technology-partners/202311.0/payment-partners/billpay.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/billpay/billpay.html +--- + +## Partner Information + +[ABOUT BILLPAY](https://www.billpay.de/en/) + +BillPay is the DACH market leader for the preferred, local payment methods Invoice, Direct Debit and Installments, making real-time financing decisions with 100% liability shift, so merchants carry zero risk. As only a bank account is required, these payment methods ensure full customer reach. In addition, BillPay's solution is multi-channel so orders can be placed online, through mobile web apps, at the POS or over-the-phone. + + +## Related Developer guides + +- [Billpay - Switching invoice payments to a preauthorize mode](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/billpay/billpay-switch-invoice-payments-to-a-preauthorize-mode.html) +- [Integrating Billpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/billpay/integrate-billpay.html) + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      + + diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/integrate-billpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/integrate-billpay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/integrate-billpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/integrate-billpay.md index 8d19f6d3452..b06ae5abb58 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/integrate-billpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/billpay/integrate-billpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/billpay-integration originalArticleId: 3d4bf922-652c-45c7-b130-951015ff3b65 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/billpay/integrate-billpay.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/billpay/integrating-billpay.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/billpay/integrating-billpay.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/billpay/billpay.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree-performing-requests.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree-performing-requests.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree-performing-requests.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree-performing-requests.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree-request-workflow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree-request-workflow.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree-request-workflow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree-request-workflow.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/braintree.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/braintree.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/install-and-configure-braintree.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/install-and-configure-braintree.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/install-and-configure-braintree.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/install-and-configure-braintree.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/integrate-braintree.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/integrate-braintree.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/braintree/integrate-braintree.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/braintree/integrate-braintree.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop-api-calls.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop-api-calls.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop-api-calls.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop-api-calls.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop-oms-plugins.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop-oms-plugins.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop-oms-plugins.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop-oms-plugins.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/computop.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/install-and-configure-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/install-and-configure-computop.md new file mode 100644 index 00000000000..75512ab4525 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/install-and-configure-computop.md @@ -0,0 +1,200 @@ +--- +title: Installing and configuring Computop +description: Learn how you can install and configure Spryker Computop in to your Spryker Cloud Commerce OS Project. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/computop-installation-and-configuration +originalArticleId: 7d6fd0b4-0e5e-41ac-9788-0361d3252a58 +redirect_from: + - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/installing-and-configuring-computop.html + - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/installing-and-configuring-computop.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/install-and-configure-computop.html + - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/computop/installing-and-configuring-computop.html +--- + +This topic describes how to integrate Computop into a Spryker project by installing and configuring the Computop module. + +The [spryker-eco/computop](https://github.com/spryker-eco/computop) bundle provides integration of the Computop industry partner with Spryker Commerce OS. It requires the [spryker-eco/computopapi](https://github.com/spryker-eco/computop-api) bundle that provides the REST Client for making API calls to the Computop Payment Provider. + +The `SprykerEco.Computop` module includes the integrations: +- Checkout process—payment forms with all the necessary fields that are required to make payment requests, save order information and so on. +- OMS (Order Management System)—state machines, all necessary commands for making modification requests and conditions for changing order statuses accordingly. + + +The `SprykerEco.Computop` module provides the following payment methods: +- [Credit Card](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.html) +- [Direct Debit](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.html) +- [EasyCredit](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.html) +- [iDeal](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.html) +- [Paydirekt](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.html) +- [PayNow](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.html) +- [PayPal](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.html) +- [SofortÜberweisung](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.html) +- PayU CEE Single +- PayPal Express + +## Installation + +Install the Computop module: + +```bash +composer require spryker-eco/computop +``` + +To use PayPal Express, also install the Computop Shipment module: + +```bash +composer require spryker-eco/computop-shipment +``` + +## Configuration + +You can check all the necessary configurations in `vendor/spryker-eco/computop/config/config.dist.php`. + +The following example shows the Computop module configuration: + +
      +config/Shared/config_default.php + +```PHP +// Spryker security configuration +$config[KernelConstants::DOMAIN_WHITELIST] = [ + ... + 'www.computop-paygate.com', // A trusted Computop domain, required for redirects to third-party services. +]; +$config[SessionConstants::YVES_SESSION_COOKIE_SAMESITE] = Cookie::SAMESITE_NONE; // Allows to redirect customers from Computop back to the shop via a `POST` request. (https://developer.computop.com/display/EN/Third-party-cookies+-+Browser+cookies+and+session+handling) + +// Credantials +$config[ComputopApiConstants::MERCHANT_ID] = 'Computop merchant identifier'; +$config[ComputopApiConstants::BLOWFISH_PASSWORD] = 'Password for blowfish hashing'; +$config[ComputopApiConstants::HMAC_PASSWORD] = 'Password for hmac hashing'; +$config[ComputopConstants::IDEAL_ISSUER_ID] = 'IDeal issuer identifier'; +$config[ComputopConstants::PAYDIREKT_SHOP_KEY] = 'Paydirekt shop key'; +$config[ComputopConstants::PAY_PAL_CLIENT_ID] = 'Paypal Client ID'; + +// Init API call endpoints +$config[ComputopConstants::PAY_NOW_INIT_ACTION] = 'https://www.computop-paygate.com/paynow.aspx'; +$config[ComputopConstants::CREDIT_CARD_INIT_ACTION] = 'https://www.computop-paygate.com/payssl.aspx'; +$config[ComputopConstants::PAYPAL_INIT_ACTION] = 'https://www.computop-paygate.com/paypal.aspx'; +$config[ComputopConstants::DIRECT_DEBIT_INIT_ACTION] = 'https://www.computop-paygate.com/paysdd.aspx'; +$config[ComputopConstants::SOFORT_INIT_ACTION] = 'https://www.computop-paygate.com/sofort.aspx'; +$config[ComputopConstants::PAYDIREKT_INIT_ACTION] = 'https://www.computop-paygate.com/paydirekt.aspx'; +$config[ComputopConstants::IDEAL_INIT_ACTION] = 'https://www.computop-paygate.com/ideal.aspx'; +$config[ComputopConstants::EASY_CREDIT_INIT_ACTION] = 'https://www.computop-paygate.com/easyCredit.aspx'; +$config[ComputopConstants::PAYU_CEE_SINGLE_INIT_ACTION] = 'https://www.computop-paygate.com/payu.aspx'; + +// Post order place API calls endpoints +$config[ComputopApiConstants::PAYPAL_EXPRESS_PREPARE_ACTION] = 'https://www.computop-paygate.com/ExternalServices/paypalorders.aspx'; +$config[ComputopApiConstants::PAYPAL_EXPRESS_COMPLETE_ACTION] = 'https://www.computop-paygate.com/paypalComplete.aspx'; +$config[ComputopApiConstants::EASY_CREDIT_STATUS_ACTION] = 'https://www.computop-paygate.com/easyCreditDirect.aspx'; +$config[ComputopApiConstants::EASY_CREDIT_AUTHORIZE_ACTION] = 'https://www.computop-paygate.com/easyCreditDirect.aspx'; +$config[ComputopApiConstants::AUTHORIZE_ACTION] = 'https://www.computop-paygate.com/authorize.aspx'; +$config[ComputopApiConstants::CAPTURE_ACTION] = 'https://www.computop-paygate.com/capture.aspx'; +$config[ComputopApiConstants::REVERSE_ACTION] = 'https://www.computop-paygate.com/reverse.aspx'; +$config[ComputopApiConstants::INQUIRE_ACTION] = 'https://www.computop-paygate.com/inquire.aspx'; +$config[ComputopApiConstants::REFUND_ACTION] = 'https://www.computop-paygate.com/credit.aspx'; + +// Payment method specific configuration +$config[ComputopApiConstants::RESPONSE_MAC_REQUIRED] = [ + ComputopConfig::INIT_METHOD, +]; +$config[ComputopConstants::CREDIT_CARD_TEMPLATE_ENABLED] = false; +$config[ComputopConstants::CREDIT_CARD_TX_TYPE] = ''; +$config[ComputopConstants::PAY_NOW_TX_TYPE] = ''; +$config[ComputopConstants::PAY_PAL_TX_TYPE] = ComputopConfig::TX_TYPE_AUTH; +$config[ComputopConstants::PAY_PAL_EXPRESS_PAYPAL_METHOD] = ''; +$config[ComputopConstants::PAYMENT_METHODS_WITHOUT_ORDER_CALL] = [ + ComputopConfig::PAYMENT_METHOD_SOFORT, + ComputopConfig::PAYMENT_METHOD_PAYDIREKT, + ComputopConfig::PAYMENT_METHOD_IDEAL, + ComputopConfig::PAYMENT_METHOD_CREDIT_CARD, + ComputopConfig::PAYMENT_METHOD_PAY_NOW, + ComputopConfig::PAYMENT_METHOD_PAY_PAL, + ComputopConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS, + ComputopConfig::PAYMENT_METHOD_DIRECT_DEBIT, + ComputopConfig::PAYMENT_METHOD_EASY_CREDIT, + ComputopConfig::PAYMENT_METHOD_PAYU_CEE_SINGLE, +]; +$config[ComputopApiConstants::PAYMENT_METHODS_CAPTURE_TYPES] = [ + ComputopApiConfig::PAYMENT_METHOD_PAYDIREKT => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_CREDIT_CARD => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_PAY_NOW => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_PAY_PAL => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_DIRECT_DEBIT => ComputopApiConfig::CAPTURE_TYPE_MANUAL, + ComputopApiConfig::PAYMENT_METHOD_PAYU_CEE_SINGLE => ComputopApiConfig::CAPTURE_TYPE_MANUAL, +]; + +// CRIF (formerly Deltavista) configuration +$config[ComputopConstants::CRIF_ENABLED] = true; +$config[ComputopApiConstants::CRIF_ACTION] = 'https://www.computop-paygate.com/deltavista.aspx'; +$config[ComputopApiConstants::CRIF_PRODUCT_NAME] = ComputopConfig::CRIF_PRODUCT_NAME_QUICK_CHECK_CONSUMER; +$config[ComputopApiConstants::CRIF_LEGAL_FORM] = ComputopConfig::CRIF_LEGAL_FORM_PERSON; +$config[ComputopConstants::CRIF_GREEN_AVAILABLE_PAYMENT_METHODS] = [ + ComputopConfig::PAYMENT_METHOD_SOFORT, + ComputopConfig::PAYMENT_METHOD_PAYDIREKT, + ComputopConfig::PAYMENT_METHOD_IDEAL, + ComputopConfig::PAYMENT_METHOD_CREDIT_CARD, + ComputopConfig::PAYMENT_METHOD_PAY_NOW, + ComputopConfig::PAYMENT_METHOD_PAY_PAL, + ComputopConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS, + ComputopConfig::PAYMENT_METHOD_DIRECT_DEBIT, + ComputopConfig::PAYMENT_METHOD_EASY_CREDIT, + ComputopConfig::PAYMENT_METHOD_PAYU_CEE_SINGLE, +]; +$config[ComputopConstants::CRIF_YELLOW_AVAILABLE_PAYMENT_METHODS] = [ + ComputopConfig::PAYMENT_METHOD_CREDIT_CARD, + ComputopConfig::PAYMENT_METHOD_PAY_NOW, + ComputopConfig::PAYMENT_METHOD_PAY_PAL, + ComputopConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS, +]; +$config[ComputopConstants::CRIF_RED_AVAILABLE_PAYMENT_METHODS] = [ + ComputopConfig::PAYMENT_METHOD_CREDIT_CARD, + ComputopConfig::PAYMENT_METHOD_EASY_CREDIT, +]; +$config[ComputopShipmentConstants::PAYPAL_EXPRESS_DEFAULT_SHIPMENT_METHOD_KEY] = 'spryker_dummy_shipment-standard'; +``` + +
      + +| CONFIGURATION KEY | TYPE | DESCRIPTION | +| --- | --- | --- | +| `$config[ComputopApiConstants::MERCHANT_ID]` | string | Computop merchant identifier. | +| `$config[ComputopApiConstants::BLOWFISH_PASSWORD]` | string | Password for Blowfish hashing. | +| `$config[ComputopApiConstants::HMAC_PASSWORD]` | string | Password for HMAC hashing. | +| `$config[ComputopConstants::PAYDIREKT_SHOP_KEY]` | string | Shop key for the Paydirect payment method. | +| `$config[ComputopConstants::IDEAL_ISSUER_ID]` | string | Issuer ID for the Ideal payment method. | +| `$config[ComputopConstants::PAY_PAL_CLIENT_ID]` | string | PayPal Client ID for the PayPal Express payment method. | +| `$config[ComputopConstants::PAY_NOW_INIT_ACTION]` | string | `init` API call endpoint for the PayNow payment method. | +| `$config[ComputopConstants::CREDIT_CARD_INIT_ACTION]` |string | `init` API call endpoint for the Credit Card payment method. | +| `$config[ComputopConstants::PAYPAL_INIT_ACTION]` | string | `init` API call endpoint for the PayPal payment method. | +| `$config[ComputopConstants::DIRECT_DEBIT_INIT_ACTION]` | string | `init` API call endpoint for the Direct Debit payment method. | +| `$config[ComputopConstants::SOFORT_INIT_ACTION]` | string | `init` API call endpoint for the Sofort payment method. | +| `$config[ComputopConstants::PAYDIREKT_INIT_ACTION]` |string | `init` API call endpoint for the Paydirect payment method. | +| `$config[ComputopConstants::IDEAL_INIT_ACTION]` | string | `init` API call endpoint for the Ideal payment method. | +| `$config[ComputopConstants::EASY_CREDIT_INIT_ACTION]` | string | `init` API call endpoint for the Easy Credit payment method. | +| `$config[ComputopConstants::PAYU_CEE_SINGLE_INIT_ACTION]` | string | `init` API call endpoint for the PayU CEE Single payment method. | +| `$config[ComputopApiConstants::PAYPAL_EXPRESS_PREPARE_ACTION]` | string | `prepare` API call endpoint for the PayPal Express payment method. | +| `$config[ComputopApiConstants::PAYPAL_EXPRESS_COMPLETE_ACTION]` | string | `complete` API call endpoint for the PayPal Express payment method. | +| `$config[ComputopApiConstants::EASY_CREDIT_STATUS_ACTION]` | string | `status` API call endpoint for the Easy Credit payment method. | +| `$config[ComputopApiConstants::EASY_CREDIT_AUTHORIZE_ACTION]` | string | `authorize` API call endpoint for the Easy Credit payment method. | +| `$config[ComputopApiConstants::AUTHORIZE_ACTION]` | string | `authorize` API call endpoint. | +| `$config[ComputopApiConstants::CAPTURE_ACTION]` | string | `capture` API call endpoint. | +| `$config[ComputopApiConstants::REVERSE_ACTION]` | string | `reserve` API call endpoint. | +| `$config[ComputopApiConstants::INQUIRE_ACTION]` | string | `inquire` API call endpoint. | +| `$config[ComputopApiConstants::REFUND_ACTION]` | string | `refund` API call endpoint. | +| `$config[ComputopApiConstants::RESPONSE_MAC_REQUIRED]` | array | MAC is checked by methods on response. | +| `$config[ComputopConstants::CREDIT_CARD_TEMPLATE_ENABLED]` | bool | Defines if a custom template is enabled for the Credit Card payment method. | +| `$config[ComputopConstants::CREDIT_CARD_TX_TYPE]` | string | TX TYPE for the Credit Card payment method (empty string). | +| `$config[ComputopConstants::PAY_NOW_TX_TYPE]` | string | TX TYPE for the PayNow payment method (empty string). | +| `$config[ComputopConstants::PAY_PAL_TX_TYPE]` | string | TX TYPE for the PayPal payment method (Auth). | +| `$config[ComputopConstants::PAY_PAL_EXPRESS_PAYPAL_METHOD]` | string | Using method for the PayPal Express payment method. | +| `$config[ComputopConstants::PAYMENT_METHODS_WITHOUT_ORDER_CALL]` | array | Payment methods without the order call. | +| `$config[ComputopApiConstants::PAYMENT_METHODS_CAPTURE_TYPES]` | array | Mapping payment methods and their capture types: `MANUAL` or `AUTO`. | +| `$config[ComputopConstants::CRIF_ENABLED]` | bool | Defines if CRIF risk check is enabled. | +| `$config[ComputopApiConstants::CRIF_ACTION]` | string | CRIF API call endpoint. | +| `$config[ComputopApiConstants::CRIF_PRODUCT_NAME]` | string | `QuickCheckConsumer` or
      `CreditCheckConsumer` or
      `QuickCheckBusiness` or
      `CreditCheckBusiness` or
      `IdentCheckConsume`. | +| `$config[ComputopApiConstants::CRIF_LEGAL_FORM]` | string | `PERSON`, `COMPANY`, or `UNKNOWN`. | +| `$config[ComputopConstants::CRIF_GREEN_AVAILABLE_PAYMENT_METHODS]` | array | Payment methods available with a green response code. | +| `$config[ComputopConstants::CRIF_YELLOW_AVAILABLE_PAYMENT_METHODS]` | array | Payment methods available with a yellow response code. | +| `$config[ComputopConstants::CRIF_RED_AVAILABLE_PAYMENT_METHODS]` | array | Payment methods available with a red response code. | diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-computop.md new file mode 100644 index 00000000000..0f0d480145e --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-computop.md @@ -0,0 +1,1792 @@ +--- +title: Integrating Computop +description: learn how you integrate Computop in to your Spryker Cloud Commerce OS project. +last_updated: Jun 10, 2022 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/computop-integration-into-project +originalArticleId: dee3b189-78b2-4dd2-ae97-45506831a9b8 +redirect_from: + - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-computop.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/integrate-computop.html + - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/computop/integrating-computop.html +--- + +{% info_block errorBox %} + +There is currently an issue when using gift cards and easyCredit with Computop. Our team is developing a fix for it. + +{% endinfo_block %} + +This article provides step-by-step instructions on integrating the Computop module into your project. + +## Prerequisites + +Prior to integrating Computop into your project, make sure you [installed and configured the Computop module](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/install-and-configure-computop.html). + +## Integrating Computop into your project + +To integrate Computop, do the following: + +### OMS configuration + +To configure the OMS, do the following:: + +{% info_block warningBox "Exemplary content" %} + +The state machines provided below are examples of PSP provider flow. + +{% endinfo_block %} + +1. Copy the state machines below on the project level and adjust them according to your requirements. + +**config/Shared/config_default.php** + +```php +$config[OmsConstants::PROCESS_LOCATION] = [ + ... + APPLICATION_ROOT_DIR . '/vendor/spryker-eco/computop/config/Zed/Oms', // Is not required after State machine are copied to project level. +]; +$config[OmsConstants::ACTIVE_PROCESSES] = [ + ... + 'ComputopPayNow01', + 'ComputopCreditCard01', + 'ComputopDirectDebit01', + 'ComputopPaydirekt01', + 'ComputopPayPal01', + 'ComputopPayPalExpress01', + 'ComputopSofort01', + 'ComputopIdeal01', + 'ComputopEasyCredit01', + 'ComputopPayuCeeSingle01', +]; +$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + ... + ComputopConfig::PAYMENT_METHOD_PAY_NOW => 'ComputopPayNow01', + ComputopConfig::PAYMENT_METHOD_CREDIT_CARD => 'ComputopCreditCard01', + ComputopConfig::PAYMENT_METHOD_DIRECT_DEBIT => 'ComputopDirectDebit01', + ComputopConfig::PAYMENT_METHOD_PAYDIREKT => 'ComputopPaydirekt01', + ComputopConfig::PAYMENT_METHOD_PAY_PAL => 'ComputopPayPal01', + ComputopConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS => 'ComputopPayPalExpress01', + ComputopConfig::PAYMENT_METHOD_SOFORT => 'ComputopSofort01', + ComputopConfig::PAYMENT_METHOD_IDEAL => 'ComputopIdeal01', + ComputopConfig::PAYMENT_METHOD_EASY_CREDIT => 'ComputopEasyCredit01', + ComputopConfig::PAYMENT_METHOD_PAYU_CEE_SINGLE => 'ComputopPayuCeeSingle01', +]; +``` + +2. In the `OmsDependencyProvider`, add OMS command and condition plugins: + +
      +src/Pyz/Zed/Oms/OmsDependencyProvider.php + +```php +extendCommandPlugins($container); + $container = $this->extendConditionPlugins($container); + + return $container; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendCommandPlugins(Container $container): Container + { + $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + ... + + // ----- Computop + $commandCollection->add(new AuthorizePlugin(), 'Computop/Authorize'); + $commandCollection->add(new CancelPlugin(), 'Computop/Cancel'); + $commandCollection->add(new CapturePlugin(), 'Computop/Capture'); + $commandCollection->add(new EasyCreditAuthorizePlugin(), 'Computop/EasyCreditAuthorize'); + $commandCollection->add(new RefundPlugin(), 'Computop/Refund'); + + + return $commandCollection; + }); + + return $container; + } + + /** + * @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) { + ... + + // ----- Computop + $conditionCollection->add(new IsPaymentConfirmedPlugin(), 'Computop/IsPaymentConfirmed'); + $conditionCollection->add(new IsAuthorizeRequestConditionPlugin(), 'Computop/IsAuthorizeRequest'); + $conditionCollection->add(new IsAuthorizedPlugin(), 'Computop/IsAuthorized'); + $conditionCollection->add(new IsCancelledPlugin(), 'Computop/IsCancelled'); + $conditionCollection->add(new IsCapturedPlugin(), 'Computop/IsCaptured'); + $conditionCollection->add(new IsInitializedPlugin(), 'Computop/IsInitialized'); + $conditionCollection->add(new IsRefundedPlugin(), 'Computop/IsRefunded'); + + return $conditionCollection; + }); + + return $container; + } +} +``` + +
      + +### Data import + +To display payment methods on the Storefront, import them for each store: + +**data/import/common/common/payment_method.csv** + +```yaml +payment_method_key,payment_method_name,payment_provider_key,payment_provider_name,is_active +computopCreditCard,Computop Credit Card,Computop,Computop,1 +computopDirectDebit,Computop Direct Debit,Computop,Computop,1 +computopEasyCredit,Computop Easycredit,Computop,Computop,1 +computopIdeal,Computop Ideal,Computop,Computop,1 +computopPaydirect,Computop Paydirect,Computop,Computop,1 +computopPayNow,Computop PayNow,Computop,Computop,1 +computopPayPal,Computop PayPal,Computop,Computop,1 +computopPayPalExpress,Computop PayPalExpress,Computop,Computop,1 +computopSofort,Computop Sofort,Computop,Computop,1 +computopPayuCeeSingle,Computop PayU CEE Single,Computop,Computop,1 +``` + + +**data/import/common/DE/payment_method_store.csv** + +```yaml +payment_method_key,store +computopCreditCard,DE +computopDirectDebit,DE +computopEasyCredit,DE +computopIdeal,DE +computopPaydirect,DE +computopPayNow,DE +computopPayPal,DE +computopPayPalExpress,DE +computopSofort,DE +computopPayuCeeSingle,DE +``` + +### Router configuration + +To configure router, add `ComputopRouterProviderPlugin` to `RouterDependencyProvider`: + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + +src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php + +```php + + +2. Add the subforms of the desired payment methods to `CheckoutPageDependencyProvider`: + +
      +src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php + +```php +extendPaymentMethodHandler($container); + $container = $this->extendSubFormPluginCollection($container); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function extendPaymentMethodHandler(Container $container): Container + { + $container->extend(static::PAYMENT_METHOD_HANDLER, function (StepHandlerPluginCollection $paymentMethodHandler) { + ... + + // --- Computop + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_CREDIT_CARD); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_DIRECT_DEBIT); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_EASY_CREDIT); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_IDEAL); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_PAYDIREKT); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_PAY_NOW); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_PAY_PAL); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_PAY_PAL_EXPRESS); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_SOFORT); + $paymentMethodHandler->add(new ComputopPaymentHandlerPlugin(), ComputopConfig::PAYMENT_METHOD_PAYU_CEE_SINGLE); + + return $paymentMethodHandler; + }); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function extendSubFormPluginCollection(Container $container): Container + { + $container->extend(static::PAYMENT_SUB_FORMS, function (SubFormPluginCollection $paymentSubFormPluginCollection) { + ... + + // --- Computop + $paymentSubFormPluginCollection->add(new CreditCardSubFormPlugin()); + $paymentSubFormPluginCollection->add(new DirectDebitSubFormPlugin()); + $paymentSubFormPluginCollection->add(new EasyCreditSubFormPlugin()); + $paymentSubFormPluginCollection->add(new IdealSubFormPlugin()); + $paymentSubFormPluginCollection->add(new PaydirektSubFormPlugin()); + $paymentSubFormPluginCollection->add(new PayNowSubFormPlugin()); + $paymentSubFormPluginCollection->add(new PayPalSubFormPlugin()); + $paymentSubFormPluginCollection->add(new SofortSubFormPlugin()); + $paymentSubFormPluginCollection->add(new PayuCeeSingleSubFormPlugin()); + + return $paymentSubFormPluginCollection; + }); + + return $container; + } +} +``` + +
      + +3. Add form templates of the desired payment methods to `customForms`: + +**src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig** + +```twig +{% raw %}{%{% endraw %} extends template('page-layout-checkout', 'CheckoutPage') {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} define data = { + backUrl: _view.previousStepUrl, + forms: { + payment: _view.paymentForm + }, + title: 'checkout.step.payment.title' | trans, + customForms: { + 'Computop/credit-card': ['credit-card', 'computop'], + 'Computop/direct-debit': ['direct-debit', 'computop'], + 'Computop/easy-credit': ['easy-credit', 'computop'], + 'Computop/ideal': ['ideal', 'computop'], + 'Computop/paydirekt': ['paydirekt', 'computop'], + 'Computop/paynow': ['paynow', 'computop'], + 'Computop/paypal': ['paypal', 'computop'], + 'Computop/sofort': ['sofort', 'computop'], + 'Computop/payu-cee-single': ['payu-cee-single', 'computop'], + } +} {% raw %}%}{% endraw %} +``` + +4. Add the payment filter plugin `ComputopCurrencyPaymentMethodFilterPlugin`: + +**src\Pyz\Zed\Payment\PaymentDependencyProvider.php** + +```php +use SprykerEco\Zed\Computop\Communication\Plugin\Payment\ComputopCurrencyPaymentMethodFilterPlugin; + + /** + * @return array<\Spryker\Zed\PaymentExtension\Dependency\Plugin\PaymentMethodFilterPluginInterface> + */ + protected function getPaymentMethodFilterPlugins(): array + { + return [ + ... + new ComputopCurrencyPaymentMethodFilterPlugin(), + ]; + } +``` + +### CheckoutStepEngine configuration + +Payment methods like CreditCard, PayNow, EasyCredit require adjustments in the `CheckoutStepEngine` flow. To adjust the flow, do the following:: + +1. To create Computop specific steps and replace placeOrder and Summary steps with the project-level ones, adjust `StepFactory`: + +
      +src/Pyz/Yves/CheckoutPage/Process/StepFactory.php + +```php +createEntryStep(), + $this->createCustomerStep(), + $this->createAddressStep(), + $this->createShipmentStep(), + $this->createPaymentStep(), + $this->createComputopEasyCreditInitStep(), + $this->createSummaryStep(), + $this->createPlaceOrderStep(), + $this->createComputopCreditCardInitStep(), + $this->createComputopPayNowInitStep(), + $this->createSuccessStep(), + $this->createErrorStep(), + ]; + } + + /** + * @return \Spryker\Yves\StepEngine\Dependency\Step\StepInterface + */ + public function createPlaceOrderStep(): StepInterface + { + return new PlaceOrderStep( + $this->getCheckoutClient(), + $this->getFlashMessenger(), + $this->getLocaleClient()->getCurrentLocale(), + $this->getGlossaryStorageClient(), + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_PLACE_ORDER, + $this->getConfig()->getEscapeRoute(), + [ + static::ERROR_CODE_GENERAL_FAILURE => static::ROUTE_CART, + 'payment failed' => CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_PAYMENT, + 'shipment failed' => CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_SHIPMENT, + ] + ); + } + + /** + * @return \SprykerShop\Yves\CheckoutPage\Process\Steps\PaymentStep + */ + public function createPaymentStep(): StepInterface + { + return new PaymentStep( + $this->getPaymentClient(), + $this->getPaymentMethodHandler(), + SprykerShopCheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_PAYMENT, + $this->getConfig()->getEscapeRoute(), + $this->getFlashMessenger(), + $this->getCalculationClient(), + $this->getCheckoutPaymentStepEnterPreCheckPlugins(), + $this->createPaymentMethodKeyExtractor(), + ); + } + + /** + * @return \Spryker\Yves\StepEngine\Dependency\Step\StepInterface + */ + public function createSummaryStep(): StepInterface + { + return new SummaryStep( + $this->getProductBundleClient(), + $this->getShipmentService(), + $this->getConfig(), + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_SUMMARY, + $this->getConfig()->getEscapeRoute(), + $this->getCheckoutClient() + ); + } + + /** + * @return \Spryker\Yves\StepEngine\Dependency\Step\StepInterface + */ + public function createComputopCreditCardInitStep(): StepInterface + { + return new ComputopCreditCardInitStep( + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_COMPUTOP_CREDIT_CARD_INIT, + static::ROUTE_NAME_HOME + ); + } + + /** + * @return \Spryker\Yves\StepEngine\Dependency\Step\StepInterface + */ + public function createComputopPayNowInitStep(): StepInterface + { + return new ComputopPayNowInitStep( + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_COMPUTOP_PAY_NOW_INIT, + static::ROUTE_NAME_HOME + ); + } + + /** + * @return \Spryker\Yves\StepEngine\Dependency\Step\StepInterface + */ + public function createComputopEasyCreditInitStep(): StepInterface + { + return new ComputopEasyCreditInitStep( + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_COMPUTOP_EASY_CREDIT_INIT, + static::ROUTE_NAME_HOME + ); + } + + /** + * @return \SprykerEco\Client\Computop\ComputopClientInterface + */ + public function getComputopClient(): ComputopClientInterface + { + return $this->getProvidedDependency(CheckoutPageDependencyProvider::CLIENT_COMPUTOP); + } + + /** + * @return \SprykerEco\Yves\Computop\CheckoutPage\Process\Steps\ComputopPayPalExpressCompleteStep + */ + public function createComputopPayPalExpressCompleteStep(): ComputopPayPalExpressCompleteStep + { + return new ComputopPayPalExpressCompleteStep( + static::ROUTE_NAME_COMPUTOP_PAYPAL_EXPRESS_COMPLETE, + static::ROUTE_NAME_HOME + ); + } +} +``` + +
      + +2. To use the project-level `StepFactory`, adjust `CheckoutPageFactory`: + +**src/Pyz/Yves/CheckoutPage/CheckoutPageFactory.php** + +```php + +src/Pyz/Yves/CheckoutPage/Controller/CheckoutController.php + +```php +canProceedCheckout(); + + if (!$quoteValidationResponseTransfer->getIsSuccessful()) { + $this->processErrorMessages($quoteValidationResponseTransfer->getMessages()); + + return $this->redirectResponseInternal(static::ROUTE_CART); + } + + $response = $this->createStepProcess()->process($request); + + if (!is_array($response)) { + return $response; + } + + return $this->view( + $response, + [], + '@Computop/views/credit-card-init/credit-card-init.twig' + ); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * + * @return array|\Symfony\Component\HttpFoundation\RedirectResponse + */ + public function computopEasyCreditInitAction(Request $request) + { + return $this->createStepProcess()->process($request); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * + * @return array|\Spryker\Yves\Kernel\View\View|\Symfony\Component\HttpFoundation\RedirectResponse + */ + public function computopPayNowInitAction(Request $request) + { + $quoteValidationResponseTransfer = $this->canProceedCheckout(); + + if (!$quoteValidationResponseTransfer->getIsSuccessful()) { + $this->processErrorMessages($quoteValidationResponseTransfer->getMessages()); + + return $this->redirectResponseInternal(static::ROUTE_CART); + } + + $response = $this->createStepProcess()->process($request); + + if (!is_array($response)) { + return $response; + } + + return $this->view( + $response, + $this->getFactory()->getCustomerPageWidgetPlugins(), + '@Computop/views/paynow-init/paynow-init.twig' + ); + } +} +``` + +
      + +4. To register additional checkout step routes, adjust `CheckoutPageRouteProviderPlugin`: + +
      +src/Pyz/Yves/CheckoutPage/Plugin/Router/CheckoutPageRouteProviderPlugin.php + +```php +addComputopCreditCardInitRoute($routeCollection); + $routeCollection = $this->addComputopPayNowInitRoute($routeCollection); + $routeCollection = $this->addComputopEasyCreditInitRoute($routeCollection); + + return $routeCollection; + } + + /** + * @param \Spryker\Yves\Router\Route\RouteCollection $routeCollection + * + * @return \Spryker\Yves\Router\Route\RouteCollection + */ + protected function addComputopCreditCardInitRoute(RouteCollection $routeCollection): RouteCollection + { + $route = $this->buildRoute( + '/checkout/computop-credit-card-init', + 'CheckoutPage', + 'Checkout', + 'computopCreditCardInitAction' + ); + $route = $route->setMethods(['GET', 'POST']); + $routeCollection->add(static::ROUTE_NAME_CHECKOUT_COMPUTOP_CREDIT_CARD_INIT, $route); + + return $routeCollection; + } + + /** + * @param \Spryker\Yves\Router\Route\RouteCollection $routeCollection + * + * @return \Spryker\Yves\Router\Route\RouteCollection + */ + protected function addComputopPayNowInitRoute(RouteCollection $routeCollection): RouteCollection + { + $route = $this->buildRoute( + '/checkout/computop-pay-now-init', + 'CheckoutPage', + 'Checkout', + 'computopPayNowInitAction' + ); + $route = $route->setMethods(['GET', 'POST']); + $routeCollection->add(static::ROUTE_NAME_CHECKOUT_COMPUTOP_PAY_NOW_INIT, $route); + + return $routeCollection; + } + + /** + * @param \Spryker\Yves\Router\Route\RouteCollection $routeCollection + * + * @return \Spryker\Yves\Router\Route\RouteCollection + */ + protected function addComputopEasyCreditInitRoute(RouteCollection $routeCollection): RouteCollection + { + $route = $this->buildRoute( + '/checkout/computop-easy-credit-init', + 'CheckoutPage', + 'Checkout', + 'computopEasyCreditInitAction' + ); + $route = $route->setMethods(['GET', 'POST']); + $routeCollection->add(static::ROUTE_NAME_CHECKOUT_COMPUTOP_EASY_CREDIT_INIT, $route); + + return $routeCollection; + } +} +``` + +
      + +5. Adjust `RouterDependencyProvider` to use `CheckoutPageRouteProviderPlugin` from the project level: + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php + +src/Pyz/Yves/CheckoutPage/Process/Steps/PlaceOrderStep.php + +```php +getPayment()->getPaymentSelection() !== ComputopConfig::PAYMENT_METHOD_PAY_NOW) { + return $quoteTransfer; + } + + $computopPaymentTransfer = $quoteTransfer->getPayment()->getComputopPayNow(); + $computopPaymentTransfer + ->setData($this->checkoutResponseTransfer->getComputopInitPayment()->getData()) + ->setLen($this->checkoutResponseTransfer->getComputopInitPayment()->getLen()); + $quoteTransfer->getPayment()->setComputopPayNow($computopPaymentTransfer); + + return $quoteTransfer; + } +} +``` + + + +7. For EasyCredit payment method only: Adjust the SummaryStep with EasyCredit installment information by adding the `easy-credit-summary` molecule to `summary.twig`. + +
      +src/Pyz/Yves/CheckoutPage/Process/Steps/SummaryStep.php + +```php +shipmentService->groupItemsByShipment($quoteTransfer->getItems()); + $isPlaceableOrderResponseTransfer = $this->checkoutClient->isPlaceableOrder($quoteTransfer); + + return [ + 'quoteTransfer' => $quoteTransfer, + 'cartItems' => $this->productBundleClient->getGroupedBundleItems( + $quoteTransfer->getItems(), + $quoteTransfer->getBundleItems() + ), + 'shipmentGroups' => $this->expandShipmentGroupsWithCartItems($shipmentGroups, $quoteTransfer), + 'totalCosts' => $this->getShipmentTotalCosts($shipmentGroups, $quoteTransfer), + 'isPlaceableOrder' => $isPlaceableOrderResponseTransfer->getIsSuccess(), + 'isPlaceableOrderErrors' => $isPlaceableOrderResponseTransfer->getErrors(), + 'shipmentExpenses' => $this->getShipmentExpenses($quoteTransfer), + 'acceptTermsFieldName' => QuoteTransfer::ACCEPT_TERMS_AND_CONDITIONS, + 'additionalData' => $this->getAdditionalData($quoteTransfer), + ]; + } + + /** + * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer + * + * @return array + */ + protected function getAdditionalData(QuoteTransfer $quoteTransfer): array + { + if ($quoteTransfer->getPayment()->getPaymentSelection() !== PaymentTransfer::COMPUTOP_EASY_CREDIT) { + return []; + } + + $easyCreditStatusResponse = $quoteTransfer->getPayment() + ->getComputopEasyCredit() + ->getEasyCreditStatusResponse(); + + $financing = $easyCreditStatusResponse->getFinancingData(); + $process = $easyCreditStatusResponse->getProcessData(); + + return [ + 'installmentPlanMoney' => [ + 'Kaufbetrag' => (int)round($financing['finanzierung']['bestellwert'] * 100), + '+ Zinsen' => (int)round($financing['ratenplan']['zinsen']['anfallendeZinsen'] * 100), + '= Gesamtbetrag' => (int)round($financing['ratenplan']['gesamtsumme'] * 100), + 'Ihre monatliche Rate' => (int)round($financing['ratenplan']['zahlungsplan']['betragRate'] * 100), + 'letzte Rate' => (int)round($financing['ratenplan']['zahlungsplan']['betragLetzteRate'] * 100), + ], + 'installmentPlanTax' => [ + 'Sollzinssatz p.a. fest für die gesamte Laufzeit' => $financing['ratenplan']['zinsen']['nominalzins'], + 'effektiver Jahreszins' => $financing['ratenplan']['zinsen']['effektivzins'], + ], + 'installmentText' => $financing['tilgungsplanText'], + 'installmentLink' => $process['allgemeineVorgangsdaten']['urlVorvertraglicheInformationen'], + ]; + } +} +``` + +
      + +8. For PayPalExpress payment method only: Adjust the PaymentStep with ComputopPayPalExpress check: + +
      +src/Pyz/Yves/CheckoutPage/Process/Steps/PaymentStep.php + +```php +isQuoteContainsPayPalExpressPayment($quoteTransfer); + } + + /** + * @param \Spryker\Shared\Kernel\Transfer\AbstractTransfer $quoteTransfer + * + * @return bool + */ + public function requireInput(AbstractTransfer $quoteTransfer) + { + /** @var \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer */ + if ($this->isQuoteContainsPayPalExpressPayment($quoteTransfer)) { + return false; + } + + return parent::requireInput($quoteTransfer); + } + + /** + * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer + * + * @return bool + */ + protected function isQuoteContainsPayPalExpressPayment(QuoteTransfer $quoteTransfer): bool + { + return $quoteTransfer->getPayment() !== null && $quoteTransfer->getPaymentOrFail()->getComputopPayPalExpress() !== null; + } +} +``` + +
      + +9. For PayPalExpress payment method only: Adjust the `ShipmentStep` with the default shipment method check: + +
      +src/Pyz/Yves/CheckoutPage/Process/Steps/ShipmentStep.php + +```php +computopClient = $computopClient; + } + + /** + * @param \Spryker\Shared\Kernel\Transfer\AbstractTransfer $quoteTransfer + * + * @return bool + */ + public function isBreadcrumbItemEnabled(AbstractTransfer $quoteTransfer): bool + { + /** @var \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer */ + return !$quoteTransfer->getDefaultShipmentSelected(); + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer + * + * @return \Generated\Shared\Transfer\QuoteTransfer + */ + public function execute(Request $request, AbstractTransfer $quoteTransfer): QuoteTransfer + { + $quoteTransfer = parent::execute($request, $quoteTransfer); + /** @var \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer */ + $quoteTransfer->setDefaultShipmentSelected(false); + + return $this->computopClient->performCrifApiCall($quoteTransfer); + } +} +``` + +
      + +10. For PayPal Express payment method only: Extend `QuoteDependencyProvider` with `DefaultShippingMethodQuoteTransferExpanderPlugin`: + +**src/Pyz/Client/Quote/QuoteDependencyProvider.php** + +```php + + */ + protected function getQuoteTransferExpanderPlugins(Container $container) + { + return [ + ... + new DefaultShippingMethodQuoteTransferExpanderPlugin(), + ]; + } + ... +} +``` + +11. For PayPal Express payment method only: Extend `ComputopDependencyProvider` with `ExpandShipmentPayPalExpressInitPlugin`: + +**src/Pyz/Yves/Computop/ComputopDependencyProvider.php** + +```php + + */ + public function getPayPalExpressInitPlugins(): array + { + return [ + new ExpandShipmentPayPalExpressInitPlugin(), + ]; + } +} +``` + +12. For PayPal Express payment method only: Extend cart-summary twig template with shipment information: + +
      +src/Pyz/Yves/CartPage/Theme/default/components/molecules/cart-summary/cart-summary.twig + +```twig +{% raw %}{%{% endraw %} extends model('component') {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} define config = { + name: 'cart-summary', +} %} + +{% raw %}{%{% endraw %} define data = { + cart: required, + isQuoteValid: required, + isQuoteEditable: required, + cartQuantity: cartQuantity is defined ? cartQuantity : app['cart.quantity'] | default, +} {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} set canProceedToCheckout = data.cart.items is not empty + and data.isQuoteValid + and (not is_granted('ROLE_USER') or can('WriteSharedCartPermissionPlugin', data.cart.idQuote)) +{% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block cartQuantity {% raw %}%}{% endraw %} +
      {% raw %}{{{% endraw %} data.cartQuantity {% raw %}}}{% endraw %} {% raw %}{{{% endraw %} 'item' | trans {% raw %}}}{% endraw %}
      +
      {% raw %}{{{% endraw %} 'cart.your-order' | trans {% raw %}}}{% endraw %}
      +
      + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} set quoteApprovalWidget = findWidget('QuoteApprovalWidget', [data.cart]) {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if quoteApprovalWidget and quoteApprovalWidget.isVisible and not canProceedToCheckout {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set canProceedToCheckout = true {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} if quoteApprovalWidget {% raw %}%}{% endraw %} {# @deprecated - This widget is moved to summary page of checkout. #} + {% raw %}{%{% endraw %} widget quoteApprovalWidget only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + + + {% raw %}{%{% endraw %} block cartSummaryContent {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if can('SeePricePermissionPlugin') {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if widgetExists('DiscountSummaryWidgetPlugin') {% raw %}%}{% endraw %} +
        + {% raw %}{{{% endraw %} widget('DiscountSummaryWidgetPlugin', data.cart) {% raw %}}}{% endraw %} {# @deprecated Use molecule('cart-discount-summary', 'DiscountWidget') instead. #} +
      + {% raw %}{%{% endraw %} else {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} include molecule('cart-discount-summary', 'DiscountWidget') ignore missing with { + class: 'list spacing-y', + data: { + voucherDiscounts: data.cart.voucherDiscounts, + ruleDiscounts: data.cart.cartRuleDiscounts, + discountTotal: data.cart.totals.discounttotal, + isQuoteEditable: data.isQuoteEditable, + currencyIsoCode: data.cart.currency.code, + }, + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + +
        + {% raw %}{%{% endraw %} block cartShipment {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} if data.cart.shipment is not empty and data.cart.shipment.method is not empty {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set shipmentTotalPrice = data.cart.totals.shipmentTotal is defined ? data.cart.totals.shipmentTotal : data.cart.shipment.method.storeCurrencyPrice {% raw %}%}{% endraw %} +
      • + {% raw %}{{{% endraw %} 'cart.shipping' | trans {% raw %}}}{% endraw %} +
        + {% raw %}{{{% endraw %} data.cart.shipment.method.name {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} shipmentTotalPrice | money(true, data.cart.currency.code) {% raw %}}}{% endraw %} +
        +
      • + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} widget 'SalesOrderThresholdWidget' args [data.cart.expenses] only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} +
      • + {% raw %}{{{% endraw %} parent() {% raw %}}}{% endraw %} +
        +
      • + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} elsewidget 'SalesOrderThresholdWidgetPlugin' args [data.cart.expenses] only {% raw %}%}{% endraw %} {# @deprecated Use SalesOrderThresholdWidget instead. #} + {% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} +
      • + {% raw %}{{{% endraw %} parent() {% raw %}}}{% endraw %} +
      • +
        + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} block cartPrice {% raw %}%}{% endraw %} +
      • + {% raw %}{{{% endraw %} 'cart.price.subtotal' | trans {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} data.cart.totals.subtotal | money(true, data.cart.currency.code) {% raw %}}}{% endraw %} +
      • + +
      • + {% raw %}{{{% endraw %} 'cart.total.tax_total' | trans {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} data.cart.totals.taxTotal.amount | money(true, data.cart.currency.code) {% raw %}}}{% endraw %} +
      • +
      • + {% raw %}{{{% endraw %} 'cart.price.grand.total' | trans {% raw %}}}{% endraw %} + {% raw %}{{{% endraw %} data.cart.totals.grandTotal | money(true, data.cart.currency.code) {% raw %}}}{% endraw %} +
      • + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +
      + + {% raw %}{%{% endraw %} include molecule('gift-card-payment-summary', 'GiftCardWidget') ignore missing with { + class: 'list spacing-y', + data: { + cart: data.cart, + isQuoteEditable: data.isQuoteEditable, + }, + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} else {% raw %}%}{% endraw %} + {% raw %}{{{% endraw %} 'customer.access.cannot_see_price' | trans {% raw %}}}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} if data.isQuoteValid {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} widget 'QuoteApproveRequestWidget' args [data.cart] only {% raw %}%}{% endraw %} {# @deprecated - This widget is moved to summary page of checkout. #} + {% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} +
      + {% raw %}{{{% endraw %} parent() {% raw %}}}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} set productConfigurationWidget = findWidget('ProductConfigurationQuoteValidatorWidget', [data.cart]) {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set canProceedQuoteCheckout = productConfigurationWidget.isQuoteProductConfigurationValid {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} widget 'ProductConfigurationQuoteValidatorWidget' args [data.cart] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} if canProceedToCheckout {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} widget 'ProceedToCheckoutButtonWidget' args [data.cart] with { + data: { + canProceedCheckout: canProceedQuoteCheckout, + currencyIsoCode: data.cart.currency.code + }, + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} +
      + {% raw %}{{{% endraw %} parent() {% raw %}}}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} nowidget {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set checkoutButtonText = 'cart.checkout' | trans {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set disableButton = not canProceedQuoteCheckout ? 'button--disabled' {% raw %}%}{% endraw %} + + + {% raw %}{{{% endraw %} checkoutButtonText {% raw %}}}{% endraw %} + + {% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} + + {% raw %}{%{% endraw %} if is_granted('ROLE_USER') {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} widget 'QuoteRequestCreateWidget' args [data.cart] with { + data: { + canProceedCheckout: canProceedQuoteCheckout, + }, + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block body {% raw %}%}{% endraw %} +
      + {% raw %}{{{% endraw %} parent() {% raw %}}}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} widget 'QuoteRequestCartWidget' args [data.cart] only {% raw %}%}{% endraw %}{% raw %}{%{% endraw %} endwidget {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endif {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +
      + +13. For PayPal Express payment method only: Extend `ProceedToCheckoutButtonWidget` and add the checkout button: + +
      +src/Pyz/Yves/CheckoutWidget/Widget/ProceedToCheckoutButtonWidget.php + +```php +addClientId(); + } + + /** + * @return void + */ + protected function addClientId(): void + { + $this->addParameter( + static::PARAMETER_CLIENT_ID, + $this->getFactory()->getComputopClient()->getPayPalExpressClientId() + ); + } +} +``` + +
      + +14. For PayPal Express payment method only: Extend `CheckoutWidgetFactory`: + + **src/Pyz/Yves/CheckoutWidget/CheckoutWidgetFactory.php** + + ```php + getProvidedDependency(CheckoutWidgetDependencyProvider::CLIENT_COMPUTOP); + } + } + + ``` + +15. For PayPal Express payment method only: Override `CheckoutWidgetDependencyProvider`: + +**src/Pyz/Yves/CheckoutWidget/CheckoutWidgetDependencyProvider.php** + +```php +addComputopClient($container); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function addComputopClient(Container $container): Container + { + $container->set(static::CLIENT_COMPUTOP, function (Container $container) { + return $container->getLocator()->computop()->client(); + }); + + return $container; + } +} + +``` + +16. For PayPal Express payment method only: Extend `ShopApplicationDependencyProvider` with created `ProceedToCheckoutButtonWidget`: + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + {% raw %}{{{% endraw %} 'cart.checkout' | trans {% raw %}}}{% endraw %} + +
      + + {% raw %}{%{% endraw %} include molecule('paypal-buttons', 'Computop') with { + data: { + clientId: data.clientId, + currency: data.currencyIsoCode, + } + } only {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +### CRIF configuration + +To configure [CRIF](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.html), do the following: + +1. Adjust `PaymentDependencyProvider` to use `ComputopPaymentMethodFilterPlugin`: + +**src/Pyz/Zed/Payment/PaymentDependencyProvider.php** + +```php + +\Pyz\Yves\CheckoutPage\Process\Steps\ShipmentStep + +```php +computopClient = $computopClient; + } + + /** + * @param \Symfony\Component\HttpFoundation\Request $request + * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer + * + * @return \Generated\Shared\Transfer\QuoteTransfer + */ + public function execute(Request $request, AbstractTransfer $quoteTransfer) + { + $quoteTransfer = parent::execute($request, $quoteTransfer); + + return $this->computopClient->performCrifApiCall($quoteTransfer); + } +} +``` + + + +3. To use the project-level `ShipmentStep`, adjust `StepFactory`: + +
      +src/Pyz/Yves/CheckoutPage/Process/StepFactory.php + +```php +getCalculationClient(), + $this->getShipmentPlugins(), + $this->createShipmentStepPostConditionChecker(), + $this->createGiftCardItemsChecker(), + CheckoutPageRouteProviderPlugin::ROUTE_NAME_CHECKOUT_SHIPMENT, + $this->getConfig()->getEscapeRoute(), + $this->getCheckoutShipmentStepEnterPreCheckPlugins(), + $this->getComputopClient() + ); + } + + /** + * @return \SprykerEco\Client\Computop\ComputopClientInterface + */ + public function getPaymentMethodHandler(): ComputopClientInterface + { + return $this->getProvidedDependency(CheckoutPageDependencyProvider::CLIENT_COMPUTOP); + } +} +``` + +
      + +4. To add `ComputopClient` to dependencies, adjust `CheckoutPageDependencyProvider`: + +
      +src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php + +```php +addComputopClient($container); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function addComputopClient(Container $container): Container + { + $container->set(static::CLIENT_COMPUTOP, function (Container $container) { + return $container->getLocator()->computop()->client(); + }); + + return $container; + } +} +``` + +
      + +## Integration into a project + +To integrate the Computop module, make sure you [installed and configured it](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/computop/install-and-configure-computop.html). + +## Test mode + +Computop provides a test mode to test payment methods without making real transactions. + +To enable the test mode, in `\SprykerEco\Service\ComputopApi\Mapper\ComputopApiMapper::getDescriptionValue()`, add `Test:0000` to the beginning of the transaction description. + +You can find Computop test cards at [Test Cards](https://developer.computop.com/display/EN/Test+Cards). diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md index 4dd2b000ca4..5952257cb01 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-credit-card originalArticleId: 682d66ae-585b-4de5-bfad-3ab51281697f redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-credit-card-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-credit-card-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-credit-card-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-credit-card-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md index 40e79a4f3c0..8887f9b262f 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-crif originalArticleId: 9e295864-bffd-4b37-b8a8-33c413bc46db redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-crif-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202001.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-crif-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-crif-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-crif-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md index 0a882f9b9b3..724368192a2 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-direct-debit originalArticleId: 4fc82f9b-f9fb-4608-9f1c-59f42cf54619 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-direct-debit-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-direct-debit-payment-method-for-computop.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-direct-debit-payment-method-for-computop. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md index b5909675e74..85acad79300 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-easy-credit originalArticleId: cdbe2101-cd6a-4a31-bfec-4d922c5e221f redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-easy-credit-payment-method-for-computop.html - /2021080/docs/computop-easy-credit - /2021080/docs/en/computop-easy-credit - /docs/computop-easy-credit diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md index b968b4b40d1..24e83d30c93 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-ideal originalArticleId: f5f1e562-7dc9-4b19-a7a4-471f1822c869 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-ideal-payment-method-for-computop.html - /2021080/docs/computop-ideal - /2021080/docs/en/computop-ideal - /docs/computop-ideal diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md index 85986ddc1ae..d066b6d6888 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-paydirekt originalArticleId: a4c9059f-8244-4c34-b7e9-9bf7d5998f2e redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paydirekt-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paydirekt-payment-method-for-computop.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paydirekt-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md index 41abf386bbf..20cc3942200 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-paynow originalArticleId: 5b27c38c-8d44-4a1d-9bdf-fb542362df8d redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paynow-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paynow-payment-method-for-computop.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paynow-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md similarity index 95% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md index 75612c93be3..34fe49e155b 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.md @@ -1,11 +1,12 @@ --- -title: Integrating the PayPal payment method for Computop +title: Integrating the PayPal payment method for Computop description: Learn how to integrate PayPal payment through Computop into your Spryker Cloud Commerce OS shop. last_updated: Jun 16, 2021 template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-paypal originalArticleId: 199b0408-9355-41f0-bdc9-78cb050afe0c redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paypal-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-paypal-payment-method-for-computop.html - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-paypal-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md index f0cc9b9c2f4..b48181a6be7 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/computop-sofort originalArticleId: 0d22997c-4a0c-4a8d-8031-e705869d05b8 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/computop/integrate-payment-methods-for-computop/integrate-the-sofort-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202001.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-sofort-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202005.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-sofort-payment-method-for-computop.html - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/computop/integrating-payment-methods-for-computop/integrating-the-sofort-payment-method-for-computop.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-callbacks.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-callbacks.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-callbacks.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-callbacks.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-capture-and-refund-processes.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-capture-and-refund-processes.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-capture-and-refund-processes.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-capture-and-refund-processes.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-enable-b2b-payments.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-enable-b2b-payments.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-enable-b2b-payments.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-enable-b2b-payments.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-notifications.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-notifications.md new file mode 100644 index 00000000000..6aea2cb2f05 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-notifications.md @@ -0,0 +1,23 @@ +--- +title: CrefoPay notifications +description: Merchant Notification System (MNS) is a push notification service for merchants that CrefoPay module uses. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/crefopay-notifications +originalArticleId: 16d24825-5c36-4fa7-94d3-2c55711881ba +redirect_from: + - /2021080/docs/crefopay-notifications + - /2021080/docs/en/crefopay-notifications + - /docs/crefopay-notifications + - /docs/en/crefopay-notifications + - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/crefopay/crefopay-notifications.html + - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/crefopay/crefopay-notifications.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/crefopay/crefopay-notifications.html + - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/crefopay/crefopay-notifications.html +--- + +Merchant Notification System (MNS) is a push notification service for merchants. The MNS allows merchants to receive a multitude of notifications asynchronously in order to decouple the merchant system from CrefoPay's payment systems. Also, with the MNS, merchants can react to any kind of change in the payment status of processed transactions. + +Notification calls will be targeted at the notification-URL that is configured for the shop. Multiple notification-URLs may be configured for a single shop. This allows merchants to inform more than one system, for example shop system and ERP system. + +The Notification-URL can be configured in merchant back end and must have the following format: `http://de.mysprykershop.com/crefo-pay/notification`. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md index 3b446fdc81c..458b54278d8 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/crefopay-provided-payment-methods originalArticleId: a5a58535-f49a-42aa-8c26-e6987beb21bc redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html - /2021080/docs/crefopay-provided-payment-methods - /2021080/docs/en/crefopay-provided-payment-methods - /docs/crefopay-provided-payment-methods diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay.md new file mode 100644 index 00000000000..a3f1cd0a7f5 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/crefopay.md @@ -0,0 +1,47 @@ +--- +title: CrefoPay +description: Learn all about Spryker partner CrefoPay and how together they can enhance your Spryker Cloud Commerce OS project. +template: concept-topic-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/scos/dev/technology-partner-guides/202200.0/payment-partners/crefopay/crefopay.html + - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/crefopay/crefopay.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/crefopay/crefopay.html + - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/crefopay/crefopay.html +--- + +`SprykerEco.CrefoPay` [spryker-eco/crefo-pay](https://github.com/spryker-eco/crefo-pay) module provides integration of Spryker e-commerce system with the CrefoPay technology partner. It requires `SprykerEco.CrefoPayApi` [spryker-eco/crefo-pay-api](https://github.com/spryker-eco/crefo-pay-api) module that provides the REST Client for making API calls to CrefoPay Payment Provider. + +The `SprykerEco.CrefoPay` module includes integration with: + +- **Checkout process** - payment forms with all necessary fields that are required to make a payment request, save order information and so on. +- **OMS (Order Management System)** - state machines, all necessary commands for making modification requests and conditions for changing order statuses accordingly. + +The `SprykerEco.CrefoPay` module provides the following payment methods: + +- [Bill](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#bill) +- [Cash on Delivery](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#cash-on-delivery) +- [Credit Card](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#credit-card) +- [Card with 3D secure](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#credit-card-with-3d-secure) +- [Direct Debit](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#direct-debit) +- [PayPal](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#paypal) +- [Cash in advance](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#cash-in-advance) +- [SofortÜberweisung](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/crefopay-payment-methods.html#sofortberweisung) + + +## Related Developer guides + +To integrate CrefoPay into your system the see following articles: +- [Installing and configuring CrefoPay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.html) +- [Integrating CrefoPay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/crefopay/integrate-crefopay.html) + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md index 94b9e1ef8f8..5313f79ec91 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/crefopay-configuration originalArticleId: a45ce001-36a2-42a5-b9b8-7258b4b0af97 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/install-and-configure-crefopay.html - /2021080/docs/crefopay-configuration - /2021080/docs/en/crefopay-configuration - /docs/crefopay-configuration diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md index 8892ee308a3..fb33fd51463 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/crefopay-integration originalArticleId: ce1c7803-e0a5-493f-94a6-0f602616e987 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/crefopay/integrate-crefopay.html - /2021080/docs/crefopay-integration - /2021080/docs/en/crefopay-integration - /docs/crefopay-integration diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md index 7e0785ebd2e..75a75c3406e 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-configuration-scos originalArticleId: f14d7560-eea6-4f96-8ced-cb8fcdda46c1 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/configure-heidelpay.html - /2021080/docs/heidelpay-configuration-scos - /2021080/docs/en/heidelpay-configuration-scos - /docs/heidelpay-configuration-scos diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md similarity index 93% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md index 683f862d95f..28293ef08c2 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-oms-workflow originalArticleId: 604f600e-3f95-4194-90ed-4b2f7e9fac26 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.html - /2021080/docs/heidelpay-oms-workflow - /2021080/docs/en/heidelpay-oms-workflow - /docs/heidelpay-oms-workflow diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md index 8ad5ce74ca5..dce9a572f9a 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-error-workflow originalArticleId: 0330a859-8c49-422b-8ad6-700adf488be6 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.html - /2021080/docs/heidelpay-error-workflow - /2021080/docs/en/heidelpay-error-workflow - /docs/heidelpay-error-workflow diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay.md new file mode 100644 index 00000000000..7d3b338ce19 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/heidelpay.md @@ -0,0 +1,44 @@ +--- +title: Heidelpay +description: Heidelpay is an internationally operating payment institution, authorized and regulated by the Federal Financial Supervisory Authority. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/heidelpay +originalArticleId: 92607b28-3e51-4b0a-a41f-12bc9852b1cb +redirect_from: + - /docs/scos/user/technology-partners/202311.0/payment-partners/heidelpay.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/heidelpay/heidelpay.html +--- + +## Partner Information + +[ABOUT HEIDELPAY](https://www.heidelpay.de/) + +Heidelpay is an internationally operating payment institution, authorized and regulated by the Federal Financial Supervisory Authority. The Full-Service Payment Provider covers the entire range of services connected to international electronic payment processing. For more than 13 years the company has been successfully realizing projects of online and stationary retailers and currently serves more than 16.000 customers in many different industrial sectors worldwide. + +## Related Developer guides + +- [Installing Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/install-heidelpay.html) +- [Integrating Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.html) +- [Configuring Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/configure-heidelpay.html) +- [Heidelpay OMS workflow](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/heidelpay-oms-workflow.html) +- [Heidelpay workflow for errors](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/heidelpay-workflow-for-errors.html) +- [Integrating the Credit Card Secure payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.html) +- [Integrating the Direct Debit payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.html) +- [Integrating the Easy Credit payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.html) +- [Integrating the iDeal payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.html) +- [Integrating the Invoice Secured B2C payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.html) +- [Integrating the Paypal Authorize payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.html) +- [Integrating the Paypal Debit payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.html) +- [Integrating the Sofort payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.html) +- [Integrating the Split-payment Marketplace payment method for Heidelpay](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.html) +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
      diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md similarity index 96% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md index 7e6b5575966..6436bcfd6ce 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-installation originalArticleId: b3bc4292-2daf-4054-b987-2adcf53414a8 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/install-heidelpay.html - /2021080/docs/heidelpay-installation - /2021080/docs/en/heidelpay-installation - /docs/heidelpay-installation diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md index b99493d1b9d..57e5ff0493e 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-integration-scos originalArticleId: 05ad4c88-a849-4d74-bdb3-898ab0b4e74a redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-heidelpay.html - /2021080/docs/heidelpay-integration-scos - /2021080/docs/en/heidelpay-integration-scos - /docs/heidelpay-integration-scos diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md index 521e98a780a..a81139ec3ea 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-credit-card originalArticleId: bf62ed07-45dc-48b7-8a11-7cc6fdeb3e16 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-credit-card-secure-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-credit-card - /2021080/docs/en/heidelpay-credit-card - /docs/heidelpay-credit-card diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md index 78c372084ae..7d2c7652694 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/integrating-the-direct-debit-payment-method-for-heidelpay.html originalArticleId: eeaea912-0d03-499d-acdd-ad7c448c4cb0 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-direct-debit-payment-method-for-heidelpay.html - /2021080/docs/integrating-the-direct-debit-payment-method-for-heidelpay.html - /2021080/docs/en/integrating-the-direct-debit-payment-method-for-heidelpay.html - /docs/integrating-the-direct-debit-payment-method-for-heidelpay.html diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md index ee6bc98f953..0971a67211d 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-easy-credit originalArticleId: 83746ef1-fe16-4a17-bd70-98519e4418fa redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-easy-credit-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-easy-credit - /2021080/docs/en/heidelpay-easy-credit - /docs/heidelpay-easy-credit diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md index 728ad2a5904..d710bb860b4 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-ideal originalArticleId: 66b61a72-36ed-450c-9b80-4495efa619cc redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-ideal-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-ideal - /2021080/docs/en/heidelpay-ideal - /docs/heidelpay-ideal diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md index 91dd7fe6285..d42f7a20d66 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-invoice-secured-b2c originalArticleId: 6f9b4bee-2a0d-4611-b4a9-f61ca4f6c35f redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-invoice-secured-b2c-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-invoice-secured-b2c - /2021080/docs/en/heidelpay-invoice-secured-b2c - /docs/heidelpay-invoice-secured-b2c diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md index 3ac67b695b1..b086d3b1e8f 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-authorize originalArticleId: 0f062977-b318-41b1-bd9e-b14ffedf2bc6 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-authorize-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-authorize - /2021080/docs/en/heidelpay-authorize - /docs/heidelpay-authorize diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md index 70bfc6a3885..2c92f29f5a4 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-paypal-debit originalArticleId: c13ad379-3ad5-477f-bcec-8b0f00d3572a redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-paypal-debit-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-paypal-debit - /2021080/docs/en/heidelpay-paypal-debit - /docs/heidelpay-paypal-debit diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md index c57122fe1ca..a5a01c3afc7 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-sofort originalArticleId: ac896fad-2456-4d4e-a590-6d970b8a6e97 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-sofort-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-sofort - /2021080/docs/en/heidelpay-sofort - /docs/heidelpay-sofort diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md similarity index 95% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md index f05de9acc55..275db1c6392 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/heidelpay-split-payment-marketplace originalArticleId: e418b364-ca18-4947-9dd0-a100378dd90a redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/heidelpay/integrate-payment-methods-for-heidelpay/integrate-the-split-payment-marketplace-payment-method-for-heidelpay.html - /2021080/docs/heidelpay-split-payment-marketplace - /2021080/docs/en/heidelpay-split-payment-marketplace - /docs/heidelpay-split-payment-marketplace diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-invoice-pay-in-14-days.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-invoice-pay-in-14-days.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-invoice-pay-in-14-days.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-invoice-pay-in-14-days.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-part-payment-flexible.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-part-payment-flexible.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-part-payment-flexible.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-part-payment-flexible.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md index f9be279c408..5ef273e054e 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-payment-workflow.md @@ -7,7 +7,7 @@ originalLink: https://documentation.spryker.com/2021080/docs/klarna-payment-work originalArticleId: 3c541e8f-7983-4f74-acce-a34aebb26c36 redirect_from: - /docs/scos/dev/technology-partner-guides/202311.0/payment-partners/klarna/klarna-payment-workflow.html - - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/klarna/klarna-payment-workflow.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/klarna/klarna-payment-workflow.html - /docs/scos/dev/technology-partner-guides/202204.0/payment-partners/klarna/klarna-payment-workflow.html related: - title: Klarna - Invoice Pay in 14 days diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-state-machine-commands-and-conditions.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-state-machine-commands-and-conditions.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna-state-machine-commands-and-conditions.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna-state-machine-commands-and-conditions.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/klarna/klarna.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/klarna/klarna.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/install-and-configure-payolution.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/install-and-configure-payolution.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/install-and-configure-payolution.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/install-and-configure-payolution.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-payolution.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-payolution.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-payolution.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-payolution.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-the-installment-payment-method-for-payolution.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-the-installment-payment-method-for-payolution.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-the-installment-payment-method-for-payolution.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-the-installment-payment-method-for-payolution.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-the-invoice-payment-method-for-payolution.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-the-invoice-payment-method-for-payolution.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/integrate-the-invoice-payment-method-for-payolution.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/integrate-the-invoice-payment-method-for-payolution.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution-performing-requests.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution-performing-requests.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution-performing-requests.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution-performing-requests.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md index b9081b1b035..0d9cde2aa13 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution-request-flow.md @@ -31,6 +31,6 @@ Both [invoice](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop - Capture: to capture the payment and receive money from the buyer. - Refund: to refund the buyer when returning products. -![Click Me](https://spryker.s3.eu-central-1.amazonaws.com/docs/Technology+Partners/Payment+Partners/Payolution/payolution-workflow.png) +![Click Me](https://spryker.s3.eu-central-1.amazonaws.com/docs/Technology+Partners/Payment+Partners/Payolution/payolution-workflow.png) See Payolution - [Performing Requests](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payolution/payolution-performing-requests.html) for detailed information on the requests. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payolution/payolution.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payolution/payolution.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/disconnect-payone.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/disconnect-payone.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/disconnect-payone.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/disconnect-payone.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md new file mode 100644 index 00000000000..33ad36defd4 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/integrate-payone.md @@ -0,0 +1,439 @@ +--- +title: Integrate Payone +description: Learn how you can integrate the Payone app into your Spryker shop using Spryker App Composition Platform. +template: howto-guide-template +last_updated: Sep 22, 2025 +redirect_from: + - /docs/pbc/all/payment-service-providers/payone/integrate-payone.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/payone/integration-in-the-back-office/integrate-payone.html + - /docs/pbc/all/payment-service-provider/202404.0/base-shop/third-party-integrations/payone/integration-in-the-back-office/integrate-payone.html +--- + +This document describes how to integrate Payone using the Payone app. + +## Prerequisites + +- Fulfill [App Composition Platform prerequisites](/docs/dg/dev/acp/install-prerequisites-and-enable-acp.html). +- Install the modules for Payone. To check the list of required modules and their versions, in the Back Office, go to **Apps**>**Payone**. The list of modules is displayed in **Requirements** > **Spryker module list** section. + + +## Integrate Payone + +{% info_block infoBox "" %} + +Your project codebase can already have some of the changes described in this guide. Adjust the code according to your codebase. + +{% endinfo_block %} + +To integrate Payone, follow the steps: + +1. Configure shared configs: + +
      + config/Shared/config_default.php + +```php +use Spryker\Shared\MessageBroker\MessageBrokerConstants; +use Spryker\Shared\OauthClient\OauthClientConstants; +use Spryker\Shared\Oms\OmsConstants; +use Spryker\Shared\Payment\PaymentConstants; +use Spryker\Shared\Sales\SalesConstants; +use Spryker\Zed\MessageBrokerAws\MessageBrokerAwsConfig; +use Spryker\Zed\Payment\PaymentConfig; + +//... +$trustedHosts + = $config[HttpConstants::ZED_TRUSTED_HOSTS] + = $config[HttpConstants::YVES_TRUSTED_HOSTS] + = array_filter(explode(',', getenv('SPRYKER_TRUSTED_HOSTS') ?: '')); + +$config[KernelConstants::DOMAIN_WHITELIST] = array_merge($trustedHosts, [ + $sprykerBackendHost, + $sprykerFrontendHost, + //... + 'threedssvc.pay1.de', // trusted Payone domain + 'www.sofort.com', // trusted Payone domain + +]); +$config[PaymentConstants::TENANT_IDENTIFIER] + = $config[KernelAppConstants::TENANT_IDENTIFIER] + = getenv('SPRYKER_TENANT_IDENTIFIER') ?: ''; + +$config[OmsConstants::PROCESS_LOCATION] = [ + //... + OmsConfig::DEFAULT_PROCESS_LOCATION, + APPLICATION_ROOT_DIR . '/vendor/spryker/sales-payment/config/Zed/Oms', # this line must be added if your use unmodified ForeignPaymentStateMachine01.xml +]; +$config[OmsConstants::ACTIVE_PROCESSES] = [ + //... + 'ForeignPaymentStateMachine01', # this line must be added or add your modified version of this OMS +]; +$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + //... + PaymentConfig::PAYMENT_FOREIGN_PROVIDER => 'ForeignPaymentStateMachine01', # this line must be added or add your modified version of this OMS +]; + +$config[MessageBrokerConstants::MESSAGE_TO_CHANNEL_MAP] = [ + //... + AddPaymentMethodTransfer::class => 'payment-method-commands', + UpdatePaymentMethodTransfer::class => 'payment-method-commands', + DeletePaymentMethodTransfer::class => 'payment-method-commands', + CancelPaymentTransfer::class => 'payment-commands', + CapturePaymentTransfer::class => 'payment-commands', + RefundPaymentTransfer::class => 'payment-commands', + PaymentAuthorizedTransfer::class => 'payment-events', + PaymentAuthorizationFailedTransfer::class => 'payment-events', + PaymentCapturedTransfer::class => 'payment-events', + PaymentCaptureFailedTransfer::class => 'payment-events', + PaymentRefundedTransfer::class => 'payment-events', + PaymentRefundFailedTransfer::class => 'payment-events', + PaymentCanceledTransfer::class => 'payment-events', + PaymentCancellationFailedTransfer::class => 'payment-events', + PaymentCreatedTransfer::class => 'payment-events', + PaymentUpdatedTransfer::class => 'payment-events', + PaymentOverpaidTransfer::class => 'payment-events', + PaymentUnderpaidTransfer::class => 'payment-events', +]; + +$config[MessageBrokerConstants::CHANNEL_TO_RECEIVER_TRANSPORT_MAP] = [ + //... + 'payment-events' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, + 'payment-method-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, +]; + +$config[MessageBrokerConstants::CHANNEL_TO_SENDER_TRANSPORT_MAP] = [ + //... + 'payment-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, +]; + +// ---------------------------------------------------------------------------- +// ------------------------------ OAUTH --------------------------------------- +// ---------------------------------------------------------------------------- +//... +$config[AppCatalogGuiConstants::OAUTH_PROVIDER_NAME] + = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_ACP] + = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_MESSAGE_BROKER] + = $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_PAYMENT_AUTHORIZE] + = OauthAuth0Config::PROVIDER_NAME; +$config[OauthClientConstants::OAUTH_GRANT_TYPE_FOR_PAYMENT_AUTHORIZE] = OauthAuth0Config::GRANT_TYPE_CLIENT_CREDENTIALS; +$config[OauthClientConstants::OAUTH_OPTION_AUDIENCE_FOR_ACP] + = $config[TaxAppConstants::OAUTH_OPTION_AUDIENCE] + = $config[OauthClientConstants::OAUTH_OPTION_AUDIENCE_FOR_PAYMENT_AUTHORIZE] = 'aop-app'; +``` + +
      + +2. Configure dependencies in `MessageBroker`: + +
      + src/Pyz/Zed/MessageBroker/MessageBrokerDependencyProvider.php + +```php +namespace Pyz\Zed\MessageBroker; + +use Spryker\Zed\MessageBroker\MessageBrokerDependencyProvider as SprykerMessageBrokerDependencyProvider; +use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentMethodMessageHandlerPlugin; +use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin; +use Spryker\Zed\SalesPaymentDetail\Communication\Plugin\MessageBroker\PaymentCreatedMessageHandlerPlugin; +use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\CorrelationIdMessageAttributeProviderPlugin; +use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TenantActorMessageAttributeProviderPlugin; +use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TimestampMessageAttributeProviderPlugin; +use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\TransactionIdMessageAttributeProviderPlugin; +use Spryker\Zed\MessageBroker\Communication\Plugin\MessageBroker\ValidationMiddlewarePlugin; +use Spryker\Zed\OauthClient\Communication\Plugin\MessageBroker\AccessTokenMessageAttributeProviderPlugin; +use Spryker\Zed\Session\Communication\Plugin\MessageBroker\SessionTrackingIdMessageAttributeProviderPlugin; +use Spryker\Zed\Store\Communication\Plugin\MessageBroker\CurrentStoreReferenceMessageAttributeProviderPlugin; + +class MessageBrokerDependencyProvider extends SprykerMessageBrokerDependencyProvider +{ + /** + * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageHandlerPluginInterface> + */ + public function getMessageHandlerPlugins(): array + { + return [ + //... + new PaymentOperationsMessageHandlerPlugin(); + new PaymentMethodMessageHandlerPlugin(), + new PaymentCreatedMessageHandlerPlugin(), // [Optional] This plugin is handling the `PaymentCreated`/`PaymentUpdated` messages sent from Payone ACP app. + ]; + } + + /** + * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageAttributeProviderPluginInterface> + */ + public function getMessageAttributeProviderPlugins(): array + { + return [ + new CorrelationIdMessageAttributeProviderPlugin(), + new TimestampMessageAttributeProviderPlugin(), + new AccessTokenMessageAttributeProviderPlugin(), + new TransactionIdMessageAttributeProviderPlugin(), + new SessionTrackingIdMessageAttributeProviderPlugin(), + new TenantActorMessageAttributeProviderPlugin(), + new CurrentStoreReferenceMessageAttributeProviderPlugin(), + ]; + } + + + /** + * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MiddlewarePluginInterface> + */ + public function getMiddlewarePlugins(): array + { + return [ + new ValidationMiddlewarePlugin(), + ]; + } +} +``` + +
      + +3. Configure channels in the `MessageBroker` configuration: + +**src/Pyz/Zed/MessageBroker/MessageBrokerConfig.php** + +```php +namespace Pyz\Zed\MessageBroker; + +use Spryker\Zed\MessageBroker\MessageBrokerConfig as SprykerMessageBrokerConfig; + +class MessageBrokerConfig extends SprykerMessageBrokerConfig +{ + /** + * @return array + */ + public function getDefaultWorkerChannels(): array + { + return [ + //... + 'payment-events', + 'payment-method-commands', + ]; + } + + //... +} +``` + +4. Configure the `Payment` module: + +**src/Pyz/Zed/Payment/PaymentConfig.php** + +```php +namespace Pyz\Zed\Payment; + +use Generated\Shared\Transfer\ExpenseTransfer; +use Generated\Shared\Transfer\GiftCardTransfer; +use Generated\Shared\Transfer\ItemTransfer; +use Generated\Shared\Transfer\QuoteTransfer; +use Generated\Shared\Transfer\TaxTotalTransfer; +use Generated\Shared\Transfer\TotalsTransfer; +use Spryker\Zed\Payment\PaymentConfig as SprykerPaymentConfig; + +class PaymentConfig extends SprykerPaymentConfig +{ + public function getQuoteFieldsForForeignPayment(): array + { + return array_merge_recursive(parent::getQuoteFieldsForForeignPayment(), [ + QuoteTransfer::TOTALS => [ + TotalsTransfer::DISCOUNT_TOTAL => 'discountTotal', + TotalsTransfer::TAX_TOTAL => [ + TaxTotalTransfer::AMOUNT => 'taxTotal', + ], + ], + QuoteTransfer::ITEMS => [ + ItemTransfer::TAX_RATE => 'taxRate', + ], + QuoteTransfer::EXPENSES => [ + ExpenseTransfer::TAX_RATE => 'taxRate', + ], + QuoteTransfer::GIFT_CARDS => [ + GiftCardTransfer::ACTUAL_VALUE => 'actualValue', + ], + ]); + } +} +``` + +5. Configure plugins in `Checkout`: + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php +namespace Pyz\Zed\Checkout; + +use Spryker\Zed\Checkout\CheckoutDependencyProvider as SprykerCheckoutDependencyProvider; +use Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentAuthorizationCheckoutPostSavePlugin; + +class CheckoutDependencyProvider extends SprykerCheckoutDependencyProvider +{ + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooks(Container $container): array + { + return [ + //... + new PaymentAuthorizationCheckoutPostSavePlugin(), + ]; + } +} +``` + +6. Configure plugins in `CheckoutPage`: + +**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php** + +```php +namespace Pyz\Yves\CheckoutPage; + +use SprykerShop\Yves\CheckoutPage\CheckoutPageDependencyProvider as SprykerShopCheckoutPageDependencyProvider; +use SprykerShop\Yves\PaymentPage\Plugin\PaymentPage\PaymentForeignPaymentCollectionExtenderPlugin; + +class CheckoutPageDependencyProvider extends SprykerShopCheckoutPageDependencyProvider +{ + /** + * @return array<\SprykerShop\Yves\CheckoutPageExtension\Dependency\Plugin\PaymentCollectionExtenderPluginInterface> + */ + protected function getPaymentCollectionExtenderPlugins(): array + { + return [ + //... + new PaymentForeignPaymentCollectionExtenderPlugin(), + ]; + } +} +``` + +7. Configure plugins in `Router`: + +**src/Pyz/Yves/Router/RouterDependencyProvider.php** + +```php +namespace Pyz\Yves\Router; + +use Spryker\Yves\Router\RouterDependencyProvider as SprykerRouterDependencyProvider; +use SprykerShop\Yves\PaymentPage\Plugin\Router\PaymentPageRouteProviderPlugin; + +class RouterDependencyProvider extends SprykerRouterDependencyProvider +{ + /** + * @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface> + */ + protected function getRouteProvider(): array + { + $routeProviders = [ + //... + new PaymentPageRouteProviderPlugin(), + ]; + } +} +``` + +8. Configure plugins in `Oms`: + +**\Pyz\Zed\Oms\OmsDependencyProvider** + +```php +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCancelPaymentMessageCommandPlugin; +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCapturePaymentMessageCommandPlugin; +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendRefundPaymentMessageCommandPlugin; +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\RefundCommandPlugin; + + +protected function extendCommandPlugins(Container $container): Container +{ + $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + //... + // ----- Payone commands ----- + $commandCollection->add(new SendCapturePaymentMessageCommandPlugin(), 'Payment/Capture'); + $commandCollection->add(new SendRefundPaymentMessageCommandPlugin(), 'Payment/Refund'); + $commandCollection->add(new RefundCommandPlugin(), 'Payment/Refund/Confirm'); + $commandCollection->add(new SendCancelPaymentMessageCommandPlugin(), 'Payment/Cancel'); + }); +} +``` + +9. In `src/Pyz/Zed/KernelApp/KernelAppDependencyProvider.php`, add or update the following plugins: + + +```php +// ... + +use Spryker\Zed\OauthClient\Communication\Plugin\KernelApp\OAuthRequestExpanderPlugin; + + // ... + + /** + * @return array<\Spryker\Shared\KernelAppExtension\RequestExpanderPluginInterface> + */ + public function getRequestExpanderPlugins(): array + { + return [ + new OAuthRequestExpanderPlugin(), + ]; + } + +``` + +10. [Integrate Payone into OMS](/docs/dg/dev/acp/integrate-acp-payment-apps-with-spryker-oms-configuration.html#configuring-oms-for-your-project). + +### Introduce template changes in `CheckoutPage` + +If you rewrote `@CheckoutPage/views/payment/payment.twig` on the project level, do the following: + +1. Make sure that the form molecule uses the following code for the payment selection choices: + +```twig +{% raw %} +{% for name, choices in data.form.paymentSelection.vars.choices %} + ... + {% embed molecule('form') with { + data: { + form: data.form[data.form.paymentSelection[key].vars.name], + ... + } + {% endembed %} +{% endfor %} +{% endraw %} +``` + +2. Payment provider names now have glossary keys instead of a name itself. To accommodate this change, configure names to be translated according to your glossary: + +```twig +{% raw %} +{% for name, choices in data.form.paymentSelection.vars.choices %} + ... +
      {{ name | trans }}
      +{% endfor %} +{% endraw %} +``` + +3. Optional: Add the glossary keys for all the new external payment providers and methods to your glossary data import file. Example: + +```csv +... +Payone,Payone Payments,en_US +Credit Card,Credit Card (Payone),en_US +``` + +4. Import the glossary: + +```bash +console data:import glossary +``` + +## Optional: Show payment details in the Back Office Order Details page + + +1. Install the `spryker/sales-payment-detail: ^1.2.0` module. +2. [Retrieve and use payment details from third-party PSPs](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/retrieve-and-use-payment-details-from-third-party-psps.html). + + +## Next steps + +[Configure the Payone app](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/configure-payone.html) for your store. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md index cffe86b77a8..2ac26bdc2bf 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.md @@ -7,7 +7,7 @@ related: - title: PayOne PayPal Express payment flow in headless applications url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.html - title: Payone PayPal payment flow - url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html + url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html --- When customers pay with a credit card, the flow is as follows: diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md index 4809befdbe5..a950b3b2c22 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-express-payment-flow-in-headless-applications.md @@ -7,7 +7,7 @@ related: - title: PayOne Credit Card payment flow url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.html - title: Payone PayPal payment flow - url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html + url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html --- ## PayPal Express for checkout in a headless application diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md index 2454775b9f4..492080254df 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.md @@ -7,7 +7,7 @@ related: - title: PayOne Credit Card payment flow url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-credit-card-payment-flow.html - title: PayOne PayPal Express payment flow in headless applications - url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html + url: docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/payone/app-composition-platform-integration/payment-method-flows/payone-paypal-payment-flow.html --- When customers pay with PayPal, the flow is as follows: diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md similarity index 93% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md index 5e7b7d3001d..8abf3d956d6 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.md @@ -4,6 +4,8 @@ description: With Payone, your customers can pay with common payment methods, su template: howto-guide-template last_updated: Dec 18, 2024 redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.html + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/app-composition-platform-integration/payone-acp-app.html - /docs/aop/user/apps/payone.html - /docs/acp/user/apps/payone.html - /docs/pbc/all/payment-service-providers/payone/payone.html diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md new file mode 100644 index 00000000000..a9e45884dde --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.md @@ -0,0 +1,484 @@ +--- +title: Integrate PayOne +description: Integrate Payone into the Spryker Commerce OS by following the instructions from this article. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/payone-integration-with-project-scos +originalArticleId: a86017aa-d5ce-44cf-b568-6cda73261766 +redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/payone/manual-integration/integrate-payone.html + - /docs/scos/user/technology-partners/202311.0/payment-partners/bs-payone/scos-integration/payone-integration-into-the-scos-project.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/payone/manual-integration/integrate-payone.html +--- + +{% info_block errorBox %} + +PayOne is not compatible with gift cards. We will update this document once the issue is resolved. + +{% endinfo_block %} + +**Objectives:** +- Place order with PayPal express checkout. +- Be redirected to summary page of standard checkout. +- Have a shipping method selector on summary page. + +## Frontend Update + +To make JavaScript and CSS styles enabled in the Suite, update: +`/tsconfig.json` in section "include": + +```php +./vendor/spryker-eco/**/*", +``` + +Update `/frontend/settings.js`: + +add entry to 'paths': + +```php +// eco folders +eco: { + // all modules + modules: './vendor/spryker-eco' +}, +``` + +add one more directory to `module.exports.find.componentEntryPoints.dirs`: + +```php +path.join(context, paths.eco.modules) +``` + +Run `npm run yves` after applying these changes. +Because of the pending update to Suite, you also have to apply Checkout template `.../src/Pyz/Yves/CheckoutPage/Theme/default/views/payment/payment.twig` update: + +```xml +{% raw %}{%{% endraw %} extends template('page-layout-checkout', 'CheckoutPage') {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} define data = { + backUrl: _view.previousStepUrl, + forms: { + payment: _view.paymentForm + }, + title: 'checkout.step.payment.title' | trans +} {% raw %}%}{% endraw %} + +{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} embed molecule('form') with { + class: 'box', + data: { + form: data.forms.payment, + options: { + attr: { + id: 'payment-form' + } + }, + submit: { + enable: true, + text: 'checkout.step.summary' | trans + }, + cancel: { + enable: true, + url: data.backUrl, + text: 'general.back.button' | trans + } + } + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block fieldset {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} for name, choices in data.form.paymentSelection.vars.choices {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} set paymentProviderIndex = loop.index0 {% raw %}%}{% endraw %} +
      {% raw %}{{{% endraw %} ('checkout.payment.provider.' ~ name) | trans {% raw %}}}{% endraw %}
      +
        + {% raw %}{%{% endraw %} for key, choice in choices {% raw %}%}{% endraw %} +
      • + {% raw %}{%{% endraw %} embed molecule('form') with { + data: { + form: data.form[data.form.paymentSelection[key].vars.value], + enableStart: false, + enableEnd: false + }, + embed: { + index: loop.index ~ '-' ~ paymentProviderIndex, + toggler: data.form.paymentSelection[key], + } + } only {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} block fieldset {% raw %}%}{% endraw %} + {% raw %}{{{% endraw %} form_row(embed.toggler, { + required: false, + component: molecule('toggler-radio'), + attributes: { + 'target-selector': '.js-payment-method-' ~ embed.index, + 'class-to-toggle': 'is-hidden' + } + }) {% raw %}}}{% endraw %} + + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} +
      • + {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} +
      + {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endembed {% raw %}%}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +Run `console cache:empty` afterwards to make this template used during rendering. + +## Backend Update + +First of all we need to provide a URL to Payone module, which will be used to redirect user when the quote is filled with data obtained from PayPal. + To achieve this, make the following steps: + +1. Add custom controller action to `src/Pyz/Yves/Checkout/Controller/CheckoutController.php`: + +```php +/** +* @return \Symfony\Component\HttpFoundation\RedirectResponse +*/ +public function paypalExpressCheckoutEntryPointAction() +{ +$this->getFactory() +->createExpressCheckoutHandler() +->fulfillPostConditionsUntilSummaryStep(); +return $this->redirectResponseInternal(CheckoutPageControllerProvider::CHECKOUT_SUMMARY); +} +``` + +2. Register a new controller action in controller provider: + +```php +... +const CHECKOUT_PAYPAL_EXPRESS_CHECKOUT_ENTRY_POINT = 'checkout-paypal-express-checkout-entry-point'; +... +protected function defineControllers(Application $app) +{ +... +$this->createController('/{checkout}/paypal-express-checkout-entry-point', self::CHECKOUT_PAYPAL_EXPRESS_CHECKOUT_ENTRY_POINT, 'Checkout', 'Checkout', 'paypalExpressCheckoutEntryPoint') +->assert('checkout', $allowedLocalesPattern . 'checkout|checkout') +->value('checkout', 'checkout') +->method('GET'); +... +} +``` + +3. Create `ExpressCheckoutHandler` class `src/Pyz/Yves/CheckoutPage/Handler/ExpressCheckoutHandler.php` with corresponding interface: + +```php +namespace Pyz\Yves\CheckoutPage\Handler; +use Generated\Shared\Transfer\ExpenseTransfer; +use Spryker\Client\Cart\CartClientInterface; +use Spryker\Shared\Shipment\ShipmentConstants; +class ExpressCheckoutHandler implements ExpressCheckoutHandlerInterface +{ +/** +* @var \Spryker\Client\Cart\CartClientInterface +*/ +protected $cartClient; +/** +* @param \Spryker\Client\Cart\CartClientInterface $cartClient +*/ +public function __construct(CartClientInterface $cartClient) +{ +$this->cartClient = $cartClient; +} +/** +* @return void +*/ +public function fulfillPostConditionsUntilSummaryStep() +{ +$quoteTransfer = $this->cartClient->getQuote(); +$quoteTransfer->addExpense( +(new ExpenseTransfer())->setType(ShipmentConstants::SHIPMENT_EXPENSE_TYPE) +); +} +} +``` + +4. Add `ExpressCheckoutHandler` related method in `src/Pyz/Yves/CheckoutPage/CheckoutPageFactory.php`: + +```php +/** +* @return \Pyz\Yves\CheckoutPage\Handler\ExpressCheckoutHandler +*/ +public function createExpressCheckoutHandler() +{ +return new ExpressCheckoutHandler( +$this->getCartClient() +); +} +``` + +5. Extend `ShipmentForm` class to override a property_path option (create `src/Pyz/Yves/Shipment/Form/ShipmentSubForm.php`): + +```php +namespace Pyz\Yves\Shipment\Form; +class ShipmentSubForm extends ShipmentForm +{ +/** +* @const string +*/ +const SHIPMENT_SELECTION_PROPERTY_PATH = self::SHIPMENT_SELECTION; +} +``` + +6. Adjust summary form by adding a shipment subform in `src/Pyz/Yves/CheckoutPage/Form/Steps/SummaryForm.php`: + +```php +class SummaryForm extends AbstractType +{ +/** +* Builds the form. +* +* This method is called for each type in the hierarchy starting from the +* top most type. Type extensions can further modify the form. +* +* @see FormTypeExtensionInterface::buildForm() +* +* @param \Symfony\Component\Form\FormBuilderInterface $builder The form builder +* @param array $options The options +* +* @return void +*/ +public function buildForm(FormBuilderInterface $builder, array $options) +{ +$builder->add( +'shipmentForm', +ShipmentSubForm::class, +array_merge( +$options, +[ +'data_class' => ShipmentTransfer::class, +'property_path' => 'shipment', +] +) +); +} +/** +* @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver +* +* @return void +*/ +public function configureOptions(OptionsResolver $resolver) +{ +$resolver->setRequired('shipmentMethods'); +$resolver->setDefaults([ +'data_class' => QuoteTransfer::class, +]); +} +/** +* Returns the name of this type. +* +* @return string The name of this type +*/ +public function getName() +{ +return 'summaryForm'; +} +} +``` + +7. Create shipment subform template for summary page in `src/Pyz/Yves/CheckoutPage/Theme/default/checkout/partials/shipment.twig`: + +```php + +
      + + {% raw %}{%{% endraw %} set shipmentForm = summaryForm.shipmentForm {% raw %}%}{% endraw %} + +
      +
        + + {% raw %}{%{% endraw %} for name, choices in shipmentForm.idShipmentMethod.vars.choices {% raw %}%}{% endraw %} + +

        {% raw %}{{{% endraw %} name {% raw %}}}{% endraw %}

        + + {% raw %}{%{% endraw %} for key, choice in choices {% raw %}%}{% endraw %} +
      • + +
      • + {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} + {% raw %}{%{% endraw %} endfor {% raw %}%}{% endraw %} +
      +
      +
      +``` + +8. Update summary twig template in `src/Pyz/Yves/CheckoutPage/Theme/default/checkout/summary.twig`. +Move `"form_start"` expression to the top of a content section and `"form_end"` to the end: + +```php +... +{% raw %}{%{% endraw %} block content {% raw %}%}{% endraw %} +{% raw %}{{{% endraw %} form_start(summaryForm, {'attr': {'class': 'row'{% raw %}}}{% endraw %}) {% raw %}}}{% endraw %} +... +... +... +{% raw %}{{{% endraw %} form_end(summaryForm) {% raw %}}}{% endraw %} +{% raw %}{%{% endraw %} endblock {% raw %}%}{% endraw %} +``` + +9. Remove `{% raw %}{%{% endraw %} include '@checkout/checkout/partials/voucher-form.twig' {% raw %}%}{% endraw %}` include from summary template. Include `checkout/partials/shipment.twig` in your summary template: + +```php + ... +{% raw %}{{{% endraw %} 'checkout.step.summary.shipping' | trans {% raw %}}}{% endraw %} + {% raw %}{%{% endraw %} include '@checkout/checkout/partials/shipment.twig' {% raw %}%}{% endraw %} + ... +``` + +10. Add shipment form data provider and remove voucher form from summary form collection(It is just an example, if you need voucher form, you need to adjust summary page on your own). In `src/Pyz/Yves/CheckoutPage/Form/FormFactory.php`: + +```php +/** +* @param \Generated\Shared\Transfer\QuoteTransfer +* +* @return \Spryker\Yves\StepEngine\Form\FormCollectionHandlerInterface +*/ +public function createSummaryFormCollection() +{ +return $this->createFormCollection($this->createSummaryFormTypes(), $this->getShipmentFormDataProviderPlugin()); +} + +.... + + +/** +* @return \Symfony\Component\Form\FormTypeInterface[] +*/ +protected function createSummaryFormTypes() +{ +return [ +$this->createSummaryForm(), +//$this->createVoucherFormType(), +]; +} +``` + +11. Handle shipment form data, when summary form is submitted. Inject two dependencies into `src/Pyz/Yves/CheckoutPage/Process/Steps/SummaryStep.php`: + +```php +/** +* @var \Spryker\Client\Calculation\CalculationClientInterface +*/ +protected $calculationClient; +/** +* @var \Spryker\Yves\StepEngine\Dependency\Plugin\Handler\StepHandlerPluginCollection +*/ +protected $shipmentPlugins; +/** +* @param \Spryker\Yves\ProductBundle\Grouper\ProductBundleGrouperInterface $productBundleGrouper +* @param \Spryker\Client\Cart\CartClientInterface $cartClient +* @param \Spryker\Client\Calculation\CalculationClientInterface $calculationClient +* @param \Spryker\Client\Calculation\CalculationClientInterface $shipmentPlugins +* @param string $stepRoute +* @param string $escapeRoute +*/ +public function __construct( +ProductBundleGrouperInterface $productBundleGrouper, +CartClientInterface $cartClient, +CalculationClientInterface $calculationClient, +StepHandlerPluginCollection $shipmentPlugins, +$stepRoute, +$escapeRoute +) { +parent::__construct($stepRoute, $escapeRoute); +$this->productBundleGrouper = $productBundleGrouper; +$this->cartClient = $cartClient; +$this->calculationClient = $calculationClient; +$this->shipmentPlugins = $shipmentPlugins; +} +``` + +12. Extend `execute` method: + +```php +/** +* @param \Symfony\Component\HttpFoundation\Request $request +* @param \Spryker\Shared\Kernel\Transfer\AbstractTransfer|\Generated\Shared\Transfer\QuoteTransfer $quoteTransfer +* +* @return \Generated\Shared\Transfer\QuoteTransfer +*/ +public function execute(Request $request, AbstractTransfer $quoteTransfer) +{ +$shipmentHandler = $this->shipmentPlugins->get(CheckoutPageDependencyProvider::PLUGIN_SHIPMENT_STEP_HANDLER); +$shipmentHandler->addToDataClass($request, $quoteTransfer); +$this->calculationClient->recalculate($quoteTransfer); +$this->markCheckoutConfirmed($request, $quoteTransfer); +return $quoteTransfer; +} +``` + +13. Add the Payone checkout plugins to `Pyz\Zed\Checkout\CheckoutDependencyProvider`: + +```php +**Stripe**. + +2. Add or update the shared configs: + +
      + config/Shared/config_default.php + + ```php + //... + + use Generated\Shared\Transfer\PaymentCaptureFailedTransfer; + use Generated\Shared\Transfer\CapturePaymentTransfer; + use Generated\Shared\Transfer\PaymentCapturedTransfer; + use Generated\Shared\Transfer\AddPaymentMethodTransfer; + use Generated\Shared\Transfer\DeletePaymentMethodTransfer; + use Generated\Shared\Transfer\PaymentAuthorizationFailedTransfer; + use Generated\Shared\Transfer\PaymentAuthorizedTransfer; + use Spryker\Shared\MessageBroker\MessageBrokerConstants; + use Spryker\Shared\KernelApp\KernelAppConstants; + use Spryker\Shared\OauthClient\OauthClientConstants; + use Spryker\Shared\Oms\OmsConstants; + use Spryker\Shared\Payment\PaymentConstants; + use Spryker\Shared\Sales\SalesConstants; + use Spryker\Zed\MessageBrokerAws\MessageBrokerAwsConfig; + use Spryker\Zed\Oms\OmsConfig; + use Spryker\Zed\Payment\PaymentConfig; + + //... + $config[PaymentConstants::TENANT_IDENTIFIER] = getenv('SPRYKER_TENANT_IDENTIFIER') ?: ''; + $config[KernelAppConstants::TENANT_IDENTIFIER] = getenv('SPRYKER_TENANT_IDENTIFIER') ?: ''; + + $config[OauthClientConstants::OAUTH_PROVIDER_NAME_FOR_ACP] = OauthAuth0Config::PROVIDER_NAME; + $config[OauthClientConstants::OAUTH_GRANT_TYPE_FOR_ACP] = OauthAuth0Config::GRANT_TYPE_CLIENT_CREDENTIALS; + $config[OauthClientConstants::OAUTH_OPTION_AUDIENCE_FOR_ACP] = 'aop-app' + + $config[OmsConstants::PROCESS_LOCATION] = [ + //... + OmsConfig::DEFAULT_PROCESS_LOCATION, + APPLICATION_ROOT_DIR . '/vendor/spryker/sales-payment/config/Zed/Oms', # this line must be added if you use unmodified ForeignPaymentStateMachine01.xml + ]; + $config[OmsConstants::ACTIVE_PROCESSES] = [ + //... + 'ForeignPaymentB2CStateMachine01', # this line must be added or add your modified version of this OMS + ]; + $config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + //... + PaymentConfig::PAYMENT_FOREIGN_PROVIDER => 'ForeignPaymentB2CStateMachine01', # this line must be added or add your modified version of this OMS + ]; + + $config[MessageBrokerConstants::MESSAGE_TO_CHANNEL_MAP] = [ + //... + AddPaymentMethodTransfer::class => 'payment-method-commands', + UpdatePaymentMethodTransfer::class => 'payment-method-commands' + DeletePaymentMethodTransfer::class => 'payment-method-commands', + CancelPaymentTransfer::class => 'payment-commands', + CapturePaymentTransfer::class => 'payment-commands', + RefundPaymentTransfer::class => 'payment-commands', + PaymentAuthorizedTransfer::class => 'payment-events', + PaymentAuthorizationFailedTransfer::class => 'payment-events', + PaymentCapturedTransfer::class => 'payment-events', + PaymentCaptureFailedTransfer::class => 'payment-events', + PaymentRefundedTransfer::class => 'payment-events', + PaymentRefundFailedTransfer::class => 'payment-events', + PaymentCanceledTransfer::class => 'payment-events', + PaymentCancellationFailedTransfer::class => 'payment-events', + + # [Optional] This message can be received from your project when you want to use details of the Stripe App used payment. + PaymentCreatedTransfer::class => 'payment-events', + PaymentUpdatedTransfer::class => 'payment-events' + ]; + + $config[MessageBrokerConstants::CHANNEL_TO_RECEIVER_TRANSPORT_MAP] = [ + //... + 'payment-method-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, + 'payment-events' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, + ]; + + $config[MessageBrokerConstants::CHANNEL_TO_SENDER_TRANSPORT_MAP] = [ + //... + 'payment-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, + ]; + + ``` + +
      + +3. In `src/Pyz/Zed/MessageBroker/MessageBrokerDependencyProvider.php`, add or update the config of the Message Broker dependency provider: + +```php + +namespace Pyz\Zed\MessageBroker; + +use Spryker\Zed\MessageBroker\MessageBrokerDependencyProvider as SprykerMessageBrokerDependencyProvider; +use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentOperationsMessageHandlerPlugin; +use Spryker\Zed\Payment\Communication\Plugin\MessageBroker\PaymentMethodMessageHandlerPlugin; +use Spryker\Zed\SalesPaymentDetail\Communication\Plugin\MessageBroker\SalesPaymentDetailMessageHandlerPlugin; + +class MessageBrokerDependencyProvider extends SprykerMessageBrokerDependencyProvider +{ + /** + * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageHandlerPluginInterface> + */ + public function getMessageHandlerPlugins(): array + { + return [ + //... + # These plugins are handling messages sent from the Stripe app to your project. + new PaymentOperationsMessageHandlerPlugin(), + new PaymentMethodMessageHandlerPlugin(), + + # [Optional] This plugin handles the `PaymentCreated` and `PaymentUpdated` messages sent from the Stripe App. + new SalesPaymentDetailMessageHandlerPlugin(), + ]; + } +} + +``` + +4. In `src/Pyz/Zed/MessageBroker/MessageBrokerConfig.php`, add or update the channels config in the message broker config: + +```php +namespace Pyz\Zed\MessageBroker; + +use Spryker\Zed\MessageBroker\MessageBrokerConfig as SprykerMessageBrokerConfig; + +class MessageBrokerConfig extends SprykerMessageBrokerConfig +{ + /** + * @return array + */ + public function getDefaultWorkerChannels(): array + { + return [ + //... + 'payment-events', + 'payment-method-commands', + ]; + } + + //... +} +``` + +5. In `src/Pyz/Zed/Oms/OmsDependencyProvider.php`, add or update the OMS config: + + +```php +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCapturePaymentMessageCommandPlugin; +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendRefundPaymentMessageCommandPlugin; +use Spryker\Zed\SalesPayment\Communication\Plugin\Oms\SendCancelPaymentMessageCommandPlugin; + +//... + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ + protected function extendCommandPlugins(Container $container): Container + { + $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + //... + $commandCollection->add(new SendCapturePaymentMessageCommandPlugin(), 'Payment/Capture'); + // These two commands will be also supported soon by ACP Stripe app. + $commandCollection->add(new SendRefundPaymentMessageCommandPlugin(), 'Payment/Refund'); + $commandCollection->add(new SendCancelPaymentMessageCommandPlugin(), 'Payment/Cancel'); + + return $commandCollection; + }); + + return $container; + } + +``` + +6. In `src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php`, add or update the following plugins: + + +```php +// ... + +use Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentAuthorizationCheckoutPostSavePlugin; +use Spryker\Zed\Payment\Communication\Plugin\Checkout\PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin; + + // ... + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\CheckoutExtension\Dependency\Plugin\CheckoutPostSaveInterface> + */ + protected function getCheckoutPostHooks(Container $container): array + { + return [ + //... + new PaymentAuthorizationCheckoutPostSavePlugin(), + new PaymentConfirmPreOrderPaymentCheckoutPostSavePlugin(), + ]; + } + +``` + +7. In `src/Pyz/Yves/Router/RouterDependencyProvider.php`, add or update the following plugins: + + +```php +// ... + +use SprykerShop\Yves\PaymentPage\Plugin\Router\PaymentPageRouteProviderPlugin; + + // ... + + /** + * @return array<\Spryker\Yves\RouterExtension\Dependency\Plugin\RouteProviderPluginInterface> + */ + protected function getRouteProvider(): array + { + $routeProviders = [ + ... + new PaymentPageRouteProviderPlugin(), + ... + ]; + } + +``` + +8. In `src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php`, add or update the following plugins: + + +```php +// ... + +use SprykerShop\Yves\PaymentPage\Plugin\PaymentPage\PaymentForeignPaymentCollectionExtenderPlugin; + + // ... + + /** + * @return array<\SprykerShop\Yves\CheckoutPageExtension\Dependency\Plugin\PaymentCollectionExtenderPluginInterface> + */ + protected function getPaymentCollectionExtenderPlugins(): array + { + return [ + new PaymentForeignPaymentCollectionExtenderPlugin(), + ]; + } + +``` + +9. In `src/Pyz/Zed/KernelApp/KernelAppDependencyProvider.php`, add or update the following plugins: + + +```php +// ... + +use Spryker\Zed\OauthClient\Communication\Plugin\KernelApp\OAuthRequestExpanderPlugin; + + // ... + + /** + * @return array<\Spryker\Shared\KernelAppExtension\RequestExpanderPluginInterface> + */ + public function getRequestExpanderPlugins(): array + { + return [ + new OAuthRequestExpanderPlugin(), + ]; + } + +``` + +## Configure Glue application to add new API endpoints + +In `src/Pyz/Glue/GlueApplication/GlueApplicationDependencyProvider.php`, add or update the following plugins: + +```php +use Spryker\Glue\PaymentsRestApi\Plugin\GlueApplication\PaymentCancellationsResourceRoutePlugin; +use Spryker\Glue\PaymentsRestApi\Plugin\GlueApplication\PaymentsResourceRoutePlugin; + + // ... + + /** + * @return array<\Spryker\Glue\GlueApplicationExtension\Dependency\Plugin\ResourceRoutePluginInterface> + */ + protected function getResourceRoutePlugins(): array + { + return [ + //... + new PaymentsResourceRoutePlugin(), + new PaymentCancellationsResourceRoutePlugin(), + ]; + } + +``` + +## Headless application: Enable CORS + +If your application follows a headless design, enable CORS. For instructions, see [Configure CORS](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html#configure-cors). + + +## Next step + +[Connect and configure Stripe](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/connect-and-configure-stripe.html) diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md index 5f33a86399b..80d7109b569 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/embed-the-stripe-payment-page-as-an-iframe.md @@ -29,7 +29,7 @@ namespace Pyz\Zed\Payment; class PaymentConfig extends \Spryker\Zed\Payment\PaymentConfig { public function getStoreFrontPaymentPage(): string - { + { // Please make sure that domain is whitelisted in the config_default.php `$config[KernelConstants::DOMAIN_WHITELIST]` return '/payment'; //or any other URL on your storefront domain e.g. https://your-site.com/payment-with-stripe } diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md index ff69e82bd51..33ab4981b5c 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/oms-configuration-for-stripe.md @@ -15,7 +15,7 @@ related: - title: Sending additional data to Stripe link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.html - title: Stripe checkout with third-party frontends - link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.html + link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.html --- diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md similarity index 97% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md index 9c83f37e06b..9ea352a0038 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/processing-refunds-with-stripe.md @@ -15,7 +15,7 @@ related: - title: Sending additional data to Stripe link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.html - title: Stripe checkout with third-party frontends - link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.html + link: docs/pbc/all/payment-service-provider/page.version/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.html --- In the default OMS configuration, a refund can be done for an order or an individual item. The refund action is initiated by a Back Office user triggering the `Payment/Refund` command. The selected item enters the `payment refund pending` state, awaiting the response from Stripe. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-guidelines-for-stripe.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md similarity index 99% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md index 3cee5c5505d..ede75c31051 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/project-prerequisites-for-implementing-Stripe-checkout-as-a-hosted-payment-page.md @@ -33,7 +33,7 @@ If your shop is live or `@CheckoutPage/views/payment/payment.twig` is overwritte } {% endembed %} {% endfor %} -{% endraw %} +{% endraw %} ``` 2. If you want to change the default payment provider or method names, do the following: diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md similarity index 98% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md index 1e89ece43a4..1a2c1f9b4de 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/sending-additional-data-to-stripe.md @@ -34,7 +34,7 @@ Authorization: Bearer {{access_token}} ... }, "idCart": "{{idCart}}", - "billingAddress": { + "billingAddress": { ... }, "shippingAddress": { @@ -53,7 +53,7 @@ Authorization: Bearer {{access_token}} "shipment": { "idShipmentMethod": {{idMethod}} } - } + } } } ``` diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/project-guidelines-for-stripe/stripe-checkout-with-third-party-frontends.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/stripe.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/stripe.md new file mode 100644 index 00000000000..81fbfd3f702 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/stripe/stripe.md @@ -0,0 +1,87 @@ +--- +title: Stripe +description: Learn all about Sprykers Technology partner, Stripe. Enabling and Enhancing your payment process. +last_updated: Oct 10, 2024 +template: concept-topic-template +--- + +[Stripe](https://stripe.com/en-de) is a financial infrastructure platform that enables businesses to accept payments, grow their revenue, and accelerate new business opportunities. + +The Stripe integration in Spryker is part of the App Composition Platform and supports both the default Storefront Yves and Spryker GLUE APIs. + +## Supported business models + +The Stripe App supports B2B, B2C, and Marketplace models. + +## Stripe features + +- Interface within the Spryker ACP catalog to connect with Stripe: You can connect to Stripe from the App Composition Platform. +- Easy switch between Test and Live modes: You can test payments in either mode. +- Responsive Redirect Payment Page: Once a connection is set up between Spryker and Stripe, upon checkout, end users are redirected to a Spryker-hosted payment page where they can view activated payment methods. This works both on the web and mobile. +- Viewing the activated payment methods in the Stripe dashboard. +- GLUE API support: Support for customers using Spryker headless. +- Authorize payments and capture later: The default OMS configuration lets you authorize cards and capture the order amount either after shipping or based on the established business logic. +- Default OMS Configuration: We provide a default OMS configuration that you can use as an example or modify to align with your business logic. + +## Stripe payment methods + +The Stripe app supports all payments enabled by Stripe in your region. For more information, see [Payment methods in Stripe](https://stripe.com/docs/payments/payment-methods/overview). +However, our team only tested the following payment methods: +- Cards: including Visa and Mastercard +- Debit card +- Bank transfer: supported in some regions, see [Bank transfer payments](https://stripe.com/docs/payments/bank-transfers) +- PayPal +- Klarna +- Apple Pay +- Google Pay +- Direct Debit (SEPA) / Sofortüberweisung +- iDEAL +- Link +- Przelewy24 +- Giropay +- US, UK, CA, AU, NZ: AfterPay + +## Browser back button handling + +Using the browser back button at Stripe's hosted payment page may lead to issues with order persistence and stock management. For instructions on configuring your application to handle this scenario and prevent duplicate orders, see [Configure handling of browser back button action at hosted payment page](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/configure-handling-of-browser-back-button-action-at-hosted-payment-page.html). + +## Current limitations + +- The Stripe App has limited or no support for multi-capture. Partial capture of payment for orders with multiple items isn't covered. So, payments can't be partially canceled. One payment intent is created per order, and the payment for the order can either be authorized, captured, or cancelled from Stripe's side. +- Payments can be properly canceled only from the the Back Office and not from the Stripe Dashboard. + + +## Next step + +[Install and configure the Stripe App prerequisites](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/install-and-configure-stripe-prerequisites.html) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-marketplace-credentials.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-marketplace-credentials.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-marketplace-credentials.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-marketplace-credentials.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-standard-credentails.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-standard-credentails.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-standard-credentails.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/configure-in-the-back-office/add-unzer-standard-credentails.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/extend-and-customize/customize-the-credit-card-display-in-your-payment-step.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/extend-and-customize/customize-the-credit-card-display-in-your-payment-step.md new file mode 100644 index 00000000000..26918844dae --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/extend-and-customize/customize-the-credit-card-display-in-your-payment-step.md @@ -0,0 +1,12 @@ +--- +title: Customize the credit card display in your payment step +last_updated: Jun 22, 2022 +description: This document describes how to add frontend for a credit card to your project. +template: concept-topic-template +redirect_from: + - /docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/unzer/customize-the-credit-card-display-in-your-payment-step.html + - /docs/pbc/all/payment-service-providers/unzer/extend-and-customize/customize-the-credit-card-display-in-your-payment-step.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/unzer/extend-and-customize/customize-the-credit-card-display-in-your-payment-step.html +--- + +To use Unzer UI component and customize the credit card display in your payment step, see [Accept Cards and Click to Pay with UI components v2](https://docs.unzer.com/payment-methods/card/accept-card-ui-component-v2/) in the Unzer official documentation. diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/extend-and-customize/implement-new-payment-methods-on-the-project-level.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/extend-and-customize/implement-new-payment-methods-on-the-project-level.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/extend-and-customize/implement-new-payment-methods-on-the-project-level.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/extend-and-customize/implement-new-payment-methods-on-the-project-level.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/refund-shipping-costs.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/refund-shipping-costs.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/refund-shipping-costs.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/refund-shipping-costs.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/understand-payment-method-in-checkout-process.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/understand-payment-method-in-checkout-process.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/understand-payment-method-in-checkout-process.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/howto-tips-use-cases/understand-payment-method-in-checkout-process.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/install-and-configure-unzer.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/install-and-configure-unzer.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/install-and-configure-unzer.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/install-and-configure-unzer.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer-glue-api.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer-glue-api.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer-glue-api.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer-glue-api.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/install-unzer/integrate-unzer.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/unzer-domain-model-and-relationships.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/unzer-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/base-shop/third-party-integrations/unzer/unzer-domain-model-and-relationships.md rename to docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/unzer-domain-model-and-relationships.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/unzer.md b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/unzer.md new file mode 100644 index 00000000000..ffaa74f34b7 --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/base-shop/third-party-integrations/unzer/unzer.md @@ -0,0 +1,27 @@ +--- +title: Unzer +last_updated: Jun 9, 2022 +description: This document desribes the Unzer payment method and how it can enhance your Spryker Marketplace projects. +template: concept-topic-template +redirect_from: + - /docs/pbc/all/payment/unzer/unzer.html + - /docs/pbc/all/payment-service-providers/unzer/unzer.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/unzer/whats-changed-in-unzer.html + - /docs/pbc/all/payment-service-provider/202311.0/third-party-integrations/unzer/unzer.html +--- + +[Unzer](https://www.unzer.com) is specialized in the European market and its currencies. You need a business located in Europe to be able to use Unzer services. + +## Integration scope with Spryker + +Spryker uses Unzer split payments capabilities to support its Marketplace offering. Unzer is the first Payment Service Provider (PSP) compatible with Spryker Enterprise Marketplace. + +You can use Unzer in a single seller context or a marketplace context. + +### Payment methods available in the integration + +| PAYMENT METHOD | SINGLE SELLER COMPATIBLE | MARKETPLACE COMPATIBLE | +|-|-|-| +| Credit Card | ✓ | ✓ | +| Sofort | ✓ | ✓ | +| Unzer Bank Transfer | ✓ | ✓ | diff --git a/docs/pbc/all/payment-service-provider/202602.0/marketplace/install-marketplace-dummy-payment.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/install-marketplace-dummy-payment.md new file mode 100644 index 00000000000..117509f5b2d --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/marketplace/install-marketplace-dummy-payment.md @@ -0,0 +1,292 @@ +--- +title: Install Marketplace Dummy Payment +last_updated: Feb 19, 2026 +description: This document describes the process how to integrate the Marketplace Dummy Payment into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-dummy-payment-feature-integration.html +--- + +This document describes how to integrate the Marketplace Dummy Payment into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Dummy Payment feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| - | - | - | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Payments | {{page.release_tag}} | [Install the Payments feature](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/install-and-upgrade/install-the-payments-feature.html) | +| Checkout | {{page.release_tag}} | [Install the Checkout feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-feature.html) | +| Marketplace Merchant | {{page.release_tag}} | [Install the Marketplace Merchant feature](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-merchant-feature.html) | +| Marketplace Order Management | {{page.release_tag}} | [Install the Marketplace Order Management feature](/docs/pbc/all/order-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-order-management-feature.html) | + + +### 1) Install required modules using Сomposer + +Install the required modules using Composer: + +```bash +composer require spryker/dummy-marketplace-payment:^0.2.2 --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|-|-| +| DummyMarketplacePayment | vendor/spryker/dummy-marketplace-payment | + +{% endinfo_block %} + +### 2) Set up configuration + +Add the following configuration: + +| CONFIGURATION | SPECIFICATION | NAMESPACE | +| ------------- | ------------ | ------------ | +| config_default-docker.php | Default docker specific configuration of entire application | config/Shared/config_default-docker.php | +| config_default.php | Default configuration of entire application | config/Shared/config_default.php | + +**config/Shared/config_default-docker.php** + +```php +use Spryker\Shared\DummyMarketplacePayment\DummyMarketplacePaymentConfig; + + +$config[OmsConstants::ACTIVE_PROCESSES] = [ + 'MarketplacePayment01', +]; +$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE => 'MarketplacePayment01', +]; +``` + +**config/Shared/config_default.php** + +```php +use Spryker\Shared\DummyMarketplacePayment\DummyMarketplacePaymentConfig; + +$config[OmsConstants::ACTIVE_PROCESSES] = [ + 'MarketplacePayment01', +]; +$config[SalesConstants::PAYMENT_METHOD_STATEMACHINE_MAPPING] = [ + DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE => 'MarketplacePayment01', +]; +``` + +### 3) Set up transfer objects + +```bash +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following transfer objects are generated: + +| TRANSFER | TYPE | EVENT | PATH | +| --------- | ------- | ----- | ------------- | +| DummyMarketplacePayment | class | created | src/Generated/Shared/Transfer/DummyMarketplacePayment | +| Payment.dummyMarketplacePaymentInvoice | property | created | src/Generated/Shared/Transfer/Payment | +| Order.dummyMarketplacePaymentInvoice | property | created | src/Generated/Shared/Transfer/Order | + +{% endinfo_block %} + +### 4) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------- | ------- | ----- | ------------- | +| MerchantProductItemPaymentMethodFilterPlugin | If not all order items contain of product reference, then filters dummy marketplace payment methods out. | | Spryker\Zed\DummyMarketplacePayment\Communication\Plugin\Payment\MerchantProductItemPaymentMethodFilterPlugin | + +**src/Pyz/Zed/Payment/PaymentDependencyProvider.php** + +```php + + */ + protected function getPaymentMethodFilterPlugins(): array + { + return [ + new MerchantProductItemPaymentMethodFilterPlugin(), + ]; + } +} +``` + +### 5) Import data + +1. Extend and import payment method data: + +**data/import/payment_method.csv** + +```csv +payment_method_key,payment_method_name,payment_provider_key,payment_provider_name,is_active +dummyMarketplacePaymentInvoice,Invoice,DummyMarketplacePayment,Dummy Marketplace Payment,1 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| payment_method_key | ✓ | string | dummyMarketplacePaymentInvoice | Payment method key. | +| payment_method_name | ✓ | string | Invoice | Payment method name. | +| payment_provider_key | ✓ | string | DummyMarketplacePayment | Payment provider key. | +| payment_provider_name | ✓ | string | Dummy Marketplace Payment | Payment provider name. | +| is_active | | boolean | 1 | Is payment method active. | + +2. Extend and import payment store data: + +**data/import/payment_method_store.csv** + +```csv +payment_method_key,store +dummyMarketplacePaymentInvoice,DE +dummyMarketplacePaymentInvoice,AT +dummyMarketplacePaymentInvoice,US +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +|-|-|-|-|-| +| payment_method_key | ✓ | string | dummyMarketplacePaymentInvoice | Payment method key. | +| store | ✓ | string | DE | Store identifier. | + +3. Import data: + +```bash +console data:import payment-method +console data:import payment-method-store +``` + +{% info_block warningBox "Verification" %} + +Make sure that the new payment method is added to the `spy_payment_method` and `spy_payment_method_store` tables in the database. + +{% endinfo_block %} + +## Install feature frontend + +Follow the steps below to install the Dummy Payment feature frontend. + +### 1) Add translations + +Append glossary according to your configuration: + +**data/import/glossary.csv** + +```yaml +DummyMarketplacePaymentInvoice,Invoice,en_US +DummyMarketplacePaymentInvoice,Auf Rechnung,de_DE +dummyMarketplacePaymentInvoice.invoice,Pay with invoice:,en_US +dummyMarketplacePaymentInvoice.invoice,Auf Rechnung bezahlen:,de_DE +checkout.payment.provider.DummyMarketplacePayment,Dummy Marketplace Payment,en_US +checkout.payment.provider.DummyMarketplacePayment,Beispiel Marktplatz Zahlungsmethode,de_DE +``` + +Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that the configured data is added to the `spy_glossary_key` and `spy_glossary_translation` tables in the database. + +{% endinfo_block %} + +### 2) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | DESCRIPTION | PREREQUISITES | NAMESPACE | +| --------- | ------- | ----- | ------------- | +| DummyMarketplacePaymentHandlerPlugin | Expands Payment transfer with payment provider and payment selection. | | Spryker\Yves\DummyMarketplacePayment\Plugin\StepEngine\DummyMarketplacePaymentHandlerPlugin | +| DummyMarketplacePaymentInvoiceSubFormPlugin | Creates sub form for Invoice payment method. | | Spryker\Yves\DummyMarketplacePayment\Plugin\StepEngine\SubForm\DummyMarketplacePaymentInvoiceSubFormPlugin | + +**src/Pyz/Yves/CheckoutPage/CheckoutPageDependencyProvider.php** + +```php +extendPaymentMethodHandler($container); + $container = $this->extendSubFormPluginCollection($container); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function extendPaymentMethodHandler(Container $container): Container + { + $container->extend(static::PAYMENT_METHOD_HANDLER, function (StepHandlerPluginCollection $paymentMethodHandler) { + $paymentMethodHandler->add( + new DummyMarketplacePaymentHandlerPlugin(), + DummyMarketplacePaymentConfig::PAYMENT_METHOD_DUMMY_MARKETPLACE_PAYMENT_INVOICE + ); + + return $paymentMethodHandler; + }); + + return $container; + } + + /** + * @param \Spryker\Yves\Kernel\Container $container + * + * @return \Spryker\Yves\Kernel\Container + */ + protected function extendSubFormPluginCollection(Container $container): Container + { + $container->extend(static::PAYMENT_SUB_FORMS, function (SubFormPluginCollection $paymentSubFormPluginCollection) { + $paymentSubFormPluginCollection->add(new DummyMarketplacePaymentInvoiceSubFormPlugin()); + + return $paymentSubFormPluginCollection; + }); + + return $container; + } +} +``` + +{% info_block warningBox "Verification" %} + +Add a merchant product to a shopping cart, go to checkout and make sure that Dummy Payment Invoice payment method is available. + +{% endinfo_block %} diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/configure-merchant-transfers-for-stripe.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/configure-merchant-transfers-for-stripe.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/configure-merchant-transfers-for-stripe.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/configure-merchant-transfers-for-stripe.md diff --git a/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/connect-and-configure-stripe-for-marketplace.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/connect-and-configure-stripe-for-marketplace.md new file mode 100644 index 00000000000..fccbc976fbd --- /dev/null +++ b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/connect-and-configure-stripe-for-marketplace.md @@ -0,0 +1,54 @@ +--- +title: Connect and configure Stripe for Marketplace +description: Find out how you can connect and configure the Stripe app for your Spryker Marketplace project. +last_updated: June 31, 2024 +template: howto-guide-template +--- + +This document describes how to connect and configure the Stripe app in the Back Office. + +## Prerequisites + +- [Install and configure Stripe prerequisites](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/third-party-integrations/stripe/install-and-configure-stripe-prerequisites.html). +- Obtain Stripe account details in [Stripe Dashboard](https://dashboard.stripe.com): + - Stripe account ID. For more details, see [Stripe account ID](https://stripe.com/docs/payments/account). + - Stripe publishable and secret keys. For more details, see [Secret and publishable keys](https://docs.stripe.com/keys#obtain-api-keys). + + +## Connect and configure the Stripe app + +1. In your store's Back Office, go to **Apps**. +2. Click on **Stripe**. + This opens the Stripe app details page. +3. Click **Connect app**. + This displays a success message with the app's status as **Connection pending**. +4. Click **Configure**. + This opens the **Configure** pane. +5. For **Business Model**, select **Marketplace**. +6. For **STRIPE ACCOUNT ID**, enter the account ID you've obtained in the [prerequisites](#prerequisites). +7. For **STRIPE PUBLISHABLE KEY**, enter the key you've obtained in the [prerequisites](#prerequisites). +8. For **STRIPE SECRET KEY**, enter the key you've obtained in the [prerequisites](#prerequisites). +9. For **Environment**, select if you want to use the app in test or live mode. For details on the Stripe test mode, see [Test mode](https://stripe.com/docs/test-mode). +10. Optional: For **PAYMENT PAGE TITLE**, enter your shop name. This name will be displayed on the **Payment** page as a merchant label for the payee. +11. Optional: For **BRAND FAVICON**, enter a link to an image to be used as a favicon on the **Payment** page. +12. Optional: For **PAY BUTTON COLOR**, enter a HEX code to customize the **PAY** button color. +13. Click **Save**. + This displays a success message with the app's status as **Connected**. + + +## Retain Stripe configuration after a destructive deployment + +{% info_block errorBox "" %} +[Destructive deployment](https://spryker.com/docs/dg/dev/acp/retaining-acp-apps-when-running-destructive-deployments.html) permanently deletes the configuration of the Stripe payment method. + +To run a destructive deployment, follow the steps: +1. Disconnect Stripe. +2. Run a destructive deployment. +3. Reconnect Stripe. + +{% endinfo_block %} + +## Next steps + +1. Activate the Stripe payment method. For instructions, see [Edit payment methods](/docs/pbc/all/payment-service-provider/{{page.version}}/base-shop/manage-in-the-back-office/edit-payment-methods.html). +2. Inform merchants about Stripe being available. To be able to use Stripe, merchants need to onboard. For instructions, see [Onboard to Stripe in the Merchant Portal](/docs/pbc/all/payment-service-provider/{{page.version}}/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.html). diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/install-and-configure-stripe-prerequisites-for-marketplace.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/install-and-configure-stripe-prerequisites-for-marketplace.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/install-and-configure-stripe-prerequisites-for-marketplace.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/install-and-configure-stripe-prerequisites-for-marketplace.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md similarity index 91% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md index 576020f0bfc..ab9f3b1e9c8 100644 --- a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md +++ b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.md @@ -3,6 +3,8 @@ title: Onboard to Stripe in the Merchant Portal description: Learn how to onboard to Stripe in the Merchant Portal for your Spryker Marketplace projects. last_updated: June 28, 2024 template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/onboard-to-stripe-in-the-merchant-portal.html --- {% info_block warningBox "" %} diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-for-marketplace-overview.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-for-marketplace-overview.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-for-marketplace-overview.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-for-marketplace-overview.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-for-marketplace.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-for-marketplace.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-for-marketplace.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-for-marketplace.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md b/docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md rename to docs/pbc/all/payment-service-provider/202602.0/marketplace/stripe-third-party-integration/stripe-oms-configuration-in-marketplaces.md diff --git a/docs/pbc/all/payment-service-provider/202512.0/payment-service-provider.md b/docs/pbc/all/payment-service-provider/202602.0/payment-service-provider.md similarity index 100% rename from docs/pbc/all/payment-service-provider/202512.0/payment-service-provider.md rename to docs/pbc/all/payment-service-provider/202602.0/payment-service-provider.md diff --git a/docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md b/docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md deleted file mode 100644 index 0a43aae92dd..00000000000 --- a/docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Integrate the Merchant Custom Prices feature -description: The Merchant Custom Price Feature allows setting specific prices for merchants. The guide describes the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-custom-prices-feature-integration -originalArticleId: 7b16873a-0326-4f7c-ae97-62bd7e0c3b81 -redirect_from: - - /2021080/docs/merchant-custom-prices-feature-integration - - /2021080/docs/en/merchant-custom-prices-feature-integration - - /docs/merchant-custom-prices-feature-integration - - /docs/en/merchant-custom-prices-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-custom-prices-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-custom-prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-custom-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md b/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md deleted file mode 100644 index 0a43aae92dd..00000000000 --- a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Integrate the Merchant Custom Prices feature -description: The Merchant Custom Price Feature allows setting specific prices for merchants. The guide describes the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-custom-prices-feature-integration -originalArticleId: 7b16873a-0326-4f7c-ae97-62bd7e0c3b81 -redirect_from: - - /2021080/docs/merchant-custom-prices-feature-integration - - /2021080/docs/en/merchant-custom-prices-feature-integration - - /docs/merchant-custom-prices-feature-integration - - /docs/en/merchant-custom-prices-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-custom-prices-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-custom-prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-custom-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md b/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md deleted file mode 100644 index a459d57de0d..00000000000 --- a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Install the Prices feature -description: The guide walks you through the process of installing the Volume Prices feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/prices-feature-integration -originalArticleId: df5285b4-dd81-4f58-bc71-e2734c59892c -redirect_from: - - /2021080/docs/prices-feature-integration - - /2021080/docs/en/prices-feature-integration - - /docs/prices-feature-integration - - /docs/en/prices-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/prices-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/prices-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html -related: - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Install the Product Images + Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Product Lists feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html - - title: Install the Merchant Product Restrictions feature - link: docs/pbc/all/merchant-management/page.version/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md b/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md deleted file mode 100644 index af7a9b648b4..00000000000 --- a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Prices per Merchant Relation feature integration -description: The guide walks you through the process of installing the Prices per Merchant feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/prices-per-merchant-relation-integration -originalArticleId: 936f75d0-f0ab-4af8-9c10-a150334e4feb -redirect_from: - - /2021080/docs/prices-per-merchant-relation-integration - - /2021080/docs/en/prices-per-merchant-relation-integration - - /docs/prices-per-merchant-relation-integration - - /docs/en/prices-per-merchant-relation-integration - - /docs/scos/dev/feature-integration-guides/202200.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/prices-per-merchant-relation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-prices-per-merchant-relation-feature.md %} diff --git a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md b/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md deleted file mode 100644 index 75f541f02cc..00000000000 --- a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Scheduled Prices feature -description: Use the guide to install the Scheduled Prices feature into your Spryker basedproject. -last_updated: Aug 22, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/scheduled-prices-feature-integration -originalArticleId: 9b64041e-a249-4675-8e39-82b016675f3c -redirect_from: - - /2021080/docs/scheduled-prices-feature-integration - - /2021080/docs/en/scheduled-prices-feature-integration - - /docs/scheduled-prices-feature-integration - - /docs/en/scheduled-prices-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/scheduled-prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-scheduled-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md b/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md deleted file mode 100644 index b164972d078..00000000000 --- a/docs/pbc/all/price-management/202410.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Install the Product Price Glue API -description: Learn how to install thee Product Price GLUE API in to your Spryker based projects. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-prices-api-feature-integration -originalArticleId: 50d3f39f-3a3c-4fc2-a717-179a0205dee7 -redirect_from: - - /2021080/docs/glue-api-prices-api-feature-integration - - /2021080/docs/en/glue-api-prices-api-feature-integration - - /docs/glue-api-prices-api-feature-integration - - /docs/en/glue-api-prices-api-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-price-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-price-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.html -related: - - title: Install the Prices feature - link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html - - title: Retrieving abstract product prices - link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html - - title: Retrieving concrete product prices - link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-price-glue-api.md %} diff --git a/docs/pbc/all/price-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md b/docs/pbc/all/price-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md deleted file mode 100644 index ad7e9bc1829..00000000000 --- a/docs/pbc/all/price-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Product Offer Volume Prices Glue API -last_updated: Dec 04, 2020 -description: This document describes how to integrate the Offers Volume Prices Glue API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202204.0/glue/marketplace-product-offer-volume-prices.html -related: - - title: Marketplace Product Offer Prices feature walkthrough - link: docs/pbc/all/price-management/page.version/marketplace/marketplace-product-offer-prices-feature-overview.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-volume-prices-glue-api.md %} diff --git a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md b/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md deleted file mode 100644 index 0a43aae92dd..00000000000 --- a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Integrate the Merchant Custom Prices feature -description: The Merchant Custom Price Feature allows setting specific prices for merchants. The guide describes the process of integrating the feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/merchant-custom-prices-feature-integration -originalArticleId: 7b16873a-0326-4f7c-ae97-62bd7e0c3b81 -redirect_from: - - /2021080/docs/merchant-custom-prices-feature-integration - - /2021080/docs/en/merchant-custom-prices-feature-integration - - /docs/merchant-custom-prices-feature-integration - - /docs/en/merchant-custom-prices-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/merchant-custom-prices-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/merchant-custom-prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-merchant-custom-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md b/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md deleted file mode 100644 index af7a9b648b4..00000000000 --- a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Prices per Merchant Relation feature integration -description: The guide walks you through the process of installing the Prices per Merchant feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/prices-per-merchant-relation-integration -originalArticleId: 936f75d0-f0ab-4af8-9c10-a150334e4feb -redirect_from: - - /2021080/docs/prices-per-merchant-relation-integration - - /2021080/docs/en/prices-per-merchant-relation-integration - - /docs/prices-per-merchant-relation-integration - - /docs/en/prices-per-merchant-relation-integration - - /docs/scos/dev/feature-integration-guides/202200.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/prices-per-merchant-relation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-prices-per-merchant-relation-feature.md %} diff --git a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md b/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md deleted file mode 100644 index 75f541f02cc..00000000000 --- a/docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Scheduled Prices feature -description: Use the guide to install the Scheduled Prices feature into your Spryker basedproject. -last_updated: Aug 22, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/scheduled-prices-feature-integration -originalArticleId: 9b64041e-a249-4675-8e39-82b016675f3c -redirect_from: - - /2021080/docs/scheduled-prices-feature-integration - - /2021080/docs/en/scheduled-prices-feature-integration - - /docs/scheduled-prices-feature-integration - - /docs/en/scheduled-prices-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/scheduled-prices-feature-integration.html - - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-scheduled-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md b/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md deleted file mode 100644 index af7a9b648b4..00000000000 --- a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Prices per Merchant Relation feature integration -description: The guide walks you through the process of installing the Prices per Merchant feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/prices-per-merchant-relation-integration -originalArticleId: 936f75d0-f0ab-4af8-9c10-a150334e4feb -redirect_from: - - /2021080/docs/prices-per-merchant-relation-integration - - /2021080/docs/en/prices-per-merchant-relation-integration - - /docs/prices-per-merchant-relation-integration - - /docs/en/prices-per-merchant-relation-integration - - /docs/scos/dev/feature-integration-guides/202200.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/prices-per-merchant-relation-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/prices-per-merchant-relation-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-prices-per-merchant-relation-feature.md %} diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md b/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md deleted file mode 100644 index 7f4d1a1a435..00000000000 --- a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md +++ /dev/null @@ -1,279 +0,0 @@ ---- -title: "Glue API: Retrieve prices when retrieving abstract products" -description: Learn how to retrieve prices when retrieving abstract products using Spryker GLUE API within your Spryker based project. -last_updated: Aug 2, 2022 -template: glue-api-storefront-guide-template -redirect_from: - - /docs/pbc/all/price-management/202311.0/base-shop/manage-using-glue-api/retrieve-prices-when-retrieving-abstract-products.html - - /docs/pbc/all/price-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.html ---- - -This document describes how to retrieve prices when retrieving abstract products. To retrieve full information about abstract products, see [Retrieve abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html). - -## Installation - -For detailed information on the modules that provide the API functionality and related installation instructions, see: -- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) -- [Install the Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) - - - -## Retrieve an abstract product - -To retrieve general information about an abstract product, send the request: - ---- -`GET` **/abstract-products/*{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** - ---- - - -| PATH PARAMETER | DESCRIPTION | -| --- | --- | -| ***{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** | SKU of an abstract product to get information for. | - -### Request - -`GET https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices`: Retrieve information about the abstract product with SKU `093` with its prices. - - -### Response - -
      Response sample: retrieve information about an abstract product with the details about abstract product prices - -```json -{ - "data": { - "type": "abstract-products", - "id": "001", - "attributes": { - "sku": "001", - "averageRating": null, - "reviewCount": 0, - "name": "Canon IXUS 160", - "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", - "attributes": { - "megapixel": "20 MP", - "flash_range_tele": "4.2-4.9 ft", - "memory_slots": "1", - "usb_version": "2", - "brand": "Canon", - "color": "Red" - }, - "superAttributesDefinition": [ - "color" - ], - "superAttributes": { - "color": [ - "Red" - ] - }, - "attributeMap": { - "product_concrete_ids": [ - "001_25904006" - ], - "super_attributes": { - "color": [ - "Red" - ] - }, - "attribute_variants": [] - }, - "metaTitle": "Canon IXUS 160", - "metaKeywords": "Canon,Entertainment Electronics", - "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", - "attributeNames": { - "megapixel": "Megapixel", - "flash_range_tele": "Flash range (tele)", - "memory_slots": "Memory slots", - "usb_version": "USB version", - "brand": "Brand", - "color": "Color" - }, - "url": "/en/canon-ixus-160-1" - }, - "links": { - "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-prices" - }, - "relationships": { - "abstract-product-prices": { - "data": [ - { - "type": "abstract-product-prices", - "id": "001" - } - ] - } - } - }, - "included": [ - { - "type": "abstract-product-prices", - "id": "001", - "attributes": { - "price": 9999, - "prices": [ - { - "priceTypeName": "DEFAULT", - "netAmount": null, - "grossAmount": 9999, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - } - }, - { - "priceTypeName": "ORIGINAL", - "netAmount": null, - "grossAmount": 12564, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - } - } - ] - }, - "links": { - "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" - } - } - ] -} -``` - -
      - -
      Response sample: retrieve information about an abstract product with the details about the default and volume prices included - -```json -{ - "data": { - "type": "abstract-products", - "id": "093", - "attributes": { - "sku": "093", - "merchantReference": "MER000001", - "averageRating": 4.3, - "reviewCount": 4, - "name": "Sony SmartWatch 3", - "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", - "attributes": { - "internal_ram": "512 MB", - "flash_memory": "4 GB", - "weight": "45 g", - "protection_feature": "Water resistent", - "brand": "Sony", - "color": "Yellow" - }, - "superAttributesDefinition": [ - "flash_memory", - "color" - ], - "superAttributes": { - "color": [ - "Silver" - ] - }, - "attributeMap": { - "product_concrete_ids": [ - "093_24495843" - ], - "super_attributes": { - "color": [ - "Silver" - ] - }, - "attribute_variants": [] - }, - "metaTitle": "Sony SmartWatch 3", - "metaKeywords": "Sony,Smart Electronics", - "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", - "attributeNames": { - "internal_ram": "Internal RAM", - "flash_memory": "Flash memory", - "weight": "Weight", - "protection_feature": "Protection feature", - "brand": "Brand", - "color": "Color" - }, - "url": "/en/sony-smartwatch-3-93" - }, - "links": { - "self": "https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices" - }, - "relationships": { - "abstract-product-prices": { - "data": [ - { - "type": "abstract-product-prices", - "id": "093" - } - ] - } - } - }, - "included": [ - { - "type": "abstract-product-prices", - "id": "093", - "attributes": { - "price": 24899, - "prices": [ - { - "priceTypeName": "DEFAULT", - "netAmount": null, - "grossAmount": 24899, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - }, - "volumePrices": [ - { - "netAmount": 150, - "grossAmount": 165, - "quantity": 5 - }, - { - "netAmount": 145, - "grossAmount": 158, - "quantity": 10 - }, - { - "netAmount": 140, - "grossAmount": 152, - "quantity": 20 - } - ] - } - ] - }, - "links": { - "self": "https://glue.mysprykershop.com/abstract-products/093/abstract-product-prices" - } - } - ] -} -``` - -
      - - - - - - - -{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} - - -{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} - -## Possible errors - -| CODE | REASON | -|-|-| -| 301 | Abstract product is not found. | -| 311 | Abstract product SKU is not specified. | diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md b/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md deleted file mode 100644 index 8b62dd13ad1..00000000000 --- a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: "Glue API: Retrieve prices when retrieving concrete products" -description: Learn how to retrieve prices when retrieving concrete products using Spryker GLUE API within your Spryker based project. -last_updated: Aug 22, 2022 -template: glue-api-storefront-guide-template -redirect_from: - - /docs/pbc/all/price-management/202311.0/base-shop/manage-using-glue-api/retrieve-prices-when-retrieving-concrete-products.html - - /docs/pbc/all/price-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.html ---- - -This document describes how to retrieve prices when retrieving concrete products. To retrieve full information about concrete products, see [Retrieve concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html). - -## Installation - -For detailed information on the modules that provide the API functionality and related installation instructions, see the docs: -- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) -- [Install the Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) - - -## Retrieve a concrete product - -To retrieve general information about a concrete product, send the request: - ---- -`GET` **/concrete-products/*{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** - ---- - -| PATH PARAMETER | DESCRIPTION | -| --- | --- | -| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get information for. | - -### Request - -| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | -| --- | --- | --- | -| include | Adds resource relationships to the request. | concrete-product-prices | - - -| REQUEST | USAGE | -| --- | --- | -|`GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices` | Get information about the `001_25904006` product with its prices. | -| `GET https://glue.mysprykershop.com/abstract-products/093_24495843?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `093_24495843` with its prices. | - -### Response - - -
      Response sample: retrieve information about a concrete product with the details on the concrete product prices - -```json -{ - "data": { - "type": "concrete-products", - "id": "001_25904006", - "attributes": { - "sku": "001_25904006", - "isDiscontinued": false, - "discontinuedNote": null, - "averageRating": null, - "reviewCount": 0, - "name": "Canon IXUS 160", - "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", - "attributes": { - "megapixel": "20 MP", - "flash_range_tele": "4.2-4.9 ft", - "memory_slots": "1", - "usb_version": "2", - "brand": "Canon", - "color": "Red" - }, - "superAttributesDefinition": [ - "color" - ], - "metaTitle": "Canon IXUS 160", - "metaKeywords": "Canon,Entertainment Electronics", - "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", - "attributeNames": { - "megapixel": "Megapixel", - "flash_range_tele": "Flash range (tele)", - "memory_slots": "Memory slots", - "usb_version": "USB version", - "brand": "Brand", - "color": "Color" - } - }, - "links": { - "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices" - }, - "relationships": { - "concrete-product-prices": { - "data": [ - { - "type": "concrete-product-prices", - "id": "001_25904006" - } - ] - } - } - }, - "included": [ - { - "type": "concrete-product-prices", - "id": "001_25904006", - "attributes": { - "price": 9999, - "prices": [ - { - "priceTypeName": "DEFAULT", - "netAmount": null, - "grossAmount": 9999, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - } - }, - { - "priceTypeName": "ORIGINAL", - "netAmount": null, - "grossAmount": 12564, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - } - } - ] - }, - "links": { - "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-prices" - } - } - ] -} -``` - -
      - -
      Response sample: retrieve information about a concrete product with the details on the default and volume prices - -```json -{ - "data": { - "type": "concrete-products", - "id": "093_24495843", - "attributes": { - "sku": "093_24495843", - "isDiscontinued": false, - "discontinuedNote": null, - "averageRating": 4.3, - "reviewCount": 4, - "productAbstractSku": "093", - "name": "Sony SmartWatch 3", - "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", - "attributes": { - "internal_ram": "512 MB", - "flash_memory": "4 GB", - "weight": "45 g", - "protection_feature": "Water resistent", - "brand": "Sony", - "color": "Silver" - }, - "superAttributesDefinition": [ - "flash_memory", - "color" - ], - "metaTitle": "Sony SmartWatch 3", - "metaKeywords": "Sony,Smart Electronics", - "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", - "attributeNames": { - "internal_ram": "Internal RAM", - "flash_memory": "Flash memory", - "weight": "Weight", - "protection_feature": "Protection feature", - "brand": "Brand", - "color": "Color" - } - }, - "links": { - "self": "https://glue.mysprykershop.com/concrete-products/093_24495843?include=concrete-product-prices" - }, - "relationships": { - "concrete-product-prices": { - "data": [ - { - "type": "concrete-product-prices", - "id": "093_24495843" - } - ] - } - } - }, - "included": [ - { - "type": "concrete-product-prices", - "id": "093_24495843", - "attributes": { - "price": 24899, - "prices": [ - { - "priceTypeName": "DEFAULT", - "netAmount": null, - "grossAmount": 24899, - "currency": { - "code": "EUR", - "name": "Euro", - "symbol": "€" - }, - "volumePrices": [ - { - "netAmount": 150, - "grossAmount": 165, - "quantity": 5 - }, - { - "netAmount": 145, - "grossAmount": 158, - "quantity": 10 - }, - { - "netAmount": 140, - "grossAmount": 152, - "quantity": 20 - } - ] - } - ] - }, - "links": { - "self": "https://glue.mysprykershop.com/concrete-products/093_24495843/concrete-product-prices" - } - } - ] -} -``` - -
      - - - - - -{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} - -{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-prices-response-attributes.md %} - -## Possible errors - -| CODE | REASON | -| --- | --- | -| 302 | Concrete product is not found. | -| 312 | Concrete product is not specified. | - -To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md similarity index 97% rename from docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md rename to docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md index e3e98339e88..5db9989a4dc 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/net-gross-prices-management originalArticleId: 9240561a-379b-4a9e-a6c4-05bdf2dfa264 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html - /2021080/docs/net-gross-prices-management - /2021080/docs/en/net-gross-prices-management - /docs/net-gross-prices-management diff --git a/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/money-module-reference-information.md b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/money-module-reference-information.md new file mode 100644 index 00000000000..4500006a3e9 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/money-module-reference-information.md @@ -0,0 +1,133 @@ +--- +title: "Money module: reference information" +last_updated: Aug 18, 2021 +description: Spryker Commerce OS handles all monetary values as integer and provides conversions from decimal values to cent values and vice versa. +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202108.0/prices-feature-walkthrough/money-module-reference-information.html + - /docs/scos/dev/feature-walkthroughs/202311.0/prices-feature-walkthrough/money-module-reference-information.html + - /docs/pbc/all/price-management/extend-and-customize/money-module-reference-information.html + - /docs/pbc/all/price-management/202204.0/base-shop/extend-and-customize/money-module-reference-information.html +--- + +{% info_block infoBox "Money" %} + +Handling monetary values can be a problem and is often quite hard. The Money bundle makes it easier to work with monetary values. + +{% endinfo_block %} + +Spryker handles all monetary values as integers and provides conversions from decimal values to cent values and vice-versa. + +The key feature of this module is to convert a `MoneyTransfer` into the proper string version of it, given the current locale and currency. + +## Usage + +The Money module is very straight forward and easy to use. `MoneyFacade` exposes the following methods: + +- `MoneyFacade::fromInteger()` +- `MoneyFacade::fromFloat()` +- `MoneyFacade::fromString()` +- `MoneyFacade::formatWithCurrency()` +- `MoneyFacade::formatWithoutCurrency()` +- `MoneyFacade::convertIntegerToDecimal()` +- `MoneyFacade::convertDecimalToInteger()` + +### MoneyFacade::from*() methods + +Internally, a powerful implementation of the Money Pattern is used. Outside the Money module, you only see the MoneyTransfer, which encapsulates our internals. + +To get a money object, call the `MoneyFacade::from*()` methods: + +| MODULE | CALLED WITH | +| --- | --- | +| MoneyFacade::fromInteger(1000) | integer | +| MoneyFacade::fromInteger(1000, 'EUR') | integer and currency | +| MoneyFacade::fromFloat(10.00) | float | +| MoneyFacade::fromFloat(10.00, 'EUR') | float and currency | +| MoneyFacade::fromString('1000') | string | +| MoneyFacade::fromString('1000', 'EUR') | string and currency | + +All of them return a `MoneyTransfer` with a `MoneyTransfer::$amount` of `‘1000'`. + +{% info_block infoBox "" %} + +The only difference between them is `MoneyTransfer::$currency`. This value differs if you pass a currency to the `MoneyFacade::from*()` methods or not. + +{% endinfo_block %} + +- In case you don't pass a currency, the currency configured as default is used. +- If you pass a specific currency, it's used instead of the one that's configured as default. + +**`MoneyFacade::formatWithSymbol()`** + +The `MoneyFacade::formatWithSymbol()` method accepts only one argument — a MoneyTransfer. It will return a string representation of the given object, considering the current locale. + +{% info_block infoBox "Example" %} + +- MoneyTransfer::$amount = 1000 +- MoneyTransfer::$currency = 'EUR' +- Current locale is de_DE +- The output would be 10,00 € +- If the current locale would be en_US, the output would be: €10.00 when passing the same object. + +{% endinfo_block %} + +**`MoneyFacade::formatWithoutSymbol()`** + +`MoneyFacade::formatWithoutSymbol()` method has the same behavior as `MoneyFacade::formatWithSymbol()`, except the fact that the currency symbol is not included. + +{% info_block infoBox "" %} + +Then, for the above example, the output is `10,00` or `10.00`. + +{% endinfo_block %} + +**`MoneyFacade::convertIntegerToDecimal()`** + +In some cases, you need a plain decimal representation of the value in integer (for example, cents). This can be useful, for example, for API calls. + +**`MoneyFacade::convertDecimalToInteger()`** + +In some cases, you need an integer (for example, cents) representation for a decimal value. This can be useful for storing monetary values in the database. + +## Money collection form type + +From Money version 2.2.*, you can have a money collection form type inside your forms which let you include a complex form collection that render a table with currency per store and gross/net price. + +For example, add FormBuilder in your form type: + +```php +/** + * @param /Symfony/Component/Form/FormBuilderInterface $builder + * + * @return $this + */ +protected function addMoneyValueCollectionType(FormBuilderInterface $builder) + { + $builder->add( + DiscountCalculatorTransfer::MONEY_VALUE_COLLECTION, //is the property in the main form you want to map. It must be transferred as in example + MoneyCollectionType::class, + [ + MoneyCollectionType::OPTION_AMOUNT_PER_STORE => false, //If you want to render per store, set it to true + ] + ); + + return $this; + } +``` + +Also, modify the twig template to include the form money value collection table. + +```twig +{% raw %} {{ form_money_collection(mainForm.moneyValueCollection) }} {% endraw %} +``` + +This renders the table with all currencies enabled in the store. You have to handle persistence yourself, which means that you have to save and read data to the `MoneyValueTransfer` collection. + +{% info_block infoBox "" %} + +The component provides only initial data. + +{% endinfo_block %} + + diff --git a/docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/multiple-currencies-per-store-configuration.md b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/multiple-currencies-per-store-configuration.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/extend-and-customize/multiple-currencies-per-store-configuration.md rename to docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/multiple-currencies-per-store-configuration.md diff --git a/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/priceproduct-module-details-reference-information.md b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/priceproduct-module-details-reference-information.md new file mode 100644 index 00000000000..2b532ad6d6d --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/extend-and-customize/priceproduct-module-details-reference-information.md @@ -0,0 +1,121 @@ +--- +title: "PriceProduct module details: reference information" +last_updated: Aug 18, 2021 +description: This document provides the technical details of the PriceProduct module and price dimensions +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202311.0/prices-feature-walkthrough/priceproduct-module-details-reference-information.html + - /docs/pbc/all/price-management/extend-and-customize/priceproduct-module-details-reference-information.html + - /docs/pbc/all/price-management/202204.0/base-shop/extend-and-customize/priceproduct-module-details-reference-information.html +--- + +This document describes technical details of the [PriceProduct](https://github.com/spryker/price-product) module that are valid since [version 2](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.html#upgrading-from-version-1-to-version-2) of the module. + +## Price dimension + +Starting from version 2.0.0 of the PriceProduct module, *Default Price Dimension* was implemented inside the PriceProduct to save BC. All prices imported by the new PriceProductDataImport would be in the Default Price Dimension. See [Prices per Merchant Relation](/docs/pbc/all/price-management/{{page.version}}/base-shop/merchant-custom-prices-feature-overview.html) to learn more about the price dimension. + +## PriceProductService + +Starting from version 2.0.0 of the `PriceProduct` module, we have added the Service layer with `PriceProductService`. Its purpose is to select only one price from the list of prices available for the current customer, taking into account the provided filter, which could contain a selected Store, Currency, Price mode (gross or net), and Quote (with customer information inside). + +The prices list can come from Yves (Storage) and Zed (DB). + +- In case with Yves, the `PriceProductFilterTransfer` object must be created for filtering, which contains named values (store name, currency code, named price mode, named price type). +- In case with Zed, the `PriceProductCriteriaTransfer` object must be created for filtering, which contains IDs as values (store ID, currency ID, and price type ID). + +If you need to add additional fields to one of these objects, add it to another one (if you added QTY to filter, criteria must be updated). So that `PriceProductFilterTransfer` could always be converted to `PriceProductCriteriaTransfer`. + +`PriceProductService` has plugins with `/Spryker/Service/PriceProductExtension/Dependency/Plugin/PriceProductFilterPluginInterface` which enables filtering price for price dimension. + +This filter can be really simple and filter price only by price dimension name, but it can also bear some logic, such as finding the minimum price from a price dimension. + +After that, the list of prices passed to service will be decreased to the list of filtered prices, which fits the Filter object only and filters plugins logic. + +Then `/Spryker/Service/PriceProduct/FilterStrategy/SinglePriceProductFilterStrategyInterface` is applied for filtered prices to find only a single price (at the moment, there is only one built-in strategy `SinglePriceProductFilterMinStrategy` which finds MIN price). + +There is Quote in a `filter/criteria` without items since this is additional information about the environment from where prices are requested. + +That `filter/criteria` is a flat object, so we filter only by its properties; however, plugins can use additional information (for example, Quote) for filtering. + +## Using the price dimensions + +The `PriceProduct` module has a set of plugins necessary for work with the price dimensions. All new plugin interfaces are now in the new module `PriceProductExtension`. They are as follows: + +### Zed + +- `PriceDimensionAbstractSaverPluginInterface` — saves price for abstract product in the DB for the selected price dimension (based on `PriceProductTransfer->getPriceDimension())` +- `PriceDimensionConcreteSaverPluginInterface` — saves price for concrete product in the DB for the selected price dimension (based on `PriceProductTransfer->getPriceDimension())` +- `PriceDimensionQueryCriteriaPluginInterface` — is used for expanding `PriceProductStoreQuery` using the new transfer object `QueryCriteriaTransfer`. + +Based on `PriceProductCriteria`, you can build your own `QueryCriteria` to get prices using joins—all prices can be selected from needed price dimensions using only one SQL query. See the DB scheme: +![Database scheme](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Module+Migration+Guides/Migration+Guide+-+PriceProduct/priece-dimensions-diagram.png) + +### "Orphaned records" + +{% info_block errorBox "Important" %} + +According to the DB schema, the `spy_price_product_store` table is the common storage for prices from different dimensions. If some price is the same for several dimensions, it will be stored as a single record. When a price is changed in one dimension, and there is no identical price in `spy_price_product_store`, the price will be stored as a new record in this table. This is done to avoid overriding prices in other dimensions. After some time, this table will have so-called "orphaned records" (any price dimension does not have a reference to these prices). To automatically remove them, you can use `src/Pyz/Zed/PriceProduct/PriceProductConfig.php`: + +```php +namespace Pyz/Zed/PriceProduct; + +use Spryker/Zed/PriceProduct/PriceProductConfig as SprykerPriceProductConfig; +class PriceProductConfig extends SprykerPriceProductConfig +{ + /** + * Perform orphan prices removing automatically. + */ + protected const IS_DELETE_ORPHAN_STORE_PRICES_ON_SAVE_ENABLED = true; +} +``` + +Alternatively, automatic removal of "orphaned records" can be controlled by `OrphanPriceProductStoreRemovalVoterPluginInterface` plugins. + +Such plugins can vote *for* or *against* automatic removal of "orphaned records". The first plugin in the stack, that votes against the removal, disables it. If a plugin votes for removal, all other plugins in the stack are still checked and may vote against. + +Removal voter plugins are registered in `src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php`: + +```php +namespace Pyz\Zed\PriceProduct; + +use Spryker\Zed\AclEntity\Communication\Plugin\PriceProduct\AclEntityOrphanPriceProductStoreRemovalVoterPlugin; +use Spryker\Zed\PriceProduct\PriceProductDependencyProvider as SprykerPriceProductDependencyProvider; + +class PriceProductDependencyProvider extends SprykerPriceProductDependencyProvider +{ + protected function getOrphanPriceProductStoreRemovalVoterPlugins(): array + { + return [ + new AclEntityOrphanPriceProductStoreRemovalVoterPlugin(), + ]; + } +} +``` + +`AclEntityOrphanPriceProductStoreRemovalVoterPlugin` is an example of voter plugins. It enables removal of "orphaned" records in `spy_price_product_store` table, except for the case when prices are edited in the Merchant Portal UI. +In the latter case, removal is only possible by running `price-product-store:optimize` command (see below). + +{% info_block warningBox "Warning" %} + +Note, that if any `OrphanPriceProductStoreRemovalVoterPluginInterface` plugins are registered, config constant `IS_DELETE_ORPHAN_STORE_PRICES_ON_SAVE_ENABLED` is ignored. + +{% endinfo_block %} + +Another option is to run `console price-product-store:optimize` from time to time when needed. + +{% endinfo_block %} + +### Service + +- `PriceProductFilterPluginInterface` — filters array of prices based on `PriceProductFilterTransfer`. +- `PriceProductDimensionExpanderStrategyPluginInterface` — expands `PriceProductDimension` transfer basing on some properties of this transfer (like `idPriceProductDefault`). + +Reading prices from Storage is implemented in the `PriceProductStorage` module, plugins for reading prices reside in the `PriceProductStorageExtension` module (`/Spryker/Client/PriceProductStorageExtension/Dependency/Plugin/PriceProductStoragePriceDimensionPluginInterface`) which has two methods for reading prices from Storage: `findProductConcretePrices($id)` and `findProductAbstractPrices($id)` + +Prices for price dimension inside Storage are supposed to be stored as a separate key-value for each product, abstract and concrete. For example, can check `kv:price_product_abstract:X` (X = ID of product). + +All plugins can be added on the project level in: + +- `PriceProductDependencyProvider` for the Zed and Service layers. +- `PriceProductStorageDependencyProvider` for the Client layer. diff --git a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-and-export-price-management-data.md b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-and-export-price-management-data.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-and-export-price-management-data.md rename to docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-and-export-price-management-data.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-currency.csv.md b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-currency.csv.md similarity index 95% rename from docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-currency.csv.md rename to docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-currency.csv.md index da92e3f3fbf..f4ea7662f6a 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-currency.csv.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-currency.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-currencycsv originalArticleId: d4ee04b4-8159-4846-9c3a-d98c28423b5c redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-currency.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-currency.csv.html - /docs/pbc/all/price-management/202311.0/base-shop/import-and-export-data/file-details-currency.csv.html - /docs/pbc/all/price-management/202204.0/base-shop/import-and-export-data/import-file-details-currency.csv.html diff --git a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md similarity index 96% rename from docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md rename to docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md index 7e96547e22e..d18dd6d2b0f 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-price-schedulecsv originalArticleId: 0662559b-6487-4d88-855e-3b605fc326c1 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price-schedule.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/pricing/file-details-product-price-schedule.csv.html - /docs/scos/dev/tutorials/201907.0/howtos/feature-howtos/howto-import-scheduled-prices.html - /tutorials/howtos/feature_howtos/ht-import-scheduled-prices-201907.htm diff --git a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md similarity index 96% rename from docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md rename to docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md index 6b67b5880fd..56f8a2abad2 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/import-and-export-data/import-file-details-product-price.csv.md @@ -5,6 +5,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-pricecsv originalArticleId: 8b15001c-2219-48ad-86cf-a60e6ad09d28 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/import-and-export-data/import-file-details-product-price.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/pricing/file-details-product-price.csv.html - /docs/pbc/all/price-management/202311.0/base-shop/import-and-export-data/file-details-product-price.csv.html - /docs/pbc/all/price-management/202204.0/base-shop/import-and-export-data/import-file-details-product-price.csv.html diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md new file mode 100644 index 00000000000..5e4c3f9bae2 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.md @@ -0,0 +1,19 @@ +--- +title: Integrate the Merchant Custom Prices feature +description: The Merchant Custom Price Feature allows setting specific prices for merchants. The guide describes the process of integrating the feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/merchant-custom-prices-feature-integration +originalArticleId: 7b16873a-0326-4f7c-ae97-62bd7e0c3b81 +redirect_from: + - /docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html + - /2021080/docs/merchant-custom-prices-feature-integration + - /2021080/docs/en/merchant-custom-prices-feature-integration + - /docs/merchant-custom-prices-feature-integration + - /docs/en/merchant-custom-prices-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/merchant-custom-prices-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/merchant-custom-prices-feature-integration.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-merchant-custom-prices-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-merchant-custom-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature-dynamic-multistore.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature-dynamic-multistore.md new file mode 100644 index 00000000000..038de1dc3b2 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install the Prices feature + Dynamic Multistore +description: Learn how to install the Prices feature + Dynamic Multistore within your Spryker based projects +last_updated: Apr 25, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md similarity index 100% rename from docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-feature.md diff --git a/docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md similarity index 100% rename from docs/pbc/all/price-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-prices-per-merchant-relation-feature.md diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md new file mode 100644 index 00000000000..5ae3d6ffaf9 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Scheduled Prices feature +description: Use the guide to install the Scheduled Prices feature into your Spryker basedproject. +last_updated: Aug 22, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/scheduled-prices-feature-integration +originalArticleId: 9b64041e-a249-4675-8e39-82b016675f3c +redirect_from: + - /docs/pbc/all/price-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.html + - /2021080/docs/scheduled-prices-feature-integration + - /2021080/docs/en/scheduled-prices-feature-integration + - /docs/scheduled-prices-feature-integration + - /docs/en/scheduled-prices-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/scheduled-prices-feature-integration.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-scheduled-prices-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-scheduled-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md new file mode 100644 index 00000000000..f6c729df5ab --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.md @@ -0,0 +1,25 @@ +--- +title: Install the Product Price Glue API +description: Learn how to install thee Product Price GLUE API in to your Spryker based projects. +last_updated: Jun 18, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-prices-api-feature-integration +originalArticleId: 50d3f39f-3a3c-4fc2-a717-179a0205dee7 +redirect_from: + - /2021080/docs/glue-api-prices-api-feature-integration + - /2021080/docs/en/glue-api-prices-api-feature-integration + - /docs/glue-api-prices-api-feature-integration + - /docs/en/glue-api-prices-api-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-price-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-price-feature-integration.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/install-the-product-price-glue-api.html +related: + - title: Install the Prices feature + link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html + - title: Retrieving abstract product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html + - title: Retrieving concrete product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-price-glue-api.md %} diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md new file mode 100644 index 00000000000..87f3c0d0373 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the Currency module +description: Use the guide to update versions to the newer ones of the Currency module for your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-currency +originalArticleId: 9f4fb3f2-3ab9-42fd-9fd0-dda4131e8444 +redirect_from: + - /2021080/docs/mg-currency + - /2021080/docs/en/mg-currency + - /docs/mg-currency + - /docs/en/mg-currency + - /v1/docs/mg-currency + - /v1/docs/en/mg-currency + - /v2/docs/mg-currency + - /v2/docs/en/mg-currency + - /v3/docs/mg-currency + - /v3/docs/en/mg-currency + - /v4/docs/mg-currency + - /v4/docs/en/mg-currency + - /v5/docs/mg-currency + - /v5/docs/en/mg-currency + - /v6/docs/mg-currency + - /v6/docs/en/mg-currency + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-currency.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-currency.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-currency-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-currency-module.md %} diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-price-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-price-module.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-price-module.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-price-module.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-pricecartconnector-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-pricecartconnector-module.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-pricecartconnector-module.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-pricecartconnector-module.md diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.md new file mode 100644 index 00000000000..ac60efb179c --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.md @@ -0,0 +1,36 @@ +--- +title: Upgrade the PriceProduct module +description: Use the guide to migrate to a newer version of the PriceProduct module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-priceproduct +originalArticleId: 40887521-7ada-48da-b160-7c9152e6a0a8 +redirect_from: + - /2021080/docs/mg-priceproduct + - /2021080/docs/en/mg-priceproduct + - /docs/mg-priceproduct + - /docs/en/mg-priceproduct + - /v1/docs/mg-priceproduct + - /v1/docs/en/mg-priceproduct + - /v2/docs/mg-priceproduct + - /v2/docs/en/mg-priceproduct + - /v3/docs/mg-priceproduct + - /v3/docs/en/mg-priceproduct + - /v4/docs/mg-priceproduct + - /v4/docs/en/mg-priceproduct + - /v5/docs/mg-priceproduct + - /v5/docs/en/mg-priceproduct + - /v6/docs/mg-priceproduct + - /v6/docs/en/mg-priceproduct + - docs/scos/dev/module-migration-guides/201811.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/201903.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/201907.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/202001.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/202005.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/202108.0/migration-guide-priceproduct.html + - docs/scos/dev/module-migration-guides/202311.0/migration-guide-priceproduct.html + - /module_migration_guides/mg-priceproduct.htm + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproduct-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-priceproduct-module.md %} diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedule-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedule-module.md new file mode 100644 index 00000000000..6af9b19537a --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedule-module.md @@ -0,0 +1,28 @@ +--- +title: Upgrade the PriceProductSchedule module +description: Use the guide to update the PriceProductSchedule module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-price-product-schedule +originalArticleId: f5314ef7-b1aa-4309-8f02-6815e4202415 +redirect_from: + - /2021080/docs/mg-price-product-schedule + - /2021080/docs/en/mg-price-product-schedule + - /docs/mg-price-product-schedule + - /docs/en/mg-price-product-schedule + - /v4/docs/mg-price-product-schedule + - /v4/docs/en/mg-price-product-schedule + - /v5/docs/mg-price-product-schedule + - /v5/docs/en/mg-price-product-schedule + - /v6/docs/mg-price-product-schedule + - /v6/docs/en/mg-price-product-schedule + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-priceproductschedule.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-priceproductschedule.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-priceproductschedule.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-priceproductschedule.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-priceproductschedule.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedule-module.html + +--- + +{% include pbc/all/upgrade-modules/upgrade-the-priceproductschedule-module.md %} diff --git a/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedulegui-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedulegui-module.md new file mode 100644 index 00000000000..2ca1787e60b --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedulegui-module.md @@ -0,0 +1,27 @@ +--- +title: Upgrade the PriceProductScheduleGui module +description: Use the guide to update the PriceProductScheduleGui module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-price-product-schedule-gui +originalArticleId: 859d0238-d7e4-4f94-ac71-7c1543547364 +redirect_from: + - /2021080/docs/mg-price-product-schedule-gui + - /2021080/docs/en/mg-price-product-schedule-gui + - /docs/mg-price-product-schedule-gui + - /docs/en/mg-price-product-schedule-gui + - /v4/docs/mg-price-product-schedule-gui + - /v4/docs/en/mg-price-product-schedule-gui + - /v5/docs/mg-price-product-schedule-gui + - /v5/docs/en/mg-price-product-schedule-gui + - /v6/docs/mg-price-product-schedule-gui + - /v6/docs/en/mg-price-product-schedule-gui + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-priceproductschedulegui.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-priceproductschedulegui.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-priceproductschedulegui.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-priceproductschedulegui.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-priceproductschedulegui.html + - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductschedulegui-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-priceproductschedulegui-module.md %} diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductstorage-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductstorage-module.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductstorage-module.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductstorage-module.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolume-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolume-module.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolume-module.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolume-module.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolumegui-module.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolumegui-module.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolumegui-module.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-priceproductvolumegui-module.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-crud-scheduled-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-crud-scheduled-prices.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-crud-scheduled-prices.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-crud-scheduled-prices.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md similarity index 99% rename from docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md rename to docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md index a7e270667e7..907cc54cfa3 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.md @@ -29,7 +29,7 @@ redirect_from: - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-multi-currency.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-multi-currency.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-multi-currency.html - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-multi-currency.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-multi-currency.html - /docs/pbc/all/price-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-to-multi-currency.html related: - title: Upgrade the Currency diff --git a/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-scheduled-prices-to-abstract-products-and-product-bundles.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-scheduled-prices-to-abstract-products-and-product-bundles.md new file mode 100644 index 00000000000..f1ecc2c3a53 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-scheduled-prices-to-abstract-products-and-product-bundles.md @@ -0,0 +1,62 @@ +--- +title: Add scheduled prices to abstract products and product bundles +description: Learn how to add scheduled prices to abstract products in the Spryker Back Office for your Spryker based projects. +last_updated: June 27, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/adding-scheduled-prices-to-abstract-products +originalArticleId: 133e924e-f8f0-46b4-9cc0-29216ed21455 +redirect_from: + - /2021080/docs/adding-scheduled-prices-to-abstract-products + - /2021080/docs/en/adding-scheduled-prices-to-abstract-products + - /docs/adding-scheduled-prices-to-abstract-products + - /docs/en/adding-scheduled-prices-to-abstract-products + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products/adding-scheduled-prices-to-abstract-products.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products-and-product-bundles/add-scheduled-prices-to-abstract-products-and-product-bundles.html + - /docs/pbc/all/price-management/202204.0/base-shop/manage-in-the-back-office/add-scheduled-prices-to-abstract-products-and-product-bundles.html +--- + +This doc describes how to add scheduled prices to abstract products and product bundles in the Back Office. + +## Prerequisites + +- [Create an abstract product or product bundle](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) to add scheduled prices to. + +- Review the [reference information](#reference-information-add-scheduled-prices-to-abstract-products-and-product-bundles) before you start, or look up the necessary information as you go through the process. + +## Import scheduled prices for abstract products and product bundles + +If you want to add more than five scheduled prices, it might be quicker to [import the scheduled prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-in-the-back-office/create-scheduled-prices.html). + +## Add a scheduled price to an abstract product or product bundle + +1. Go to **Catalog > Products**. +2. Next to the product you want to add a scheduled price for, click **Edit**. +3. On the **Edit Product Abstract: {SKU}** page, click the **Scheduled Prices** tab. +4. Click **Add scheduled price**. +5. Select a **STORE**. +6. Select a **CURRENCY**. +7. Enter a **NET PRICE**. +8. Optional: Enter a **GROSS PRICE**. +9. Select a **PRICE TYPE**. +10. Select a **START FROM (INCLUDED)** date and time. +11. Select a **FINISH AT (INCLUDED)** date and time. +12. Click **Save**. + This opens the *Edit Product* page with the success message displayed. The scheduled price you've added is displayed in the table. + +**Tips and tricks** +
      You can add multiple scheduled prices for the same abstract product. Repeat the prior steps until you add the desired number of scheduled prices. + + +## Reference information: Add scheduled prices to abstract products and product bundles + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| ABSTRACT SKU | Unique identifier of an abstract product to import the scheduled price for. The field is disabled because you are adding the scheduled price to a particular abstract product. | +| CONCRETE SKU | Unique identifier of a concrete product to import the scheduled price for. The field is disabled because you are adding a scheduled price to a particular abstract product. | +| STORE | [Store](/docs/dg/dev/internationalization-and-multi-store/set-up-multiple-stores.html) in which the scheduled price will be displayed. If you want to add the scheduled price for multiple stores, you can repeat the full procedure for all of the needed stores. | +| CURRENCY | Currency in which the scheduled price is defined. If you want to add the scheduled price for multiple currencies, you can repeat the full procedure for all of the needed currencies. | +| NET PRICE | Net value of the product during the time period defined in **START FROM (INCLUDED)** and **FINISH AT (INCLUDED)**. | +| GROSS PRICE |Gross value of product during the time period defined in **START FROM (INCLUDED)** and **FINISH AT (INCLUDED)**. | +| PRICE TYPE | Price type in which price schedule is defined: DEFAULT or ORIGINAL.| +| START FROM (INCLUDED) | Date and time on which the scheduled price will be applied. | +| FINISH AT (INCLUDED) | Date and time on which the product price will be reverted to the regular price. | diff --git a/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-volume-prices-to-abstract-products-and-product-bundles.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-volume-prices-to-abstract-products-and-product-bundles.md new file mode 100644 index 00000000000..c895494c031 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/add-volume-prices-to-abstract-products-and-product-bundles.md @@ -0,0 +1,59 @@ +--- +title: Add volume prices to abstract products and product bundles +description: Learn how you can add volume prices to abstract products in the back office within your Spryker based products +last_updated: June 27, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/adding-volume-prices-to-abstract-products +originalArticleId: 5e6dac98-955a-4e8c-abad-ce2b0dd6bacf +redirect_from: + - /2021080/docs/adding-volume-prices-to-abstract-products + - /2021080/docs/en/adding-volume-prices-to-abstract-products + - /docs/adding-volume-prices-to-abstract-products + - /docs/en/adding-volume-prices-to-abstract-products + - /docs/scos/user/back-office-user-guides/202001.0/catalog/products/manage-abstract-products/adding-volume-prices-to-abstract-products.html + - /docs/scos/user/back-office-user-guides/202200.0/catalog/products/manage-abstract-products/adding-volume-prices-to-abstract-products.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products/adding-volume-prices-to-abstract-products.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products-and-product-bundles/add-volume-prices-to-abstract-products-and-product-bundles.html + - /docs/pbc/all/price-management/202204.0/base-shop/manage-in-the-back-office/add-volume-prices-to-abstract-products-and-product-bundles.html +--- + +This document describes how to add volume prices to abstract products. + +## Prerequisites + +- Define default or original gross prices for the stores you want to define volume prices for. To learn how to do that, see [Edit prices of an abstract product or product bundle](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.html#edit-prices-of-an-abstract-product-or-product-bundle). + +- Review the [reference information](#reference-information-add-volume-prices-to-abstract-products) before you start, or look up the necessary information as you go through the process. + +## Add volume prices to an abstract product + +1. Go to **Catalog > Products**. + This opens the **Product** page. +2. Next to the product you want to add volume prices for, click **Edit**. +3. On the **Edit Product Abstract: {SKU}** page, click the **Price & Tax** tab. +4. Next to the store you want to add volume prices for, click **Add Volume Price: {PRICE_TYPE}**. +5. On the **Add volume prices for product: {SKU}** page, enter a **Quantity**. +6. For the quantity you have entered, enter a **Gross price**. +7. Optional: For the quantity you have entered, enter a **Net price**. +8. Optional: To add more volume prices than the number of the rows displayed on the page, select **Save and add more rows**. +9. Repeat steps 4 to 7 until you add all the desired volume prices. +10. Select **Save and exit**. + This opens the **Edit Product Abstract: {SKU}** page with a success message displayed. + +## Reference information: Add volume prices to abstract products + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| Quantity | Quantity of the product to which the prices from **Gross price** and **Net price** fields apply. | +| Gross price | Gross price of the product with the quantity equal or bigger than defined in the **Quantity** field. A gross price is a price after tax. | +| Net price | Net price of the product with the quantity equal or bigger than defined in the **Quantity** field. A net price is a price before tax. | + +### Storefront example + +Let's say you have a product that you want to sell with a special price if a user wants to buy a specific number of the same product. For example, a Smartphone with flash memory of 16GB costs 25 Euros per item, but you defined that if a user buys three items, the price is 23 Euros instead of 25. + +
      + +
      diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md similarity index 98% rename from docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md index 9b2a5627e22..a4004219767 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/create-scheduled-prices.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-scheduled-prices originalArticleId: 4428f373-b26a-4dcf-bd40-b9fbad5f5704 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/create-scheduled-prices.html - /2021080/docs/creating-scheduled-prices - /2021080/docs/en/creating-scheduled-prices - /docs/creating-scheduled-prices diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/manage-prices-in-the-back-office.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/manage-prices-in-the-back-office.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/manage-prices-in-the-back-office.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/manage-prices-in-the-back-office.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/manage-scheduled-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/manage-scheduled-prices.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/manage-in-the-back-office/manage-scheduled-prices.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-in-the-back-office/manage-scheduled-prices.md diff --git a/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.md new file mode 100644 index 00000000000..19e26593f3c --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.md @@ -0,0 +1,214 @@ +--- +title: "Glue API: Retrieve abstract product prices" +description: Retrieve details information about prices of abstract products using the Spryker GLUE API within your Spryker Projects. +last_updated: Jun 21, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-abstract-product-prices +originalArticleId: 903570fe-6ca4-4165-b0d3-6764e0262308 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-abstract-product-prices.html + - /docs/pbc/all/price-management/202311.0/base-shop/manage-using-glue-api/retrieve-abstract-product-prices.html + - /docs/pbc/all/price-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html +related: + - title: Retrieving abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html + - title: Retrieve abstract product availability + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html + - title: Retrieving image sets of abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html + - title: Retrieving tax sets + link: docs/pbc/all/tax-management/page.version/base-shop/manage-using-glue-api/retrieve-tax-sets.html +--- + +This endpoint allows retrieving detailed information about the prices of abstract products. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) + +## Retrieve prices of an abstract product + +To retrieve prices of an abstract product, send the request: + +*** +`GET`**/abstract-products/*{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*/abstract-product-prices** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** | SKU of an abstract product to retrieve the prices of.| + +### Request + +| REQUEST | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/abstract-products/001/abstract-product-prices` | Retrieve the price of the 001 product. | +| `GET http://glue.mysprykershop.com/abstract-products/001/abstract-product-prices?currency=CHF&priceMode=GROSS_MODE` | Retrieve the gross price of the 001 product in Swiss Franc. | + + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| currency | Defines the currency to retrieve the price in. | USD, EUR, CHF | +| priceMode | Defines the price mode to retrieve the price in. | GROSS_MODE, NET_MODE | + +### Response + +
      Response sample: retrieve default prices of an abstract product + +```json +{ + "data": [ + { + "type": "abstract-product-prices", + "id": "001", + "attributes": { + "price": 9999, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9999, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 12564, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" + } +} +``` + +
      + +
      +Response sample: retrieve default and volume prices of an abstract product + +```json +{ + "data": [ + { + "type": "abstract-product-prices", + "id": "093", + "attributes": { + "price": 24899, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 24899, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093/abstract-product-prices" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093/abstract-product-prices" + } +} +``` + +
      + +
      Response sample: retrieve a gross price in Swiss Franc of an abstract product + + ```json + { + "data": [ + { + "type": "abstract-product-prices", + "id": "001", + "attributes": { + "price": 11499, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 11499, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 14449, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + } + ] + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/items?currency=CHF&priceMode=GROSS_MODE" + } +} +``` + +
      + + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 307 | Abstract product price is not found (for example, because of the wrong abstract product SKU. | +| 311 | Abstract product SKU is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md similarity index 98% rename from docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md index 60fb5e4cad0..94c9dc2368e 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-concrete-product-prices originalArticleId: 7192572b-0b8e-4bbb-a579-570eecffc1e2 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-concrete-product-prices.html - /docs/pbc/all/price-management/manage-using-glue-api/retrieve-concrete-product-prices.html - /docs/pbc/all/price-management/202311.0/base-shop/manage-using-glue-api/retrieve-concrete-product-prices.html diff --git a/docs/pbc/all/price-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md similarity index 100% rename from docs/pbc/all/price-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-abstract-products.md diff --git a/docs/pbc/all/price-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md b/docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md similarity index 100% rename from docs/pbc/all/price-management/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md rename to docs/pbc/all/price-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-prices-when-retrieving-concrete-products.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/merchant-custom-prices-feature-overview.md b/docs/pbc/all/price-management/202602.0/base-shop/merchant-custom-prices-feature-overview.md similarity index 98% rename from docs/pbc/all/price-management/202512.0/base-shop/merchant-custom-prices-feature-overview.md rename to docs/pbc/all/price-management/202602.0/base-shop/merchant-custom-prices-feature-overview.md index 6fa8761768f..880b60ed6eb 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/merchant-custom-prices-feature-overview.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/merchant-custom-prices-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/merchant-custom-prices-feature-overview originalArticleId: 903b5851-5d21-4823-9ca4-695a55355b02 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/merchant-custom-prices-feature-overview.html - /2021080/docs/merchant-custom-prices-feature-overview - /2021080/docs/en/merchant-custom-prices-feature-overview - /docs/merchant-custom-prices-feature-overview diff --git a/docs/pbc/all/price-management/202512.0/base-shop/prices-feature-overview/prices-feature-overview.md b/docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/prices-feature-overview.md similarity index 98% rename from docs/pbc/all/price-management/202512.0/base-shop/prices-feature-overview/prices-feature-overview.md rename to docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/prices-feature-overview.md index 7f580a2e54b..350bbd03654 100644 --- a/docs/pbc/all/price-management/202512.0/base-shop/prices-feature-overview/prices-feature-overview.md +++ b/docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/prices-feature-overview.md @@ -6,8 +6,9 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/prices-overview originalArticleId: 003e8985-3230-4498-838b-234a10f1a810 redirect_from: + - /docs/pbc/all/price-management/202512.0/base-shop/prices-feature-overview/prices-feature-overview.html - /docs/scos/user/features/202200.0/prices-feature-overview/prices-feature-overview.html - - /docs/scos/user/features/202311.0/prices-feature-overview/prices-feature-overview.html + - /docs/scos/user/features/202311.0/prices-feature-overview/prices-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/prices-feature-walkthrough/prices-feature-walkthrough.html - /docs/scos/user/features/202108.0/prices-feature-overview/prices-feature-overview.html - /docs/scos/user/features/202005.0/prices-feature-overview/prices-feature-overview.html diff --git a/docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/volume-prices-overview.md b/docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/volume-prices-overview.md new file mode 100644 index 00000000000..8668574e70a --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/prices-feature-overview/volume-prices-overview.md @@ -0,0 +1,145 @@ +--- +title: Volume Prices overview +description: Volume pricing helps the merchants to gain the commitment of the customers. Providing volume discounts results in increasing the placement of large orders. +last_updated: Jul 9, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/volume-prices-overview +originalArticleId: f02ffa98-7d76-4d7d-8dbb-b96f46754627 +redirect_from: + - /2021080/docs/volume-prices-overview + - /2021080/docs/en/volume-prices-overview + - /docs/volume-prices-overview + - /docs/en/volume-prices-overview + - /docs/scos/user/features/202311.0/prices-feature-overview/volume-prices-overview.html + - /docs/pbc/all/price-management/prices-feature-overview/volume-prices-overview.html + - /docs/pbc/all/price-management/202204.0/base-shop/prices-feature-overview/volume-prices-overview.html +--- + +In highly competitive markets, the business tactic is made compelling by issuing drastic discounts when buying products in large quantities or volumes. + +Volume pricing helps the merchants to gain the commitment of the customers. Providing volume discounts result in increasing the placement of large orders with the small ones. Large orders are preferred as they reduce the expenses incurred by the company. + +Such incentives allow a business company to purchase additional inventory at a reduced cost and allow sellers or manufacturers to reduce the products by selling more units and increase their revenues per transaction. + +The following schema illustrates the connection between `spy_price_product_store` table links `spy_price_product_merchant_relationship` with the `spy_currency` and `spy_store` tables. + +![Database schema](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Price/Volume+Prices/Volume+Prices+Feature+Overview/volume-prices-dbschema.png) + +`price_data` in`spy_price_product_store` table contains a JSON with prices per mode, currency and type. + +{% info_block infoBox %} + +The "price_data" field is a JSON with attributes such as volume prices, merchant prices, customer prices and then a specific set of prices inside its price type (["QTY" => 10, "GROSS(DEFAULT)" => 100, "NET(DEFAULT)" => 90]). + +{% endinfo_block %} + + +The following is an example of JSON: + +```js +[ + "EUR" => [ + "GROSS_MODE" => [ + "DEFAULT" => 9999, + "ORIGINAL" => 12564, + ], + "NET_MODE" => [ + "DEFAULT" => 8999, + "ORIGINAL" => 11308, + ], + + "price_data" => ["QTY" => 10, "GROSS(DEFAULT)" => 100, "NET(DEFAULT)" => 90], ["QTY" => 20, "GROSS(DEFAULT)" => 90, "NET(DEFAULT)" => 80] + ], + "CHF" => [ + "GROSS_MODE" => [ + "DEFAULT" => 11499, + "ORIGINAL" => 14449, + ], + "NET_MODE" => [ + "DEFAULT" => 10349, + "ORIGINAL" => 13004, + ], + ], +], +``` + +Volume prices are configured per store and per currency, and a shop administrator can set volume prices for every locale. + +Volume prices are set for both gross and net mode and are either inherited from the abstract product or specified directly for a standalone concrete product. + +{% info_block infoBox %} + +The concrete product can also have its own volume prices different from its abstract (if they are explicitly defined per `concrete_sku`). + +{% endinfo_block %} + +A specific volume price for a concrete product has a higher priority over an inherited one from its abstract product. + +The volume prices are imported using [data importer](https://github.com/spryker/price-product-data-import/blob/master/data/import/product_price.csv). The JSON with volume prices is added to the `price_data.volume_prices` column as shown in the example: + +![CSV file containing volume prices](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Price/Volume+Prices/Volume+Prices+Feature+Overview/volume-prices-csv.png) + +After the import is completed the volume prices are shown on the product detail page: + +![Volume prices displayed on the product detail page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Price/Volume+Prices/Volume+Prices+Feature+Overview/volume-prices-pdp.png) + +Once the product is added to the shopping list or to the cart, the item price corresponding to the volume price is displayed for that quantity. If the user increases or decreases the quantity in cart (but not in shopping list since here we don't really change quantities), the price is updated once the user goes over or under a threshold defined by the volume prices. + +## Threshold + +Volume pricing is applied when a certain threshold is reached. + +Threshold is a minimum value that serves as a benchmark/boundary for a discounted price when the product is dependent on the volume bought—for example, the number of units of the product. + +{% info_block infoBox %} + +This means that if you buy more quantity of products or sometimes may be group of products, you would get discount based on the volume of purchase. All of the individual products exceeding the threshold will receive the special price. + +{% endinfo_block %} + +The volume price is applicable only if the shopper exceeds a certain quantity threshold—the number of units the customer chooses to buy. + +The following table illustrates a typical volume pricing model: + +| Quantity of products | Price per products | Total Price | +| --- | --- | --- | +| 1 | $100 | $100 | +| 5 | $70 | $350 | +| 10 | $50 | $500 | +| 20 | $40 | $800 | + +The new price will go into effect after 5 units are purchased and only apply to the units beyond that threshold. The buyer would still pay full price for the first 5 units they procured. + +{% info_block infoBox %} + +If the customer selects five, each unit will cost $70. If the customer selects 12, each unit will cost $50. + +{% endinfo_block %} + +Volume prices can also mean higher prices per item at increasing thresholds. + +{% info_block infoBox %} + +That is a particular case of electricity bills where you pay more if you use more. + +{% endinfo_block %} + +## Current Constraints + +{% info_block infoBox %} + +The feature has the following functional constraints which are going to be resolved in the future. + +{% endinfo_block %} + +- Unlike other prices in Spryker which support both price types (DEFAULT and ORIGINAL), volume price supports only DEFAULT price type. + +- As volume price does not support ORIGINAL price type, you cannot define a promotion for a volume price. + +- Volume prices cannot be applied to the [prices per merchant relation](/docs/pbc/all/price-management/{{page.version}}/base-shop/merchant-custom-prices-feature-overview.html). + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Add volume prices to abstract products](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-in-the-back-office/add-volume-prices-to-abstract-products-and-product-bundles.html) | diff --git a/docs/pbc/all/price-management/202512.0/base-shop/scheduled-prices-feature-overview.md b/docs/pbc/all/price-management/202602.0/base-shop/scheduled-prices-feature-overview.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/scheduled-prices-feature-overview.md rename to docs/pbc/all/price-management/202602.0/base-shop/scheduled-prices-feature-overview.md diff --git a/docs/pbc/all/price-management/202512.0/base-shop/tutorials-and-howtos/create-personalized-prices.md b/docs/pbc/all/price-management/202602.0/base-shop/tutorials-and-howtos/create-personalized-prices.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/base-shop/tutorials-and-howtos/create-personalized-prices.md rename to docs/pbc/all/price-management/202602.0/base-shop/tutorials-and-howtos/create-personalized-prices.md diff --git a/docs/pbc/all/price-management/202602.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md b/docs/pbc/all/price-management/202602.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md new file mode 100644 index 00000000000..b487fd682e4 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/base-shop/tutorials-and-howtos/handle-twenty-five-million-prices-in-spryker-commerce-os.md @@ -0,0 +1,380 @@ +--- +title: Handle twenty five million prices in Spryker Commerce OS +description: Learn how we enabled Spryker to handle 25 million of prices. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/howto-handle-twenty-five-million-prices-in-spryker-commerce-os +originalArticleId: f6f42291-bbf4-4fd1-b506-131fafcd0257 +redirect_from: + - /docs/scos/dev/tutorials-and-howtos/howtos/howto-handle-twenty-five-million-prices-in-spryker-commerce-os.html + - /docs/pbc/all/price-management/202311.0/base-shop/tutorials-and-howtos/howto-handle-twenty-five-million-prices-in-spryker-commerce-os.html + - /docs/pbc/all/price-management/202204.0/base-shop/tutorials-and-howtos/howto-handle-twenty-five-million-prices-in-spryker-commerce-os.html +--- + +B2B business model usually challenges any software with higher requirements to amounts of data and business complexity. + +Imagine you have thousands of products and customers with unique pricing terms and conditions. A product can have thousands of prices assigned—one per customer. This document shares the technical challenges of handling such a number of prices and the solutions to solve them. + +Such a number of prices cannot be managed manually, but it's defined by business rules based on which the prices can be generated automatically. For example, you might agree on the special terms with your B2B partner, and they receive their own prices for the whole catalog. It might be considered as a discount, but usually, it's not a single simple rule but a set of rules and their priorities for each partner. These rules exist in an ERP system, which can export data through SOAP or CSV files. + +In Spryker, each price is imported as a [price dimension](/docs/pbc/all/price-management/{{page.version}}/base-shop/merchant-custom-prices-feature-overview.html) and has a unique key, which determines its relation to a customer—for example, `specificPrice-DEFAULT-EUR-NET_MODE-FOO1-BAR2`. To appear on the Storefront, the prices must appear in the key-value store (Redis or Valkey) price entries and abstract product search documents so that facet filters can be applied in search and categories. + +Price import flow: + +![price import flow ](https://spryker.s3.eu-central-1.amazonaws.com/docs/Tutorials/HowTos/HowTo+-+handle+25+million+prices+in+Spryker+Commerce+OS/price-import-flow.jpg) + + +## Challenges + +When enabling Spryker to handle such a number of prices, the following challenges occur: + +1. 25,000,000 prices are imported in two separate price dimensions. +2. A product can have about 40,000 prices. This results in overpopulated product abstract search documents: each document aggregates prices of abstract products and all related concrete products. Each price is represented as an indexed field in the search document. Increasing the number of indexed fields slows `Elasticsearch(ES)` down. +3. Overloaded product abstract search documents cause issues with memory limit and slow down [Publish and Synchronization](/docs/dg/dev/backend-development/data-manipulation/data-publishing/publish-and-synchronization.html). The average document size is bigger than 1 MB. +4. When more than 100 product abstract search documents are processed at a time, the payload gets above 100 MB, and ES rejects queries. [AWS native service](https://docs.aws.amazon.com/elasticsearch-service/{{page.version}}/developerguide/aes-limits.html) does not allow changing this limit. + +5. Each price having unique key results in more different index properties in the whole index. Key structure: `specificPrice-DEFAULT-EUR-NET_MODE-FOO1-BAR2`. This key structure requires millions of actual facets, which slows down ES too much. + +## Problem + +The following example represents a short version of the overpopulated document structure: + +```json +{ + "store": "ABC", + "locale": "en_US", + "type": "product_abstract", + "is-active": true, + "integer-facet": [{ + "facet-name": "specificPrice-DEFAULT-EUR-NET_MODE-FOO1-BAR2", + "facet-value": [319203] + }, { + "facet-name": "specificPrice-DEFAULT-EUR-GROSS_MODE-FOO2-BAR1", + "facet-value": [379852] + }, { + "facet-name": "specificPrice-DEFAULT-EUR-NET_MODE-FOO3-BAR3", + "facet-value": [324272] + }, { + "facet-name": "specificPrice-DEFAULT-EUR-GROSS_MODE-FOO4-BAR4", + "facet-value": [385884] + }, + { + "facet-name": "merchantPrice-DEFAULT-EUR-NET_MODE-30", + "facet-value": [319200] + }, { + "facet-name": "merchantPrice-DEFAULT-EUR-GROSS_MODE-30", + "facet-value": [379848] + } + ], + "integer-sort": { + "merchantPrice-DEFAULT-EUR-NET_MODE-30": 319200, + "merchantPrice-DEFAULT-EUR-GROSS_MODE-30": 379848, + "specificPrice-DEFAULT-EUR-NET_MODE-FOO-BAR": 122, + "specificPrice-DEFAULT-EUR-GROSS_MODE-FOO1-BAR1": 379852, + "specificPrice-DEFAULT-EUR-NET_MODE-FOO2-BAR2": 324272, + "specificPrice-DEFAULT-EUR-GROSS_MODE-FOO3-BAR3": 385884 + } +} +``` + +All the `specificPrice-DEFAULT-EUR-NET_MODE-FOO-BAR` properties in the document are converted into mapping properties in ES. The default limit of 1,000 properties is hit quickly and receives the following exception: + +```text +\/de_search\/page\/product_abstract:de:de_de:576 caused Limit of total fields [1000] in index [de_search] has been exceeded\nindex` +``` + +You could increase the limit, but it slows down the reindexing process. + +The events with the data for ES are processed and acknowledged in RabbitMQ but not delivered to the search service, and you don't get any related errors. + +In AWS, the `http.max_content_length` ES limit defines the maximum payload size in an HTTP request. In this case, the payload is higher than the default limit of 100 MB without the infrastructural option to increase it. To learn about cloud service providers, technologies, and limits, see [Amazon Elasticsearch Service Limits](https://docs.aws.amazon.com/elasticsearch-service/{{page.version}}/developerguide/aes-limits.html). + +## Evaluated solutions + +The evaluated solutions are as follows: + +1. ES join field type. + This ES functionality is similar to the classical joins in relational databases. This solution solves your problem faster and with less effort. To learn about the implementation of this solution, see [Elasticsearch join data type: Implementation](#elasticsearch-join-field-type-implementation). Also, have a look at the other evaluated solutions as they may be more appropriate in your particular case. +
      Documentation: [Join field type](https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html) +2. Multi sharding with the `_routing` field. + The idea is to avoid indexing problems by sharing big documents between shards. Breaking a huge index into smaller ones makes it easier for the search to index data. The solution is complex and does not solve the payload issues. +
      Documentation: [`_routing` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html) +3. Use Postgres or combine ES and Postgres. + Postgres provides search functionalities, and you can set up an additional database dedicated to running searches or helping ES with additional data. The `script_scoring` function in search lets you embed any data, though performance is decreased, as this script is evaluated for every document when a search is being performed. + Compared to the first option, this solution is more complex. +
      Documentation: + - [Script score query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html#script-score-query-ex-request) + - [Chapter 12. Full-Text Search](https://www.postgresql.org/docs/9.5/textsearch.html) + +## Elasticsearch Join field type: Implementation + +To solve the ES indexing issue, we reduced the size of product abstract documents, which reduced dynamic mapping properties. + +To implement the solution, follow these steps: + +1. To use the Join field type feature and declare a join relation in `search.json`, restrict the ES index to use a single type of document. The following example represents a mapping definition with a declared join relation: + +```json +{ + "settings": { + "mapping.single_type": true, + }, + + "mappings": { + "page": { + "properties": { + "joined_price": { + "type": "join", + "relations": { + "product_price": ["specific_price"] + } + } + } + } + } +} +``` + +2. To make the product-price relation work, extend product abstract documents with the required `joined_price` section: + +```json +product_abstract:abc:en_us:876 +{ + "store": "ABC", + "locale": "en_US", + "type": "product_abstract", + "is-active": true, + ..... + "joined_price": { + "name": "product_price" + } +} +``` + +3. Introduce a new type of price document with the following parameters: +- parent document ID +- price +- currency +- unique identifier + +The example of the price document: + +```json +price_product_concrete_group_specific:abc:50445:foo-bar:en_us +{ + "joined_price": { + "name": "specific_price", + "parent": "product_abstract:abc:en_us:50504" + }, + "kg_ekg": "FOO-BAR", + "currency": "EUR", + "price": 101 +} +``` + +These two documents can be viewed as two tables with a foreign key in terms of relational databases. + +### Elasticsearch join data type feature: Side effects + +The side effects of this solution are the following: + +1. The [Product Reviews feature](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) is disabled because it requires multiple document types per index. +2. Performance requires additional attention. You can read about performance issues related to the feature in [Parent-join and performance](https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html#_parent_join_and_performance). +3. Because of ES limitations, you can't build proper queries to run sorting by prices. Only facet filtering is possible. + +### How to speed up the publishing process + +To implement a parent-child relationship between documents, we built a standard search module that follows [Spryker architecture](/docs/dg/dev/backend-development/data-manipulation/data-publishing/publish-and-synchronization.html). The new price search module is subscribed to the publish and unpublish events of abstract products to manage related price documents in the search. The listener in the search module receives a product abstract ID and fetches all related prices to publish or unpublish them, depending on the incoming event. Because of a large number of prices, the publish process became slow. This causes the following issues. + +#### Issues + +The following issues related to a slow publish process have been added: + +1. Memory limit and performance issues. As a product abstract can stand for about forty thousand prices, a table with 25,000,000 rows is parsed every time to find them. The default message chunk size of an event queue is 500. With this size, about two million rows of data have to be published per one bulk. +2. The following has to be done simultaneously: + - Trigger product abstract events to update their structure in ES. + - Trigger their child documents to be published. +3. RabbitMQ connection issues. The connection is getting closed after fetching a bunch of messages because the PHP process takes too long to be executed. After processing the messages, PHP tries to acknowledge them using the old connection, which has been closed by RabbitMQ. Being single-threaded, the PHP library cannot asynchronously send any heartbeats when the thread is busy with something else. + For more information, see [Detecting Dead TCP Connections with Heartbeats and TCP Keepalives](https://www.rabbitmq.com/heartbeats.html). + +#### Evaluated solutions + +The following solutions were evaluated: +1. To handle bulk insert and update operations in the `_search` table, use [Common Table Expression (CTE)](https://www.postgresql.org/docs/10/queries-with.html) queries. We chose this solution because we had implemented it previously. To learn how this solution is used to optimize the speed of data importers, see [Data Importer Speed Optimization](/docs/dg/dev/data-import/{{page.version}}/data-import-optimization-guidelines.html). +2. To fill the `search` table on the insert update operations in the `entity` table, see the [PostgreSQL trigger feature](https://www.postgresql.org/docs/9.1/sql-createtrigger.html). +3. Implement a reconnection logic that establishes a new connection after catching an exception. + +#### Bulk insertion with raw SQL + +[Postgresql CTE](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-cte/) allows managing bulk inserts and updates of huge data amounts, which speeds up the execution of PHP processes. + +
      SQL query example + +```sql +WITH records AS +( + SELECT input.fkproduct, + input.fkkg, + input.fkekg, + input.pricekey, + input.fkerprecid, + input.data, + input.KEY, + id_pyz_price_product_concrete_group_specific_search AS idpyzpriceproductconcretegroupspecificsearch + FROM ( + SELECT Unnest(? :: varchar []) AS fkkg, + Unnest(? :: varchar []) AS fkekg, + Json_array_elements(?) AS data, + unnest(?::integer[]) AS fkproduct, + unnest(?::varchar[]) AS pricekey, + unnest(?::varchar[]) AS fkerprecid, + unnest(?::varchar[]) AS KEY ) input + LEFT JOIN pyz_price_product_concrete_group_specific_search + ON pyz_price_product_concrete_group_specific_search.KEY = input.KEY ), updated AS +( + UPDATE pyz_price_product_concrete_group_specific_search + SET fk_kg = records.fkkg, + fk_ekg = records.fkekg, + fk_product = records.fkproduct, + data = records.data, + price_key = records.pricekey, + fk_erp_rec_id = records.fkerprecid, + KEY = records.KEY, + updated_at = now() + FROM records + WHERE records.KEY = pyz_price_product_concrete_group_specific_search.KEY returning id_pyz_price_product_concrete_group_specific_search ), inserted AS +( + INSERT INTO pyz_price_product_concrete_group_specific_search + ( + id_pyz_price_product_concrete_group_specific_search, + fk_kg, + fk_ekg, + fk_product, + data, + price_key, + fk_erp_rec_id, + KEY, + created_at, + updated_at + ) + ( + SELECT nextval('pyz_price_product_concrete_group_specific_search_pk_seq'), + fkkg, + fkekg, + fkproduct, + data, + pricekey, + fkerprecid, + KEY, + now(), + now() + FROM records + WHERE idpyzpriceproductconcretegroupspecificsearch IS NULL ) returning id_pyz_price_product_concrete_group_specific_search ) +SELECT updated.id_pyz_price_product_concrete_group_specific_search +FROM updated +UNION ALL +SELECT inserted.id_pyz_price_product_concrete_group_specific_search +FROM inserted; +``` + +
      + +### Price events quick lane + +Prices are published by pushing the corresponding message to the generic event queue. As this queue can hold more messages than just those related to prices, it makes sense to introduce a dedicated queue for publishing only price-related information. + +You can configure it by tweaking the Event and EventBehavior modules. Allow the `EventBehavior` Propel behavior to accept additional parameters (except those related to columns). For example, allow it to accept the name of a custom queue, which is used later for pushing messages to the queue. In this case, price events are segregated from all other events and can be processed in parallel without being blocked by other heavier events. Also, this lets you configure different chunk sizes for the subscriber, resulting in a more optimized CPU usage and faster processing. + +To implement this functionality: + +1. Extend `EventEntityTransfer` with a new field, like `queueName`. +2. Override `\Spryker\Zed\EventBehavior\Persistence\Propel\Behavior\EventBehavior` and adjust it to accept an additional `queueName` parameter (except those related to columns) through the Propel schema files. + +{% info_block errorBox %} + +Ensure that `\Pyz\Zed\EventBehavior\Persistence\Propel\Behavior\ResourceAwareEventBehavior::addParameter()` is stored as a part of the `data` payload, which is saved to the`spy_event_behavior` table. + +{% endinfo_block %} + +3. Adjust `\Pyz\Zed\EventBehavior\Business\Model\TriggerManager::triggerEvents()` to extract the new piece of data from the payload obtained from the database and set it as the value of the newly created `EventEntityTransfer::queueName` property. + +4. Configure `\Spryker\Zed\Event\Business\Queue\Producer\EventQueueProducer::enqueueListenerBulk()` to check if `queueName` is set on the `EventEntityTransfer.` If it's set, this queue name is used to push event messages to. Otherwise, it falls back to the default event queue. + +Now you have a separate event queue for prices. This approach applies to any type of event. *Quick lane* ensures that critical data is replicated faster. + +### Tweaking database + +With millions of prices in a shop, we needed analytics tools to monitor data consistency in the database. The CSV files, which are the source of price data for analytics, are too big, so it's hard to process them. That's why we converted them into Postgres database tables. + +The Postgres `COPY` command is the fastest and easiest way to do that. This command copies the data from a CSV file to a database table. + +{% info_block errorBox %} + +To convert data successfully, the order of the columns in the database table must reflect the order in the CSV files. + +Example: + +```bash +#Populate tables with data from csv files +if ! PGPASSWORD=$DB_PASSWORD psql -d $DB_NAME -h $DB_HOST -U $DB_LOGIN -p $DB_PORT -v "ON_ERROR_STOP=1" < +src/Pyz/Zed/ProductMerchantPortalGui/ProductMerchantPortalGuiDependencyProvider.php + +```php + + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new MerchantRelationshipPriceProductTableFilterPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductAbstractTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductAbstractTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductAbstractTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductConcreteTableConfigurationExpanderPluginInterface> + */ + protected function getPriceProductConcreteTableConfigurationExpanderPlugins(): array + { + return [ + new MerchantRelationshipPriceProductConcreteTableConfigurationExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductMapperPluginInterface> + */ + protected function getPriceProductMapperPlugins(): array + { + return [ + new MerchantRelationshipPriceProductMapperPlugin(), + ]; + } +} +``` + + + +{% info_block warningBox "Verification" %} + +Log in to the Merchant Portal with a merchant that has at least one merchant relationship. + +Open any merchant product and make sure that the Prices table contains the "Customer" column for both: abstract and concrete products. + +Make sure that you can filter and sort the price table by Customer column. + +{% endinfo_block %} + +
      +src/Pyz/Service/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPreBuildPriceProductGroupKeyPlugins(): array + { + return [ + new MerchantRelationshipPreBuildPriceProductGroupKeyPlugin(), + ]; + } +} +``` + +
      + +{% info_block warningBox "Verification" %} + +Open any merchant product with a regular price. + +Create a customer-specific price with the same combination of currency and country as the existing price. + +Make sure that there is no validation error. + +{% endinfo_block %} + +
      +src/Pyz/Zed/PriceProduct/PriceProductDependencyProvider.php + +```php + + */ + protected function getPriceProductValidatorPlugins(): array + { + return [ + new MerchantRelationshipVolumePriceProductValidatorPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\PriceProductExtension\Dependency\Plugin\PriceProductCollectionDeletePluginInterface> + */ + protected function getPriceProductCollectionDeletePlugins(): array + { + return [ + new MerchantRelationshipPriceProductCollectionDeletePlugin(), + ]; + } +} +``` + +
      + +{% info_block warningBox "Verification" %} + +Make sure that you see the validation error while attempting to set or create the customer price for the volume price. + +Make sure that you can delete the customer price. + +{% endinfo_block %} + + +### 5) Filter out product offer prices + +{% info_block warningBox %} + +This option is only available if you have the [Marketplace Product Offer feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-feature.html) installed. + +{% endinfo_block %} + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | REQUIRED | PREREQUISITES | NAMESPACE | +|--------------------------------------------------------------------------|-----------|------------------------|---------------|--------------------------------------------------------------------------------| +| PriceProductOfferPriceProductTableFilterPlugin | Maps merchant relationship data. | | | Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui | + +```php +namespace Pyz\Zed\ProductMerchantPortalGui; + +use Spryker\Zed\PriceProductOfferGui\Communication\Plugin\ProductMerchantPortalGui\PriceProductOfferPriceProductTableFilterPlugin; +use Spryker\Zed\ProductMerchantPortalGui\ProductMerchantPortalGuiDependencyProvider as SprykerProductMerchantPortalGuiDependencyProvider; + +class ProductMerchantPortalGuiDependencyProvider extends SprykerProductMerchantPortalGuiDependencyProvider +{ + /** + * @return array<\Spryker\Zed\ProductMerchantPortalGuiExtension\Dependency\Plugin\PriceProductTableFilterPluginInterface> + */ + protected function getPriceProductTableFilterPlugins(): array + { + return [ + new PriceProductOfferPriceProductTableFilterPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +1. Log in to the Merchant Portal with a merchant that has at least one merchant relationship and product offer. +2. Open any product that has a product offer. +3. Make sure that the Prices table does not contain product offer prices for both abstract and concrete products. + +{% endinfo_block %} diff --git a/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.md new file mode 100644 index 00000000000..a1a07632bf0 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-offer-prices-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Offer Prices feature +last_updated: Mar 7, 2022 +description: This document describes the process how to integrate the Marketplace Product Offer Prices feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Product Offer Prices feature walkthrough + link: docs/pbc/all/price-management/page.version/marketplace/marketplace-product-offer-prices-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-offer-prices-feature.md %} diff --git a/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-prices-marketplace-merchant-commission-feature.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-prices-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..a2643e3375a --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-prices-marketplace-merchant-commission-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Prices + Marketplace Merchant Commission feature +last_updated: June 26, 2024 +description: Integrate the Prices + Marketplace Merchant Commission feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-prices-marketplace-merchant-commission-feature.md %} diff --git a/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.md new file mode 100644 index 00000000000..25ef8358cf0 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Offer Prices Glue API +description: This document describes the process how to integrate the Marketplace Product Offer Prices Glue API feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +related: + - title: Marketplace Product Offer Prices feature walkthrough + link: docs/pbc/all/price-management/page.version/marketplace/marketplace-product-offer-prices-feature-overview.html +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-prices-glue-api.md %} diff --git a/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.md new file mode 100644 index 00000000000..fee7bbf2b17 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-wishlist-glue-api.md @@ -0,0 +1,90 @@ +--- +title: Install the Marketplace Product Offer Prices + Wishlist Glue API +description: This document describes how to integrate the Marketplace Product Offer Prices + Wishlist Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +last_updated: Feb 19, 2026 +related: + - title: Marketplace Product Offer Prices feature walkthrough + link: docs/pbc/all/price-management/page.version/marketplace/marketplace-product-offer-prices-feature-overview.html + - title: Marketplace Wishlist feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-wishlist-feature-overview.html +--- + +This document describes how to integrate the Marketplace Product Offer Prices + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer Prices API | {{page.release_tag}} |[Install the Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductOfferWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product offer prices. | | Spryker\Zed\PriceProductOffer\Communication\Plugin\Wishlist | +| PriceProductOfferVolumeExtractorPlugin | Extracts volume prices from the price product offer collection. | | Spryker\Zed\PriceProductOfferVolume\Communication\Plugin\PriceProductOffer | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductOfferWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PriceProductOffer/PriceProductOfferDependencyProvider.php** + +```php + + */ + protected function getPriceProductOfferExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductOfferWishlistItemExpanderPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +Make sure that `PriceProductOfferVolumeExtractorPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items,selected-product-offers,product-offer-prices`. You should get the product offer volume prices within the `prices` in the response. + +{% endinfo_block %} diff --git a/docs/pbc/all/price-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md similarity index 100% rename from docs/pbc/all/price-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md rename to docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-volume-prices-glue-api.md diff --git a/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-prices-marketplace-wishlist-glue-api.md b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-prices-marketplace-wishlist-glue-api.md new file mode 100644 index 00000000000..ce3edff42c0 --- /dev/null +++ b/docs/pbc/all/price-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-prices-marketplace-wishlist-glue-api.md @@ -0,0 +1,90 @@ +--- +title: Install the Prices + Marketplace Wishlist Glue API +description: This document describes how to integrate the Spryker Prices + Marketplace Wishlist Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +last_updated: Feb 19, 2026 +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/prices-marketplace-wishlist-feature-integration.html +related: + - title: Marketplace Wishlist feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-wishlist-feature-overview.html +--- + +This document describes how to integrate the Prices + Marketplace Wishlist Glue API feature into a Spryker project. + + +## Install feature core + +Follow the steps below to install the Prices + Marketplace Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Product Prices API | {{page.release_tag}} |[Install the Product Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with prices. | | Spryker\Zed\PriceProduct\Communication\Plugin\Wishlist | +| ProductPriceRestWishlistItemsAttributesMapperPlugin | Maps prices to the `RestWishlistItemsAttributes` transfer object. | | Spryker\Glue\ProductPricesRestApi\Plugin\Wishlist | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Glue/WishlistsRestApi/WishlistsRestApiDependencyProvider.php** + +```php + + */ + protected function getRestWishlistItemsAttributesMapperPlugins(): array + { + return [ + new ProductPriceRestWishlistItemsAttributesMapperPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductWishlistItemExpanderPlugin` and `ProductPriceRestWishlistItemsAttributesMapperPlugin` are set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +{% endinfo_block %} diff --git a/docs/pbc/all/price-management/202512.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md b/docs/pbc/all/price-management/202602.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md similarity index 96% rename from docs/pbc/all/price-management/202512.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md rename to docs/pbc/all/price-management/202602.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md index b3fda10aebc..265ebc5570f 100644 --- a/docs/pbc/all/price-management/202512.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md +++ b/docs/pbc/all/price-management/202602.0/marketplace/marketplace-merchant-custom-prices-feature-overview.md @@ -4,6 +4,7 @@ description: This document contains concept information for the Marketplace Merc template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/price-management/202512.0/marketplace/marketplace-merchant-custom-prices-feature-overview.html - /docs/marketplace/user/features/202311.0/marketplace-merchant-custom-prices-feature-overview.html related: - title: Managing marketplace abstract product prices diff --git a/docs/pbc/all/price-management/202512.0/marketplace/marketplace-product-offer-prices-feature-overview.md b/docs/pbc/all/price-management/202602.0/marketplace/marketplace-product-offer-prices-feature-overview.md similarity index 97% rename from docs/pbc/all/price-management/202512.0/marketplace/marketplace-product-offer-prices-feature-overview.md rename to docs/pbc/all/price-management/202602.0/marketplace/marketplace-product-offer-prices-feature-overview.md index 23bcf660bda..7e8d368e49d 100644 --- a/docs/pbc/all/price-management/202512.0/marketplace/marketplace-product-offer-prices-feature-overview.md +++ b/docs/pbc/all/price-management/202602.0/marketplace/marketplace-product-offer-prices-feature-overview.md @@ -4,6 +4,7 @@ description: The Marketplace Product Offer Prices feature lets Marketplace merch template: feature-overview-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/price-management/202512.0/marketplace/marketplace-product-offer-prices-feature-overview.html - /docs/marketplace/dev/feature-walkthroughs/202212.0/marketplace-product-offer-prices-feature-walkthrough.html --- diff --git a/docs/pbc/all/price-management/202512.0/price-management.md b/docs/pbc/all/price-management/202602.0/price-management.md similarity index 100% rename from docs/pbc/all/price-management/202512.0/price-management.md rename to docs/pbc/all/price-management/202602.0/price-management.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md deleted file mode 100644 index 5222bdad7d9..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Alternative Products + Discontinued Products feature integration -description: This guide describes all the steps needed to be performed in order to integrate the Alternative Products + Discontinued Products features into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-discontinued-products-feature-integration -originalArticleId: eb447174-6a43-4adb-8914-747a9771c4a9 -redirect_from: - - /2021080/docs/alternative-products-discontinued-products-feature-integration - - /2021080/docs/en/alternative-products-discontinued-products-feature-integration - - /docs/alternative-products-discontinued-products-feature-integration - - /docs/en/alternative-products-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-discontinued-products-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-discontinued-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md deleted file mode 100644 index 4de888fee6f..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Alternative Products + Inventory Management feature -description: The guide walks you through the process of installing the Alternative products and Inventory features into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-inventory-management-feature-integration -originalArticleId: 5bb30c5b-4912-4a16-be29-46f68ef0e0c7 -redirect_from: - - /2021080/docs/alternative-products-inventory-management-feature-integration - - /2021080/docs/en/alternative-products-inventory-management-feature-integration - - /docs/alternative-products-inventory-management-feature-integration - - /docs/en/alternative-products-inventory-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-inventory-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md deleted file mode 100644 index 304eaaf058a..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Alternative Products + Product Labels feature -description: The guide describes the procedure that you need to perform in order to integrate the Alternative Products + Product Labels feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-product-labels-feature-integration -originalArticleId: ad3a3385-381b-4dcf-a067-965b4d6e04cd -redirect_from: - - /2021080/docs/alternative-products-product-labels-feature-integration - - /2021080/docs/en/alternative-products-product-labels-feature-integration - - /docs/alternative-products-product-labels-feature-integration - - /docs/en/alternative-products-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-product-label-feature-integration.html - - /docs/pbc/all/product-information-management/202311.0/install-and-upgrade/install-features/install-the-alternative-products-product-label-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md deleted file mode 100644 index e103fc8d7d7..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Configurable Bundle + Order Management feature -description: This integration guide provides step-by-step instructions on installing Configurable Bundle + Order Management feature. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/configurable-bundle-order-management-feature-integration -originalArticleId: aedcdbc2-c678-4fa2-ba0d-8ddfc6264415 -redirect_from: - - /2021080/docs/configurable-bundle-order-management-feature-integration - - /2021080/docs/en/configurable-bundle-order-management-feature-integration - - /docs/configurable-bundle-order-management-feature-integration - - /docs/en/configurable-bundle-order-management-feature-integration - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-configurable-bundle-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md deleted file mode 100644 index d2eb541ad85..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Product Approval Process feature -description: Learn how to integrate the Product Approval Process feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Mar 11, 2022 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/product-approval-process-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md deleted file mode 100644 index 7a01be74b56..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Bundles + Return Management feature -description: This guide provides step-by-step instructions on integrating Product Bundles + Return Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-return-management-feature-integration -originalArticleId: 96f9c6c2-df79-4d9c-b057-e96077e78e77 -redirect_from: - - /2021080/docs/product-bundles-return-management-feature-integration - - /2021080/docs/en/product-bundles-return-management-feature-integration - - /docs/product-bundles-return-management-feature-integration - - /docs/en/product-bundles-return-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-return-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/return-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-return-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md deleted file mode 100644 index 0acc047d512..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product group + Product Labels feature -description: Instructions to integrate Product group + Product labels feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-labels-feature-integration -originalArticleId: d4867491-433c-4986-98a8-679d70abb507 -redirect_from: - - /2021080/docs/product-group-product-labels-feature-integration - - /2021080/docs/en/product-group-product-labels-feature-integration - - /docs/product-group-product-labels-feature-integration - - /docs/en/product-group-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md b/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md deleted file mode 100644 index 9ece12809cc..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Bundles Glue API -description: Learn how to integrate the Glue API - Product Bundles feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-bundles-feature-integration -originalArticleId: 7512d512-55f0-4d75-a206-993fe4b3617b -redirect_from: - - /2021080/docs/glue-api-product-bundles-feature-integration - - /2021080/docs/en/glue-api-product-bundles-feature-integration - - /docs/glue-api-product-bundles-feature-integration - - /docs/en/glue-api-product-bundles-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundles-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md b/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md deleted file mode 100644 index f804077a658..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Cart feature -last_updated: Dec 16, 2020 -description: This document describes the process how to integrate the Marketplace Product + Cart feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md b/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md deleted file mode 100644 index df1b4645795..00000000000 --- a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product + Inventory Management feature -last_updated: Dec 07, 2020 -description: This document describes the process how to integrate the Marketplace Product + Inventory Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-inventory-management-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-inventory-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md deleted file mode 100644 index 5222bdad7d9..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Alternative Products + Discontinued Products feature integration -description: This guide describes all the steps needed to be performed in order to integrate the Alternative Products + Discontinued Products features into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-discontinued-products-feature-integration -originalArticleId: eb447174-6a43-4adb-8914-747a9771c4a9 -redirect_from: - - /2021080/docs/alternative-products-discontinued-products-feature-integration - - /2021080/docs/en/alternative-products-discontinued-products-feature-integration - - /docs/alternative-products-discontinued-products-feature-integration - - /docs/en/alternative-products-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-discontinued-products-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-discontinued-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md deleted file mode 100644 index 3c6414175d7..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Alternative Products feature -description: This guide walks you through the process of installing the Alternative Products feature into your project. -last_updated: Jan 11, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-feature-integration -originalArticleId: 580bc0b9-af9d-43ab-8752-0c4dddbc8c9b -redirect_from: - - /2021080/docs/alternative-products-feature-integration - - /2021080/docs/en/alternative-products-feature-integration - - /docs/alternative-products-feature-integration - - /docs/en/alternative-products-feature-integration - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.html -related: - - title: Install the Alternative Products Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.html - - title: Install the Alternative Products - Inventory Management feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html - - title: Install the Alternative Products - Wishlist feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html - - title: Alternative Products - Product Label feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html - - title: Alternative Products - Discontinued Products feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html - - title: Alternative Products feature walkthrough - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md deleted file mode 100644 index 4de888fee6f..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Alternative Products + Inventory Management feature -description: The guide walks you through the process of installing the Alternative products and Inventory features into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-inventory-management-feature-integration -originalArticleId: 5bb30c5b-4912-4a16-be29-46f68ef0e0c7 -redirect_from: - - /2021080/docs/alternative-products-inventory-management-feature-integration - - /2021080/docs/en/alternative-products-inventory-management-feature-integration - - /docs/alternative-products-inventory-management-feature-integration - - /docs/en/alternative-products-inventory-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-inventory-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md deleted file mode 100644 index 304eaaf058a..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Alternative Products + Product Labels feature -description: The guide describes the procedure that you need to perform in order to integrate the Alternative Products + Product Labels feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-product-labels-feature-integration -originalArticleId: ad3a3385-381b-4dcf-a067-965b4d6e04cd -redirect_from: - - /2021080/docs/alternative-products-product-labels-feature-integration - - /2021080/docs/en/alternative-products-product-labels-feature-integration - - /docs/alternative-products-product-labels-feature-integration - - /docs/en/alternative-products-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-product-label-feature-integration.html - - /docs/pbc/all/product-information-management/202311.0/install-and-upgrade/install-features/install-the-alternative-products-product-label-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md deleted file mode 100644 index 136641bfc0d..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Alternative Products + Wishlist feature -description: The guide walks you through the process of installing the Alternative products and Wishlist features into your Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-wishlist-feature-integration -originalArticleId: 753cb57b-3b63-4fa1-b40c-a1950802ca9c -redirect_from: - - /2021080/docs/alternative-products-wishlist-feature-integration - - /2021080/docs/en/alternative-products-wishlist-feature-integration - - /docs/alternative-products-wishlist-feature-integration - - /docs/en/alternative-products-wishlist-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/alternative-products-wishlist-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-wishlist-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-wishlist-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md deleted file mode 100644 index a8c6befd3c8..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Integrate the Approval Process + Shipment feature -description: This integration guide provides step-by-step instructions on integrating the Shipment and Approval Process connector in Spryker Commerce OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shipment-approval-process-feature-integration -originalArticleId: ac858362-21ea-4a7a-8369-b82cee1cc226 -redirect_from: - - /2021080/docs/shipment-approval-process-feature-integration - - /2021080/docs/en/shipment-approval-process-feature-integration - - /docs/shipment-approval-process-feature-integration - - /docs/en/shipment-approval-process-feature-integration - - /docs/scos/dev/feature-integration-guides/201907.0/shipment-approval-process-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/shipment-approval-process-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.html -related: - - title: Install the Approval Process feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html - - title: Install the Shipment feature - link: docs/pbc/all/carrier-management/page.version/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md deleted file mode 100644 index 6be944a2688..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Category Image feature -description: The guide walks you through the process of installing the Category Image feature in your project. -last_updated: Jan 17, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/category-image-feature-integration -originalArticleId: 0f3e0644-f1b6-4407-ae2c-e42fe2ee0396 -redirect_from: - - /2021080/docs/category-image-feature-integration - - /2021080/docs/en/category-image-feature-integration - - /docs/category-image-feature-integration - - /docs/en/category-image-feature-integration - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.html -related: - - title: Product image management - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/product-images-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-category-image-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md deleted file mode 100644 index e103fc8d7d7..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Configurable Bundle + Order Management feature -description: This integration guide provides step-by-step instructions on installing Configurable Bundle + Order Management feature. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/configurable-bundle-order-management-feature-integration -originalArticleId: aedcdbc2-c678-4fa2-ba0d-8ddfc6264415 -redirect_from: - - /2021080/docs/configurable-bundle-order-management-feature-integration - - /2021080/docs/en/configurable-bundle-order-management-feature-integration - - /docs/configurable-bundle-order-management-feature-integration - - /docs/en/configurable-bundle-order-management-feature-integration - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-configurable-bundle-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md deleted file mode 100644 index 0f5ce96fa6c..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Discontinued Products + Product Labels feature -description: This guide provides step-by-step instruction on integrating Discontinued Products + Product Labels feature into a Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/discontinued-products-product-labels-feature-integration -originalArticleId: 3b88f34f-9e0c-4250-bffb-a672072fb9c7 -redirect_from: - - /2021080/docs/discontinued-products-product-labels-feature-integration - - /2021080/docs/en/discontinued-products-product-labels-feature-integration - - /docs/discontinued-products-product-labels-feature-integration - - /docs/en/discontinued-products-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/discontinued-products-product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.html -related: - - title: Install the Discontinued Products feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-discontinued-products-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md deleted file mode 100644 index 8f0f7862a54..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Measurement Units + Quick Add to Cart feature -description: Measurement Units + Quick Add to Cart allow selling products by any unit of measure with a click. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-measurement-units-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md deleted file mode 100644 index 293d27c7e81..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Install the Multi-store Products feature -description: The guide describes the process of installing the Multi-Store Products into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-store-relation-feature-integration -originalArticleId: 625314d9-d6db-4e00-aa39-9dfc8b820332 -redirect_from: - - /2021080/docs/product-store-relation-feature-integration - - /2021080/docs/en/product-store-relation-feature-integration - - /docs/product-store-relation-feature-integration - - /docs/en/product-store-relation-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multi-store-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multi-store-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/multi-store-products-feature-integration.html -related: - - title: Upgrade the Collector module - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.html - - title: Upgrade the Touch module - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.html - - title: Upgrade the Product module - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module - - title: Upgrade the ProductManagement module - link: docs/scos/dev/module-migration-guides/migration-guide-productmanagement.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multi-store-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md deleted file mode 100644 index 6b0ba256a64..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Packaging Units feature -description: Learn how to integrate the Packaging Units feature into a Spryker Cloud Commerce OS project. -last_updated: Apr 14, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-packaging-units-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md deleted file mode 100644 index d2eb541ad85..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Product Approval Process feature -description: Learn how to integrate the Product Approval Process feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Mar 11, 2022 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/product-approval-process-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md deleted file mode 100644 index dc1168ee0be..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Product Bundles feature -description: Learn how to integrate the Product bundles feature into a Spryker project. -last_updated: Jun 17, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-feature-integration -originalArticleId: d72b5db3-a8e5-4332-a2f5-b40c95bfd92c -redirect_from: - - /2021080/docs/product-bundles-feature-integration - - /2021080/docs/en/product-bundles-feature-integration - - /docs/product-bundles-feature-integration - - /docs/en/product-bundles-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html -related: - - title: Install the Product Bundles Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md deleted file mode 100644 index 3fb8e51421d..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Bundles + Order Management feature -description: This guide provides step-by-step instructions on integrating Product Bundles + order management into your Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-order-management-feature-integration -originalArticleId: 23a61e2c-92d9-45a5-89e3-2c05ea71e5ea -redirect_from: - - /2021080/docs/product-bundles-order-management-feature-integration - - /2021080/docs/en/product-bundles-order-management-feature-integration - - /docs/product-bundles-order-management-feature-integration - - /docs/en/product-bundles-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-order-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md deleted file mode 100644 index 7a01be74b56..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Bundles + Return Management feature -description: This guide provides step-by-step instructions on integrating Product Bundles + Return Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-return-management-feature-integration -originalArticleId: 96f9c6c2-df79-4d9c-b057-e96077e78e77 -redirect_from: - - /2021080/docs/product-bundles-return-management-feature-integration - - /2021080/docs/en/product-bundles-return-management-feature-integration - - /docs/product-bundles-return-management-feature-integration - - /docs/en/product-bundles-return-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-return-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/return-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-return-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md deleted file mode 100644 index beecac21a6a..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Product + Cart feature -description: The guide walks you through the process of installing the Product and Cart features in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-cart-feature-integration -originalArticleId: 5314b756-dcd4-467b-9777-114744b9d44f -redirect_from: - - /2021080/docs/product-cart-feature-integration - - /2021080/docs/en/product-cart-feature-integration - - /docs/product-cart-feature-integration - - /docs/en/product-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.html -related: - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Install the Cart feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html - - title: Product image management - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/product-images-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md deleted file mode 100644 index 7a86620305a..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Product + Category feature integration -description: Learn how to install the product + category feature in to your Spryker Cloud Commerce OS project. -last_updated: Feb 20, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-category-feature-integration -originalArticleId: 9362908d-1cd0-4db9-91c1-fe11df43060c -redirect_from: - - /2021080/docs/product-category-feature-integration - - /2021080/docs/en/product-category-feature-integration - - /docs/product-category-feature-integration - - /docs/en/product-category-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.html -related: - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-category-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md deleted file mode 100644 index 2a843022318..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Product feature -description: Learn how to integrate the Product Configuration feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/product-configuration-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/product-configuration-feature-integration.htm - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.html -related: - - title: Install the Product Configuration Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-configuration-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md deleted file mode 100644 index 99d6c2ff867..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Product Group + Cart feature -description: Instructions to integrate the Product group + Cart feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-cart-feature-integration -originalArticleId: 0377da7c-316a-41bf-a8f3-c00736e18b9b -redirect_from: - - /2021080/docs/product-group-cart-feature-integration - - /2021080/docs/en/product-group-cart-feature-integration - - /docs/product-group-cart-feature-integration - - /docs/en/product-group-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.html -related: - - title: Install the Cart feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md deleted file mode 100644 index 0acc047d512..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product group + Product Labels feature -description: Instructions to integrate Product group + Product labels feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-labels-feature-integration -originalArticleId: d4867491-433c-4986-98a8-679d70abb507 -redirect_from: - - /2021080/docs/product-group-product-labels-feature-integration - - /2021080/docs/en/product-group-product-labels-feature-integration - - /docs/product-group-product-labels-feature-integration - - /docs/en/product-group-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md deleted file mode 100644 index 401a27d9a35..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Product Group + Product Rating and Reviews feature integration -description: Instructions to integrate the Product group + Product rating & reviews feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-rating-reviews-feature-integration -originalArticleId: e7a2ed29-792b-4d39-b394-b4d213a3a152 -redirect_from: - - /2021080/docs/product-group-product-rating-reviews-feature-integration - - /2021080/docs/en/product-group-product-rating-reviews-feature-integration - - /docs/product-group-product-rating-reviews-feature-integration - - /docs/en/product-group-product-rating-reviews-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-rating-and-reviews-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md deleted file mode 100644 index e439d954202..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Product Groups feature integration -description: The guide describes the process of installing the Product Group feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-groups-feature-integration -originalArticleId: 98619d19-9d48-41bc-be88-64ba15de9c2e -redirect_from: - - /2021080/docs/product-groups-feature-integration - - /2021080/docs/en/product-groups-feature-integration - - /docs/product-groups-feature-integration - - /docs/en/product-groups-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/product-groups-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-groups-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-groups-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md deleted file mode 100644 index 29cb5675079..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Install the Product Images + Configurable Bundle feature -description: This guide provides step-by-step instruction on integrating the Product Images + Configurable Bundle feature into the Spryker Commerce OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-images-configurable-bundle-feature-integration -originalArticleId: 9a304208-8d29-4a63-9b72-3b6ced637048 -redirect_from: - - /2021080/docs/product-images-configurable-bundle-feature-integration - - /2021080/docs/en/product-images-configurable-bundle-feature-integration - - /docs/product-images-configurable-bundle-feature-integration - - /docs/en/product-images-configurable-bundle-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-images-configurable-bundle-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html -related: - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Product Lists feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html - - title: Install the Prices feature - link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html - - title: Install the Merchant Product Restrictions feature - link: docs/pbc/all/merchant-management/page.version/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-images-configurable-bundle-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md deleted file mode 100644 index f0a81b6cf15..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Install the Product Labels feature -description: This guide provides step-by-step instruction about the isntallation of the Product Lables feature -last_updated: Jan 10, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-labels-feature-integration -originalArticleId: ccfbad69-0d8f-4f79-b10d-5e1c930fc9be -redirect_from: - - /2021080/docs/product-labels-feature-integration - - /2021080/docs/en/product-labels-feature-integration - - /docs/product-labels-feature-integration - - /docs/en/product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.html -related: - - title: Install the Product Labels Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html - - title: Alternative products + Product Label feature integration - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html - - title: Install the Product group + Product Labels feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html - - title: Install the Product Labels Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html - - title: Install the Discontinued Products + Product Labels feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.html - - title: Install the Product labels + Promotions & Discounts feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md deleted file mode 100644 index 426d5fd8007..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Product labels + Promotions and Discounts feature integration -description: This guide provides step-by-step instructions on integrating Product Labels + Promotions & Discounts feature into a Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-labels-promotions-discounts-feature-integration -originalArticleId: b1e08ad1-ac8b-4986-ab62-1d99816fe36f -redirect_from: - - /2021080/docs/product-labels-promotions-discounts-feature-integration - - /2021080/docs/en/product-labels-promotions-discounts-feature-integration - - /docs/product-labels-promotions-discounts-feature-integration - - /docs/en/product-labels-promotions-discounts-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-labels-promotions-and-discounts-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.html -related: - - title: Install the Discontinued Products feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.html - - title: Promotions and Discounts feature integration - link: docs/pbc/all/discount-management/page.version/base-shop/install-and-upgrade/install-features/install-the-promotions-and-discounts-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-labels-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md deleted file mode 100644 index da9d5696549..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Lists + Catalog feature -description: The guide walks you through the process of installing the Product Lists as a catalog feature in the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-lists-catalog-feature-integration -originalArticleId: 14356b81-71a8-46ba-93b0-ef5d376fc290 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202108.0/product-lists-catalog-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-lists-catalog-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.html -related: - - title: Install the Merchant Product Restrictions feature - link: docs/pbc/all/merchant-management/page.version/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-lists-catalog-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md deleted file mode 100644 index 689a33455e8..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Product Options + Order Management feature -description: This guide provides step-by-step instructions on integrating Product Options + Order Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-options-order-management-feature-integration -originalArticleId: 00796af8-4e38-4f21-bbab-29cc918413fb -redirect_from: - - /2021080/docs/product-options-order-management-feature-integration - - /2021080/docs/en/product-options-order-management-feature-integration - - /docs/product-options-order-management-feature-integration - - /docs/en/product-options-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/product-options-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/product-options-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/product-options-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/product-options-order-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202004.0/product-options-order-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html -related: - - title: Install the Product Options Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-options-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md deleted file mode 100644 index 39728138475..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Product + Order Management feature -description: This guide provides step-by-step instructions on integrating Product + Order Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-order-management-feature-integration -originalArticleId: 56176d63-974e-44fb-89c5-f201b9994112 -redirect_from: - - /2021080/docs/product-order-management-feature-integration - - /2021080/docs/en/product-order-management-feature-integration - - /docs/product-order-management-feature-integration - - /docs/en/product-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-order-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html -related: - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md deleted file mode 100644 index 4987620aa0c..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Install the Alternative Products Glue API -description: This guide will navigate you through the process of installing and configuring the Alternative Products API feature in the Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-alternative-products-feature-integration -originalArticleId: 0cac6f60-0429-4b7e-8ff4-9236b8cc51d0 -redirect_from: - - /2021080/docs/glue-api-alternative-products-feature-integration - - /2021080/docs/en/glue-api-alternative-products-feature-integration - - /docs/glue-api-alternative-products-feature-integration - - /docs/en/glue-api-alternative-products-feature-integration - - /scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-alternative-products-feature-integration.html - - /scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-alternative-products-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.html -related: - - title: Install the Alternative Products feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.html - - title: Retrieving alternative products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-alternative-products-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md deleted file mode 100644 index 4e0eed9988a..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Category Management Glue API -description: This guide will navigate you through the process of installing and configuring the Category API feature in Spryker OS. -last_updated: Jun 23, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-category-management-feature-integration -originalArticleId: 47dff867-f90a-455e-aba8-1f4914e1f25d -redirect_from: - - /2021080/docs/glue-api-category-management-feature-integration - - /2021080/docs/en/glue-api-category-management-feature-integration - - /docs/glue-api-category-management-feature-integration - - /docs/en/glue-api-category-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-category-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html -related: - - title: Install the Category Management feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html - - title: Retrieving category trees - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html - - title: Retrieving category nodes - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html ---- -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-category-management-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md deleted file mode 100644 index 518de60e8a2..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Glue API - Install the Configurable Bundle + Cart feature -description: Learn how to integrate the Glue API - Configurable Bundle + Cart feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-configurable-bundle-cart-feature-integration -originalArticleId: 684a7c95-fc8c-4d74-9214-5c5a30dec4a3 -redirect_from: - - /2021080/docs/glue-api-configurable-bundle-cart-feature-integration - - /2021080/docs/en/glue-api-configurable-bundle-cart-feature-integration - - /docs/glue-api-configurable-bundle-cart-feature-integration - - /docs/en/glue-api-configurable-bundle-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-configurable-bundle-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html -related: - - title: Install the Configurable Bundle Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-configurable-bundle-cart-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md deleted file mode 100644 index f66a2f81deb..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Install the Configurable Bundle Glue API -description: Learn how to integrate the Glue API - Configurable Bundle feature into a Spryker project. -last_updated: Jun 27, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-configurable-bundle-feature-integration -originalArticleId: f4ee682d-f18e-43a3-b945-6a287cb62c3e -redirect_from: - - /2021080/docs/glue-api-configurable-bundle-feature-integration - - /2021080/docs/en/glue-api-configurable-bundle-feature-integration - - /docs/glue-api-configurable-bundle-feature-integration - - /docs/en/glue-api-configurable-bundle-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-configurable-bundle-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html -related: - - title: Glue API - Install the Configurable Bundle + Cart feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html - - title: Install the Configurable Bundle + Product Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html - - title: Install the Configurable Bundle feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html - - title: Retrieving configurable bundle templates - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html - - title: Retrieving orders - link: docs/pbc/all/order-management-system/page.version/base-shop/glue-api-retrieve-orders.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-configurable-bundle-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md deleted file mode 100644 index 493e0818b68..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Configurable Bundle + Product Glue API -description: Learn how to integrate the Glue API - Configurable Bundle + Product feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-configurable-bundle-product-feature-integration -originalArticleId: 6afcf67c-cdf1-43c8-8881-c87650dba091 -redirect_from: - - /2021080/docs/glue-api-configurable-bundle-product-feature-integration - - /2021080/docs/en/glue-api-configurable-bundle-product-feature-integration - - /docs/glue-api-configurable-bundle-product-feature-integration - - /docs/en/glue-api-configurable-bundle-product-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-configurable-bundle-product-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-configurable-bundle-product-feature-integration.html -related: - - title: Install the Configurable Bundle Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-configurable-bundle-product-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md deleted file mode 100644 index a3c97515172..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Install the Measurement Units Glue API -description: The procedure of integrating Measurement Units Feature API into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-measurement-units-feature-integration -originalArticleId: 565ef2a7-0f29-47fb-8438-8e6c6a96bf31 -redirect_from: - - /2021080/docs/glue-api-measurement-units-feature-integration - - /2021080/docs/en/glue-api-measurement-units-feature-integration - - /docs/glue-api-measurement-units-feature-integration - - /docs/en/glue-api-measurement-units-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-measurement-units-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-measurement-units-feature-integration.html -related: - - title: Install the Measurement Units feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html - - title: Measurement Units feature walkthrough - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html - - title: Retrieve measurement units - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html - - title: Retrieving abstract products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html - - title: "Glue API: Retrieve concrete products" - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-measurement-units-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md deleted file mode 100644 index cab9669f78a..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Install the Product Bundle + Cart Glue API" -description: Learn how to integrate the Glue API - Product Bundle + Cart feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-bundle-cart-feature-integration -originalArticleId: 3ac37722-6b75-479a-a986-1531ab77fbc6 -redirect_from: - - /2021080/docs/glue-api-product-bundle-cart-feature-integration - - /2021080/docs/en/glue-api-product-bundle-cart-feature-integration - - /docs/glue-api-product-bundle-cart-feature-integration - - /docs/en/glue-api-product-bundle-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-bundle-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-bundle-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html -related: - - title: Install the Product Bundles Glue API - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundle-cart-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md deleted file mode 100644 index 9ece12809cc..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Bundles Glue API -description: Learn how to integrate the Glue API - Product Bundles feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-bundles-feature-integration -originalArticleId: 7512d512-55f0-4d75-a206-993fe4b3617b -redirect_from: - - /2021080/docs/glue-api-product-bundles-feature-integration - - /2021080/docs/en/glue-api-product-bundles-feature-integration - - /docs/glue-api-product-bundles-feature-integration - - /docs/en/glue-api-product-bundles-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundles-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md deleted file mode 100644 index af663b5fc77..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Product Configuration Glue API -description: Learn how to integrate the Product Configurator feature API into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-configuration-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.html -related: - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-configuration-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md deleted file mode 100644 index 56c93ee6dcf..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Glue API - Product Image Sets feature integration -description: This guide will navigate you through the process of installing and configuring the Product Image Sets API feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-image-sets-api-feature-integration -originalArticleId: 830ee74b-7a54-441e-9c41-b1c38c66d4cf -redirect_from: - - /2021080/docs/glue-api-product-image-sets-api-feature-integration - - /2021080/docs/en/glue-api-product-image-sets-api-feature-integration - - /docs/glue-api-product-image-sets-api-feature-integration - - /docs/en/glue-api-product-image-sets-api-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-image-sets-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-image-sets-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html -related: - - title: Retrieving image sets of abstract products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html - - title: Retrieving image sets of concrete products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-image-sets-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md deleted file mode 100644 index ed322ea811c..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Product Labels Glue API -description: This guide will navigate you through the process of installing and configuring the Product Labels API feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-labels-feature-integration -originalArticleId: 6977feed-8ecf-4536-ac31-bab1f565d5b4 -redirect_from: - - /2021080/docs/glue-api-product-labels-feature-integration - - /2021080/docs/en/glue-api-product-labels-feature-integration - - /docs/glue-api-product-labels-feature-integration - - /docs/en/glue-api-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-product-labels-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-labels-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html -related: - - title: Install the Discontinued Products feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.html - - title: Retrieving product labels - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-labels-feature-integration.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md b/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md deleted file mode 100644 index d4e3e6b9cd9..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Install the Product Options Glue API -description: This guide provides step-by-step instruction on integrating Product Options API Feature into the Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-options-feature-integration -originalArticleId: 6cf952d4-7195-40ec-8366-3f1d3153b34e -redirect_from: - - /2021080/docs/glue-api-product-options-feature-integration - - /2021080/docs/en/glue-api-product-options-feature-integration - - /docs/glue-api-product-options-feature-integration - - /docs/en/glue-api-product-options-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-options-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html -related: - - title: "Glue API: Retrieve abstract products" - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html - - title: "Glue API: Retrieve concrete products" - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-options-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md deleted file mode 100644 index 0a4956241ee..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Product Approval Process feature -description: Learn how to integrate the Marketplace Product Approval Process feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Mar 11, 2022 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-approval-process-feature-integration.html -related: - - title: Marketplace Product Approval Process feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-approval-process-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md deleted file mode 100644 index f804077a658..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Cart feature -last_updated: Dec 16, 2020 -description: This document describes the process how to integrate the Marketplace Product + Cart feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md deleted file mode 100644 index fb8d0ae41e7..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Marketplace Product feature -description: This document describes the process how to integrate the Marketplace Product feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Mar 11, 2022 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-product-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-product-feature-integration.html -related: - - title: Marketplace Product feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md deleted file mode 100644 index df1b4645795..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product + Inventory Management feature -last_updated: Dec 07, 2020 -description: This document describes the process how to integrate the Marketplace Product + Inventory Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-inventory-management-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-inventory-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md deleted file mode 100644 index 20e57aadeb5..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product Options + Checkout feature -last_updated: Jul 28, 2021 -Description: This document describes the process how to integrate the Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-option-checkout-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-options-checkout-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-checkout-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md deleted file mode 100644 index 72fc1bca4b0..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Quick Add to Cart feature -last_updated: May 16, 2022 -description: This document describes the process how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker Marketplace based project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-quick-add-to-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md b/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md deleted file mode 100644 index 736554bbdbd..00000000000 --- a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "Install the Marketplace Product Glue API" -description: This document describes how to integrate the Marketplace Product Glue API feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/glue/marketplace-product-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-product-feature-integration.html -related: - - title: Marketplace Product feature walkthrough - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md deleted file mode 100644 index 5222bdad7d9..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Alternative Products + Discontinued Products feature integration -description: This guide describes all the steps needed to be performed in order to integrate the Alternative Products + Discontinued Products features into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-discontinued-products-feature-integration -originalArticleId: eb447174-6a43-4adb-8914-747a9771c4a9 -redirect_from: - - /2021080/docs/alternative-products-discontinued-products-feature-integration - - /2021080/docs/en/alternative-products-discontinued-products-feature-integration - - /docs/alternative-products-discontinued-products-feature-integration - - /docs/en/alternative-products-discontinued-products-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-discontinued-products-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-discontinued-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md deleted file mode 100644 index 4de888fee6f..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Alternative Products + Inventory Management feature -description: The guide walks you through the process of installing the Alternative products and Inventory features into the project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-inventory-management-feature-integration -originalArticleId: 5bb30c5b-4912-4a16-be29-46f68ef0e0c7 -redirect_from: - - /2021080/docs/alternative-products-inventory-management-feature-integration - - /2021080/docs/en/alternative-products-inventory-management-feature-integration - - /docs/alternative-products-inventory-management-feature-integration - - /docs/en/alternative-products-inventory-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-inventory-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md deleted file mode 100644 index 304eaaf058a..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Alternative Products + Product Labels feature -description: The guide describes the procedure that you need to perform in order to integrate the Alternative Products + Product Labels feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-product-labels-feature-integration -originalArticleId: ad3a3385-381b-4dcf-a067-965b4d6e04cd -redirect_from: - - /2021080/docs/alternative-products-product-labels-feature-integration - - /2021080/docs/en/alternative-products-product-labels-feature-integration - - /docs/alternative-products-product-labels-feature-integration - - /docs/en/alternative-products-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-product-label-feature-integration.html - - /docs/pbc/all/product-information-management/202311.0/install-and-upgrade/install-features/install-the-alternative-products-product-label-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md deleted file mode 100644 index 136641bfc0d..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Alternative Products + Wishlist feature -description: The guide walks you through the process of installing the Alternative products and Wishlist features into your Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-wishlist-feature-integration -originalArticleId: 753cb57b-3b63-4fa1-b40c-a1950802ca9c -redirect_from: - - /2021080/docs/alternative-products-wishlist-feature-integration - - /2021080/docs/en/alternative-products-wishlist-feature-integration - - /docs/alternative-products-wishlist-feature-integration - - /docs/en/alternative-products-wishlist-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/alternative-products-wishlist-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-wishlist-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-wishlist-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md deleted file mode 100644 index 6bd177cd6d4..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Category Management + CMS feature -description: Learn how to install the category management + CMS feature in to your Spryker Cloud Commerce OS Project. -last_updated: Jun 23, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-cms-category-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md deleted file mode 100644 index 26d570f0fb2..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Category Management + Promotions and Discounts feature integration -description: Learn how to install the Category Management + Promotions and discounts feature in to your Spryker Cloud Commerce OS project. -last_updated: Jan 11, 2022 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/category-management-promotions-and-discounts-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-category-management-promotions-and-discounts-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md deleted file mode 100644 index e103fc8d7d7..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Configurable Bundle + Order Management feature -description: This integration guide provides step-by-step instructions on installing Configurable Bundle + Order Management feature. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/configurable-bundle-order-management-feature-integration -originalArticleId: aedcdbc2-c678-4fa2-ba0d-8ddfc6264415 -redirect_from: - - /2021080/docs/configurable-bundle-order-management-feature-integration - - /2021080/docs/en/configurable-bundle-order-management-feature-integration - - /docs/configurable-bundle-order-management-feature-integration - - /docs/en/configurable-bundle-order-management-feature-integration - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-configurable-bundle-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md deleted file mode 100644 index 8f0f7862a54..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Measurement Units + Quick Add to Cart feature -description: Measurement Units + Quick Add to Cart allow selling products by any unit of measure with a click. This guide describes how to integrate this feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-measurement-units-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md deleted file mode 100644 index 6b0ba256a64..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Packaging Units feature -description: Learn how to integrate the Packaging Units feature into a Spryker Cloud Commerce OS project. -last_updated: Apr 14, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-packaging-units-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md deleted file mode 100644 index d2eb541ad85..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Product Approval Process feature -description: Learn how to integrate the Product Approval Process feature into a Spryker project. -template: feature-integration-guide-template -last_updated: Mar 11, 2022 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/product-approval-process-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md deleted file mode 100644 index 3fb8e51421d..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Bundles + Order Management feature -description: This guide provides step-by-step instructions on integrating Product Bundles + order management into your Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-order-management-feature-integration -originalArticleId: 23a61e2c-92d9-45a5-89e3-2c05ea71e5ea -redirect_from: - - /2021080/docs/product-bundles-order-management-feature-integration - - /2021080/docs/en/product-bundles-order-management-feature-integration - - /docs/product-bundles-order-management-feature-integration - - /docs/en/product-bundles-order-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-order-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md deleted file mode 100644 index 7a01be74b56..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product Bundles + Return Management feature -description: This guide provides step-by-step instructions on integrating Product Bundles + Return Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-return-management-feature-integration -originalArticleId: 96f9c6c2-df79-4d9c-b057-e96077e78e77 -redirect_from: - - /2021080/docs/product-bundles-return-management-feature-integration - - /2021080/docs/en/product-bundles-return-management-feature-integration - - /docs/product-bundles-return-management-feature-integration - - /docs/en/product-bundles-return-management-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-return-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/return-management-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-return-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md deleted file mode 100644 index 0acc047d512..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Install the Product group + Product Labels feature -description: Instructions to integrate Product group + Product labels feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-labels-feature-integration -originalArticleId: d4867491-433c-4986-98a8-679d70abb507 -redirect_from: - - /2021080/docs/product-group-product-labels-feature-integration - - /2021080/docs/en/product-group-product-labels-feature-integration - - /docs/product-group-product-labels-feature-integration - - /docs/en/product-group-product-labels-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-labels-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md deleted file mode 100644 index 401a27d9a35..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Product Group + Product Rating and Reviews feature integration -description: Instructions to integrate the Product group + Product rating & reviews feature into a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-rating-reviews-feature-integration -originalArticleId: e7a2ed29-792b-4d39-b394-b4d213a3a152 -redirect_from: - - /2021080/docs/product-group-product-rating-reviews-feature-integration - - /2021080/docs/en/product-group-product-rating-reviews-feature-integration - - /docs/product-group-product-rating-reviews-feature-integration - - /docs/en/product-group-product-rating-reviews-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-rating-and-reviews-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md deleted file mode 100644 index e439d954202..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Product Groups feature integration -description: The guide describes the process of installing the Product Group feature in your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-groups-feature-integration -originalArticleId: 98619d19-9d48-41bc-be88-64ba15de9c2e -redirect_from: - - /2021080/docs/product-groups-feature-integration - - /2021080/docs/en/product-groups-feature-integration - - /docs/product-groups-feature-integration - - /docs/en/product-groups-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/product-groups-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-groups-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-groups-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md b/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md deleted file mode 100644 index 9ece12809cc..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Bundles Glue API -description: Learn how to integrate the Glue API - Product Bundles feature into a Spryker project. -last_updated: Jun 18, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-bundles-feature-integration -originalArticleId: 7512d512-55f0-4d75-a206-993fe4b3617b -redirect_from: - - /2021080/docs/glue-api-product-bundles-feature-integration - - /2021080/docs/en/glue-api-product-bundles-feature-integration - - /docs/glue-api-product-bundles-feature-integration - - /docs/en/glue-api-product-bundles-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-bundles-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundles-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md deleted file mode 100644 index f804077a658..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Cart feature -last_updated: Dec 16, 2020 -description: This document describes the process how to integrate the Marketplace Product + Cart feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md deleted file mode 100644 index df1b4645795..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product + Inventory Management feature -last_updated: Dec 07, 2020 -description: This document describes the process how to integrate the Marketplace Product + Inventory Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-inventory-management-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-inventory-management-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md deleted file mode 100644 index da4218825a1..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product Options + Cart feature -last_updated: Jul 28, 2021 -Description: Learn how to integrate the Marketplace Product Options feature into a Spryker Marketplace project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-option-cart-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-options-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md deleted file mode 100644 index 20e57aadeb5..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Marketplace Product Options + Checkout feature -last_updated: Jul 28, 2021 -Description: This document describes the process how to integrate the Marketplace Product Options feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-option-checkout-feature-integration.html - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-options-checkout-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-options-checkout-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md deleted file mode 100644 index 72fc1bca4b0..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Quick Add to Cart feature -last_updated: May 16, 2022 -description: This document describes the process how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker Marketplace based project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-quick-add-to-cart-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md deleted file mode 100644 index ae15a44ab8f..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant Portal Product Data Import feature -last_updated: Jul, 2025 -description: This document describes the process how to integrate the the Marketplace Merchant Portal Products Data Import feature into a Spryker Marketplace based project. That will allow merchants to do bulk import of their products from uploaded CSV files. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-product-data-import-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md b/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md deleted file mode 100644 index be9196ec932..00000000000 --- a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Marketplace Product + Cart Glue API -description: This integration guide provides steps on how to integrate the Marketplace Product + Cart Glue API feature into a Spryker Marketplace based project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-product-cart-feature-integration.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-cart-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md b/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md deleted file mode 100644 index 0c6d8918106..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Import file details: product_option.csv" -description: Learn how to confgiure product options information using the product option csv file within your Spryker project. -last_updated: Jun 23, 2021 -template: data-import-template -originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-optioncsv -originalArticleId: baab3597-94b0-47b1-825c-65c0d369f529 -redirect_from: - - /docs/scos/dev/data-import/201811.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html - - /docs/scos/dev/data-import/201903.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html - - /docs/scos/dev/data-import/201907.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html - - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html - - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/product-options/file-details-product-option.csv.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html -related: - - title: Execution order of data importers in Demo Shop - link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html ---- - -This document describes the `product_option.csv` file to configure [product option](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-options-feature-overview.html) information in your Spryker Demo Shop. - -## Dependencies - -[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) - -## Import file parameters - -| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | -| --- | --- | --- | --- | --- | -| abstract_product_skus | | String | | List of Abstract Product SKUs separated by comma. | -| option_group_id | ✓ | String |If doesn't exist then it will be automatically created. | Identifier of the Product Option Group. | -| tax_set_name | | String || Name of the tax set. | -| group_name_translation_key| | String | | Translation key of the name of the group in different locales.| -| group_name.{ANY_LOCALE_NAME}
      Example value: *group_name.en_US* | No | String |Locale data is dynamic in data importers. It means that ANY_LOCALE_NAME postfix can be changed, removed, and any number of columns with different locales can be added to the CSV files. | Name of the group in the specified locale (US for our example). | -| option_name_translation_key | | String | | Translation key of the name of the option in different locales. | -| option_name.{ANY_LOCALE_NAME}
      Example value: *option_name.en_US | | String || Name of the option in the specified locale (US for our example). | -| sku | | String | | SKU identifier of the product option. | -| avalara_tax_code | | String | | [Avalara tax code](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html#avalara-system-for-automated-tax-compliance) for automated tax calculation. | - -## Import template file and content example - -| FILE | DESCRIPTION | -| --- | --- | -| [template_product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/Template_product_option.csv) | Exemplary import file with headers only. | -| [product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/product_option.csv) | Exemplary import file with the Demo Shop data. | - - -## Import command - -```bash -data:import:product-option -``` diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md deleted file mode 100644 index 293d27c7e81..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Install the Multi-store Products feature -description: The guide describes the process of installing the Multi-Store Products into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-store-relation-feature-integration -originalArticleId: 625314d9-d6db-4e00-aa39-9dfc8b820332 -redirect_from: - - /2021080/docs/product-store-relation-feature-integration - - /2021080/docs/en/product-store-relation-feature-integration - - /docs/product-store-relation-feature-integration - - /docs/en/product-store-relation-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/multi-store-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/multi-store-products-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/multi-store-products-feature-integration.html -related: - - title: Upgrade the Collector module - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/upgrade-modules/upgrade-the-collector-module.html - - title: Upgrade the Touch module - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.html - - title: Upgrade the Product module - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module - - title: Upgrade the ProductManagement module - link: docs/scos/dev/module-migration-guides/migration-guide-productmanagement.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-multi-store-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md deleted file mode 100644 index 5ce7a660512..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Install the Product Bundles + Cart feature -description: This guide provides step-by-step instructions on integrating Spryker Product Bundles + Cart feature into your Spryker based project. -last_updated: Jun 27, 2024 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-cart-feature-integration -originalArticleId: f069a875-5736-4134-a2c9-34a54b2dfdd0 -redirect_from: - - /2021080/docs/product-bundles-cart-feature-integration - - /2021080/docs/en/product-bundles-cart-feature-integration - - /docs/product-bundles-cart-feature-integration - - /docs/en/product-bundles-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/product-bundles-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/product-bundles-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/product-bundles-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/product-bundles-cart-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-cart-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html - - /docs/pbc/all/product-information-management/202505.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html -related: - - title: "Install the Product Bundle + Cart Glue API" - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html - - title: Install the Cart feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md deleted file mode 100644 index 7a86620305a..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Product + Category feature integration -description: Learn how to install the product + category feature in to your Spryker Cloud Commerce OS project. -last_updated: Feb 20, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-category-feature-integration -originalArticleId: 9362908d-1cd0-4db9-91c1-fe11df43060c -redirect_from: - - /2021080/docs/product-category-feature-integration - - /2021080/docs/en/product-category-feature-integration - - /docs/product-category-feature-integration - - /docs/en/product-category-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.html -related: - - title: Install the Product feature - link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-category-feature.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md deleted file mode 100644 index b70ddbb6816..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Replace the CodeItNow module with the BarcodeLaminas module -description: -template: module-migration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.html -last_updated: Nov 21, 2023 ---- - -{% include pbc/all/upgrade-modules/replace-the-codeitnow-with-the-barcodelaminas-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md deleted file mode 100644 index d28c74e315e..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Upgrade the ProductConfigurationWidget module -description: Learn how to upgrade the ProductConfigurationWidget module to a newer version. -template: module-migration-guide-template -redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.html -last_updated: Nov 21, 2023 ---- - -{% include pbc/all/upgrade-modules/upgrade-the-productconfigurationwidget-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md b/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md deleted file mode 100644 index a404f51b0ba..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Upgrade the ProductLabelSearch module -last_updated: Jun 16, 2021 -description: Learn how to upgrade from an older version to a newer one of the product label search module within your Spryker based project. -template: module-migration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productlabelsearch -originalArticleId: 9fca0eb4-da0d-471a-a805-66f3fbd32879 -redirect_from: - - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlabelsearch.html - - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlabelsearch.html - - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlabelsearch.html - - /docs/scos/dev/module-migration-guides/migration-guide-productlabelsearch.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.html ---- - -{% include pbc/all/upgrade-modules/upgrade-the-productlabelsearch-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md b/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md deleted file mode 100644 index c2857567226..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Create product options -description: Learn how to create product options directly in the Spryker Cloud Commerce OS Back Office. -last_updated: June 25, 2022 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/creating-a-product-option -originalArticleId: 64e7486e-5904-4cc8-b336-c57dd13f9e14 -redirect_from: - - /2021080/docs/creating-a-product-option - - /2021080/docs/en/creating-a-product-option - - /docs/creating-a-product-option - - /docs/en/creating-a-product-option - - /docs/scos/user/back-office-user-guides/202200.0/catalog/product-options/creating-product-options.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-options/creating-product-options.html - - /docs/scos/user/back-office-user-guides/202005.0/catalog/product-options/create-product-options.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-options/create-product-options.html -related: - - title: Product Options feature overview - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-options-feature-overview.html ---- - -This document describes how to create product options. Product options are additions to products, like warranty or gift wrapping. - -## Prerequisites - -- [Create a tax set](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html) to apply to the product options. -- Review the [reference information](#reference-information-create-product-options) before you start, or look up the necessary information as you go through the process. - -## Create product options - -1. Go to **Products > Product Options**. -2. On the **Product option list** page, click **Create product option**. -3. On the **Create product option** page, enter a **GROUP NAME TRANSLATION KEY**. -4. Select a **TAX SET**. -5. Enter an **OPTION NAME TRANSLATION KEY**. -6. Enter a **SKU**. -7. For **PRICES**, enter the needed prices for the option. -8. Optional: To add one more option, click **Add option** and repeat steps 5-7. -9. Repeat steps 5-8 until you add the needed options. -10. In the **Translation** section, enter a **GROUP NAME** per locale. -11. Enter an **OPTION NAME** for each option per locale. -12. Click **Next**. -13. On the **Products** tab, select one or more products to assign the option to. - The option will be displayed on the pages of the products. -14. Click **Save**. - The page refreshes with a success message displayed. -15. Optional: To display the options on the Storefront, click **Activate**. - The page refreshes with a success message displayed. - - -**Tips and tricks** -
      When assigning an option to a lot of products at a time, it might be useful to double-check your selection on the **Products to be assigned** subtab. - - - -## Reference information: Create product options - - -| ATTRIBUTE | DESCRIPTION | -| --- | --- | -| GROUP NAME TRANSLATION KEY | Glossary key for the name of product option group. For example, `product.option.group.name.wrapping`. It will be used for identifying and translating the group name per locale. | -| TAX SET | Tax set to apply to the product options. To create one, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). | -| OPTION NAME TRANSLATION KEY | Glossary key for a product option. For example, `product.option.paper.wrapping`. It will be used for identifying and translating the option name per locale. | -| SKU | Unique identifier to assign to a product option. | -| PRICES | Gross and net prices per currency per locale to sell product options for. When a price is set to 0, the options is *free of charge*. | -| GROUP NAME | Name of the product option group that will be displayed on the Storefront. | -| OPTION NAME | Names of product options that will be displayed on the Storefront. | - - -### Reference information: Product options on the Storefront - -**Warranty** and **Insurance** are product option groups: - -![Product option example](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/product-option-example.png) - -Product options: -![Select an option](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/select-option-drop-down.png) - -## Next steps - -[Edit product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/edit-product-options.html) diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md b/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md deleted file mode 100644 index 94aa304049e..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Creating product variants -description: Use the guide to configure a product variant, set a price and validity period, make it searchable on the website, and more -last_updated: Jul 30, 2021 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/creating-a-product-variant -originalArticleId: cb558d64-c3df-4acf-a149-3eac51f413c2 -redirect_from: - - /2021080/docs/creating-a-product-variant - - /2021080/docs/en/creating-a-product-variant - - /docs/creating-a-product-variant - - /docs/en/creating-a-product-variant - - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-concrete-products/creating-product-variants.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html -related: - - title: Managing Products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-products.html - - title: Discontinuing Products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html - - title: Adding Product Alternatives - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html - - title: Product feature overview - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html ---- - -This topic describes how to add a product variant for an abstract product. - -## Prerequisites - -To create a product variant, navigate to **Catalog > Products** section. - -Review the reference information before you start, or look up the necessary information as you go through the process. - -## Creating a product variant - -To create a product variant: - -1. Next to the abstract product you want to create a variant for, select **Edit**. -2. On the *Edit Abstract* page, select **Add Variant**. -3. In the *General* tab, do the following: - 1. Define a **SKU**: - - Enter a **SKU**.
      OR - - Select **Autogenerate SKU**. - 2. Under *Super attributes*, define one or more super attributes: - - Select a value. - - Select **Use custom value** and, in the field the appears below, enter the value. - 3. Add product name and description and select **Searchable** if you want your product to be searchable by its name in the online store. - 4. **Optionally**: Enter **Valid From** and **Valid To** dates to specify when the product should go online in the web-shop. - 5. Go to the *Price & Stock* tab. -4. In the *Price & Tax* tab, set prices and taxes for products: - 1. To take the prices over from the abstract product, select **Use prices from abstract product**. - - {% info_block warningBox "Note" %} - - The merchant relation prices are inherited by Product Variants as well. - - {% endinfo_block %} - - 2. Otherwise, enter Original and eventually Default prices for the product for Gross and Net price modes. - 3. **B2B only:** In **Merchant Price Dimension**, select the merchant relationship to define a special price per merchant relation. See [Merchants](/docs/pbc/all/price-management/{{page.version}}/base-shop/merchant-custom-prices-feature-overview.html) for more information. - 4. Select **Quantity** for the product and then select **Never out of stock** if you want the product to never go out of stock. -5. **Optionally**: Click **Next** to go to the *Image* to add images for the product and define the image order. -6. **Optionally**: Click **Next** of select the *Assign bundled products* tab to create a bundles product. See [Creating and Managing Product Bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) to know more. -7. Click **Save**. -The page is refreshed and you can see two additional tabs: *Discontinue* and*Product Alternatives*. See [Discontinuing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html) and [Adding product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html) to know more. - -{% info_block errorBox "Important" %} - -To make sure your product will be shown and searchable in your online store, we highly recommend you to go through the checklist in [HowTo - Make a Product Searchable and Shown on the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.html). - -{% endinfo_block %} - -### Reference information: Creating a product variant - -This section describes the attributes you enter and select when creating a product variant. - -#### General tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Store relation | Defines the store for which the product can be available.
      You can select multiple values. | **No**|**No**| -| SKU Prefix | A number that you assign to the product will help to track unique information related to that product. | **Yes**|**Display Only**| -| Autogenerate SKU | Allows the system to autogenerate the SKU once you click **Save**. | **Yes**|**No**| -| Super Attributes | This section is only available if you have added more than one super attribute and defined more than one value for it.
      For example, if you selected the **color** to be a super attribute and defined **green**, **white**, and **black**, you will see "**color**" in this section and a drop-down with the colors you defined.
      Only one value can be selected. |**Yes**|**No**| -| Name | The name of your product that will be displayed in the online store for your customers. | **Yes**|**Yes** | -| Description | The description of the product that your customer sees in the online store. | **Yes** |**Yes** | -| Searchable | A checkbox that defines if the concrete product can be searched via the Search function in the online store. If not selected, no values will be displayed when searching for this product. | **Yes** | **Yes**| -| Valid from
      Valid to | Defines the period of time when the product is in active state. The **Valid from** date triggers the activation, while the **Valid to** date triggers the deactivation. Either no dates can be selected, or both. |**Yes** |**Yes** | - - -#### Price & Stock tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Use prices from abstract product|Once the checkbox is selected, the prices from the abstract product are taken over.|**Yes**|**No**| -|Merchant Price Dimension|**B2B Only**
      The drop-down list that allows you to select a merchant relation and set up a specific price for a specific merchant.
      If the Default value is selected, the prices will be the same for everyone.
      The values available for selection derive from **Merchants > Merchant Relations**.
      Only one value can be selected.|**Yes**|**Yes**| -| Gross price
      Net price | The price value for gross and net mode.
      For concrete products, the prices are inherited from their abstract product and can be updated while editing the concrete product.|**Yes** |**Yes** | -|Default
      Original|Default prices are the prices your customers will pay, whereas original prices are the "previous prices" in case you want to display promotions. If you specify only a default price, it will be displayed just like a normal product price. However, if both prices are specified, the original one will appear crossed out in the shop.|**Yes**|**Yes**| -|Add Product Volume Price
      Edit Product Volume Price|Once selected, the Add volume price (Edit volume price) page opens. This option allows you to define specific prices for a specific quantity of products that a customer selects. Works only in case of Default prices.
      **Add Product Volume Price** appears only when the price for a currency was set up and saved.
      **Edit Product Volume Price** appears only what the volume price was already set up for a currency.|**No**|**Yes**| -|(Stock) Type|Display-only field that displays warehouses according to your store|**Yes**|**Yes**| -|(Stock) Quantity|The number of items available in the warehouse.|**Yes**|**Yes**| -|(Stock) Never out of stock|The check-box that once selected will make the product always available to be purchased.|**Yes**|**Yes**| - - -#### Image tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Image Set Name|The name of your image set.|**Yes**|**Yes**| -|Small|The link of the image that is going to be used in the product catalogs.|**Yes**|**Yes**| -|Large|The link to the image that is going to be used on the product details page.|**Yes**|**Yes**| -|Sort Order|If you add several images to an active image set, specify the order in which they are to be shown in the front end and back end using Sort Order fields. The order of images is defined by the order of entered numbers where the image set with sort order "0" is the first to be shown.|**Yes**|**Yes**| - - -#### Assign bundled products tab - -On this tab, you see a table with the concrete products that you can select to be included in a bundle of a specific variant. If you do need to create a bundle, do not select the values and skip the tab. - - -#### Discontinue tab - -Available on the Edit page only. -Once you select to discontinue the product, you can add a note about that on this tab. - - -#### Product Alternatives tab - -The only field available is **Add Product Alternative by Name or SKU**. Here it's enough to enter three characters of a product name or SKU to see the auto-suggested product list. From one to many values can be selected. If there is no need to set up an alternative product, you can skip this tab. - - -#### Scheduled Prices tab - -On this tab, you see a table with the scheduled prices imported via a CSV file. The following information is available: - -- Currency, store, net, and gross price values -- Start from (included) and Finish at (included) values that identify a period of time when a specific price is going to be set for a product automatically. - - -**What's next?** -
      Once you have set things up, you will most likely need to know what managing actions you can do with your products. See articles in the [Managing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-products.html) section. diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md b/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md deleted file mode 100644 index 16791082b1e..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Merchant Portal Data Import feature -last_updated: Jul, 2025 -description: This document describes the process how to integrate the the Marketplace Merchant Portal Data Import feature into a Spryker Marketplace based project. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-data-import-feature.md %} - - -## Next steps - -[Install merchant products data import](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature). \ No newline at end of file diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md b/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md deleted file mode 100644 index ae15a44ab8f..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Marketplace Merchant Portal Product Data Import feature -last_updated: Jul, 2025 -description: This document describes the process how to integrate the the Marketplace Merchant Portal Products Data Import feature into a Spryker Marketplace based project. That will allow merchants to do bulk import of their products from uploaded CSV files. -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-product-data-import-feature.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md b/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md deleted file mode 100644 index 1e2556cebc0..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Create product options -last_updated: Apr 21, 2021 -description: Use this procedure to create Marketplace Product Optionsgroups and values in the Back Office. -template: back-office-user-guide-template -redirect_from: - - /docs/marketplace/user/back-office-user-guides/202311.0/catalog/product-options/creating-product-options.html -related: - - title: Managing product options - link: docs/pbc/all/product-information-management/page.version/marketplace/manage-in-the-back-office/product-options/manage-product-options.html - - title: Marketplace Product Options feature overview - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-options-feature-overview.html ---- - -This document describes how to create Marketplace product options. - -## Prerequisites - -To start working with product options, go to **Catalog > Product Options**. - -There should be an existing tax set to apply it to the [product option group](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/marketplace-product-options-feature-overview.html). For detailed instructions about creating tax sets, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). - -Each section in this article contains reference information. Make sure to review it before you start, or look up the necessary information as you go through the process. - -## Creating a product option - -To create a product option, follow these steps: - -1. On the **Product option list** page, select **Create product option** in the top right corner. - This opens the with **General Information** and **Products** tabs. -2. On the **Create new Product Options** page, enter a **Group name translation key**. -3. Select a **Tax set**. -4. In the **Option Values** section, enter an **Option name translation key**. -5. Enter a **SKU** or proceed with the auto-generated one. -6. In the **Prices** section, enter **Gross price** and **Net price** for all the desired stores and currencies. -7. Optional: To add one more product options value, select **Add option**, and repeat step 5. -8. In the **Translation** section, enter **Group name** and **Option name** for all the locales. -9. To save the changes, select **Save**. - This refreshes the page with the success message displayed. -10. [Assign products to the product option](#assigning-products-to-a-product-option). - -### Tips and tricks - -- To remove an option value, next to the **Option name translation key** and **SKU** fields, click **Remove**. -- To copy a **Group name** or **Option name** from one locale to another, select the **Copy** icon next to the desired value. - -### Reference information: Creating a product option - -The following table describes the attributes you enter and select while creating a product option. - -| ATTRIBUTE | DESCRIPTION | -| --- | --- | -| Group name translation key | Glossary key for the product option group. The format is `product.option.group.name.{your key}`. For example, `product.option.group.name.warranty`. | -| Tax Set | Conditions under which the product option group is to be taxed. To learn how to create tax sets, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). | -| Option name translation key | Glossary key for the product option value. The format is `product.option.{your key}`. For example, `product.option.warranty1`. | -| SKU | Unique identifier for the product option value. This value is autogenerated based on the **Option name translation key**, and you can adjust it per your requirements.| -| Gross price and Net price | Price values of the product option value for gross and net modes. Prices are integer values and, in the database, they are stored in their normalized form. For example, `4EUR` is stored as `400`. If you do not define a price for a product option value, it's considered *inactive* for that specific currency and price mode. If a price is `0`, it's considered *free of charge*.| -| Group name | Option group name that's displayed on the Storefront. | -| Option name | Option name that's displayed on the Storefront. | - - -## Assigning products to a product option - -To assign products to a product option, follow these steps: -1. On the **Edit product option** page, switch to the **Products** tab. -2. Select the desired products. -3. Select **Save**. - This refreshes the page with the success message displayed. - - - -{% info_block infoBox "Activating product options" %} - -To display the product option on the Storefront, in the top right corner of the page, activate it by selecting **Activate** . - -{% endinfo_block %} - -### Tips and tricks - -- To select all the products on the page, select **Deselect all on the page**. This is usually useful when you filter the products using the search field. -- After selecting products, you can view the products to be assigned on the **Products to be assigned** subtab. To unselect a product from being assigned, select **Remove** next to the desired product. - -## Product option examples on the Storefront - -On the following example, the Warranty and Insurance are the product option groups: -![Product option example](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/product-option-example.png) - -And the values available in the drop-down lists are the product options: -![Select an option](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/select-option-drop-down.png) - -## Next steps - -[Managing product options](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/product-options/create-product-options.html) diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/create-product-variants.md b/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/create-product-variants.md deleted file mode 100644 index c7de8f53eff..00000000000 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/create-product-variants.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Create product variants -last_updated: Jul 27, 2021 -description: This guide explains how to create product variants in your Spryker Marketplace based projects. -template: back-office-user-guide-template -redirect_from: - - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-concrete-products/creating-product-variants.html -related: - - title: Managing products - link: docs/pbc/all/product-information-management/page.version/marketplace/manage-in-the-back-office/products/manage-products.html - - title: Editing product variants - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html - - title: Marketplace Product feature overview - link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html ---- - -This document describes how to add a product variant for an abstract product. - -## Prerequisites - -To create a product variant, navigate to **Catalog > Products** section. - -Review the reference information before you start, or look up the necessary information as you go through the process. - -## Creating a product variant - -To create a product variant: - -1. Next to the abstract product you want to create a variant for, select **Edit**. -2. On the **Edit Abstract** page, select **Add Variant**. -3. On the **General** tab, do the following: - 1. Define a **SKU**: - - Enter a **SKU**.
      OR - - Select **Autogenerate SKU**. - 2. Under **Super attributes**, define one or more super attributes: - - Select a value. - - Select **Use custom value** and, in the field the appears below, enter the value. - 3. Add product name and description and select **Searchable** if you want your product to be searchable by its name in the online store. - 4. Optional: Enter **Valid From** and **Valid To** dates to specify when the product should go online in the web-shop. - 5. Go to the **Price & Stock** tab. -4. On the **Price & Tax** tab, set prices and taxes for products: - 1. To take the prices over from the abstract product, select **Use prices from abstract product**. - - {% info_block warningBox "Note" %} - - The merchant relation prices are inherited by Product Variants as well. - - {% endinfo_block %} - - 2. Otherwise, enter Original and eventually Default prices for the product for Gross and Net price modes. - 3. **B2B only:** In **Merchant Price Dimension**, select the merchant relationship to define a special price per merchant relation. - 4. Select **Quantity** for the product and then select **Never out of stock** if you want the product to never go out of stock. -5. Optional: Click **Next** to go to **Image** to add images for the product and define the image order. -6. Optional: Click **Next** of select the **Assign bundled products** tab to create a bundles product. For more information, see [Creating and managing product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). -7. Click **Save**. -The page is refreshed and you can see two additional tabs: *Discontinue* and *Product Alternatives*. See [Discontinuing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html) and [Adding product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html) to know more. - -{% info_block errorBox "Important" %} - -To make sure your product will be shown and searchable in your online store, we highly recommend you to go through the checklist in [HowTo - Make a Product Searchable and Shown on the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.html). - -{% endinfo_block %} - -### Reference information: Creating a product variant - -This section describes the attributes you enter and select when creating a product variant. - -#### General tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Store relation | Defines the store for which the product can be available.
      You can select multiple values. | **No**|**No**| -| SKU Prefix | A number that you assign to the product will help to track unique information related to that product. | **Yes**|**Display Only**| -| Autogenerate SKU | Allows the system to autogenerate the SKU once you click **Save**. | **Yes**|**No**| -| Super Attributes | This section is only available if you have added more than one super attribute and defined more than one value for it.
      For example, if you selected the **color** to be a super attribute and defined **green**, **white**, and **black**, you will see "**color**" in this section and a drop-down with the colors you defined.
      Only one value can be selected. |**Yes**|**No**| -| Name | The name of your product that will be displayed in the online store for your customers. | **Yes**|**Yes** | -| Description | The description of the product that your customer sees in the online store. | **Yes** |**Yes** | -| Searchable | A checkbox that defines if the concrete product can be searched via the Search function in the online store. If not selected, no values will be displayed when searching for this product. | **Yes** | **Yes**| -| Valid from
      Valid to | Defines the period of time when the product is in active state. The **Valid from** date triggers the activation, while the **Valid to** date triggers the deactivation. Either no dates can be selected, or both. |**Yes** |**Yes** | - - -#### Price & Stock tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Use prices from abstract product|Once the checkbox is selected, the prices from the abstract product are taken over.|**Yes**|**No**| -|Merchant Price Dimension|**B2B Only**
      The drop-down list that lets you select a merchant relation and set up a specific price for a specific merchant.
      If the Default value is selected, the prices will be the same for everyone.
      The values available for selection derive from **Merchants > Merchant Relations**.
      Only one value can be selected.|**Yes**|**Yes**| -| Gross price
      Net price | The price value for gross and net mode.
      For concrete products, the prices are inherited from their abstract product and can be updated while editing the concrete product.|**Yes** |**Yes** | -|Default
      Original|Default prices are the prices your customers will pay, whereas original prices are the "previous prices" in case you want to display promotions. If you specify only a default price, it will be displayed just like a normal product price. However, if both prices are specified, the original one will appear crossed out in the shop.|**Yes**|**Yes**| -|Add Product Volume Price
      Edit Product Volume Price|Once selected, the Add volume price (Edit volume price) page opens. This option lets you define specific prices for a specific quantity of products that a customer selects. Works only in case of Default prices.
      **Add Product Volume Price** appears only when the price for a currency was set up and saved.
      **Edit Product Volume Price** appears only what the volume price was already set up for a currency.|**No**|**Yes**| -|(Stock) Type|Display-only field that displays warehouses according to your store|**Yes**|**Yes**| -|(Stock) Quantity|The number of items available in the warehouse.|**Yes**|**Yes**| -|(Stock) Never out of stock|The checkbox that once selected will make the product always available to be purchased.|**Yes**|**Yes**| - - -#### Image tab - -| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| -| --- | --- | --- | --- | -|Image Set Name|The name of your image set.|**Yes**|**Yes**| -|Small|The link of the image that is going to be used in the product catalogs.|**Yes**|**Yes**| -|Large|The link to the image that is going to be used on the product details page.|**Yes**|**Yes**| -|Sort Order|If you add several images to an active image set, specify the order in which they are to be shown in the frontend and backend using Sort Order fields. The order of images is defined by the order of entered numbers where the image set with sort order "0" is the first to be shown.|**Yes**|**Yes**| - -#### Discontinue tab - -Available on the Edit page only. -Once you select to discontinue the product, you can add a note about that on this tab. - - -#### Product Alternatives tab - -The only field available is **Add Product Alternative by Name or SKU**. Here it's enough to enter three characters of a product name or SKU to see the autosuggested product list. From one to many values can be selected. If there is no need to set up an alternative product, you can skip this tab. - -**What's next?** - -Once you have set things up, you will most likely need to know what managing actions you can do with your products. See articles in the [Managing products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/products/manage-products.html) section. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/alternative-products-feature-database-schema.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/alternative-products-feature-database-schema.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/alternative-products-feature-database-schema.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/alternative-products-feature-database-schema.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/configurable-bundle-feature-module-relations.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/configurable-bundle-feature-module-relations.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/configurable-bundle-feature-module-relations.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/configurable-bundle-feature-module-relations.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/measurement-units-feature-module-relations.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/measurement-units-feature-module-relations.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/measurement-units-feature-module-relations.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/measurement-units-feature-module-relations.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-approval-process-module-relations.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-approval-process-module-relations.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-approval-process-module-relations.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-approval-process-module-relations.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-feature-module-relations.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-feature-module-relations.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-feature-module-relations.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-feature-module-relations.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-sets-module-relations.md b/docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-sets-module-relations.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/domain-model-and-relationships/product-sets-module-relations.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/domain-model-and-relationships/product-sets-module-relations.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/alternative-products-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/alternative-products-feature-overview.md new file mode 100644 index 00000000000..9221fae41a5 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/alternative-products-feature-overview.md @@ -0,0 +1,59 @@ +--- +title: Alternative Products feature overview +description: Product alternatives is a great way to ease the user's product finding process. It lets the user jump over product pages until they find a relevant item. +last_updated: Jul 20, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-overview +originalArticleId: 08d3b38d-a625-4df2-9c67-b6c559a400e8 +redirect_from: + - /2021080/docs/alternative-products-overview + - /2021080/docs/en/alternative-products-overview + - /docs/alternative-products-overview + - /docs/en/alternative-products-overview + - /docs/scos/user/features/202200.0/alternative-products-feature-overview.html + - /docs/alternative-products + - /docs/scos/user/features/202311.0/alternative-products-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/alternative-products-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/alternative-products-feature-overview.html +--- + +Suggesting product alternatives is a great way to ease the user's product finding process. Instead of browsing the product catalog, product alternatives let customers jump from one product page to the next until they find a relevant item. + +For marketplace relations, alternative products are useful because for a marketplace owner it's irrelevant from what merchant a buyer has bought a product. If a merchant does not have this product, the alternative product can be shown on the marketplace. + +A Back Office user can add product alternatives for both abstract and concrete products in **Catalog > Products**. + +All the available alternative products are shown on the abstract product details page if one of the following occurs: + +- All the concrete products of the abstract one are in the `out of stock` status. +- All the concrete products of the abstract one are [discontinued](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html). + +{% info_block infoBox %} + +Alternative products can be attached to any product, but will be displayed only if the product becomes `out of stock` or `Discontinued`. + +{% endinfo_block %} + +## Product replacement + +On the product details page of a product that's a product alternative for another product, you can see a *Replacement for*. This section displays products to which the current product is added as an alternative. + +![Replacement for](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Alternative+Products/Alternative+Products+Feature+Overview/replacement-for.png) + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Add product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | GLUE API GUIDES | DATA IMPORT | +|---------------------|-----------------|-------------| +| [Install the Alternative Products feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.html) | [Retrieve alternative products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.html) | [product_alternative.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-alternative.csv.html) | +| [Install the Alternative + Discontinued Products feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html) | | | +| [Install the Alternative + Product Labels feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html) | | | +| [Install the Alternative + Inventory Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html) | | | +| [Install the Alternative + Wishlist feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html) | | | +| [Install the Alternative Products Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.html) | | | + diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/catalog-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/catalog-feature-overview.md new file mode 100644 index 00000000000..cb0c4d01595 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/catalog-feature-overview.md @@ -0,0 +1,34 @@ +--- +title: Catalog feature overview +description: The Spryker Catalog feature lets you build, organize and manage your products within your Spryker Cloud Commerce OS project. +last_updated: Jul 21, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/catalog +originalArticleId: c9c0a388-619c-464f-ac15-ee3c4bb13b36 +redirect_from: + - /docs/scos/user/features/202108.0/catalog-feature-overview.html + - /docs/scos/user/features/202311.0/catalog-feature-overview.html + - /docs/scos/user/features/202200.0/catalog-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202200.0/catalog-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/catalog-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/catalog-feature-overview.html + - /docs/scos/dev/feature-integration-guides/201903.0/cms-catalog-feature-integration.html +--- + +Catalogs are used to clearly build and organize your products to meet your and your customer's demands, primarily to make sure everyone can quickly find what they are looking for. + +Product catalogs are built by assigning attributes (defining characteristics) to products and organizing them into custom category trees. In the tree structure, you can create categories that nest sub-categories in them. + +For example, Electronics is a category that can encompass all the electronics you sell. You can also group different types of electronics under that category into smaller logical groups, such as TVs, Cameras, and Mobile Phones. This approach lets you structure the information logically. + +With this information, we can build navigation and display product pages that dynamically list products based on a selected category. + +Catalogs have full translation and SEO support in addition to other necessary dimensions such as stock level management and pricing. + +Building a custom category strategy lets you leverage your product information to create and manage product-based content in your store: stock levels and pricing. You can dynamically create category pages and include category filters. This will help you to display all your products on a page by category that lists all electronics in one place (with details and images). An advanced filter will provide customers with the option to further drill down by one of the following: +- Sub-categories—for example, TVs, Cameras, and Mobile Phones for the electronics category. +- Attributes—for example, size, color, and capacity. + +To keep your catalog dynamic, you can include auto-generated pages based on categories and create templates for these dynamic pages. This lets you flexibly support the growth of your product range while maintaining an up-to-date catalog. + +The main benefits of working with the catalog are to pave the way for a smooth shopping journey with well-organized categories that organize and extend your catalog to match your business needs. diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/category-management-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/category-management-feature-overview.md new file mode 100644 index 00000000000..e7618ea8314 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/category-management-feature-overview.md @@ -0,0 +1,98 @@ +--- +title: Category Management feature overview +description: The feature lets you keep your product catalog organized for the customers who can easily navigate the storefront in your Spryker Project. +last_updated: Dec 06, 2023 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/category-management-feature-overview +originalArticleId: 33b65d5e-fd6c-4017-92ed-7229883beeb0 +redirect_from: + - /2021080/docs/category-management-feature-overview + - /2021080/docs/en/category-management-feature-overview + - /docs/category-management-feature-overview + - /docs/en/category-management-feature-overview + - /docs/scos/user/features/202200.0/category-management-feature-overview.html + - /docs/scos/user/features/202311.0/category-management-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202200.0/category-management-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/category-management-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/category-management-feature-overview.html +--- + +A category is a set of products that share a common attribute and, therefore, can be united logically. The *Category Management* feature lets Back Office users structure products into a logical system where each product belongs to a category or set of interrelated categories. You can [assign categories to all or individual stores](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.html) from the Back Office or [import stores for categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.html). For details about how a Back Office user can group products under categories, see [Assigning products to categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.html). + +## Root, parent, and child categories + +The product catalog is structured in a category tree, which consists of root, parent, and child categories. + +A *root category* is a base category that stands on top of the category hierarchy. Product and child categories are assigned to root categories, but root categories can not be assigned to anything. Also, a store can only be linked to one root category tree, while a root category tree can be linked to multiple stores. Root categories are added through [data import](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.html) and cannot be created in the Back Office, unlike other categories, which can be added in both ways. + +A parent category is a category that has products and other categories assigned to it. Categories assigned to parent categories are referred to as *child categories*. Products belonging to a child category that is assigned to a parent one belong to the parent category too. You can assign child categories to parent ones by editing categories in the Back Office or importing the categories. For information about how to assign child categories to parent categories, see [Create categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html) and [Edit categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/edit-categories.html). For information about importing child categories, see [File details: category.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.html). + +On the Storefront, in comparison to parent category names, child category names are indented so that they can be identified. + +In the image below, the Cameras & Camcorders parent category has the Digital Cameras, Camcorders, Actioncams, and Dashcams child categories. Cameras & Camcorders is a root category, so it cannot have a parent one. + +![parent-category.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Catalog+Management/Category+Management/Category+Management+Feature+Overview/parent-category.png) + +## Category templates + +A Back Office user defines the visual representation of a category on the Storefront by assigning a template to the category. For information about how to do that, see [Create categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html). + +For more information about types of category templates, see [Category page template types](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html#reference-information-template). + +## Category filters + +Through category filters, you can locale items better and add customizable category filters to the catalog pages on the Storefront. They also let you add, rearrange, and define filters for any given parameter in the category tree, such as price or brand. For details about how a Back Office user can add and manage category filters, see Managing category filters. + +### Filter preferences + +The default filter functionality includes *standard filters* and *dynamic filters and facets*. + +#### Standard filters + +On the Storefront, the standard filters let buyers narrow down the search results by filtering products according to the specified price range, product ratings, product labels, color, material, and brand. For more details about standard filters, see [Standard filters](/docs/pbc/all/search/{{page.version}}/base-shop/search-feature-overview/standard-filters-overview.html). + +#### Dynamic filters and facets + +Compared to standard filters, dynamic filters and facets allow the creation of more advanced filter options. For example, you can customize facet filters for any product attribute: the design, quantity of filters, or order criteria by which filters are displayed on the Storefront. For more details about how to configure the filter preferences in the Back Office, see [Edit filter preferences](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/filter-preferences/edit-filter-preferences.html). + +## Video tutorial + +Check out this video on managing categories: + +
      + +
      + + +## Current constraints + +The Category Management feature has the following functional constraints, which are going to be resolved in the future: + +- A category page is accessible by the same URL across all the stores. If the category is not available in the given store, the URL will lead to a 404. +- Root categories cannot be created in the Back Office. They are imported through CSV files. +- A store can only be linked to one root category tree, but in the future, a store can have multiple root category trees. +- Category URLs are locale-dependent. +- Category URLs are available in all the stores that share the same locales. +- Price Range Filter is not supported with merchant relations. That is why this filter is not included in the [B2B demo shop](/docs/about/all/b2b-suite.html). However, in the [B2C demo shop](/docs/about/all/b2c-suite.html), you can still filter the products using the price range filter. + +## Related Business User documents + +| BACK OFFICE USER GUIDES | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [Create a category](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html) | +| [Assign products to categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.html) | +| [Edit categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/edit-categories.html) | +| [Order products in categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/order-products-in-categories.html) | +| [Delete categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/delete-categories.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | TUTORIALS AND HOWTOS | +|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | [CategoryGui migration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.html) | [Retrieving category trees](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html) | [File details: category.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.html) | [HowTo: Manage a big number of categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.html) | +| [Product + Category feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.html) | [Category migration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.html) | [Retrieving category nodes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html) | [File details: category_template.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.html) | | +| [Install the CMS + Category Management feature](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-cms-category-management-feature.html) | [CategoryPageSearch migration](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.html) | | [File details: category_store.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.html) | | +| [Install the Category Management + Catalog feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-catalog-feature.html) | [CategoryStorage migration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.html) | | | | +| [Install the Category Management Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.html) | [ProductCategoryStorage migration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.html) | | | | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-bundle-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-bundle-feature-overview.md new file mode 100644 index 00000000000..c07097a1e12 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-bundle-feature-overview.md @@ -0,0 +1,275 @@ +--- +title: Configurable Bundle feature overview +description: A configurable bundle is a product bundle, that a customer can configure in the Storefront on the go by choosing the suggested concrete products. +last_updated: Jul 21, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/configurable-bundle-feature-overview +originalArticleId: 292959d4-d71c-4c5d-846f-9685bcf04834 +redirect_from: + - /2021080/docs/configurable-bundle-feature-overview + - /2021080/docs/en/configurable-bundle-feature-overview + - /docs/configurable-bundle-feature-overview + - /docs/en/configurable-bundle-feature-overview + - /docs/configurable-bundle + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/configurable-bundle-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/configurable-bundle-feature-overview.html +--- + +A *configurable bundle* is a [product bundle](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-bundles-feature-overview.html) for which a Storefront User selects products on the Storefront. +For example, when buying a kitchen set, a customer selects pieces of furniture, like drawers, cupboards, or cabinets, from suggested options. + +## Configurable bundle template + +Every configurable bundle is created per a template. A *configurable bundle template* is a model with configuration details for a bundle, like a number of [slots](#configurable-bundle-slot) or product lists assigned to a slot. There can be multiple templates in a shop, like a sports suit, a car, or a kitchen set. + +A Back Office User creates the templates in the Back Office. See [Сreate configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.html) to learn how they do it. + +![Configurable Bundle Template in the Back Office](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/Configurable+Bundle+Template+-+back+office.png) + +To create a configurable bundle on the Storefront, a Shop User selects a configurable bundle template. + +![Configurable Bundle Template in the Storefront](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/configurable-bundle-template-selection.png) + + +The following example illustrates how the configurable bundle data is saved to the database: + +```php +{ + "id_configurable_bundle_template": 2, + "uuid": "c8291fd3-c6ca-5b8f-8ff5-eccd6cb787de", + "name": "configurable_bundle_templates.my-bundle.name", + "slots": [ + [ + "id_configurable_bundle_template_slot": 6, + "uuid": 9626de80-6caa-57a9-a683-2846ec5b6914, + "name": "configurable_bundle.template_slots.slot-6.name", + "id_product_list": 13 + ], + [ + "id_configurable_bundle_template_slot": 7, + "uuid": 2a5e55b1-993a-5510-864c-a4a18558aa75, + "name": "configurable_bundle.template_slots.slot-7.name", + "id_product_list": 14 + ] + ] +} +``` + +## Configurable bundle slot + +A *configurable bundle slot* is a placeholder in a configurable bundle template for which a customer selects a product. + +For example, a *Kitchen furniture set* configurable bundle template can have the following slots: + +- Wall cabinet with two doors +- Wall cabinet horizontal +- High cabinet with shelves +- Wall cabinet with drawers +- Corner base cabinet +- Plumbing base cabinet +- Base cabinet +- Drawer base cabinet + +![Kitchen Configurable Bundle](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/kitchen+slots.png) + +When a Back Office user creates a configurable bundle template, they create the slots, and a [product list](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-lists-feature-overview.html) is automatically assigned to each of them. They can edit the product list in **Catalog Management > Product Lists** section or by editing the slot in the configurable bundle template. + +{% info_block warningBox "Slots" %} + +- A configurable bundle template can have an unlimited number of slots. + +- You can assign the same product list to multiple slots in a configurable bundle template only by data import. + +{% endinfo_block %} + +To learn how a Back Office User edits product lists, see [Edit product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html). +To learn how a Back Office User creates slots, see [Creating slots in configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.html#create-slots-in-a-configurable-bundle-template). + +When a Storefront user configures a bundle, for each slot, they select a product from the provided product list. +![Slot Base Cabinet](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/Slot+Base+Cabinet.png) + +By default, it's not obligatory to select products for all the slots to order a configurable bundle. + +Schematically, a configurable bundle looks as follows: +![Config Bundle Schema](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/slots+scheme.png) + +When a Storefront User selects a product for a slot, the product is picked. For example, if they select **Base cabinet with 2 shelves SKU12236** for the slot **Base Cabinet**, they see the following message: "You have picked `Base cabinet with 2 shelves SKU 12236` product to fill the slot `Base Cabinet`.". + + + +## Configurable bundle notes in cart + +On the **Сart** page, items are grouped by configured bundles. +![Configured bundle on the Cart page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/configurable-bundle-in-cart.png) + +A Storefront User can add a note to a configurable bundle. The note is displayed with the bundle on the **Checkout Summary** and **Order Details** pages. + +![Configurable bundle note](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Bundle/configurable-bundle-note.png) + +## Product bundle configurator + +**Product bundle configurator** is a page where a Storefront User selects products for a configurable bundle. + +## Configurable bundle quantity, stock, and price + +The feature supports a 1:1 product-slot relation in the configurator. You can select only one concrete product with quantity 1 for a slot. However, using the data import, you may import a larger quantity for the products in the slots. + +On the **Cart** page, a Storefront User can change the quantity of a configured bundle. After the quantity is increased, the quantity of all the items in the configured bundle is multiplied by this number. + +For example, a Storefront User adds a configurable bundle with the following products: +- Item A: + - Item price: 40 EUR + - Item total: 2 + - Price: 80 EUR +- Item B: + - Item price: 20 EUR + - Item total: 1 + - Price: 20 EUR +Total price is 100 EUR + +If you change the quantity to 2, the following is changed: + +- Item A: + - Item price: 40 EUR + - Item total: 4 + - Price: 160 EUR +- Item B: + - Item price: 20 EUR + - Item total: 2 + - Price: 40 EUR +Total price is 200 EUR + +If you change the quantity to 3, the following is changed: + +- Item A: + - Item price: 40 EUR + - Item total: 6 + - Price: 240 EUR +- Item B: + - Item price: 20 EUR + - Item total: 3 + - Price: 60 EUR +Total price is 300 EUR + + +The price of a Configurable Bundle is the sum of all the items selected for its slots. The price is calculated dynamically. If you re-select a product in a slot, the price is updated accordingly. + +Configurable bundle price is calculated by the following formula: +*Σ Configurable bundle = Σ product in slot 1 + Σ product in slot 2 + Σ product in slot n* + +Configurable bundle stock is updated in the same way as stock for concrete products. + +Product availability is taken into account when calculating the total. + +## Configurable bundle reorder + +A Storefront User can reorder items from a configurable bundle as separate order items. + +## Configurable bundle and quotation process + +A Storefront User can include a configurable bundle into the [quotation process](/docs/pbc/all/request-for-quote/{{page.version}}/request-for-quote.html) and change the price of one or more items in a bundle. The price of the configurable bundle is re-calculated based on the new prices. + +## Configurable bundle and splittable order items + +A Storefront User can add splittable and non-splittable products to a configurable bundle. + +If a configurable bundle contains splittable products and its quantity is above 1, the order is split into separate configured bundle items with its items also split. For example: + +For example, a Storefront User places the order with the following item: + +- Configured Bundle A x2: + - Product A x 6 + - Product B x 2 + +The order looks as follows: + +- Configured bundle A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product B x 1 + - Product B x 1 +- Configured bundle A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product A x 1 + - Product B x 1 + - Product B x1 + + +If a configurable bundle contains non-splittable products and its quantity is above 1, it's not split. + +For example, a Storefront User places the order with the following item: + +- Configured bundle B x2: + - Product A x 3: non-splittable + - Product B x 2: splittable + +The order looks as follows: + +- Configured bundle B x 1 + - Product A x 3 + - Product B x 1 + - Product B x1 + +- Configured bundle B x 1 + - Product A x 3 + - Product B x 1 + - Product B x1 + +{% info_block errorBox "Packaging units are not supported" %} + +The product splitting logic does not support [packaging units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/packaging-units-feature-overview.html) with configurable bundle products. + +{% endinfo_block %} + + +## Configurable Bundle on the Storefront + +The Configurable Bundle feature looks as follows on the Storefront: +![Configuring a bundle](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/feature-overviews/configurable-bundle-feature-overview.md/configuring-a-bundle.mp4) + +### Current constraints + +The feature has the following functional constraints which are going to be resolved in the future: +- On the Configurator page, you cannot add the configured bundle to a [shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html) or [wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/base-shop/wishlist-feature-overview.html). +- A Storefront User cannot return to the **Configurator** page from the **Cart**, **Reorder**, or **Shopping List** pages. +- The following products cannot be displayed in the configurator: + - Products with [measurement](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) or [packaging units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/packaging-units-feature-overview.html) + - [Product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-bundles-feature-overview.html) + - [Gift cards](/docs/pbc/all/gift-cards/{{site.version}}/gift-cards.html) +- The following functionalities are not displayed and cannot be applied to concrete products in configurable bundles: + - [Product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-options-feature-overview.html) + - [Product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-labels-feature-overview.html) + - [Product quantity restrictions](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) +- The **Slot** page doesn't have any sorting, pagination, or search. +- Product bundles cannot be added to configurable bundles. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.html) | +| [Edit configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.html) | +| [Edit slots in configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES| GLUE API GUIDES | TUTORIALS AND HOWTOS | +|---------|---------|---------|---------| +| [Install the Configurable Bundle feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html) | [ConfigurableBundle migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundle-module.html) | [Retrieving configurable bundle templates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html) | [HowTo: Render configurable bundle templates in the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.html) | +| [Install the Merchant Product Restrictions feature](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html) | [ConfigurableBundleStorage migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.html) | | | +| [Install the Product Lists + Catalog feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.html) | [ProductListGui migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.html) | | | +| [Install the Prices feature](/docs/pbc/all/price-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html) | [MerchantRelationshipProductListGui migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.html) | | | +| [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | | | | +| [Install the Product Images + Configurable Bundle feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html) | | | | +| [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html) | | | | +| [Install the Configurable Bundle Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.html) | | | | +| [Install the Configurable Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.html) | | | | +| [Install the Configurable Bundle + Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.html) | | | | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.md new file mode 100644 index 00000000000..1bd7bd9898c --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.md @@ -0,0 +1,155 @@ +--- +title: Configurable Product feature overview +description: Learn about selling complex products with modular designs or services using the Spryker Configurable product feature. +last_updated: Dec 27, 2022 +template: concept-topic-template +redirect_from: + - /docs/scos/user/features/202108.0/configurable-product-feature-overview.html + - /docs/scos/user/features/201903.0/configurable-product-feature-overview.html + - /docs/scos/user/features/201907.0/configurable-product-feature-overview.html + - /docs/scos/user/features/202311.0/configurable-product-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202108.0/configurable-product-feature-walkthrough/configurable-product-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202204.0/configurable-product-feature-walkthrough/configurable-product-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/configurable-product-feature-walkthrough/configurable-product-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/configurable-product-feature-overview/configurable-product-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/configurable-product-feature-overview/configurable-product-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/configurable-product-feature-overview/configurable-product-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html +--- + +The *Configurable Product* feature introduces a new type of product, a configurable product, that customers can customize. + +The feature lets you sell complex products with modular designs or services. For example, if you sell clothes, your customers can define the material and color and add their names to the product. Or if you are selling a service, you can allow them to select a preferred date and time for the service delivery. + +## Configurable product + +A *configurable product* is a product that customers can customize based on the parameters provided in a [product configurator](#product-configurator). + +For example, if you are selling a workstation installation service, before purchasing it, customers can select a preferred date and time of installation. + +### Configuring a configurable product + +To configure a product, a customer opens a product configurator from the *Product Details* page by clicking the **Configure** button. They are then redirected back to the *Product Details* page and can add the configured product to the wishlist or cart. + +![configure-button-on-product-details-page](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/configure-button-on-product-details-page.png) + +After adding a configurable product to the cart, a customer can change the product configuration from the **Cart** page. + +![configure-button-on-the-cart-page](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/configure-button-on-the-cart-page.png) + +### Creating configurable products + +Configurable products are created in two steps: + +1. A Back Office user creates regular products, or a developer imports them. See [Creating an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) to learn how they create products in the Back Office or [File details: product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) to learn about the file they import. +2. A developer converts regular products into configurable products by importing configuration parameters. See [File details: product_concrete_pre_configuration.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.html) to learn about the file they import. + + +### Managing configurable products + +A Back Office user can add configurable products as regular products to pages, categories, and content items. + +They can see which products are configurable in the product catalog and edit them as regular products. However, a Back Office user cannot change configuration parameters. + +![configurable-product-entry-in-the-back-office](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/configurable-product-entry-in-the-back-office.png) + +In the orders, a Back Office user can see which products are configurable. They can also see the configuration of each product, but they cannot change the selected parameters. + +![order-with-a-configurable-product](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/order-with-a-configurable-product.png) + +## Product configurator + +A *product configurator* is a tool that lets customers customize the product parameters provided by the shop owner or product manufacturer. + +You can create a product configurator as a part of your shop or integrate a third-party one. The feature is shipped with an example product configurator. The example product configurator allows configuring the *Date* and *Preferred time of the day* parameters. + +![examplary-product-configurator](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/examplary-product-configurator.png) + +### How a Spryker shop interacts with a product configurator + +A Spryker shop interacts with product configurators using parameters. When a customer is redirected from a Spryker shop to the configurator page, the shop passes the customer and product parameters. When the customer is redirected back to the shop, the configurator passes the updated parameters back. + +The behavior of the configurator is based on the parameters passed by a shop. For example, a shop passes the `store_name` parameter. If a customer is redirected from a US store, the language of the configurator is English. Also, the shop passes the URL of the page the customer is redirected from. After the customer saves the configuration, the configurator uses this URL to redirect them back to the same page. + +The selected configuration is also passed back to the shop as parameters. The shop uses the parameters to display the selected configuration on all related pages and process the order with the product. + +### Parameter types + +There are two parameter types: configuration parameters and display parameters. + +*Configuration parameters* are used by shops to interact with product configurators. + +*Display parameters* are used to display product configuration on the Storefront and in the Back Office. + +Display parameter values are usually converted from configuration parameter values to show data in a user-friendly format. For example, a product configurator passes the configuration parameter to a shop: `"time_of_the_day": 3`. Since, in the configurator, `3` stands for `afternoon`, the shop displays **Preferred time of the day: Afternoon**. + +![display-data-in-a-configurator](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/display-data-in-a-configurator.png) + + +### Availability calculation in a product configurator + +The availability of a configurable product is based on the selected configuration. + +A customer selects the quantity of a product in a configurator or a shop. If a configurator allows them to select a product quantity, it passes the specified quantity to the shop as a parameter. Otherwise, it passes the availability as a parameter, and they select the product quantity in the shop. + +If a configurator does not pass availability, [regular product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) is used. + +### Price calculation in a product configurator + +The price of a configurable product is based on the selected configuration. When a customer chooses a configuration, the product's price in the selected configuration is displayed. After they save the configuration, the product price in the selected configuration is passed to the shop. The customer is redirected back to the shop where they can purchase the product for the price. + +If the configurator does not provide a price, [a regular product price](/docs/pbc/all/price-management/{{site.version}}/base-shop/prices-feature-overview/prices-feature-overview.html) is used. + +### Complete and incomplete configuration + +When [importing configurable products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.html), a developer defines if the configuration is complete for each product. + +If the configuration is complete, on the *Product details* page, a customer sees a message that the configuration is complete. By default, the message is followed by the first three descriptive attributes set in the configurator. Under the attributes, the **Show** and **Hide** buttons let the customer expand and collapse the remaining attributes to review them. The customer can purchase the product without again opening the configurator and selecting parameters, if they determine the configuration is complete. + +![configurtion-complete-message](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/configurtion-complete-message.png) + +If the configuration is not complete, on the *Product details* page, a customer sees a message that the configuration needs to be completed. To purchase the product, they open the configurator and select a configuration. However, they can add a product with an incomplete configuration to a wishlist. In this scenario, they can finish the configuration from the *Wishlist* page. + +![incomplete-configurtion-message](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/configurable-product-feature-overview/incomplete-configurtion-message.png) + + +Even if all the parameter values are [preconfigured](#preconfigured-parameter-values), but the configuration is not complete, a customer has to open the configurator and save the configuration. They are not required to change the preconfigured values, though. + +![configuration-is-not-complete-message-with-preconfigured-parameters](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Configurable+Product/Configurable+Product+feature+overview/configuration-is-not-complete-message-with-pre-configured-parameters.png) + +#### Request for Quote with a configurable product + +The information in the [Complete and incomplete configuration](#complete-and-incomplete-configuration) section applies to [Quotation Process & RFQ](/docs/pbc/all/request-for-quote/{{page.version}}/request-for-quote.html) functionalities. A customer can only request a quote for a product with a complete configuration. + +#### Shopping List with a configurable product + +The information in the [Complete and incomplete configuration](#complete-and-incomplete-configuration) section applies to the [Shopping List](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html) functionality. A customer can add products with the complete or incomplete configuration. + +#### Wish List with a configurable product + +The information in the [Complete and incomplete configuration](#complete-and-incomplete-configuration) section applies to the [Wish List](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/base-shop/wishlist-feature-overview.html) functionality. A customer can add products with the complete or incomplete configuration. + +### Preconfigured parameter values + +When a developer creates configurable products by importing them, they can preconfigure parameter values. If customers choose to configure such a product, they start with the preconfigured parameter values and can change them. + +If a developer also defines that the configuration of such a product is complete, a customer sees the preconfigured parameter values on the *Product details* page. They can add the product to the cart without adjusting the configuration. + +If a developer defines that the configuration of such a product needs to be completed, on the *Product details* page a customer does not see the preconfigured parameter values. However, they are still assigned to the product. The customer has to configure the product, but they can keep the same preconfigured parameter values. + +## Configurable product on the Storefront + +Customers configure a product on the Storefront as follows: + + + +## Related Developer documents + +|INSTALLATION GUIDES | MIGRATION GUIDES | DATA IMPORT | REFERENCES | +|---------|---------|---------|---------| +| [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html)| [Upgrade the ProductConfiguration module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.html) | [File details product_concrete_pre_configuration.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.html) | [Configuration process flow of Configurable Product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.html) | +| [Install the Product Configuration Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.html) |[Upgrade the ProductConfigurationStorage module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.html) | | | +| | [Upgrade the ProductConfigurationsPriceProductVolumesRestApi module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.html) | | | +| | [Upgrade the ProductConfigurationsRestApi module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.html) | | | +| | [Upgrade the ProductConfigurationWidget module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.html) | | | +| | [Upgrade the ProductConfiguratorGatewayPage module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.html) | | | diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md index 8bb657383f7..79a29b99f92 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.md @@ -4,6 +4,7 @@ last_updated: Jun 2, 2022 description: This document shows the configuration process of the configurable product. template: concept-topic-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.html - /docs/scos/dev/feature-walkthroughs/202311.0/configurable-product-feature-walkthrough/configuration-process-flow-of-configurable-product.html - /docs/pbc/all/product-information-management/202204.0/base-shop/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.html - /docs/pbc/all/product-information-management/202311.0/base-shop/configurable-product-feature-overview/configuration-process-flow-of-configurable-product.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/measurement-units-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/measurement-units-feature-overview.md new file mode 100644 index 00000000000..8356c7c869d --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/measurement-units-feature-overview.md @@ -0,0 +1,76 @@ +--- +title: Measurement Units feature overview +description: The Measurement Units feature lets you sell products by any unit of measure defined by a shop administrator. +last_updated: Aug 13, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/measurement-units-feature-overview +originalArticleId: c997afab-ce1d-4a05-a627-b6511d74ec86 +redirect_from: + - /2021080/docs/measurement-units-feature-overview + - /2021080/docs/en/measurement-units-feature-overview + - /docs/measurement-units-feature-overview + - /docs/en/measurement-units-feature-overview + - /docs/scos/user/features/202200.0/measurement-units-feature-overview.html + - /docs/scos/user/features/202311.0/measurement-units-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/measurement-units-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/measurement-units-feature-overview.html +--- + +The *Measurement Units* feature lets you sell products by any unit of measure defined by the shop administrator. For example, apples can be offered in "Item" or "Kilogram", cables can be offered in "Centimeter", "Meter" or "Feet". To support alternate units of measure, there must be a base unit value relative to which all the internal conversions and calculations will be made. Such value is referred to as a base unit. The base unit is assigned to abstract products, and by default, it's "item"; however, it can be changed to any other unit. + +Besides the base unit, the shop owner can define *sales units*—alternate units of measure in which items will be offered in the shop. Sales units are assigned to concrete products, but if sales units are not defined, the *base unit* is used as a default sales unit. If there are several sales units and no default sales unit is defined, then the first unit to show will be the first in alphabetical order. + +The sales units are displayed on the product details page. You can define the sales units in the Administration Interface but choose not to display them on the webshop. Actually, sales units are only shown on the website but then immediately converted into the base unit, as internally, the system only works with the base units. + +Sales units can be configured per store. That is, they have a store relation. + +{% info_block infoBox %} + +For example, you might have bought a quintal of apples, but want to use kilograms as the base unit, and you choose to offer the apples in "Items", "Kilograms", and "Pounds" in one of your stores. In this case, kilograms is both base and sales unit. Therefore, this unit of measure will be used to manage stock and make all the internal calculations. "Items" and "Pounds" in this example will be the sales units applicable to the respective store. + +{% endinfo_block %} + +The shop owner can define if the conversion factor between base and sales units should be displayed on the webshop. If it's set to `true`, then: + +| EXAMPLE | DISPLAY VALUE | PRODUCT DETAILS PAGE | +| --- | --- | --- | +| The base unit is meter and the sales unit is feet | "**1 meter=3,048 feet**" is displayed under the drop-down field with measuring units on product details page | ![Quantity](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+%26+Measurement+Units/Measurement+Units/Measurement+Units+Feature+Overview/quantity.png)| + +On the cart page, the user sees quantity both in the base unit and sales unit. + +| EXAMPLE | DISPLAY VALUE | CART PAGE | +| --- | --- | --- | +| Suppose if base unit of cables is meters and the user selects to buy 12.19 feet of cable | Both, the quantity **4** and **12.19** feet are displayed on the cart page.
      12.19 (sales unit) = 4 (base unit) |![Quantity on the cart page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+%26+Measurement+Units/Measurement+Units/Measurement+Units+Feature+Overview/quantity_cart.png)| + +If a user puts one and the same product in different sales units, they will be shown as two different items in the cart. + +Let's take an example to better understand the feature. Suppose, 1 apple (1=factor) weights 0,1 kg, then the ratio will be 10 (1kg = 10 apples). If the precision is 100, the user can specify a number as 0.40 Kg (which will be 4 apples). Likewise, if, in this case, the user selects "kg" and precision is set to "1", its quantity in sales units on the cart page will be "0", as precision 1 implies that no digits are shown after the decimal sign. Actually, + +*(Base Unit Value) = (User Input Sales Unit Value) * Precision / Factor* + +There can be two types of conversions in the system: + +- *Global conversions*—are defined in the code already (like from cm to meter). +- *Product-specific conversions*—are defined per product (like from one meter of cable to its weight). + +If a global unit conversion exists between the base and sales unit, then factor and precision fields are optional. If no global unit conversion exists between the base and sales unit, then factor and precision fields are mandatory. If precision is "null", then the information is taken from the product measurement unit is default_precision (default value is 1). + +| CORE LEVEL| PROJECT LEVEL | +| --- | --- | +| All the standard conversion ratios are defined in `Bundles/UtilMeasurementUnitConversion/src/Spryker/Service/UtilMeasurementUnitConversion/Model/MeasurementUnitConverter.php`. | Conversion, precision, as well as is_displayed and is_default parameters can be defined in `spy_product_measrument_sales_unit table`.
      Name of the measurement unit and some other data are stored to the `sales_order_item`.
      | + +## Current constraints + +- In the Spryker Commerce OS, you cannot define measurement units for products. They are imported into the database manually. +- We strive to shift all business logic to our backend; however, with Measurements Units, a part of the calculations (for example, quantity restrictions) are performed on Yves. +- On the shopping cart as well as the shopping list page, products do not have a dropdown to change the measurement units. You can select a measurement unit on the product details page only. +- A shopper cannot reorder items with the selected measurement units as they are not added automatically. They must be added manually on the product details page. +- In the [Quick Order](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/quick-add-to-cart-feature-overview.html) form and [Search](/docs/pbc/all/search/{{page.version}}/base-shop/search-feature-overview/search-feature-overview.html), the products use the default measurement units that cannot be changed. + +## Related Developer documents + +|INSTALLATION GUIDES | GLUE API GUIDES | +|---------|---------| +| [Product measurement unit feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html) | [Retrieve measurement units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html) | +| [Install the Measurement units + Quick Add to Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.html) | [Retrieving sales units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html) | +| [Glue API: Measurement units feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) | | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/packaging-units-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/packaging-units-feature-overview.md new file mode 100644 index 00000000000..ae8a5bc61d7 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/packaging-units-feature-overview.md @@ -0,0 +1,204 @@ +--- +title: Packaging Units feature overview +description: Unit of measure that is used as packaging for a product is referred to as packaging unit and a shop can sell the same product in different packaging units. +last_updated: Jul 23, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/packaging-units-feature-overview +originalArticleId: b3cef9d8-452a-4d29-8258-4e91ee51e6bd +redirect_from: + - /2021080/docs/packaging-units-feature-overview + - /2021080/docs/en/packaging-units-feature-overview + - /docs/packaging-units-feature-overview + - /docs/en/packaging-units-feature-overview + - /docs/scos/user/features/202200.0/packaging-units-feature-overview.html + - /docs/scos/user/features/202311.0/packaging-units-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202200.0/packaging-units-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/packaging-units-feature-walkthrough.html + - /docs/packaging-units-overview + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/packaging-units-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/packaging-units-feature-overview.html +--- + +{% info_block infoBox "Terminology used throughout the article" %} + +| DEFINITION | DESCRIPTION | +|---|---| +| Packaging unit | Unit of measure that that is used to pack product items into one packaged product. | +| Leading product | Product of a packaging unit that shares its stock to another product. | +| Non-leading product | Product with which stock is shared. | +| Product packaging unit group | Group of products in a packaging unit that has a leading product. | +| Quantity | Number of times a product/package is added in the cart. | +| Amount | Stock unit included in the packaged product. | +| Base unit | Basic unit of measure for a product, relative to which all conversions are made. | +| Sales unit | Alternate unit of measure used besides the default base unit. | +| Sales order | Placed order. | +| Sales order item | Ordered product included in a sales order. | +| Sales unit amount | Amount of items in a sales unit. | + +{% endinfo_block %} + +The *Packaging Unit* feature introduces a *packaging unit* that is a unit of measure used as packaging for a product. It allows including the amount of stock in a product a customer wants to buy. A shop owner can sell the same product in different packaging units—for example, apples can be sold as an "Item", a "Bag", or "Pallet" of apples. The "bag", "pallet", and "box" are referred to as *packaging unit types*. + +Each packaging unit is defined on an abstract product level and is represented by one product variant—for example: + +| ABSTRACT PRODUCT | CONCRETE PRODUCT / VARIANT | PACKAGING UNIT | +| --- | --- | --- | +| Apple | "An apple" | Item | +| Apple | "Bag of apples" | Bag | +| Apple | "Pallet of apples" | Palett | + +## Leading products + +The *leading product* represents the relation between two concrete products and holds the availability. The *measurement unit*, defined on an abstract product level, is the stock unit for all the concrete products of the abstract product. A group of products in a packaging unit, that has a leading product, is called a *product packaging unit group*. Each packaging unit includes a certain amount of products by default (default amount). A shop owner can choose whether the packaging unit—for example, a bag, has a separate stock or shares stock with the contained item. In our example, the different product variants have their own SKUs and prices, but they represent the same physical product in the warehouse. To share the information about availability among these variants, we use the concept of a *leading product*. + +However, leading products are not always relevant. Packaging units that represent a package of items whose quantity can not be changed, do not need a leading product. In this case, the availability of the packaged items themselves, not individual items in the package, matters. Such packaged products actually behave like normal abstract products for which customers might have a possibility to select applicable sales units see [Measurement Units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn about product sales units). +Basically, when a packaging unit does not use the leading product, it means that the stock is not shared. + +{% info_block infoBox "Info" %} + +For example, if there is a leading product in the product abstract with three packagings, where one of the packages *has no lead product*, it means that the two other packages actually consume the same product when you buy them. But the third packaging, which does not use the leading product, is completely independent of a stock perspective, it only depends on its own stock. + +{% endinfo_block %} + +To reflect the availability of a leading product for a packaging unit and to define which concrete product SKU is the leading one, the `lead_product_sku` attribute is used. + +The shop owner can define various sales units for the packaging units. For example, for a chocolate bar, the base unit could be set to *item*, and the sales units could be a *box*, *packet*, or *gift box* with a variable or fixed amount of chocolate bars in them. + +![Packaging Unit](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+%26+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/sales-units-dropdown.png) + +Read on to learn about the product packaging unit amount options. + +## Product packaging unit amount + +A packaging unit usually contains multiple items of a product. For example, a "Bag of apples" can contain 10, 20, or 40 apples. This information is called the *amount* of a packaging unit. + +The packaging unit amount can be: + +| PACKAGING UNIT AMOUNT | DESCRIPTION | +| --- | --- | +| Default (default_amount) | Default amount of items that a customer can buy.
      For example, a customer can buy 40 apples.
      Also, this value is used for calculating a price when the custom amount is provided. The Amount field in the online shop is prefilled with a value set in `default_amount`.| +| Variable (is_variable=true) | Customer can buy any number of that item (respecting the amount restrictions). In case of a variable amount the price is adjusted by the formula: (Price) * (Customer Input) / (Default Amount). | +| Fixed (is_variable=false) | Customer can buy a predetermined, fixed amount of items. When `is_variable` is set to `false`, all amount_* values are set as NULL. When the amount is non-variable, the customer can still see the default amount but can not change it.
      However, if a product has a sales unit set for it, the customer can select a different sales unit for the amount, which adjusts the displayed amount according to that sales unit.
      See [Measurement Units feature overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn about product sales units. | +| Interval amount (amount_interval) | Interval of amounts that a customer can buy.
      For example, you can buy only 40, 80, and 120 but not 45.
      The interval is shifted by the minimum value (for example, minimum = 5, interval = 3; valid values: 5, 8, 11). Only relevant if is_variable=true.
      If the amount is set as variable, by default, the interval amount is set to 1. | +| Minimum amount (amount_minimum) | Minimum amount that a customer can buy.
      For example, you cannot buy less than 1 apple.
      Only relevant if is_variable=true. If the amount is set as variable, by default, the minimum amount equals the interval amount.| +| Maximum amount (amount_maximum) | Maximum amount that a customer can buy.
      For example, you cannot buy more than 10 apples.
      Only relevant if is_variable=true. | + +The following schema shows relations between products, packaging units, their types, and amounts: + +![Database relations scheme](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+%26+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/database-relation-scheme.png) + +All packaging units having leading products have a base unit of measure and can also have various sales units reflecting the number of items in the packaging units. + +{% info_block infoBox "Info" %} + +For example, a packaging unit "bag" can be set to have "item" as a base unit and can also have "kg" and "g" as sales units (see [Measurement Units feature overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/measurement-units-feature-overview.html) to learn about base and sales units for products). + +{% endinfo_block %} + +The amount of items contained in a sales unit is referred to as *sales unit amount*. If a customer chooses a sales unit amount, which is in between two available amounts (because of amount restriction settings), a higher or lower amount must be selected. + +{% info_block infoBox "Info" %} + +If there is no lower/higher amount available, the customer is suggested to buy just a higher/lower amount respectively. + +{% endinfo_block %} + +When the very same item is added to the cart with a different amount of sales units or with the same amount but a different sales unit, the item appears in the cart in the form of separate items. + +{% info_block infoBox "Info" %} + +Meaning it will be one sales order containing multiple order items. + +{% endinfo_block %} + +## Stock calculation and definition + +In Spryker Commerce OS, customers can buy a product defined by the following elements: +- Quantity. The number of times a customer adds the product to cart. +- Amount (only for packaged products). How many items the packaged product contains. + +The stock will then be calculated as follows: +*Reserved stock = Quantity x Amount* + +The Quantity value will always be an integer. It is used to split the ordered products into *sales order items*. + +For example, a customer wants to purchase 3 mobile phones. In terms of Spryker OS, 1 mobile phone is bought 3 times. In the Back Office, you'll see the order split into 3 sales order items: sales order item #1 with 1 mobile phone, sales order item #2 with 1 mobile phone, and sales order item #3 with 1 mobile phone. This lets you refund each mobile phone separately. + +### Products with a decimal value in the stock + +The shop owner can also define stock in a decimal value—for example, 2.5, 5.65, 0.75. + +For example, you define your stock as *kilogram* and have in stock 400.50 kg salmons. Each salmon weighs 2.5 kg. A customer wants to buy 10 salmons. If you consider each salmon to be a usual concrete product in your system, you will end up with a wrongly calculated stock. Since according to the formula, the customer buys 1 (amount) salmon 10 (quantity) times, which equals 10. To define a proper relation between your stock and what your customers can purchase, you need to use the Packaging Unit feature, which will convert salmons into packages: 1 salmon = 2.5 kg = 1 package. So, when your customer buys 10 salmons, you get the correct calculation: Quantity (10 packages) multiplied by Amount (2.5) equals 25 kg of stock. + +## Packaging Units scenarios + +This section shows the scenarios of when the Packaging Units feature can be used. + +### Case 1. Products are sold as a package containing some fixed amount of stock + +In this example, we sell Atlantic salmon as a package containing **37.44** kg of fish and set a price per kilogram. 37,44 is the default value for the **Amount** field. Here your customer can change only quantity but cannot select the **Amount** value, because **Amount** is not a variable in this case. + +Thus, when the customer wants to buy 3 packages of fish, it means that they buy 3 packages with 37,44 kg per package. + +![case 1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+&+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/case1.png) + +To calculate stock, Quantity is multiplied by Amount (the default value). The resulting value will be subtracted from the current stock. + +### Case 2. Products are sold in measurement units, the amount of stock is variable + +In this example, we sell potatoes as kilograms and, thus, set a price per kilogram. Potatoes are sold as a package containing 1 kg (the default value for the **Amount** field). However, a customer can select how much potatoes they want to buy per package because **Amount** has been defined as a variable. In our example, the customer decided to buy 2 packages with 2.5 kg per each. +![Case2](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+&+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/case2.png) + +### Case 3. Products are sold with shared stock enabled + +In this example, we can sell VGA cables as items (ring) and meters (as long as you want). The price has been set per meter. We define that VGA cables share their stock with **VGA cables as long as you want**. It means that the leading product for VGA cable has been set to the **VGA cable as long as you want** product packaging type. + +If a customer selects **Ring**, they can set only quantity (in our example, 3) because **Amount** has not been specified as a variable. + +![Case3](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+&+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/case3.png) + +After the customer places the order, in the Back Office, we see the following: + +- Availability for the leading product (**VGA cables as long as you want**) decreased by 4.5 (amount of reserved products) +- Availablity for the non-leading product (**VGA cables**) decreased by 3 (quantity of reserved products). +Then, the customer decided to select the **As long as you want** packaging unit type. In this case, they can set quantity and specify how many meters or centimeters of cables there will be in the packaging unit amount. This is possible because **Amount** is a variable for this packaging unit type. + +![Case3-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+&+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/case3-1.png) + +In our example, the customer set the **meter** for a sales unit, selected **3.5** for the **Amount** field and **2** for the **Quantity** field. The default value for **"As long as you want"** is set to **0.5**. + +Once the order has been placed, we can navigate to the Back Office and see the following: + +- Availability for the leading product (**VGA cables as long as you want**) decreased by 11.5 (amount of reserved products) +- Availability for the non-leading product (**VGA cables**) didn't change from the previous time. +The following figure shows how these items and packaging units appear in the cart. + +![Cart](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Packaging+%26+Measurement+Units/Packaging+Units/Packaging+Units+Feature+Overview/cart-with-items.png) + +In our example, the following conditions are met: + +- We put different packaging units into the cart. +- The products have different sales units. +- The amount has different sales units. +- There are products with a fixed and a variable amount of stock. + +## Current constraints + +- In the Spryker Commerce OS, you cannot define packaging units for products in the Back Office. They are imported to the database manually. See [HowTo: Import Packaging Units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.html) for more details. +- We strive to shift all business logic to our backend, however, with Packaging Units, calculations are performed on Yves. +- On the shopping cart as well as the shopping list page, products do not have a drop-down to change the packaging units. You can select a packaging unit on the product details page only. +- A shopper cannot reorder the items with the selected packaging units as they are not added automatically. They must be added manually on the product details page. +- In the Quick Order form and search widget, the products use the default packaging units that cannot be changed. Flexible packaging units are not supported on the **Quick Order** page. + +{% info_block infoBox "Example:" %} + +You have a product in your shop—a pen. And there exists a packaging unit for a pen—a box with a minimum amount of 5 items in it up to the maximum amount of 50 pens available. Every shopper can define the necessary amount of pens that will be included in the box and order several such boxes. But on the **Quick Order** page, if the customer adds a pen with the packaging unit **box**, the box consisting of minimum 5 items will be added by default. + +{% endinfo_block %} + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | DATA IMPORT | TUTORIALS AND HOWTOS | +|---------|---------|---------|----| +| [Install the Product Packaging Unit feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html) | [Decimal Stock migration concept](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/decimal-stock-migration-concept.html) | [product_packaging_unit_type.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.html) |[HowTo: Integrate and use precise decimal numbers](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.html) | +| | | [product_packaging_unit.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.html) | | diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/product-approval-process-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-approval-process-feature-overview.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/product-approval-process-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-approval-process-feature-overview.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-barcode-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-barcode-feature-overview.md new file mode 100644 index 00000000000..f8d1fad1748 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-barcode-feature-overview.md @@ -0,0 +1,72 @@ +--- +title: Product Barcode feature overview +description: The Barcode Generator can be used for any kind of entity, and by default, we provide a solution for products. +last_updated: Jul 23, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-barcode-feature-overview +originalArticleId: 6d6d1bee-375f-4767-a866-a7d6f28eeaa1 +redirect_from: + - /2021080/docs/product-barcode-feature-overview + - /2021080/docs/en/product-barcode-feature-overview + - /docs/product-barcode-feature-overview + - /docs/en/product-barcode-feature-overview + - /docs/scos/user/features/202200.0/product-barcode-feature-overview.html + - /docs/scos/user/features/202311.0/product-barcode-feature-overview.html + - /docs/product-barcode + - /docs/scos/dev/feature-walkthroughs/202200.0/product-barcode-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-barcode-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-barcode-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-barcode-feature-overview.html +--- + +The *Product Barcode* feature lets you create barcodes for any kind of entity. By default, barcodes are only generated for [products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html). + +A barcode is a square or rectangular image consisting of a series of parallel black lines (bars) and white spaces of varying widths that can be read by a scanner and printed. Barcodes are applied to entities as a means of quick identification. +![Barcode example](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Barcode+Generator/Barcode+Generator+Feature+Overview/barcode.png) + +By default, barcodes are generated based on product SKUs using the [Code128](https://en.wikipedia.org/wiki/Code_128) format. + +Though, Spryker highly provides customizable solutions through plugins that let you change the setup. + +For more information about the product types we differentiate in product abstraction, see [Product feature overview](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html). + +{% info_block errorBox %} + +In your project, you can also implement the QR code functionality by creating similar plugins. + +{% endinfo_block %} + +Barcodes are dynamically generated for concrete products, which ensures that barcodes are immediately valid. + +Also, depending on whether a customer chooses a product bundle or configurable bundle, the number of barcodes differs: +- If a customer purchases a product bundle, it's always assigned only one barcode, regardless of the quantity of the products within the bundle. +- If a customer purchases a configurable bundle, each product within the configurable bundle is assigned a separate unique barcode. + +The following image demonstrates how barcodes are assigned depending on whether it's a product bundle or a configurable bundle. + +![product-bundle-vs-configurable-bundle](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/user/features/product-barcode-feature-overview/product-bundle-versus-configurable-bundle.png) + +You can view the barcodes in the Back Office, in the **Catalog > Product Barcodes** section. You can not perform any other actions on the barcodes, as they are generated automatically once a new concrete product is added to the system. + +You can see the Product ID, product name, SKU, and barcode itself. + +The barcodes help a store administrator update product stock numbers according to the actual information provided by the warehouse. + +Creating barcodes requires two main prerequisites: + +1. *Unique product codes for each product you offer*. These can be UPC codes that identify manufactured goods, unique SKU numbers that you use to track inventory your way, or other identifying numbers. +2. *A system that lets you input codes to create barcodes*. Your codes need to be entered into a device or software system that can translate the numeric or alphanumeric code into a scannable barcode. + +Nowadays, B2B businesses face extraordinary challenges as more and more consumers are making comparisons of various ecommerce applications. To stay on top of the industry trends, improve customer experience and increase sales, every business must innovate with a deep understanding of their customer's physical, emotional, and financial needs and triggers. + +Barcodes are often overlooked as a way to cut costs and save time. A valuable and viable choice for businesses looking to improve efficiency and reduce overhead, barcodes are both cost-effective and reliable. Both inexpensive and user-friendly, barcodes provide an indispensable tool for tracking a variety of data, from pricing to inventory. The ultimate result of a comprehensive barcoding system is a reduction in overhead. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Viewing product barcodes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/view-product-barcodes.html) | + +| MIGRATION GUIDES| +|---------| +| [Migrating from CodeItNow to BarcodeLaminas](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-bundles-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-bundles-feature-overview.md new file mode 100644 index 00000000000..b0a7853fd96 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-bundles-feature-overview.md @@ -0,0 +1,142 @@ +--- +title: Product Bundles feature overview +description: With the Product Bundles feature you can freely tie individual items together and sell them as a package in your Spryker project +last_updated: Jul 26, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-feature-overview +originalArticleId: b0ed4278-e037-4644-a602-ae16f40a4d9c +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202200.0/product-bundles-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-bundles-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-bundles-feature-overview.html + - /docs/scos/user/features/202005.0/product-bundles-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-bundles-feature-overview.html + - /docs/pbc/all/product-information-management/202505.0/base-shop/feature-overviews/product-bundles-feature-overview.html +--- + +With the *Product Bundles* feature you can tie individual items together and sell them as a package. As opposed to a set, in which products are loosely grouped, the items in a bundle are always sold together. You can choose to create a special bundle price to make the purchase more attractive. Since each bundle's product is still handled like an individual item in the Order Management Process, bundle availability is always calculated and displayed based on the item with the smallest available stock to avoid overselling. + +A bundle represents two or more products, sold as a set; it's a distinct product that incorporates other concrete products. + +Example: +![Product bundle](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Bundles/product_bundles.png) + +{% info_block infoBox %} + +Bundles are handled in different ways:
      For example, a marketing bundle of two items that gives a 20% discount is purchased as a single item and then split for processing into its two constituent items. Another scenario is when products are put together from separate purchase items—for example when tires and rims are sold as separate items and then delivered assembled as wheels. + +{% endinfo_block %} + + +- A bundle can contain multiple quantities of the same item. +- The availability of a bundle product is equal to the item with the lowest availability. + +## Product-Bundle module + +Product bundles are two or more existing products combined into a new type of product for the sole purpose to be displayed as one product in the shop frontend and to be sold together. Typically the products are concrete products, because both need to be potential order items. The new (bundled) product does not physically exist in the bundled state. The Product-Bundle can be bought by customers, but in the order management system the items are handled separately, this way the shop owner can manage the products separately. + +### Characteristics of product bundles + +- The quantity of each concrete product may be more than 1. +- A product bundle has a localized name and description. +- A product bundle has a sku. +- A product bundle has a price and tax set. +- A product bundle has a virtual stock that is dependent on the stock of the bundled products. +- The stock level has a upper boundary (see Stock calculation). +- A product bundle can have attributes with localized values. +- A product bundle can have localized SEO information. +- A product bundle can have multiple localized image sets. + +## Product bundle entity relationship diagram + +![Product bundle entity diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Bundles/product_bundles_entity_diagram.png) + +## Availability calculation + +Bundle availability is calculated from bundled product availability. When bundled product availability is changed, for example, a state machine moves through reserved flags, then all bundles are updated accordingly. + +Bundle is updated when: + +- Stock of bundled product is changed. +- Availability of bundled product is changed. +- When creating bundle. +- Adding new bundled products to bundle. +- When state machine sets flag reserved to bundled product. + + +## Stock calculation + +Bundle have "dynamic stock", the stock is defined by bundled products. It cannot be imported as regular products. That means a bundle will get maximum possible stock quantity based on bundled product quantity. Stock is calculated for each warehouse separately. + +For example, bundled item 1 quantity x **2** + +For given item stock is: + +- In Warehouse **1: Item 1 stock x 10** +- In Warehouse 2: **Item 1 stock x 5** + +Then product bundle stock is: + +- Warehouse 1: **Bundle stock x 5** +- Warehouse 2: **Bundle stock x 2** + +## Product bundle structure in cart + +Because of changed structure, cart uses special Yves class to handle bundle operations `ProductBundleAwareCartOperationHandler`. + +When bundle item added to cart there is the additional `ExpandBundleItemsPlugin` cart expander plugin which extracts bundled items from given bundle SKU. + +For example: + +1. Item with SKU "123" is added to cart, expander will look if this item is bundle. If it's bundle then it will read all bundled items from persistence. +2. Item with SKU "123" is then added to `QuoteTransfer:bundleItems`. +3. This item is given special `ItemTransfer:bundleItemIdentifier` unique ID which have each bundle in cart. +4. At the same time bundled items are created and stored into `CartChangeTransfer:items` with referenced bundled identifier `ItemTransfer:relatedBundleItemIdentifier` this is the same ID where bundle got assigned. This helps to track back belonging bundle items in quote object. + +If bundled items have quantity > 1 then it will be split as separate items in cart. + +{% info_block infoBox %} + +When a bundle product is added to cart with a big number of items–for example, 150–users may experience slow cart operations. +To improve performance in such cases, configure bundles to not be split in cart by following [Alternative setup for handling large quantities of bundled products in the cart](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html#alternative-setup-for-handling-large-quantities-of-bundled-products-in-the-cart). + + +{% endinfo_block %} + +BundleProduct have price this price, it's distributed to whole bundled items. Overwriting original product price. If bundle have price 100, and there is 3 bundled products, each will get price 33,34,33 distributed, 34 is to cover rounding error. + +## Persisting when placing an order, end of checkout + +Bundle product information is stored to `spy_sales_order_item_bundle`. When an order is placed in order detail page you will see all bundled items stored as separate row. This allows process state machine separately for each item—for example, ship, refund, return. + +If bundled item moves to reserved state machine state then corresponding bundle availability will be updated also. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) | + +## Related Developer documents + +|INSTALLATION GUIDES | GLUE API GUIDES | +|---------|---------| +|[Install the Product Bundles feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.html) | [Retrieving bundled products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-bundled-products.html) | + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/product-comparison-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-comparison-feature-overview.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/feature-overviews/product-comparison-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-comparison-feature-overview.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.md new file mode 100644 index 00000000000..d3f4098b01d --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.md @@ -0,0 +1,37 @@ +--- +title: Discontinued products overview +description: Discontinued products are shown during a certain period of time after the manufacturer or a distributor announces that the product is no longer produced. +last_updated: Jul 9, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/discontinued-product-overview +originalArticleId: 25617203-917b-417c-b7a9-4f418fa14e35 +redirect_from: + - /2021080/docs/discontinued-product-overview + - /2021080/docs/en/discontinued-product-overview + - /docs/discontinued-product-overview + - /docs/en/discontinued-product-overview + - /docs/scos/user/features/202200.0/product-feature-overview/discontinued-products-overview.html + - /docs/discontinued-products + - /docs/scos/user/features/202311.0/product-feature-overview/discontinued-products-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html +--- + +If a concrete product runs out of stock, it's tagged as out of stock and cannot be added to cart: + +![Discontinued PDP](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Discontinued+Products/Discontinued+Products+Feature+Overview/discontinued-pdp-page.png) + +Once the stock is updated with a positive number, the concrete product becomes available for purchase. + +A *discontinued product* is a product which is no longer produced by its manufacturer. The discontinued product may have positive or negative stock. + +When a Back Office user discountinues a product, they can define the date until which the product is displayed in the shop. Discontinued products have a certain period of time when they will still be shown on the website (active_until). This may be useful, for example, when a product was discontinued but it's still in stock in the shop. On the define date, the product becomes inactive. + +{% info_block warningBox %} + +Only [concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) can become discontinued. + +{% endinfo_block %} + +The following schema illustrates the relations between discontinued products, abstract and concrete products: + +![Module relations](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Discontinued+Products/Discontinued+Products+Feature+Overview/discontinued-schema.png) diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attachments-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attachments-overview.md new file mode 100644 index 00000000000..c99c4244d08 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attachments-overview.md @@ -0,0 +1,79 @@ +--- +title: Product Attachments overview +description: Use Product Attachments to manage product-related downloadable resources in the Back Office and display them in the Downloads section on the product details page. +last_updated: Feb 20, 2026 +template: concept-topic-template +--- + +The Product Attachments feature lets you add external links to product-related resources—such as PDFs, manuals, or datasheets—directly to abstract products in the Back Office. Customers can access these resources in the **Downloads** section on the product details page (PDP). This feature is useful in B2B scenarios where technical documentation or compliance certificates support purchasing decisions. + +## Back Office management + +In the Back Office, the **Images** tab in the product management form is renamed to **Media**. The **Media** tab includes a new **Attachments** section. + +![Product Attachments in Back Office](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/feature-overviews/product-attachments-overview.md/product_attachments_backoffice_pim.png) +*Back Office: Media tab with the Attachments section for an abstract product* + +### Adding attachments + +For each attachment, you can configure the following fields: + +| Field | Description | +| --- | --- | +| **URL** | The external link to the attachment resource—for example, a PDF hosted on a CDN. | +| **Label** | The display name shown to customers in the Downloads section on the PDP. | +| **Sort Order** | Determines the display order of attachments. Lower values are displayed first. | + +### Default attachments + +Default attachments: +- Are always displayed on the PDP. +- Apply to all related concrete products. +- Are visible regardless of the storefront user's locale. + +Use default attachments for general documentation that applies to all markets, such as global data sheets or universal manuals. + +### Locale-specific attachments + +Locale-specific attachments: +- Are displayed only when they match the storefront user's selected locale. +- Are shown in addition to default attachments. +- Allow you to provide market-specific or language-specific documentation. + +If default and locale-specific attachments have the same sort order value, locale-specific attachments are displayed first. + +### Bulk attachments via data import + +If you need to assign multiple attachments to multiple abstract products at the same time, use **data import**. + +Data import supports bulk creation and assignment of attachments, allowing you to: +- Attach documents to many products in one step. +- Maintain large document sets efficiently. +- Synchronize attachments from external systems. + +This is especially useful for large B2B catalogs with extensive technical documentation. + +## Display on the Storefront Product Detail Page (PDP) + +The Downloads section on the PDP presents all applicable attachments to the customer. + +![Product Attachments in Storefront PDP](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/feature-overviews/product-attachments-overview.md/product_attachments_storefront_pdp.png) +*Storefront: Downloads section on the product details page showing attachments* + +### Downloads section + +If at least one attachment exists, the PDP displays a **Downloads** section. Each attachment includes: +- A localized label (clickable). +- A link to download or view the attachment. + +If no attachments exist for a product, the **Downloads** section is not displayed. + +### Visibility + +Attachments on the PDP: +- Are visible to guest and logged-in users. +- Reflect the storefront locale automatically. + +| BACK OFFICE USER GUIDES | DEVELOPER GUIDES | +| --- | --- | +| [Create abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) | [Install the Product Attachments feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-attachments-feature.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.md new file mode 100644 index 00000000000..4bacb2c63b0 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.md @@ -0,0 +1,180 @@ +--- +title: Product Attributes overview +description: Learn about product attributes and their purpose for your products in your Spryker Cloud Commerce OS shop. +last_updated: Jul 7, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-attributes-overview +originalArticleId: 7421d5b0-37d2-4902-a531-ac67a2424fb7 +redirect_from: + - /docs/scos/user/features/202001.0/product-feature-overview/product-attributes-overview.html + - /docs/scos/user/features/202200.0/product-feature-overview/product-attributes-overview.html + - /docs/scos/user/features/202311.0/product-feature-overview/product-attributes-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html +--- + +A *product attribute* is a characteristic of a product that consists of a name and value. For example, in the attribute `color = white`, `color` is the attribute name, and `white` is the attribute value. + +You can create characteristic attributes for products, like brand or special features. You can define specific values to help you and your customers distinguish between products. You can assign multiple attributes to products to simplify the filter and category functions. + +![Descriptive attributes](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Attributes/Attributes:+Reference+Information/descriptive-attributes.png) + +A Back Office user can [create product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html). + +A developer can import [product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.html) and [super attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.html). + + +## Product attribute inheritance + +A Back Office user can add product attributes to abstract and concrete products. If they add a product attribute to an abstract product, it's added to all its concrete products. If they add it to a concrete product, it's not added to the other concrete products. + + +## Declared attributes + +A declared attribute is an attribute that was [created](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html) or [imported](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.html). + +After declaring an attribute, Back Office users can add it to products, and developers can import products with it. + +{% info_block warningBox "Undeclared attributes" %} + +If a developer imports products with undeclared attributes, Back Office users cannot manage them. We recommend declaring all the attributes you are going to use. + +{% endinfo_block %} + +## Super attributes + +The Spryker Commerce OS product data model allows the creation of multiple product variants. For a shop to distinguish different product variants, some of the variant characteristics must be different. A product attribute that distinguishes one product variant from another is a *super attribute*. + +For a product variant to be selectable on the Storefront, a value of one of its product attributes must be unique compared to the product attribute values of other variants of the same abstract product. + +When creating a product attribute, a Back Office user selects if it's a super attribute. + +Product variants of the same abstract product can differ by different super attributes. Check the following super attribute examples: + +1. Abstract product X has concrete products A and B: + - A: `color = blue` + - B: `color = green` + +2. Abstract product Y has concrete products C and D: + - C: `color = red` + - D: `size = 45` + +## Predefined product attribute values + +A *predefined product attribute value* is a product attribute value that a Back Office user defines when managing product attributes. + +A Back Office user can configure a product attribute to accept only predefined values. In this case, when [assigning product attributes to products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.html), they choose from the predefined values. Otherwise, they can enter any value for the attribute. + +## Product attribute translations + +A Back Office user can localize product attributes. They can add translations for attribute names and values. For example, in the attribute `Color = White`, both `Color` and `White` can be localized. + +There are different ways to handle translations of attributes. See the following examples. + +### Example 1: localized attributes and non-localized values + +In a shop with German and English languages, product Y has the `weight` attribute name with the `63.5 g` value. We want to translate only the attribute name. + +We localize the key as follows: +- en_EN: `Weight` +- de_DE: `Gewicht` + +The attribute value `63.5 g` is not localized. + +As a result, the following is displayed on the Storefront: +- English version of the shop: Weight = 63.5 g +- German version of the shop: Gewicht = 63.5 g + +### Example 2: localized attributes and values + + In a shop with two languages Product X exists with an attribute `Protection Feature` and an attribute value `waterproof`. + +We localize them as follows: +- Attribute key: + - en_EN: `Protection Feature` + - de_DE: `Schutzfunktion` +- Attribute value: + - en_EN: `Waterproof` + - de_DE: `Wasserdicht` + +As a result, the following is displayed on the Storefront: +- English version of the shop: Protection Feature = Waterproof +- German version of the shop: Schutzfunktion = Wasserdicht + +### Example 3: different localized attributes and values for different languages + +Product Z has the `length` attribute and is sold in 3 countries: Germany, Ireland, and the US. Since the US does not use the metric system, in the US, we want to display the attribute values in feet. In Germany and Ireland, we want to display the values in meteres. + +There are two ways to handle this: +- Add a non-localized attribute key for Germany and Ireland, and a localized key for the US. Two languages can share the same translation for the attribute, like in the [Example 1](#example-1-localized-attributes-and-non-localized-values). +- Add localized attribute keys and values for each language. + +#### Non-localized key and localized key for the US + +In the DB, the `attribute.length` key is saved for non-localized values, and a localized key `attribute.length.us` is saved for the translations in the metric system: + +We localize two attribute keys: +- Key = attribute.length + - Value (en_IE) = Length + - Value (de_DE) = Länge +- Key = attribute.length.us + - Value (en_US) = Length + +For the key `attribute.length` the value is `1.5 meter`. For the key `attribute.length.us` the value is `4.92 feet`. + +#### Localized keys for US, DE and IE + +In the DB, the following localized keys are saved: `attribute.length.de`, `attribute.length.ie`, and `attribute.length.us`. + + +- Key = attribute.length.de +- Value (de_DE) = Länge + +- Key = attribute.length.ie +- Value (en_IE) = Length + +- Key = attribute.length.us +- Value (en_US) = Length + +Now for each of the attribute keys we add the attribute values. + +For the key "attribute.length.de" the value is `1.5 meter`. + +For the key "attribute.length.ie" the value is: +Value = 1.5 meter + +For the key "attribute.length.us" the value is: +Value = 4.92 feet + +What you see on the Irish and German versions of the shop: +Length = 1.5 meter +Länge = 1.5 meter + +What you see on the US version of the shop: +Length = 4.92 feet + +## Database schema for product attributes + +![Product attribute management](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Attributes/product_attribute_management.png) + +## Current Constraints + +The feature has the following functional constraints which are going to be resolved in the future. + +- When adding a product variant to an existing abstract product, you can only use the existing super attributes. + +- To add another super attribute to variants, you need to recreate the abstract product with its concrete products from scratch. + +- If you import a product without defining its attributes, you cannot edit the attributes in the Back Office. + +{% info_block warningBox %} + +We recommend defining all the atributes you want to use. + +{% endinfo_block %} + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html) | +| [Edit product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-feature-overview.md new file mode 100644 index 00000000000..b6b61cef94b --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-feature-overview.md @@ -0,0 +1,133 @@ +--- +title: Product feature overview +description: Detailed overview of the Spryker Product feature allowing you to create products and characteristics of producs in Spryker Cloud Commerce OS +last_updated: Jul 9, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/products-overview +originalArticleId: d12e5fdb-b74a-4d9b-91d9-866f330b46df +redirect_from: + - /docs/scos/user/features/202108.0/product-feature-overview/product-feature-overview.html + - /docs/scos/user/features/202200.0/product-feature-overview/product-feature-overview.html + - /docs/product-quantity-restrictions + - /docs/product-ttl + - /docs/scos/user/features/202311.0/product-feature-overview/product-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-feature-overview/product-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html + - /docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/concrete-sku-product-filter-feature-overview.html +--- + +The *Product* feature lets you create products, and manage their characteristics and settings. + +In Spryker Commerce OS, you create and manage products in the [Back Office](/docs/pbc/all/back-office/{{page.version}}/base-shop/spryker-core-back-office-feature-overview.html). The product information you specify serves multiple purposes: + +- Defines product characteristics. +- Affects shop behavior. For example, filtering and search on the Storefront are based on product attributes. +- It's used for internal calculations, like delivery costs based on the product weight. + + +## Abstract products and product variants + +A product can have multiple variants, such as size or color. Such product variations are called *product variants*, or *concrete products*. To distinguish product versions, track their stock, and provide a better shopping experience, product variants are grouped under *abstract products*. + +The abstract product is the highest level of the product hierarchy. It does not have its own stock but defines the properties shared by its product variants. A product variant always belongs to one abstract product, has a distinctive stock, and is always different from another product variant with at least one [super product attribute](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html). + +The following table shows the differences between abstract products and product variants: + +| PRODUCT DATA | ABSTRACT PRODUCT | PRODUCT VARIANT | +| --- | --- | --- | +| SKU |✓|✓| +| Name |✓|✓| +| Description |✓|✓| +| Product attributes |✓|✓| +| Super attributes | |✓| +| Media assets |✓|✓| +| Stock | |✓| + +### Abstract products and product variants on the Storefront + +On the Storefront, only abstract products are displayed in the product catalog and can be searched for. + +Product variants are always a part of an abstract product. Abstract product and all its product variants share the same URL. + +In this example, a T-shirt, which is an abstract product, is available in sizes S, M, and L, which are three different product variants, each having its own stock. When you search *T-shirt* on the Storefront, it's the abstract product that appears as the search result. A Storefront user can only buy one of the product variants. On the **Product Details** page of the abstract product, they select and add to the cart one of the product variants: S, M, L. + + +### Product information inheritance + +Information about a concrete product on the Storefront is a combination of the information of the concrete product and its abstract product. + +The information of a concrete product always overwrites the information of its abstract product. For example, if the abstract product name is *VGA cable*, and the concrete product name is *VGA cable(1.5m)*, the latter is displayed. +If some information is not specified for a concrete product, it inherits the information from its abstract product. For example, if no price is specified for a concrete product, the price of its abstract product is displayed. + +To better understand how abstract and concrete products are processed in a shop, see the following use cases. + +#### Case 1: Selling books + +Most of the time, books do not have variations. In this case, you create an abstract product and a concrete product per book. The abstract product holds all the information about the product. The concrete product holds the stock information. + +#### Case 2: Selling blue and green products + +To sell a product in blue and green colors, you create an abstract product and two concrete products. To let your customers select the product variant of which color they want to buy, you create a `color` super attribute. + +Suppose the green variant is more expensive than the blue one. In this case, you add the price to the green product variant. The blue variant inherits the price from the abstract product. + +The product information is structured as follows: +- The abstract product contains all the information about the product. +- The concrete products contain the following information: + - The blue variant holds the stock information and the super attribute: `color = blue`. + - The green variant holds: + - The stock information. + - The super attribute: `color = green`. + - The price, which is different from the abstract product's price. + +#### Case 3: Selling a product in five colors, four sizes, and three materials + +To a product in five colors, four sizes, and three materials, you can structure product information in one of the following ways. You can create an abstract product and up to 60 variants to support all the combinations. Or, you can use the [Product Groups](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-groups-feature-overview.html) feature. + +Using the Product Group feature, you create a group of five abstract products, one for each color. Each abstract product contains up to 12 concrete products of different combinations of the sizes and the materials. + +The abstract products contain all the information about the product. The product variants hold the stock information and the super attribute of color, size, and material. + + +## Managing product information in a third-party product information management system + +Besides the Back Office, you can maintain product information in an external Product Information Management (PIM) system. The data from the PIM systems can be exported to Spryker. An import interface transforms the incoming product data into a Spryker specific data structure and persists it. After that, the data is exported to the key-value store (Redis or Valkey) and Elasticsearch. This way, the Storefront can access the relevant product data very fast. After the import was finished, you can access the products in the Spryker Back Office. + +![Product information management](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product/product_information_management.png) + +The Spryker Commerce OS supports integration of the following PIM systems: + +- [Akeneo](/docs/dg/dev/backend-development/extend-spryker/spryker-os-module-customisation/extend-the-core.html) +- [Censhare PIM](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/third-party-integrations/censhare-pim.html) +- [Xentral](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/third-party-integrations/xentral.html) + +## Concrete product filter + +The Concrete SKU product filter lets a Back Office user filter abstract products by SKUs of concrete products. + +For example, an abstract product with the `ABCD` SKU has two concrete products with the `ABCD-1` and `ABCD-2` SKUs. Without this feature, you can find this abstract product only by the `ABCD` SKU. With this feature, you can find this product by the `ABCD`, `ABCD-1`, and `ABCD-2` SKUs. + + + +## Related Business User documents + +| OVERVIEWS |BACK OFFICE USER GUIDES| +| - |---| +| [Product Attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-attributes-overview.html) | [Create an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) | +| [Discontinued Products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html) | [Edit abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.html) | +| [Product Images](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-images-overview.html) | [Create a product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html) | +| [Timed Product Availability](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html) | [Edit a product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html) | +| [Product Readiness](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-readiness-overview.html) | | +| | [Manage products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-products.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | +|---|---|---|---| +| [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | [ProductValidity migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productvalidity-module.html) | [Retrieve abstract products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.html) | [File details: product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | +| [Install the Quick Add to Cart + Discontinued Products feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-quick-add-to-cart-discontinued-products-feature.html) | | [Glue API: Retrieving concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html) | [File details: product_abstract_store.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.html) | +| [Alternative Products + Discontinued Products feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html) | | [Retrieving product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.html) | [File details: product_concrete.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html) | +| [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) | | [Retrieving image sets of abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html) | [File details: product_attribute_key.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.html) | +| [Glue API: Product Image Sets feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) | | [Retrieving image sets of concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html) | [File details: product_management_attribute.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.html) | +| [Category Image feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.html) | | | [File details: product_discontinued.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.html) | +| [Install the Product + Cart feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.html) | | | | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-images-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-images-overview.md new file mode 100644 index 00000000000..871914d2d09 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-images-overview.md @@ -0,0 +1,38 @@ +--- +title: Product Images overview +description: Group several images into sets and link them to products. One product can have several named and localized sets of images. +last_updated: Jul 7, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-images-overview +originalArticleId: 04873187-c654-4119-a80e-e8b607521c79 +redirect_from: + - /2021080/docs/product-images-overview + - /2021080/docs/en/product-images-overview + - /docs/product-images-overview + - /docs/en/product-images-overview + - /v1/docs/image-hosting + - /v1/docs/video-embedding + - /docs/scos/user/features/202311.0/product-feature-overview/product-images-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/product-images-overview.html +--- + +*Product Images* make your shop more appealing and give your customers a better idea of what they are buying. The feature lets you group several images into sets and link them to products. One product can have several named and localized sets of images, for example, to present standard or seasonal highlights. + +Different image sets can be used in CMS Pages and Blocks, for marketing and promotional purposes or simply to increase branding in your store. + +To ensure a high performance and fast site speed, the images are integrated from separate hosting servers. + +You can enjoy the following benefits of the feature: + +- One product can have several names and localized sets of images +- Small and large images +- Adjustable sort order of images in a set +- Possibility to create different image sets for different use cases on different pages per product +- Possibility to define the order of images to be displayed on frontend + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Assign images to a product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html#optional-add-images) | +| [Assign images to categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-readiness-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-readiness-overview.md new file mode 100644 index 00000000000..24bfbf84bc1 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/product-readiness-overview.md @@ -0,0 +1,145 @@ +--- +title: Product Readiness overview +description: Understand how Product Readiness checks help you identify missing or incorrect product data and configuration issues before products go live. +last_updated: Nov 13, 2025 +template: concept-topic-template +--- + +The Product Readiness feature provides diagnostic checks that evaluate the completeness and configuration quality of your products. It consolidates the critical prerequisites for making products available for sale and gives you immediate insight into what still needs attention. By surfacing potential data gaps and misconfigurations early, Product Readiness shortens the time required to prepare products for your storefront. + +You can access the Product Readiness page from the product view page in the Back Office via the Product Readiness button. + +{% info_block warningBox %} + +Product Readiness identifies missing data and configuration inconsistencies, but it does not guarantee storefront visibility. Additional business logic or channel-specific rules can still prevent a product from appearing to shoppers. + +{% endinfo_block %} + +## Key capabilities + +- Surfaces incomplete or inconsistent core product data, such as missing attribute values, pricing details, or stock information. +- Highlights configuration issues that block a product from reaching availability, including missing approvals or required assignments. +- Aggregates readiness signals in a single view so product teams can focus on remediation instead of manual investigations. + +## How readiness checks work + +- Product data is evaluated against a set of predefined readiness conditions that cover essential catalog requirements. +- Each condition returns a pass or actionable message describing what is missing or misconfigured. + +## Use cases + +| Scenario | Result | +| --- | --- | +| Launching a new product with complex attributes | Readiness checks ensure that vital data—such as descriptions, pricing, and stock—is populated before publication. | +| Investigating why a product is unavailable for purchase | Diagnostic messages point to missing prerequisites, reducing the time spent on manual troubleshooting. | +| Auditing seasonal campaign assortments | Teams can validate that all scheduled products satisfy baseline requirements ahead of launch. | +| Validating imported product batches | Import operators can confirm that newly created products include the necessary data before exposing them to sales channels. | + +## Integration guide + +The Back Office readiness view is powered by plugins that aggregate diagnostics from approval, activation, storage, and price modules. Implement the following steps in your project layer. + +### 1. Register readiness provider plugins + +Extend **\Pyz\Zed\ProductManagement\ProductManagementDependencyProvider** with the readiness providers that match your catalog requirements. + +```php +getProductConcrete()) { + return $productReadinessTransfers; + } + + $productReadinessTransfers->append( + (new ProductReadinessTransfer()) + ->setTitle(static::TITLE_STATUS_IS_ACTIVE) + ->addValue( + $productConcreteReadinessRequestTransfer->getProductConcrete()->getIsActive() + ? static::VALUE_YES + : static::VALUE_NO, + ), + ); + + return $productReadinessTransfers; + } +} +``` + +Register the new plugin in the dependency provider method ProductManagementDependencyProvider::getProductConcreteReadinessProviderPlugins shown above so it appears in the Back Office Product Concrete readiness view together with the built-in checks. + +## Related Business User documents + +| BACK OFFICE USER GUIDES | +| --- | +| [Manage product variants](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html) | +| [Manage abstract products and product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) | + diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/search-widget-for-concrete-products-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/search-widget-for-concrete-products-overview.md new file mode 100644 index 00000000000..09dfbd31561 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/search-widget-for-concrete-products-overview.md @@ -0,0 +1,68 @@ +--- +title: Search widget for concrete products overview +description: Search widget adds lets users easily search and add concrete products directly from shopping cart/list pages. +last_updated: Jul 5, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/search-widget-for-concrete-products-overview +originalArticleId: f3839683-f449-4000-b5cc-616d01453120 +redirect_from: + - /2021080/docs/search-widget-for-concrete-products-overview + - /2021080/docs/en/search-widget-for-concrete-products-overview + - /docs/search-widget-for-concrete-products-overview + - /docs/en/search-widget-for-concrete-products-overview + - /docs/scos/user/features/201811.0/product-feature-overview/search-widget-for-concrete-products-overview.html + - /docs/scos/user/features/202311.0/product-feature-overview/search-widget-for-concrete-products-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/search-widget-for-concrete-products-overview.html + +--- + +With the search widget, the customer doesn't need to go to the product details page to add items. Search widget adds a search box to a Shopping cart, Shopping List, and Quick Order Page allowing the users to easily search and add concrete products directly from shopping cart/list pages. The widget includes the search field for concrete products and the quantity field. A shopper can search for products by SKU or concrete Product name. What the customers only have to do is to start typing the Name or the product SKU and the appropriate suggestions will appear in the drop-down. The suggested options let shoppers complete the search quickly. + +You can add a search widget on the Quick Order, Shopping List, and Shopping Cart pages. Using the widget, the customer only needs to paste the necessary items either by entering the concrete products SKUs or typing their name. The matching product variants are suggested in the drop-down. + +Using the search widget, online shoppers can find products assigned specifically to the stores the users are in. Also, only products corresponding to user's [currency](/docs/pbc/all/price-management/{{site.version}}/base-shop/extend-and-customize/multiple-currencies-per-store-configuration.html) and [price mode](/docs/pbc/all/price-management/{{site.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html) settings are searched for. + +Here's an example of what the search widget looks like on: + +## Shopping Cart page + +![Shopping cart page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Search+Widget+for+Concrete+Products+Overview/shopping-cart-page.png) + +When the customer selects the product they can set the necessary item quantity in the **Quantity** field. If the customer adds a product that has quantity restrictions, these restrictions are automatically adjusted and the item obtains the closest valid quantity. + +All the products that are being added to cart are added as separate items to support the **Splittable Order Items** feature. For example, a customer has already 005 SKU product in the quantity of 3 in the cart. When adding another product of the same SKU to cart, the product is not merged but added as a separate item. This way a splittable product can be added to the order as a non-splittable one. + +A picture with 2 products of the same SKU added + +![Guest shopping cart](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Search+Widget+for+Concrete+Products+Overview/guest-shopping-cart.png) + +With the search widget, a customer can always find the items that are available specifically to them as [Product Restriction](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-product-restrictions-feature-overview/merchant-product-restrictions-feature-overview.html) are considered while searching. This means, that if a blacklist rule exists for a customer, the products that are added to that rule will not be displayed in the search results. + +{% info_block infoBox %} + +You can find more examples of product restriction use cases on the [Restricted Products Behavior](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-product-restrictions-feature-overview/restricted-products-behavior.html) page. + +{% endinfo_block %} + +## Shopping List page + +The search widget is available on the shopping list edit page: +![Shopping list page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Search+Widget+for+Concrete+Products+Overview/shopping-list-page.png) + +{% info_block infoBox %} + +In the empty shopping list, the customer can still add products with the help of the search widget. + +{% endinfo_block %} + +![Search widget demo](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Search+Widget+for+Concrete+Products+Overview/search-widget-demo.png) + +In comparison with Shopping Cart, for shopping lists, the quantity that is being added by a search widget is not verified. That means that the customer can add products to a shopping list with any quantity, irrespective of the [quantity restrictions](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/non-splittable-products-feature-overview.html) the products may have. + +The same works for the [product restriction](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/merchant-product-restrictions-feature-overview/merchant-product-restrictions-feature-overview.html) rules: the shopper can't add blacklisted products to a shopping list. They get "No search results" message in the widget field, and only whitelisted products are suggested in the search results in case of a whitelist. + +## Quick Order page + +The widget allows searching the products on the quick order page too: + +![Quick order page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Search+Widget+for+Concrete+Products+Overview/quick-order-page.png) diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.md new file mode 100644 index 00000000000..faa9225f8d1 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.md @@ -0,0 +1,51 @@ +--- +title: Timed Product Availability overview +description: Timed product availability, or product TTL (Time to Live) lets you define when your products are available online and when they are not. +last_updated: Jul 9, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/timed-product-availability-overview +originalArticleId: 1091da1e-29b2-46b4-96d1-6f283264230b +redirect_from: + - /2021080/docs/timed-product-availability-overview + - /2021080/docs/en/timed-product-availability-overview + - /docs/timed-product-availability-overview + - /docs/en/timed-product-availability-overview + - /docs/scos/user/features/202200.0/product-feature-overview/timed-product-availability-overview.html + - /docs/scos/user/features/202311.0/product-feature-overview/timed-product-availability-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html +--- + +Timed product availability, or product TTL (Time to Live) lets you define when your products are available online and when they are not. To get the main idea of the TTL, go to the general feature overview for more detailed information about how it works as well as familiarize yourself with its usage scenarios. + +The Timed Product Availability feature is implemented through the `isActive` field by introducing two more fields for product concretes in the Back Office—**Valid from** and **Valid to**. A product can have exactly one "life"—one (or no) start, one (or no) end. If the **Valid from** date has not come yet, or if **Valid to** has been reached, the value of isActive field is set to `false` and the product is invisible for customers. This being said, the product validity settings overrule manual (de)activation of products. + +{% info_block infoBox %} + +Which means that, if, for example, the following **conditions** are met: +- a product has been manually set to *Deactivated* +- this product has **Valid from** and **Valid to** values specified +- **Valid to** date lies in the future +- The **result** is: the product will be displayed until after the time set in "Valid to" field. + To deactivate the product in this case, it would be necessary to clear the values in the **Valid from** and **Valid to** fields. + +{% endinfo_block %} + +Time set for the product validity **Valid from** and **Valid to** fields is accurate up to the minute. However, technically you can change the accuracy (up to the second or up to the days) using a cronjob. The time is set in GMT by default. + +## Use cases + +The following table shows possible usage scenarios with the TTL feature and resulting system behavior. + +| VALIDITY DATES SETTINGS | RESULT | +| --- | --- | +| "Valid from" is set, "Valid to" is set and lies in the future | Product goes online starting from "Valid to" time and remains online until after the "Valid to" time. | +| "Valid from" is set, "Valid to" is not set | Product goes online from "Valid from" time and never goes offline. | +| "Valid from" is not set, "Valid to" is set | Product goes online after manual activation and remains online till "Valid to" time is reached. | +| "Valid to" is set in the past | Product will be deactivated shortly. | +| "Valid from" is set, "Valid to" is set and lies in the future, the product is deactivated manually | Message saying that the product will be activated because of setting "Valid from" and "Valid to" time.| + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Manage concrete product validity dates](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-groups-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-groups-feature-overview.md new file mode 100644 index 00000000000..401c2b9406b --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-groups-feature-overview.md @@ -0,0 +1,88 @@ +--- +title: Product Groups feature overview +description: Product Groups feature lets product catalog managers group products by attributes. +last_updated: Jul 26, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-groups-feature-overview +originalArticleId: 7daa66de-975d-443b-935e-3819c2163c51 +redirect_from: + - /2021080/docs/product-groups-feature-overview + - /2021080/docs/en/product-groups-feature-overview + - /docs/product-groups-feature-overview + - /docs/en/product-groups-feature-overview + - /docs/scos/user/features/202200.0/product-groups-feature-overview.html + - /docs/product-group + - /docs/scos/dev/feature-walkthroughs/202200.0/product-groups-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-groups-feature-walkthrough.html + - /docs/scos/user/features/202311.0/product-groups-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-groups-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-groups-feature-overview.html +--- + +The *Product Groups* feature lets product catalog managers group products by attributes, like color or size. A typical use case is combining the same product in different colors into a product group (not to be confused with [product variant](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html)). The feature changes the way shop users interact with products by improving accessibility and navigation. + +## Product Groups on the Storefront + +{% info_block warningBox "Examplary content" %} + +By default, there is no way to display product groups on Storefront. This section describes an exemplary implementation that you can add to your project. For more details, see [HowTo: Display product groups by color on Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.html). + +{% endinfo_block %} + + +On the Storefront, the product group is not displayed as a group. Instead, the behavior of all the UI elements related to the products in the group changes. It affects the product abstract card and **Product Details** page. + +Product abstract card: + +1. Holding the pointer over the product abstract card opens a dialog with the colors of all the products included into the group. +2. Holding the pointer over or clicking a color circle changes the abstract product image, title, rating, label, and the price. +3. Having held the pointer over the needed color, a shop user clicks on the product abstract card to be redirected to the **Product Details** page of the corresponding product. + +![Product group - product abstract card](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/feature-overviews/product-groups-feature-overview.md/product-group-product-abstract-card.mp4) + + +**Product Details** page: + +- Holding the pointer over a color circle changes the abstract product image. +- Once you stop Holding the pointer over a color circle, the image changes back to the image of the product you are viewing. +- Clicking on a color circle redirects the shop user to the page of the corresponding abstract product. + + +![Product group - product details page](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/feature-overviews/product-groups-feature-overview.md/product-group-product-details-page.mp4) + +## Product Groups in the Back Office + +In the Back Office, a product catalog manager can view what product group an abstract product belongs to. + +Also, they can insert product groups into CMS pages using content widgets in the [WYSIWYG editor](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/content-items-feature-overview.html#content-item-widget). + +## Creating product groups + +Only a developer can create product groups by [importing them](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-group.csv.html) or modifying the database. Only abstract products can be added to product groups. + + +## Current constraints + +The feature has the following functional constraints which are going to be resolved in the future: + +- There is no user interface to manage product groups in the Back Office. +- Products can only be grouped by the color attribute. + +## Video tutorial + +Check out this video tutorial on product groups: + +
      + +
      + + + + +## Related Developer documents + +|INSTALLATION GUIDES | DATA IMPORT | TUTORIALS AND HOWTOS | +|---------|---------|---------| +| [Product Groups feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.html) | [File details: product_group.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-group.csv.html) | [Display product groups by color on the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-labels-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-labels-feature-overview.md new file mode 100644 index 00000000000..6ad33fb3cbf --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-labels-feature-overview.md @@ -0,0 +1,169 @@ +--- +title: Product Labels feature overview +description: Learn about the Product Label feature in Spryker Cloud Commerce OS allowing to highlight products with information labels +last_updated: Jul 26, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-labels-feature-overview +originalArticleId: 06d2dfdf-7ad0-41dc-98b7-5521b0c5879f +redirect_from: + - /2021080/docs/product-labels-feature-overview + - /2021080/docs/en/product-labels-feature-overview + - /docs/product-labels-feature-overview + - /docs/en/product-labels-feature-overview + - /docs/scos/user/features/202200.0/product-labels-feature-overview.html + - /docs/scos/user/features/202311.0/product-labels-feature-overview.html + - /docs/product-label + - /docs/scos/dev/feature-walkthroughs/202200.0/product-labels-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-labels-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-labels-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-labels-feature-overview.html +--- + +The *Product Label* feature lets product catalog managers highlight the needed products by adding a special type of information—product labels. + +## Product label + +A *product label* is a sales-related piece of information conveying a message about the product to a buyer. + +The product labels are applied to products to be displayed on their product cards and product details pages. + +
      Product label on a product card—Storefront + +![product label on product card](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/product-label-on-product-card.png) + +
      + +
      Product label on a product details page—Storefront + +![product label on product details page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/product-label-on-product-details-page.png) + +
      + +A Back Office user can [create product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html) and assign them to products in the Back Office. + +A developer can create [dynamic product labels](#dynamic-product-label). + + +## Dynamic product label + +*Dynamic product label* is a product label that follows the condition rules defined on a code level. Unlike the regular product label, the dynamic product label is automatically applied to the product that fulfills the condition rules. A developer can edit the rules or create new dynamic product labels. +The following dynamic product labels are shipped by default: + +- *Discontinued* +
      The *Discontinued* product label is added when you discontinue a product. The label is active until the product becomes inactive. To learn more, see [Discontinuing a product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html). +- *Alternatives available* +
      The *Alternatives available* product label goes along with the *Discontinued* product label. It is added when you discontinue a product that has existing [alternative products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/alternative-products-feature-overview.html). The label is active until the product becomes inactive. To learn more, see [Adding product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html). + +- *NEW* +
      The *NEW* label is added when you create a product. It is active for the time period defined inclusively in the **New from** and **New to** fields. To learn more, see [Creating an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). + +- *SALE* +
      The *SALE* product label is added to a product automatically when the product's original price is superior to the default price. To learn more, see [Creating an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). + +{% info_block infoBox "Prices" %} + +A default price shows the current value of the product on Storefront. + +An original price is displayed as a strikethrough to identify that the value of the product has been decreased as if there is a promotion. + +{% endinfo_block %} + +## Product label design + +A Back Office user can select the design and the position of the product label on a product card. The following label designs are shipped by default: + +
      +Alternative + +![alternative product label design](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/alternatives-available-product-label-design.png) + +
      + +
      Discontinued + +![discontinued product label design](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/discontinued-product-label-design.png) + +
      + +
      Top + +![top product label design](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/top-product-label-design.png) + +
      + +
      New + +![new product label design](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/new-product-label-design.png) + +
      + +
      Sale + +![sale product label design](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/sale-product-label-design.png) + +
      + +When creating a product label, a Back Office user selects a design by entering its name as a **Front-end Reference**. To learn more, see [Creating product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html) + +If the product label designs shipped by default are not sufficient for your project, a developer can create new HTML classes to use as a Front-end Reference. + +## Product label priority + +When several product labels are applied to a product, all of them are displayed on its product card and product details page. + +![product label priority ](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/alternatives-available-product-label-design.png) + + +A Back Office user can define the order in which product labels are displayed on the product card and product details page by entering a **Priority** value when creating a product label. + +The product labels are displayed in ascending order of Priority. So, the label with the smallest priority value always goes first while the product label with the highest Priority value goes last. + +In the preceding figure, the priority value of the *Alternatives available* product label is *4*. The Priority value of the *Discontinued* product label is *5*. + +To learn how a Back Office user can define the product label priority, see [Creating product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html). + +## Product label store relations + +A Back Office user can define the stores each product label is displayed in. For example, if a promotion campaign targets Germany, the *Sale* product label can be displayed only in the *DE* store. + +To learn how a Back Office user can define store relation for a product label, see [Creating product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html). + +A developer can also [import store relations for product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-label-store.csv.html). + +## Product label statuses + +A product label can have the following statuses: +- Active +- Inactive + +If a product label is active, it's displayed on all the product pages it's applied to. If a product label is inactive, it's still applied to the selected product, but it's not displayed on the respective product pages. This might be useful when you want to prepare for an event beforehand. You can create an inactive product label and apply it to the needed products. When the event starts, you just need to activate the label to show it on all the product pages it's applied to. + +To learn how a Back Office user can activate and deactivate product labels in the Back Office, see [Edit product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.html) + +## Product label exclusivity + +The *Exclusive* product label is a product label that, when applied to a product, discards all the other product labels applied to it. The other product labels are still applied to the product, but only the exclusive one is displayed on the respective product card and product details page. This might be useful when running several discounts in a store at the same time. By assigning the labels with corresponding discount names to needed products, you can show the shop users to which products each discount is applied. + +To learn how a Back Office user can create an exclusive product label, see [Creating product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html). + +## Product label filtering on the Storefront + +Shop users can view product cards with labels on any Storefront page. Also, they can filter products by labels on category and search results pages. + +![Filter product labels](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Label/Product+Label+Feature+Overview/filter-labels-yves.png) + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html) | +| [Edit product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | +|---|---|---| +| [Install the Discontinued Products feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.html) | [ProductLabel migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.html) | [Retrieving product labels](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) | +| [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) | [ProductLabelGui migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.html) | | +| | [Upgrade the ProductLabelSearch module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.html) | | +| | [Upgrade the ProductLabelStorage module](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.html) | | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-lists-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-lists-feature-overview.md new file mode 100644 index 00000000000..69d2059adcd --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-lists-feature-overview.md @@ -0,0 +1,37 @@ +--- +title: Product Lists feature overview +description: Product lists is a Spryker Commerce OS feature that lets you create product lists. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-lists-feature-overview +originalArticleId: 31ff5f0d-f1c1-4a6e-91aa-52a9b5205bea +redirect_from: + - /2021080/docs/product-lists-feature-overview + - /2021080/docs/en/product-lists-feature-overview + - /docs/product-lists-feature-overview + - /docs/en/product-lists-feature-overview + - /docs/scos/user/features/202200.0/product-lists-feature-overview.html + - /docs/product-lists + - /docs/scos/dev/feature-walkthroughs/202200.0/product-lists-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-lists-feature-walkthrough.html + - /docs/scos/user/features/202311.0/product-lists-feature-overview.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-lists-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-lists-feature-overview.html +--- + +The *Product Lists* feature lets you configure product availability for specific companies by adding their products to an excludelist or allowlist. For example, if you want to hide some products, or even a category, from a company you've signed a contract with, with this feature, you can create an excludelist of those products and assign it to the company. This prevents the company from purchasing products from the excludelist. + + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html) | +| [Edit product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html) | + +## Related Developer documents + +|INSTALLATION GUIDES | +|---------| +| [Product Lists feature integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.html) | diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-options-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-options-feature-overview.md new file mode 100644 index 00000000000..796bb879fcf --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/feature-overviews/product-options-feature-overview.md @@ -0,0 +1,89 @@ +--- +title: Product Options feature overview +description: The document describes the creation process of product options and how it's managed in the Back Office +last_updated: Jul 26, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-options-feature-overview +originalArticleId: bb06c0c0-3cdb-46de-bf29-37606bd1646b +redirect_from: + - /docs/scos/user/features/202200.0/product-options-feature-overview.html + - /docs/scos/user/features/202108.0/product-options-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202200.0/product-options-feature-walkthrough.html + - /docs/scos/user/features/202311.0/product-options-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/product-options-feature-walkthrough.html + - /docs/pbc/all/product-information-management/202311.0/feature-overviews/product-options-feature-overview.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/feature-overviews/product-options-feature-overview.html +--- + +The *Product Options* feature lets a Back Office user create and assign product options to abstract products. Product options are product additions that a customer can select on the product detail page before adding the product to the cart. For example, the product options can be gift wrappings for products, insurance, or warranty. Product options do not have stock but an SKU linked to product abstracts. Thus, you cannot purchase them without buying a corresponding product. + +Each product option is defined by: +- Product option group name +- Tax set assigned on the product option group +- Option value +- Translation + +*Product option group* holds all available options or *option values* that buyers select. For example, you can have the "Warranty" product option group and create the `1-year warranty` and `2-year warranty` values for it. + +With the feature in the Back Office, you can create, update, activate, deactivate, and view all product options available in the system. You also can define a price for product options and select products to which they will be added. + +In the Storefront, customers can select and add options to products on the product detail page. + +## Product Options in the Back Office + +In the Back Office, you can perform the following actions on product options: +- Create a product option. +- Update, view, activate, or deactivate product options. +- Create multiple option values in one option group. +- Specify gross and net prices for options values. +- Assign product option groups to products. +- Activate product options to make them visible in the Storefront. + +To learn more about how to work with product options in the Back Office, see [Create product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/create-product-options.html) and [Edit product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/edit-product-options.html). + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Options/Product+Options+Overview/product-option-back-office.png) + +{% info_block infoBox %} + +Each product option group may contain as many product options as you need. For example, you can offer insurance services (*product option group*) for the product with several *product options*: +- One-year coverage insurance $100. +- Two-year coverage insurance $150. +- Three-year coverage insurance $200. + +{% endinfo_block %} + +## Product Options on the Storefront + +On the product detail page, the new product option group (1) will be displayed as a drop-down list with the option values (2). + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Options/Product+Options+Overview/product-option-yves.png) + +## Current constraints + +{% info_block infoBox %} + +The feature has the following functional constraints, which are going to be resolved in the future. + +{% endinfo_block %} + +- Product options are available in all the stores where the corresponding concrete product is available. +- Unlike [Cart](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/feature-overviews/shared-carts-feature-overview.html), [Shopping Lists](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html) does not support product options. +- If you add a product with an option to a shopping list, the product option gets discarded. +- You cannot define product option prices in a per-merchant manner. +- If you create a product option, the price remains the same for all merchants. +- Unlike other prices in Spryker, the product option price is not bound to any of the available price types. (DEFAULT or ORIGINAL) + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/create-product-options.html) | +| [Edit product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/edit-product-options.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | DATA IMPORT | +|---------|---------|---------| +| [Install the Shopping Lists + Product Options feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html) | [ProductOption migration guide](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.html) |[File details: product_option.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html) | +| [Install the Product options + Order Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.html) | | [File details: product_option_price.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.html) | +| [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) | | | diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/categories-data-import.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/categories-data-import.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/categories-data-import.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/categories-data-import.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md index 0a3dc2b2b76..9b5dd6fb68f 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-category-storecsv originalArticleId: 65ea104d-3682-4f3c-999f-8abc8d45fb72 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-store.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/catalog-setup/categories/file-details-category-store.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/catalog-setup/categories/file-details-category-store.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/categories/file-details-category-store.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md index c2fa6d5ef85..804ace05326 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-category-templatecsv originalArticleId: fac13464-5ddc-4b2a-8dff-f257e196e222 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category-template.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/catalog-setup/categories/file-details-category-template.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/catalog-setup/categories/file-details-category-template.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/categories/file-details-category-template.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md index 7a5c4152cbf..4faa74007bf 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-categorycsv originalArticleId: 2113cd52-83fb-4c24-9534-6208c370b55a redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/catalog-setup/categories/file-details-category.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/catalog-setup/categories/file-details-category.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/categories/file-details-category.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-image.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-image.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-image.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-image.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-slot.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-slot.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-slot.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template-slot.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-configurable-bundle-template.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-configurable-bundle-template.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list-to-category.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list-to-category.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list-to-category.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list-to-category.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list-to-concrete-product.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list-to-concrete-product.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list-to-concrete-product.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list-to-concrete-product.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-list.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-list.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-measurement-unit.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-measurement-unit.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-measurement-unit.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-measurement-unit.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md index 4bc05e11558..db124a0eca1 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.md @@ -2,6 +2,8 @@ title: "File details: product_packaging_unit.csv" description: Use the product_packaging_unit.csv file to configure information about product packaging units in your Spryker shop. template: data-import-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/file-details-product-packaging-unit.csv.html last_updated: Jun 1, 2023 related: - title: Execution order of data importers in Demo Shop diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md index 2006f557312..29b2b9576c1 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-alternativecsv originalArticleId: cda20a75-66a5-4c07-a130-74725e5e5da0 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-alternative.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/file-details-product-alternative.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/import-file-details-product-alternative.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md index 4f06012f082..34bc7f46b44 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-concrete-pre-configurationcsv originalArticleId: 81e75f7f-b1bd-4707-870a-dbea4a001273 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-concrete-pre-configuration.csv.html - /docs/scos/dev/data-import/202200.0/data-import-categories/special-product-types/configurable-product-import-category/file-details-product-concrete-pre-configuration.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/configurable-product-import-category/file-details-product-concrete-pre-configuration.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/file-details-product-concrete-pre-configuration.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md index 003aa6c666c..c82ca270f8d 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-discontinuedcsv originalArticleId: 3b2c40f5-ad6d-4ff5-9b65-b058e1ff9419 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-discontinued.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/file-details-product-discontinued.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/import-file-details-product-discontinued.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md index c2b87d3f371..507d5f1ea22 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-group.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-groupcsv originalArticleId: dafbf02b-ad3c-4a49-b6f4-4f7448b61fca redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-group.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-group.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-group.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-group.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md index d705c196f58..a20b4254bf4 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-label-storecsv originalArticleId: 6d00793f-81ee-4e04-894f-5650a9e26d17 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label-store.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-label-store.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-label-store.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-label-store.csv.html @@ -17,7 +18,7 @@ related: - title: Product Labels feature overview link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-labels-feature-overview.html - title: Execution order of data importers in Demo Shop - link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html --- This document describes the `product_label_store.csv` file to configure [Product Label](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-labels-feature-overview.html) and store assignment information in your Spryker Demo Shop. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md index c46a41a8fa4..dd0aa84b439 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-label.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-labelcsv originalArticleId: f75edaed-eaa8-428d-9edc-84f03910a815 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-file-details-product-label.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-label.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/file-details-product-label.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/import-file-details-product-label.csv.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.md new file mode 100644 index 00000000000..36862263b15 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.md @@ -0,0 +1,35 @@ +--- +title: "Import file details: product_packaging_unit_type.csv" +description: Learn how you can import data for product packaging units using the product packaging unit type csv file within your Spryker Cloud Commerce OS project. +template: data-import-template +last_updated: Aug 10, 2024 +redirect_from: + - /docs/pbc/all/product-information-management/202204.0/base-shop/tutorials-and-howtos/howto-import-packaging-units.html + - /docs/pbc/all/product-information-management/202404.0/base-shop/tutorials-and-howtos/howto-import-packaging-units.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/tutorials-and-howtos/howto-import-packaging-units.html + - /docs/pbc/all/product-information-management/202307.0/base-shop/tutorials-and-howtos/howto-import-packaging-units.html + +--- + +This document describes the `product_packaging_unit_type.csv` file to configure information about [product packaging units](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/packaging-units-feature-overview.html). + + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | DESCRIPTION | +| --- | --- | --- | --- | +| name | ✓ | string | Glossary key that will be used to display a packaging unit type. Each name needs a glossary key definition for all configured locales. | + +## Import file template and content example + +| FILE | DESCRIPTION | +|---|---| +| [template_product_packaging_unit_type.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.md/template_product_packaging_unit_type.csv) | Import file template with headers only. | +| [product_packaging_unit_type.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/import-and-export-data/import-file-details-product-packaging-unit-type.csv.md/product_packaging_unit_type.csv) | Exemplary import file with the Demo Shop data. | + + +## Import file command + +```bash +console data:import product-packaging-unit-type +``` diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/import-product-data-with-a-single-file.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-information-management-data-import.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-information-management-data-import.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-information-management-data-import.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-information-management-data-import.md index e74845e7e3c..3bf108c5c3a 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-information-management-data-import.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-information-management-data-import.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/catalog-setup originalArticleId: 16830216-0c33-4009-86e0-f9995eef7eed redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-information-management-data-import.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/catalog-setup.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/import-product-catalog-data.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/product-information-management-data-import.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md index 24184219fde..b111ab1bed1 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-option-pricecsv originalArticleId: 7990de20-cb7f-467d-80e8-b3ca2cb5ff81 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/special-product-types/product-options/file-details-product-option-price.csv.html - /docs/scos/dev/data-import/201903.0/data-import-categories/special-product-types/product-options/file-details-product-option-price.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/special-product-types/product-options/file-details-product-option-price.csv.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md new file mode 100644 index 00000000000..1c57e77714f --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.md @@ -0,0 +1,53 @@ +--- +title: "Import file details: product_option.csv" +description: Learn how to confgiure product options information using the product option csv file within your Spryker project. +last_updated: Jun 23, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-optioncsv +originalArticleId: baab3597-94b0-47b1-825c-65c0d369f529 +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html + - /docs/scos/dev/data-import/201811.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html + - /docs/scos/dev/data-import/201903.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html + - /docs/scos/dev/data-import/201907.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/special-product-types/product-options/file-details-product-option.csv.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/product-options/file-details-product-option.csv.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html +related: + - title: Execution order of data importers in Demo Shop + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html +--- + +This document describes the `product_option.csv` file to configure [product option](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-options-feature-overview.html) information in your Spryker Demo Shop. + +## Dependencies + +[product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| abstract_product_skus | | String | | List of Abstract Product SKUs separated by comma. | +| option_group_id | ✓ | String |If doesn't exist then it will be automatically created. | Identifier of the Product Option Group. | +| tax_set_name | | String || Name of the tax set. | +| group_name_translation_key| | String | | Translation key of the name of the group in different locales.| +| group_name.{ANY_LOCALE_NAME}
      Example value: *group_name.en_US* | No | String |Locale data is dynamic in data importers. It means that ANY_LOCALE_NAME postfix can be changed, removed, and any number of columns with different locales can be added to the CSV files. | Name of the group in the specified locale (US for our example). | +| option_name_translation_key | | String | | Translation key of the name of the option in different locales. | +| option_name.{ANY_LOCALE_NAME}
      Example value: *option_name.en_US | | String || Name of the option in the specified locale (US for our example). | +| sku | | String | | SKU identifier of the product option. | +| avalara_tax_code | | String | | [Avalara tax code](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html#avalara-system-for-automated-tax-compliance) for automated tax calculation. | + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/Template_product_option.csv) | Exemplary import file with headers only. | +| [product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/product_option.csv) | Exemplary import file with the Demo Shop data. | + + +## Import command + +```bash +data:import:product-option +``` diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/product-options-data-import.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/product-options-data-import.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/product-options-data-import.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/product-options-data-import.md index effcd31a3e6..e7f30c7446a 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/product-options/product-options-data-import.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/product-options/product-options-data-import.md @@ -5,14 +5,14 @@ last_updated: Jun 16, 2021 template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/product-options-import originalArticleId: 07d8b5ee-b4c6-4538-a21c-5a7a8b16837c -redirect_from: +redirect_from: - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/product-options/product-options-data-import.html --- To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to product options: - [product_option.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html): allows you to define product options, like insurance, warranty or gift wrapping, and its abstract products. -- [product_option_price.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.html): allows you to define the net and gross prices for each product option. +- [product_option_price.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option-price.csv.html): allows you to define the net and gross prices for each product option. The table below provides details on Product Options data importers, their purpose, CSV files, dependencies, and other details. Each data importer contains links to CSV files used to import the corresponding data, including specifications of mandatory and unique fields, dependencies, detailed explanations, recommendations, templates, and content examples. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-approval-status.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-approval-status.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-approval-status.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-approval-status.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md index 3a178bf5e45..a369553cfd8 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-abstract-storecsv originalArticleId: 289b16ad-bb98-40cb-80c6-cfdef692687f redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract-store.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-abstract-store.csv.html - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-abstract-store.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-abstract-store.csv.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.md new file mode 100644 index 00000000000..298355b9b0c --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.md @@ -0,0 +1,84 @@ +--- +title: "Import file details: product_abstract.csv" +description: Learn how to configure Abstract product information using the product abstract csv file for your Spryker project. +last_updated: Jan 15, 2026 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-abstractcsv +originalArticleId: cf197796-3c85-4b51-a55a-dfe6b07efce9 +redirect_from: + - /docs/scos/dev/data-import/201811.0/data-import-categories/catalog-setup/products/file-details-product-abstract.csv.html + - /docs/scos/dev/data-import/201903.0/data-import-categories/catalog-setup/products/file-details-product-abstract.csv.html + - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/products/file-details-product-abstract.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-abstract.csv.html + - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-abstract.csv.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-abstract.csv.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html +related: + - title: Execution order of data importers in Demo Shop + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html +--- + +This document describes the `product_abstract.csv` file to configure [Abstract Product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) information in your Spryker Demo Shop. + +## Import file dependencies + +- [category.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/categories-data-import/import-file-details-category.csv.html) +- [glossary.csv](/docs/pbc/all/miscellaneous/{{page.version}}/import-and-export-data/import-file-details-glossary.csv.html) +- [tax.csv](/docs/pbc/all/tax-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html) + + + +## Import file parameters + +
      + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| category_key | ✓ | String | | Identifier of category key name. | +| category_product_order | | Integer | | Order of the product presentation inside a category. | +| abstract_sku | ✓ | String | | SKU identifier of the abstract product. | +| name.{ANY_LOCALE_NAME}
      Example value: *name.en_US* | ✓ | String |Locale data is dynamic in data importers. It means that ANY_LOCALE_NAME postifx can be changed, removed, and any number of columns with different locales can be added to the .csv files. | Name of the product in the specified location (US for our example). | +| url.{ANY_LOCALE_NAME}
      Example parameter: *url.en_US* | ✓ | String | | URL page of the product image in the specified location (US for our example). | +| attribute_key_{NUMBER}
      Example parameter: *attribute_key_1*
      | ✓ (if this attribute is defined) | String | | Product attribute key for the attribute. Columns `attribute_key_{NUMBER}` and `value_{NUMBER}` should always come in pair. | +| value_{NUMBER}
      Example parameter: *value_1*
      |✓ (if this attribute is defined) | String | | Product value for the attribute. | +| attribute_key_{NUMBER}.{ANY_LOCALE_NAME}
      Example value: *attribute_key_1.en_US*
      | | String | | Product attribute key, for the first attribute, translated in the specified locale (US for our example). Columns `attribute_key_{NUMBER}.{ANY_LOCALE_NAME}` and `value_{NUMBER}.{ANY_LOCALE_NAME}` should always come in pair. | +| value_{NUMBER}.{ANY_LOCALE_NAME}
      Example value: *value_1.en_US*
      | | String | | Product value for the attribute, translated in the specified locale (US for our example). | +| color_code | | String | | Product color code. | +| description.{ANY_LOCALE_NAME}
      Example value: *description.en_US* | | String | | Product description, translated in the specified locale (US for our example). | +| tax_set_name | | String | | Name of the tax set. | +| meta_title.{ANY_LOCALE_NAME}
      Example value: *meta_title.en_US* | | String | | Meta title of the product in the specified locale (US for our example). | +| meta_keywords.{ANY_LOCALE_NAME}
      Example value: *meta_keywords.en_US* | | String | | Meta keywords of the product in the specified locale (US for our example). | +| meta_description.{ANY_LOCALE_NAME}
      Example value: *meta_description.en_US* || String | | Meta description of the product in the specified locale (US for our example). | +| new_from | | Date | | To be considered a new product from this presented date. | +| new_to | | String | | To be considered a new product until this presented date. | +| avalara_tax_code | | String | | [Avalara tax code](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html#avalara-system-for-automated-tax-compliance) for automated tax calculation. Add this field if Avalara is used for tax management. | + +
      + + +## Additional information + +For each attribute, where N is a number starting from 1, without gaps, it's mandatory to have both fields: + +- `attribute_key_N` +- `value_N` + +For each attribute, where N is a number starting from 1, without gaps, it's mandatory to have both fields: + +- `attribute_key_N.{ANY_LOCALE_NAME}` +- `value_N.{ANY_LOCALE_NAME}` + +The number of attributes is not limited. + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_product_abstract.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/import-and-export-data/import-file-details-product-abstract.csv.md/Template_product_abstract.csv) | Import file template with headers only. | +| [product_abstract.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/product-information-management/base-shop/import-and-export-data/import-file-details-product-abstract.csv.md/product_abstract.csv) | Exemplary import file with the Demo Shop data. | + +## Import command + +```bash +data:import:product-abstract +``` diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md similarity index 93% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md index 0daaee945f3..6099aa69197 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.md @@ -6,8 +6,9 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-attribute-keycsv originalArticleId: 141aa68e-c752-4021-b6cb-df6fa4803d72 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-attribute-key.csv.html - - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-attribute-key.csv.html + - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-attribute-key.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-attribute-key.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-attribute-key.csv.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md index efb4f8030db..99c8c2efcf4 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.md @@ -6,9 +6,10 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-concretecsv originalArticleId: bff2c63c-1239-4c76-9c74-40fa3c9eb19d redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html - /docs/scos/dev/data-import/202200.0/data-import-categories/catalog-setup/products/file-details-product-concrete.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-concrete.csv.html - - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-concrete.csv.html + - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-concrete.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-concrete.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-concrete.csv.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md index 2ebc77d7c43..b7276313220 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.md @@ -6,8 +6,9 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-imagecsv originalArticleId: 7c155fe3-3def-4963-89fa-bf3b98b61fbb redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-image.csv.html - - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-image.csv.html + - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-image.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-image.csv.html - /docs/pbc/all/product-information-management/202204.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-image.csv.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md index c790488d36b..057e6e6c7d0 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-management-attributecsv originalArticleId: f812b029-e27e-43e7-a6a0-a6db56be3a30 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/import-file-details-product-management-attribute.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/products/file-details-product-management-attribute.csv.html - /docs/pbc/all/product-information-management/202311.0/import-and-export-data/products-data-import/file-details-product-management-attribute.csv.html - /docs/pbc/all/product-information-management/202311.0/base-shop/import-and-export-data/products-data-import/file-details-product-management-attribute.csv.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/products-data-import.md b/docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/products-data-import.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/import-and-export-data/products-data-import/products-data-import.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/import-and-export-data/products-data-import/products-data-import.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md index 358a14fa4f2..2f30fcf12bd 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/decimal-stock-concept originalArticleId: da336e52-e8e8-4849-9be3-e208cd42e273 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.html - /docs/scos/dev/migration-concepts/decimal-stock-migration-concept.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/decimal-stock-migration-concept.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/float-stock-for-products-migration-concept.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md new file mode 100644 index 00000000000..31679e95198 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.md @@ -0,0 +1,18 @@ +--- +title: Alternative Products + Discontinued Products feature integration +description: This guide describes all the steps needed to be performed in order to integrate the Alternative Products + Discontinued Products features into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-discontinued-products-feature-integration +originalArticleId: eb447174-6a43-4adb-8914-747a9771c4a9 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html + - /2021080/docs/alternative-products-discontinued-products-feature-integration + - /2021080/docs/en/alternative-products-discontinued-products-feature-integration + - /docs/alternative-products-discontinued-products-feature-integration + - /docs/en/alternative-products-discontinued-products-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-discontinued-products-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-discontinued-products-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-discontinued-products-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md new file mode 100644 index 00000000000..9462d59e2f4 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Alternative Products + Inventory Management feature +description: The guide walks you through the process of installing the Alternative products and Inventory features into the project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-inventory-management-feature-integration +originalArticleId: 5bb30c5b-4912-4a16-be29-46f68ef0e0c7 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html + - /2021080/docs/alternative-products-inventory-management-feature-integration + - /2021080/docs/en/alternative-products-inventory-management-feature-integration + - /docs/alternative-products-inventory-management-feature-integration + - /docs/en/alternative-products-inventory-management-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-inventory-management-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-inventory-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md new file mode 100644 index 00000000000..62985fe2ec0 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Alternative Products + Product Labels feature +description: The guide describes the procedure that you need to perform in order to integrate the Alternative Products + Product Labels feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-product-labels-feature-integration +originalArticleId: ad3a3385-381b-4dcf-a067-965b4d6e04cd +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html + - /2021080/docs/alternative-products-product-labels-feature-integration + - /2021080/docs/en/alternative-products-product-labels-feature-integration + - /docs/alternative-products-product-labels-feature-integration + - /docs/en/alternative-products-product-labels-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-product-label-feature-integration.html + - /docs/pbc/all/product-information-management/202311.0/install-and-upgrade/install-features/install-the-alternative-products-product-label-feature.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-product-labels-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md new file mode 100644 index 00000000000..2430760f913 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.md @@ -0,0 +1,19 @@ +--- +title: Install the Alternative Products + Wishlist feature +description: The guide walks you through the process of installing the Alternative products and Wishlist features into your Spryker based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/alternative-products-wishlist-feature-integration +originalArticleId: 753cb57b-3b63-4fa1-b40c-a1950802ca9c +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html + - /2021080/docs/alternative-products-wishlist-feature-integration + - /2021080/docs/en/alternative-products-wishlist-feature-integration + - /docs/alternative-products-wishlist-feature-integration + - /docs/en/alternative-products-wishlist-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/alternative-products-wishlist-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/alternative-products-wishlist-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-alternative-products-wishlist-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-wishlist-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-approval-process-shipment-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-filters-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-filters-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-filters-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-filters-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-image-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-catalog-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-catalog-feature.md new file mode 100644 index 00000000000..5390e43c20f --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-catalog-feature.md @@ -0,0 +1,9 @@ +--- +title: Install the Category Management + Catalog feature +description: Learn how to install the category management t+ Catalog feature in to your Spryker Cloud Commerce OS Project. +last_updated: Jul 6, 2021 +template: feature-integration-guide-template +originalArticleId: c0523c5a-4440-4d20-9a92-6d446b613a37 +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-catalog-category-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-cms-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-category-management-promotions-and-discounts-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md new file mode 100644 index 00000000000..3c7005105aa --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.md @@ -0,0 +1,17 @@ +--- +title: Install the Configurable Bundle + Order Management feature +description: This integration guide provides step-by-step instructions on installing Configurable Bundle + Order Management feature. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/configurable-bundle-order-management-feature-integration +originalArticleId: aedcdbc2-c678-4fa2-ba0d-8ddfc6264415 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.html + - /2021080/docs/configurable-bundle-order-management-feature-integration + - /2021080/docs/en/configurable-bundle-order-management-feature-integration + - /docs/configurable-bundle-order-management-feature-integration + - /docs/en/configurable-bundle-order-management-feature-integration + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-order-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-configurable-bundle-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-discontinued-products-product-labels-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.md new file mode 100644 index 00000000000..45d5cde0613 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.md @@ -0,0 +1,1074 @@ +--- +title: Install the Measurement Units feature +description: The Measurement Units feature allows defining specific units of measure for products. The guide describes how to integrate the feature into your project. +last_updated: Feb 19, 2026 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-measurement-unit-feature-integration +originalArticleId: a8fd28fc-83ac-4eda-ac81-81ec492970c1 +redirect_from: + - /2021080/docs/product-measurement-unit-feature-integration + - /2021080/docs/en/product-measurement-unit-feature-integration + - /docs/product-measurement-unit-feature-integration + - /docs/en/product-measurement-unit-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202212.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202009.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202001.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/product-measurement-unit-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201811.0/product-measurement-units-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-feature.html +related: + - title: Install the Measurement Units Glue API + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html +--- + +This document describes how to install the Measurement Units feature. + + +## Install feature core + + + +### Prerequisites + +Install the required features: + +| NAME | VERSION | +| --- | --- | +| Cart | {{page.release_tag}} | +| Product | {{page.release_tag}} | +| Order Management | {{page.release_tag}} | +| Spryker Core | {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/measurement-units:"{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|----------------------------------|-----------------------------------------------------| +| ProductMeasurementUnit | vendor/spryker/product-measurement-unit | +| ProductMeasurementUnitDataImport | vendor/spryker/product-measurement-unit-data-import | +| ProductMeasurementUnitStorage | vendor/spryker/product-measurement-unit-storage | +| ProductMeasurementUnitGui | vendor/spryker/product-measurement-unit-gui | + + +{% endinfo_block %} + + +### 2) Set up database schema and transfer objects + +1. Adjust the schema definition so entity changes will trigger events. + +| MODULE | TRIGGERED EVENTS | +| --- | --- | +| spy_product_measurement_unit |
      • Entity.spy_product_measurement_unit.create
      • Entity.spy_product_measurement_unit.update
      • Entity.spy_product_measurement_unit.delete
      | +| spy_product_measurement_base_unit |
      • Entity.spy_product_measurement_base_unit.create
      • Entity.spy_product_measurement_base_unit.update
      • Entity.spy_product_measurement_base_unit.delete
      | +| spy_product_measurement_sales_unit |
      • Entity.spy_product_measurement_sales_unit.create
      • Entity.spy_product_measurement_sales_unit.update
      • Entity.spy_product_measurement_sales_unit.delete
      | +| spy_product_measurement_sales_unit_store |
      • Entity.spy_product_measurement_sales_unit_store.create
      • Entity.spy_product_measurement_sales_unit_store.update
      • Entity.spy_product_measurement_sales_unit_store.delete
      | + +**src/Pyz/Zed/ProductMeasurementUnit/Persistence/Propel/Schema/spy_product_measurement_unit.schema.xml** + +```xml + + + + + + + +
      + + + + + +
      + + + + + +
      + + + + + +
      +
      +``` + +2. Apply database changes and generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_product_measurement_unit | table | created | +| spy_product_measurement_base_unit | table | created | +| spy_product_measurement_sales_unit | table | created | +| spy_product_measurement_sales_unit_store | table | created | +| spy_product_measurement_unit_storage | table | created | +| spy_product_concrete_measurement_unit_storage | table | created | +| spy_sales_order_item.quantity_base_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_name | column | created | +| spy_sales_order_item.quantity_measurement_unit_precision | column | created | +| spy_sales_order_item.quantity_measurement_unit_conversion | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure the following changes have ocurred in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| ProductMeasurementUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitTransfer | +| ProductMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementBaseUnitTransfer | +| ProductMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductMeasurementSalesUnitTransfer | +| SpyProductMeasurementUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitEntityTransfer | +| SpyProductMeasurementBaseUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementBaseUnitEntityTransfer | +| SpyProductMeasurementSalesUnitEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitEntityTransfer | +| SpyProductMeasurementSalesUnitStoreEntityTransfer | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementSalesUnitStoreEntityTransfer | +| ProductMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductMeasurementUnitStorageTransfer | +| ProductConcreteMeasurementBaseUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementBaseUnitTransfer | +| ProductConcreteMeasurementSalesUnit | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementSalesUnitTransfer | +| ProductConcreteMeasurementUnitStorage | class | created | src/Generated/Shared/Transfer/ProductConcreteMeasurementUnitStorageTransfer | +| SpyProductMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductMeasurementUnitStorageEntityTransfer | +| SpyProductConcreteMeasurementUnitStorageEntity | class | created | src/Generated/Shared/Transfer/SpyProductConcreteMeasurementUnitStorageEntityTransfer | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Trigger the following methods and make sure that the prior events get triggered: + +| PATH | METHOD NAME | +| --- | --- | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementUnit.php | prepareSaveEventName()
      addSaveEventToMemory()
      addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementBaseUnit.php | prepareSaveEventName()
      addSaveEventToMemory()
      addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnit.php | prepareSaveEventName()
      addSaveEventToMemory()
      addDeleteEventToMemory() | +| src/Orm/Zed/ProductMeasurementUnit/Persistence/Base/SpyProductMeasurementSalesUnitStore.php | prepareSaveEventName()
      addSaveEventToMemory()
      addDeleteEventToMemory() | + +{% endinfo_block %} + +### 3) Add translations + +{% info_block infoBox "" %} + +All measurement units need to have glossary entities for the configured locales. + +{% endinfo_block %} + +1. Add infrastructural record's glossary keys: + +**data/import/common/common/glossary.csv** + +```yaml +measurement_units.item.name,Item,en_US +measurement_units.item.name,Stück,de_DE +``` + +2. Add demo data glossary keys: + +**data/import/common/common/glossary.csv** + +```yaml +measurement_units.standard.weight.kilo.name,Kilo,en_US +measurement_units.standard.weight.gram.name,Gram,en_US +measurement_units.standard.length.metre.name,Meter,en_US +measurement_units.standard.length.centimetre.name,Centimeter,en_US +measurement_units.standard.length.feet.name,Feet,en_US +measurement_units.standard.weight.kilo.name,Kilo,de_DE +measurement_units.standard.weight.gram.name,Gramm,de_DE +measurement_units.standard.length.metre.name,Meter,de_DE +measurement_units.standard.length.centimetre.name,Centimeter,de_DE +measurement_units.standard.length.feet.name,Fuß,de_DE +``` + +3. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 4) Add Zed translations + +Generate a new translation cache for Zed: + +```bash +console translator:generate-cache +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, go to measurement units and make sure you can change the language and the pages are translated. + +{% endinfo_block %} + +### 5) Configure export to Redis + +This step will publish tables on change (create, edit, delete) to the `spy_product_measurement_unit_storage` and `spy_product_concrete_measurement_unit_storage` and sync the data to Storage. + +#### Set up event listeners + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitStorageEventSubscriber | Registers listeners that publish product measurement unit storage entity changes when a related entity change event occurs. | | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event\Subscriber | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php + add(new ProductMeasurementUnitStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +#### Setup re-generate and re-sync features + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductConcreteMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty product concrete measurement unit storage table with data. | | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductMeasurementUnitEventResourceRepositoryPlugin | Allows populating empty product measurement unit storage table with data. | | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Event | +| ProductConcreteMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole product concrete measurement unit storage table content into Storage. | | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | +| ProductMeasurementUnitSynchronizationDataPlugin | Allows synchronizing the whole product measurement unit storage table content into Storage. | | Spryker\Zed\ProductMeasurementUnitStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/EventBehavior/EventBehaviorDependencyProvider.php** + +```php + + vendor/spryker/product-measurement-unit-data-import/data/import/product_measurement_unit.csv + +```yaml +name,code,default_precision +measurement_units.standard.weight.kilo.name,KILO,1 +measurement_units.standard.weight.gram.name,GRAM,1 +measurement_units.standard.weight.tone.name,TONE,1000 +measurement_units.standard.weight.gbou.name,GBOU,10 +measurement_units.standard.weight.usou.name,USOU,10 +measurement_units.standard.weight.pund.name,PUND,100 +measurement_units.standard.weight.huwg.name,HUWG,1000 +measurement_units.standard.weight.gbtn.name,GBTN,1000 +measurement_units.standard.weight.ustn.name,USTN,1000 +measurement_units.standard.weight.oztr.name,OZTR,10 +measurement_units.standard.weight.ucwt.name,UCWT,1000 +measurement_units.standard.length.metr.name,METR,100 +measurement_units.standard.length.cmet.name,CMET,10 +measurement_units.standard.length.mmet.name,MMET,1 +measurement_units.standard.length.kmet.name,KMET,1000 +measurement_units.standard.length.inch.name,INCH,10 +measurement_units.standard.length.yard.name,YARD,100 +measurement_units.standard.length.foot.name,FOOT,100 +measurement_units.standard.length.mile.name,MILE,1000 +measurement_units.standard.area.smet.name,SMET,100 +measurement_units.standard.area.sqki.name,SQKI,100 +measurement_units.standard.area.smil.name,SMIL,100 +measurement_units.standard.area.scmt.name,SCMT,100 +measurement_units.standard.area.sqin.name,SQIN,100 +measurement_units.standard.area.sqfo.name,SQFO,100 +measurement_units.standard.area.sqmi.name,SQMI,100 +measurement_units.standard.area.sqya.name,SQYA,100 +measurement_units.standard.area.acre.name,ACRE,100 +measurement_units.standard.area.ares.name,ARES,100 +measurement_units.standard.area.hect.name,HECT,100 +measurement_units.standard.litr.name,LITR,100 +measurement_units.standard.celi.name,CELI,10 +measurement_units.standard.mili.name,MILI,1 +measurement_units.standard.gbga.name,GBGA,10 +measurement_units.standard.gbpi.name,GBPI,10 +measurement_units.standard.uspi.name,USPI,10 +measurement_units.standard.gbqa.name,GBQA,10 +measurement_units.standard.usqa.name,USQA,10 +measurement_units.standard.usga.name,USGA,10 +measurement_units.standard.barl.name,BARL,100 +measurement_units.standard.bcuf.name,BCUF,100 +measurement_units.standard.bdft.name,BDFT,100 +measurement_units.standard.cbme.name,CBME,100 +measurement_units.standard.miba.name,MIBA,100 +measurement_units.standard.dgeu.name,DGEU,100 +measurement_units.standard.ggeu.name,GGEU,100 +measurement_units.standard.busl.name,BUSL,100 +measurement_units.standard.box.name,BOX,1 +``` + + + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| name| mandatory|string |measurement_units.standard.cbme.name | The glossary key that will be used for displaying. Each name needs glossary key definition for all configured locales. | +|code|mandatory|unique, string|CBME|A unique identifier used by Spryker to identify measurement units.| +|default_precision|mandatory|integer, power of ten|100|A property that affects how detailed to render a float measurement unit. Affects visual only, not used in calculations.| + +2. Register the following plugin to enable data import: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitDataImportPlugin | Imports measurement unit data into the database. | | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +
    • Referred product abstracts to be imported
    • Referred measurement units to be imported
    |Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin| + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php +A custom multiplier that is used to calculate base unit. This field can be empty if both base and sales unit code is defined in the general [conversion ratios](https://github.com/spryker/util-measurement-unit-conversion/blob/1ae26cf8e629d25157e273097941bde438a24ddc/src/Spryker/Service/UtilMeasurementUnitConversion/UtilMeasurementUnitConversionConfig.php).

    Example: 5 means that 1 quantity of this sales unit represents 5 of the base unit.

    | +|precision|mandatory|integer, power of ten, empty|100|A property that affects how detailed to render a float measurement unit. Affects visual only, not used in calculations.
    When left empty, the precision of the measurement unit is used.| +|is_displayed|mandatory|integer|0|Controls if the sales unit can be displayed for customers.| +|is_default|mandatory|integer|1|Controls if this sales unit is preferred as the default sales unit when offered for customers.
    Takes no effect if is_displayed set as 0.
    1 product concrete can have up to 1 default sales unit.| + +2. Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementSalesUnitDataImportPlugin | Imports sales measurement unit definitions into the database. |
    • Referred product concretes to be imported
    • Related product abstracts to be imported
    • Related product abstracts' base units to be imported
    • Referred measurement units to be imported
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + vendor/spryker/product-measurement-unit-data-import/data/import/product_measurement_sales_unit_store.csv + +```yaml +sales_unit_key,store_name +sales_unit_1,DE +sales_unit_1,US +sales_unit_1,AT +sales_unit_2,DE +sales_unit_2,US +sales_unit_2,AT +sales_unit_3,DE +sales_unit_3,US +sales_unit_3,AT +sales_unit_4,DE +sales_unit_4,AT +sales_unit_5,US +sales_unit_6,DE +sales_unit_6,US +sales_unit_6,AT +sales_unit_7,DE +sales_unit_7,US +sales_unit_7,AT +sales_unit_8,DE +sales_unit_8,US +sales_unit_8,AT +sales_unit_9,DE +sales_unit_9,US +sales_unit_9,AT +sales_unit_10,DE +sales_unit_10,US +sales_unit_10,AT +sales_unit_11,DE +sales_unit_11,US +sales_unit_11,AT +sales_unit_12,DE +sales_unit_12,AT +sales_unit_12,US +sales_unit_13,DE +sales_unit_13,US +sales_unit_13,AT +sales_unit_14,DE +sales_unit_14,US +sales_unit_14,AT +sales_unit_15,DE +sales_unit_15,US +sales_unit_15,AT +sales_unit_16,DE +sales_unit_16,US +sales_unit_16,AT +sales_unit_17,DE +sales_unit_17,US +sales_unit_17,AT +sales_unit_18,DE +sales_unit_18,US +sales_unit_18,AT +sales_unit_19,DE +sales_unit_19,US +sales_unit_19,AT +``` + + + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| sales_unit_key |mandatory | string | sales_unit_1 |A reference used for the product measurement sales unit data import. | +|store_name|mandatory|string|DE|Contains the store name where the sales unit is available.| + +2. Register the following plugin: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +|ProductMeasurementSalesUnitStoreDataImportPlugin |Imports sales measurement units' Store configuration into the database. |
    • Referred sales units to be imported.
    • Referred Stores to be imported.
    | Spryker\Zed\ProductMeasurementUnitDataImport\Communication\Plugin | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + src/Pyz/Zed/Cart/CartDependencyProvider.php + + +```php + + + +
    + src/Pyz/Zed/Sales/SalesDependencyProvider.php + +```php + + + +**ProductPageSearchDependencyProvider.php** + +```php +` action functions correctly with measurement units by adding an item to the cart with the sales unit and verifying that the `QuoteTransfer.items[].quantitySalesUnit` record is populated. +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Order an item with sales unit. Make sure, in `spy_sales_order_item`, the following fields have been populated: + +- `quantity_base_measurement_unit_name` +- `quantity_measurement_unit_name` +- `quantity_measurement_unit_code` +- `quantity_measurement_unit_precision` +- `quantity_measurement_unit_conversion` + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that abstract products which have measurement units don't have `add_to_cart_sku` field at Elasticsearch document. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that every order item from the `SalesFacade::getOrderItems()` results contains quantity sales unit data. + +{% endinfo_block %} + +## Install feature frontend + +Take the steps in the following sections to install the feature frontend. + +### Prerequisites + +Install the following required features: + +| NAME | VERSION | +| --- | --- | +| Spryker Core E-commerce | {{page.release_tag}} | +|Checkout| {{page.release_tag}} | + +### 1) Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/measurement-units: "{{page.release_tag}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| ProductMeasurementUnitWidget | vendor/spryker-shop/product-measurement-unit-widget | + +{% endinfo_block %} + + +### 2) Add translations + +1. Append glossary according to your configuration: + +**data/import/common/common/glossary.csv** + +```yaml +cart.item_quantity,Quantity,en_US +product.measurement.sales_unit,Sales Unit,en_US +page.detail.add-to-cart,Add to Cart,en_US +measurement_units.recommendation.between-units-info,The quantity you have chosen is in between 2 base units,en_US +measurement_units.recommendation.min-violation,Minimum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.max-violation,Maximum quantity requirements for product are not fulfilled,en_US +measurement_units.recommendation.suggestion,Would you like to add,en_US +cart.pre.check.quantity.min.failed,Minimum quantity requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.pre.check.quantity.max.failed,Maximum quantity for product SKU '%sku%' is exceeded.,en_US +cart.pre.check.quantity.interval.failed,Quantity interval requirements for product SKU '%sku%' are not fulfilled.,en_US +cart.item_quantity,Anzahl,de_DE +product.measurement.sales_unit,Maßeinheit,de_DE +page.detail.add-to-cart,In den Warenkorb,de_DE +measurement_units.recommendation.between-units-info,Ihre gewählte Anzahl liegt zwischen 2 basis Einheiten,de_DE +measurement_units.recommendation.min-violation,Minimale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.max-violation,Maximale Mengenanforderungen für das Produkt sind nicht erfüllt,de_DE +measurement_units.recommendation.suggestion,Was würden Sie gerne hinzufügen? ,de_DE +cart.pre.check.quantity.min.failed,Die Mindestanzahl für Produkt SKU '%sku%' ist nicht erreicht.,de_DE +cart.pre.check.quantity.max.failed,Die Maximalanzahl für Produkt SKU '%sku%' ist überschritten.,de_DE +cart.pre.check.quantity.interval.failed,Die Anzahl für Produkt SKU '%sku%' liegt nicht innerhalb des vorgegebenen Intervals.,de_DE +cart.item.sales_unit.not_found,Sales unit is not found for product with SKU '%sku%'.,en_US +cart.item.sales_unit.not_found,Verkaufseinheit wird für Produkt mit SKU '%sku%' nicht gefunden.,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +### 3) Set up widgets + +1. Register the following plugins to enable widgets: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductMeasurementUnitWidgetPlugin | Enables customers to select sales units for the product when adding to cart. | | SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\ProductDetailPage | +|QuantitySalesUnitWidgetPlugin|Displays selected sales unit information for products on the cart overview page.||SprykerShop\Yves\ProductMeasurementUnitWidget\Plugin\CartPage| + + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + sales unit calculations. Applies product quantity restrictions on sales unit level. Offers recommendation when invalid quantity is selected. Maintains stock-based quantity and sales unit information for posting |vendor/spryker-shop/product-measurement-unit-widget/src/SprykerShop/Yves/ProductMeasurementUnitWidget/Theme/default/components/molecules/measurement-quantity-selector/measurement-quantity-selector.ts | + +2. Enable Javascript and CSS changes: + +```bash +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +Make sure the following widgets have registered: + +| MODULE | TEST | +| --- | --- | +| ProductMeasurementUnitWidgetPlugin | On the product details page, add a product with sales unit to cart. | +| QuantitySalesUnitWidgetPlugin | On cart overview page, make sure sales units are displayed. | + +{% endinfo_block %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-measurement-units-quick-add-to-cart-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-multi-store-products-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md new file mode 100644 index 00000000000..66ca5357018 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Packaging Units feature +description: Learn how to integrate the Packaging Units feature into a Spryker Cloud Commerce OS project. +last_updated: Apr 14, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-packaging-units-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md new file mode 100644 index 00000000000..82bfc74f9d2 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Product Approval Process feature +description: Learn how to integrate the Product Approval Process feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Mar 11, 2022 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/product-approval-process-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-approval-process-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-approval-process-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-attachments-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-attachments-feature.md new file mode 100644 index 00000000000..6b6f5b7ac25 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-attachments-feature.md @@ -0,0 +1,499 @@ +--- +title: Install the Product Attachments feature +description: Learn how to integrate the Product Attachments feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Feb 20, 2026 +--- + +This document describes how to install the [Product Attachments feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-attachments-overview.html). + +## Prerequisites + +### Install the required features + +| NAME | VERSION | INSTALLATION GUIDE | +| --- | --- | --- | +| Spryker Core | {{page.release_tag}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | + + +Minimum required versions of the packages: + +| PACKAGE | MINIMUM VERSION | +| --- | --- | +| spryker/product-attachment | 1.1.0 | +| spryker/product-attachment-storage | 1.0.2 | + +## 1) Set up Zed configuration + +**src/Pyz/Zed/ProductAttachmentStorage/ProductAttachmentStorageConfig.php** + +```php + + */ + protected function getProductAbstractPostCreatePlugins(): array + { + return [ + new ProductAttachmentProductAbstractPostCreatePlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\Product\Dependency\Plugin\ProductAbstractPluginUpdateInterface> + */ + protected function getProductAbstractAfterUpdatePlugins(): array + { + return [ + new ProductAttachmentProductAbstractAfterUpdatePlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that when you create or update an abstract product in the Back Office, the attachments are saved and updated correctly: + +1. In the Back Office, go to **Catalog > Products**. +2. Click **Edit** next to a product. +3. Go to the **Media** tab. +4. In the **Product Attachments** section, add, edit, or remove attachments. +5. Click **Save**. + +Make sure the records in the `spy_product_attachment` and `spy_product_attachment_product_abstract` database tables are created or updated accordingly. + +{% endinfo_block %} + +Register the following Back Office plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductAttachmentProductAbstractFormExpanderPlugin | Expands the abstract product form with the Attachments tab. | | Spryker\Zed\ProductAttachment\Communication\Plugin\ProductManagement | +| ProductAttachmentProductAbstractTransferMapperPlugin | Maps attachment form data to the abstract product transfer. | | Spryker\Zed\ProductAttachment\Communication\Plugin\ProductManagement | +| ProductAttachmentProductAbstractFormDataProviderExpanderPlugin | Populates the attachment form with existing attachment data. | | Spryker\Zed\ProductAttachment\Communication\Plugin\ProductManagement | +| ProductAttachmentImageTabContentProviderPlugin | Provides attachment content for the Media tab. | | Spryker\Zed\ProductAttachment\Communication\Plugin\ProductManagement | + +**src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php** + +```php + + */ + protected function getProductAbstractFormExpanderPlugins(): array + { + return [ + new ProductAttachmentProductAbstractFormExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractTransferMapperExpanderPluginInterface> + */ + protected function getProductAbstractTransferMapperPlugins(): array + { + return [ + new ProductAttachmentProductAbstractTransferMapperPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormDataProviderExpanderPluginInterface> + */ + protected function getProductAbstractFormDataProviderExpanderPlugins(): array + { + return [ + new ProductAttachmentProductAbstractFormDataProviderExpanderPlugin(), + ]; + } + + /** + * @return list<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormTabContentProviderPluginInterface> + */ + protected function getProductAbstractFormTabContentProviderPlugins(): array + { + return [ + new ProductAttachmentImageTabContentProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that the **Attachments** section is visible in the **Media** tab when editing an abstract product in the Back Office. + +{% endinfo_block %} + +Register the event subscriber and synchronization plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductAttachmentStorageEventSubscriber | Subscribes to product attachment events and triggers storage updates. | | Spryker\Zed\ProductAttachmentStorage\Communication\Plugin\Event\Subscriber | +| ProductAbstractAttachmentSynchronizationDataPlugin | Provides product attachment storage data for synchronization. | | Spryker\Zed\ProductAttachmentStorage\Communication\Plugin\Synchronization | + +**src/Pyz/Zed/Event/EventDependencyProvider.php** + +```php +add(new ProductAttachmentStorageEventSubscriber()); + + return $eventSubscriberCollection; + } +} +``` + +**src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php** + +```php + + */ + protected function getSynchronizationDataStorePlugins(): array + { + return [ + new ProductAbstractAttachmentSynchronizationDataPlugin(), + ]; + } +} +``` + +Register the data import plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductAttachmentDataImportPlugin | Imports product attachment data from a CSV file. | | Spryker\Zed\ProductAttachment\Communication\Plugin\DataImport | + +**src/Pyz/Zed/DataImport/DataImportDependencyProvider.php** + +```php + + */ + protected function getDataImporterPlugins(): array + { + return [ + new ProductAttachmentDataImportPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/Console/ConsoleDependencyProvider.php** + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + return [ + new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . ProductAttachmentConfig::IMPORT_TYPE_PRODUCT_ATTACHMENT), + ]; + } +} +``` + +Register the product view expander plugin on the client side: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| ProductAttachmentProductViewExpanderPlugin | Expands the product view transfer with attachment data from storage. | | Spryker\Client\ProductAttachmentStorage\Plugin\ProductStorage | + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + return [ + new ProductAttachmentProductViewExpanderPlugin(), + ]; + } +} +``` + +## 4) Set up Yves templates + +Add the Downloads block to the product detail template. + +**src/Pyz/Yves/ProductDetailPage/Theme/default/views/pdp/pdp.twig** + +Pass the `attachments` variable to the product detail template: + +{% raw %} + +```twig +{% include molecule('product-detail', 'ProductDetailPage') with { + ... + data: { + ... + attachments: data.product.attachments | default([]), + }, +} only %} +``` + +{% endraw %} + +**src/Pyz/Yves/ProductDetailPage/Theme/default/components/molecules/product-detail/product-detail.twig** + +1. Add default attachments to data. + +{% raw %} + +```twig +{% define data = { + ... + attachments: [], +} %} +``` + +{% endraw %} + +2. Create attachment column block. + +{% raw %} + +```twig +{% block attachmentCol %} + {{ currentAttachment.label }} +{% endblock %} +``` + +{% endraw %} + +3. Adjust your code in the `block body`. + +{% raw %} + +```twig +{% if data.description or data.attachments is not empty %} {# Wrap attachments and description in condition #} +
    + {% if data.description %} + {# Put your description here #} + {% endif %} + + {# --- Add attachments block under the description --- #} + {% if data.attachments is not empty %} +

    {{ 'product.attachments.downloads' | trans }}

    + + {% set columns = [ + { + id: 'name', + title: 'product.attachments.name.col' | trans, + }, + { + id: 'actions', + type: 'actions', + title: 'product.attachments.download.col' | trans, + modifiers: ['align-center'], + }, + ] %} + + {% set rows = [] %} + {% for attachment in data.attachments %} + {% set currentAttachment = attachment %} + {% set rows = rows | merge([{ + name: block('attachmentCol'), + actions: [{ + iconModifier: 'big', + url: attachment.url, + title: 'self_service_portal.company_file.table.actions.download', + icon: 'download', + target: '_blank', + }], + }]) %} + {% endfor %} + + {% include molecule('advanced-table', 'SelfServicePortal') with { + class: 'js-pdp-section__target-attachments is-hidden-sm-md', + data: { + columns: columns, + rows: rows, + }, + qa: 'attachments-table', + } only %} + {% endif %} + {# --- End of the attachments block --- #} + +
    + {% endif %} +``` + +{% endraw %} + +{% info_block warningBox "Verification" %} + +Make sure that the **Downloads** section is displayed on the PDP for products that have attachments configured, and that it is hidden for products without attachments: + +1. In the Storefront, find a product that has attachments configured. +2. Open the product detail page (PDP). +3. Scroll to the **Downloads** section and verify that the configured attachments are listed there. + +{% endinfo_block %} + +## 5) Import glossary + +1. Add glossary keys for the Downloads section label in `glossary.csv`: + +```csv +product.attachments.downloads,Downloads,en_US +product.attachments.downloads,Downloads,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +## 7) Import product attachments data + +1. Prepare your data according to the following format: + File: data/import/common/common/product_attachment.csv + +```csv +abstract_sku,label,locale,attachment_url,sort_order +001,Product Manual,en_US,https://example.com/manual-en.pdf,1 +001,Produkthandbuch,de_DE,https://example.com/manual-de.pdf,1 +001,Safety Data Sheet,,https://example.com/safety.pdf,2 +``` + +| COLUMN | REQUIRED | DATA TYPE | DATA EXAMPLE | DATA EXPLANATION | +| --- | --- | --- | --- | --- | +| abstract_sku | ✓ | string | 001 | SKU of the abstract product. | +| label | ✓ | string | Product Manual | Display name of the attachment shown to customers. | +| locale | | string | en_US | Locale code for locale-specific attachments. Leave empty for default attachments that apply to all locales. | +| attachment_url | ✓ | string | `https://example.com/manual.pdf` | External URL of the attachment resource. | +| sort_order | ✓ | integer | 1 | Display order. Lower values are displayed first. | + +2. Update `data/import/local/full_EU.yml` and `data/import/local/full_US.yml` with + +```yaml +actions: + - data_entity: product-attachment + source: data/import/common/common/product_attachment.csv +``` + +3. Import data: + +```bash +console data:import product-attachment +``` + +{% info_block warningBox "Verification" %} + +Make sure that the product attachments are stored in the database and that they appear in the **Downloads** section on the PDP for the configured products: + +1. Check that the `spy_product_attachment` and `spy_product_attachment_product_abstract` database tables contain the imported records. +2. Check that the `spy_product_abstract_storage` table contains the attachment data for the imported products. +3. In the Back Office, go to **Catalog > Products**, click **Edit** next to an imported product, and open the **Media** tab. Make sure the attachments are listed in the **Product Attachments** section. +4. In the Storefront, open the PDP for an imported product and verify that the **Downloads** section lists the configured attachments. + +{% endinfo_block %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md new file mode 100644 index 00000000000..1df9e26b17c --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.md @@ -0,0 +1,28 @@ +--- +title: Install the Product Bundles + Cart feature +description: This guide provides step-by-step instructions on integrating Spryker Product Bundles + Cart feature into your Spryker based project. +last_updated: Jun 27, 2024 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-cart-feature-integration +originalArticleId: f069a875-5736-4134-a2c9-34a54b2dfdd0 +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html + - /2021080/docs/product-bundles-cart-feature-integration + - /2021080/docs/en/product-bundles-cart-feature-integration + - /docs/product-bundles-cart-feature-integration + - /docs/en/product-bundles-cart-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/product-bundles-cart-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/product-bundles-cart-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/product-bundles-cart-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/product-bundles-cart-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-cart-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html + - /docs/pbc/all/product-information-management/202505.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-cart-feature.html +related: + - title: "Install the Product Bundle + Cart Glue API" + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html + - title: Install the Cart feature + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md new file mode 100644 index 00000000000..e03fe95f3c4 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Product Bundles + Order Management feature +description: This guide provides step-by-step instructions on integrating Product Bundles + order management into your Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-order-management-feature-integration +originalArticleId: 23a61e2c-92d9-45a5-89e3-2c05ea71e5ea +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.html + - /2021080/docs/product-bundles-order-management-feature-integration + - /2021080/docs/en/product-bundles-order-management-feature-integration + - /docs/product-bundles-order-management-feature-integration + - /docs/en/product-bundles-order-management-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-order-management-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-order-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-order-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md new file mode 100644 index 00000000000..47a546ba3b1 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Product Bundles + Return Management feature +description: This guide provides step-by-step instructions on integrating Product Bundles + Return Management feature into your project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-bundles-return-management-feature-integration +originalArticleId: 96f9c6c2-df79-4d9c-b057-e96077e78e77 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.html + - /2021080/docs/product-bundles-return-management-feature-integration + - /2021080/docs/en/product-bundles-return-management-feature-integration + - /docs/product-bundles-return-management-feature-integration + - /docs/en/product-bundles-return-management-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/product-bundles-return-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/return-management-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-bundles-return-management-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-bundles-return-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-cart-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md new file mode 100644 index 00000000000..5a68eddcba7 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.md @@ -0,0 +1,26 @@ +--- +title: Product + Category feature integration +description: Learn how to install the product + category feature in to your Spryker Cloud Commerce OS project. +last_updated: Feb 20, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-category-feature-integration +originalArticleId: 9362908d-1cd0-4db9-91c1-fe11df43060c +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.html + - /2021080/docs/product-category-feature-integration + - /2021080/docs/en/product-category-feature-integration + - /docs/product-category-feature-integration + - /docs/en/product-category-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/product-category-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/product-category-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/product-category-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/product-category-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/product-category-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-category-feature.html +related: + - title: Install the Product feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-category-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-comparison-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-comparison-feature.md new file mode 100644 index 00000000000..617ea4db2bb --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-comparison-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Product Comparison feature +description: Learn how to install the Product comparison feature in to your Spryker Cloud Commerce OS based project. +last_updated: Oct 7, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-comparison-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-configuration-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature-dynamic-multistore.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature-dynamic-multistore.md new file mode 100644 index 00000000000..444519e07ed --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Install the Product feature + Dynamic Multistore +description: Learn how to install the Product feature + Dynamic Multistore in to your Spryker Cloud Commerce OS projects. +last_updated: Apr 25, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-dynamic-multistore-the-product-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature.md new file mode 100644 index 00000000000..04506a3a0dd --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-feature.md @@ -0,0 +1,38 @@ +--- +title: Install the Product feature +description: The guide describes the process of installing the Product Concrete Search Widget feature in your project. +last_updated: Sep 3, 2024 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-feature-integration +originalArticleId: 046fc4c0-dfce-488b-ad7e-8f58a5dbe3b1 +redirect_from: + - /2021080/docs/product-feature-integration + - /2021080/docs/en/product-feature-integration + - /docs/product-feature-integration + - /docs/en/product-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/product-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/product-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202307.0/product-feature-integration.html + - /docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-concrete-sku-filter-feature +related: + - title: Install the Product Glue API + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html + - title: Glue API - Product Image Sets feature integration + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html + - title: Install the Configurable Bundle feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-configurable-bundle-feature.html + - title: Product Lists feature integration + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.html + - title: Install the Prices feature + link: docs/pbc/all/price-management/page.version/base-shop/install-and-upgrade/install-features/install-the-prices-feature.html + - title: Install the Merchant Product Restrictions feature + link: docs/pbc/all/merchant-management/page.version/base-shop/install-and-upgrade/install-the-merchant-product-restrictions-feature.html + - title: Install the Product Images + Configurable Bundle feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.html + - title: Install the Product + Order Management feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.html + - title: Install the Product feature + link: docs/pbc/all/product-information-management/page.version/base-shop/install-and-upgrade/install-features/install-the-product-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-cart-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md new file mode 100644 index 00000000000..1294ead7059 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.md @@ -0,0 +1,18 @@ +--- +title: Install the Product group + Product Labels feature +description: Instructions to integrate Product group + Product labels feature into a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-group-product-labels-feature-integration +originalArticleId: d4867491-433c-4986-98a8-679d70abb507 +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html + - /2021080/docs/product-group-product-labels-feature-integration + - /2021080/docs/en/product-group-product-labels-feature-integration + - /docs/product-group-product-labels-feature-integration + - /docs/en/product-group-product-labels-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/product-group-product-labels-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-labels-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-labels-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-group-product-rating-and-reviews-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-groups-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-images-configurable-bundle-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-labels-promotions-and-discounts-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-catalog-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-lists-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-options-order-management-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-order-management-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-sets-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-category-management-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-cart-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-configurable-bundle-product-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md new file mode 100644 index 00000000000..133d555c501 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.md @@ -0,0 +1,19 @@ +--- +title: Install the Product Bundles Glue API +description: Learn how to integrate the Glue API - Product Bundles feature into a Spryker project. +last_updated: Jun 18, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-bundles-feature-integration +originalArticleId: 7512d512-55f0-4d75-a206-993fe4b3617b +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html + - /2021080/docs/glue-api-product-bundles-feature-integration + - /2021080/docs/en/glue-api-product-bundles-feature-integration + - /docs/glue-api-product-bundles-feature-integration + - /docs/en/glue-api-product-bundles-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-bundles-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-bundles-feature-integration.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-bundles-glue-api.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.md diff --git a/docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md new file mode 100644 index 00000000000..19cb077d4ae --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.md @@ -0,0 +1,10 @@ +--- +title: Replace the CodeItNow module with the BarcodeLaminas module +description: +template: module-migration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/replace-the-codeitnow-with-the-barcodelaminas-module.html +last_updated: Nov 21, 2023 +--- +{% include pbc/all/upgrade-modules/replace-the-codeitnow-with-the-barcodelaminas-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md similarity index 91% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md index 7f54de85ae7..81428c9b536 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-category originalArticleId: d1ec0074-7d45-4f72-96c1-3f59cb860e4e redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-module.html - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-category.html - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-category.html - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-category.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-template-migration-console-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-template-migration-console-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-template-migration-console-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-category-template-migration-console-module.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md similarity index 86% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md index e1ffcef5a4f..62e335a8b57 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-categorygui originalArticleId: 2c38692c-31e1-4d90-8a86-9b73487f02d5 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-categorygui.html - /docs/scos/dev/module-migration-guides/migration-guide-categorygui.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorygui-module.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md similarity index 86% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md index 88679d278ce..679de8f4d40 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-categorystorage originalArticleId: 170f9839-b247-4898-a0c1-967fc231f6b8 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-categorystorage.html - /docs/scos/dev/module-migration-guides/migration-guide-categorystorage.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorystorage-module.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundle-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundle-module.md new file mode 100644 index 00000000000..26c096e8ca2 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundle-module.md @@ -0,0 +1,17 @@ +--- +title: Migration guide - ConfigurableBundle +description: This guide contains module migration steps for the ConfigurableBundle module to the newer major version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-configurablebundle +originalArticleId: 1f6b6d4b-cc99-46eb-9078-2589782c2476 +redirect_from: + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-configurablebundle.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-configurablebundle.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-configurablebundle.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-configurablebundle.html + - /docs/scos/dev/module-migration-guides/migration-guide-configurablebundle.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundle-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-configurablebundle-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md similarity index 90% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md index 84f2381a229..feb0d0556eb 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-configurablebundlestorage originalArticleId: f980caac-ab97-4ab8-b6d9-37ab6b5c8e37 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-configurablebundlestorage-module.html - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-configurablebundlestorage.html - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-configurablebundlestorage.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-configurablebundlestorage.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md similarity index 90% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md index c5526a964f1..75259c22d0b 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-merchantrelationshipproductlistgui originalArticleId: 4aa4e522-7751-4929-9565-39208907e75c redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-merchantrelationshipproductlistgui-module.html - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-merchantrelationshipproductlistgui.html - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-merchantrelationshipproductlistgui.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-merchantrelationshipproductlistgui.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-product-module.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productavailabilitiesrestapi-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productavailabilitiesrestapi-module.md new file mode 100644 index 00000000000..d7bddc1acde --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productavailabilitiesrestapi-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductAvailabilitiesRestApi module +description: Use the guide to migrate to a new version of the ProductAvailabilitiesRestApi module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/productavailabilitiesrestapi-migration-guide +originalArticleId: 192ef615-640f-48af-aaf3-1b2891dc6570 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/201903.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/201907.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/202005.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/migration-guide-productavailabilitiesrestapi.html + - /docs/scos/dev/module-migration-guides/glue-api/migration-guide-productavailabilitiesrestapi.html + - /module_migration_guides/glue_api/productavailabilitiesrestapi-migration-guide.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productavailabilitiesrestapi-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-productavailabilitiesrestapi-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productbundle-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productbundle-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productbundle-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productbundle-module.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategoryfiltergui-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategoryfiltergui-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategoryfiltergui-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategoryfiltergui-module.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md similarity index 88% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md index 9a04404bd08..7471ff827fe 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productcategorystorage originalArticleId: c3c6404f-d1ac-45d4-873d-2975b7ac5e36 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productcategorystorage-module.html - /docs/migration-guide-productcategorystorage - /docs/en/migration-guide-productcategorystorage - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productcategorystorage.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md similarity index 84% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md index f1f15d838d9..9f746034426 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.md @@ -4,6 +4,7 @@ description: Learn how to upgrade from an older version to a newer one of the pr template: module-migration-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.html - /docs/scos/dev/module-migration-guides/202200.0/migration-guide-productconfiguration.html - /docs/scos/dev/module-migration-guides/migration-guide-productconfiguration.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguration-module.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md similarity index 83% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md index 3ab8869075e..533b68b04c2 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.md @@ -4,6 +4,7 @@ description: Learn how to upgrade the ProductConfigurationsPriceProductVolumesRe template: module-migration-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.html - /docs/scos/dev/module-migration-guides/202200.0/migration-guide-productconfigurationspriceproductvolumesrestapi.html - /docs/scos/dev/module-migration-guides/migration-guide-productconfigurationspriceproductvolumesrestapi.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationspriceproductvolumesrestapi-module.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md similarity index 83% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md index fb106a044bc..d6da9f59e8f 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.md @@ -4,6 +4,7 @@ description: Learn how to upgrade the ProductConfigurationsRestApi module to a n template: module-migration-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.html - /docs/scos/dev/module-migration-guides/202200.0/migration-guide-productconfigurationsrestapi.html - /docs/scos/dev/module-migration-guides/migration-guide-productconfigurationsrestapi.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationsrestapi-module.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md similarity index 83% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md index a69a7203e29..62291646399 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.md @@ -4,6 +4,7 @@ description: Learn how to upgrade the ProductConfigurationStorage module to a ne template: module-migration-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.html - /docs/scos/dev/module-migration-guides/202200.0/migration-guide-productconfigurationstorage.html - /docs/scos/dev/module-migration-guides/migration-guide-productconfigurationstorage.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationstorage-module.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md new file mode 100644 index 00000000000..b158087f1ee --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.md @@ -0,0 +1,10 @@ +--- +title: Upgrade the ProductConfigurationWidget module +description: Learn how to upgrade the ProductConfigurationWidget module to a newer version. +template: module-migration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfigurationwidget-module.html +last_updated: Nov 21, 2023 +--- +{% include pbc/all/upgrade-modules/upgrade-the-productconfigurationwidget-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md similarity index 83% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md index d4376c3964c..395c708478a 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.md @@ -4,6 +4,7 @@ description: Learn how to upgrade the ProductConfiguratorGatewayPage module to a template: module-migration-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.html - /docs/scos/dev/module-migration-guides/202200.0/migration-guide-productconfiguratorgatewaypage.html - /docs/scos/dev/module-migration-guides/migration-guide-productconfiguratorgatewaypage.html - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productconfiguratorgatewaypage-module.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdetailpage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdetailpage-module.md new file mode 100644 index 00000000000..12f7657945a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdetailpage-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductDetailPage module +description: Learn how to upgrade from an older version to a newer one of the product detail page module within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-details-page +originalArticleId: 2aeaefe3-9660-488c-8a17-2ec31390163a +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productdetailpage.html + - /docs/scos/dev/module-migration-guides/migration-guide-productdetailpage.html + - /module_migration_guides/mg-product-details-page.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdetailpage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productdetailpage-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdiscountconnector-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdiscountconnector-module.md new file mode 100644 index 00000000000..9591e3a3244 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdiscountconnector-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductDiscountConnector module +description: Use the guide to learn how to update the ProductDiscountConnector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-discount-connector +originalArticleId: f3f497ff-d99d-4f02-a03c-82cbab8cebae +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productdiscountconnector.html + - /docs/scos/dev/module-migration-guides/migration-guide-productdiscountconnector.html + - /module_migration_guides/mg-product-discount-connector.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productdiscountconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productdiscountconnector-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md similarity index 93% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md index b2428a65739..38766ff64cc 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-product-label originalArticleId: f991c2ea-e52b-42d0-89ab-2fc645f8ab69 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabel-module.html - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productlabel.html - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productlabel.html - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productlabel.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabeldiscountconnector-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabeldiscountconnector-module.md new file mode 100644 index 00000000000..11e95f0503a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabeldiscountconnector-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductLabelDiscountConnector module +description: Use the guide to learn how to update the ProductLabelDiscountConnector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-label-discount-connector +originalArticleId: 53c98a8a-e504-4443-9f44-1a7723b614ba +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlabeldiscountconnector.html + - /docs/scos/dev/module-migration-guides/migration-guide-productlabeldiscountconnector.html + - /module_migration_guides/mg-product-label-discount-connector.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabeldiscountconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productlabeldiscountconnector-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md similarity index 92% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md index d9bcb22f71b..0d892a9e819 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-product-label-gui originalArticleId: aa0f3904-286a-4b8c-a895-4cf1cdefd457 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelgui-module.html - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productlabelgui.html - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productlabelgui.html - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productlabelgui.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md new file mode 100644 index 00000000000..18b324d1752 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md @@ -0,0 +1,17 @@ +--- +title: Upgrade the ProductLabelSearch module +last_updated: Jun 16, 2021 +description: Learn how to upgrade from an older version to a newer one of the product label search module within your Spryker based project. +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productlabelsearch +originalArticleId: 9fca0eb4-da0d-471a-a805-66f3fbd32879 +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-productlabelsearch.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productlabelsearch-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md similarity index 87% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md index 3a1f0cb6b21..28bf22f8da8 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productlabelstorage originalArticleId: 2ef8ed0a-3efe-4244-9724-1addccd72226 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelstorage-module.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlabelstorage.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlabelstorage.html - /docs/scos/dev/module-migration-guides/migration-guide-productlabelstorage.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md similarity index 90% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md index 4ae27777211..584fe9de4bb 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-product-list-gui originalArticleId: 5cc810fe-c85d-40f2-984e-497580f71557 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistgui-module.html - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productlistgui.html - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlistgui.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlistgui.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmanagement-module.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunit-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunit-module.md new file mode 100644 index 00000000000..c118bfa7e40 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunit-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductMeasurementUnit module +description: Use the guide to migrate to a new version of the ProductMeasurementUnit module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-measurement-unit +originalArticleId: e9b40324-941f-424a-b1d6-d765054bea42 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productmeasurementunit.html + - /docs/scos/dev/module-migration-guides/migration-guide-productmeasurementunit.html + - /module_migration_guides/mg-product-measurement-unit.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunit-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productmeasurementunit-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunitwidget-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunitwidget-module.md new file mode 100644 index 00000000000..4d9a400c7b5 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunitwidget-module.md @@ -0,0 +1,20 @@ +--- +title: Upgrade the ProductMeasurementUnitWidget module +description: Use the guide to learn how to update the ProductMeasurementUnitWidget module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-measurement-unit-widget +originalArticleId: ca27930b-5caf-4029-8c1f-a3b682416ae3 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productmeasurementunitwidget.html + - /docs/scos/dev/module-migration-guides/migration-guide-productmeasurementunitwidget.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productmeasurementunitwidget-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productmeasurementunitwidget-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md similarity index 88% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md index d0edf0cf9e0..8ac1891a096 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productnew originalArticleId: 89798e9a-5600-4e1e-b252-70491bd3ad8e redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.html - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productnew.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productnew.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productnew.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md similarity index 91% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md index f372d00fcca..3fe9d37bbd2 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-product-option originalArticleId: ed0c6dbc-b739-4b12-b42d-54f89d6643c3 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoption-module.html - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productoption.html - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productoption.html - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productoption.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptioncartconnector-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptioncartconnector-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptioncartconnector-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptioncartconnector-module.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptiondiscountconnector-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptiondiscountconnector-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptiondiscountconnector-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptiondiscountconnector-module.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptionexporter-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptionexporter-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptionexporter-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productoptionexporter-module.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunit-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunit-module.md new file mode 100644 index 00000000000..ccfa4476f81 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunit-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductPackagingUnit module +description: Use the guide to learn how to update the ProductPackagingUnit module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-packaging-unit +originalArticleId: af8adbc0-1cfd-4134-ab20-402f2e5cf9a5 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productpackagingunit.html + - /docs/scos/dev/module-migration-guides/migration-guide-productpackagingunit.html + - /module_migration_guides/mg-product-packaging-unit.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunit-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productpackagingunit-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitdataimport-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitdataimport-module.md new file mode 100644 index 00000000000..cf276c89990 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitdataimport-module.md @@ -0,0 +1,17 @@ +--- +title: Upgrade the ProductPackagingUnitDataImport module +description: Use the guide to migrate to a new version of the ProductPackagingUnitDataImport module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-packaging-unit-data-import +originalArticleId: 73392c2e-2e31-4eb2-9b72-9e464ebb5af0 +redirect_from: + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productpackagingunitdataimport.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productpackagingunitdataimport.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productpackagingunitdataimport.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productpackagingunitdataimport.html + - /docs/scos/dev/module-migration-guides/migration-guide-productpackagingunitdataimport.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitdataimport-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productpackagingunitdataimport-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitstorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitstorage-module.md new file mode 100644 index 00000000000..9c23f0a3c50 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitstorage-module.md @@ -0,0 +1,20 @@ +--- +title: Upgrade the ProductPackagingUnitStorage module +description: Use the guide to migrate to a newer version of the ProductPackagingUnitStorage module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-packaging-unit-storage +originalArticleId: 1c3ca2bd-bec2-4090-bf25-13da1bb9eb06 +redirect_from: + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productpackagingunitstorage.html + - /docs/scos/dev/module-migration-guides/migration-guide-productpackagingunitstorage.html + - /module_migration_guides/mg-product-packaging-unit-storage.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitstorage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productpackagingunitstorage-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitwidget-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitwidget-module.md new file mode 100644 index 00000000000..abbf94fabac --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitwidget-module.md @@ -0,0 +1,20 @@ +--- +title: Upgrade the ProductPackagingUnitWidget module +description: Learn how to upgrade from an older version to a newer one of the product Packaging Unit widget within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-packaging-unit-widget +originalArticleId: c8ccd097-331d-462d-bae3-aca3c8541817 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productpackagingunitwidget.html + - /docs/scos/dev/module-migration-guides/migration-guide-productpackagingunitwidget.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpackagingunitwidget-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productpackagingunitwidget-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantity-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantity-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantity-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantity-module.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitydataimport-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitydataimport-module.md new file mode 100644 index 00000000000..6718ba06151 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitydataimport-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductQuantityDataImport module +description: Use the guide to learn how to update the ProductQuantityDataImport module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-quantity-data-import +originalArticleId: cf6f3759-1248-4b1a-aa27-f7cb01491e03 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productquantitydataimport.html + - /docs/scos/dev/module-migration-guides/migration-guide-productquantitydataimport.html + - /module_migration_guides/mg-product-quantity-data-import.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitydataimport-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productquantitydataimport-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitystorage-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitystorage-module.md new file mode 100644 index 00000000000..9765712278a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitystorage-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductQuantityStorage module +description: Learn how to upgrade from an older version to a newer one of the product quantity storage module within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-quantity-storage +originalArticleId: 41d929cb-b16c-4552-9284-9fb89f1c478e +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productquantitystorage.html + - /docs/scos/dev/module-migration-guides/migration-guide-productquantitystorage.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productquantitystorage-module.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productrelationstorage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productquantitystorage-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearch-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearch-module.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearch-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearch-module.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearchwidget-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearchwidget-module.md new file mode 100644 index 00000000000..7f67d1ab4ce --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearchwidget-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductSearchWidget module +description: Learn how to upgrade from an older version to a newer one of the product Search widget module within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-search-widget +originalArticleId: b8ce30c0-7052-4af4-b0c3-15779ca9f5a6 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productsearchwidget.html + - /docs/scos/dev/module-migration-guides/migration-guide-productsearchwidget.html + - /module_migration_guides/mg-product-search-widget.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsearchwidget-module.html + +--- +{% include pbc/all/upgrade-modules/upgrade-the-productsearchwidget-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productvalidity-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productvalidity-module.md new file mode 100644 index 00000000000..ae572ade7c6 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productvalidity-module.md @@ -0,0 +1,20 @@ +--- +title: Upgrade the ProductValidity module +description: Use the guide to learn how to update the ProductValidity module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-validity +originalArticleId: a904c5cc-ebe1-4dcf-9f6b-d3988b5262c9 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productvalidity.html + - /docs/scos/dev/module-migration-guides/migration-guide-productvalidity.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productvalidity-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productvalidity-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stock-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stock-module.md new file mode 100644 index 00000000000..dda73e1205d --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stock-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the Stock module +description: Learn how to upgrade from an older version to a newer one of the Spryker stock module within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-stock +originalArticleId: db69c706-8e18-404e-b86c-4f45f642ea17 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-stock.html + - /docs/scos/dev/module-migration-guides/migration-guide-stock.html + - /module_migration_guides/mg-stock.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stock-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-stock-module.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.md new file mode 100644 index 00000000000..0d9ed977764 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.md @@ -0,0 +1,19 @@ +--- +title: Upgrade the Touch module +description: Learn how to upgrade from an older version to a newer one of the Spryker touch module within your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-touch +originalArticleId: 5f6da726-fbc0-48b2-b1c4-ff4ad833db35 +redirect_from: + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-touch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-touch.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-touch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-touch-module.md %} diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md index faa6204ad38..7cc97dc6374 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.md @@ -6,10 +6,11 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-product-attributes originalArticleId: 1b1f5ddd-b2e3-4095-a1e0-abb9b298fd46 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/attributes/creating-product-attributes.html - /docs/scos/user/back-office-user-guides/202200.0/catalog/attributes/creating-product-attributes.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/creating-product-attributes.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/create-product-attributes.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/creating-product-attributes.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/create-product-attributes.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html related: - title: Product Attributes diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md index 7b37de006b8..5bf327a5ee0 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.md @@ -6,12 +6,13 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-attributes originalArticleId: 98bec018-82ee-4960-aed5-fc13ad8429d5 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.html - /2021080/docs/managing-attributes - /2021080/docs/en/managing-attributes - /docs/managing-attributes - /docs/en/managing-attributes - /docs/scos/user/back-office-user-guides/202200.0/catalog/attributes/managing-product-attributes.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/managing-product-attributes.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/attributes/managing-product-attributes.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/attributes/edit-product-attributes.html related: - title: Product Attributes diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md index a36dd77a1d1..6086cb2b352 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/assigning-products-to-categories originalArticleId: 4c14098e-c5c1-4f63-9957-202bca4a638a redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/assign-products-to-categories.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/category/assigning-products-to-categories.html - /docs/scos/user/back-office-user-guides/202200.0/catalog/category/assigning-products-to-categories.html - /docs/scos/user/back-office-user-guides/202311.0/catalog/category/assigning-products-to-categories.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/create-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/create-categories.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/create-categories.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/create-categories.md index dfcb40e7440..1097ba6cd64 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/create-categories.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/create-categories.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-categories originalArticleId: b0f46c55-2786-4ab2-acee-594502fff3e1 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/create-categories.html - /2021080/docs/creating-categories - /2021080/docs/en/creating-categories - /docs/creating-categories diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/delete-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/delete-categories.md similarity index 79% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/delete-categories.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/delete-categories.md index f1f1823c917..55aabe5e277 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/delete-categories.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/delete-categories.md @@ -4,9 +4,9 @@ description: Learn how to delete categories directly in the Spryker Cloud Commer last_updated: June 15, 2021 template: back-office-user-guide-template redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/categories/delete-categories.html + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/delete-categories.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/categories/delete-categories.html --- - To delete a category in the Back Office, follow the steps: 1. Go to **Catalog > Categories**. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/edit-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/edit-categories.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/edit-categories.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/edit-categories.md index a8c4759c574..1b89019305e 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/edit-categories.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/edit-categories.md @@ -6,9 +6,10 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-categories originalArticleId: 93beba2a-596a-46ca-8933-c88ad105d1c7 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/categories/edit-categories.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/category/managing-categories.html - /docs/scos/user/back-office-user-guides/202200.0/catalog/category/managing-categories.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/category/managing-categories.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/category/managing-categories.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/categories/edit-categories.html related: - title: Category Management feature overview @@ -33,7 +34,7 @@ This doc describes how to edit categories in the Back Office. - Next to the parent categories you want to deassign this category from, click **x**. 5. For **STORES**, do any of the following: - Select one or more stores. - - Next to the stores you want to remove this category from, click **x**. + - Next to the stores you want to remove this category from, click **x**. 6. Select a **TEMPLATE**. 7. Select or clear the following checkboxes: - ACTIVE diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/order-products-in-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/order-products-in-categories.md new file mode 100644 index 00000000000..41c88ee0e76 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/categories/order-products-in-categories.md @@ -0,0 +1,22 @@ +--- +title: Order products in categories +description: Learn how to order products in categories directly in the Spryker Cloud Commerce OS Back Office. +last_updated: June 15, 2021 +template: back-office-user-guide-template +redirect_from: +- /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/categories/order-products-in-categories.html +--- + +To order products in a category in the Back Office, follow the steps: + +1. Go to **Catalog > Categories**. + This opens the **Category** page. +2. Next to the category you want to order the products in, click **Actions > Assign Products**. + This opens the **Assign products to category** page. +3. On the **Products in this category** subtab, enter **ORDER** for needed products. +4. Click **Save**. + The page refreshes with a success message displayed. On the **Products in this category** subtab, the products are ordered per the updated **ORDER**. That's the order they will be displayed in on the Storefront. + +## Reference information: ORDER + +When a category is rendered on the Storefront, its products are ordered in the ascending order of their **ORDER**. The products with order value `0` go first. If there are multiple products with the same order value, they are ordered alphabetically based on their names. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md similarity index 93% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md index bdfc04ed604..37290b9b6cb 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-configurable-bundle-templates originalArticleId: f37b931d-e630-4db3-9ffb-b5e3fb100cad redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/create-configurable-bundle-templates.html - /2021080/docs/creating-configurable-bundle-templates - /2021080/docs/en/creating-configurable-bundle-templates - /docs/creating-configurable-bundle-templates diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md index 8f1fee02e12..39bc98ba8ae 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-configurable-bundle-templates originalArticleId: e3c4fbce-bd28-416d-9dd0-bca412689483 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-configurable-bundle-templates.html - /2021080/docs/managing-configurable-bundle-templates - /2021080/docs/en/managing-configurable-bundle-templates - /docs/managing-configurable-bundle-templates diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md similarity index 91% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md index cddce623d9c..20d47dfb164 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.md @@ -11,9 +11,9 @@ related: - title: Configurable Bundle feature overview link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/configurable-bundle-feature-overview.html redirect_from: -- /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.html + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/configurable-bundle-templates/edit-slots-in-configurable-bundle-templates.html --- - This document describes how to edit slots in configurable bundle templates in the Back Office. ## Prerequisites diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/manage-products-in-the-back-office.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/manage-products-in-the-back-office.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/manage-products-in-the-back-office.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/manage-products-in-the-back-office.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md index e7c14ff36c3..2f935db28be 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-product-labels originalArticleId: fddd9b4b-1aec-473d-922d-e56f7040ee2e redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/create-product-labels.html - /2021080/docs/creating-product-labels - /2021080/docs/en/creating-product-labels - /docs/creating-product-labels diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md index 4a491571864..7094e4d15da 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.md @@ -4,6 +4,7 @@ description: Learn how to edit product labels directly in the Spryker Cloud Comm template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.html - /docs/scos/user/back-office-user-guides/202311.0/merchandising/product-labels/edit-product-labels.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-labels/edit-product-labels.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/view-product-labels.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/view-product-labels.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-labels/view-product-labels.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-labels/view-product-labels.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/create-product-lists.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/create-product-lists.md new file mode 100644 index 00000000000..829012c80e3 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/create-product-lists.md @@ -0,0 +1,73 @@ +--- +title: Create product lists +description: Learn how to create product lists directly in the Spryker Cloud Commerce OS Back Office. +last_updated: June 22, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/creating-a-product-list +originalArticleId: e7682701-b572-4934-9422-2a95d31610a1 +redirect_from: + - /docs/scos/user/back-office-user-guides/202108.0/catalog/product-lists/creating-product-lists.html + - /docs/scos/user/back-office-user-guides/202200.0/catalog/product-lists/creating-product-lists.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-lists/creating-product-lists.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-lists/create-product-lists.html +--- + +This doc describes how to create product lists. Product lists are used to allow or deny companies access to products. + +## Prerequisites + +- If you want to assign categories to the product list, [create the categories](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/categories/create-categories.html). +- If you want to assign or import products for the product list, [create the products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html). + +## Create a product list + +1. Go to **Catalog > Product Lists**. +2. On the **Overview of Product Lists** page, click **Create a Product List**. +3. On the **Create a Product List** page, enter a **TITLE**. +4. Select a **TYPE**. +5. Click **Save**. + The page refreshes with a success message displayed. +6. Add products to the list using any of the following methods: + - [Assign categories to the product list](#assign-categories-to-the-product-list) + - [Assign products to the product list](#assign-products-to-the-product-list) + - [Import products for the product list](#import-products-for-the-product-list) + +### Reference information: Create product lists + +| ATTRIBUTE | DESCRIPTION | +|-|-| +| TITLE | Name that you will use for identifying the list in the Back Office. | +| TYPE | Defines whether a company will be able to see the products in the list. | + +## Assign categories to the product list + +1. Click the **Assign Categories** tab. +2. Enter and select one or more **CATEGORIES**. + The products from the selected categories will be added to the product list. +3. Click **Save**. + The page refreshes with a success message displayed. + +## Assign products to the product list + +1. Click the **Assign Products** tab. +2. On the **Select Products to assign** subtab, select the products you want to assign. +3. Select **Save**. + The page refreshes with the success message displayed. The assigned products are displayed in the **Products in this list** subtab. + +**Tips and tricks** +
    When assigning a lot of products at a time, it might be useful to double-check your selection in the **Products to be assigned** tab. + +## Import products for the product list + +1. Click the **Assign Products** tab. +2. Click **Choose File**. +3. Select the product list file to be uploaded. The file should contain the `product_list_key` and `concrete_sku` columns. +4. Click **Save**. + The page refreshes with the success message displayed. The assigned products are displayed in the **Products in this list** subtab. + + +## Next steps + +- Allow or deny the company access to the product list by [creating a new merchant relation](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/create-merchant-relations.html). +- Allow or deny the company access to the product list by [editing a merchant relation](/docs/pbc/all/merchant-management/{{page.version}}/base-shop/manage-in-the-back-office/edit-merchant-relations.html). +- [Edit product lists](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html). diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md index 7a9176fdc42..8c8e7a71a2c 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.md @@ -6,10 +6,11 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-product-lists originalArticleId: 18628b05-d26f-469a-a201-d74c1a235cf8 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/product-lists/managing-product-lists.html - /docs/scos/user/back-office-user-guides/202200.0/catalog/product-lists/managing-product-lists.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-lists/managing-product-lists.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-lists/managing-product-lists.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-lists/edit-product-lists.html --- This doc describes how to edit product lists in the Back Office. diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md new file mode 100644 index 00000000000..ffb1dfd7091 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/create-product-options.md @@ -0,0 +1,82 @@ +--- +title: Create product options +description: Learn how to create product options directly in the Spryker Cloud Commerce OS Back Office. +last_updated: June 25, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/creating-a-product-option +originalArticleId: 64e7486e-5904-4cc8-b336-c57dd13f9e14 +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/create-product-options.html + - /2021080/docs/creating-a-product-option + - /2021080/docs/en/creating-a-product-option + - /docs/creating-a-product-option + - /docs/en/creating-a-product-option + - /docs/scos/user/back-office-user-guides/202200.0/catalog/product-options/creating-product-options.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-options/creating-product-options.html + - /docs/scos/user/back-office-user-guides/202005.0/catalog/product-options/create-product-options.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-options/create-product-options.html +related: + - title: Product Options feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-options-feature-overview.html +--- + +This document describes how to create product options. Product options are additions to products, like warranty or gift wrapping. + +## Prerequisites + +- [Create a tax set](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html) to apply to the product options. +- Review the [reference information](#reference-information-create-product-options) before you start, or look up the necessary information as you go through the process. + +## Create product options + +1. Go to **Products > Product Options**. +2. On the **Product option list** page, click **Create product option**. +3. On the **Create product option** page, enter a **GROUP NAME TRANSLATION KEY**. +4. Select a **TAX SET**. +5. Enter an **OPTION NAME TRANSLATION KEY**. +6. Enter a **SKU**. +7. For **PRICES**, enter the needed prices for the option. +8. Optional: To add one more option, click **Add option** and repeat steps 5-7. +9. Repeat steps 5-8 until you add the needed options. +10. In the **Translation** section, enter a **GROUP NAME** per locale. +11. Enter an **OPTION NAME** for each option per locale. +12. Click **Next**. +13. On the **Products** tab, select one or more products to assign the option to. + The option will be displayed on the pages of the products. +14. Click **Save**. + The page refreshes with a success message displayed. +15. Optional: To display the options on the Storefront, click **Activate**. + The page refreshes with a success message displayed. + + +**Tips and tricks** +
    When assigning an option to a lot of products at a time, it might be useful to double-check your selection on the **Products to be assigned** subtab. + + + +## Reference information: Create product options + + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| GROUP NAME TRANSLATION KEY | Glossary key for the name of product option group. For example, `product.option.group.name.wrapping`. It will be used for identifying and translating the group name per locale. | +| TAX SET | Tax set to apply to the product options. To create one, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). | +| OPTION NAME TRANSLATION KEY | Glossary key for a product option. For example, `product.option.paper.wrapping`. It will be used for identifying and translating the option name per locale. | +| SKU | Unique identifier to assign to a product option. | +| PRICES | Gross and net prices per currency per locale to sell product options for. When a price is set to 0, the options is *free of charge*. | +| GROUP NAME | Name of the product option group that will be displayed on the Storefront. | +| OPTION NAME | Names of product options that will be displayed on the Storefront. | + + +### Reference information: Product options on the Storefront + +**Warranty** and **Insurance** are product option groups: + +![Product option example](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/product-option-example.png) + +Product options: +![Select an option](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/select-option-drop-down.png) + +## Next steps + +[Edit product options](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/product-options/edit-product-options.html) diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md index 5046e349d97..3bb422d49e3 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.md @@ -6,12 +6,13 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-product-options originalArticleId: 20dd9771-8cf2-4740-b74e-3326eceaf5c2 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.html - /2021080/docs/managing-product-options - /2021080/docs/en/managing-product-options - /docs/managing-product-options - /docs/en/managing-product-options - /docs/scos/user/back-office-user-guides/202200.0/catalog/product-options/managing-product-options.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-options/managing-product-options.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/product-options/managing-product-options.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/product-options/edit-product-options.html related: - title: Product Options feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/create-service-offerings-best-practices.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/create-service-offerings-best-practices.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/create-service-offerings-best-practices.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/create-service-offerings-best-practices.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md index ef2df8ed381..355515ef26d 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.md @@ -4,6 +4,7 @@ description: Learn how to assign product attributes to abstract products in the template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.html - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/assign-product-attributes-to-abstract-products-and-product-bundles.html related: @@ -21,7 +22,7 @@ By assigning a product attribute to an abstract product, you assign it to all it 1. Create the product attributes you want to add to the abstract product. For instructions, see [Create product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html). -2. Create the abstract product to assign the product attributes to. For instructions, see [Create abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). +2. Create the abstract product to assign the product attributes to. For instructions, see [Create abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). Review the [reference information](#reference-information-assign-product-attributes-to-abstract-products) before you start, or look up the necessary information as you go through the process. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md index 7a7e33c2993..187a466c129 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/creating-abstract-products-and-product-bundles originalArticleId: 41920cd2-8fea-4194-9ed3-bf19c1791649 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html - /2021080/docs/creating-abstract-products-and-product-bundles - /2021080/docs/en/creating-abstract-products-and-product-bundles - /docs/creating-abstract-products-and-product-bundles @@ -17,7 +18,7 @@ redirect_from: - /docs/scos/user/back-office-user-guides/202200.0/catalog/products/manage-abstract-products/create-abstract-products-and-product-bundles.html - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products/create-abstract-products-and-product-bundles.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/products/manage-abstract-products/create-abstract-products-and-product-bundles.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html - /docs/scos/user/back-office-user-guides/202108.0/catalog/products/manage-abstract-products/create-abstract-products-and-product-bundles.html - /docs/marketplace/user/back-office-user-guides/202204.0/catalog/products/abstract-products/creating-abstract-products.html related: @@ -107,7 +108,7 @@ The default prices are displayed in the online store as a current price, while t - To be able to add product variants after creating an abstract product, add at least one super attribute. -{% endinfo_block %} +{% endinfo_block %} On the **Variants** tab, depending on the product type, do one of the following: @@ -115,7 +116,7 @@ On the **Variants** tab, depending on the product type, do one of the following: - Abstract product: Define product variants as follows: 1. Select one or more super attributes to create product variants from. 2. In the field next to the super attribute you've selected, select one or more product attribute values. - 3. Repeat the previous step until you select at least one value for each selected super attribute. + 3. Repeat the previous step until you select at least one value for each selected super attribute. 4. Click **Next >** and follow [Define meta information](#optional-define-meta-information).
    diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md index 7a92929ea8c..14a1b35f38f 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.md @@ -6,12 +6,13 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/editing-abstract-products originalArticleId: 7fe58b05-5718-4851-8f90-4167d1df999d redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.html - /2021080/docs/editing-abstract-products - /2021080/docs/en/editing-abstract-products - /docs/editing-abstract-products - /docs/en/editing-abstract-products - /docs/scos/user/back-office-user-guides/202200.0/catalog/products/manage-abstract-products/editing-abstract-products.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products/editing-abstract-products.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-abstract-products/editing-abstract-products.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/edit-abstract-products-and-product-bundles.html related: - title: Managing Products diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md index 3d0c5e75dd2..025cc4036cc 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/adding-product-alternatives originalArticleId: 556eb518-e027-478e-a8cc-152d8e4b8dcb redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html - /2021080/docs/adding-product-alternatives - /2021080/docs/en/adding-product-alternatives - /docs/adding-product-alternatives diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md index 58a366db983..d7f16a3c7fa 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/assign-product-attributes-to-product-variants.md @@ -18,7 +18,7 @@ This document describes how to assign product attributes to product variants in ## Prerequisites 1. Create the product attributes you want to add to the product variant. For instructions, see [Create product attributes](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/attributes/create-product-attributes.html). -2. Create a product variant by [creating an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) or by [adding a product variant to an existing abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html). +2. Create a product variant by [creating an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) or by [adding a product variant to an existing abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html). 3. To start working with products, go to **Catalog > Products**. Review the [reference information](#reference-information-assign-product-attributes-to-product-variants) before you start, or look up the necessary information as you go through the process. diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md new file mode 100644 index 00000000000..389709eb123 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.md @@ -0,0 +1,141 @@ +--- +title: Creating product variants +description: Use the guide to configure a product variant, set a price and validity period, make it searchable on the website, and more +last_updated: Jul 30, 2021 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/creating-a-product-variant +originalArticleId: cb558d64-c3df-4acf-a149-3eac51f413c2 +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html + - /2021080/docs/creating-a-product-variant + - /2021080/docs/en/creating-a-product-variant + - /docs/creating-a-product-variant + - /docs/en/creating-a-product-variant + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-concrete-products/creating-product-variants.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-in-the-back-office/products/manage-product-variants/create-product-variants.html +related: + - title: Managing Products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-products.html + - title: Discontinuing Products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html + - title: Adding Product Alternatives + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html + - title: Product feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html +--- + +This topic describes how to add a product variant for an abstract product. + +## Prerequisites + +To create a product variant, navigate to **Catalog > Products** section. + +Review the reference information before you start, or look up the necessary information as you go through the process. + +## Creating a product variant + +To create a product variant: + +1. Next to the abstract product you want to create a variant for, select **Edit**. +2. On the *Edit Abstract* page, select **Add Variant**. +3. In the *General* tab, do the following: + 1. Define a **SKU**: + - Enter a **SKU**.
    OR + - Select **Autogenerate SKU**. + 2. Under *Super attributes*, define one or more super attributes: + - Select a value. + - Select **Use custom value** and, in the field the appears below, enter the value. + 3. Add product name and description and select **Searchable** if you want your product to be searchable by its name in the online store. + 4. **Optionally**: Enter **Valid From** and **Valid To** dates to specify when the product should go online in the web-shop. + 5. Go to the *Price & Stock* tab. +4. In the *Price & Tax* tab, set prices and taxes for products: + 1. To take the prices over from the abstract product, select **Use prices from abstract product**. + + {% info_block warningBox "Note" %} + + The merchant relation prices are inherited by Product Variants as well. + + {% endinfo_block %} + + 2. Otherwise, enter Original and eventually Default prices for the product for Gross and Net price modes. + 3. **B2B only:** In **Merchant Price Dimension**, select the merchant relationship to define a special price per merchant relation. See [Merchants](/docs/pbc/all/price-management/{{page.version}}/base-shop/merchant-custom-prices-feature-overview.html) for more information. + 4. Select **Quantity** for the product and then select **Never out of stock** if you want the product to never go out of stock. +5. **Optionally**: Click **Next** to go to the *Image* to add images for the product and define the image order. +6. **Optionally**: Click **Next** of select the *Assign bundled products* tab to create a bundles product. See [Creating and Managing Product Bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html) to know more. +7. Click **Save**. +The page is refreshed and you can see two additional tabs: *Discontinue* and*Product Alternatives*. See [Discontinuing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html) and [Adding product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html) to know more. + +{% info_block errorBox "Important" %} + +To make sure your product will be shown and searchable in your online store, we highly recommend you to go through the checklist in [HowTo - Make a Product Searchable and Shown on the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.html). + +{% endinfo_block %} + +### Reference information: Creating a product variant + +This section describes the attributes you enter and select when creating a product variant. + +#### General tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Store relation | Defines the store for which the product can be available.
    You can select multiple values. | **No**|**No**| +| SKU Prefix | A number that you assign to the product will help to track unique information related to that product. | **Yes**|**Display Only**| +| Autogenerate SKU | Allows the system to autogenerate the SKU once you click **Save**. | **Yes**|**No**| +| Super Attributes | This section is only available if you have added more than one super attribute and defined more than one value for it.
    For example, if you selected the **color** to be a super attribute and defined **green**, **white**, and **black**, you will see "**color**" in this section and a drop-down with the colors you defined.
    Only one value can be selected. |**Yes**|**No**| +| Name | The name of your product that will be displayed in the online store for your customers. | **Yes**|**Yes** | +| Description | The description of the product that your customer sees in the online store. | **Yes** |**Yes** | +| Searchable | A checkbox that defines if the concrete product can be searched via the Search function in the online store. If not selected, no values will be displayed when searching for this product. | **Yes** | **Yes**| +| Valid from
    Valid to | Defines the period of time when the product is in active state. The **Valid from** date triggers the activation, while the **Valid to** date triggers the deactivation. Either no dates can be selected, or both. |**Yes** |**Yes** | + + +#### Price & Stock tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Use prices from abstract product|Once the checkbox is selected, the prices from the abstract product are taken over.|**Yes**|**No**| +|Merchant Price Dimension|**B2B Only**
    The drop-down list that allows you to select a merchant relation and set up a specific price for a specific merchant.
    If the Default value is selected, the prices will be the same for everyone.
    The values available for selection derive from **Merchants > Merchant Relations**.
    Only one value can be selected.|**Yes**|**Yes**| +| Gross price
    Net price | The price value for gross and net mode.
    For concrete products, the prices are inherited from their abstract product and can be updated while editing the concrete product.|**Yes** |**Yes** | +|Default
    Original|Default prices are the prices your customers will pay, whereas original prices are the "previous prices" in case you want to display promotions. If you specify only a default price, it will be displayed just like a normal product price. However, if both prices are specified, the original one will appear crossed out in the shop.|**Yes**|**Yes**| +|Add Product Volume Price
    Edit Product Volume Price|Once selected, the Add volume price (Edit volume price) page opens. This option allows you to define specific prices for a specific quantity of products that a customer selects. Works only in case of Default prices.
    **Add Product Volume Price** appears only when the price for a currency was set up and saved.
    **Edit Product Volume Price** appears only what the volume price was already set up for a currency.|**No**|**Yes**| +|(Stock) Type|Display-only field that displays warehouses according to your store|**Yes**|**Yes**| +|(Stock) Quantity|The number of items available in the warehouse.|**Yes**|**Yes**| +|(Stock) Never out of stock|The check-box that once selected will make the product always available to be purchased.|**Yes**|**Yes**| + + +#### Image tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Image Set Name|The name of your image set.|**Yes**|**Yes**| +|Small|The link of the image that is going to be used in the product catalogs.|**Yes**|**Yes**| +|Large|The link to the image that is going to be used on the product details page.|**Yes**|**Yes**| +|Sort Order|If you add several images to an active image set, specify the order in which they are to be shown in the front end and back end using Sort Order fields. The order of images is defined by the order of entered numbers where the image set with sort order "0" is the first to be shown.|**Yes**|**Yes**| + + +#### Assign bundled products tab + +On this tab, you see a table with the concrete products that you can select to be included in a bundle of a specific variant. If you do need to create a bundle, do not select the values and skip the tab. + + +#### Discontinue tab + +Available on the Edit page only. +Once you select to discontinue the product, you can add a note about that on this tab. + + +#### Product Alternatives tab + +The only field available is **Add Product Alternative by Name or SKU**. Here it's enough to enter three characters of a product name or SKU to see the auto-suggested product list. From one to many values can be selected. If there is no need to set up an alternative product, you can skip this tab. + + +#### Scheduled Prices tab + +On this tab, you see a table with the scheduled prices imported via a CSV file. The following information is available: + +- Currency, store, net, and gross price values +- Start from (included) and Finish at (included) values that identify a period of time when a specific price is going to be set for a product automatically. + + +**What's next?** +
    Once you have set things up, you will most likely need to know what managing actions you can do with your products. See articles in the [Managing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-products.html) section. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md index ede62ea2f4d..a01958442f1 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/discontinuing-products originalArticleId: 9233e3f7-8568-4c3a-b8c2-3cd930ddb840 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html - /2021080/docs/discontinuing-products - /2021080/docs/en/discontinuing-products - /docs/discontinuing-products diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md index 180cc4b1fa4..0850a8a9033 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/editing-a-product-variant originalArticleId: b9119173-d733-4ffa-b93d-1f19d88a364c redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html - /2021080/docs/editing-a-product-variant - /2021080/docs/en/editing-a-product-variant - /docs/editing-a-product-variant diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-products.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-products.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-products.md index b2ab8202f3a..c7e5b882af0 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-products.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/products/manage-products.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-products originalArticleId: 9b2e066a-b1db-4a74-93ba-82d399ee18f8 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/products/manage-products.html - /2021080/docs/managing-products - /2021080/docs/en/managing-products - /docs/managing-products diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/view-product-barcodes.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/view-product-barcodes.md similarity index 92% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/view-product-barcodes.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/view-product-barcodes.md index f67541968e8..9eb02c89941 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/view-product-barcodes.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-in-the-back-office/view-product-barcodes.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/viewing-product-barcodes originalArticleId: e006621e-64fb-4d4d-8a33-c66c0afca275 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-in-the-back-office/view-product-barcodes.html - /2021080/docs/viewing-product-barcodes - /2021080/docs/en/viewing-product-barcodes - /docs/viewing-product-barcodes diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.md new file mode 100644 index 00000000000..871fc8d82bb --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.md @@ -0,0 +1,1963 @@ +--- +title: "Glue API: Retrieve abstract products" +description: Retrieve general information about abstract products and related resources. +last_updated: Jun 21, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-abstract-products +originalArticleId: 6ba1a21c-bbbe-4442-b7ce-81e921924b26 +redirect_from: + - /docs/scos/dev/glue-api-guides/202200.0/managing-products/abstract-products/retrieving-abstract-products.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-abstract-products.html + - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html +related: + - title: Retrieve abstract product availability + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html + - title: Retrieving abstract product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html + - title: Retrieving image sets of abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html + - title: Retrieving tax sets + link: docs/pbc/all/tax-management/page.version/base-shop/manage-using-glue-api/retrieve-tax-sets.html + - title: Product feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html +--- + +This endpoint allows retrieving general information about abstract products. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see the docs: +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) +- [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) + + + +## Retrieve an abstract product + +To retrieve general information about an abstract product, send the request: + +--- +`GET` **/abstract-products/*{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** + +--- + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** | SKU of an abstract product to get information for. | + +### Request + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • abstract-product-prices
    • concrete-products
    • product-labels
    • abstract-product-image-sets
    • abstract-product-availabilities
    • category-nodes
    • product-tax-sets
    • product-options
    • product-reviews
    • bundled-products
    | +| fields | Filters out the fields to be retrieved. | name, image, description | + +{% info_block infoBox "Included resources" %} + +To include `bundled products`, include `concrete-products` and `bundled-products` into the request. + +{% endinfo_block %} + +{% info_block warningBox "Performance" %} + +- For performance and bandwidth usage optimization, we recommend filtering out only the needed information using the `fields` string parameter. + +- If you include more resources, you can still use the `fields` string parameter to return only the needed fields. For example, `GET http://glue.mysprykershop.com/abstract-products/001?include=concrete-products&fields[abstract-products]=name,description&fields[concrete-products]=name,image`. + +{% endinfo_block %} + + +| REQUEST | USAGE | +|-------------------------------------------------------------------------------------------------------------------------| --- | +| `GET https://glue.mysprykershop.com/abstract-products/001` | Retrieve information about the abstract product with SKU `001`. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-image-sets` | Retrieve information about the abstract product with SKU `001` with its image sets. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-availabilities` | Retrieve information about the abstract product with SKU `001` with its availability. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `001` with its default prices. | +| `GET https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `093` with its prices. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=category-nodes` | Retrieve information about the abstract product with SKU `001` with the category nodes it belongs to. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=product-tax-sets` | Retrieve information about the abstract product with SKU `001` with its tax sets. | +| `GET http://glue.mysprykershop.com/abstract-products/001?include=product-labels` | Retrieve information about the abstract product with SKU `001` with its assigned product lables. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=concrete-products` | Retrieve information about the abstract product with SKU `001` with its concrete products. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=product-options` | Retrieve information about the abstract product with SKU `001` with its product options. | +| `GET https://glue.mysprykershop.com/abstract-products/035?include=product-reviews` | Retrieve information about the abstract product with SKU `001` with its product reviews. | +| `GET https://glue.mysprykershop.com/abstract-products/214?include=bundled-products,concrete-products,abstract-products` | Retrieve the abstract product with `SKU 214`, its concrete product bundle and the bundled products inside. Retrieve the abstract products that own the concrete product bundle and the concrete bundled products inside it. | + + +### Response + +
    +Response sample: retrieve information about an abstract product by SKU + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about an abstract product with the details about image sets + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-image-sets" + }, + "relationships": { + "abstract-product-image-sets": { + "data": [ + { + "type": "abstract-product-image-sets", + "id": "001" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-image-sets", + "id": "001", + "attributes": { + "imageSets": [ + { + "name": "default", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25904006-8438.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25904006-8438.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-image-sets" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about an abstract product with the details about product availability + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-availabilities" + }, + "relationships": { + "abstract-product-availabilities": { + "data": [ + { + "type": "abstract-product-availabilities", + "id": "001" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-availabilities", + "id": "001", + "attributes": { + "availability": true, + "quantity": "10.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" + } + } + ] +} +``` + +
    + +
    Response sample: retrieve information about an abstract product with the details about abstract product prices + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-prices" + }, + "relationships": { + "abstract-product-prices": { + "data": [ + { + "type": "abstract-product-prices", + "id": "001" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-prices", + "id": "001", + "attributes": { + "price": 9999, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9999, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 12564, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" + } + } + ] +} +``` + +
    + +
    Response sample: retrieve information about an abstract product with the details about the default and volume prices included + +```json +{ + "data": { + "type": "abstract-products", + "id": "093", + "attributes": { + "sku": "093", + "merchantReference": "MER000001", + "averageRating": 4.3, + "reviewCount": 4, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "superAttributes": { + "color": [ + "Silver" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "093_24495843" + ], + "super_attributes": { + "color": [ + "Silver" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/sony-smartwatch-3-93" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices" + }, + "relationships": { + "abstract-product-prices": { + "data": [ + { + "type": "abstract-product-prices", + "id": "093" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-prices", + "id": "093", + "attributes": { + "price": 24899, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 24899, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093/abstract-product-prices" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about an abstract product with the details about the category nodes + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=category-nodes" + }, + "relationships": { + "category-nodes": { + "data": [ + { + "type": "category-nodes", + "id": "4" + }, + { + "type": "category-nodes", + "id": "2" + } + ] + } + } + }, + "included": [ + { + "type": "category-nodes", + "id": "4", + "attributes": { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "order": 100, + "url": "/en/cameras-&-camcorders/digital-cameras", + "children": [], + "parents": [ + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "order": null, + "url": "/en", + "children": [], + "parents": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/4" + } + }, + { + "type": "category-nodes", + "id": "2", + "attributes": { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders", + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "order": 100, + "url": "/en/cameras-&-camcorders/digital-cameras", + "children": [], + "parents": [] + }, + { + "nodeId": 3, + "name": "Camcorders", + "metaTitle": "Camcorders", + "metaKeywords": "Camcorders", + "metaDescription": "Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders/camcorders", + "children": [], + "parents": [] + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "order": null, + "url": "/en", + "children": [], + "parents": [] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/2" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about an abstract product with the details about tax sets + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=product-tax-sets" + }, + "relationships": { + "product-tax-sets": { + "data": [ + { + "type": "product-tax-sets", + "id": "0e93b0d4-6d83-5fc1-ac1d-d6ae11690406" + } + ] + } + } + }, + "included": [ + { + "type": "product-tax-sets", + "id": "0e93b0d4-6d83-5fc1-ac1d-d6ae11690406", + "attributes": { + "name": "Entertainment Electronics", + "restTaxRates": [ + { + "name": "Austria Standard", + "rate": "20.00", + "country": "AT" + }, + { + "name": "Belgium Standard", + "rate": "21.00", + "country": "BE" + }, + { + "name": "Bulgaria Standard", + "rate": "20.00", + "country": "BG" + }, + { + "name": "Czech Republic Standard", + "rate": "21.00", + "country": "CZ" + }, + { + "name": "Denmark Standard", + "rate": "25.00", + "country": "DK" + }, + { + "name": "France Standard", + "rate": "20.00", + "country": "FR" + }, + { + "name": "Germany Standard", + "rate": "19.00", + "country": "DE" + }, + { + "name": "Hungary Standard", + "rate": "27.00", + "country": "HU" + }, + { + "name": "Italy Standard", + "rate": "22.00", + "country": "IT" + }, + { + "name": "Luxembourg Standard", + "rate": "17.00", + "country": "LU" + }, + { + "name": "Netherlands Standard", + "rate": "21.00", + "country": "NL" + }, + { + "name": "Poland Standard", + "rate": "23.00", + "country": "PL" + }, + { + "name": "Romania Standard", + "rate": "20.00", + "country": "RO" + }, + { + "name": "Slovakia Standard", + "rate": "20.00", + "country": "SK" + }, + { + "name": "Slovenia Standard", + "rate": "22.00", + "country": "SI" + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-tax-sets" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about an abstract product with the details about product labels included + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": {...}, + "links": {...}, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "3" + }, + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "3", + "attributes": { + "name": "Standard Label", + "isExclusive": false, + "position": 3, + "frontEndReference": "" + }, + "links": { + "self": "http://glue.mysprykershop.com/product-labels/3" + } + }, + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 5, + "frontEndReference": "highlight" + }, + "links": { + "self": "http://glue.mysprykershop.com/product-labels/5" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about an abstract product with the details about concrete products included + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=concrete-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about an abstract product with the details about product options included + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=product-options" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-options/OP_gift_wrapping" + } + } + ] +} +``` + +
    + + + +
    +Response sample: retrieve information about an abstract product with the details about product reviews + +```json +{ + "data": { + "type": "abstract-products", + "id": "035", + "attributes": { + "sku": "035", + "averageRating": 4.7, + "reviewCount": 3, + "name": "Canon PowerShot N", + "description": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creative images plus the original unaltered photo - capturing the same subject in a variety of artistic and surprising ways. The unique symmetrical, metal-bodied design is strikingly different with an ultra-modern minimalist style - small enough to keep in your pocket and stylish enough to take anywhere. HS System excels in low light allowing you to capture the real atmosphere of the moment without flash or a tripod. Advanced DIGIC 5 processing and a high-sensitivity 12.1 Megapixel CMOS sensor give excellent image quality in all situations.", + "attributes": { + "focus": "TTL", + "field_of_view": "100%", + "display": "LCD", + "sensor_type": "CMOS", + "brand": "Canon", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Silver" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "035_17360369" + ], + "super_attributes": { + "color": [ + "Silver" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon PowerShot N", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creat", + "attributeNames": { + "focus": "Focus", + "field_of_view": "Field of view", + "display": "Display", + "sensor_type": "Sensor type", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-powershot-n-35" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/035?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "29" + }, + { + "type": "product-reviews", + "id": "28" + }, + { + "type": "product-reviews", + "id": "30" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "29", + "attributes": { + "rating": 5, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/29" + } + }, + { + "type": "product-reviews", + "id": "28", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/28" + } + }, + { + "type": "product-reviews", + "id": "30", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/30" + } + } + ] +} +``` + +
    + + + +
    +Response sample: retrieve information about an abstract product with the details on items of the product bundle, concrete products + +```json +{ + "data": { + "type": "abstract-products", + "id": "214", + "attributes": { + "sku": "214", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products.", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "214_123" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + }, + "url": "/en/samsung-bundle-214" + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/abstract-products/214?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/214_123" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "214" + } + ] + }, + "bundled-products": { + "data": [ + { + "type": "bundled-products", + "id": "067_24241408" + }, + { + "type": "bundled-products", + "id": "110_19682159" + }, + { + "type": "bundled-products", + "id": "175_26935356" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "214", + "attributes": { + "sku": "214", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products.", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "214_123" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + }, + "url": "/en/samsung-bundle-214" + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/abstract-products/214?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "067", + "attributes": { + "sku": "067", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "superAttributes": { + "color": [ + "Gold" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "067_24241408" + ], + "super_attributes": { + "color": [ + "Gold" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-s5-mini-67" + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/abstract-products/067?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/067_24241408" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "067" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "110", + "attributes": { + "sku": "110", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "superAttributes": { + "color": [ + "Black" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "110_19682159" + ], + "super_attributes": { + "color": [ + "Black" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-gear-110" + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/abstract-products/110?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/110_19682159" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "110" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26564922", + "attributes": { + "sku": "175_26564922", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "16 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/175_26564922" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/175_26935356" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "175", + "attributes": { + "sku": "175", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "175_26564922", + "175_26935356" + ], + "super_attributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attribute_variants": { + "internal_storage_capacity:32 GB": { + "id_product_concrete": "175_26935356" + }, + "internal_storage_capacity:16 GB": { + "id_product_concrete": "175_26564922" + } + } + }, + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + }, + "url": "/en/samsung-galaxy-tab-a-sm-t550n-16-gb-175" + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/abstract-products/175?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + }, + { + "type": "concrete-products", + "id": "175_26564922" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.69.demo-spryker.com:80/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + } + ] + } + } + } + ] +} +``` + +
    + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-availabilities-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-reviews-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/abstract-product-image-sets-reponse-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/category-nodes-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-tax-sets-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +|-|-| +| 301 | Abstract product is not found. | +| 311 | Abstract product SKU is not specified. | diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md index 3f01004a130..8db4508ad71 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-image-sets-of-abstract-products originalArticleId: 823ef04b-e614-4022-a30f-6e2130d280d8 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-image-sets-of-abstract-products.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md index 873dd149dda..c9017e0220e 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-category-nodes originalArticleId: 1e544fa3-90d1-449f-8d32-54a18f9b2631 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html - /docs/scos/dev/glue-api-guides/202311.0/retrieving-categories/retrieving-category-nodes.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md index 130e9919459..dd2d095c7fd 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-category-trees originalArticleId: 058b2860-6041-49c4-8d02-dd236447c329 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html - /docs/scos/dev/glue-api-guides/202311.0/retrieving-categories/retrieving-category-trees.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.md new file mode 100644 index 00000000000..02d4aa13ea5 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.md @@ -0,0 +1,1664 @@ +--- +title: "Glue API: Retrieving concrete products" +description: Retrieve general information about concrete products using the Spryker Cloud Commerce OS GLUE API. +last_updated: Jun 21, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-concrete-products +originalArticleId: 4f36b42a-e2a2-46a1-be84-ae9f3b2a1a25 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-concrete-products.html + - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html +related: + - title: Retrieve concrete product availability + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html + - title: Retrieving concrete product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html + - title: Retrieving image sets of concrete products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html + - title: Retrieving sales units + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html + - title: Product Options feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-options-feature-overview.html +--- + +This endpoint allows retrieving general information about concrete products. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see the docs: +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Glue API: Measurement Units Feature Integration](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-image-sets-glue-api.html) +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/base-shop/install-and-upgrade/install-the-product-price-glue-api.html) +- [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) +- [Install the Product Rating and Reviews Glue API](/docs/pbc/all/ratings-reviews/{{page.version}}/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.html) + + +## Retrieve a concrete product + +To retrieve general information about a concrete product, send the request: + +--- +`GET` **/concrete-products/*{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get information for. | + +### Request + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • concrete-product-image-sets
    • concrete-product-availabilities
    • product-options
    • product-reviews
    • product-offers
    • concrete-product-prices
    • product-measurement-units
    • sales-units
    • product-labels
    • bundled-products
    | +| fields | Filters out the fields to be retrieved. | name, image, description | + +{% info_block warningBox "Performance" %} + +- For performance and bandwidth usage optimization, we recommend filtering out only the needed information using the `fields` string parameter. + +- If you include more resources, you can still use the `fields` string parameter to return only the needed fields. For example, `GET http://glue.mysprykershop.com/concrete-products/fish-1-1?include=sales-units&fields[concrete-products]=name,description&fields[sales-units]=conversion,precision`. + +{% endinfo_block %} + +| REQUEST | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/concrete-products/001_25904006` | Get information about the `001_25904006` product. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-image-sets` | Get information about the `001_25904006` product with its image sets. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-availabilities` | Get information about the `001_25904006` product with its availability. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices` | Get information about the `001_25904006` product with its [default prices](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html#default-and-original-prices-on-the-storefront). | +| `GET https://glue.mysprykershop.com/abstract-products/093_24495843?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `093_24495843` with its prices.) | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-options` | Get information about the `001_25904006` product with its product options. | +| `GET https://glue.mysprykershop.com/concrete-products/035_17360369?include=product-reviews` | Get information about the `001_25904006` product with its product reviews. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-offers` | Get information about the `001_25904006` product with its product offers. | +| `GET http://glue.mysprykershop.com/concrete-products/fish-1-1?include=sales-units,product-measurement-units` | Get information about the `fish-1-1` product with the information on its sales units and product measurement units included. | +| `GET http://glue.mysprykershop.com/concrete-products/001_25904006?include=product-labels` | Retrieve information about the `001_25904006` product with product labels included. | +| `GET https://glue.mysprykershop.com/concrete-products/214_123?include=bundled-products` | Retrieve the concrete product with SKU `214_123`. If it's a product bundle, retrieve the bundled products. | +| `GET https://glue.mysprykershop.com/concrete-products/214_123?include=bundled-products,concrete-products,abstract-products` | Retrieve the concrete product with SKU `214_123`. If it's a product bundle, retrieve the bundled products. Retrieve all the related concrete products and the abstract products owning them. | + +### Response + +
    +Response sample: retrieve information about a concrete product by SKU + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on the sales units and product measurement units + +```json +{ + "data": { + "type": "concrete-products", + "id": "cable-vga-1-1", + "attributes": { + "sku": "cable-vga-1-1", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "VGA cable (1.5m)", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": { + "packaging_unit": "Ring" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1?include=sales-units,product-measurement-units" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + }, + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "32" + } + ] + } + } + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "http://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "32", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/sales-units/32" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on product labels + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on the product image sets + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-image-sets" + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "type": "concrete-product-image-sets", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-image-sets", + "id": "001_25904006", + "attributes": { + "imageSets": [ + { + "name": "default", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25904006-8438.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25904006-8438.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-image-sets" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on product availability + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-availabilities" + }, + "relationships": { + "concrete-product-availabilities": { + "data": [ + { + "type": "concrete-product-availabilities", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-availabilities", + "id": "001_25904006", + "attributes": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } + } + ] +} +``` + +
    + +
    Response sample: retrieve information about a concrete product with the details on the default product prices + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices" + }, + "relationships": { + "concrete-product-prices": { + "data": [ + { + "type": "concrete-product-prices", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-prices", + "id": "001_25904006", + "attributes": { + "price": 9999, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9999, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 12564, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-prices" + } + } + ] +} +``` + +
    + +
    Response sample: retrieve information about a concrete product with the details on the default and volume prices + +```json +{ + "data": { + "type": "concrete-products", + "id": "093_24495843", + "attributes": { + "sku": "093_24495843", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "productAbstractSku": "093", + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/093_24495843?include=concrete-product-prices" + }, + "relationships": { + "concrete-product-prices": { + "data": [ + { + "type": "concrete-product-prices", + "id": "093_24495843" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-prices", + "id": "093_24495843", + "attributes": { + "price": 24899, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 24899, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/093_24495843/concrete-product-prices" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on the product options + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-options" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/product-options/OP_gift_wrapping" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on product reviews + +```json +{ + "data": { + "type": "concrete-products", + "id": "035_17360369", + "attributes": { + "sku": "035_17360369", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.7, + "reviewCount": 3, + "name": "Canon PowerShot N", + "description": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creative images plus the original unaltered photo - capturing the same subject in a variety of artistic and surprising ways. The unique symmetrical, metal-bodied design is strikingly different with an ultra-modern minimalist style - small enough to keep in your pocket and stylish enough to take anywhere. HS System excels in low light allowing you to capture the real atmosphere of the moment without flash or a tripod. Advanced DIGIC 5 processing and a high-sensitivity 12.1 Megapixel CMOS sensor give excellent image quality in all situations.", + "attributes": { + "focus": "TTL", + "field_of_view": "100%", + "display": "LCD", + "sensor_type": "CMOS", + "brand": "Canon", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot N", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creat", + "attributeNames": { + "focus": "Focus", + "field_of_view": "Field of view", + "display": "Display", + "sensor_type": "Sensor type", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/035_17360369?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "29" + }, + { + "type": "product-reviews", + "id": "28" + }, + { + "type": "product-reviews", + "id": "30" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "29", + "attributes": { + "rating": 5, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/29" + } + }, + { + "type": "product-reviews", + "id": "28", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/28" + } + }, + { + "type": "product-reviews", + "id": "30", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/30" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on the bundled products included + +```json +{ + "data": { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123?include=bundled-products" + }, + "relationships": { + "bundled-products": { + "data": [ + { + "type": "bundled-products", + "id": "067_24241408" + }, + { + "type": "bundled-products", + "id": "110_19682159" + }, + { + "type": "bundled-products", + "id": "175_26935356" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408?include=bundled-products" + } + }, + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159?include=bundled-products" + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356?include=bundled-products" + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about a concrete product with the detais on bundled products, concrete products, and abstract products + +```json +{ + "data": { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "214" + } + ] + }, + "bundled-products": { + "data": [ + { + "type": "bundled-products", + "id": "067_24241408" + }, + { + "type": "bundled-products", + "id": "110_19682159" + }, + { + "type": "bundled-products", + "id": "175_26935356" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-products", + "id": "214", + "attributes": { + "sku": "214", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products.", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "superAttributes": [], + "attributeMap": { + "product_concrete_ids": [ + "214_123" + ], + "super_attributes": [], + "attribute_variants": [] + }, + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + }, + "url": "/en/samsung-bundle-214" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/214" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "214_123" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "067", + "attributes": { + "sku": "067", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "superAttributes": { + "color": [ + "Gold" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "067_24241408" + ], + "super_attributes": { + "color": [ + "Gold" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-s5-mini-67" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/067" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "067" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "abstract-products", + "id": "110", + "attributes": { + "sku": "110", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "superAttributes": { + "color": [ + "Black" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "110_19682159" + ], + "super_attributes": { + "color": [ + "Black" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-gear-110" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/110" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "110" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "concrete-products", + "id": "175_26564922", + "attributes": { + "sku": "175_26564922", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "16 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26564922?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "175", + "attributes": { + "sku": "175", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "175_26564922", + "175_26935356" + ], + "super_attributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attribute_variants": { + "internal_storage_capacity:32 GB": { + "id_product_concrete": "175_26935356" + }, + "internal_storage_capacity:16 GB": { + "id_product_concrete": "175_26564922" + } + } + }, + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + }, + "url": "/en/samsung-galaxy-tab-a-sm-t550n-16-gb-175" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/175" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + }, + { + "type": "concrete-products", + "id": "175_26564922" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "concrete-products", + "id": "214_123", + "attributes": { + "sku": "214_123", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "214", + "name": "Samsung Bundle", + "description": "This is a unique product bundle featuring various Samsung products. Items in this bundle are 2 x Samsung Galaxy Tab A SM-T550N 32 GB, 3 x Samsung Galaxy Gear, and 1 x Samsung Galaxy S5 mini", + "attributes": { + "brand": "Samsung", + "bundled_product": "Yes" + }, + "superAttributesDefinition": [], + "metaTitle": "Samsung Bundle", + "metaKeywords": "Samsung,Smart Electronics, Bundle", + "metaDescription": "Ideal for extreme sports and outdoor enthusiasts Exmor R™ CMOS sensor with enhanced sensitivity always gets the shot: Mountain-biking downhill at breakneck", + "attributeNames": { + "brand": "Brand", + "bundled_product": "Bundled Product" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123?include=bundled-products,concrete-products,abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "214" + } + ] + }, + "bundled-products": { + "data": [ + { + "type": "bundled-products", + "id": "067_24241408" + }, + { + "type": "bundled-products", + "id": "110_19682159" + }, + { + "type": "bundled-products", + "id": "175_26935356" + } + ] + } + } + } + ] +} +``` + +
    + + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-availabilities-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-reviews-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-image-sets-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/sales-units-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-prices-response-attributes.md %} + + + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | +| 312 | Concrete product is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md index 0165c026925..e29ca882672 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-image-sets-of-concrete-products originalArticleId: 77585058-128f-4e20-a4c8-633b62dfabec redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-image-sets-of-concrete-products.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md index 995ac4b9fa0..de33fb7013f 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-sales-units originalArticleId: 4150363f-4c47-4e7c-b7e6-d1430ce864ba redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-sales-units.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-products.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-products.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-products.md index 3aab400aca4..9bb89cd0cd5 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-products.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-products.md @@ -8,7 +8,7 @@ redirect_from: - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-manage-products.html --- -This section contains the descriptions of the following endpoints used to manage products in Spryker Commerce OS: +This section contains the descriptions of the following endpoints used to manage products in Spryker Commerce OS: - Abstract products: - [Retrieving abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html) diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md new file mode 100644 index 00000000000..3ebda0b043a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.md @@ -0,0 +1,385 @@ +--- +title: "Glue API: Retrieve alternative products" +description: Learn how to find alternatives for discontinued products with Spryker Cloud Commerce OS Glue API. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-alternative-products +originalArticleId: b910a3a3-e499-4047-bb32-b96e00b94bcb +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/retrieving-alternative-products.html + - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-alternative-products.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-alternative-products.html +related: + - title: Retrieving related products + link: docs/pbc/all/product-relationship-management/page.version/glue-api-retrieve-related-products.html + - title: Alternative Products feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/alternative-products-feature-overview.html +--- + +The *Alternative Products* feature allows customers to find a substitute for a product that runs out of stock or is no longer available for other reasons. The feature is particularly useful when a certain product becomes discontinued. In this case, customers usually look for an up-to-date generation of the same product, and suggesting possible alternatives is crucial. For more details, see [Alternative Products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/alternative-products-feature-overview.html) and [Discontinued Products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/discontinued-products-overview.html). + +The Product Alternatives API provides access to alternative products via REST API requests. In particular, you can: + +- Find out whether a concrete product is discontinued. +- Retrieve a list of alternative products of a product. + +In your development, the endpoints help to: + +- Provide alternatives for a product that runs out or unavailable, for example, because of local restrictions. +- Provide alternatives if a product is discontinued. +- Make alternative products available to customers in their shopping list or suggestions area to make searching and comparing similar products easier. + + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Alternative Products Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-alternative-products-glue-api.html). + + +## Check if a product is discontinued + +Before suggesting an alternative product, check if a product is discontinued by [retrieving a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html#retrieve-a-concrete-product). + +{% info_block infoBox %} + +It is the responsibility of the client to identify if a product is unavailable and when to provide alternatives. The API only provides information on availability, discontinued status and possible alternatives. + +{% endinfo_block %} + +## Retrieve abstract alternative products + +To retrieve abstract alternative products, send the request: + +--- +`GET` **/concrete-products/*{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*/abstract-alternative-products** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get abstract alternative products of. | + + +### Request + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | product-labels | + + +| REQUEST | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/abstract-alternative-products` | Retrieve abstract product alternatives of the product with SKU `145_29885470`. | +| `GET http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/abstract-alternative-products?include=product-labels` | Retrieve general information about the abstract product with its assigned product labels included. | + +### Response + +
    +Response sample: retrieve abstract product alternatives of the product + +```json +{ + "data": [ + { + "type": "abstract-products", + "id": "cable-hdmi-1", + "attributes": { + "sku": "cable-hdmi-1", + "averageRating": null, + "reviewCount": 0, + "name": "HDMI cable", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": [], + "superAttributesDefinition": [], + "superAttributes": { + "packaging_unit": [ + "As long as you want", + "Ring" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "cable-hdmi-1-1", + "cable-hdmi-1-2" + ], + "super_attributes": { + "packaging_unit": [ + "As long as you want", + "Ring" + ] + }, + "attribute_variants": { + "packaging_unit:As long as you want": { + "id_product_concrete": "cable-hdmi-1-2" + }, + "packaging_unit:Ring": { + "id_product_concrete": "cable-hdmi-1-1" + } + } + }, + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + }, + "url": "/en/hdmi-cable-1" + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/cable-hdmi-1" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/abstract-alternative-products" + } +} +``` + +
    + + +
    +Response sample: retrieve abstract product alternatives of the product with the details on the product labels + +```json +{ + "data": [ + { + "type": "abstract-products", + "id": "cable-hdmi-1", + "attributes": { + "sku": "cable-hdmi-1", + "averageRating": null, + "reviewCount": 0, + "name": "HDMI cable", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": [], + "superAttributesDefinition": [], + "superAttributes": { + "packaging_unit": [ + "As long as you want", + "Ring" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "cable-hdmi-1-1", + "cable-hdmi-1-2" + ], + "super_attributes": { + "packaging_unit": [ + "As long as you want", + "Ring" + ] + }, + "attribute_variants": { + "packaging_unit:As long as you want": { + "id_product_concrete": "cable-hdmi-1-2" + }, + "packaging_unit:Ring": { + "id_product_concrete": "cable-hdmi-1-1" + } + } + }, + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + }, + "url": "/en/hdmi-cable-1" + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/cable-hdmi-1" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "3" + } + ] + } + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/abstract-alternative-products?include=product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "3", + "attributes": { + "name": "New product", + "isExclusive": false, + "position": 1, + "frontEndReference": null + }, + "links": { + "self": "http://glue.mysprykershop.com/product-labels/3" + } + } + ] +} +``` + +
    + + +## Retrieve concrete alternative products + +To retrieve concrete alternative products, send the request: + +--- +`GET`**/concrete-products/{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}/concrete-alternative-products** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get concrete alternative products of. | + +### Request + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | product-labels | + + +| REQUEST | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/concrete-alternative-products` | Retrieve concrete product alternatives of the product with SKU `145_29885470`. | +| `GET http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/concrete-alternative-products?include=product-labels` | Retrieve concrete product alternatives with the assigned product labels included. | + +### Response + +
    +Response sample: retrieve concrete product alternatives of the product + +```json +{ + "data": [ + { + "type": "concrete-products", + "id": "cable-hdmi-1-2", + "attributes": { + "sku": "cable-hdmi-1-2", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "HDMI cable as long as you want", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": { + "packaging_unit": "As long as you want" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-hdmi-1-2" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/concrete-alternative-products" + } +} +``` + +
    + + +
    +Response sample: retrieve concrete product alternatives of the product with the details on the product labels + +```json +{ + "data": [ + { + "type": "concrete-products", + "id": "cable-hdmi-1-2", + "attributes": { + "sku": "cable-hdmi-1-2", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "HDMI cable as long as you want", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": { + "packaging_unit": "As long as you want" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-hdmi-1-2" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "3" + } + ] + } + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/cable-vga-1-1/concrete-alternative-products?include=product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "3", + "attributes": { + "name": "New product", + "isExclusive": false, + "position": 1, + "frontEndReference": null + }, + "links": { + "self": "http://glue.mysprykershop.com/product-labels/3" + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | +| 312 | Concrete product is ID not specified. | + + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-bundled-products.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-bundled-products.md new file mode 100644 index 00000000000..5558f04457a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-bundled-products.md @@ -0,0 +1,816 @@ +--- +title: "Glue API: Retrieving bundled products" +description: Learn how to retrieve bundled products that are configured with your Spryker Cloud Commerce OS project by using Glue API. +last_updated: Jun 21, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-bundled-products +originalArticleId: f77455d1-e0ca-470c-a6f6-15a060ea2647 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/retrieving-bundled-products.html + - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-bundled-products.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-bundled-products.html +related: + - title: Product Bundles feature overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-bundles-feature-overview.html +--- + +This endpoint allows retrieving the products that belong to a bundle. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: + +- [Install the Product Bundles Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundles-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Cart Glue API](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-cart-glue-api.html) +- [Install the Product Bundle + Cart Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-bundle-cart-glue-api.html) + +## Retrieve bundled products + +To retrieve bundled products, send the request: + +*** +`GET` **/concrete-products/*{% raw %}{{{% endraw %}product_bundle_sku{% raw %}}}{% endraw %}*/bundled-products** +*** + + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}product_bundle_sku{% raw %}}}{% endraw %}*** | Unique identifier of the product bundle to retrieve bundled products of. | + +### Request + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | concrete-products, abstract-products | + +{% info_block infoBox "Included resources" %} + +To retrieve related abstract products, include both `concrete-products` and `abstract-products`. + +{% endinfo_block %} + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/concrete-products/214_123/bundled-products` | Retrieve bundled products of the product bundle with SKU `214_123`. | +| `GET https://glue.mysprykershop.com/concrete-products/214_123/bundled-products?include=concrete-products` |Retrieve bundled products of the product bundle with SKU `214_123` and detailed information about corresponding concrete products.| +| `GET https://glue.mysprykershop.com/concrete-products/214_123/bundled-products?include=concrete-products,abstract-products` |Retrieve bundled products of the product bundle with SKU `214_123` and detailed information about corresponding concrete and abstract products.| + +### Response + +
    +Response sample: retrieve bundled products of the product bundle + +```json +{ + "data": [ + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + } +} +``` + +
    + +
    +Response sample: retrieve bundled products of the product bundle with the details on the concrete products + +```json +{ + "data": [ + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products?include=concrete-products" + }, + "included": [ + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408" + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159" + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve bundled products of the product bundle with the details on the concrete and abstract products + +```json +{ + "data": [ + { + "type": "bundled-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "quantity": 1 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "quantity": 3 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "bundled-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "quantity": 2 + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/214_123/bundled-products?include=concrete-products,abstract-products" + }, + "included": [ + { + "type": "abstract-products", + "id": "067", + "attributes": { + "sku": "067", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go. ", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "superAttributes": { + "color": [ + "Gold" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "067_24241408" + ], + "super_attributes": { + "color": [ + "Gold" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-s5-mini-67" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/067" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "067_24241408" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "067_24241408", + "attributes": { + "sku": "067_24241408", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "067", + "name": "Samsung Galaxy S5 mini", + "description": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wide and vivid viewing experience, and its compact size provides users with additional comfort, allowing for easy operation with only one hand. Like the Galaxy S5, the Galaxy S5 mini features a unique perforated pattern on the back cover creating a modern and sleek look, along with a premium, soft touch grip. The Galaxy S5 mini enables users to enjoy the same flagship experience as the Galaxy S5 with innovative features including IP67 certification, Ultra Power Saving Mode, a heart rate monitor, fingerprint scanner, and connectivity with the latest Samsung wearable devices.The Galaxy S5 mini comes equipped with a powerful Quad Core 1.4 GHz processor and 1.5GM RAM for seamless multi-tasking, faster webpage loading, softer UI transition, and quick power up. The high-resolution 8MP camera delivers crisp and clear photos and videos, while the Galaxy S5 mini's support of LTE Category 4 provides users with ultra-fast downloads of movies and games on-the-go.", + "attributes": { + "display_diagonal": "44.8 in", + "themes": "Wallpapers", + "os_version": "4.4", + "internal_storage_capacity": "32 GB", + "brand": "Samsung", + "color": "Gold" + }, + "superAttributesDefinition": [ + "internal_storage_capacity", + "color" + ], + "metaTitle": "Samsung Galaxy S5 mini", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Galaxy S5 mini continues Samsung design legacy and flagship experience Outfitted with a 4.5-inch HD Super AMOLED display, the Galaxy S5 mini delivers a wid", + "attributeNames": { + "display_diagonal": "Display diagonal", + "themes": "Themes", + "os_version": "OS version", + "internal_storage_capacity": "Internal storage capacity", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/067_24241408" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "067" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "110", + "attributes": { + "sku": "110", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "superAttributes": { + "color": [ + "Black" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "110_19682159" + ], + "super_attributes": { + "color": [ + "Black" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/samsung-galaxy-gear-110" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/110" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "110_19682159" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "110_19682159", + "attributes": { + "sku": "110_19682159", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "110", + "name": "Samsung Galaxy Gear", + "description": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart technology you love and the functionality that you still need, and is the perfect companion to the new Galaxy Note 3.", + "attributes": { + "processor_frequency": "800 MHz", + "bluetooth_version": "4", + "weight": "25.9 oz", + "battery_life": "120 h", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "processor_frequency", + "color" + ], + "metaTitle": "Samsung Galaxy Gear", + "metaKeywords": "Samsung,Smart Electronics", + "metaDescription": "Voice Operation With Samsung's latest groundbreaking innovation, the Galaxy Gear, it's clear that time's up on the traditional watch. It features the smart", + "attributeNames": { + "processor_frequency": "Processor frequency", + "bluetooth_version": "Blootooth version", + "weight": "Weight", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/110_19682159" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "110" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26564922", + "attributes": { + "sku": "175_26564922", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "16 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26564922" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "175_26935356", + "attributes": { + "sku": "175_26935356", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "175", + "name": "Samsung Galaxy Tab A SM-T550N 32 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black", + "internal_storage_capacity": "32 GB" + }, + "superAttributesDefinition": [ + "color", + "internal_storage_capacity" + ], + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/175_26935356" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "175" + } + ] + } + } + }, + { + "type": "abstract-products", + "id": "175", + "attributes": { + "sku": "175", + "averageRating": null, + "reviewCount": 0, + "name": "Samsung Galaxy Tab A SM-T550N 16 GB", + "description": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through your photos while browsing online. Check social media and your social calendar at the same time. With Multi Window™ on the Galaxy Tab A, you can do more, faster. Kids Mode gives parents peace of mind while providing a colorful, engaging place for kids to play. Easily manage what your kids access and how long they spend using it, all while keeping your own documents private. Available for free from Samsung Galaxy Essentials™, Kids Mode keeps your content—and more importantly, your kids— safe and secure. Connecting your Samsung devices is easier than ever. With Samsung SideSync 3.0 and Quick Connect™, you can share content and work effortlessly between your Samsung tablet, smartphone and personal computer.", + "attributes": { + "digital_zoom": "4 x", + "video_recording_modes": "720p", + "display_technology": "PLS", + "brand": "Samsung", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "175_26564922", + "175_26935356" + ], + "super_attributes": { + "internal_storage_capacity": [ + "32 GB", + "16 GB" + ] + }, + "attribute_variants": { + "internal_storage_capacity:32 GB": { + "id_product_concrete": "175_26935356" + }, + "internal_storage_capacity:16 GB": { + "id_product_concrete": "175_26564922" + } + } + }, + "metaTitle": "Samsung Galaxy Tab A SM-T550N 16 GB", + "metaKeywords": "Samsung,Communication Electronics", + "metaDescription": "Do Two Things at Once Make the most out of your tablet time with advanced multitasking tools. Easily open two apps side by side so you can flip through you", + "attributeNames": { + "digital_zoom": "Digital zoom", + "video_recording_modes": "Video recording modes", + "display_technology": "Display technology", + "brand": "Brand", + "color": "Color", + "internal_storage_capacity": "Internal storage capacity" + }, + "url": "/en/samsung-galaxy-tab-a-sm-t550n-16-gb-175" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/175" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "175_26935356" + }, + { + "type": "concrete-products", + "id": "175_26564922" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/bundled-products-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | +| 312 | Concrete product is ID not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). + +## Other management options + +You can also manage the `bundled-products` resource as follows: +- [Retrieve bundled products of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html#retrieve-a-concrete-product) +- [Retrieve bundled products of an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html) +- [Manage bundled products in carts of registered users](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html#add-an-item-to-a-registered-users-cart) +- [Manage bundled products in guest carts](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-guest-carts/glue-api-manage-guest-cart-items.html#add-items-to-a-guest-cart) diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md index 0cbcc0ec0b8..7afeff147e4 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.md @@ -6,7 +6,8 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-configurable-bundle-templates originalArticleId: 7d42fcee-0edb-4f80-826c-988162b30119 redirect_from: - - /docs/scos/dev/glue-api-guides/202311.0/managing-products/retrieving-configurable-bundle-templates.html + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/retrieving-configurable-bundle-templates.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-configurable-bundle-templates.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md index ab6ec34bc7a..ffc9185e829 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-measurement-units originalArticleId: 21b908ed-07a9-44fa-b3a8-614401d4deab redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html - /docs/scos/dev/glue-api-guides/202311.0/retrieving-measurement-units.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-measurement-units.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md index f908d784a9d..edac6462531 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-product-attributes originalArticleId: 11708dbe-4c10-47db-8e40-d5cf23a8c3eb redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/retrieving-product-attributes.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-product-attributes.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-attributes.html diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md index 67924375a7d..1027fd021f5 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-product-labels originalArticleId: 70d36a7a-e701-427d-ae2a-e78ebde56ebe redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/retrieving-product-labels.html - /docs/pbc/all/product-information-management/202311.0/manage-using-glue-api/glue-api-retrieve-product-labels.html - /docs/pbc/all/product-information-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/akeneo-connector-eco-module-console-commands.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/akeneo-connector-eco-module-console-commands.md new file mode 100644 index 00000000000..55e18ca8dbf --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/akeneo-connector-eco-module-console-commands.md @@ -0,0 +1,87 @@ +--- +title: "Akeneo Connector (Eco module): Console commands" +description: This guide provides the console commands for the Akeneo connect eco module for your Spryker based project. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/akeneo-console-commands +originalArticleId: a332d6b7-14fa-4d8b-849b-f503d3de13ac +redirect_from: + - /2021080/docs/akeneo-console-commands + - /2021080/docs/en/akeneo-console-commands + - /docs/akeneo-console-commands + - /docs/en/akeneo-console-commands + - /docs/scos/dev/technology-partner-guides/202311.0/product-information-pimerp/akeneo/akeneo-console-commands.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/third-party-integrations/akeneo/akeneo-console-commands.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/third-party-integrations/akeneo/akeneo-connector-eco-module-console-commands.html +--- + +The following console commands are available in your project after successful [installation](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.html) of the Akeneo Connector Eco module. Run them one by one. + +1) Command to import super attributes: + +```bash +vendor/bin/console middleware:process:run -p SUPER_ATTRIBUTE_IMPORT_PROCESS -o data/import/maps/super_attribute_map.json +``` + +2) Command to prepare locale mapping: + +```bash +vendor/bin/console middleware:process:run -p LOCALE_MAP_IMPORT_PROCESS -o data/import/maps/locale_map.json +``` + +3) Command to prepare products attributes mapping: + +```bash +vendor/bin/console middleware:process:run -p ATTRIBUTE_MAP_PROCESS -o data/import/maps/attribute_map.json +``` + +4) Command to import categories: + +```bash +vendor/bin/console middleware:process:run -p DEFAULT_CATEGORY_IMPORT_PROCESS +``` + +5) Command to import products attributes: + +```bash +vendor/bin/console middleware:process:run -p ATTRIBUTE_IMPORT_PROCESS +``` + +6) Command to prepare product models data in local file: + +```bash +vendor/bin/console middleware:process:run -p PRODUCT_MODEL_PREPARATION_PROCESS -o data/import/maps/product_models.json +``` + +7) Command to import product model data (abstract products): + +```bash +vendor/bin/console middleware:process:run -p DEFAULT_PRODUCT_MODEL_IMPORT_PROCESS -i data/import/maps/product_models.json +``` + +8) Command to prepare products data in local file: + +```bash +vendor/bin/console middleware:process:run -p PRODUCT_PREPARATION_PROCESS -o data/import/maps/products.json +``` + +9) Command to import product data (concrete products): + +```bash +vendor/bin/console middleware:process:run -p DEFAULT_PRODUCT_IMPORT_PROCESS -i data/import/maps/products.json +``` + + + +On a project level, you can change `DefaultProductImportDictionary` instead of using the `EnrichAttributes` translator function or extending it. + +Price attributes (`pim_catalog_price_collection`), except the one with `attribute_key = 'price'`, are skipped. For correct import, products should contain an attribute with `attribute_type pim_catalog_price_collection` and `attribute_key 'price'`. diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/akeneo.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/akeneo.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/akeneo.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/akeneo.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md index ebb70a6f0f8..d505528cfbd 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/akeneo-installation-configuration originalArticleId: 6a718976-7056-4705-938d-8bb11243e918 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.html - /2021080/docs/akeneo-installation-configuration - /2021080/docs/en/akeneo-installation-configuration - /docs/akeneo-installation-configuration @@ -14,7 +15,7 @@ redirect_from: - /docs/scos/user/technology-partners/202311.0/product-information-pimerp/akeneo/akeneo-installation-and-configuration.html - /docs/scos/dev/technology-partner-guides/202204.0/product-information-pimerp/akeneo/installing-and-configuring-akeneo.html - /docs/scos/dev/technology-partner-guides/202311.0/product-information-pimerp/akeneo/installing-and-configuring-akeneo.html - - /docs/pbc/all/product-information-management/202311.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo.html + - /docs/pbc/all/product-information-management/202311.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo.html - /docs/pbc/all/product-information-management/202204.0/base-shop/third-party-integrations/akeneo/install-and-configure-akeneo-eco-module.html related: - title: Akeneo diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/censhare-pim.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/censhare-pim.md new file mode 100644 index 00000000000..81eb7cac78a --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/censhare-pim.md @@ -0,0 +1,34 @@ +--- +title: Censhare PIM +description: Learn about Spryker Third Party Integration Censhare PIM and how it can enhance your Spryker based project. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/censhare-pim +originalArticleId: 319e7b1f-4eb9-44ad-80cc-4ec191cc8e48 +redirect_from: + - /2021080/docs/censhare-pim + - /2021080/docs/en/censhare-pim + - /docs/censhare-pim + - /docs/en/censhare-pim + - /docs/scos/user/technology-partners/202311.0/product-information-pimerp/censhare-pim.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/third-party-integrations/censhare-pim.html +--- + +## Partner Information + +[ABOUT CENSHARE](https://www.censhare.com/) + +Our pioneering, universal content management platform lets you connect with your audiences on any channel, in any language, locally or globally. Expect complete control over all your content. Enjoy new freedom to create. Experience lower costs. And join Jaguar Land Rover, Dyson, Christie's, Lufthansa and hundreds more in delivering quality communications with exceptional efficiency. + +**Product Information Management (PIM)** – Manage and provide product data for efficient and accurate use across the business + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
    diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/contentserv.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/contentserv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/third-party-integrations/contentserv.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/contentserv.md diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/install-smart-product-management.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/install-smart-product-management.md new file mode 100644 index 00000000000..eb4fd752e79 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/install-smart-product-management.md @@ -0,0 +1,220 @@ +--- +title: Install Smart Product Management +description: Learn how to integrate the ProductManagementAi module into a Spryker project. +last_updated: Feb 19, 2026 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/base-shop/third-party-integrations/product-management-powered-by-openai/install-product-management-powered-by-openai.html +--- + +AI-powered product management adds the following functionality to the Back Office: +- Automates product categorization in the Back Office. +- Automates the translation of product information in the Back Office. +- Generates alt text for product images in the Back Office to improve accessibility and SEO. + + +This document describes how to install Smart Product Management. + +## Install feature core + +Follow the steps below to install the ProductManagementAi module core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|---------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| AiFoundation | {{page.release_tag}} | [Integrate AiFoundation](/docs/dg/dev/ai/ai-foundation/ai-foundation-module.html) | +| Product | {{page.release_tag}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Category Management | {{page.release_tag}} | [Install the Category Management feature](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-category-management-feature.html) | + +### 1) Install the required modules + +Install the required module: + +```bash +composer require spryker-eco/product-management-ai:"^0.3.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---------------------|------------------------------------------| +| ProductManagementAi | vendor/spryker-eco/product-management-ai | + +{% endinfo_block %} + +### 2) Set up database schema and transfer objects + +Apply database changes and generate transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure the following changes have been applied in the database: + +| DATABASE ENTITY | TYPE | EVENT | +|----------------------------|--------|---------| +| spy_product_image.alt_text | column | created | + +Make sure the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +|------------------------------|----------|---------|------------------------------------------------------------| +| AiTranslatorRequest | class | created | src/Generated/Shared/Transfer/AiTranslatorRequestTransfer | +| AiTranslatorResponseTransfer | class | created | src/Generated/Shared/Transfer/AiTranslatorResponseTransfer | +| ProductImage.altText | property | created | src/Generated/Shared/Transfer/ProductImageTransfer | +| ProductImageStorage.altText | property | created | src/Generated/Shared/Transfer/ProductImageStorageTransfer | +| ProductAbstract.categoryIds | property | created | src/Generated/Shared/Transfer/ProductAbstractTransfer | + +{% endinfo_block %} + +### 3) Set up behavior + +Enable the following behaviors by registering the plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------------------------------------|-----------------------------------------------------------------------------------|---------------|---------------------------------------------------------------------------| +| ProductCategoryProductAbstractPostCreatePlugin | Assigns categories to a product abstract after the product abstract is created. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\Product | +| ProductCategoryProductAbstractAfterUpdatePlugin | Assigns categories to a product abstract after the product abstract is updated. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\Product | +| ProductCategoryAbstractFormExpanderPlugin | Expands the `ProductAbstract` form with `categoryIds` field. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\ProductManagement | +| ImageAltTextProductConcreteEditFormExpanderPlugin | Expands the `ProductConcrete` edit form with the `alt_text` field. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\ProductManagement | +| ImageAltTextProductConcreteFormExpanderPlugin | Expands the `ProductConcrete` form with the `alt_text` field. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\ProductManagement | +| ImageAltTextProductAbstractFormExpanderPlugin | Expands the `ProductAbstract` form with the `alt_text` field. | | SprykerEco\Zed\ProductManagementAi\Communication\Plugin\ProductManagement | + + +
    + src/Pyz/Zed/Product/ProductDependencyProvider.php + +```php + + */ + protected function getProductAbstractPostCreatePlugins(): array + { + return [ + new ProductCategoryProductAbstractPostCreatePlugin(), + ]; + } + + /** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return array<\Spryker\Zed\Product\Dependency\Plugin\ProductAbstractPluginUpdateInterface> + */ + protected function getProductAbstractAfterUpdatePlugins(Container $container): array + { + return [ + new ProductCategoryProductAbstractAfterUpdatePlugin(), + ]; + } +} + +``` + +
    + + +
    + src/Pyz/Zed/ProductManagement/ProductManagementDependencyProvider.php + + +```php + + */ + protected function getProductConcreteEditFormExpanderPlugins(): array + { + return [ + new ImageAltTextProductConcreteEditFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductAbstractFormExpanderPluginInterface> + */ + protected function getProductAbstractFormExpanderPlugins(): array + { + return [ + new ProductCategoryAbstractFormExpanderPlugin(), + new ImageAltTextProductAbstractFormExpanderPlugin(), + ]; + } + + /** + * @return array<\Spryker\Zed\ProductManagementExtension\Dependency\Plugin\ProductConcreteFormExpanderPluginInterface> + */ + protected function getProductConcreteFormExpanderPlugins(): array + { + return [ + new ImageAltTextProductConcreteFormExpanderPlugin(), + ]; + } +} + +``` + +
    + +{% info_block warningBox "Verification" %} + +| PLUGIN | VERIFICATION | +| - | - | +| `ProductCategoryAbstractFormExpanderPlugin` | Edit and create abstract product forms contain `categoryIds` field. | +| `ProductCategoryProductAbstractAfterUpdatePlugin` | After updating an abstract product, the categories from `categoryIds` field are assigned to the corresponding abstract product. | +| `ProductCategoryProductAbstractPostCreatePlugin` | After creating an abstract product, the categories from `categoryIds` field are assigned to the corresponding abstract product. | +| `ImageAltTextProductAbstractFormExpanderPlugin` | The edit abstract product form contains the `alt_text` field for each image. After saving the form, the value is saved to the `spy_product_image.alt_text` database column. | +| `ImageAltTextProductConcreteEditFormExpanderPlugin` and `ImageAltTextProductConcreteEditFormExpanderPlugin` | The edit concrete product form contains the `alt_text` field for each image. After saving the form, the value is saved to the `spy_product_image.alt_text` database column. | + +{% endinfo_block %} + +## Install feature frontend + +1. Integrate the frontend part using the example integration in Demo Shops: +- [B2B integration PR](https://github.com/spryker-shop/b2b-demo-shop/pull/491/files) +- [B2C integration PR](https://github.com/spryker-shop/b2c-demo-shop/pull/544/files) +- [B2B-MP integration PR](https://github.com/spryker-shop/b2b-demo-marketplace/pull/438/files) +- [B2C-MP integration PR](https://github.com/spryker-shop/b2c-demo-marketplace/pull/422/files) + +2. Apply the frontend changes: + +```bash +npm install +console frontend:project:install-dependencies +console frontend:zed:build +``` + +{% info_block warningBox "Verification" %} + +In the Back Office, make sure that, on the product abstract create and update pages, and AI assistant icon is displayed next to `name`, `description`, `categories`, and `alt text` fields. + +{% endinfo_block %} diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/smart-product-management.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/smart-product-management.md new file mode 100644 index 00000000000..c95e770c538 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/smart-product-management/smart-product-management.md @@ -0,0 +1,114 @@ +--- +title: Smart Product Management +description: AI-powered product content management in the Back Office. Translate and improve product names and descriptions with AI assistance. +last_updated: Feb 23, 2026 +label: early-access +template: concept-topic-template +redirect_from: + - /docs/pbc/all/product-information-management/base-shop/third-party-integrations/product-management-powered-by-openai/product-management-powered-by-openai.html +--- + +Smart Product Management enables Back Office users to use AI assistance for product content management. AI can translate product information between locales and improve existing content for clarity, completeness, and quality. + +## Key capabilities + +- **Translate content**: Generate translations for product names and descriptions from any source locale into other configured locales +- **Improve content**: Enhance existing product descriptions for better clarity, completeness, and customer engagement +- **Review before apply**: All AI-generated content appears in the form for review before saving, preventing accidental overwrites + +## Supported fields + +AI assistance is available for: +- **Name** (abstract and concrete products) +- **Description** (abstract and concrete products) + +Translations and improvements appear directly in the product edit form, making it faster to manage product content. + + +Action Buttons in Back Office + +Action Buttons in Back Office + +## Translate content using AI + +AI can translate product names and descriptions from a source locale to any other configured locale: + +1. In the Back Office, go to **Catalog** > **Products**. +2. Click **Edit** next to a product to open **Edit Product Abstract** or **Edit Product Concrete** page. +3. Select the target locale you want to translate into. +4. Next to the **Name** or **Description** field, click the **AI translate** icon. +5. The AI generates a translation from the default locale (for example, en_US) and fills the target locale field. +6. Review the translated content for accuracy. +7. Click **Save** to apply the translation. + +AI-Translation How-To + +{% info_block warningBox "Review translations" %} + +Always review AI-generated translations for accuracy, tone, and context before saving. AI translations may require adjustments for technical terminology, brand voice, or cultural nuances. + +{% endinfo_block %} + +## Improve content using AI + +AI can enhance existing product descriptions to make them more complete, clear, and engaging: + +1. In the Back Office, go to **Catalog** > **Products**. +2. Click **Edit** next to a product to open **Edit Product Abstract** or **Edit Product Concrete** page. +3. Next to the **Description** field, click the **AI improve** icon. +4. The AI analyzes the current description and generates an improved version. +5. Review the improved content. +6. Click **Save** to apply the improvements, or manually edit further before saving. + +**What AI improves:** +- **Clarity**: Rewrites unclear or complex sentences +- **Completeness**: Adds relevant details that may be missing +- **Structure**: Organizes information logically +- **Engagement**: Enhances readability and appeal to customers + +{% info_block warningBox "Review improvements" %} + +AI-improved content maintains the core information but may change phrasing, structure, or emphasis. Always review to ensure the content aligns with your brand voice and technical accuracy requirements. + +{% endinfo_block %} + +## Install + +[Install Smart Product Management](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/third-party-integrations/smart-product-management/install-smart-product-management.html) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/xentral.md b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/xentral.md new file mode 100644 index 00000000000..b7b1e24be6b --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/third-party-integrations/xentral.md @@ -0,0 +1,42 @@ +--- +title: Xentral +description: Provide customers with ERP / CRM software that is configured according to individual requirements by integrating Xentral to the Spryker-based project. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/xentral +originalArticleId: 93da3b17-8b61-4638-82b0-f9fa1c051635 +redirect_from: + - /2021080/docs/xentral + - /2021080/docs/en/xentral + - /docs/xentral + - /docs/en/xentral + - /docs/scos/user/technology-partners/202200.0/product-information-pimerp/xentral.html + - /docs/scos/user/technology-partners/202311.0/product-information-pimerp/xentral.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/third-party-integrations/xentral.html +--- + +## Partner Information + +[ABOUT XENTRAL](https://xentral.com/en/) + +Xentral is a flexible ERP / CRM software that can be configured according to individual requirements. Xentral is available in four basic versions with different range of functions. The App-Store contains over 100 modules such as sales cockpit, automated warehouse management or major manufacturing programs that can be installed with just a few clicks. In addition, Xentral offers interfaces to all common online shop systems and marketplaces, shipping service providers, payment providers and much more. + +YOUR ADVANTAGES: +- Flexible ERP software in 4 basic versions +- Connected to our own Xentral App-Store +- More than 100 modules and interfaces can be installed with just a few clicks +- Xentral is based on open-source technologies: opportunity to develop own interfaces +- that can be connected to Xentral +- Xentral provides interfaces to all common online shop systems, shipping service +- providers, payment providers and more + +--- + +## Copyright and Disclaimer + +See [Disclaimer](https://github.com/spryker/spryker-documentation). + +--- +For further information on this partner and integration into Spryker, contact us. + +
    diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md index be25cb39ca6..c4f4f908da0 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/howto-display-product-groups-by-color-on-the-storefront originalArticleId: e963b2f2-a4bf-4c04-8ffc-ecb3610032e0 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.html - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-display-product-groups-by-color-on-the-storefront.html - /docs/pbc/all/product-information-management/202204.0/base-shop/tutorials-and-howtos/howto-display-product-groups-by-color-on-the-storefront.html --- diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md index acbbedb2964..9f0a0416f0f 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-integrate-and-use-precise-decimal-numbers originalArticleId: 05e89c8e-a944-46ff-b202-760c7c4d5f87 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-integrate-and-use-precise-decimal-numbers.html - /2021080/docs/ht-integrate-and-use-precise-decimal-numbers - /2021080/docs/en/ht-integrate-and-use-precise-decimal-numbers - /docs/ht-integrate-and-use-precise-decimal-numbers @@ -42,7 +43,7 @@ To install the `{% raw %}{{{% endraw %}decimal-object{% raw %}}}{% endraw %}` li ## How decimal numbers work with transfer objects -You can specify Decimal as a type of your Data Transfer Object's property. To define it, use the `decimal` type: +You can specify Decimal as a type of your Data Transfer Object's property. To define it, use the `decimal` type: ```xml diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md similarity index 94% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md index c1c8a9152fb..559e106d4d3 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.md @@ -5,6 +5,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/ht-manage-a-big-number-of-categories originalArticleId: 54f92b50-1aa0-44db-8a7c-b3eb4dbaa99c redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-manage-a-big-number-of-categories.html - /2021080/docs/ht-manage-a-big-number-of-categories - /2021080/docs/en/ht-manage-a-big-number-of-categories - /docs/ht-manage-a-big-number-of-categories diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md index 11ca6d6a3b8..6152a6bbf86 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/howto-rendering-configurable-bundles-in-the-storefront originalArticleId: 76baed14-c6f4-49df-a4e9-3aadc13cc3a6 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/howto-render-configurable-bundle-templates-in-the-storefront.html - /2021080/docs/howto-rendering-configurable-bundles-in-the-storefront - /2021080/docs/en/howto-rendering-configurable-bundles-in-the-storefront - /docs/howto-rendering-configurable-bundles-in-the-storefront diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/product-data-from-import-to-frontend-views.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/product-data-from-import-to-frontend-views.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/product-data-from-import-to-frontend-views.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/product-data-from-import-to-frontend-views.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/split-products-by-stores.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/split-products-by-stores.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/split-products-by-stores.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/split-products-by-stores.md index d21e167f780..5c41053e00d 100644 --- a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/split-products-by-stores.md +++ b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/split-products-by-stores.md @@ -307,7 +307,7 @@ class ConsoleDependencyProvider extends SprykerConsoleDependencyProvider { $commands = [ //core data importers - // ... + // ... new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP), new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_ROLE), new DataImportConsole(DataImportConsole::DEFAULT_NAME . static::COMMAND_SEPARATOR . AclDataImportConfig::IMPORT_TYPE_ACL_GROUP_ROLE), diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/tutorial-product-challenge-solution.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/tutorial-product-challenge-solution.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/tutorial-product-challenge-solution.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/tutorial-product-challenge-solution.md diff --git a/docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/tutorial-product.md b/docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/tutorial-product.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/base-shop/tutorials-and-howtos/tutorial-product.md rename to docs/pbc/all/product-information-management/202602.0/base-shop/tutorials-and-howtos/tutorial-product.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-merchant-portal-product-management-feature-domain-model-and-relationships.md b/docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-merchant-portal-product-management-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-merchant-portal-product-management-feature-domain-model-and-relationships.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-merchant-portal-product-management-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-approval-process-feature-domain-model-and-relationships.md b/docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-approval-process-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-approval-process-feature-domain-model-and-relationships.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-approval-process-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-feature-domain-model-and-relationships.md b/docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-feature-domain-model-and-relationships.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-options-feature-domain-model-and-relationships.md b/docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-options-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/domain-model-and-relationships/marketplace-product-options-feature-domain-model-and-relationships.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/domain-model-and-relationships/marketplace-product-options-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-approval-status-default.csv.md b/docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-approval-status-default.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-approval-status-default.csv.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-approval-status-default.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-option-group.csv.md b/docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-option-group.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product-option-group.csv.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product-option-group.csv.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product.csv.md b/docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product.csv.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/import-and-export-data/import-file-details-merchant-product.csv.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/import-and-export-data/import-file-details-merchant-product.csv.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-category-management-marketplace-merchant-commission.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-category-management-marketplace-merchant-commission.md new file mode 100644 index 00000000000..65e727d1e4c --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-category-management-marketplace-merchant-commission.md @@ -0,0 +1,8 @@ +--- +title: Install the Category Management + Marketplace Merchant Commission feature +last_updated: June 26, 2024 +description: Integrate the Category Management + Marketplace Merchant Commission feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-category-management-marketplace-merchant-commission.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-approval-process-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md new file mode 100644 index 00000000000..53b959d7889 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product + Cart feature +last_updated: Dec 16, 2020 +description: This document describes the process how to integrate the Marketplace Product + Cart feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-cart-feature.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-cart-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md new file mode 100644 index 00000000000..65397e7d27e --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Marketplace Product + Inventory Management feature +last_updated: Dec 07, 2020 +description: This document describes the process how to integrate the Marketplace Product + Inventory Management feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html + - /docs/marketplace/dev/feature-integration-guides/202200.0/marketplace-product-inventory-management-feature-integration.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-inventory-management-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-inventory-management-feature-integration.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-marketplace-product-offer-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-feature.md new file mode 100644 index 00000000000..b2c85b532c3 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product - Merchant Portal feature +last_updated: Jan 05, 2021 +description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Product feature walkthrough + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-inventory-management-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-inventory-management-feature.md new file mode 100644 index 00000000000..1bf208bd38f --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-inventory-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Product - Merchant Portal + Inventory Management feature +last_updated: Sep 13, 2021 +description: This document describes the process how to integrate the Merchant Portal - Marketplace Product + Inventory Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-tax-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-tax-feature.md new file mode 100644 index 00000000000..31195c3caad --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-merchant-portal-tax-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Product - Merchant Portal + Tax feature +last_updated: Jan 05, 2021 +description: Learn how to integrate the Merchant Portal - Marketplace Product + Tax feature into a Spryker marketplace project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-cart-feature.md diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-checkout-feature.md diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-merchant-portal-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-merchant-portal-feature.md new file mode 100644 index 00000000000..848b3d0abe7 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-options-merchant-portal-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product Options - Merchant Portal feature +description: This document describes the process how to integrate the Merchant Portal — Marketplace Product Options feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +related: + - title: Marketplace Product Options feature walkthrough + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-options-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-options-management-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..c77cc559ddd --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Product + Quick Add to Cart feature +last_updated: May 16, 2022 +description: This document describes the process how to integrate the Marketplace Product + Quick Add to Cart feature into a Spryker Marketplace based project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-quick-add-to-cart-feature.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-product-quick-add-to-cart-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-product-quick-add-to-cart-feature.md %} diff --git a/docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md similarity index 100% rename from docs/pbc/all/product-information-management/202507.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-portal-data-import-feature.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md new file mode 100644 index 00000000000..cc29c896fa1 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-merchant-product-data-import-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Merchant Portal Product Data Import feature +last_updated: Jul, 2025 +description: This document describes the process how to integrate the the Marketplace Merchant Portal Products Data Import feature into a Spryker Marketplace based project. That will allow merchants to do bulk import of their products from uploaded CSV files. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-product-data-import-feature.md %} diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-marketplace-merchant-commission-feature.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-marketplace-merchant-commission-feature.md new file mode 100644 index 00000000000..c57251a0dab --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-features/install-the-product-marketplace-merchant-commission-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Product + Marketplace Merchant Commission feature +last_updated: June 26, 2024 +description: Integrate the Product + Marketplace Merchant Commission feature into a Spryker marketplace based project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-product-marketplace-merchant-commission-feature.md %} diff --git a/docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202410.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-cart-glue-api.md diff --git a/docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md b/docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md similarity index 100% rename from docs/pbc/all/product-information-management/202404.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-glue-api.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-products-in-the-back-office.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-products-in-the-back-office.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-products-in-the-back-office.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-products-in-the-back-office.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md new file mode 100644 index 00000000000..f82471ed991 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/create-product-options.md @@ -0,0 +1,93 @@ +--- +title: Create product options +last_updated: Apr 21, 2021 +description: Use this procedure to create Marketplace Product Optionsgroups and values in the Back Office. +template: back-office-user-guide-template +redirect_from: + - /docs/marketplace/user/back-office-user-guides/202311.0/catalog/product-options/creating-product-options.html +related: + - title: Managing product options + link: docs/pbc/all/product-information-management/page.version/marketplace/manage-in-the-back-office/product-options/manage-product-options.html + - title: Marketplace Product Options feature overview + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-options-feature-overview.html +--- + +This document describes how to create Marketplace product options. + +## Prerequisites + +To start working with product options, go to **Catalog > Product Options**. + +There should be an existing tax set to apply it to the [product option group](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/marketplace-product-options-feature-overview.html). For detailed instructions about creating tax sets, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). + +Each section in this article contains reference information. Make sure to review it before you start, or look up the necessary information as you go through the process. + +## Creating a product option + +To create a product option, follow these steps: + +1. On the **Product option list** page, select **Create product option** in the top right corner. + This opens the with **General Information** and **Products** tabs. +2. On the **Create new Product Options** page, enter a **Group name translation key**. +3. Select a **Tax set**. +4. In the **Option Values** section, enter an **Option name translation key**. +5. Enter a **SKU** or proceed with the auto-generated one. +6. In the **Prices** section, enter **Gross price** and **Net price** for all the desired stores and currencies. +7. Optional: To add one more product options value, select **Add option**, and repeat step 5. +8. In the **Translation** section, enter **Group name** and **Option name** for all the locales. +9. To save the changes, select **Save**. + This refreshes the page with the success message displayed. +10. [Assign products to the product option](#assigning-products-to-a-product-option). + +### Tips and tricks + +- To remove an option value, next to the **Option name translation key** and **SKU** fields, click **Remove**. +- To copy a **Group name** or **Option name** from one locale to another, select the **Copy** icon next to the desired value. + +### Reference information: Creating a product option + +The following table describes the attributes you enter and select while creating a product option. + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| Group name translation key | Glossary key for the product option group. The format is `product.option.group.name.{your key}`. For example, `product.option.group.name.warranty`. | +| Tax Set | Conditions under which the product option group is to be taxed. To learn how to create tax sets, see [Create tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-sets.html). | +| Option name translation key | Glossary key for the product option value. The format is `product.option.{your key}`. For example, `product.option.warranty1`. | +| SKU | Unique identifier for the product option value. This value is autogenerated based on the **Option name translation key**, and you can adjust it per your requirements.| +| Gross price and Net price | Price values of the product option value for gross and net modes. Prices are integer values and, in the database, they are stored in their normalized form. For example, `4EUR` is stored as `400`. If you do not define a price for a product option value, it's considered *inactive* for that specific currency and price mode. If a price is `0`, it's considered *free of charge*.| +| Group name | Option group name that's displayed on the Storefront. | +| Option name | Option name that's displayed on the Storefront. | + + +## Assigning products to a product option + +To assign products to a product option, follow these steps: +1. On the **Edit product option** page, switch to the **Products** tab. +2. Select the desired products. +3. Select **Save**. + This refreshes the page with the success message displayed. + + + +{% info_block infoBox "Activating product options" %} + +To display the product option on the Storefront, in the top right corner of the page, activate it by selecting **Activate** . + +{% endinfo_block %} + +### Tips and tricks + +- To select all the products on the page, select **Deselect all on the page**. This is usually useful when you filter the products using the search field. +- After selecting products, you can view the products to be assigned on the **Products to be assigned** subtab. To unselect a product from being assigned, select **Remove** next to the desired product. + +## Product option examples on the Storefront + +On the following example, the Warranty and Insurance are the product option groups: +![Product option example](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/product-option-example.png) + +And the values available in the drop-down lists are the product options: +![Select an option](https://spryker.s3.eu-central-1.amazonaws.com/docs/User+Guides/Back+Office+User+Guides/Products/Products/Product+Options/Product+Options%3A+Reference+Information/select-option-drop-down.png) + +## Next steps + +[Managing product options](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/product-options/create-product-options.html) diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/manage-product-options.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/manage-product-options.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/manage-product-options.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/manage-product-options.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/product-options.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/product-options.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/product-options/product-options.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/product-options/product-options.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/abstract-products.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/abstract-products.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md index bcd5d24555d..e869bc76f0e 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/create-abstract-products.md @@ -94,7 +94,7 @@ On the **Variants** tab, define product variants: 1. Select one or more super attributes that define your product variants. 2. In the field next to the super attribute you've selected, select one or more product attribute values. -3. Repeat the previous step until you select at least one value for each selected super attribute. +3. Repeat the previous step until you select at least one value for each selected super attribute. 4. Select **Save** and follow [Defining meta information](#defining-meta-information). The page refreshes with the created product variants displayed in the table. diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/edit-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/edit-abstract-products.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/abstract-products/edit-abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/abstract-products/edit-abstract-products.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/create-product-variants.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/create-product-variants.md new file mode 100644 index 00000000000..5cb052acbd2 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/create-product-variants.md @@ -0,0 +1,118 @@ +--- +title: Create product variants +last_updated: Jul 27, 2021 +description: This guide explains how to create product variants in your Spryker Marketplace based projects. +template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/create-product-variants.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/products/manage-concrete-products/creating-product-variants.html +related: + - title: Managing products + link: docs/pbc/all/product-information-management/page.version/marketplace/manage-in-the-back-office/products/manage-products.html + - title: Editing product variants + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-in-the-back-office/products/manage-product-variants/edit-product-variants.html + - title: Marketplace Product feature overview + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html +--- + +This document describes how to add a product variant for an abstract product. + +## Prerequisites + +To create a product variant, navigate to **Catalog > Products** section. + +Review the reference information before you start, or look up the necessary information as you go through the process. + +## Creating a product variant + +To create a product variant: + +1. Next to the abstract product you want to create a variant for, select **Edit**. +2. On the **Edit Abstract** page, select **Add Variant**. +3. On the **General** tab, do the following: + 1. Define a **SKU**: + - Enter a **SKU**.
    OR + - Select **Autogenerate SKU**. + 2. Under **Super attributes**, define one or more super attributes: + - Select a value. + - Select **Use custom value** and, in the field the appears below, enter the value. + 3. Add product name and description and select **Searchable** if you want your product to be searchable by its name in the online store. + 4. Optional: Enter **Valid From** and **Valid To** dates to specify when the product should go online in the web-shop. + 5. Go to the **Price & Stock** tab. +4. On the **Price & Tax** tab, set prices and taxes for products: + 1. To take the prices over from the abstract product, select **Use prices from abstract product**. + + {% info_block warningBox "Note" %} + + The merchant relation prices are inherited by Product Variants as well. + + {% endinfo_block %} + + 2. Otherwise, enter Original and eventually Default prices for the product for Gross and Net price modes. + 3. **B2B only:** In **Merchant Price Dimension**, select the merchant relationship to define a special price per merchant relation. + 4. Select **Quantity** for the product and then select **Never out of stock** if you want the product to never go out of stock. +5. Optional: Click **Next** to go to **Image** to add images for the product and define the image order. +6. Optional: Click **Next** of select the **Assign bundled products** tab to create a bundles product. For more information, see [Creating and managing product bundles](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-abstract-products-and-product-bundles/create-abstract-products-and-product-bundles.html). +7. Click **Save**. +The page is refreshed and you can see two additional tabs: *Discontinue* and *Product Alternatives*. See [Discontinuing products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/discontinue-products.html) and [Adding product alternatives](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-in-the-back-office/products/manage-product-variants/add-product-alternatives.html) to know more. + +{% info_block errorBox "Important" %} + +To make sure your product will be shown and searchable in your online store, we highly recommend you to go through the checklist in [HowTo - Make a Product Searchable and Shown on the Storefront](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/tutorials-and-howtos/make-products-searchable-and-shown-on-the-storefront.html). + +{% endinfo_block %} + +### Reference information: Creating a product variant + +This section describes the attributes you enter and select when creating a product variant. + +#### General tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Store relation | Defines the store for which the product can be available.
    You can select multiple values. | **No**|**No**| +| SKU Prefix | A number that you assign to the product will help to track unique information related to that product. | **Yes**|**Display Only**| +| Autogenerate SKU | Allows the system to autogenerate the SKU once you click **Save**. | **Yes**|**No**| +| Super Attributes | This section is only available if you have added more than one super attribute and defined more than one value for it.
    For example, if you selected the **color** to be a super attribute and defined **green**, **white**, and **black**, you will see "**color**" in this section and a drop-down with the colors you defined.
    Only one value can be selected. |**Yes**|**No**| +| Name | The name of your product that will be displayed in the online store for your customers. | **Yes**|**Yes** | +| Description | The description of the product that your customer sees in the online store. | **Yes** |**Yes** | +| Searchable | A checkbox that defines if the concrete product can be searched via the Search function in the online store. If not selected, no values will be displayed when searching for this product. | **Yes** | **Yes**| +| Valid from
    Valid to | Defines the period of time when the product is in active state. The **Valid from** date triggers the activation, while the **Valid to** date triggers the deactivation. Either no dates can be selected, or both. |**Yes** |**Yes** | + + +#### Price & Stock tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Use prices from abstract product|Once the checkbox is selected, the prices from the abstract product are taken over.|**Yes**|**No**| +|Merchant Price Dimension|**B2B Only**
    The drop-down list that lets you select a merchant relation and set up a specific price for a specific merchant.
    If the Default value is selected, the prices will be the same for everyone.
    The values available for selection derive from **Merchants > Merchant Relations**.
    Only one value can be selected.|**Yes**|**Yes**| +| Gross price
    Net price | The price value for gross and net mode.
    For concrete products, the prices are inherited from their abstract product and can be updated while editing the concrete product.|**Yes** |**Yes** | +|Default
    Original|Default prices are the prices your customers will pay, whereas original prices are the "previous prices" in case you want to display promotions. If you specify only a default price, it will be displayed just like a normal product price. However, if both prices are specified, the original one will appear crossed out in the shop.|**Yes**|**Yes**| +|Add Product Volume Price
    Edit Product Volume Price|Once selected, the Add volume price (Edit volume price) page opens. This option lets you define specific prices for a specific quantity of products that a customer selects. Works only in case of Default prices.
    **Add Product Volume Price** appears only when the price for a currency was set up and saved.
    **Edit Product Volume Price** appears only what the volume price was already set up for a currency.|**No**|**Yes**| +|(Stock) Type|Display-only field that displays warehouses according to your store|**Yes**|**Yes**| +|(Stock) Quantity|The number of items available in the warehouse.|**Yes**|**Yes**| +|(Stock) Never out of stock|The checkbox that once selected will make the product always available to be purchased.|**Yes**|**Yes**| + + +#### Image tab + +| ATTRIBUTE |DESCRIPTION | CREATE CONCRETE PRODUCT | UPDATE CONCRETE PRODUCT| +| --- | --- | --- | --- | +|Image Set Name|The name of your image set.|**Yes**|**Yes**| +|Small|The link of the image that is going to be used in the product catalogs.|**Yes**|**Yes**| +|Large|The link to the image that is going to be used on the product details page.|**Yes**|**Yes**| +|Sort Order|If you add several images to an active image set, specify the order in which they are to be shown in the frontend and backend using Sort Order fields. The order of images is defined by the order of entered numbers where the image set with sort order "0" is the first to be shown.|**Yes**|**Yes**| + +#### Discontinue tab + +Available on the Edit page only. +Once you select to discontinue the product, you can add a note about that on this tab. + + +#### Product Alternatives tab + +The only field available is **Add Product Alternative by Name or SKU**. Here it's enough to enter three characters of a product name or SKU to see the autosuggested product list. From one to many values can be selected. If there is no need to set up an alternative product, you can skip this tab. + +**What's next?** + +Once you have set things up, you will most likely need to know what managing actions you can do with your products. See articles in the [Managing products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-back-office/products/manage-products.html) section. diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/manage-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/manage-products.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/manage-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/manage-products.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/products.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-back-office/products/products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-back-office/products/products.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md index 5cab5a7f861..5c8f148a4f5 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.md @@ -4,6 +4,7 @@ last_updated: May 05, 2022 description: This document describes how to create marketplace abstract products in the Merchant Portal. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/creating-marketplace-abstract-product.html related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md index c0a3e7ac6dc..b0a89063fcb 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.md @@ -4,6 +4,7 @@ last_updated: Aug 11, 2021 description: This document describes how to manage marketplace abstract product attributes in the Merchant Portal. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/managing-marketplace-abstract-product-attributes.html related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md index 4dc9a975740..5d1a5629342 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.md @@ -4,6 +4,7 @@ last_updated: Aug 11, 2021 description: This document describes how to manage marketplace abstract product image sets in the Merchant Portal. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/managing-marketplace-abstract-product-image-sets.html related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md similarity index 93% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md index 5bc239cc185..61881eb9b48 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.md @@ -4,6 +4,7 @@ last_updated: Aug 11, 2021 description: This document describes how to manage marketplace abstract product meta information in the Merchant Portal. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/manageing-marketplace-abstract-product-meta-information.html related: - title: Marketplace Product feature overview @@ -28,7 +29,7 @@ To add meta information for a product: - Meta title - Meta keywords—separate keywords with comma. - Meta description -4. Click **Save**. +4. Click **Save**. ## Editing abstract product meta information @@ -41,7 +42,7 @@ To modify meta information for a product: - Meta keywords—separate keywords with comma. - Meta description -4. Click **Save**. +4. Click **Save**. ## Reference information: SEO pane diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md index 9e768a9e588..750b050cf83 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.md @@ -4,6 +4,7 @@ description: This document describes how to manage marketplace abstract product template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/managing-marketplace-abstract-product-prices.html related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md index fe0c463f520..0757e2629db 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.md @@ -4,6 +4,7 @@ last_updated: May 05, 2022 description: This document describes how to modify marketplace abstract products in the Merchant Portal. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.html - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/abstract-products/managing-marketplace-abstract-products.html related: - title: Marketplace Product feature overview @@ -53,7 +54,7 @@ To edit the existing marketplace abstract product: 3. In the *Stores* pane, in the drop-down menu, select the stores where the product is available. 4. In the *Tax Set* pane, in the drop-down menu, select the necessary tax set. 5. In the *Categories* pane, in the drop-down menu, select the categories where your product belongs. -6. Click **Save**. +6. Click **Save**. ### Reference information: [Product name] drawer, Abstract Product Details tab diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md similarity index 89% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md index 8ccd1a2e35a..8f22a0281cc 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.md @@ -3,6 +3,8 @@ title: Create marketplace concrete products last_updated: Aug 11, 2021 description: This document describes how to create a marketplace concrete product in the Merchant Portal. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.html related: - title: Marketplace Product feature overview link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md similarity index 96% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md index 082b5fb17e8..46df715f8d0 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.md @@ -4,6 +4,7 @@ last_updated: Sep 24, 2024 description: Learn how to edit concrete products in the Merchant Portal for your Spryker Marketplace based projects. template: back-office-user-guide-template redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.html - /docs/pbc/all/product-information-management/202404.0/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.html related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md index 0f342fa43f0..526b2a9d0e9 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.md @@ -3,6 +3,8 @@ title: Manage marketplace concrete product attributes last_updated: Aug 11, 2021 description: This document describes how to manage marketplace concrete product attributes in the Merchant Portal. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.html related: - title: Marketplace Product feature overview link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md similarity index 97% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md index 2a4e4dab39d..835555df332 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.md @@ -2,6 +2,8 @@ title: Manage marketplace concrete product prices description: This document describes how to manage marketplace concrete product prices in the Merchant Portal. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.html last_updated: Nov 21, 2023 related: - title: Marketplace Product feature overview diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md similarity index 95% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md index a2d79b70f93..17bd8dc89ab 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.md @@ -3,6 +3,8 @@ title: Manage marketplace concrete product image sets last_updated: Aug 11, 2021 description: This document describes how to manage marketplace concrete product image sets in the Merchant Portal. template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.html related: - title: Marketplace Product feature overview link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/import-products-ui.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/import-products-ui.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-in-the-merchant-portal/import-products-ui.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/import-products-ui.md diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-products-in-the-merchant-portal.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-products-in-the-merchant-portal.md new file mode 100644 index 00000000000..07b81854789 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-in-the-merchant-portal/manage-products-in-the-merchant-portal.md @@ -0,0 +1,44 @@ +--- +title: Manage products in the Merchant Portal +last_updated: Apr 4, 2023 +description: This section describes how to manage abstract and concrete products in the merchant portal for your Spryker Marketplace projects. +template: back-office-user-guide-template +redirect_from: + - /docs/marketplace/user/merchant-portal-user-guides/202311.0/products/products.html +--- + +This section contains guides on managing product in the Merchant Portal: + +- Abstract products guides: + - [Creating marketplace abstract product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.html) + - [Managing marketplace abstract product attributes](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.html) + - [Managing marketplace abstract product image sets](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.html) + - [Managing marketplace abstract product meta information](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.html) + - [Managing marketplace abstract product prices](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.html) + - [Managing marketplace abstract products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.html) + +- Concrete products guides: + - [Creating marketplace concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.html) + - [Managing marketplace concrete product attributes](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.html) + - [Managing marketplace concrete product prices](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.html) + - [Managing marketplace concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.html) + - [Managing marketplace concrete product image sets](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.html) + +{% include pbc/all/manage-in-the-merchant-portal/log-into-the-merchant-portal.md %} + +## Next steps + +- Abstract products guides: + - [Creating marketplace abstract product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/create-marketplace-abstract-products.html) + - [Managing marketplace abstract product attributes](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-attributes.html) + - [Managing marketplace abstract product image sets](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-image-sets.html) + - [Managing marketplace abstract product meta information](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-meta-information.html) + - [Managing marketplace abstract product prices](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-product-prices.html) + - [Managing marketplace abstract products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/abstract-products/manage-marketplace-abstract-products.html) + +- Concrete products guides: + - [Creating marketplace concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/create-marketplace-concrete-products.html) + - [Managing marketplace concrete product attributes](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-attributes.html) + - [Managing marketplace concrete product prices](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-product-prices.html) + - [Managing marketplace concrete products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/edit-marketplace-concrete-products.html) + - [Managing marketplace concrete product image sets](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-in-the-merchant-portal/concrete-products/manage-marketplace-concrete-products-image-sets.html) diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.md new file mode 100644 index 00000000000..027fa5b4012 --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.md @@ -0,0 +1,1494 @@ +--- +title: "Glue API: Retrieve abstract products" +description: This glue API document describes how to retrieve general information about abstract products and related resources in the Spryker Marketplace +template: glue-api-storefront-guide-template +last_updated: Dec 14, 2023 +redirect_from: + - /docs/scos/dev/glue-api-guides/202005.0/managing-products/retrieving-product-information.html + - /docs/pbc/all/product-information-management/202311.0/marketplace/manage-using-glue-api/retrieve-abstract-products.html +related: + - title: Retrieving abstract products in abstract product lists + link: docs/pbc/all/content-management-system/page.version/marketplace/glue-api-retrieve-abstract-products-in-abstract-product-lists.html +--- + +This endpoint allows retrieving general information about abstract products. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html) + + + +## Retrieve an abstract product + +To retrieve general information about an abstract product, send the request: + +--- +`GET` {% raw %}**/abstract-products/*{{abstract_product_sku}}***{% endraw %} + +--- + +| PATH | DESCRIPTION | +| --- | --- | +| {% raw %}***{{abstract_product_sku}}***{% endraw %} | SKU of an abstract product to get information for. | + +### Request + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | abstract-product-prices, concrete-products, product-labels, abstract-product-image-sets, abstract-product-availabilities, category-nodes, product-tax-sets, product-options, product-reviews, merchants | +| fields | Filters out the fields to be retrieved. | name, image, description | + +{% info_block warningBox "Performance" %} + +- For performance and bandwidth usage optimization, we recommend filtering out only the needed information using the `fields` string parameter. + +- If you include more resources, you can still use the `fields` string parameter to return only the needed fields. For example, `GET https://glue.mysprykershop.com/abstract-products/001?include=concrete-products&fields[abstract-products]=name,description&fields[concrete-products]=name,image`. + +{% endinfo_block %} + + + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/abstract-products/001` | Retrieve information about the abstract product with SKU `001`. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-image-sets` | Retrieve information about the abstract product with SKU `001` with its image sets. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-availabilities` | Retrieve information about the abstract product with SKU `001` with its availability. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `001` with its [default prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/prices-feature-overview.html). | +| `GET https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices` | Retrieve information about the abstract product with SKU `093` with its prices (default and [volume prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/volume-prices-overview.html)). | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=category-nodes` | Retrieve information about the abstract product with SKU `001` with the category nodes it belongs to. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=product-tax-sets` | Retrieve information about the abstract product with SKU `001` with its tax sets. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=product-labels` | Retrieve information about the abstract product with SKU `001` with its assigned product labels. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=concrete-products` | Retrieve information about the abstract product with SKU `001` with its concrete products. | +| `GET https://glue.mysprykershop.com/abstract-products/001?include=product-options` | Retrieve information about the abstract product with SKU `001` with its product options. | +| `GET https://glue.mysprykershop.com/abstract-products/035?include=product-reviews` | Retrieve information about the abstract product with SKU `001` with its product reviews. | +| `GET https://glue.mysprykershop.com/abstract-products/109` | Retrieve the merchant product with SKU `109`.| +| `GET https://glue.mysprykershop.com/abstract-products/109?include=merchants` | Retrieve the marketplace product with SKU `109` including the merchant information. | + + +### Response + +
    +Response sample: retrieve information about the abstract product with SKU `001` + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about the abstract product with its image sets + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-image-sets" + }, + "relationships": { + "abstract-product-image-sets": { + "data": [ + { + "type": "abstract-product-image-sets", + "id": "001" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-image-sets", + "id": "001", + "attributes": { + "imageSets": [ + { + "name": "default", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25904006-8438.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25904006-8438.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-image-sets" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about the abstract product with its availability + +```json +{ +    "data": { +        "type": "abstract-products", +        "id": "001", +        "attributes": { +            "sku": "001", +            "averageRating": null, +            "reviewCount": 0, +            "name": "Canon IXUS 160", +            "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", +            "attributes": { +                "megapixel": "20 MP", +                "flash_range_tele": "4.2-4.9 ft", +                "memory_slots": "1", +                "usb_version": "2", +                "brand": "Canon", +                "color": "Red" +            }, +            "superAttributesDefinition": [ +                "color" +            ], +            "superAttributes": { +                "color": [ +                    "Red" +                ] +            }, +            "attributeMap": { +                "product_concrete_ids": [ +                    "001_25904006" +                ], +                "super_attributes": { +                    "color": [ +                        "Red" +                    ] +                }, +                "attribute_variants": [] +            }, +            "metaTitle": "Canon IXUS 160", +            "metaKeywords": "Canon,Entertainment Electronics", +            "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", +            "attributeNames": { +                "megapixel": "Megapixel", +                "flash_range_tele": "Flash range (tele)", +                "memory_slots": "Memory slots", +                "usb_version": "USB version", +                "brand": "Brand", +                "color": "Color" +            }, +            "url": "/en/canon-ixus-160-1" +        }, +        "links": { +            "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-availabilities" +        }, +        "relationships": { +            "abstract-product-availabilities": { +                "data": [ +                    { +                        "type": "abstract-product-availabilities", +                        "id": "001" +                    } +                ] +            } +        } +    }, +    "included": [ +        { +            "type": "abstract-product-availabilities", +            "id": "001", +            "attributes": { +                "availability": true, +                "quantity": "10.0000000000" +            }, +            "links": { +                "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" +            } +        } +    ] +} +``` + +
    + + + +
    Response sample: retrieve information about the abstract product with its default prices + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=abstract-product-prices" + }, + "relationships": { + "abstract-product-prices": { + "data": [ + { + "type": "abstract-product-prices", + "id": "001" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-prices", + "id": "001", + "attributes": { + "price": 9999, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9999, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 12564, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/abstract-product-prices" + } + } + ] +} +``` + +
    + +
    Response sample: retrieve information about the abstract product with its default and volume prices + +```json +{ + "data": { + "type": "abstract-products", + "id": "093", + "attributes": { + "sku": "093", + "merchantReference": "MER000001", + "averageRating": 4.3, + "reviewCount": 4, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Yellow" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "superAttributes": { + "color": [ + "Silver" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "093_24495843" + ], + "super_attributes": { + "color": [ + "Silver" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/sony-smartwatch-3-93" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093?include=abstract-product-prices" + }, + "relationships": { + "abstract-product-prices": { + "data": [ + { + "type": "abstract-product-prices", + "id": "093" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-product-prices", + "id": "093", + "attributes": { + "price": 24899, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 24899, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/093/abstract-product-prices" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about the abstract product with the category nodes it belongs to + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=category-nodes" + }, + "relationships": { + "category-nodes": { + "data": [ + { + "type": "category-nodes", + "id": "4" + }, + { + "type": "category-nodes", + "id": "2" + } + ] + } + } + }, + "included": [ + { + "type": "category-nodes", + "id": "4", + "attributes": { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "order": 100, + "url": "/en/cameras-&-camcorders/digital-cameras", + "children": [], + "parents": [ + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders", + "children": [], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "order": null, + "url": "/en", + "children": [], + "parents": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/4" + } + }, + { + "type": "category-nodes", + "id": "2", + "attributes": { + "nodeId": 2, + "name": "Cameras & Camcorders", + "metaTitle": "Cameras & Camcorders", + "metaKeywords": "Cameras & Camcorders", + "metaDescription": "Cameras & Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders", + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "metaTitle": "Digital Cameras", + "metaKeywords": "Digital Cameras", + "metaDescription": "Digital Cameras", + "isActive": true, + "order": 100, + "url": "/en/cameras-&-camcorders/digital-cameras", + "children": [], + "parents": [] + }, + { + "nodeId": 3, + "name": "Camcorders", + "metaTitle": "Camcorders", + "metaKeywords": "Camcorders", + "metaDescription": "Camcorders", + "isActive": true, + "order": 90, + "url": "/en/cameras-&-camcorders/camcorders", + "children": [], + "parents": [] + } + ], + "parents": [ + { + "nodeId": 1, + "name": "Demoshop", + "metaTitle": "Demoshop", + "metaKeywords": "English version of Demoshop", + "metaDescription": "English version of Demoshop", + "isActive": true, + "order": null, + "url": "/en", + "children": [], + "parents": [] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/category-nodes/2" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about the abstract product with its tax sets + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=product-tax-sets" + }, + "relationships": { + "product-tax-sets": { + "data": [ + { + "type": "product-tax-sets", + "id": "0e93b0d4-6d83-5fc1-ac1d-d6ae11690406" + } + ] + } + } + }, + "included": [ + { + "type": "product-tax-sets", + "id": "0e93b0d4-6d83-5fc1-ac1d-d6ae11690406", + "attributes": { + "name": "Entertainment Electronics", + "restTaxRates": [ + { + "name": "Austria Standard", + "rate": "20.00", + "country": "AT" + }, + { + "name": "Belgium Standard", + "rate": "21.00", + "country": "BE" + }, + { + "name": "Bulgaria Standard", + "rate": "20.00", + "country": "BG" + }, + { + "name": "Czech Republic Standard", + "rate": "21.00", + "country": "CZ" + }, + { + "name": "Denmark Standard", + "rate": "25.00", + "country": "DK" + }, + { + "name": "France Standard", + "rate": "20.00", + "country": "FR" + }, + { + "name": "Germany Standard", + "rate": "19.00", + "country": "DE" + }, + { + "name": "Hungary Standard", + "rate": "27.00", + "country": "HU" + }, + { + "name": "Italy Standard", + "rate": "22.00", + "country": "IT" + }, + { + "name": "Luxembourg Standard", + "rate": "17.00", + "country": "LU" + }, + { + "name": "Netherlands Standard", + "rate": "21.00", + "country": "NL" + }, + { + "name": "Poland Standard", + "rate": "23.00", + "country": "PL" + }, + { + "name": "Romania Standard", + "rate": "20.00", + "country": "RO" + }, + { + "name": "Slovakia Standard", + "rate": "20.00", + "country": "SK" + }, + { + "name": "Slovenia Standard", + "rate": "22.00", + "country": "SI" + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-tax-sets" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about the abstract product with the assigned product labels + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": {...}, + "links": {...}, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "3" + }, + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "3", + "attributes": { + "name": "Standard Label", + "isExclusive": false, + "position": 3, + "frontEndReference": "" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/3" + } + }, + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 5, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about the abstract product with its concrete products + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=concrete-products" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about the abstract product with its product options + +```json +{ + "data": { + "type": "abstract-products", + "id": "001", + "attributes": { + "sku": "001", + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Red" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "001_25904006" + ], + "super_attributes": { + "color": [ + "Red" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-ixus-160-1" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001?include=product-options" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/001/product-options/OP_gift_wrapping" + } + } + ] +} +``` + +
    + + + +
    +Response sample: retrieve information about the abstract product with its product reviews + +```json +{ + "data": { + "type": "abstract-products", + "id": "035", + "attributes": { + "sku": "035", + "averageRating": 4.7, + "reviewCount": 3, + "name": "Canon PowerShot N", + "description": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creative images plus the original unaltered photo—capturing the same subject in a variety of artistic and surprising ways. The unique symmetrical, metal-bodied design is strikingly different with an ultra-modern minimalist style—small enough to keep in your pocket and stylish enough to take anywhere. HS System excels in low light letting you capture the real atmosphere of the moment without flash or a tripod. Advanced DIGIC 5 processing and a high-sensitivity 12.1 Megapixel CMOS sensor give excellent image quality in all situations.", + "attributes": { + "focus": "TTL", + "field_of_view": "100%", + "display": "LCD", + "sensor_type": "CMOS", + "brand": "Canon", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Silver" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "035_17360369" + ], + "super_attributes": { + "color": [ + "Silver" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Canon PowerShot N", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creat", + "attributeNames": { + "focus": "Focus", + "field_of_view": "Field of view", + "display": "Display", + "sensor_type": "Sensor type", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/canon-powershot-n-35" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/035?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "29" + }, + { + "type": "product-reviews", + "id": "28" + }, + { + "type": "product-reviews", + "id": "30" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "29", + "attributes": { + "rating": 5, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/29" + } + }, + { + "type": "product-reviews", + "id": "28", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/28" + } + }, + { + "type": "product-reviews", + "id": "30", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/30" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve the merchant product + +```json +{ + "data": { + "type": "abstract-products", + "id": "109", + "attributes": { + "sku": "109", + "merchantReference": "MER000001", + "averageRating": null, + "reviewCount": 0, + "name": "Sony SW2 SmartWatch", + "description": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on top of everything. If you like to get out running, you can use SmartWatch as your phone remote. If it rains, you can keep on going. SmartWatch 2 can take the rain. If it's bright and sunny, SmartWatch 2 has an impressive sunlight-readable display. Take it anywhere. When you are using a wireless Bluetooth® headset for music, you can use SmartWatch 2 as a phone remote to make or receive calls. When a call comes in, you can see who's calling in your SmartWatch display, press once to answer and enjoy hands-free calling at its easiest. You can also browse recent calls in your call log and use SmartWatch to initiate a call.", + "attributes": { + "display_type": "LCD", + "shape": "square", + "bluetooth_version": "3", + "battery_life": "168 h", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Blue" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "109_19416433" + ], + "super_attributes": { + "color": [ + "Blue" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Sony SW2 SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on", + "attributeNames": { + "display_type": "Display type", + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/sony-sw2-smartwatch-109" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/109" + } + } +} +``` + +
    + + +
    +Response sample: retrieve the marketplace product including the merchant information + +```json +{ + "data": { + "type": "abstract-products", + "id": "109", + "attributes": { + "sku": "109", + "merchantReference": "MER000001", + "averageRating": null, + "reviewCount": 0, + "name": "Sony SW2 SmartWatch", + "description": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on top of everything. If you like to get out running, you can use SmartWatch as your phone remote. If it rains, you can keep on going. SmartWatch 2 can take the rain. If it's bright and sunny, SmartWatch 2 has an impressive sunlight-readable display. Take it anywhere. When you are using a wireless Bluetooth® headset for music, you can use SmartWatch 2 as a phone remote to make or receive calls. When a call comes in, you can see who's calling in your SmartWatch display, press once to answer and enjoy hands-free calling at its easiest. You can also browse recent calls in your call log and use SmartWatch to initiate a call.", + "attributes": { + "display_type": "LCD", + "shape": "square", + "bluetooth_version": "3", + "battery_life": "168 h", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Blue" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "109_19416433" + ], + "super_attributes": { + "color": [ + "Blue" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Sony SW2 SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on", + "attributeNames": { + "display_type": "Display type", + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/sony-sw2-smartwatch-109" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/109" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "latitude": "13.384458", + "longitude": "52.534105", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

    Spryker Systems GmbH

    Julie-Wolfthorn-Straße 1
    10115 Berlin
    DE

    Phone: +49 (30) 2084983 50
    Email: info@spryker.com

    Represented by
    Managing Directors: Alexander Graf, Boris Lokschin
    Register Court: Hamburg
    Register Number: HRB 134310

    ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + } + ] +} +``` + +
    + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + + + + +For the attributes of other included resources, see: + +- [Retrieve image sets of an abstract product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html) +- [Retrieve availability of an abstract product](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html) +- [Retrieve prices of an abstract product](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html) +- [Retrieve a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.html) +- [Retrieve a category node](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-nodes.html) +- [Retrieve tax sets](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-using-glue-api/retrieve-tax-sets.html) +- [Retrieve a product label](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) +- [Retrieve product reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/manage-using-glue-api/glue-api-manage-product-reviews.html#retrieve-product-reviews) +- [Retrieve a measurement unit](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-measurement-units.html) +- [Retrieve merchant information](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 301 | Abstract product is not found. | +| 311 | Abstract product SKU is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.md new file mode 100644 index 00000000000..a26a2f3a91f --- /dev/null +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-concrete-products.md @@ -0,0 +1,1146 @@ +--- +title: "Glue API: Retrieve concrete products" +description: Retrieve Concrete product data in your Spryker Marketplace project using the Spryker GLUE API. +template: glue-api-storefront-guide-template +last_updated: Dec 18, 2023 +redirect_from: + - /docs/pbc/all/product-information-management/202311.0/marketplace/manage-using-glue-api/retrieve-concrete-products.html +related: + - title: Retrieving product offers of concrete products + link: docs/pbc/all/product-information-management/page.version/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.html +--- + +This endpoint allows retrieving general information about concrete products. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: + +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Measurement Units Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-measurement-units-glue-api.html) +- [Install the Product Options Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-options-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html) +- [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html + + +## Retrieve a concrete product + +To retrieve general information about a concrete product, send the request: + +*** +`GET` {% raw %}**/concrete-products/*{{concrete_product_sku}}***{% endraw %} +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| {% raw %}***{{concrete_product_sku}}***{% endraw %} | SKU of a concrete product to get information for. | + +### Request + +| STRING PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • concrete-product-image-sets
    • concrete-product-availabilities
    • product-options
    • product-reviews
    • concrete-product-prices
    • product-measurement-units
    • sales-units
    • product-labels
    • product-offers
    • product-offer-prices
    • merchants
    | +| fields | Filters out the fields to be retrieved. | name, image, description | + +{% info_block infoBox "Included resources" %} + +To retrieve product offer prices, include `product-offers` and `product-offer-prices`. + +{% endinfo_block %} + +{% info_block infoBox "Filtering" %} + +- For performance and bandwidth usage optimization, we recommend filtering out only the needed information using the `fields` string parameter. + +- If you include more resources, you can still use the `fields` string parameter to return only the needed fields. For example, `GET https://glue.mysprykershop.com/concrete-products/fish-1-1?include=sales-units&fields[concrete-products]=name,description&fields[sales-units]=conversion,precision`. + +{% endinfo_block %} + + + +| REQUEST | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006` | Retrieve information about the `001_25904006` product. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-image-sets` | Retrieve information about the `001_25904006` product with its image sets. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-availabilities` | Retrieve information about the `001_25904006` product with its availability. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices` | Retrieve information about the `001_25904006` product with its [default prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/prices-feature-overview.html). | +| `GET https://glue.mysprykershop.com/abstract-products/093_24495843?include=concrete-product-prices` | Retrieve information about the abstract product with SKU `093_24495843` with its prices: default and [volume prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/prices-feature-overview/volume-prices-overview.html) | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-options` | Retrieve information about the `001_25904006` product with its product options. | +| `GET https://glue.mysprykershop.com/concrete-products/035_17360369?include=product-reviews` | Retrieve information about the `001_25904006` product with its product reviews. | +| `GET https://glue.mysprykershop.com/concrete-products/fish-1-1?include=sales-units,product-measurement-units` | Retrieve information about the `fish-1-1` product with the information on its sales units and product measurement units included. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-labels` | Retrieve information about the `001_25904006` product with product labels included. | +| `GET https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-offers` | Retrieve information about a concrete product with the SKU `001_25904006` with the product offers for this product included. | +| `GET https://glue.mysprykershop.com/concrete-products/076_24394207?include=product-offers,product-offer-prices` | Retrieve information about a concrete product with the SKU `076_24394207` with product offers and the product offer prices included. | +| `GET https://glue.mysprykershop.com/concrete-products/111_12295890?include=abstract-products,merchants` | Retrieve information about the concrete product with SKU `111_12295890` with its abstract product and the merchant who sells it.| + +### Response + +
    +Response sample: retrieve information about a concrete product + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with its image sets + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-image-sets" + }, + "relationships": { + "concrete-product-image-sets": { + "data": [ + { + "type": "concrete-product-image-sets", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-image-sets", + "id": "001_25904006", + "attributes": { + "imageSets": [ + { + "name": "default", + "images": [ + { + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25904006-8438.jpg", + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25904006-8438.jpg" + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-image-sets" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about a concrete product with its availability + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-availabilities" + }, + "relationships": { + "concrete-product-availabilities": { + "data": [ + { + "type": "concrete-product-availabilities", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-availabilities", + "id": "001_25904006", + "attributes": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } + } + ] +} +``` + +
    + + +
    Response sample: retrieve information about a concrete product with its default prices + +```php +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=concrete-product-prices" + }, + "relationships": { + "concrete-product-prices": { + "data": [ + { + "type": "concrete-product-prices", + "id": "001_25904006" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-prices", + "id": "001_25904006", + "attributes": { + "price": 9999, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 9999, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "ORIGINAL", + "netAmount": null, + "grossAmount": 12564, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-prices" + } + } + ] +} +``` + +
    + + +
    Response sample: retrieve information about a concrete product with its default and volume prices + +```json +{ + "data": { + "type": "concrete-products", + "id": "093_24495843", + "attributes": { + "sku": "093_24495843", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.3, + "reviewCount": 4, + "productAbstractSku": "093", + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps – formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/093_24495843?include=concrete-product-prices" + }, + "relationships": { + "concrete-product-prices": { + "data": [ + { + "type": "concrete-product-prices", + "id": "093_24495843" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-prices", + "id": "093_24495843", + "attributes": { + "price": 24899, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 24899, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/093_24495843/concrete-product-prices" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with its product options + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-options" + }, + "relationships": { + "product-options": { + "data": [ + { + "type": "product-options", + "id": "OP_insurance" + }, + { + "type": "product-options", + "id": "OP_gift_wrapping" + } + ] + } + } + }, + "included": [ + { + "type": "product-options", + "id": "OP_insurance", + "attributes": { + "optionGroupName": "Insurance", + "sku": "OP_insurance", + "optionName": "Two (2) year insurance coverage", + "price": 10000, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/product-options/OP_insurance" + } + }, + { + "type": "product-options", + "id": "OP_gift_wrapping", + "attributes": { + "optionGroupName": "Gift wrapping", + "sku": "OP_gift_wrapping", + "optionName": "Gift wrapping", + "price": 500, + "currencyIsoCode": "EUR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006/product-options/OP_gift_wrapping" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with product reviews + +```json +{ + "data": { + "type": "concrete-products", + "id": "035_17360369", + "attributes": { + "sku": "035_17360369", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": 4.7, + "reviewCount": 3, + "name": "Canon PowerShot N", + "description": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creative images plus the original unaltered photo—capturing the same subject in a variety of artistic and surprising ways. The unique symmetrical, metal-bodied design is strikingly different with an ultra-modern minimalist style—small enough to keep in your pocket and stylish enough to take anywhere. HS System excels in low light letting you capture the real atmosphere of the moment without flash or a tripod. Advanced DIGIC 5 processing and a high-sensitivity 12.1 Megapixel CMOS sensor give excellent image quality in all situations.", + "attributes": { + "focus": "TTL", + "field_of_view": "100%", + "display": "LCD", + "sensor_type": "CMOS", + "brand": "Canon", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon PowerShot N", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Creative Shot Originality is effortless with Creative Shot. Simply take a shot and the camera will analyse the scene then automatically generate five creat", + "attributeNames": { + "focus": "Focus", + "field_of_view": "Field of view", + "display": "Display", + "sensor_type": "Sensor type", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/035_17360369?include=product-reviews" + }, + "relationships": { + "product-reviews": { + "data": [ + { + "type": "product-reviews", + "id": "29" + }, + { + "type": "product-reviews", + "id": "28" + }, + { + "type": "product-reviews", + "id": "30" + } + ] + } + } + }, + "included": [ + { + "type": "product-reviews", + "id": "29", + "attributes": { + "rating": 5, + "nickname": "Maria", + "summary": "Curabitur varius, dui ac vulputate ullamcorper", + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel mauris consequat, dictum metus id, facilisis quam. Vestibulum imperdiet aliquam interdum. Pellentesque tempus at neque sed laoreet. Nam elementum vitae nunc fermentum suscipit. Suspendisse finibus risus at sem pretium ullamcorper. Donec rutrum nulla nec massa tristique, porttitor gravida risus feugiat. Ut aliquam turpis nisi." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/29" + } + }, + { + "type": "product-reviews", + "id": "28", + "attributes": { + "rating": 5, + "nickname": "Spencor", + "summary": "Donec vestibulum lectus ligula", + "description": "Donec vestibulum lectus ligula, non aliquet neque vulputate vel. Integer neque massa, ornare sit amet felis vitae, pretium feugiat magna. Suspendisse mollis rutrum ante, vitae gravida ipsum commodo quis. Donec eleifend orci sit amet nisi suscipit pulvinar. Nullam ullamcorper dui lorem, nec vehicula justo accumsan id. Sed venenatis magna at posuere maximus. Sed in mauris mauris. Curabitur quam ex, vulputate ac dignissim ac, auctor eget lorem. Cras vestibulum ex quis interdum tristique." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/28" + } + }, + { + "type": "product-reviews", + "id": "30", + "attributes": { + "rating": 4, + "nickname": "Maggie", + "summary": "Aliquam erat volutpat", + "description": "Morbi vitae ultricies libero. Aenean id lectus a elit sollicitudin commodo. Donec mattis libero sem, eu convallis nulla rhoncus ac. Nam tincidunt volutpat sem, eu congue augue cursus at. Mauris augue lorem, lobortis eget varius at, iaculis ac velit. Sed vulputate rutrum lorem, ut rhoncus dolor commodo ac. Aenean sed varius massa. Quisque tristique orci nec blandit fermentum. Sed non vestibulum ante, vitae tincidunt odio. Integer quis elit eros. Phasellus tempor dolor lectus, et egestas magna convallis quis. Ut sed odio nulla. Suspendisse quis laoreet nulla. Integer quis justo at velit euismod imperdiet. Ut orci dui, placerat ut ex ac, lobortis ullamcorper dui. Etiam euismod risus hendrerit laoreet auctor." + }, + "links": { + "self": "https://glue.mysprykershop.com/product-reviews/30" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product with the details on its sales units and product measurement units + +```json +{ + "data": { + "type": "concrete-products", + "id": "cable-vga-1-1", + "attributes": { + "sku": "cable-vga-1-1", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "VGA cable (1.5m)", + "description": "Enjoy clear, crisp, immediate connectivity with the High-Speed HDMI Cable. This quality High-Definition Multimedia Interface (HDMI) cable allows you to connect a wide variety of devices in the realms of home entertainment, computing, gaming, and more to your HDTV, projector, or monitor. Perfect for those that interact with multiple platforms and devices, you can rely on strong performance and playback delivery when it comes to your digital experience.", + "attributes": { + "packaging_unit": "Ring" + }, + "superAttributesDefinition": [ + "packaging_unit" + ], + "metaTitle": "", + "metaKeywords": "", + "metaDescription": "", + "attributeNames": { + "packaging_unit": "Packaging unit" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-1?include=sales-units,product-measurement-units" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + }, + "sales-units": { + "data": [ + { + "type": "sales-units", + "id": "32" + } + ] + } + } + }, + "included": [ + { + "type": "product-measurement-units", + "id": "METR", + "attributes": { + "name": "Meter", + "defaultPrecision": 100 + }, + "links": { + "self": "https://glue.mysprykershop.com/product-measurement-units/METR" + } + }, + { + "type": "sales-units", + "id": "32", + "attributes": { + "conversion": 1, + "precision": 100, + "isDisplayed": true, + "isDefault": true, + "productMeasurementUnitCode": "METR" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/cable-vga-1-1/sales-units/32" + }, + "relationships": { + "product-measurement-units": { + "data": [ + { + "type": "product-measurement-units", + "id": "METR" + } + ] + } + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about a concrete product with its product labels + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006" + } + } +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product and its product offers included + +```json +{ + "data": { + "type": "concrete-products", + "id": "001_25904006", + "attributes": { + "sku": "001_25904006", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 160", + "description": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results while framing using Live View Control and enjoy sharing them with friends using the 6.8 cm (2.7") LCD screen. Combine with a Canon Connect Station and you can easily share your photos and movies with the world on social media sites and online albums like irista, plus enjoy watching them with family and friends on an HD TV. Effortlessly enjoy great shots of friends thanks to Face Detection technology. It detects multiple faces in a single frame making sure they remain in focus and with optimum brightness. Face Detection also ensures natural skin tones even in unusual lighting conditions.", + "attributes": { + "megapixel": "20 MP", + "flash_range_tele": "4.2-4.9 ft", + "memory_slots": "1", + "usb_version": "2", + "brand": "Canon", + "color": "Red" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 160", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Add a personal touch Make shots your own with quick and easy control over picture settings such as brightness and colour intensity. Preview the results whi", + "attributeNames": { + "megapixel": "Megapixel", + "flash_range_tele": "Flash range (tele)", + "memory_slots": "Memory slots", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/001_25904006?include=product-offers" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer49" + } + ] + } + } + }, + "included": [ + { + "type": "product-offers", + "id": "offer49", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer49" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve information about a concrete product and its product offers and product offer prices included + +```json +{ + "data": { + "type": "concrete-products", + "id": "076_24394207", + "attributes": { + "sku": "076_24394207", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "076", + "name": "Sony Xperia Z3 Compact", + "description": "Dive into new experiences Xperia Z3 Compact is the smartphone designed to enhance your life. And life isn't lived inside. With the highest waterproof rating*, Xperia Z3 Compact lets you answer calls in the rain or take pictures in the pool. And it can handle all the drops into the sink in between. Combined with a slim, compact design that's easy to use with one hand, Xperia Z3 Compact is the Android smartphone that teams durability with beauty. Some of the best times happen in the lowest light. Years of Sony camera expertise have been brought to Xperia Z3 Compact, to deliver unparalleled low-light capability. Thanks to Cyber-shot and Handycam technologies you can record stunning videos on the move and take crisp shots under water. Want to take your shots to the next level? Get creative with our unique camera apps. It's our best smartphone camera yet – for memories that deserve more than good.", + "attributes": { + "internal_ram": "2048 MB", + "display_type": "TFT", + "bluetooth_version": "4.0 LE", + "form_factor": "Bar", + "brand": "Sony", + "color": "White" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "metaTitle": "Sony Xperia Z3 Compact", + "metaKeywords": "Sony,Communication Electronics", + "metaDescription": "Dive into new experiences Xperia Z3 Compact is the smartphone designed to enhance your life. And life isn't lived inside. With the highest waterproof ratin", + "attributeNames": { + "internal_ram": "Internal RAM", + "display_type": "Display type", + "bluetooth_version": "Blootooth version", + "form_factor": "Form factor", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/076_24394207" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer169" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer169", + "attributes": { + "price": 30355, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 30355, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 38400, + "netAmount": 39100, + "quantity": 3 + } + + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer169/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer169", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000006", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer169" + }, + "relationships": { + "product-offer-prices": { + "data": [ + { + "type": "product-offer-prices", + "id": "offer169" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve information about a concrete product, an abstract product it belongs to, and the merchant who sells the concrete product + +```json +{ + "data": { + "type": "concrete-products", + "id": "111_12295890", + "attributes": { + "sku": "111_12295890", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "111", + "name": "Sony SmartWatch", + "description": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your world's just a tap, swipe or press away. Want to do more with your SmartWatch? Download compatible applications on Google Play™. And customise your SmartWatch to make it exclusively yours. Customise your SmartWatch with a 20mm wristband. Or wear its stylish wristband. You can even use it as a clip. This ultra-thin Android™ remote was designed to impress. An elegant Android watch that'll keep you discreetly updated and your hands free.", + "attributes": { + "shape": "square", + "bluetooth_version": "3", + "battery_life": "72 h", + "display_type": "LCD", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your ", + "attributeNames": { + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "display_type": "Display type", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/111_12295890" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "111" + } + ] + } + } + }, + "included": [ + { + "type": "abstract-products", + "id": "111", + "attributes": { + "sku": "111", + "averageRating": null, + "reviewCount": 0, + "name": "Sony SmartWatch", + "description": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your world's just a tap, swipe or press away. Want to do more with your SmartWatch? Download compatible applications on Google Play™. And customise your SmartWatch to make it exclusively yours. Customise your SmartWatch with a 20mm wristband. Or wear its stylish wristband. You can even use it as a clip. This ultra-thin Android™ remote was designed to impress. An elegant Android watch that'll keep you discreetly updated and your hands free. ", + "attributes": { + "shape": "square", + "bluetooth_version": "3", + "battery_life": "72 h", + "display_type": "LCD", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "superAttributes": { + "color": [ + "Silver" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "111_12295890" + ], + "super_attributes": { + "color": [ + "Silver" + ] + }, + "attribute_variants": [] + }, + "metaTitle": "Sony SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your ", + "attributeNames": { + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "display_type": "Display type", + "brand": "Brand", + "color": "Color" + }, + "url": "/en/sony-smartwatch-111" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/111" + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-options-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/product-measurement-units-response-attributes.md %} + + + + +For attributes of the other included resources, see the following: + +- [Retrieve sales units of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html) +- [Retrieve image sets of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html) +- [Retrieve availability of a concrete product](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) +- [Retrieve prices of a concrete product](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html) +- [Retrieve a product label](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) +- [Retrieve product ratings and reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/manage-using-glue-api/glue-api-manage-product-reviews.html) +- [Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html#product-offers-response-attributes) +- [Retrieving product offer prices](/docs/pbc/all/price-management/{{page.version}}/marketplace/glue-api-retrieve-product-offer-prices.html#product-offer-prices-response-attributes) +- [Retrieving abstract products](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-abstract-products.html#response) +- [Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md similarity index 92% rename from docs/pbc/all/product-information-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md index 9cceb4d1ff5..502c603e53b 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.md @@ -1,9 +1,10 @@ --- title: "Glue API: Retrieve product offers of concrete products" -description: Learn how to retrieve details about product offers of concrete products via Spryker Glue API for your Marketplace Projects. +description: Learn how to retrieve details about product offers of concrete products via Spryker Glue API for your Marketplace Projects. template: glue-api-storefront-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.html - /docs/pbc/all/product-information-management/202311.0/marketplace/manage-using-glue-api/retrieve-product-offers-of-concrete-products.html related: - title: "Glue API: Retrieve concrete products" diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-merchant-portal-product-management-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-merchant-portal-product-management-feature-overview.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-merchant-portal-product-management-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-merchant-portal-product-management-feature-overview.md diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-approval-process-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-approval-process-feature-overview.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-approval-process-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-approval-process-feature-overview.md index 73de2de316b..9611bb6579d 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-approval-process-feature-overview.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-approval-process-feature-overview.md @@ -4,6 +4,7 @@ description: This document contains concept information for the Marketplace Prod template: concept-topic-template last_updated: Dec 11, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-approval-process-feature-overview.html - /docs/marketplace/user/features/202311.0/marketplace-product-approval-process-feature-overview.html - /docs/marketplace/dev/feature-walkthroughs/202204.0/marketplace-product-approval-process-feature-walkthrough.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-feature-overview.md similarity index 99% rename from docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-feature-overview.md index d6132b1d3d8..84e6dfe3c13 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-feature-overview.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-feature-overview.md @@ -4,6 +4,7 @@ description: Learn about the Spryker Marketplace product feature for your Spryke template: concept-topic-template last_updated: Jan 12, 2024 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-feature-overview.html - /docs/marketplace/user/features/202311.0/marketplace-product-feature-overview.html - /docs/marketplace/user/features/202204.0/marketplace-product-feature-overview.html related: diff --git a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-options-feature-overview.md b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-options-feature-overview.md similarity index 98% rename from docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-options-feature-overview.md rename to docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-options-feature-overview.md index 7e80359a848..065b555af5c 100644 --- a/docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-options-feature-overview.md +++ b/docs/pbc/all/product-information-management/202602.0/marketplace/marketplace-product-options-feature-overview.md @@ -4,6 +4,7 @@ description: The Marketplace Product Options feature lets merchants and Marketpl template: concept-topic-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/product-information-management/202512.0/marketplace/marketplace-product-options-feature-overview.html - /docs/marketplace/user/features/202311.0/marketplace-product-options-feature-overview.html related: - title: Creating product options diff --git a/docs/pbc/all/product-information-management/202512.0/product-information-management.md b/docs/pbc/all/product-information-management/202602.0/product-information-management.md similarity index 100% rename from docs/pbc/all/product-information-management/202512.0/product-information-management.md rename to docs/pbc/all/product-information-management/202602.0/product-information-management.md diff --git a/docs/pbc/all/product-relationship-management/202404.0/install-and-upgrade/install-the-product-relations-glue-api.md b/docs/pbc/all/product-relationship-management/202404.0/install-and-upgrade/install-the-product-relations-glue-api.md deleted file mode 100644 index 9d1c1525fbe..00000000000 --- a/docs/pbc/all/product-relationship-management/202404.0/install-and-upgrade/install-the-product-relations-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Relations Glue API -description: This guide will navigate you through the process of installing and configuring the Product Relations feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-relations-feature-integration -originalArticleId: 90f7f8ad-55be-4090-8a98-b8530a1d8eb9 -redirect_from: - - /2021080/docs/glue-api-product-relations-feature-integration - - /2021080/docs/en/glue-api-product-relations-feature-integration - - /docs/glue-api-product-relations-feature-integration - - /docs/en/glue-api-product-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-product-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-relations-glue-api.md %} diff --git a/docs/pbc/all/product-relationship-management/202410.0/install-and-upgrade/install-the-product-relations-glue-api.md b/docs/pbc/all/product-relationship-management/202410.0/install-and-upgrade/install-the-product-relations-glue-api.md deleted file mode 100644 index 9d1c1525fbe..00000000000 --- a/docs/pbc/all/product-relationship-management/202410.0/install-and-upgrade/install-the-product-relations-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Relations Glue API -description: This guide will navigate you through the process of installing and configuring the Product Relations feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-relations-feature-integration -originalArticleId: 90f7f8ad-55be-4090-8a98-b8530a1d8eb9 -redirect_from: - - /2021080/docs/glue-api-product-relations-feature-integration - - /2021080/docs/en/glue-api-product-relations-feature-integration - - /docs/glue-api-product-relations-feature-integration - - /docs/en/glue-api-product-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-product-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-relations-glue-api.md %} diff --git a/docs/pbc/all/product-relationship-management/202507.0/install-and-upgrade/install-the-product-relations-glue-api.md b/docs/pbc/all/product-relationship-management/202507.0/install-and-upgrade/install-the-product-relations-glue-api.md deleted file mode 100644 index 9d1c1525fbe..00000000000 --- a/docs/pbc/all/product-relationship-management/202507.0/install-and-upgrade/install-the-product-relations-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Relations Glue API -description: This guide will navigate you through the process of installing and configuring the Product Relations feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-relations-feature-integration -originalArticleId: 90f7f8ad-55be-4090-8a98-b8530a1d8eb9 -redirect_from: - - /2021080/docs/glue-api-product-relations-feature-integration - - /2021080/docs/en/glue-api-product-relations-feature-integration - - /docs/glue-api-product-relations-feature-integration - - /docs/en/glue-api-product-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-product-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-relations-glue-api.md %} diff --git a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-feature.md b/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-feature.md deleted file mode 100644 index 6fef8578cd0..00000000000 --- a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Product Relations feature -description: Learn how to integrate the Product Relations feature into your Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-relations-feature-integration -originalArticleId: d8e059d5-4ccd-4c03-beb6-d186fae349f3 -redirect_from: - - /2021080/docs/product-relations-feature-integration - - /2021080/docs/en/product-relations-feature-integration - - /docs/product-relations-feature-integration - - /docs/en/product-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/202204.0/product-relations-feature-integration.html -related: - - title: Install the Product Relations Glue API - link: docs/pbc/all/product-relationship-management/page.version/install-and-upgrade/install-the-product-relations-glue-api.html - - title: Install the Spryker Core feature - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-features/install-the-spryker-core-feature.html - - title: Install the Spryker Core Glue API - link: docs/pbc/all/miscellaneous/page.version/install-and-upgrade/install-glue-api/install-the-spryker-core-glue-api.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-relations-feature.md %} diff --git a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-glue-api.md b/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-glue-api.md deleted file mode 100644 index 9d1c1525fbe..00000000000 --- a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-glue-api.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Product Relations Glue API -description: This guide will navigate you through the process of installing and configuring the Product Relations feature in Spryker OS. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-relations-feature-integration -originalArticleId: 90f7f8ad-55be-4090-8a98-b8530a1d8eb9 -redirect_from: - - /2021080/docs/glue-api-product-relations-feature-integration - - /2021080/docs/en/glue-api-product-relations-feature-integration - - /docs/glue-api-product-relations-feature-integration - - /docs/en/glue-api-product-relations-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-relations-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-product-relations-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-relations-glue-api.md %} diff --git a/docs/pbc/all/product-relationship-management/202512.0/build-your-own-product-relation-type.md b/docs/pbc/all/product-relationship-management/202602.0/build-your-own-product-relation-type.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/build-your-own-product-relation-type.md rename to docs/pbc/all/product-relationship-management/202602.0/build-your-own-product-relation-type.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/glue-api-retrieve-related-products.md b/docs/pbc/all/product-relationship-management/202602.0/glue-api-retrieve-related-products.md similarity index 99% rename from docs/pbc/all/product-relationship-management/202512.0/glue-api-retrieve-related-products.md rename to docs/pbc/all/product-relationship-management/202602.0/glue-api-retrieve-related-products.md index a81a744f0f2..c1dda6d00d3 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/glue-api-retrieve-related-products.md +++ b/docs/pbc/all/product-relationship-management/202602.0/glue-api-retrieve-related-products.md @@ -11,9 +11,9 @@ related: - title: Product Relations feature overview link: docs/pbc/all/product-relationship-management/page.version/product-relationship-management.html redirect_from: -- /docs/scos/dev/glue-api-guides/202204.0/retrieve-related-products.html + - /docs/pbc/all/product-relationship-management/202512.0/glue-api-retrieve-related-products.html + - /docs/scos/dev/glue-api-guides/202204.0/retrieve-related-products.html --- - Using the [Product Relations](/docs/pbc/all/product-relationship-management/{{page.version}}/product-relationship-management.html) feature, sellers can define a list of comparable or additional items for each product. You can display such items, also called related products, in search and in the cart together with the products selected by customers. Only [abstract](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) products support product relations. For more details, see [Product Relations feature overview](/docs/pbc/all/product-relationship-management/{{page.version}}/product-relationship-management.html). diff --git a/docs/pbc/all/product-relationship-management/202512.0/import-file-details-product-relation.csv.md b/docs/pbc/all/product-relationship-management/202602.0/import-file-details-product-relation.csv.md similarity index 96% rename from docs/pbc/all/product-relationship-management/202512.0/import-file-details-product-relation.csv.md rename to docs/pbc/all/product-relationship-management/202602.0/import-file-details-product-relation.csv.md index 1db458b8d93..5b3b6fd202e 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/import-file-details-product-relation.csv.md +++ b/docs/pbc/all/product-relationship-management/202602.0/import-file-details-product-relation.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-relationcsv originalArticleId: ce1a13ce-5d62-4e75-9af5-912210f3a8f0 redirect_from: + - /docs/pbc/all/product-relationship-management/202512.0/import-file-details-product-relation.csv.html - /docs/pbc/all/product-relationship-management/202311.0/file-details-product-relation.csv.html - /docs/scos/dev/data-import/202204.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-relation.csv.html related: diff --git a/docs/pbc/all/product-relationship-management/202410.0/install-and-upgrade/install-the-product-relations-feature.md b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/install-the-product-relations-feature.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202410.0/install-and-upgrade/install-the-product-relations-feature.md rename to docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/install-the-product-relations-feature.md diff --git a/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/install-the-product-relations-glue-api.md b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/install-the-product-relations-glue-api.md new file mode 100644 index 00000000000..e15a408a30b --- /dev/null +++ b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/install-the-product-relations-glue-api.md @@ -0,0 +1,20 @@ +--- +title: Install the Product Relations Glue API +description: This guide will navigate you through the process of installing and configuring the Product Relations feature in Spryker OS. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-relations-feature-integration +originalArticleId: 90f7f8ad-55be-4090-8a98-b8530a1d8eb9 +redirect_from: + - /docs/pbc/all/product-relationship-management/202507.0/install-and-upgrade/install-the-product-relations-glue-api.html + - /docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/install-the-product-relations-glue-api.html + - /2021080/docs/glue-api-product-relations-feature-integration + - /2021080/docs/en/glue-api-product-relations-feature-integration + - /docs/glue-api-product-relations-feature-integration + - /docs/en/glue-api-product-relations-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-relations-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202200.0/glue-api/glue-api-product-relations-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202204.0/glue-api/glue-api-product-relations-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-relations-glue-api.md %} diff --git a/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelation-module.md b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelation-module.md new file mode 100644 index 00000000000..12b64f6ebce --- /dev/null +++ b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelation-module.md @@ -0,0 +1,34 @@ +--- +title: Upgrade the ProductRelation module +description: Use the guide to learn how to update the ProductRelation module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productrelation +originalArticleId: 7e947ff1-adde-438d-8814-d1b41072f63f +redirect_from: + - /2021080/docs/migration-guide-productrelation + - /2021080/docs/en/migration-guide-productrelation + - /docs/migration-guide-productrelation + - /docs/en/migration-guide-productrelation + - /v1/docs/mg-product-relation + - /v1/docs/en/mg-product-relation + - /v2/docs/mg-product-relation + - /v2/docs/en/mg-product-relation + - /v3/docs/mg-product-relation + - /v3/docs/en/mg-product-relation + - /v4/docs/mg-product-relation + - /v4/docs/en/mg-product-relation + - /v5/docs/migration-guide-productrelation + - /v5/docs/en/migration-guide-productrelation + - /v6/docs/migration-guide-productrelation + - /v6/docs/en/migration-guide-productrelation + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-product-relation.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-product-relation.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-product-relation.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productrelation.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productrelation.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productrelation.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productrelation.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productrelation-module.md %} diff --git a/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationcollector-module.md b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationcollector-module.md new file mode 100644 index 00000000000..8255ab31900 --- /dev/null +++ b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationcollector-module.md @@ -0,0 +1,34 @@ +--- +title: Upgrade the ProductRelationCollector module +description: Use the guide to learn how to update the ProductRelationCollector module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-relation-collector +originalArticleId: 2b97c2a3-14c3-41f1-8a7f-743019bf6bb6 +redirect_from: + - /2021080/docs/mg-product-relation-collector + - /2021080/docs/en/mg-product-relation-collector + - /docs/mg-product-relation-collector + - /docs/en/mg-product-relation-collector + - /v1/docs/mg-product-relation-collector + - /v1/docs/en/mg-product-relation-collector + - /v2/docs/mg-product-relation-collector + - /v2/docs/en/mg-product-relation-collector + - /v3/docs/mg-product-relation-collector + - /v3/docs/en/mg-product-relation-collector + - /v4/docs/mg-product-relation-collector + - /v4/docs/en/mg-product-relation-collector + - /v5/docs/mg-product-relation-collector + - /v5/docs/en/mg-product-relation-collector + - /v6/docs/mg-product-relation-collector + - /v6s/docs/en/mg-product-relation-collector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productrelationcollector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productrelationcollector.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productrelationcollector-module.md %} diff --git a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md similarity index 87% rename from docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md rename to docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md index c00f455cfca..0f7859f5f33 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md +++ b/docs/pbc/all/product-relationship-management/202602.0/install-and-upgrade/upgrade-the-productrelationstorage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productrelationstorage originalArticleId: 49824cbe-6262-4cdd-a082-9052c1f9b206 redirect_from: + - /docs/pbc/all/product-relationship-management/202512.0/install-and-upgrade/upgrade-the-productrelationstorage-module.html - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productrelationstorage.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productrelationstorage.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productrelationstorage.html diff --git a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md similarity index 98% rename from docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md rename to docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md index 41bb81b3299..2e4c957bccf 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md +++ b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/best-practices-promote-products-with-product-relations.md @@ -101,4 +101,4 @@ The result looks as follows on the Storefront.
    -You've set up related products for just one product: *Sony SmartWatch 3*. All the other Sony smartwatches don't have related products on their pages. To show related products on the pages of all the other smartwatches, repeat the process for each of them. +You've set up related products for just one product: *Sony SmartWatch 3*. All the other Sony smartwatches don't have related products on their pages. To show related products on the pages of all the other smartwatches, repeat the process for each of them. diff --git a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/create-product-relations.md b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/create-product-relations.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/create-product-relations.md rename to docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/create-product-relations.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/edit-product-relations.md b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/edit-product-relations.md similarity index 94% rename from docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/edit-product-relations.md rename to docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/edit-product-relations.md index 4e3d092bbea..89ce6ba1a1d 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/edit-product-relations.md +++ b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/edit-product-relations.md @@ -11,9 +11,9 @@ related: - title: Product Relations feature overview link: docs/pbc/all/product-relationship-management/page.version/product-relationship-management.html redirect_from: -- /docs/scos/user/back-office-user-guides/202204.0/merchandising/product-relations/edit-product-relations.html + - /docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/edit-product-relations.html + - /docs/scos/user/back-office-user-guides/202204.0/merchandising/product-relations/edit-product-relations.html --- - This document describes how to edit product relations in the Back Office. ## Prerequisites diff --git a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/manage-product-relations-in-the-back-office.md b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/manage-product-relations-in-the-back-office.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/manage-product-relations-in-the-back-office.md rename to docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/manage-product-relations-in-the-back-office.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/view-product-relations.md b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/view-product-relations.md similarity index 95% rename from docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/view-product-relations.md rename to docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/view-product-relations.md index 1ad4827d214..eeb62157f1c 100644 --- a/docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/view-product-relations.md +++ b/docs/pbc/all/product-relationship-management/202602.0/manage-in-the-back-office/view-product-relations.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-product-relations originalArticleId: c5cd0d87-e1ea-41b5-8022-1b913c92acea redirect_from: + - /docs/pbc/all/product-relationship-management/202512.0/manage-in-the-back-office/view-product-relations.html - /2021080/docs/managing-product-relations - /2021080/docs/en/managing-product-relations - /docs/managing-product-relations diff --git a/docs/pbc/all/product-relationship-management/202512.0/product-relations-module-relations.md b/docs/pbc/all/product-relationship-management/202602.0/product-relations-module-relations.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/product-relations-module-relations.md rename to docs/pbc/all/product-relationship-management/202602.0/product-relations-module-relations.md diff --git a/docs/pbc/all/product-relationship-management/202602.0/product-relationship-management.md b/docs/pbc/all/product-relationship-management/202602.0/product-relationship-management.md new file mode 100644 index 00000000000..66a6bea65cd --- /dev/null +++ b/docs/pbc/all/product-relationship-management/202602.0/product-relationship-management.md @@ -0,0 +1,149 @@ +--- +title: Product Relations feature overview +description: Product Relations is a feature that allows grouping products by attributes for easier navigation and accessibility. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/product-relations-feature-overview +originalArticleId: e3195022-f1fb-492c-9b99-3da32dab77c3 +redirect_from: + - /2021080/docs/product-relations-feature-overview + - /2021080/docs/en/product-relations-feature-overview + - /docs/product-relations-feature-overview + - /docs/en/product-relations-feature-overview + - /2021080/docs/product-relations + - /2021080/docs/en/product-relations + - /docs/product-relations + - /docs/en/product-relations + - /docs/scos/user/features/202200.0/product-relations-feature-overview.html + - /docs/scos/user/features/202204.0/product-relations-feature-overview.html +--- + +The *Product Relations* feature lets product catalog managers create logical relations between products based on their actual properties. Product relations are displayed on the Storefront to achieve multiple purposes: +- Promote products in cart. +- Recommend product alternatives. +- Display comparable or additional products to the product a customer is viewing. + +Product relations are established only between abstract products. An abstract product can have multiple product relations. + +To learn how a Back Office user can create a product relation, see [Creating a product relation](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/view-product-relations.html). + +A developer can import product relations. + +## Product relation types + +A product relation type defines how a product relation is displayed on Storefront. The following product relation types are shipped with the feature: Related products and Upselling. + +With Related products, [related products](#product-types-in-product-relations) are displayed on the product details page of the [product owning the relation](#product-types-in-product-relations). + + +
    + +
    + +With Upselling, when the product owing the relation is added to the cart, related products are displayed on the **Cart** page. + + +
    + +
    + +A product catalog manager can select a product relation type when [creating](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/view-product-relations.html) or [editing](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/edit-product-relations.html) a product relation in the Back Office. + +## Product types in product relations + +In product relations, there are two types of products: a product owning a relation and a related product. + +There is always only one product that owns a product relation. It is selected manually from the product catalog. + +There can be multiple related products in a product relation. Related products are added automatically based on the [related product rules](#related-product-rules). + +On the Storefront, the related products are displayed on the product details page of the product owning the relation. Product relations do not work the other way around. In other words, the product owning the relation is not displayed on the product details pages of its related products. + +## Related product rules + +A related product rule is a condition that must be fulfilled by a product to be automatically added to related products of a product relation. The rules are defined as queries, which are built using the Query Builder in the Back Office. + +A product relation can have one or more rules. Example: + +| PARAMETER | RELATION OPERATOR | VALUE | +| --- | --- | --- | +| Brand | equal | Sony | +| Category | equal | Cameras | + +In this example, only the products that belong to the *Cameras* category and the *Sony* brand are added to related products. + +You can combine the rules using *AND* and *OR* combination operators. When several rules are combined with the AND operator, all of them must be fulfilled for a product to be added to related products. When several rules are combined with the OR operator, at least one of them must be fulfilled for the product to be added to related products. + +In the following example, for a product to be added to related products, it must belong to both the *Sony* brand and *Cameras* category. + +![And combination operator](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Relations/Product+Relations+Feature+Overview/202006.0/and-combination-operator.png) + +In the following example, for a product to be added to related products, it must belong to at least the *Sony* brand or *Cameras* category. + +![Or combination operator](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Relations/Product+Relations+Feature+Overview/202006.0/or-combination-operator.png) + +{% info_block infoBox "Info" %} + +When rules are combined by the OR operator, they do not exclude each other. If a product fulfills both such rules, it's still added to related products. In the previous example, a product must fulfill at least one of the rules to be added to related products. However, fulfilling both of them still adds it to related products. + +{% endinfo_block %} + +### Rule groups + +When you have a big product catalog, you might want to use rule groups to make the selection of related products more precise. A rule group is a separate set of rules with its own combination operator. + +![Rule group]( https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Relations/Product+Relations+Feature+Overview/202006.0/rule-group.png) + +With the rule groups, you can build multiple levels of rule hierarchy. When a product is evaluated against the rules, it's evaluated on all the levels of the hierarchy you build. On each level, there can be both rules and rule groups. + +![Rule group hierarchy](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Product+Management/Product+Relations/Product+Relations+Feature+Overview/202006.0/rule-group-hierarchy.png) + +When a product is evaluated on a level that has a rule and a rule group, the rule group is treated as a single rule. The following diagram shows how a product is evaluated against the rules from the previous screenshot. + +
    Product evaluation diagram + +![product-relation-rule-hierarchy](https://confluence-connect.gliffy.net/embed/image/04eed8c7-8608-472f-8c74-9510d2449487.png?utm_medium=live&utm_source=custom) + +
    + +### Related product updates + +After you save a product relation, the products that fulfill the defined rules are added to related products. If you want to keep the list of related products up to date with the changes in your product catalog that may happen in the future, you can set the product relation to be updated regularly. + +If selected, the product catalog is automatically evaluated against the defined rules on a regular basis. By default, the list of related products is updated every day at 02:30 GMT. At some point, if one or more related products no longer fulfill the rules, they are removed from related products. If there are new products fulfilling the rules, they are added to related products. + +If you do not select this option, the product catalog is evaluated against the defined rules only at the stage of product relation creation. + +A product catalog manager can select this option when [creating](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/view-product-relations.html) a product relation. + +A developer can do the following: + +- Manually update the list of related products by running the `console product-relation:update` command. +- Change the default behavior of the cronjob that updates related products in `config/Zed/cronjobs/jenkins.php`. + +## Store relation + +A product catalog manager can define the [stores](/docs/dg/dev/internationalization-and-multi-store/set-up-multiple-stores.html) each product relation is displayed in. + +If no store relation is defined for a product relation, it's not displayed on Storefront. + +Stores are defined when creating or editing a product relation in the Back Office. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Get a general idea of the Product Relations feature](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) | +| [Create product relations](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/view-product-relations.html) | +| [Edit product relations](/docs/pbc/all/product-relationship-management/{{page.version}}/manage-in-the-back-office/edit-product-relations.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES| +|---------|---------| +|[Install the Product Relations feature](/docs/pbc/all/product-relationship-management/{{page.version}}/install-and-upgrade/install-the-product-relations-glue-api.html) | [ProductRelation migration guide](/docs/pbc/all/product-relationship-management/{{page.version}}/install-and-upgrade/upgrade-the-productrelation-module.html) | +| [Install the Product Relations Glue API](/docs/pbc/all/product-relationship-management/{{page.version}}/install-and-upgrade/install-the-product-relations-glue-api.html) | [ProductRelationStorage migration guide](/docs/pbc/all/product-relationship-management/{{page.version}}/install-and-upgrade/upgrade-the-productrelationstorage-module.html) | diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/8select.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/8select.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/8select.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/8select.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/contentserv.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/contentserv.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/contentserv.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/contentserv.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/add-the-econda-tracking-code.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/add-the-econda-tracking-code.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/add-the-econda-tracking-code.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/add-the-econda-tracking-code.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/econda.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/econda.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/econda.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/econda.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/export-econda-data.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/export-econda-data.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/export-econda-data.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/export-econda-data.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/install-econda.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/install-econda.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/install-econda.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/install-econda.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/integrate-econda-cross-selling.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/integrate-econda-cross-selling.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/integrate-econda-cross-selling.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/integrate-econda-cross-selling.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/integrate-econda.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/integrate-econda.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/econda/integrate-econda.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/econda/integrate-econda.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/nosto.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/nosto.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/nosto.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/nosto.md diff --git a/docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/trbo.md b/docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/trbo.md similarity index 100% rename from docs/pbc/all/product-relationship-management/202512.0/third-party-integrations/trbo.md rename to docs/pbc/all/product-relationship-management/202602.0/third-party-integrations/trbo.md diff --git a/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md b/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md deleted file mode 100644 index 64e773093ac..00000000000 --- a/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Product Rating and Reviews feature -description: The guide walks you through the process of installing the Product Reviews feature in your project. -last_updated: Aug 1, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-rating-reviews-feature-integration -originalArticleId: a5fd5363-2839-406e-a29e-ba175b46592a -redirect_from: - - /2021080/docs/product-rating-reviews-feature-integration - - /2021080/docs/en/product-rating-reviews-feature-integration - - /docs/product-rating-reviews-feature-integration - - /docs/en/product-rating-reviews-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html - - /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.html -related: - - title: Glue API - Product rating & reviews feature integration - link: docs/pbc/all/ratings-reviews/page.version/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.html - - title: Product Rating & Reviews feature overview - link: docs/pbc/all/ratings-reviews/page.version/ratings-and-reviews.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md b/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md deleted file mode 100644 index 5f5c039daa5..00000000000 --- a/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Rating and Reviews + Product Group feature -description: Learn how to install the Product Rating and Reviews + Product Group feature to a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md b/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md deleted file mode 100644 index 64e773093ac..00000000000 --- a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Product Rating and Reviews feature -description: The guide walks you through the process of installing the Product Reviews feature in your project. -last_updated: Aug 1, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/product-rating-reviews-feature-integration -originalArticleId: a5fd5363-2839-406e-a29e-ba175b46592a -redirect_from: - - /2021080/docs/product-rating-reviews-feature-integration - - /2021080/docs/en/product-rating-reviews-feature-integration - - /docs/product-rating-reviews-feature-integration - - /docs/en/product-rating-reviews-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html - - /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.html -related: - - title: Glue API - Product rating & reviews feature integration - link: docs/pbc/all/ratings-reviews/page.version/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.html - - title: Product Rating & Reviews feature overview - link: docs/pbc/all/ratings-reviews/page.version/ratings-and-reviews.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md b/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md deleted file mode 100644 index e9e5158a543..00000000000 --- a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Install the Product Rating and Reviews Glue API -description: This guide contains step-by-step instructions on integrating Product Rating & Reviews API feature into a Spryker-based project. -last_updated: Jul 18, 2023 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-product-rating-reviews-feature-integration -originalArticleId: 6634ada1-2f5a-454b-a5b3-9319b7e90cbf -redirect_from: - - /2021080/docs/glue-api-product-rating-reviews-feature-integration - - /2021080/docs/en/glue-api-product-rating-reviews-feature-integration - - /docs/glue-api-product-rating-reviews-feature-integration - - /docs/en/glue-api-product-rating-reviews-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-product-rating-and-reviews-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-product-rating-and-reviews-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-product-rating-and-reviews-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-product-rating-and-reviews-feature-integration.html - - /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.html - -related: - - title: Product Rating and Reviews feature integration - link: docs/pbc/all/ratings-reviews/page.version/install-and-upgrade/install-the-product-rating-and-reviews-feature.html - - title: Retrieving abstract products - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html - - title: "Glue API: Retrieve concrete products" - link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-rating-and-reviews-glue-api.md %} diff --git a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md b/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md deleted file mode 100644 index 5f5c039daa5..00000000000 --- a/docs/pbc/all/ratings-reviews/202410.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Rating and Reviews + Product Group feature -description: Learn how to install the Product Rating and Reviews + Product Group feature to a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202507.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md b/docs/pbc/all/ratings-reviews/202507.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md deleted file mode 100644 index 5f5c039daa5..00000000000 --- a/docs/pbc/all/ratings-reviews/202507.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Product Rating and Reviews + Product Group feature -description: Learn how to install the Product Rating and Reviews + Product Group feature to a Spryker project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/import-file-details-product-review.csv.md b/docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/import-file-details-product-review.csv.md similarity index 96% rename from docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/import-file-details-product-review.csv.md rename to docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/import-file-details-product-review.csv.md index 7a8c764ddf6..8506dedf330 100644 --- a/docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/import-file-details-product-review.csv.md +++ b/docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/import-file-details-product-review.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-reviewcsv originalArticleId: f404c07b-fa94-4e85-97e1-7aac3f282de8 redirect_from: + - /docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/import-file-details-product-review.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-review.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-review.csv.html - /docs/pbc/all/ratings-reviews/202311.0/import-and-export-data/file-details-product-review.csv.html diff --git a/docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/ratings-and-reviews-data-import.md b/docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/ratings-and-reviews-data-import.md similarity index 76% rename from docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/ratings-and-reviews-data-import.md rename to docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/ratings-and-reviews-data-import.md index 87bb9a5b89d..c12e870fe0d 100644 --- a/docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/ratings-and-reviews-data-import.md +++ b/docs/pbc/all/ratings-reviews/202602.0/import-and-export-data/ratings-and-reviews-data-import.md @@ -4,8 +4,7 @@ description: Learn all about data import files for the Ratings and Reviews Featu template: concept-topic-template last_updated: Jul 23, 2023 redirect_from: -- /docs/pbc/all/ratings-reviews/202204.0/import-and-export-data/ratings-and-reviews-data-import.html + - /docs/pbc/all/ratings-reviews/202512.0/import-and-export-data/ratings-and-reviews-data-import.html + - /docs/pbc/all/ratings-reviews/202204.0/import-and-export-data/ratings-and-reviews-data-import.html --- - - To learn how data import works and about different ways of importing data, see [Data import](/docs/dg/dev/data-import/{{page.version}}/data-import.html). This section describes the data import files that are used to import data related to the Ratings and Reviews PBC: ["Import file details: product_review.csv"](/docs/pbc/all/ratings-reviews/{{page.version}}/import-and-export-data/import-file-details-product-review.csv.html). diff --git a/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md b/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md new file mode 100644 index 00000000000..e69de0abd53 --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.md @@ -0,0 +1,22 @@ +--- +title: Install the Product Rating and Reviews feature +description: The guide walks you through the process of installing the Product Reviews feature in your project. +last_updated: Aug 1, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/product-rating-reviews-feature-integration +originalArticleId: a5fd5363-2839-406e-a29e-ba175b46592a +redirect_from: + - /2021080/docs/product-rating-reviews-feature-integration + - /2021080/docs/en/product-rating-reviews-feature-integration + - /docs/product-rating-reviews-feature-integration + - /docs/en/product-rating-reviews-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/product-rating-and-reviews-feature-integration.html + - /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-feature.html +related: + - title: Glue API - Product rating & reviews feature integration + link: docs/pbc/all/ratings-reviews/page.version/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.html + - title: Product Rating & Reviews feature overview + link: docs/pbc/all/ratings-reviews/page.version/ratings-and-reviews.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md b/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md similarity index 100% rename from docs/pbc/all/ratings-reviews/202404.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md rename to docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-glue-api.md diff --git a/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md b/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md new file mode 100644 index 00000000000..9073c78b69f --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Product Rating and Reviews + Product Group feature +description: Learn how to install the Product Rating and Reviews + Product Group feature to a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/ratings-reviews/202507.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.html + - /docs/pbc/all/ratings-reviews/202204.0/install-and-upgrade/install-the-product-rating-and-reviews-product-group-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-product-group-product-rating-and-reviews-feature.md %} diff --git a/docs/pbc/all/ratings-reviews/202512.0/manage-product-reviews-in-the-back-office.md b/docs/pbc/all/ratings-reviews/202602.0/manage-product-reviews-in-the-back-office.md similarity index 100% rename from docs/pbc/all/ratings-reviews/202512.0/manage-product-reviews-in-the-back-office.md rename to docs/pbc/all/ratings-reviews/202602.0/manage-product-reviews-in-the-back-office.md diff --git a/docs/pbc/all/ratings-reviews/202512.0/manage-using-glue-api/glue-api-manage-product-reviews.md b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-manage-product-reviews.md similarity index 98% rename from docs/pbc/all/ratings-reviews/202512.0/manage-using-glue-api/glue-api-manage-product-reviews.md rename to docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-manage-product-reviews.md index be1d94b3a2b..b973ac03f4a 100644 --- a/docs/pbc/all/ratings-reviews/202512.0/manage-using-glue-api/glue-api-manage-product-reviews.md +++ b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-manage-product-reviews.md @@ -6,7 +6,8 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-product-ratings-and-reviews originalArticleId: e712d25f-b084-4fac-ac5f-cbb46e0947cb redirect_from: - - /docs/scos/dev/glue-api-guides/202311.0/managing-products/managing-product-ratings-and-reviews.html + - /docs/pbc/all/ratings-reviews/202512.0/manage-using-glue-api/glue-api-manage-product-reviews.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/managing-product-ratings-and-reviews.html - /docs/pbc/all/ratings-reviews/202311.0/manage-using-glue-api/manage-product-reviews-using-glue-api.html - /docs/pbc/all/ratings-reviews/202204.0/manage-using-glue-api/glue-api-manage-product-reviews.html related: diff --git a/docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md similarity index 98% rename from docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md rename to docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md index e2fc4b5771c..a6206ff43ab 100644 --- a/docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md +++ b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.md @@ -4,6 +4,7 @@ description: Learn how to retrieve product reviews when retrieving abstract prod last_updated: Sep 2, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.html - /docs/pbc/all/ratings-reviews/202311.0/manage-using-glue-api/retrieve-product-reviews-when-retrieving-abstract-products.html - /docs/pbc/all/ratings-reviews/202204.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-abstract-products.html --- diff --git a/docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md similarity index 98% rename from docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md rename to docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md index a0c2a99ad46..680eadb3e14 100644 --- a/docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md +++ b/docs/pbc/all/ratings-reviews/202602.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.md @@ -4,6 +4,7 @@ description: Retrieve product review information about concrete products using t last_updated: Sep 2, 2022 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/ratings-reviews/202507.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.html - /docs/pbc/all/ratings-reviews/202311.0/manage-using-glue-api/retrieve-product-reviews-when-retrieving-concrete-products.html - /docs/pbc/all/ratings-reviews/202204.0/manage-using-glue-api/glue-api-retrieve-product-reviews-when-retrieving-concrete-products.html --- diff --git a/docs/pbc/all/ratings-reviews/202512.0/ratings-and-reviews.md b/docs/pbc/all/ratings-reviews/202602.0/ratings-and-reviews.md similarity index 98% rename from docs/pbc/all/ratings-reviews/202512.0/ratings-and-reviews.md rename to docs/pbc/all/ratings-reviews/202602.0/ratings-and-reviews.md index 515d9297521..4f8a7f9d8e3 100644 --- a/docs/pbc/all/ratings-reviews/202512.0/ratings-and-reviews.md +++ b/docs/pbc/all/ratings-reviews/202602.0/ratings-and-reviews.md @@ -4,6 +4,7 @@ last_updated: Jul 29, 2022 description: Everything you need to know about the Ratings and Reviews feature within Spryker Cloud Commerce OS. template: concept-topic-template redirect_from: + - /docs/pbc/all/ratings-reviews/202512.0/ratings-and-reviews.html - /2021080/docs/product-rating-reviews-feature-overview - /2021080/docs/en/product-rating-reviews-feature-overview - /docs/product-rating-reviews-feature-overview diff --git a/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/bazaarvoice.md b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/bazaarvoice.md new file mode 100644 index 00000000000..e13cf67994c --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/bazaarvoice.md @@ -0,0 +1,43 @@ +--- +title: Bazaarvoice +description: Find out how you can integrate and use Spryker third party integration Bazaarvoice in your Spryker shop +template: howto-guide-template +last_updated: Nov 21, 2023 +redirect_from: + - docs/aop/user/apps/bazaarvoice.html + - docs/acp/user/apps/bazaarvoice.html + - docs/pbc/all/ratings-reviews/third-party-integrations/bazaarvoice.html + - /docs/pbc/all/ratings-reviews/202204.0/third-party-integrations/bazaarvoice.html +--- + +![Bazaarvoice](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/ratings-reviews/third-party-integrations/bazaarvoice/bazaarvoice.png) + +The [Bazaarvoice](https://www.bazaarvoice.com/?ref=spryker-documentation) app lets you collect and add user-generated content (UGC) to your product pages. + +{% wistia fhyuouxbpp 960 720 %} + +The Bazaarvoice service offers the following UGC: + +- [Rating summaries](https://docs.bazaarvoice.com/articles/ratings-reviews/display_integration/a/rating-summary?ref=spryker-documentation), or star ratings +- [Product reviews](https://docs.bazaarvoice.com/articles/#!ratings-reviews/display_integration/a/reviews?ref=spryker-documentation) + + +Bazaarvoice uses the content syndication approach, which means that stores using Bazaarvoice republish each others' content. For example, if a store within the Bazaarvoice's network has got a new product review, this review is shared across all other stores in the network that also have this product. + +{% info_block warningBox "Important" %} + +To enable Bazaarvoice to match your products to products in other stores and upload product reviews into your store, you must use UPCs or EANs as unique identifiers for your products. + +{% endinfo_block %} + +When you connect Bazaarvoice, the app puts JavaScrip tags into your store, and the JavaScript code tells the app where to insert the Bazaarvoice content—reviews, star ratings, or questions and answers. + +{% info_block infoBox "Info" %} + +If you have Bazaarvoice integrated, the Spryker default the [Ratings and Reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) feature is turned off. This means that ratings and reviews collected with the default Spryker Product Ratings and Reviews feature are replaced with the BazzareVoice ratings and reviews. + +{% endinfo_block %} + +## Next step + +[Integrate Bazaarvoice](/docs/pbc/all/ratings-reviews/{{page.version}}/third-party-integrations/integrate-bazaarvoice.html) diff --git a/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/configure-bazaarvoice.md b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/configure-bazaarvoice.md new file mode 100644 index 00000000000..aaf4e14bd02 --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/configure-bazaarvoice.md @@ -0,0 +1,92 @@ +--- +title: Configure Bazaarvoice +description: Find out how you can configure Spryker third party integration Bazaarvoice in your Spryker shop. +template: howto-guide-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/pbc/all/ratings-reviews/third-party-integrations/configure-bazaarvoice.html + - /docs/pbc/all/ratings-reviews/202204.0/third-party-integrations/configure-bazaarvoice.html +--- + +After you have [integrated the Bazaarvoice app](/docs/pbc/all/ratings-reviews/{{page.version}}/third-party-integrations/integrate-bazaarvoice.html), you can configure the following for your store: +- Bazaarvoice services you need +- Stores you want the Bazaarvoice user-generated content (UGC) to be displayed in + +To configure the Bazaarvoice the app, do the followoing: + +1. In your store's Back Office, go to **Apps > Catalog**. +2. Click **Bazaarvoice**. +3. In the top right corner of the Bazaarvoice app details page, click **Connect app**. + This takes you to the Bazaarvoice site with the signup form. +4. Fill out the Bazaarvoice signup form and submit it. + You should receive the Bazaarvoice credentials. +5. Go back to your store's Back Office, to the Bazaarvoice app details page. +6. In the top right corner of the Bazaarvoice app details page, click **Configure**. +7. In the **Configurations** pane, enter the credentials you received from Bazaarvoice. + +![bv-configuration-page](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/ratings-reviews/third-party-integrations/configure-bazaarvoice/bv-config-page.png) + +The following table explains where you can take the values for populating the fields. + +
    + +| Field | Where can you get this information in the Bazaarvoice Portal | +|----------|:-------------:| +| Client name | This is the instance's name you want to connect to Spryker. You can find your list of instances in the [client selector](https://portal.bazaarvoice.com/configurations/sitemanager/clientselector). | +| Site ID | The Site ID can be found on [this page](https://config.portal.bazaarvoice.com/siteManager). Select the Site ID that matches the deployment zone you want to connect to your Spryker project. | +| API Key | Select one of your API keys from [this page](https://portal.bazaarvoice.com/developer-tools/api-keys). If your account does not contain any API key, watch the video below for the details on how to create one. | + +
    + +The following video explains how you can create an API key if it's not available in your account: + +
    + +
    + +8. Optional: To track whether the products that have more UGC have a higher conversion rate than those without many ratings and reviews, in **sFTP Settings**, fill out the following fields: + +| FIELD | DESCRIPTION | +|----------|:--------------------------------------------------:| +| Username | The user name to connect to Bazaarvoice's sFTP. | +| Password | The password to connect to Bazaarvoice's sFTP. | +| Region | The region where your data is hosted on Bazaarvoice. | + +{% info_block warningBox "Credentials and region information" %} + +If you are unsure of your credentials or the region, reach out to the internal Bazaarvoice contact that manages your product feed. Alternatively, you can open a support case with [Bazaarvoice](https://support.bazaarvoice.com/). + +{% endinfo_block %} + +![bv-sftp-settings](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/ratings-reviews/third-party-integrations/configure-bazaarvoice/bv-sftp-settings.png) + +9. In **Settings > Select Services**, select the services that you need: + - RATINGS & REVIEWS: These are the accumulated star ratings along with reviews that are displayed on the product details page. + + - INLINE RATINGS: This service displays the star ratings directly in these lists of products, for example, in search results, in the product catalog, etc. + +10. To configure the stores where you want to turn on the Bazaarvoice app, in **Settings > Store**, select the stores. + +11. Click **Save**. + +This adds the Bazaarvoice app to your store. It usually takes Bazaarvoice a few days to process your product feed. Therefore, you should see the external ratings and reviews from Bazaarvoice in about 2-3 days after you connected the app. + +{% info_block infoBox "Info" %} + +You can do the administration work on the Bazaarvoice reviews from the [Bazaarvoice portal](https://portal.bazaarvoice.com/signin?ref=spryker-documentation). For example, you can approve individual reviews. See [Workbench overview](https://docs.bazaarvoice.com/articles/ratings-reviews/workbench_overview) for details on how you can manage reviews from the Bazaarvoice portal. + +{% endinfo_block %} + +## Retain Bazaarvoice configuration after a destructive deployment + +{% info_block errorBox "" %} +[Destructive deployment](https://spryker.com/docs/dg/dev/acp/retaining-acp-apps-when-running-destructive-deployments.html) permanently deletes the configuration of Bazaarvoice. + +To run a destructive deployment, follow the steps: +1. Disconnect Bazaarvoice. +2. Run a destructive deployment. +3. Reconnect Bazaarvoice. + +{% endinfo_block %} diff --git a/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/disconnect-bazaarvoice.md b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/disconnect-bazaarvoice.md new file mode 100644 index 00000000000..e4d2b6ca8c6 --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/disconnect-bazaarvoice.md @@ -0,0 +1,19 @@ +--- +title: Disconnect Bazaarvoice +description: Find out how you can disconnect Spryker third party integration Bazaarvoice in your Spryker shop. +template: howto-guide-template +redirect_from: +- /docs/pbc/all/ratings-reviews/202204.0/third-party-integrations/disconnect-bazaarvoice.html +last_updated: Nov 21, 2023 +--- + +You can always disconnect the Bazaarvoice app from your store. For example, after the trial period, you might decide not to continue with the app. + +Disconnecting the app removes the Bazaarvoice UGC and automatically restores the default Spryker [Product Ratings and Reviews](/docs/pbc/all/ratings-reviews/{{page.version}}/ratings-and-reviews.html) feature. + +To disconnect the Bazaarvoice app from your store, do the following + +1. In your store's Back Office, go to **Apps > Catalog**. +2. Click **Bazaarvoice**. +3. On the Bazaarvoice app details page, next to the **Configure** button, hold the pointer over and click **Disconnect**. +4. In the message that appears, click **Disconnect**. This removes the Bazaarvoice configurations from the Back Office and Storefront. diff --git a/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/integrate-bazaarvoice.md b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/integrate-bazaarvoice.md new file mode 100644 index 00000000000..7bb898b279a --- /dev/null +++ b/docs/pbc/all/ratings-reviews/202602.0/third-party-integrations/integrate-bazaarvoice.md @@ -0,0 +1,462 @@ +--- +title: Integrate Bazaarvoice +description: Find out how you can integrate Spryker third party integration Bazaarvoice in your Spryker shop. +template: howto-guide-template +last_updated: Jan 09, 2024 +redirect_from: + - /docs/pbc/all/ratings-reviews/third-party-integrations/integrate-bazaarvoice.html + - /docs/pbc/all/ratings-reviews/202204.0/third-party-integrations/integrate-bazaarvoice.html +--- +To integrate Bazaarvoice, follow these guidelines. + +## Prerequisites + +- Before you can integrate Bazaarvoice, make sure that your project is ACP-enabled. See [App Composition Platform installation](/docs/acp/user/app-composition-platform-installation.html) for details. + +- The Bazaarvoice app requires the following Spryker modules: + +- `spryker/asset: ^1.6.0` +- `spryker/asset-storage: ^1.2.1` +- `spryker/merchant-profile: ^1.2.1` (Marketplace only) +- `spryker/oms: ^11.25.0` +- `spryker/product-review: ^2.11.2` +- `spryker/product-review-gui: ^1.6.0` +- `spryker-shop/asset-widget: ^1.0.0` +- `spryker-shop/cart-page: ^3.38.0` +- `spryker-shop/product-detail-page: ^3.19.1` +- `spryker-shop/product-category-widget: ^1.7.0` +- `spryker-shop/shop-ui: ^1.71.0` +- `spryker-shop/checkout-page: ^3.23.0` +- `spryker-shop/merchant-page: ^1.1.0` (Marketplace only) +- `spryker-shop/merchant-profile-widget: ^1.1.0` (Marketplace only) +- `spryker-shop/merchant-widget: ^1.3.0` (Marketplace only) +- `spryker-shop/payment-page: ^1.3.0` + +Make sure your installation meets these requirements. + +## Integrate Bazaarvoice + +To integrate Bazaarvoice, follow these steps. + +### 1. Add the Bazaarvoice domain to your allowlist + +To enable your customers to leave reviews on your products, you must add the Bazaarvoice domain to your **Content Security Policy** allowlist. + +To do that, do one of the following: +1. Change the `deploy.yml` file: + +```yml +image: + environment: + SPRYKER_AOP_APPLICATION: '{ + "APP_DOMAINS": [ + "*.bazaarvoice.com", + ... + ], + ... + }' +``` + +Alternatively, you may add the domain to the allowlist from the `config/Shared/config_default.php` file. If you updated the `deploy.yml` file, you can ignore this step. + +```php +$config[KernelConstants::DOMAIN_WHITELIST][] = '*.bazaarvoice.com'; +``` + +### 2. Add markup to custom templates + +The Bazaarvoice app takes data on products from the Storefront pages—for example, the product details page, or the *Catalog* page. +To get necessary data from the pages, schemas from [Schema.org](https://schema.org/) are used. +By default, the necessary markups are already available in the Yves templates. + +If you have custom Yves templates or make your own frontend, add the markups required for the Bazaarvoice app according to the following tables. + +#### Dynamic catalog collection (DCC) for products + +Core template: `SprykerShop/Yves/ProductDetailPage/Theme/default/views/pdp/pdp.twig` + +| SCHEMA.ORG PROPERTY | BAZAARVOICE PROPERTY | Required | Example | +|------------------------------|----------------------|----------|----------------------------------------------------------------------------------| +| product.sku | productId | Yes | 012_3456789 | +| product.name | productName | Yes | Camera Pro 123 | +| product.description | productDescription | No | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | +| product.image | productImageURL | Yes | `https://www.example.com/img/gallery/camera-pro-123.jpg` (always use absolute URL) | +| product.url | productPageURL | Yes | `https://www.example.com/office-chair` (always use absolute URL) | +| product.brand.name | brandId, brandName | No | Xyz Brand | +| product.category | categoryPath | No | [{"id":1,"name":"Cameras & Camcorders"},{"id":4,"name":"Digital Cameras"}] | +| product.gtin12 | upcs | No | 123456789876 | +| product.inProductGroupWithID | family | No | 6 | + +Example: + +```html +
    + + + + + + +
    + + +
    + + + +
    +``` + +#### DCC for merchants + +{% info_block infoBox "Note" %} + +Since merchants don't have their own entities in the Bazaarvoice service, products with specific IDs or merchant references are used instead. + +{% endinfo_block %} + +Core template: `SprykerShop/Yves/MerchantProfileWidget/Theme/default/components/molecules/merchant-profile/merchant-profile.twig` + +| SCHEMA.ORG PROPERTY | BAZAARVOICE PROPERTY | Required | Example | +|-------------------------|----------------------|----------|------------------------------------------------------------------------------| +| organization.identifier | productId | Yes | MER000001 | +| organization.name | productName | Yes | Xyz Merchant | +| organization.logo | productImageURL | Yes | `https://www.example.com/merchant/merchant-logo.png` (always use absolute URL) | + +Example: + +```html +
    + + + +
    +``` + +#### Ratings and reviews (for Product) + +Core templates: +- `SprykerShop/Yves/ProductDetailPage/Theme/default/views/pdp/pdp.twig` +- `SprykerShop/Yves/ProductReviewWidget/Theme/default/views/pdp-review-rating/pdp-review-rating.twig` +- `SprykerShop/Yves/ProductReviewWidget/Theme/default/components/organisms/review-summary/review-summary.twig` + +Example: + +```html +
    + + +
    + + +
    + +
    +
    +``` + +#### Ratings and reviews (for Merchant) + +Core template: +`SprykerShop/Yves/MerchantProfileWidget/Theme/default/components/molecules/merchant-profile/merchant-profile.twig` + +Example: + +```html +
    + + + +
    + +
    +
    +``` + +#### Inline ratings + +Core templates: +- `SprykerShop/Yves/ShopUi/Theme/default/components/molecules/product-item/product-item.twig` +- `SprykerShop/Yves/ProductReviewWidget/Theme/default/views/product-review-display/product-review-display.twig` +- `SprykerShop/Yves/ProductReviewWidget/Theme/default/components/molecules/rating-selector/rating-selector.twig` + +Example: + +```html +
    + + +
    + + + + +
    +
    +``` + +### 3. Configure a message broker + +1. Add the following configuration to `config/Shared/config_default.php`: + +```php +use Generated\Shared\Transfer\AddReviewsTransfer; +use Generated\Shared\Transfer\OrderStatusChangedTransfer; +use Spryker\Shared\MessageBroker\MessageBrokerConstants; +use Spryker\Zed\MessageBrokerAws\MessageBrokerAwsConfig; + +//... + +$config[MessageBrokerConstants::MESSAGE_TO_CHANNEL_MAP] = [ + //... + AssetAddedTransfer::class => 'asset-commands', + AssetUpdatedTransfer::class => 'asset-commands', + AssetDeletedTransfer::class => 'asset-commands', + OrderStatusChangedTransfer::class => 'order-events', + AddReviewsTransfer::class => 'product-review-commands', +]; + +$config[MessageBrokerConstants::CHANNEL_TO_RECEIVER_TRANSPORT_MAP] = [ + //... + 'asset-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, + 'product-review-commands' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, +]; + +$config[MessageBrokerConstants::CHANNEL_TO_SENDER_TRANSPORT_MAP] = [ + //... + 'order-events' => MessageBrokerAwsConfig::HTTP_CHANNEL_TRANSPORT, +]; +``` + +#### 2. Add a message handler + +Add the following plugin to `src/Pyz/Zed/MessageBroker/MessageBrokerDependencyProvider.php`: + +```php + /** + * @return array<\Spryker\Zed\MessageBrokerExtension\Dependency\Plugin\MessageHandlerPluginInterface> + */ + public function getMessageHandlerPlugins(): array + { + return [ + //..., + new AssetMessageHandlerPlugin(), + new ProductReviewAddReviewsMessageHandlerPlugin(), + ]; + } +``` + +#### 3. Configure channels + +Add the following code to `src/Pyz/Zed/MessageBroker/MessageBrokerConfig.php`: + +```php +namespace Pyz\Zed\MessageBroker; + +use Spryker\Zed\MessageBroker\MessageBrokerConfig as SprykerMessageBrokerConfig; + +class MessageBrokerConfig extends SprykerMessageBrokerConfig +{ + /** + * @return array + */ + public function getDefaultWorkerChannels(): array + { + return [ + //... + 'asset-commands', + 'product-review-commands', + ]; + } + + //... +} +``` + +### 4. Configure synchronization + +To configure Synchronization, follow these steps: + +#### 1. Configure plugins in `Publisher` + +Add the following plugin to `src/Pyz/Zed/Publisher/PublisherDependencyProvider.php`: + +```php +namespace Pyz\Zed\Publisher; + +use Spryker\Zed\AssetStorage\Communication\Plugin\Publisher\Asset\AssetDeletePublisherPlugin; +use Spryker\Zed\AssetStorage\Communication\Plugin\Publisher\Asset\AssetWritePublisherPlugin; +use Spryker\Zed\Publisher\PublisherDependencyProvider as SprykerPublisherDependencyProvider; + +class PublisherDependencyProvider extends SprykerPublisherDependencyProvider +{ + /** + * @return array<\Spryker\Zed\PublisherExtension\Dependency\Plugin\PublisherPluginInterface> + */ + protected function getAssetStoragePlugins(): array + { + return [ + new AssetWritePublisherPlugin(), + new AssetDeletePublisherPlugin(), + ]; + } +} +``` + +#### 2. Configure plugins in `Synchronization` + +The following plugin must be added to `src/Pyz/Zed/Synchronization/SynchronizationDependencyProvider.php`: + +```php +namespace Pyz\Zed\Synchronization; + +use Spryker\Zed\AssetStorage\Communication\Plugin\Synchronization\AssetStorageSynchronizationDataPlugin; +use Spryker\Zed\Synchronization\SynchronizationDependencyProvider as SprykerSynchronizationDependencyProvider; + +class SynchronizationDependencyProvider extends SprykerSynchronizationDependencyProvider +{ + protected function getSynchronizationDataPlugins(): array + { + return [ + new AssetStorageSynchronizationDataPlugin(), + ]; + } +} +``` + +#### 3. Configure RabbitMq in `Client` + +The following plugin must be added to `src/Pyz/Client/RabbitMq/RabbitMqConfig.php`: + +```php +namespace Pyz\Client\RabbitMq; + +use Spryker\Client\RabbitMq\RabbitMqConfig as SprykerRabbitMqConfig; +use Spryker\Shared\AssetStorage\AssetStorageConfig; + +class RabbitMqConfig extends SprykerRabbitMqConfig +{ + protected function getSynchronizationQueueConfiguration(): array + { + return [ + AssetStorageConfig::ASSET_SYNC_STORAGE_QUEUE, + ]; + } +} +``` + +### 5. Receive ACP messages + +Now, you can start receiving ACP messages in SCOS. See [Receive messages](/docs/acp/user/receive-acp-messages.html) for details on how to do that. + +### 6. Configure OMS + +To configure OMS, follow these steps. + +#### 1. Extend command plugins + +Add the following plugin to `src/Pyz/Zed/Oms/OmsDependencyProvider.php`: + +```php +use Spryker\Zed\Oms\Communication\Plugin\Oms\Command\SendOrderStatusChangedMessagePlugin; + +// ... + +/** + * @param \Spryker\Zed\Kernel\Container $container + * + * @return \Spryker\Zed\Kernel\Container + */ +protected function extendCommandPlugins(Container $container): Container +{ + $container->extend(self::COMMAND_PLUGINS, function (CommandCollectionInterface $commandCollection) { + // ... + $commandCollection->add(new SendOrderStatusChangedMessagePlugin(), 'Order/RequestProductReviews'); + + return $commandCollection; + }); + } +``` + +#### 2. Update the OMS schema + +Adjust your OMS state machine configuration to trigger the `Order/RequestProductReviews` command according to your project's requirements. + +Here is an example with the `DummyPayment01.xml` process for the `deliver` event: + +```xml + + + + + + + + + + + + + +``` + +#### 3. Add order hydration plugin (Marketplace only) + +For a Marketplace project, add the following plugin to `src/Pyz/Zed/Sales/SalesDependencyProvider.php`: + +```php +use Spryker\Zed\MerchantProfile\Communication\Plugin\Sales\MerchantDataOrderHydratePlugin; + +// ... + +/** + * @return array<\Spryker\Zed\SalesExtension\Dependency\Plugin\OrderExpanderPluginInterface> + */ +protected function getOrderHydrationPlugins(): array +{ + return [ + // ... + new MerchantDataOrderHydratePlugin(), + ]; +} +``` + +### 7. Configure DataImport + +To configure DataImport, extend .CSV files. Do the following: + +1. Add the following data to `data/import/common/common/product_abstract.csv`: + +```csv +Add 2 columns, for example, attribute_key_7 and value_7 with UPCs, for example +attribute_key_7 = upcs, value_7 = 12345678 +``` + +2. Add the following data to `data/import/common/common/product_concrete.csv`: + +```csv +Add UPCs into columns, for example +attribute_key_2 = upcs, value_2 = 12345678 +update UPC for an abstract product with the same abstract_sku +``` + +3. Add the following data to `data/import/common/common/product_attribute_key.csv`: + +```csv +Add a new row with the data +upcs,0 to enable support of UPC +``` + +4. Add the following data to `data/import/common/common/product_management_attribute.csv`: + +```csv +Add a new row with the data +upcs,select,yes,yes,,UPCs,UPCs,, +``` + +## Next steps + +[Configure the Bazaarvoice app](/docs/pbc/all/ratings-reviews/{{page.version}}/third-party-integrations/configure-bazaarvoice.html) for your store. diff --git a/docs/pbc/all/ratings-reviews/202512.0/tutorials-and-howtos/howto-configure-product-reviews.md b/docs/pbc/all/ratings-reviews/202602.0/tutorials-and-howtos/howto-configure-product-reviews.md similarity index 100% rename from docs/pbc/all/ratings-reviews/202512.0/tutorials-and-howtos/howto-configure-product-reviews.md rename to docs/pbc/all/ratings-reviews/202602.0/tutorials-and-howtos/howto-configure-product-reviews.md diff --git a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md b/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md deleted file mode 100644 index 3534b9ee93b..00000000000 --- a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Quotation Process + Approval Process feature -description: Learn how to Install the Quotation Process + Approval Process features in your Spryker based project. -last_updated: Jan 25, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-approval-process-feature-integration -originalArticleId: 127edbbd-6c59-4aed-826f-66b7b41022c5 -redirect_from: - - /2021080/docs/quotation-process-approval-process-feature-integration - - /2021080/docs/en/quotation-process-approval-process-feature-integration - - /docs/quotation-process-approval-process-feature-integration - - /docs/en/quotation-process-approval-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-approval-process-feature-integration.html - - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-approval-process-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md b/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md deleted file mode 100644 index 955b4317540..00000000000 --- a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Quotation Process + Checkout feature -description: The guide describes the process of installing the Checkout + Quotation process feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md b/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md deleted file mode 100644 index 1b07c6451f4..00000000000 --- a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Install the Quotation Process feature -description: Learn how to install the Quotation Process feature in your Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-feature-integration -originalArticleId: 27d7dd23-8926-4ad2-b45d-fb3753e6d1a3 -redirect_from: - - /2021080/docs/quotation-process-feature-integration - - /2021080/docs/en/quotation-process-feature-integration - - /docs/quotation-process-feature-integration - - /docs/en/quotation-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/quotation-process-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-feature-integration.html - - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-feature.html -related: - - title: Install the Quotation Process Glue API - link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-glue-api.html - - title: Install the Quotation Process + Approval Process feature - link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html - - title: Install the Quotation Process + Multiple Carts feature - link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html - - title: Install the Checkout + Quotation Process feature - link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md b/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md deleted file mode 100644 index 61590654016..00000000000 --- a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Quotation Process + Multiple Carts feature -description: Learn how to integrate the Quotation Process + multiple carts feature GLUE API into a Spryker project -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-multiple-carts-feature-integration -originalArticleId: 21c3cf23-8dae-4a61-b89f-b2e668fa4c50 -redirect_from: - - /2021080/docs/quotation-process-multiple-carts-feature-integration - - /2021080/docs/en/quotation-process-multiple-carts-feature-integration - - /docs/quotation-process-multiple-carts-feature-integration - - /docs/en/quotation-process-multiple-carts-feature-integratio - - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-multiple-carts-feature-integration.html - - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-multiple-carts-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md b/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md deleted file mode 100644 index 3534b9ee93b..00000000000 --- a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Quotation Process + Approval Process feature -description: Learn how to Install the Quotation Process + Approval Process features in your Spryker based project. -last_updated: Jan 25, 2022 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-approval-process-feature-integration -originalArticleId: 127edbbd-6c59-4aed-826f-66b7b41022c5 -redirect_from: - - /2021080/docs/quotation-process-approval-process-feature-integration - - /2021080/docs/en/quotation-process-approval-process-feature-integration - - /docs/quotation-process-approval-process-feature-integration - - /docs/en/quotation-process-approval-process-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-approval-process-feature-integration.html - - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-approval-process-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md b/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md deleted file mode 100644 index 955b4317540..00000000000 --- a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Quotation Process + Checkout feature -description: The guide describes the process of installing the Checkout + Quotation process feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-uuid-generation-console-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md b/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md deleted file mode 100644 index 61590654016..00000000000 --- a/docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Install the Quotation Process + Multiple Carts feature -description: Learn how to integrate the Quotation Process + multiple carts feature GLUE API into a Spryker project -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-multiple-carts-feature-integration -originalArticleId: 21c3cf23-8dae-4a61-b89f-b2e668fa4c50 -redirect_from: - - /2021080/docs/quotation-process-multiple-carts-feature-integration - - /2021080/docs/en/quotation-process-multiple-carts-feature-integration - - /docs/quotation-process-multiple-carts-feature-integration - - /docs/en/quotation-process-multiple-carts-feature-integratio - - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-multiple-carts-feature-integration.html - - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-multiple-carts-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202512.0/import-and-export-data/file-details-quote-request-version.csv.md b/docs/pbc/all/request-for-quote/202602.0/import-and-export-data/file-details-quote-request-version.csv.md similarity index 100% rename from docs/pbc/all/request-for-quote/202512.0/import-and-export-data/file-details-quote-request-version.csv.md rename to docs/pbc/all/request-for-quote/202602.0/import-and-export-data/file-details-quote-request-version.csv.md diff --git a/docs/pbc/all/request-for-quote/202512.0/import-and-export-data/file-details-quote-request.csv.md b/docs/pbc/all/request-for-quote/202602.0/import-and-export-data/file-details-quote-request.csv.md similarity index 100% rename from docs/pbc/all/request-for-quote/202512.0/import-and-export-data/file-details-quote-request.csv.md rename to docs/pbc/all/request-for-quote/202602.0/import-and-export-data/file-details-quote-request.csv.md diff --git a/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md new file mode 100644 index 00000000000..73eacee3f75 --- /dev/null +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.md @@ -0,0 +1,17 @@ +--- +title: Install the Quotation Process + Approval Process feature +description: Learn how to Install the Quotation Process + Approval Process features in your Spryker based project. +last_updated: Jan 25, 2022 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-approval-process-feature-integration +originalArticleId: 127edbbd-6c59-4aed-826f-66b7b41022c5 +redirect_from: + - /docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html + - /2021080/docs/quotation-process-approval-process-feature-integration + - /2021080/docs/en/quotation-process-approval-process-feature-integration + - /docs/quotation-process-approval-process-feature-integration + - /docs/en/quotation-process-approval-process-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-approval-process-feature-integration.html + - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-approval-process-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202404.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md similarity index 100% rename from docs/pbc/all/request-for-quote/202404.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.md diff --git a/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md new file mode 100644 index 00000000000..410d64e70ed --- /dev/null +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-feature.md @@ -0,0 +1,26 @@ +--- +title: Install the Quotation Process feature +description: Learn how to install the Quotation Process feature in your Spryker based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-feature-integration +originalArticleId: 27d7dd23-8926-4ad2-b45d-fb3753e6d1a3 +redirect_from: + - /2021080/docs/quotation-process-feature-integration + - /2021080/docs/en/quotation-process-feature-integration + - /docs/quotation-process-feature-integration + - /docs/en/quotation-process-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/quotation-process-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-feature-integration.html + - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-feature.html +related: + - title: Install the Quotation Process Glue API + link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-glue-api.html + - title: Install the Quotation Process + Approval Process feature + link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html + - title: Install the Quotation Process + Multiple Carts feature + link: docs/pbc/all/request-for-quote/page.version/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html + - title: Install the Checkout + Quotation Process feature + link: docs/pbc/all/cart-and-checkout/page.version/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-glue-api.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-glue-api.md similarity index 100% rename from docs/pbc/all/request-for-quote/202410.0/install-and-upgrade/install-features/install-the-quotation-process-glue-api.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-glue-api.md diff --git a/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md new file mode 100644 index 00000000000..c5150b74bc0 --- /dev/null +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.md @@ -0,0 +1,17 @@ +--- +title: Install the Quotation Process + Multiple Carts feature +description: Learn how to integrate the Quotation Process + multiple carts feature GLUE API into a Spryker project +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-multiple-carts-feature-integration +originalArticleId: 21c3cf23-8dae-4a61-b89f-b2e668fa4c50 +redirect_from: + - /docs/pbc/all/request-for-quote/202507.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html + - /2021080/docs/quotation-process-multiple-carts-feature-integration + - /2021080/docs/en/quotation-process-multiple-carts-feature-integration + - /docs/quotation-process-multiple-carts-feature-integration + - /docs/en/quotation-process-multiple-carts-feature-integratio + - /docs/scos/dev/feature-integration-guides/202311.0/quotation-process-multiple-carts-feature-integration.html + - /docs/pbc/all/request-for-quote/202204.0/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quotation-process-multiple-carts-feature.md %} diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md similarity index 92% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md index 37acc76c9c4..cd62d43412e 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequest originalArticleId: 389e2366-30ea-4673-905d-5c1904d26cee redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.html - /2021080/docs/mg-quoterequest - /2021080/docs/en/mg-quoterequest - /docs/mg-quoterequest diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md similarity index 93% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md index ed7bf752f46..f6d4ac22f53 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequestagent originalArticleId: 0cad813f-35c3-4e52-8421-b7b97b989479 redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.html - /2021080/docs/mg-quoterequestagent - /2021080/docs/en/mg-quoterequestagent - /docs/mg-quoterequestagent diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md similarity index 93% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md index 7a8942b8ded..96b1f32a8d8 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequestagentpage originalArticleId: 479461ef-8500-4c8d-98f6-0a9288f9548f redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.html - /2021080/docs/mg-quoterequestagentpage - /2021080/docs/en/mg-quoterequestagentpage - /docs/mg-quoterequestagentpage diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md similarity index 93% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md index bf26f055261..4a3c445681d 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequestagentwidget originalArticleId: 0646a8b9-e816-40e8-95da-5ac1147f8ba8 redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.html - /2021080/docs/mg-quoterequestagentwidget - /2021080/docs/en/mg-quoterequestagentwidget - /docs/mg-quoterequestagentwidget diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md similarity index 93% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md index c1d15d7b2b7..a6fa4a1b3a1 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequestpage originalArticleId: 49398eed-5f0b-48db-a915-14f70ee81a82 redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.html - /2021080/docs/mg-quoterequestpage - /2021080/docs/en/mg-quoterequestpage - /docs/mg-quoterequestpage diff --git a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md similarity index 93% rename from docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md rename to docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md index 41b041f9339..365a41dae6f 100644 --- a/docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md +++ b/docs/pbc/all/request-for-quote/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-quoterequestwidget originalArticleId: ce9c0b14-5b78-455d-99a6-8b239aca416b redirect_from: + - /docs/pbc/all/request-for-quote/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.html - /2021080/docs/mg-quoterequestwidget - /2021080/docs/en/mg-quoterequestwidget - /docs/mg-quoterequestwidget diff --git a/docs/pbc/all/request-for-quote/202512.0/quotation-process-module-relations.md b/docs/pbc/all/request-for-quote/202602.0/quotation-process-module-relations.md similarity index 100% rename from docs/pbc/all/request-for-quote/202512.0/quotation-process-module-relations.md rename to docs/pbc/all/request-for-quote/202602.0/quotation-process-module-relations.md diff --git a/docs/pbc/all/request-for-quote/202602.0/request-for-quote.md b/docs/pbc/all/request-for-quote/202602.0/request-for-quote.md new file mode 100644 index 00000000000..1dc1c70bb34 --- /dev/null +++ b/docs/pbc/all/request-for-quote/202602.0/request-for-quote.md @@ -0,0 +1,233 @@ +--- +title: Request for Quote +description: Learn about Spryker request for quote feature for your B2B shops and how it can enhance your offerings to your customers. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/quotation-process-feature-overview +originalArticleId: 2fc8c00f-628b-485d-b00b-61bbb0b32973 +redirect_from: + - /docs/rfq-reference-information-shop-guide + - /docs/en/rfq-reference-information-shop-guide + - /docs/scos/user/features/202200.0/quotation-process-feature-overview.html + - /docs/scos/user/features/202311.0/quotation-process-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/quotation-process-feature-walkthrough/quotation-process-feature-walkthrough.html + - /docs/pbc/all/request-for-quote/request-for-quote.html + - /docs/pbc/all/request-for-quote/202204.0/request-for-quote.html +--- + +| DEFINITION | DESCRIPTION | +| --- | --- | +|Buyer | Company user who can create a Request for quote (RFQ) | +|Sales representative (sales rep) | A person who is eligible for reviewing the submitted RFQs | +|Shipment cost | Price calculated for the shipment services. | + +With the *Quotation Process* feature, the B2B customers can ask for special prices, and suppliers can get back to them with a compromise pricing suggestion. + +*Request for Quote (RFQ)* is a request that a B2B buyer sends to their suppliers stating that they want to get a quoted price on particular products with the details about the packaging and volumes they need. +Within the Spryker Commerce OS, RFQ is represented by the ability of a sales representative to see the list of quotes, check and edit them, thereby changing and overwriting the prices for the products, and view and edit shipment costs in the RFQ for a certain buyer. In turn, a buyer can create an RFQ from a shopping cart, add a note to it, and bid for lower prices, as well as define a delivery address and select a shipment method. An RFQ can also specify the timeline for delivery, the date when the proposal is to be submitted, and the history of the negotiations. +One of the RFQ features is a tool for creating special offers for buyers with limited validity. A sales representative can update the prices for products in the RFQ and set the exact time until which this offer is valid—for example, the 29 of December, 2019, 11:58 PM. If the buyer tries to proceed with this RFQ to checkout on the 29 of December, 2019, at 11:59 PM, then this RFQ will not be available. +![RFQ Validity](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Workflow+&+Process+Management/Quotation+process+and+RFQ/Quotation+Process+&+RFQ+Feature+Overview/valid-till.png) + +To view how to create and manage RFQs, see [Quotation process & RFQ on the Storefront](#quotation-process-and-rfq-on-the-storefront). + +## RFQ statuses + +The RFQ can have the following statuses: + +- `Draft`: The RFQ is successfully created but not sent to a sales representative or customer (see RFQ Workflows to understand the RFQ process). +- `Waiting`: The status appears after the RFQ has been sent to a sales representative. At this moment, the buyer can't edit the RFQ after it has been sent, but they can cancel it. +- `In Progress`: This status appears when the sales representative edits the RFQ. +- `Ready`: A buyer receives the RFQ with this status when the sales representative has finished editing and sent the RFQ back to the buyer. +- `Canceled`: Indicates a canceled RFQ. +- `Closed`: Appears when the customer has placed the order from the RFQ. + +## RFQ workflows + +The process of requesting the quote includes two workflows depending on the role the user has. A workflow is defined as the sequence of steps the user can go through to complete the process successfully. These are: + +- [Buyer workflow](#buyer-workflow) +- [Sales representative workflow](#sales-representative-workflow) + +### Buyer workflow + +A buyer can create a quote request from a shopping cart. + +To view how to create and manage RFQs, see [Quotation process & RFQ on the Storefront](#quotation-process-and-rfq-on-the-storefront). + +After submitting the request, RFQ gets to the status `Draft`. + +For the Draft RFQ, a buyer can do the following: +- Add one or multiple delivery addresses. +- Select shipment methods to quote request items. +- Check the version information. +- Edit, add, and remove products. +- Change product quantity and update meta information. + +Once the buyers are done editing the Draft RFQ, they can send it to a sales representative. After that, they wait until the RFQ gets processed by a sales representative. The status of the RFQ changes to `Waiting`. Request for Quote cannot be edited at this point. It can only be canceled. + +After the sales representative has processed the request, the buyer gets it back with the status `Ready`. At this point, if buyers are satisfied with such a request, they can convert the RFQ to the cart and after that, proceed to checkout. When the order is placed, the RFQ receives the `Closed` status. + +If they aren't satisfied and want to negotiate the price further, they can revise the RFQ and move it back to the `Draft` status. The RFQ obtains a new RFQ version. + +Schematically, the workflow is shown in the following diagram: +![Buyer's Workflow](https://confluence-connect.gliffy.net/embed/image/0dedd086-45ab-494d-a2f8-04c92501a229.png?utm_medium=live&utm_source=custom) + +### Sales representative workflow + +A sales representative can create an RFQ using two working procedures: +- By an [agent](/docs/pbc/all/user-management/{{page.version}}/base-shop/agent-assist-feature-overview.html) account. +- On behalf of a company user. + +#### By an agent account + +Being logged in to an Agent account, a sales representative has access to the list of all the RFQs within the company. The RFQs are sorted by date and are displayed in all statuses. A sales representative can revise the requests that are in the `Waiting` status. For the revising RFQ, a sales representative can perform the following actions: +- Change the meta information. +- Add and remove the products. +- Change product default price and quantity. +- Edit shipment details, including a shipment cost. +- Set the lifetime for a particular RFQ. + +*RFQ Life Time* restricts the buyer by date and time until which the RFQ is considered valid. If the buyer hasn't placed the order using the RFQ with Life Time, the RFQ automatically obtains the status `Closed`. + +Upon revising the RFQ, a new RFQ version is created. When the sales representative sends the RFQ back to the buyer, the buyer receives the RFQ with the status `Ready`. + +{% info_block infoBox "Info" %} + +A sales representative can quickly access the RFQs by a Quote Request Widget that displays the latest five requests for quotes that were updated except for those that are in the status Closed. You can configure the statuses for the RFQ you want to check in the widget on the project level. In the widget, the sales representative can check all the basic information for the RFQs. + +{% endinfo_block %} + +#### On behalf of a company user + +A sales representative can create an RFQ on behalf of any company user, then process it and even complete checkout. This option is especially convenient when, for example, a company user is busy or doesn't have access to an account. + + +The workflow with statuses for a sales representative is presented in the following schema: +![Sales Rep Workflow](https://confluence-connect.gliffy.net/embed/image/0dedd086-45ab-494d-a2f8-04c92501a229.png?utm_medium=live&utm_source=custom) + +When a sales representative creates an RFQ, it has the **Show the latest version to customer** checkbox empty by default. It means that the buyer cannot see the latest updated version of the RFQ (for example, with the changed prices) until the **Show the latest version to customer** checkbox is selected. The buyer can see the **In Progress** status for the RFQ. + +## RFQ versioning + +Versioning implies the management of multiple variants of the same RFQ, all of which have the same general details but include customized data—for example, prices for the same products in the different versions of the RFQ can vary. Every RFQ receives specific identifiers, such as `DE--1-Y-X`, where: + +- `DE--1`—customer reference. +- `Y`—number of the request of the customer. +- `X`—version of the RFQ. +![RFQ versions](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Workflow+&+Process+Management/Quotation+process+and+RFQ/Quotation+Process+&+RFQ+Feature+Overview/rfq-versions.png) + +The RFQ version is updated when: +- The RFQ is created for the first time—for example, the version is `DE-21-8-1`. +- The RFQ is revised and negotiated by the buyer. +- The RFQ is revised by a sales representative. + +## Unblocking cart (resetting quote lock) + +Converting the RFQ into a Shopping Cart adds a lock on it. A sales representative or a buyer cannot make any changes or updates to a locked cart. When the cart is locked, the only possible option is to proceed to checkout. + +If your project has only the Persistent Cart module, which means that only one shopping cart can exist in the customer account, when the buyer clicks **Convert to Cart**, the products from the existing cart are replaced with the ones that were in the RFQ. + +If your project has Persistent Cart and Multi-cart modules, converting the RFQ into a Shopping Cart creates a new locked shopping cart. + +The buyers can use the blocked cart irrespective of the RFQ updates by unblocking the cart. However, the modifications that have been applied during the RFQ workflow will be discarded. +![Locked cart](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Workflow+&+Process+Management/Quotation+process+and+RFQ/Quotation+Process+&+RFQ+Feature+Overview/locked-cart.png) + +## Interaction of the RFQ with the approval process + +Mixing several workflows adds complexity to the process and increases the steps for a buyer to perform to submit the order. This can be true for projects where the [Approval Process](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/feature-overviews/approval-process-feature-overview.html) and RFQ are integrated. In such a scenario, every RFQ that hits the limit will need to be approved by a manager. Let's check an example: + +{% info_block infoBox "Example" %} +Example: In the project, the cart needs approval when the cart total exceeds €1000. A buyer adds the products to the cart with the total amount of €1500 and converts the shopping cart into the RFQ. The sales representative reviews the cart and updates the prices for products so that the cart total makes up €1300 and sends the RFQ back to the buyer. The buyer cannot proceed to checkout as the cart total still exceeds the limit, so the buyer has to send the RFQ to their approver. If the approver approves the cart, then the buyer finally can create the order and pay for it. +{% endinfo_block %} + +## Quotation Process and RFQ on the Storefront + +Company users can perform the following actions using the CommentsQuotation process & RFQ feature on the Storefront: + +
    +Create an RFQ + +
    + +
    + +
    + +
    +Add an address and shipping method to the RFQ + +
    + +
    + + +
    + +
    +Edit RFQ items + +
    + +
    + + + +
    + +
    Cancel an RFQ or send an RFQ to an agent + +
    + +
    + + +
    + +
    Convert an RFQ to the cart + +
    + +
    + + +
    + +Agents can perform the same actions (on company users' behalf) as company users. However, besides the actions mentioned above, agents can also do the following: + +
    Revise an RFQ and send it back to the buyer + +
    + +
    + + +
    + +## Current constraints + +- According to the current setup, shipping cost is not included in the RFQ process and is added afterward during checkout. +- Request for Quote does not work with the product bundles. + + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES| +|---|---| +| [Install the Quotation Process feature](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-checkout-quotation-process-feature.html) | [Upgrade the QuoteRequest module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequest-module.html) | +| [Install the Quotation Process + Checkout feature](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-checkout-feature.html) | [Upgrade the QuoteRequestAgent module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagent-module.html) | +| [Install the Quotation Process + Approval Process feature](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-approval-process-feature.html) | [Upgrade the QuoteRequestAgentPage module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentpage-module.html) | +| [Install the Quotation Process + Multiple Carts feature](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-multiple-carts-feature.html) | [Upgrade the QuoteRequestAgentWidget module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestagentwidget-module.html) | +| [Install the Quotation Process Glue API](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/install-features/install-the-quotation-process-glue-api.html) | [Upgrade the QuoteRequestPage module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestpage-module.html) | +| | [Upgrade the QuoteRequestWidget module](/docs/pbc/all/request-for-quote/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade-the-quoterequestwidget-module.html) | diff --git a/docs/pbc/all/request-for-quote/202512.0/use-cases-request-for-quote-processes.md b/docs/pbc/all/request-for-quote/202602.0/use-cases-request-for-quote-processes.md similarity index 100% rename from docs/pbc/all/request-for-quote/202512.0/use-cases-request-for-quote-processes.md rename to docs/pbc/all/request-for-quote/202602.0/use-cases-request-for-quote-processes.md diff --git a/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-feature.md b/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-feature.md deleted file mode 100644 index 5beee616df0..00000000000 --- a/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Install the Return Management feature -description: This guide provides step-by-step instructions on integrating the Return Management feature into your project. -last_updated: Sep 7, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/return-management-feature-integration -originalArticleId: c914ddfc-69f6-4eb5-8098-c7a14908d9ca -redirect_from: - - /2021080/docs/return-management-feature-integration - - /2021080/docs/en/return-management-feature-integration - - /docs/return-management-feature-integration - - /docs/en/return-management-feature-integration - - /docs/pbc/all/return-management/202311.0/install-and-upgrade/install-the-return-management-feature.html - - /docs/pbc/all/return-management/202204.0/base-shop/install-and-upgrade/install-the-return-management-feature.html -related: - - title: Install the Return Management Glue API - link: docs/pbc/all/return-management/page.version/base-shop/install-and-upgrade/install-the-return-management-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-return-management-feature.md %} diff --git a/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md b/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md deleted file mode 100644 index c3e421c1afa..00000000000 --- a/docs/pbc/all/return-management/202410.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Install the Return Management Glue API -description: This integration guide provides step-by-step instructions on integrating Glue API - Return Management feature into your project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/glue-api-return-management-feature-integration -originalArticleId: c498bb08-b626-4ce0-ba1a-2115f4aa11fc -redirect_from: - - /2021080/docs/glue-api-return-management-feature-integration - - /2021080/docs/en/glue-api-return-management-feature-integration - - /docs/glue-api-return-management-feature-integration - - /docs/en/glue-api-return-management-feature-integration - - /docs/pbc/all/return-management/202311.0/install-and-upgrade/install-the-return-management-glue-api.html - - /docs/pbc/all/return-management/202204.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.html -related: - - title: Install the Return Management feature - link: docs/pbc/all/return-management/page.version/base-shop/install-and-upgrade/install-the-return-management-feature.html - - title: Managing the returns - link: docs/pbc/all/return-management/page.version/base-shop/manage-using-glue-api/glue-api-manage-returns.html - - title: Retrieving return reasons - link: docs/pbc/all/return-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-return-management-glue-api.md %} diff --git a/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md b/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md deleted file mode 100644 index 0ba139dcc4c..00000000000 --- a/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Return Management feature -last_updated: Apr 17, 2023 -description: This document describes the process how to integrate the Marketplace Return Management feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/marketplace-return-management-feature-integration.html -related: - - title: Marketplace Return Management feature walkthrough - link: docs/pbc/all/return-management/page.version/marketplace/marketplace-return-management-feature-overview.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-return-management-feature.md %} diff --git a/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md b/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md deleted file mode 100644 index d64e6dffc10..00000000000 --- a/docs/pbc/all/return-management/202410.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Install the Marketplace Return Management Glue API -last_updated: Apr 8, 2021 -description: This document describes the process how to integrate the Marketplace Return Management API feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: - - /docs/marketplace/dev/feature-integration-guides/202311.0/glue/marketplace-return-management-feature-integration.html -related: - - title: Marketplace Return Management feature walkthrough - link: docs/pbc/all/return-management/page.version/marketplace/marketplace-return-management-feature-overview.html ---- - -{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-return-management-glue-api.md %} diff --git a/docs/pbc/all/return-management/202602.0/base-shop/build-a-return-management-process-best-practices.md b/docs/pbc/all/return-management/202602.0/base-shop/build-a-return-management-process-best-practices.md new file mode 100644 index 00000000000..d4ab8efd46b --- /dev/null +++ b/docs/pbc/all/return-management/202602.0/base-shop/build-a-return-management-process-best-practices.md @@ -0,0 +1,117 @@ +--- +title: "Build a return management process: Best practices" +description: Choose a suitable return management process for your project and some best practices on building a Return management process for your Spryker based projects. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/building-a-return-management-process-best-practices +originalArticleId: 4082625a-ef83-4e10-b517-716042ef8282 +redirect_from: + - /2021080/docs/building-a-return-management-process-best-practices + - /2021080/docs/en/building-a-return-management-process-best-practices + - /docs/building-a-return-management-process-best-practices + - /docs/en/building-a-return-management-process-best-practices + - /docs/pbc/all/return-management/202311.0/build-a-return-management-process-best-practices.html + - /docs/pbc/all/return-management/202204.0/base-shop/build-a-return-management-process-best-practices.html +--- + +Before you can start accepting returns from Buyers, you need to build the returns management strategy that suits your business the best. This document contains scenarios that can help you choose the most suitable returns workflow and implement it using the Spryker [Return Management](/docs/pbc/all/return-management/{{page.version}}/marketplace/marketplace-return-management-feature-overview.html) functionality. + + + +## Scenario 1: Typical return process for B2C models + +{% info_block infoBox %} + +You can implement this scenario with the default Spryker functionality, without extra development. + +{% endinfo_block %} + +Suppose you are a clothing retailer and often get items returned within the 14-day return window. You want to automate the return process as much as possible, so that minimum intervention of your employees is required. + +You can have the following return process: + +- *Buyer* places an order, and after the order has been delivered, the Buyer decides to return it. The Buyer does the following: + + 1. Selects the items to return. + 2. Creates the return. + 3. Prints the return slip and puts it into the box with items. + 4. Prints the return label and adheres it to the box. + 5. Ships the order to the shop. + +- When the shop receives the return, the *Shop Administrator* checks the returned items. If all is good and if items meet the shop's policy for the condition of returned items, the Shop Administrator confirms the return and makes the refund. Otherwise, the Shop Administrator contacts the Buyer and either cancels the return, or clarifies the details and makes the refund. +![image](https://confluence-connect.gliffy.net/embed/image/ceba5ea5-5ee2-4e8c-acce-65b64467421c.png?utm_medium=live&utm_source=custom) + +This scenario is typical for most B2C models, and its main advantages are: + +- Suits perfectly for the 14-days returns. +- Requires minimum human intervention. +- Can be implemented with the default Spryker [Return Management](/docs/pbc/all/return-management/{{page.version}}/marketplace/marketplace-return-management-feature-overview.html) functionality, without extra development effort. + + + +## Scenario 2: Returns, warranty cases, and exchanges for B2C and B2B models + +{% info_block infoBox %} + +Implementation of this scenario requires the default Spryker functionality and extra development for your project. + +{% endinfo_block %} + +Suppose you sell equipment the usage of which requires specific skills or knowledge. Therefore, you want to avoid cases when customers return items just because they did not use them correctly. Also, you want to establish an efficient process for handling warranty events. + +You can have the following return process: + +- *Buyer* creates a reclamation for items that have issues from the Order Details page in the Storefront. +- *Shop Administrator* receives the reclamation and does the following: +1. Contacts the customer to clarify the details of the claim. +2. If the reclamation: + - Is resolved without the return, the reclamation is closed. + - Cannot be resolved without the return: + 1. Creates the return based on the reclamation. + 2. Sends the return slip and the return label to the Buyer so the Buyer can print it, adhere to the box and ship the items back. + +The following schema illustrates the workflow as well as the areas that require custom development for your project: + +![image](https://confluence-connect.gliffy.net/embed/image/2599f923-6892-42bc-a867-e2b38bed5b2b.png?utm_medium=live&utm_source=custom) + +This scenario suites both B2B and B2C models and is especially good for resolving disputes and handling warranty cases that can imply return or replacement. So it's best to use such a workflow when human intervention is needed. + +You can combine this scenario with [scenario 1](#scenario1). For example: + +You might have the *Return* option available for Buyers within 14 days after the delivery of the products, and then have only the *Claim* option, which would be active during the warranty period. + +Or: + +You might have the *Return* button, but when clicking it, the Buyer would first need to create the claim, and once the Back Office User sees and approves the claim, the Buyer can print the return label and ship items back to the shop. + +The workflow of this scenario has the following advantages: + +- If Buyer did not use the product correctly or misunderstood the product functionality, the reclamation allows resolving the issue through communication between the Customer Service and the Buyer. This helps reduce the number of erroneous returns. +- You and Buyers do not have to pay the postage if there are actually no issues with the product. +- Even though this workflow implies additional development effort, you can tailor it to the specific needs of your project. + +## Scenario 3: Returns through Customer Service for B2C and B2B models + +{% info_block infoBox %} + +Implementation of this scenario requires the default Spryker functionality and extra development for your project. + +{% endinfo_block %} + +As in [scenario 2](#scenario2), suppose you sell products that require specific knowledge. You want to reduce the number of erroneous claims from Buyers to a minimum by encouraging them to contact Customer Service if Buyers have doubts as to the delivered items. This way, if there are actually no issues with the items, the Customer Service can help Buyers quickly. Otherwise, the Customer Service takes all further actions: creates reclamation and, if needed, a return. + +The workflow for this scenario is: + +- If a *buyer* receives faulty items or has questions about them, they contact the *Customer Service*. +- Customer Service either consults the Buyer about the items or creates a reclamation. +- The reclamation is checked internally, and the decision about the return, exchange, or cancellation is made. Customer Service contacts Buyer with the results of the check. +![image](https://confluence-connect.gliffy.net/embed/image/fbcca843-0c8c-4f85-8cd9-9d2cf20b68e2.png?utm_medium=live&utm_source=custom) + +Like with scenario 2, this scenario is best to use for resolving disputes and handling the warranty cases. That is, when you can not do without the human intervention. + +You can also combine this scenario with [scenario 1](#scenario1). For example, you might have the *Return* option available for Buyers within 14 days after the delivery of the products, and then have some *Contact Customer Service* option, which would be active during the warranty period. + +The main advantages of this approach are: +- You save Buyers' time by allowing them to quickly resolve their questions without having to create claims and wait for the responses. +- You have only valid Buyer claims, which can be sorted and forwarded to the respective departments by the Customer Service. You also have only valid return requests, which saves your and Buyers' time and money. +- Even though this workflow implies additional development effort, you can tailor it to the specific needs of your project. diff --git a/docs/pbc/all/return-management/202404.0/base-shop/install-and-upgrade/install-the-return-management-feature.md b/docs/pbc/all/return-management/202602.0/base-shop/install-and-upgrade/install-the-return-management-feature.md similarity index 100% rename from docs/pbc/all/return-management/202404.0/base-shop/install-and-upgrade/install-the-return-management-feature.md rename to docs/pbc/all/return-management/202602.0/base-shop/install-and-upgrade/install-the-return-management-feature.md diff --git a/docs/pbc/all/return-management/202404.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md b/docs/pbc/all/return-management/202602.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md similarity index 100% rename from docs/pbc/all/return-management/202404.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md rename to docs/pbc/all/return-management/202602.0/base-shop/install-and-upgrade/install-the-return-management-glue-api.md diff --git a/docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md b/docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md similarity index 98% rename from docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md rename to docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md index 6f41fa59676..bf233251bb7 100644 --- a/docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md +++ b/docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/change-the-state-of-order-items-in-returns.md @@ -26,7 +26,7 @@ To start working with item states in returns, do the following: 1. Go to **Sales > Returns**. This opens the **Returns** page. 2. Next to the return containing the items you want to change the state of, click **View**. - This opens the **Return Overview** page. + This opens the **Return Overview** page. diff --git a/docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/manage-returns-in-the-back-office.md b/docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/manage-returns-in-the-back-office.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/manage-returns-in-the-back-office.md rename to docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/manage-returns-in-the-back-office.md diff --git a/docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/manage-returns.md b/docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/manage-returns.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/base-shop/manage-in-the-back-office/manage-returns.md rename to docs/pbc/all/return-management/202602.0/base-shop/manage-in-the-back-office/manage-returns.md diff --git a/docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md b/docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md similarity index 99% rename from docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md rename to docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md index 4bf6855a2b7..07499b67582 100644 --- a/docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md +++ b/docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-manage-returns.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-the-returns originalArticleId: bbe2ab03-1413-46f5-858a-9ca6c0bdb531 redirect_from: + - /docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-manage-returns.html - /docs/pbc/all/return-management/202311.0/manage-using-glue-api/glue-api-manage-returns.html - /docs/pbc/all/return-management/202204.0/base-shop/manage-using-glue-api/glue-api-manage-returns.html related: diff --git a/docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md b/docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md similarity index 96% rename from docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md rename to docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md index 38e9533e3f7..7f1a9938d98 100644 --- a/docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md +++ b/docs/pbc/all/return-management/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-return-reasons originalArticleId: 469a4a94-e7b3-4c0c-a814-837f20bdc9e4 redirect_from: + - /docs/pbc/all/return-management/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.html - /docs/pbc/all/return-management/202311.0/manage-using-glue-api/glue-api-retrieve-return-reasons.html - /docs/pbc/all/return-management/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-return-reasons.html related: diff --git a/docs/pbc/all/return-management/202512.0/base-shop/return-management-feature-overview.md b/docs/pbc/all/return-management/202602.0/base-shop/return-management-feature-overview.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/base-shop/return-management-feature-overview.md rename to docs/pbc/all/return-management/202602.0/base-shop/return-management-feature-overview.md diff --git a/docs/pbc/all/return-management/202602.0/base-shop/set-number-of-days-for-a-return-policy.md b/docs/pbc/all/return-management/202602.0/base-shop/set-number-of-days-for-a-return-policy.md new file mode 100644 index 00000000000..a146bb74399 --- /dev/null +++ b/docs/pbc/all/return-management/202602.0/base-shop/set-number-of-days-for-a-return-policy.md @@ -0,0 +1,36 @@ +--- +title: Set number of days for a return policy +description: The document describes how to set a number of days for a Return Policy in your Spryker based projects. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/howto-set-number-of-days-for-a-return-policy +originalArticleId: 6211b701-75ae-4ac9-8d98-94972cc1f91b +redirect_from: + - /2021080/docs/howto-set-number-of-days-for-a-return-policy + - /2021080/docs/en/howto-set-number-of-days-for-a-return-policy + - /docs/howto-set-number-of-days-for-a-return-policy + - /docs/en/howto-set-number-of-days-for-a-return-policy + - /v6/docs/howto-set-number-of-days-for-a-return-policy + - /v6/docs/en/howto-set-number-of-days-for-a-return-policy + - /v5/docs/howto-set-number-of-days-for-a-return-policy + - /v5/docs/en/howto-set-number-of-days-for-a-return-policy + - /docs/scos/dev/tutorials/202005.0/howtos/feature-howtos/howto-set-number-of-days-for-a-return-policy.html + - /docs/scos/dev/tutorials-and-howtos/howtos/feature-howtos/howto-set-number-of-days-for-a-return-policy.html + - /docs/pbc/all/return-management/202311.0/howto-set-number-of-days-for-a-return-policy.html + - /docs/pbc/all/return-management/202204.0/base-shop/set-number-of-days-for-a-return-policy.html +--- + +To define a period within which an item can be returned, in `Pyz\Zed\SalesReturn\SalesReturnConfig`, redefine the config by adding the following: + +`protected const GLOBAL_RETURNABLE_NUMBER_OF_DAYS = {% raw %}{{{% endraw %}Number of days{% raw %}}}{% endraw %};` + +Where *{% raw %}{{{% endraw %}`Number of days`{% raw %}}}{% endraw %}* is the time period in days after the item purchase within which the item can be returned. + +Example: + +```php +namespace Pyz\Zed\SalesReturn;use Spryker\Zed\SalesReturn\SalesReturnConfig as SprykerSalesReturnConfig;class SalesReturnConfig extends SprykerSalesReturnConfig +{ + protected const GLOBAL_RETURNABLE_NUMBER_OF_DAYS = 30; +} +``` diff --git a/docs/pbc/all/return-management/202512.0/marketplace/glue-api-manage-marketplace-returns.md b/docs/pbc/all/return-management/202602.0/marketplace/glue-api-manage-marketplace-returns.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/marketplace/glue-api-manage-marketplace-returns.md rename to docs/pbc/all/return-management/202602.0/marketplace/glue-api-manage-marketplace-returns.md diff --git a/docs/pbc/all/return-management/202404.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md b/docs/pbc/all/return-management/202602.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md similarity index 100% rename from docs/pbc/all/return-management/202404.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md rename to docs/pbc/all/return-management/202602.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-feature.md diff --git a/docs/pbc/all/return-management/202404.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md b/docs/pbc/all/return-management/202602.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md similarity index 100% rename from docs/pbc/all/return-management/202404.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md rename to docs/pbc/all/return-management/202602.0/marketplace/install-and-upgrade/install-the-marketplace-return-management-glue-api.md diff --git a/docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-main-merchant-returns.md b/docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-main-merchant-returns.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-main-merchant-returns.md rename to docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-main-merchant-returns.md diff --git a/docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-returns-in-the-back-office.md b/docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-returns-in-the-back-office.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-returns-in-the-back-office.md rename to docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-returns-in-the-back-office.md diff --git a/docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-returns.md b/docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-returns.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/marketplace/manage-in-the-back-office/manage-marketplace-returns.md rename to docs/pbc/all/return-management/202602.0/marketplace/manage-in-the-back-office/manage-marketplace-returns.md diff --git a/docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-domain-model-and-relationships.md b/docs/pbc/all/return-management/202602.0/marketplace/marketplace-return-management-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-domain-model-and-relationships.md rename to docs/pbc/all/return-management/202602.0/marketplace/marketplace-return-management-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-overview.md b/docs/pbc/all/return-management/202602.0/marketplace/marketplace-return-management-feature-overview.md similarity index 98% rename from docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-overview.md rename to docs/pbc/all/return-management/202602.0/marketplace/marketplace-return-management-feature-overview.md index 2df84d04d5e..63b738f813b 100644 --- a/docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-overview.md +++ b/docs/pbc/all/return-management/202602.0/marketplace/marketplace-return-management-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Return Management feature overview description: This document contains concept information for the Marketplace Return Management feature. template: concept-topic-template +redirect_from: + - /docs/pbc/all/return-management/202512.0/marketplace/marketplace-return-management-feature-overview.html last_updated: Nov 21, 2023 related: - title: Managing marketplace returns diff --git a/docs/pbc/all/return-management/202602.0/return-management.md b/docs/pbc/all/return-management/202602.0/return-management.md new file mode 100644 index 00000000000..a1b413efc1d --- /dev/null +++ b/docs/pbc/all/return-management/202602.0/return-management.md @@ -0,0 +1,12 @@ +--- +title: Return Management +description: The Return Management capability lets you and merchants process returns +last_updated: Apr 3, 2023 +template: concept-topic-template +redirect_from: +- /docs/pbc/all/return-management/202204.0/return-management.html +--- + +The *Return Management* capability lets you create and manage returns for sales orders. + +The capability consists of a base shop and the marketplace addon. The base shop features are needed for running a regular shop in which your company is the only entity fulfilling orders and handling returns. The marketplace features enable the support of multiple sellers and enable them to process returns. To run a marketplace, the features from both the base shop and the marketplace addon are required. diff --git a/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md b/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md deleted file mode 100644 index fa33d3f21f5..00000000000 --- a/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Catalog + Merchant Product Restrictions feature -description: The guide walks you through the process of installing the Merchant Relationship Product Lists API feature into the project. -last_updated: Sep 11, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/merchant-management/202311.0/base-shop/install-and-upgrade/install-glue-api/install-the-merchant-relationship-product-lists-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-catalog-merchant-product-restrictions.md %} diff --git a/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md b/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md deleted file mode 100644 index c17dbcb2e42..00000000000 --- a/docs/pbc/all/search/202404.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Catalog + Order Management feature -description: Learn how to integrate the Catalog + Order Management feature connector into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202108.0/catalog-order-management-feature-integration.html - - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-catalog-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-catalog-order-management-feature.md %} diff --git a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md b/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md deleted file mode 100644 index 52a97b89708..00000000000 --- a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Install the Catalog + Category Management feature -description: learn how to install the Spryker Catalog + Category Management Feature in to your Spryker based project. -last_updated: Jul 6, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/catalog-category-management-feature-integration -originalArticleId: c0523c5a-4440-4d20-9a92-6d446b613a37 -redirect_from: - - /2021080/docs/catalog-category-management-feature-integration - - /2021080/docs/en/catalog-category-management-feature-integration - - /docs/catalog-category-management-feature-integration - - /docs/en/catalog-category-management-feature-integration - - /docs/scos/dev/feature-integration-guides/201811.0/catalog-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201903.0/catalog-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/201907.0/catalog-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202005.0/catalog-category-management-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/catalog-category-management-feature-integration.html - - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-catalog-category-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-catalog-category-management-feature.md %} diff --git a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md b/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md deleted file mode 100644 index fa33d3f21f5..00000000000 --- a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Catalog + Merchant Product Restrictions feature -description: The guide walks you through the process of installing the Merchant Relationship Product Lists API feature into the project. -last_updated: Sep 11, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/pbc/all/merchant-management/202311.0/base-shop/install-and-upgrade/install-glue-api/install-the-merchant-relationship-product-lists-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-catalog-merchant-product-restrictions.md %} diff --git a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md b/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md deleted file mode 100644 index c17dbcb2e42..00000000000 --- a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Install the Catalog + Order Management feature -description: Learn how to integrate the Catalog + Order Management feature connector into a Spryker project. -template: feature-integration-guide-template -last_updated: Nov 21, 2023 -redirect_from: - - /docs/scos/dev/feature-integration-guides/202108.0/catalog-order-management-feature-integration.html - - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.html - - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-catalog-order-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-catalog-order-management-feature.md %} diff --git a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md b/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md deleted file mode 100644 index 58b1c978446..00000000000 --- a/docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Search Widget for Concrete Products feature -description: Learn how you can install the search widget for concrete products feature in your Spryker Project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/search-widget-for-concrete-products-integration -originalArticleId: 61590531-ea10-4226-829a-ced36cee47c0 -redirect_from: - - /2021080/docs/search-widget-for-concrete-products-integration - - /2021080/docs/en/search-widget-for-concrete-products-integration - - /docs/search-widget-for-concrete-products-integration - - /docs/en/search-widget-for-concrete-products-integration - - /docs/scos/dev/feature-integration-guides/202311.0/search-widget-for-concrete-products-feature-integration.html - - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.html - - /docs/scos/dev/feature-integration-guides/202204.0/search-widget-for-concrete-products-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-search-widget-for-concrete-products-feature.md %} diff --git a/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md b/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md deleted file mode 100644 index 58b1c978446..00000000000 --- a/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Install the Search Widget for Concrete Products feature -description: Learn how you can install the search widget for concrete products feature in your Spryker Project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/search-widget-for-concrete-products-integration -originalArticleId: 61590531-ea10-4226-829a-ced36cee47c0 -redirect_from: - - /2021080/docs/search-widget-for-concrete-products-integration - - /2021080/docs/en/search-widget-for-concrete-products-integration - - /docs/search-widget-for-concrete-products-integration - - /docs/en/search-widget-for-concrete-products-integration - - /docs/scos/dev/feature-integration-guides/202311.0/search-widget-for-concrete-products-feature-integration.html - - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.html - - /docs/scos/dev/feature-integration-guides/202204.0/search-widget-for-concrete-products-feature-integration.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-search-widget-for-concrete-products-feature.md %} diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/data-driven-ranking.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/data-driven-ranking.md similarity index 98% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/data-driven-ranking.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/data-driven-ranking.md index 3fee3463a0a..2ff67a56c19 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/data-driven-ranking.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/data-driven-ranking.md @@ -11,15 +11,15 @@ redirect_from: - /docs/data-driven-ranking - /docs/en/data-driven-ranking - /v6/docs/data-driven-ranking - - /v6/docs/en/data-driven-ranking + - /v6/docs/en/data-driven-ranking - /v5/docs/data-driven-ranking - - /v5/docs/en/data-driven-ranking + - /v5/docs/en/data-driven-ranking - /v4/docs/data-driven-ranking - - /v4/docs/en/data-driven-ranking + - /v4/docs/en/data-driven-ranking - /v3/docs/data-driven-ranking - - /v3/docs/en/data-driven-ranking + - /v3/docs/en/data-driven-ranking - /v2/docs/data-driven-ranking - - /v2/docs/en/data-driven-ranking + - /v2/docs/en/data-driven-ranking - /v1/docs/data-driven-ranking - /v1/docs/en/data-driven-ranking - /docs/scos/dev/best-practices/search-best-practices/data-driven-ranking.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/full-text-search.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/full-text-search.md similarity index 98% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/full-text-search.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/full-text-search.md index 4ef15dc626f..c0a251fbf83 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/full-text-search.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/full-text-search.md @@ -11,15 +11,15 @@ redirect_from: - /docs/full-text-search - /docs/en/full-text-search - /v6/docs/full-text-search - - /v6/docs/en/full-text-search + - /v6/docs/en/full-text-search - /v5/docs/full-text-search - - /v5/docs/en/full-text-search + - /v5/docs/en/full-text-search - /v4/docs/full-text-search - - /v4/docs/en/full-text-search + - /v4/docs/en/full-text-search - /v3/docs/full-text-search - - /v3/docs/en/full-text-search + - /v3/docs/en/full-text-search - /v2/docs/full-text-search - - /v2/docs/en/full-text-search + - /v2/docs/en/full-text-search - /v1/docs/full-text-search - /v1/docs/en/full-text-search - /docs/scos/dev/best-practices/search-best-practices/full-text-search.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/generic-faceted-search.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/generic-faceted-search.md similarity index 97% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/generic-faceted-search.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/generic-faceted-search.md index 61589990228..9535caff461 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/generic-faceted-search.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/generic-faceted-search.md @@ -11,15 +11,15 @@ redirect_from: - /docs/generic-faceted-search - /docs/en/generic-faceted-search - /v6/docs/generic-faceted-search - - /v6/docs/en/generic-faceted-search + - /v6/docs/en/generic-faceted-search - /v5/docs/generic-faceted-search - - /v5/docs/en/generic-faceted-search + - /v5/docs/en/generic-faceted-search - /v4/docs/generic-faceted-search - - /v4/docs/en/generic-faceted-search + - /v4/docs/en/generic-faceted-search - /v3/docs/generic-faceted-search - - /v3/docs/en/generic-faceted-search + - /v3/docs/en/generic-faceted-search - /v2/docs/generic-faceted-search - - /v2/docs/en/generic-faceted-search + - /v2/docs/en/generic-faceted-search - /v1/docs/generic-faceted-search - /v1/docs/en/generic-faceted-search - /docs/scos/dev/best-practices/search-best-practices/generic-faceted-search.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/multi-term-auto-completion.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/multi-term-auto-completion.md similarity index 95% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/multi-term-auto-completion.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/multi-term-auto-completion.md index d4f4f39caba..05e7d3755d2 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/multi-term-auto-completion.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/multi-term-auto-completion.md @@ -11,15 +11,15 @@ redirect_from: - /docs/multi-term-auto-completion - /docs/en/multi-term-auto-completion - /v6/docs/multi-term-auto-completion - - /v6/docs/en/multi-term-auto-completion + - /v6/docs/en/multi-term-auto-completion - /v5/docs/multi-term-auto-completion - - /v5/docs/en/multi-term-auto-completion + - /v5/docs/en/multi-term-auto-completion - /v4/docs/multi-term-auto-completion - - /v4/docs/en/multi-term-auto-completion + - /v4/docs/en/multi-term-auto-completion - /v3/docs/multi-term-auto-completion - - /v3/docs/en/multi-term-auto-completion + - /v3/docs/en/multi-term-auto-completion - /v2/docs/multi-term-auto-completion - - /v2/docs/en/multi-term-auto-completion + - /v2/docs/en/multi-term-auto-completion - /v1/docs/multi-term-auto-completion - /v1/docs/en/multi-term-auto-completion - /docs/scos/dev/best-practices/search-best-practices/multi-term-auto-completion.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/naive-product-centric-approach.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/naive-product-centric-approach.md similarity index 95% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/naive-product-centric-approach.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/naive-product-centric-approach.md index 49d974f0dcd..d1eb7f81f26 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/naive-product-centric-approach.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/naive-product-centric-approach.md @@ -11,15 +11,15 @@ redirect_from: - /docs/naive-product-centric-approach - /docs/en/naive-product-centric-approach - /v6/docs/naive-product-centric-approach - - /v6/docs/en/naive-product-centric-approach + - /v6/docs/en/naive-product-centric-approach - /v5/docs/naive-product-centric-approach - - /v5/docs/en/naive-product-centric-approach + - /v5/docs/en/naive-product-centric-approach - /v4/docs/naive-product-centric-approach - - /v4/docs/en/naive-product-centric-approach + - /v4/docs/en/naive-product-centric-approach - /v3/docs/naive-product-centric-approach - - /v3/docs/en/naive-product-centric-approach + - /v3/docs/en/naive-product-centric-approach - /v2/docs/naive-product-centric-approach - - /v2/docs/en/naive-product-centric-approach + - /v2/docs/en/naive-product-centric-approach - /v1/docs/naive-product-centric-approach - /v1/docs/en/naive-product-centric-approach - /docs/scos/dev/best-practices/search-best-practices/naive-product-centric-approach.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/on-site-search.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/on-site-search.md similarity index 95% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/on-site-search.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/on-site-search.md index 45154516a77..79d7dd3641a 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/on-site-search.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/on-site-search.md @@ -11,15 +11,15 @@ redirect_from: - /docs/search-design-patterns - /docs/en/search-design-patterns - /v6/docs/search-design-patterns - - /v6/docs/en/search-design-patterns + - /v6/docs/en/search-design-patterns - /v5/docs/search-design-patterns - - /v5/docs/en/search-design-patterns + - /v5/docs/en/search-design-patterns - /v4/docs/search-design-patterns - - /v4/docs/en/search-design-patterns + - /v4/docs/en/search-design-patterns - /v3/docs/search-design-patterns - - /v3/docs/en/search-design-patterns + - /v3/docs/en/search-design-patterns - /v2/docs/search-design-patterns - - /v2/docs/en/search-design-patterns + - /v2/docs/en/search-design-patterns - /v1/docs/search-design-patterns - /v1/docs/en/search-design-patterns - /docs/scos/dev/best-practices/search-best-practices/on-site-search.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/other-best-practices.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/other-best-practices.md similarity index 98% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/other-best-practices.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/other-best-practices.md index 0ae012f93ca..b083d04775c 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/other-best-practices.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/other-best-practices.md @@ -11,15 +11,15 @@ redirect_from: - /docs/other-best-practices - /docs/en/other-best-practices - /v6/docs/other-best-practices - - /v6/docs/en/other-best-practices + - /v6/docs/en/other-best-practices - /v5/docs/other-best-practices - - /v5/docs/en/other-best-practices + - /v5/docs/en/other-best-practices - /v4/docs/other-best-practices - - /v4/docs/en/other-best-practices + - /v4/docs/en/other-best-practices - /v3/docs/other-best-practices - - /v3/docs/en/other-best-practices + - /v3/docs/en/other-best-practices - /v2/docs/other-best-practices - - /v2/docs/en/other-best-practices + - /v2/docs/en/other-best-practices - /v1/docs/other-best-practices - /v1/docs/en/other-best-practices - /docs/pbc/all/search/202212.0/best-practices/other-best-practices.html diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/personalization-dynamic-pricing.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/personalization-dynamic-pricing.md similarity index 94% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/personalization-dynamic-pricing.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/personalization-dynamic-pricing.md index 1ced1039df4..8f58b1fdc68 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/personalization-dynamic-pricing.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/personalization-dynamic-pricing.md @@ -11,15 +11,15 @@ redirect_from: - /docs/personalization-dymanic-pricing - /docs/en/personalization-dymanic-pricing - /v6/docs/personalization-dymanic-pricing - - /v6/docs/en/personalization-dymanic-pricing + - /v6/docs/en/personalization-dymanic-pricing - /v5/docs/personalization-dymanic-pricing - - /v5/docs/en/personalization-dymanic-pricing + - /v5/docs/en/personalization-dymanic-pricing - /v4/docs/personalization-dymanic-pricing - - /v4/docs/en/personalization-dymanic-pricing + - /v4/docs/en/personalization-dymanic-pricing - /v3/docs/personalization-dymanic-pricing - - /v3/docs/en/personalization-dymanic-pricing + - /v3/docs/en/personalization-dymanic-pricing - /v2/docs/personalization-dymanic-pricing - - /v2/docs/en/personalization-dymanic-pricing + - /v2/docs/en/personalization-dymanic-pricing - /v1/docs/personalization-dymanic-pricing - /v1/docs/en/personalization-dymanic-pricing related: diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/precise-search-by-super-attributes.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/precise-search-by-super-attributes.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/precise-search-by-super-attributes.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/precise-search-by-super-attributes.md diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/search-best-practices.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/search-best-practices.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/search-best-practices.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/search-best-practices.md diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/simple-spelling-suggestions.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/simple-spelling-suggestions.md similarity index 94% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/simple-spelling-suggestions.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/simple-spelling-suggestions.md index 6f5f4cb6209..cf35c435b38 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/simple-spelling-suggestions.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/simple-spelling-suggestions.md @@ -11,15 +11,15 @@ redirect_from: - /docs/simple-spelling-suggestions - /docs/en/simple-spelling-suggestions - /v6/docs/simple-spelling-suggestions - - /v6/docs/en/simple-spelling-suggestions + - /v6/docs/en/simple-spelling-suggestions - /v5/docs/simple-spelling-suggestions - - /v5/docs/en/simple-spelling-suggestions + - /v5/docs/en/simple-spelling-suggestions - /v4/docs/simple-spelling-suggestions - - /v4/docs/en/simple-spelling-suggestions + - /v4/docs/en/simple-spelling-suggestions - /v3/docs/simple-spelling-suggestions - - /v3/docs/en/simple-spelling-suggestions + - /v3/docs/en/simple-spelling-suggestions - /v2/docs/simple-spelling-suggestions - - /v2/docs/en/simple-spelling-suggestions + - /v2/docs/en/simple-spelling-suggestions - /v1/docs/simple-spelling-suggestions - /v1/docs/en/simple-spelling-suggestions related: diff --git a/docs/pbc/all/search/202512.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md b/docs/pbc/all/search/202602.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md similarity index 98% rename from docs/pbc/all/search/202512.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md rename to docs/pbc/all/search/202602.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md index b597c6cd3cf..494850e7703 100644 --- a/docs/pbc/all/search/202512.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md +++ b/docs/pbc/all/search/202602.0/base-shop/best-practices/usage-driven-schema-and-document-structure.md @@ -11,15 +11,15 @@ redirect_from: - /docs/usage-driven-schema-structure - /docs/en/usage-driven-schema-structure - /v6/docs/usage-driven-schema-structure - - /v6/docs/en/usage-driven-schema-structure + - /v6/docs/en/usage-driven-schema-structure - /v5/docs/usage-driven-schema-structure - - /v5/docs/en/usage-driven-schema-structure + - /v5/docs/en/usage-driven-schema-structure - /v4/docs/usage-driven-schema-structure - - /v4/docs/en/usage-driven-schema-structure + - /v4/docs/en/usage-driven-schema-structure - /v3/docs/usage-driven-schema-structure - - /v3/docs/en/usage-driven-schema-structure + - /v3/docs/en/usage-driven-schema-structure - /v2/docs/usage-driven-schema-structure - - /v2/docs/en/usage-driven-schema-structure + - /v2/docs/en/usage-driven-schema-structure - /v1/docs/usage-driven-schema-structure - /v1/docs/en/usage-driven-schema-structure related: diff --git a/docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md b/docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md similarity index 96% rename from docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md rename to docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md index 7a422963ad9..bfab22d1bcb 100644 --- a/docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md +++ b/docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-search-attribute-mapcsv originalArticleId: 4f555e2a-157b-414e-89e5-07499e88c090 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute-map.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-search-attribute-map.csv.html - /docs/pbc/all/search/202311.0/import-and-export-data/file-details-product-search-attribute-map.csv.html - /docs/pbc/all/search/202311.0/base-shop/import-data/file-details-product-search-attribute-map.csv.html diff --git a/docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md b/docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md similarity index 96% rename from docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md rename to docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md index cf6f5f917f0..239ca6b844a 100644 --- a/docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md +++ b/docs/pbc/all/search/202602.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-search-attributecsv originalArticleId: 65570cb4-dec5-4f90-85f2-3d22493d874c redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/import-and-export-data/import-file-details-product-search-attribute.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/merchandising-setup/product-merchandising/file-details-product-search-attribute.csv.html - /docs/pbc/all/search/202311.0/import-and-export-data/file-details-product-search-attribute.csv.html - /docs/pbc/all/search/202311.0/base-shop/import-data/file-details-product-search-attribute.csv.html diff --git a/docs/pbc/all/search/202512.0/base-shop/import-and-export-data/search-data-import.md b/docs/pbc/all/search/202602.0/base-shop/import-and-export-data/search-data-import.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/import-and-export-data/search-data-import.md rename to docs/pbc/all/search/202602.0/base-shop/import-and-export-data/search-data-import.md diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md new file mode 100644 index 00000000000..02338c28b2a --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.md @@ -0,0 +1,23 @@ +--- +title: Install the Catalog + Category Management feature +description: learn how to install the Spryker Catalog + Category Management Feature in to your Spryker based project. +last_updated: Jul 6, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/catalog-category-management-feature-integration +originalArticleId: c0523c5a-4440-4d20-9a92-6d446b613a37 +redirect_from: + - /docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html + - /2021080/docs/catalog-category-management-feature-integration + - /2021080/docs/en/catalog-category-management-feature-integration + - /docs/catalog-category-management-feature-integration + - /docs/en/catalog-category-management-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/catalog-category-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/catalog-category-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/catalog-category-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/catalog-category-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/catalog-category-management-feature-integration.html + - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-category-management-feature.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-catalog-category-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-catalog-category-management-feature.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-glue-api.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-glue-api.md new file mode 100644 index 00000000000..aaaebbf911f --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-glue-api.md @@ -0,0 +1,23 @@ +--- +title: Install the Catalog Glue API +description: Use the guide to learn how to install the Spryker Glue Catalog feature in to your Spryker based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/catalog-api-feature-integration +originalArticleId: 8e4c8246-966e-4f6f-b8e8-6e76cc2af23f +redirect_from: + - /2021080/docs/catalog-api-feature-integration + - /2021080/docs/en/catalog-api-feature-integration + - /docs/catalog-api-feature-integration + - /docs/en/catalog-api-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-catalog-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-catalog-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-catalog-feature-integration.html + - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-glue-api.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-catalog-glue-api.html +related: + - title: Searching the product catalog + link: docs/pbc/all/search/page.version/base-shop/manage-using-glue-api/glue-api-search-the-product-catalog.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-catalog-glue-api.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md new file mode 100644 index 00000000000..29da73649fa --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Catalog + Merchant Product Restrictions feature +description: The guide walks you through the process of installing the Merchant Relationship Product Lists API feature into the project. +last_updated: Sep 11, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.html + - /docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-merchant-product-restrictions-feature.html + - /docs/pbc/all/merchant-management/202311.0/base-shop/install-and-upgrade/install-glue-api/install-the-merchant-relationship-product-lists-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-catalog-merchant-product-restrictions.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md new file mode 100644 index 00000000000..e2703fd0fde --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.md @@ -0,0 +1,13 @@ +--- +title: Install the Catalog + Order Management feature +description: Learn how to integrate the Catalog + Order Management feature connector into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.html + - /docs/scos/dev/feature-integration-guides/202108.0/catalog-order-management-feature-integration.html + - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-catalog-order-management-feature.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/install-features/install-the-catalog-order-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-catalog-order-management-feature.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md new file mode 100644 index 00000000000..d3a689889e5 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.md @@ -0,0 +1,19 @@ +--- +title: Install the Search Widget for Concrete Products feature +description: Learn how you can install the search widget for concrete products feature in your Spryker Project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/search-widget-for-concrete-products-integration +originalArticleId: 61590531-ea10-4226-829a-ced36cee47c0 +redirect_from: + - /docs/pbc/all/search/202507.0/base-shop/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.html + - /2021080/docs/search-widget-for-concrete-products-integration + - /2021080/docs/en/search-widget-for-concrete-products-integration + - /docs/search-widget-for-concrete-products-integration + - /docs/en/search-widget-for-concrete-products-integration + - /docs/scos/dev/feature-integration-guides/202311.0/search-widget-for-concrete-products-feature-integration.html + - /docs/pbc/all/search/202311.0/install-and-upgrade/install-features-and-glue-api/install-the-search-widget-for-concrete-products.html + - /docs/scos/dev/feature-integration-guides/202204.0/search-widget-for-concrete-products-feature-integration.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-search-widget-for-concrete-products-feature.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/search-migration-concept.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/search-migration-concept.md new file mode 100644 index 00000000000..de863811f8e --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/search-migration-concept.md @@ -0,0 +1,204 @@ +--- +title: Search migration concept +description: Learn about upgrading to a new Elasticsearch version or learn how to migrate to a different search provider within your Spryker based projects. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/search-migration-concept +originalArticleId: 9338954f-a18a-4214-8566-5100e8462ca7 +redirect_from: + - /2021080/docs/search-migration-concept + - /2021080/docs/en/search-migration-concept + - /docs/search-migration-concept + - /docs/en/search-migration-concept + - /v6/docs/search-migration-concept + - /v6/docs/en/search-migration-concept + - /v5/docs/search-migration-concept + - /v5/docs/en/search-migration-concept + - /v4/docs/search-migration-concept + - /v4/docs/en/search-migration-concept + - /docs/scos/dev/migration-concepts/search-migration-concept/search-migration-concept.html +--- + +Previously, out of the box, Spryker provided support only for Elasticsearch 5 as the search provider. It was impossible to use major versions of Elasticsearch later because of the breaking changes introduced in its version 6 - primarily because of the removal of mapping types. From the very beginning, Spryker's search setup included one index per store, which was logically divided into several mapping types to support different types of resources. Besides, there was no easy way to substitute Elasticsearch with alternative search providers. + +Refactoring of the Spryker's search sub-system has two main goals: + +1. Prepare the infrastructure for replacing Elasticsearch with alternative search providers as well as for using several search providers at a time. +2. Unblock the ability to use Elasticsearch 6, by changing the way, in which the search data is stored in Elasticsearch - rather than having all the data inside of a single index with multiple mapping types, indexed documents are now stored across multiple Elasticsearch indexes each having its own single mapping type. This is compatible with Elasticsearch 6, which allows a single mapping type per index, and is a solid foundation for the future migration to Elasticsearch 7, where the concept of mapping types is removed completely. + +This article describes the changes made to add support of Elasticsearch 6 and create the foundation for replacing Elasticsearch with other search providers. + +## Preparing the infrastructure for replacing Elasticsearch + +The central place of the Spryker's search sub-system is the *Search* module. This module provides APIs for: + +- installing the infrastructure for search (creating/updating Elasticsearch indexes) +- searching for data +- storing the data for search (indexing documents in Elasticsearch) + +Old versions of the Search module were highly coupled to Elasticsearch 5 as the search provider. +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Migration+Concepts/Current+Search+state+Copy.png) + +From now on, all the search provider-specific tasks are performed by the dedicated modules, which implement various plugin interfaces from the new *SearchExtension* module and are hooked to the Search module. The Search module itself is all about receiving requests through its API and routing them to the corresponding search provider-specific modules through the delegation mechanism. All Elasticsearch specific code has been deprecated in the Search module and moved to the new *SearchElasticsearch* module. +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Migration+and+Integration/Migration+Concepts/Desired+state+Copy.png) + +To achieve this in the backward-compatible way, a new concept called **search context** was introduced, which is represented by the `SearchContextTransfer` object. The search context is needed to determine the search provider, which should respond to a particular search request, as well as to store information/configuration needed to handle this request. The main and mandatory part of this search context is the source identifier. The source identifier is used in two scenarios: + +- resolving a search provider to handle the search request +- resolving a source (index, in terms of Elasticsearch) to perform search/storing of data + +In addition to this, `SearchContextTransfer` can be expanded by search provider-specific modules with various pieces of data needed by those modules to handle a search request. + +There are several new interfaces, for which search provider-specific modules may provide implementation: + +1. `Spryker\Client\SearchExtension\Dependency\Plugin\SearchAdapterPluginInterface` (mandatory). This API is used by the *Search* module to interact with the search provider-specific module. + +2. Optional: `Spryker\Client\SearchExtension\Dependency\Plugin\SearchContextExpanderPluginInterface`. This API is used to expand search context with various vendor specific information/configuration, which is needed to handle a particular search request. + +3. `Spryker\Zed\SearchExtension\Dependency\Plugin\InstallPluginInterface`. This API is used to create the infrastructure for a particular search provider–for example, create indexes and index maps for Elasticsearch. + +### Creating the infrastructure for search + +All the Elasticsearch specific commands in the *Search* module were deprecated and replaced with generic commands–for example, `search:setup:sources` instead of `search:setup:indexes`, which utilize `Spryker\Zed\SearchExtension\Dependency\Plugin\InstallPluginInterface` to hand over the infrastructure setup tasks to search provider-specific modules. + +### Searching for data + +Searching for data is done through the SearchClient. Whenever there is a need to search for some data, implementation of `\Spryker\Client\SearchExtension\Dependency\Plugin\QueryInterface`, tailored for that specific search, is defined by some satellite module. It is then passed to `SearchClient::search()` method. Right now, all existing implementations of this interface in the core are bound to Elasticsearch. To provide future support for other search providers all these classes now implement the additional interface `Spryker\Client\SearchExtension\Dependency\Plugin\SearchContextAwareQueryInterface`. This interface could be implemented like this: + +**Code sample** + +```php +hasSearchContext()) { + $this->setupDefaultSearchContext(); + } + + return $this->searchContextTransfer; + } + + /** + * @param \Generated\Shared\Transfer\SearchContextTransfer $searchContextTransfer + * + * @return void + */ + public function setSearchContext(SearchContextTransfer $searchContextTransfer): void + { + $this->searchContextTransfer = $searchContextTransfer; + } + + /** + * @return void + */ + protected function setupDefaultSearchContext(): void + { + $searchContextTransfer = new SearchContextTransfer(); + $searchContextTransfer->setSourceIdentifier(static::SOURCE_IDENTIFIER); + + $this->searchContextTransfer = $searchContextTransfer; + } + + /** + * @return bool + */ + protected function hasSearchContext(): bool + { + return (bool)$this->searchContextTransfer; + } +} +``` + +The main idea here is that a query plugin must be able to set up and store the search context internally, and this search context could later be changed from outside of the plugin. +Here is how the SearchElastisearch module resolves a source (index name) from the source identifier: + +- `ElasticsearchSearchContextTransfer` is introduced, which has a property for storing index name for the current search operation +- New property is added to `SearchContextTransfer`, which is of type `ElasticsearchSearchContextTransfer` +- Source identifier is extracted from the passed `SearchContextTransfer` object, transformed into an index name +- A new `ElasticsearchSearchContextTransfer` object is created, and the index name is set as its property +- This new transfer object is set as the property of the passed `SearchContextTransfer` object, which is then returned back to the *Search* module + +### Storing data for search + +Data that needs to be stored for future search is passed along with some metadata as a `SearchDocumentTransfer` object. This is done by the *Synchronization* module. `SearchDocumentTransfer` transfer is now also extended with the property to hold a search context, which is used to determine where exactly (search provider, source) this data should be stored. The mechanism for this is the same as for searching the data. + +## Unblocking Elasticsearch 6 + +As already mentioned before, previously, there was one index per store for all searchable data, which was split into several mapping types (page, product-review, etc.). From now on, for each of the mapping types, a separate index will be created by the SearchElasticsearch module, which will only have its dedicated mapping type. All the operations related to indexing/searching for documents will then be routed to the proper index with the help of source identifiers. + +## Migrating to Elasticsearch 7 + +In Elasticsearch 7, among other changes, the mapping types removal started in version 6, continues. While the previous major version has deprecated the concept of mapping types themselves but still required one mapping type per index, Elasticsearch 7.x by default, does not allow mapping types at all. + +### General information + +To communicate with Elasticsearch, Spryker uses a third-party library called `ruflin/elastica`. To be able to interact with Elaticsearch 7.x, `ruffling/elastica:7.*.*` must be used (major version of this package so far refer to major versions of Elasticsearch itself). This version has some drastic changes in its API compared to the previous major versions. Among those changes are: + +- removal of several query type classes, for example, `\Elastica\Query\Type` and `\Elastica\Query\GeohashCell` +- removal of `the_parent` field in favor of the `join` field +- various changes in the existing classes APIs (`\Elastica\Document`, `\Elastica\Query\Terms` etc.) + +For the full list of changes,check [Elasticsearch 7.0.0 release notes](https://elastica.io/2019/10/31/release-7-dot-0-0-beta1/). All the project code that's not compatible with these changes, must be adjusted accordingly before running Elasticsearch 7. + + + +### Migrating from Elasticsearch 6.x to Elasticsearch 7.x + +to migrate from Elasticsearch 6 to Elasticsearch 7, update the necessary modules by running: + +```bash +composer update spryker/elastica spryker/product-review spryker/search spryker/search-elasticsearch spryker/synchronization spryker/collector --with-dependencies +``` + +You don't need to do any extra-work related to your indexes and the data stored. That is, you don't need to adjust your indexes in any way, for example, by removing their corresponding mapping types and re-index the data, as both Elasicsearch 7.x and Spryker can work with your indexes created for version 6.x out of the box. But keep in mind that **all the new indexes created in Elasticsearch 7.x must not contain mapping types**. + +### Migrating from Elasticsearch 5.x to Elasticsearch 7.x + +To migrate from Elasticsearch 5.x to Elasticsearch 7.x: + +1. Follow the guidelines in this Search migration concept from the very beginning, to make your project code is Elasticsearch 6 compatible. +2. After that, follow the [guidelines for migrating from Elasticsearch 6.x to Elasticsearch 7.x](#Elasticsearch7) described above. +3. +{% info_block warningBox "your title goes here" %} + +To perform the upgrade without shutting down the cluster, you have to do a rolling upgrade as described in the [Elasticserach rolling upgrades documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/rolling-upgrades.html). + +{% endinfo_block %} + +That being done, the migration to Elasticsearch 7 from Elasticsearch 5 is complete. + +## Modules to upgrade + +The Search migration effort implies an upgrade of the following modules: + +- [Search](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-search–module.html#upgrading-from-version-89-to-version-810) +- [Console](/docs/pbc/all/miscellaneous/{{page.version}}/install-and-upgrade/upgrade-modules/upgrade–the-console-module.html) +- [CmsPageSearch](/docs/pbc/all/content-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.html#upgrading-from-version-21-to-version-22) +- [Catalog](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.html#upgrading-from-version-55-to-version-56) +- [ProductPageSearch](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.html#upgrading-from-version-311-to-version-312) +- [ProductReviewSearch](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productreviewsearch-module.html#upgrading-from-version-13-to-version-14) +- [ProductLabelSearch](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.html#upgrading-from-version-12-to-version-13) +- [ProductSetPageSearch](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetpagesearch-module.html#upgrading-from-version-13-to-version-14) +- [CategoryPageSearch](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.html#upgrading-from-version-14-to-version-15) +- [ProductNew](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productnew-module.html) diff --git a/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md similarity index 94% rename from docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md rename to docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md index e020f73de31..10455b8acd2 100644 --- a/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.md @@ -6,6 +6,7 @@ template: module-migration-guide-template originalLink: https://documentation.spryker.com/2021080/docs/mg-catalog originalArticleId: 34b60455-3e4a-4310-917c-73b64be173a0 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalog-module.html - /2021080/docs/mg-catalog - /2021080/docs/en/mg-catalog - /docs/mg-catalog diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalogsearchrestapi-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalogsearchrestapi-module.md new file mode 100644 index 00000000000..f4e42bb070c --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-catalogsearchrestapi-module.md @@ -0,0 +1,35 @@ +--- +title: Upgrade the CatalogSearchRestApi module +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/catalogsearchrestapi-migration-guide +originalArticleId: ba726860-285f-40b4-bfc4-4f7ca8c41ea3 +redirect_from: + - /2021080/docs/catalogsearchrestapi-migration-guide + - /2021080/docs/en/catalogsearchrestapi-migration-guide + - /docs/catalogsearchrestapi-migration-guide + - /docs/en/catalogsearchrestapi-migration-guide + - /v1/docs/catalogsearchrestapi-migration-guide + - /v1/docs/en/catalogsearchrestapi-migration-guide + - /v2/docs/catalogsearchrestapi-migration-guide + - /v2/docs/en/catalogsearchrestapi-migration-guide + - /v3/docs/catalogsearchrestapi-migration-guide + - /v3/docs/en/catalogsearchrestapi-migration-guide + - /v4/docs/catalogsearchrestapi-migration-guide + - /v4/docs/en/catalogsearchrestapi-migration-guide + - /v5/docs/catalogsearchrestapi-migration-guide + - /v5/docs/en/catalogsearchrestapi-migration-guide + - /v6/docs/catalogsearchrestapi-migration-guide + - /v6/docs/en/catalogsearchrestapi-migration-guide + - /docs/scos/dev/module-migration-guides/201811.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/201903.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/201907.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202005.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/catalogsearchrestapi-migration-guide.html + - /docs/scos/dev/module-migration-guides/glue-api/catalogsearchrestapi-migration-guide.html + - /module_migration_guides/about-migration/glue_api/catalogsearchrestapi-migration-guide.htm +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-catalogsearchrestapi-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.md new file mode 100644 index 00000000000..619df37c61d --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.md @@ -0,0 +1,24 @@ +--- +title: Upgrade the CategoryPageSearch module +description: learn how to upgrade to a newer version of the Category Page Search module within your Spryker based projects. +last_updated: Jun 22, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-categorypagesearch +originalArticleId: c643878d-608b-4954-b1bf-b704198fc0b8 +redirect_from: + - /2021080/docs/migration-guide-categorypagesearch + - /2021080/docs/en/migration-guide-categorypagesearch + - /docs/migration-guide-categorypagesearch + - /docs/en/migration-guide-categorypagesearch + - /v5/docs/migration-guide-categorypagesearch + - /v5/docs/en/migration-guide-categorypagesearch + - /v6/docs/migration-guide-categorypagesearch + - /v6/docs/en/migration-guide-categorypagesearch + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-categorypagesearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-categorypagesearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-categorypagesearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-categorypagesearch.html + - /upcoming-release/docs/migration-guide-categorypagesearch + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-categorypagesearch-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-categorypagesearch-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md new file mode 100644 index 00000000000..7d1a1c495f7 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-cmspagesearch-module.md @@ -0,0 +1,32 @@ +--- +title: Upgrade the CmsPageSearch module +description: learn how to upgrade to a newer version of the CMS Page Search module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-cmspagesearch +originalArticleId: c549427a-a784-47d9-938d-984b9b52fc23 +redirect_from: + - /2021080/docs/mg-cmspagesearch + - /2021080/docs/en/mg-cmspagesearch + - /docs/mg-cmspagesearch + - /docs/en/mg-cmspagesearch + - /v2/docs/mg-cmspagesearch + - /v2/docs/en/mg-cmspagesearch + - /v3/docs/mg-cmspagesearch + - /v3/docs/en/mg-cmspagesearch + - /v4/docs/mg-cmspagesearch + - /v4/docs/en/mg-cmspagesearch + - /v5/docs/mg-cmspagesearch + - /v5/docs/en/mg-cmspagesearch + - /v6/docs/mg-cmspagesearch + - /v6/docs/en/mg-cmspagesearch + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-cmspagesearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-cmspagesearch.html + - /module_migration_guides/mg-cmspagesearch.htm +--- + +{% include pbc/all/upgrade-modules/upgrade-the-cmspagesearch-module.md %} diff --git a/docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-elastica-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-elastica-module.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-elastica-module.md rename to docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-elastica-module.md diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md new file mode 100644 index 00000000000..2ff841fa5fb --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlabelsearch-module.md @@ -0,0 +1,23 @@ +--- +title: Upgrade the ProductLabelSearch module +description: learn how to upgrade to a newer version of the Product Label Search module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productlabelsearch +originalArticleId: 9fca0eb4-da0d-471a-a805-66f3fbd32879 +redirect_from: + - /2021080/docs/migration-guide-productlabelsearch + - /2021080/docs/en/migration-guide-productlabelsearch + - /docs/migration-guide-productlabelsearch + - /docs/en/migration-guide-productlabelsearch + - /v5/docs/migration-guide-productlabelsearch + - /v5/docs/en/migration-guide-productlabelsearch + - /v6/docs/migration-guide-productlabelsearch + - /v6/docs/en/migration-guide-productlabelsearch + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlabelsearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-productlabelsearch.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productlabelsearch-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistsearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistsearch-module.md new file mode 100644 index 00000000000..82e0abe27ad --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistsearch-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the ProductListSearch module +description: Use the guide to learn how to update the ProductListSearch module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-product-list-search +originalArticleId: 0d7bbb99-551f-4225-bbaf-c3c35c40bfba +redirect_from: + - /2021080/docs/mg-product-list-search + - /2021080/docs/en/mg-product-list-search + - /docs/mg-product-list-search + - /docs/en/mg-product-list-search + - /v1/docs/mg-product-list-search + - /v1/docs/en/mg-product-list-search + - /v2/docs/mg-product-list-search + - /v2/docs/en/mg-product-list-search + - /v3/docs/mg-product-list-search + - /v3/docs/en/mg-product-list-search + - /v4/docs/mg-product-list-search + - /v4/docs/en/mg-product-list-search + - /v5/docs/mg-product-list-search + - /v5/docs/en/mg-product-list-search + - /v6/docs/mg-product-list-search + - /v6/docs/en/mg-product-list-search + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productlistsearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-productlistsearch.html + - /module_migration_guides/mg-product-list-search.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productlistsearch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productlistsearch-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.md new file mode 100644 index 00000000000..8adda713ea9 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.md @@ -0,0 +1,34 @@ +--- +title: Upgrade the ProductPageSearch module +description: learn how to upgrade to a newer version of the Product Page Search module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productpagesearch +originalArticleId: 76339996-261a-4533-9a32-7bfd2a0b53c5 +redirect_from: + - /2021080/docs/migration-guide-productpagesearch + - /2021080/docs/en/migration-guide-productpagesearch + - /docs/migration-guide-productpagesearch + - /docs/en/migration-guide-productpagesearch + - /v2/docs/mg-product-page-search + - /v2/docs/en/mg-product-page-search + - /v3/docs/mg-product-page-search + - /v3/docs/en/mg-product-page-search + - /v4/docs/mg-product-page-search + - /v4/docs/en/mg-product-page-search + - /v5/docs/mg-product-page-search + - /v5/docs/en/mg-product-page-search + - /v6/docs/mg-product-page-search + - /v6/docs/en/mg-product-page-search + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productpagesearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-productpagesearch.html + - /module_migration_guides/mg-product-page-search.htm + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productpagesearch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productpagesearch-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productreviewsearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productreviewsearch-module.md new file mode 100644 index 00000000000..9b01bbe8c4d --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productreviewsearch-module.md @@ -0,0 +1,24 @@ +--- +title: Upgrade the ProductReviewSearch module +description: Learn how to upgrade to a newer version of the Product Review Search module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productreviewsearch +originalArticleId: b8c887b4-96de-4269-b503-eb8b11980671 +redirect_from: + - /2021080/docs/migration-guide-productreviewsearch + - /2021080/docs/en/migration-guide-productreviewsearch + - /docs/migration-guide-productreviewsearch + - /docs/en/migration-guide-productreviewsearch + - /v5/docs/migration-guide-productreviewsearch + - /v5/docs/en/migration-guide-productreviewsearch + - /v6/docs/migration-guide-productreviewsearch + - /v6/docs/en/migration-guide-productreviewsearch + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-productreviewsearch.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-productreviewsearch.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-productreviewsearch.html + - /docs/scos/dev/module-migration-guides/migration-guide-productreviewsearch.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productreviewsearch-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-productreviewsearch-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetpagesearch-module.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetpagesearch-module.md new file mode 100644 index 00000000000..c79abc64644 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetpagesearch-module.md @@ -0,0 +1,16 @@ +--- +title: Upgrade the ProductSetPageSearch module +description: Learn how to upgrade to a newer version of the Product Set Page Search module within your Spryker based projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/migration-guide-productsetpagesearch +originalArticleId: 21dee07e-945c-4458-a466-047ed864eb6c +redirect_from: + - /2021080/docs/migration-guide-productsetpagesearch + - /2021080/docs/en/migration-guide-productsetpagesearch + - /docs/migration-guide-productsetpagesearch + - /docs/en/migration-guide-productsetpagesearch + - /docs/scos/dev/module-migration-guides/migration-guide-productsetpagesearch.html + - /docs/pbc/all/product-information-management/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-productsetpagesearch-module.html +--- +{% include pbc/all/upgrade-modules/upgrade-the-productsetpagesearch-module.md %} diff --git "a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-search\342\200\223module.md" "b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-search\342\200\223module.md" new file mode 100644 index 00000000000..c185db7a129 --- /dev/null +++ "b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-search\342\200\223module.md" @@ -0,0 +1,35 @@ +--- +title: Upgrade the Search module +description: Use the guide to learn how to update the Search module to a newer version. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-search +originalArticleId: 2af7d4ac-4e84-42ff-aba5-95dae82c6856 +redirect_from: + - /2021080/docs/mg-search + - /2021080/docs/en/mg-search + - /docs/mg-search + - /docs/en/mg-search + - /v1/docs/mg-search + - /v1/docs/en/mg-search + - /v2/docs/mg-search + - /v2/docs/en/mg-search + - /v3/docs/mg-search + - /v3/docs/en/mg-search + - /v4/docs/mg-search + - /v4/docs/en/mg-search + - /v5/docs/mg-search + - /v5/docs/en/mg-search + - /v6/docs/mg-search + - /v6/docs/en/mg-search + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-search.html + - /docs/scos/dev/module-migration-guides/migration-guide-search.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-search-module.md %} diff --git a/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-search-initialization.md b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-search-initialization.md new file mode 100644 index 00000000000..bc41a1f5e66 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/install-and-upgrade/upgrade-search-initialization.md @@ -0,0 +1,77 @@ +--- +title: Upgrade search initialization +description: Search initialization upgrade introduces two separate commands for the build and data initialization processes. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/search-initialization-improvement +originalArticleId: 2b3938fa-d016-429f-b317-2951e909eca4 +redirect_from: + - /docs/scos/dev/technical-enhancements/search-initialization-improvement.html +--- + +Previously, the `vendor/bin/console setup:search` command invoked the `build` and `data initialization` processes. Running both processes simultaneously in a read-only file system results into the `build` process failing as the codebase is already baked into images. That's why the command has has been split into two commands for each of the processes which allows running them separately. You can find the commands below: + +**console search:create-indexes** + +>Creates indexes in the search service (Elastic Search). + +**console search:setup:index-map** + +>Generates IndexMap PHP files that are used by the whole application. + +To upgrade search initialization, see the following sections. + +## 1. Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker/search:"^8.9.0" +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following module has been installed: + +| MODULE | EXPECTED DIRECTORY | +| --- | --- | +| Search | vendor/spryker/search | + +{% endinfo_block %} + +## 2. Set up behavior + +Enable the console commands provided by the `Search` module: + +**Pyz/Zed/Console/ConsoleDependencyProvider** + +```php +
  • {% raw %}{{{% endraw %}null{% raw %}}}{% endraw %} (empty)
  • {% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}
  • {% raw %}{{{% endraw %}abstract_product_name{% raw %}}}{% endraw %}
  • {% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}
  • {% raw %}{{{% endraw %}product_attribute{% raw %}}}{% endraw %} (for example, brand, color, etc.)—to provide multiple product attributes, use `+`
  • | +| price[min] | Restricts the returned items to products with prices matching or above the provided value. `price[min]=10` equals to 1000 cents or 10 monetary units | {% raw %}{{{% endraw %}minimum_price{% raw %}}}{% endraw %} | +| price[max] | Restricts the returned items to products with prices matching or below the provided value. `price[max]=10` equals to 1000 cents or 10 monetary units | {% raw %}{{{% endraw %}maximum_price{% raw %}}}{% endraw %} | +| priceMode | Returns the prices defined for the price mode value provided. Useful if your store is configured with multiple price modes. | {% raw %}{{{% endraw %}price_mode_name{% raw %}}}{% endraw %}
    Spryker provides two price modes by default: `GROSS_MODE` and `NET_MODE`. For more information, see [Configuration of price modes and types](/docs/pbc/all/price-management/{{page.version}}/base-shop/extend-and-customize/configuration-of-price-modes-and-types.html). | +| brand | Specifies the product brand | {% raw %}{{{% endraw %}brand_name{% raw %}}}{% endraw %} | +| label | Specifies the product label | {% raw %}{{{% endraw %}label{% raw %}}}{% endraw %} | +| weight | Specifies the product weight | {% raw %}{{{% endraw %}weight{% raw %}}}{% endraw %} | +| color | Specifies the product color | {% raw %}{{{% endraw %}color{% raw %}}}{% endraw %} | +| storage_capacity[] | Specifies the storage capacity of a product | {% raw %}{{{% endraw %}storage_capacity{% raw %}}}{% endraw %} | +| rating[min] | Specifies the minimum rating of a product | {% raw %}{{{% endraw %}rating{% raw %}}}{% endraw %} | +| category | Specifies the category to search the products in | {% raw %}{{{% endraw %}category_node_id{% raw %}}}{% endraw %}
    For the category node IDs, [retrieve the category tree](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/categories/glue-api-retrieve-category-trees.html). | +| currency | Sets a currency | {% raw %}{{{% endraw %}currency{% raw %}}}{% endraw %} | +| sort | Sorts the search results | For the list of possible values, run the catalog search request and find the list in the `sortParamNames` array.
    For the default Spryker Demo Shop sorting parameters, see [Sorting parameters](#sorting). | +| page | Sets the number of the search results page from which the results are retrieved | {% raw %}{{{% endraw %}page_number{% raw %}}}{% endraw %} | +| ipp | Sets the number of products per page | {% raw %}{{{% endraw %}number_of_products{% raw %}}}{% endraw %} | + +| REQUEST | USAGE | +|----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| `GET https://glue.mysprykershop.com/catalog-search` | Search for all available products. | +| `GET https://glue.mysprykershop.com/catalog-search?q=` | Search for all available products. | +| `GET https://glue.mysprykershop.com/catalog-search?q=058` | Search for an abstract product by SKU *058*. | +| `GET https://glue.mysprykershop.com/catalog-search?q=058&include=abstract-products` | Search for an abstract product by SKU *058* with the included product details. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Acer Liquid Jade` | Search for an abstract product by *Acer Liquid Jade* name. | +| `GET https://glue.mysprykershop.com/catalog-search?q=058_261755504` | Search for a concrete product by SKU *058_261755504*. | +| `GET https://glue.mysprykershop.com/catalog-search?q=sony+red` | Search for products by multiple attributes (brand *Sony* and *red* color). | +| `GET https://glue.mysprykershop.com/catalog-search?q=sony&price%5Bmin%5D=99.99&price%5Bmax%5D=150` | Search for products within a minimum (*99.99*) and maximum (*150*) price range. | +| `GET https://glue.mysprykershop.com/catalog-search?q=sony` | Search for products of the *Sony* brand. | +| `GET https://glue.mysprykershop.com/catalog-search?priceMode=NET_MODE` | Specify that you want returned only prices defined in `NET_MODE`. | +| `GET https://glue.mysprykershop.com/catalog-search?label[]=NEW&label[]=SALE %` | Search for products with the *NEW* and *SALE* labels. | +| `GET https://glue.mysprykershop.com/catalog-search?weight[]=45 g` | Search for products by the *45 g* weight. | +| `GET https://glue.mysprykershop.com/catalog-search?color[]=Blue` | Search for products by the *Blue* color. | +| `GET https://glue.mysprykershop.com/catalog-search?storage_capacity[]=32 GB` | Search for products by the *32 GB* storage capacity. | +| `GET https://glue.mysprykershop.com/catalog-search?rating[min]=4` | Search for products by the rating *4*. | +| `GET https://glue.mysprykershop.com/catalog-search?category=6` | Search for products by the category node ID *6*. | +| `GET https://glue.mysprykershop.com/catalog-search?currency=CHF` | Define the *CHF* currency for the search result products. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_asc` | Set sorting order ascending. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc` | Set sorting order descending. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating` | Sort found products by rating. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc` | Sort found products by price ascending. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity` | Sort found products by popularity.
    Available only in the [Master Suite](/docs/about/all/master-suite.html) for now. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&page=3` | Set a page to retrieve the search results from. | +| `GET https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24` | Set number of products per page. | +| `GET https://glue.mysprykershop.com/catalog-search?merchant_name=Spryker` | Filter the results by Merchant name.
    Available only with the Marketplace.** | + +### Response + +
    +Response sample: empty search criteria + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 224, + "currentPage": 1, + "maxPage": 23, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "073", + "price": 43458, + "abstractName": "Samsung Galaxy Note 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 43458, + "DEFAULT": 43458 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21927455-7956.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21927455-7956.jpg" + } + ] + }, + ... + { + "abstractSku": "154", + "price": 22240, + "abstractName": "Lenovo Yoga 500 14", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 22240, + "DEFAULT": 22240 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_lows/31980499_9888.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/31980499_9888.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 224 + }, + { + "value": 5, + "doc_count": 72 + }, + { + "value": 18, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 66 + }, + { + "value": "New", + "doc_count": 5 + }, + { + "value": "Discontinued", + "doc_count": 2 + }, + { + "value": "Alternatives available", + "doc_count": 1 + } + ... + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 82 + }, + { + "value": "White", + "doc_count": 38 + }, + ... + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [ + { + "value": "32 GB", + "doc_count": 5 + }, + { + "value": "128 GB", + "doc_count": 3 + }, + ... + ], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Samsung", + "doc_count": 46 + }, + { + "value": "Sony", + "doc_count": 43 + }, + ... + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [ + { + "value": "Yes", + "doc_count": 5 + }, + { + "value": "No", + "doc_count": 3 + } + ], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [ + { + "value": "132 g", + "doc_count": 7 + }, + { + "value": "118 g", + "doc_count": 4 + }, + ... + ], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 111 + }, + ... + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 0, + "max": 345699, + "activeMin": 0, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 5, + "activeMin": 4, + "activeMax": 5, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 72, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 24, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 20, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 28, + "children": [] + } + ] + }, + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "docCount": 67, + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "docCount": 41, + "children": [] + }, + { + "nodeId": 3, + "name": "Camcorders", + "docCount": 26, + "children": [] + } + ] + }, + ... + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=", + "last": "https://glue.mysprykershop.com/catalog-search?q=&page[offset]=216&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an abstract product + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 1, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "058", + "price": 26432, + "abstractName": "Acer Liquid Jade", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 26432, + "DEFAULT": 26432 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/img_24245592_medium_1483521161_4318_9985.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24245592-2688.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 1 + }, + { + "value": 11, + "doc_count": 1 + }, + { + "value": 12, + "doc_count": 1 + }, + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "White", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Acer", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 26432, + "max": 26432, + "activeMin": 26432, + "activeMax": 26432, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058", + "last": "https://glue.mysprykershop.com/catalog-search?q=058&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=058&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an abstract product with the included abstract product details + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 1, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "058", + "price": 26432, + "abstractName": "Acer Liquid Jade", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 26432, + "DEFAULT": 26432 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/img_24245592_medium_1483521161_4318_9985.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24245592-2688.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 1 + }, + { + "value": 11, + "doc_count": 1 + }, + { + "value": 12, + "doc_count": 1 + }, + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "White", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Acer", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 26432, + "max": 26432, + "activeMin": 26432, + "activeMax": 26432, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "docCount": 0, + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "docCount": 0, + "children": [] + }, + { + "nodeId": 3, + "name": "Camcorders", + "docCount": 0, + "children": [] + } + ] + }, + { + "nodeId": 15, + "name": "Cables", + "docCount": 0, + "children": [] + }, + { + "nodeId": 11, + "name": "Telecom & Navigation", + "docCount": 1, + "children": [ + { + "nodeId": 12, + "name": "Smartphones", + "docCount": 1, + "children": [] + } + ] + }, + { + "nodeId": 9, + "name": "Smart Wearables", + "docCount": 0, + "children": [ + { + "nodeId": 10, + "name": "Smartwatches", + "docCount": 0, + "children": [] + } + ] + }, + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058&include=abstract-products" + }, + "relationships": { + "abstract-products": { + "data": [ + { + "type": "abstract-products", + "id": "058" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058&include=abstract-products", + "last": "https://glue.mysprykershop.com/catalog-search?q=058&include=abstract-products&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=058&include=abstract-products&page[offset]=0&page[limit]=12" + }, + "included": [ + { + "type": "abstract-products", + "id": "058", + "attributes": { + "sku": "058", + "averageRating": null, + "reviewCount": 0, + "name": "Acer Liquid Jade", + "description": "Edge Handle Assign a colour and place on People Edge to five of your favourite contacts. Reach out to them at any time by simply swiping inwards from the Edge Handle. When words aren't enough, send a poke or an emoticon to your People Edge contacts. OnCircle lets you communicate in ways that really count. When it comes to your favourite tracks, sound quality matters. Enjoy rich, balanced audio with Bluetooth audio accessories that support UHQ Audio. Celebrations are always better when you are sharing. Livestream the fun straight from your Galaxy S6 edge+ using the camera's Live Broadcast function. 4GB RAM and LTE Cat.9 support ensure uninterrupted streaming. No more shaky handheld videos. Video Digital Imaging Stabilisation meets Optical Image Stabilisation to ensure you get clear and steady footage every time.", + "attributes": { + "form_factor": "Bar", + "sim_card_type": "NanoSIM", + "display_type": "IPS", + "internal_ram": "2048 MB", + "brand": "Acer", + "color": "White" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "superAttributes": { + "series": [ + "Jade Plus", + "Jade Z" + ] + }, + "attributeMap": { + "product_concrete_ids": [ + "058_24245592", + "058_26175504" + ], + "super_attributes": { + "series": [ + "Jade Plus", + "Jade Z" + ] + }, + "attribute_variants": { + "series:Jade Plus": { + "id_product_concrete": "058_24245592" + }, + "series:Jade Z": { + "id_product_concrete": "058_26175504" + } + } + }, + "metaTitle": "Acer Liquid Jade", + "metaKeywords": "Acer,Communication Electronics", + "metaDescription": "Edge Handle Assign a colour and place on People Edge to five of your favourite contacts. Reach out to them at any time by simply swiping inwards from the E", + "attributeNames": { + "form_factor": "Form factor", + "sim_card_type": "SIM card type", + "display_type": "Display type", + "internal_ram": "Internal RAM", + "brand": "Brand", + "color": "Color", + "series": "Series" + }, + "url": "/en/acer-liquid-jade-58" + }, + "links": { + "self": "https://glue.mysprykershop.com/abstract-products/058" + } + } + ] +} +``` + +
    + + +
    +Response sample: search for a concrete product + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 1, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "058", + "price": 26432, + "abstractName": "Acer Liquid Jade", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 26432, + "DEFAULT": 26432 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/img_24245592_medium_1483521161_4318_9985.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24245592-2688.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 1 + }, + { + "value": 11, + "doc_count": 1 + }, + { + "value": 12, + "doc_count": 1 + }, + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "White", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Acer", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 26432, + "max": 26432, + "activeMin": 26432, + "activeMax": 26432, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058_26175504" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=058_26175504", + "last": "https://glue.mysprykershop.com/catalog-search?q=058_26175504&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=058_26175504&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for n item using multiple product attributes in search request + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 70, + "currentPage": 1, + "maxPage": 7, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "108", + "price": 17774, + "abstractName": "Sony SW2 SmartWatch", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 17774, + "DEFAULT": 17774 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/img_21047360_medium_1482828045_101_30852.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21047360-4814.jpg" + } + ] + }, + { + "abstractSku": "027", + "price": 4900, + "abstractName": "Sony Cyber-shot DSC-WX500", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 4900, + "DEFAULT": 4900 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 5200, + "ORIGINAL": 5200 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/low/7822599-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/medium/7822599-Sony.jpg" + } + ] + }, + { + "abstractSku": "001", + "price": 9999, + "abstractName": "Canon IXUS 160", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 9999, + "DEFAULT": 9999 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 12564, + "ORIGINAL": 12564 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/25904006-8438.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/25904006-8438.jpg" + } + ] + }, + ... + { + "abstractSku": "196", + "price": 24940, + "abstractName": "Sony HDR-AS20", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 24940, + "DEFAULT": 24940 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/23120327-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/23120327-Sony.jpg" + } + ] + }, + { + "abstractSku": "197", + "price": 23010, + "abstractName": "Sony HDR-AS20", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 23010, + "DEFAULT": 23010 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21421718-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21421718-Sony.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 70 + }, + { + "value": 2, + "doc_count": 32 + }, + { + "value": 4, + "doc_count": 20 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 21 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 26 + }, + { + "value": "White", + "doc_count": 15 + }, + { + "value": "Red", + "doc_count": 8 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [ + { + "value": "8 GB", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Sony", + "doc_count": 43 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [ + { + "value": "Yes", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [ + { + "value": "45 g", + "doc_count": 4 + }, + { + "value": "58 g", + "doc_count": 2 + } + ], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 38 + }, + { + "value": "Video King", + "doc_count": 35 + }, + { + "value": "Sony Experts", + "doc_count": 29 + }, + { + "value": "Budget Cameras", + "doc_count": 20 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 1250, + "max": 345699, + "activeMin": 1250, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 19, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony Red" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony Red", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony Red&page[offset]=60&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony Red&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony Red&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item with minimum and maximum price range + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 7, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "200", + "price": 13865, + "abstractName": "Sony HXR-MC50E", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 13865, + "DEFAULT": 13865 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/5787536_8636.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/5787536_8636.jpg" + } + ] + }, + { + "abstractSku": "077", + "price": 14554, + "abstractName": "Sony Xperia Z3 Compact", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 14554, + "DEFAULT": 14554 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 15000, + "ORIGINAL": 15000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24584210-216.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24584210-216.jpg" + } + ] + }, + { + "abstractSku": "016", + "price": 9999, + "abstractName": "Sony Cyber-shot DSC-W800", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 9999, + "DEFAULT": 9999 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21748907-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21748907-Sony.jpg" + } + ] + } + ... + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 7 + }, + ... + { + "value": 12, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 2 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 3 + }, + { + "value": "Blue", + "doc_count": 1 + }, + { + "value": "Purple", + "doc_count": 1 + }, + { + "value": "Silver", + "doc_count": 1 + }, + { + "value": "White", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Sony", + "doc_count": 7 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 6 + }, + { + "value": "Sony Experts", + "doc_count": 5 + }, + { + "value": "Video King", + "doc_count": 5 + }, + { + "value": "Budget Cameras", + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 9999, + "activeMax": 15000, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + { + "nodeId": 2, + "name": "Cameras & Camcorders", + "docCount": 5, + "children": [ + { + "nodeId": 4, + "name": "Digital Cameras", + "docCount": 4, + "children": [] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&price[min]=99.99&price[max]=150" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&price[min]=99.99&price[max]=150", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&price[min]=99.99&price[max]=150&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&price[min]=99.99&price[max]=150&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by brand + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "210", + "price": 100000, + "abstractName": "Sony Bundle", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 100000, + "DEFAULT": 100000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/23120327-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/23120327-Sony.jpg" + } + ] + }, + ... + { + "abstractSku": "093", + "price": 24899, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 24899, + "DEFAULT": 24899 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24495843-7844.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 14 + }, + ... + { + "value": "Purple", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [ + { + "value": "8 GB", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Samsung", + "doc_count": 46 + }, + ... + { + "value": "Toshiba", + "doc_count": 5 + } + ], + "activeValue": "Sony", + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [ + { + "value": "45 g", + "doc_count": 4 + }, + { + "value": "58 g", + "doc_count": 2 + }, + { + "value": "63.5 g", + "doc_count": 2 + } + ], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 30 + }, + ... + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "glue.mysprykershop.com/catalog-search?brand=Sony" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?brand=Sony", + "last": "https://glue.mysprykershop.com/catalog-search?brand=Sony&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?brand=Sony&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?brand=Sony&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by labels + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 66, + "currentPage": 1, + "maxPage": 7, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "060", + "price": 41837, + "abstractName": "Acer Liquid Jade", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 41837, + "DEFAULT": 41837 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/26027598-6953.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/26027598-6953.jpg" + } + ] + }, + ... + { + "abstractSku": "031", + "price": 40024, + "abstractName": "Canon PowerShot G9 X", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 40024, + "DEFAULT": 40024 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 41000, + "ORIGINAL": 41000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/30021637_4678.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/30021637_4678.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 66 + }, + ... + { + "value": 15, + "doc_count": 3 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 66 + }, + ... + { + "value": "Alternatives available", + "doc_count": 1 + } + ], + "activeValue": [ + "NEW", + "SALE %" + ], + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 20 + }, + ... + { + "value": "Gold", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 33 + }, + { + "value": "Video King", + "doc_count": 18 + }, + { + "value": "Budget Cameras", + "doc_count": 12 + }, + { + "value": "Sony Experts", + "doc_count": 9 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 162, + "max": 95000, + "activeMin": 162, + "activeMax": 95000, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 20, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 4, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 8, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 8, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?label[0]=NEW&label[1]=SALE %" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?label[0]=NEW&label[1]=SALE %", + "last": "https://glue.mysprykershop.com/catalog-search?label[0]=NEW&label[1]=SALE %&page[offset]=60&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?label[0]=NEW&label[1]=SALE %&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?label[0]=NEW&label[1]=SALE %&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by weight + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 4, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "090", + "price": 20160, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 20160, + "DEFAULT": 20160 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery/26219658_3401.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery_mediums/img_26219658_medium_1483953936_4642_16454.jpg" + } + ] + }, + ... + { + "abstractSku": "093", + "price": 24899, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 24899, + "DEFAULT": 24899 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24495843-7844.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 4 + }, + { + "value": 9, + "doc_count": 4 + }, + { + "value": 10, + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Silver", + "doc_count": 2 + }, + { + "value": "Black", + "doc_count": 1 + }, + { + "value": "White", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Sony", + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [ + { + "value": "132 g", + "doc_count": 7 + }, + ... + { + "value": "22.39 oz", + "doc_count": 2 + } + ], + "activeValue": [ + "45 g" + ], + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 17459, + "max": 24899, + "activeMin": 17459, + "activeMax": 24899, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?weight[0]=45 g" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?weight[0]=45 g", + "last": "https://glue.mysprykershop.com/catalog-search?weight[0]=45 g&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?weight[0]=45 g&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by color + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 10, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "068", + "price": 8005, + "abstractName": "Samsung Galaxy S5", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 8005, + "DEFAULT": 8005 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 9000, + "ORIGINAL": 9000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21927453-1632.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21927453-1632.jpg" + } + ] + }, + ... + { + "abstractSku": "005", + "price": 7000, + "abstractName": "Canon IXUS 175", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 7000, + "DEFAULT": 7000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/30663301_9631.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/30663301_9631.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 10 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 2 + }, + { + "value": "New", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 82 + }, + { + "value": "White", + "doc_count": 38 + }, + { + "value": "Silver", + "doc_count": 20 + }, + { + "value": "Blue", + "doc_count": 10 + }, + ... + ], + "activeValue": [ + "Blue" + ], + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + { + "name": "brand", + "localizedName": "Brand", + "docCount": null, + "values": [ + { + "value": "Samsung", + "doc_count": 3 + }, + ... + { + "value": "TomTom", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "brand", + "isMultiValued": false + } + }, + { + "name": "touchscreen", + "localizedName": "Touchscreen", + "docCount": null, + "values": [ + { + "value": "Yes", + "doc_count": 2 + } + ], + "activeValue": null, + "config": { + "parameterName": "touchscreen", + "isMultiValued": false + } + }, + { + "name": "weight", + "localizedName": "Weight", + "docCount": null, + "values": [ + { + "value": "18 g", + "doc_count": 2 + }, + { + "value": "132 g", + "doc_count": 1 + }, + { + "value": "20 g", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "weight", + "isMultiValued": true + } + }, + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 9 + }, + { + "value": "Budget Cameras", + "doc_count": 2 + }, + { + "value": "Video King", + "doc_count": 2 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 6277, + "max": 39353, + "activeMin": 6277, + "activeMax": 39353, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 1, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?color[0]=Blue" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?color[0]=Blue", + "last": "https://glue.mysprykershop.com/catalog-search?color[0]=Blue&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?color[0]=Blue&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response: search for an item by storage capacity + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 5, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "051", + "price": 12428, + "abstractName": "Samsung Galaxy S6 edge", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 12428, + "DEFAULT": 12428 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 13000, + "ORIGINAL": 13000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/29567823_6321.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/29567823_6321.jpg" + } + ] + }, + ... + { + "abstractSku": "053", + "price": 40651, + "abstractName": "Samsung Galaxy S6 edge", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 40651, + "DEFAULT": 40651 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/30614390_2538.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/30614390_2538.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 5 + }, + { + "value": 11, + "doc_count": 5 + }, + { + "value": 14, + "doc_count": 5 + }, + { + "value": 12, + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + ... + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [ + { + "value": "32 GB", + "doc_count": 5 + }, + { + "value": "128 GB", + "doc_count": 3 + }, + { + "value": "64 GB", + "doc_count": 3 + }, + { + "value": "16 GB", + "doc_count": 2 + }, + { + "value": "8 GB", + "doc_count": 1 + } + ], + "activeValue": [ + "32 GB" + ], + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 4 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 9002, + "max": 43458, + "activeMin": 9002, + "activeMax": 43458, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 0, + "max": 0, + "activeMin": 0, + "activeMax": 0, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 0, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?storage_capacity[0]=32 GB" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?storage_capacity[0]=32 GB", + "last": "https://glue.mysprykershop.com/catalog-search?storage_capacity[0]=32 GB&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?storage_capacity[0]=32 GB&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by rating + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 5, + "currentPage": 1, + "maxPage": 1, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "139", + "price": 3454, + "abstractName": "Asus Transformer Book T200TA", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 3454, + "DEFAULT": 3454 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24699831-1991.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24699831-1991.jpg" + } + ] + }, +... + { + "abstractSku": "093", + "price": 24899, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 24899, + "DEFAULT": 24899 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24495843-7844.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 5 + }, + ... + { + "value": 10, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 4 + }, + { + "value": "Budget Cameras", + "doc_count": 1 + }, + { + "value": "Sony Experts", + "doc_count": 1 + }, + { + "value": "Video King", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3454, + "max": 39353, + "activeMin": 3454, + "activeMax": 39353, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 5, + "activeMin": 4, + "activeMax": 5, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 1, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 0, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?rating[min]=4" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?rating[min]=4", + "last": "https://glue.mysprykershop.com/catalog-search?rating[min]=4&page[offset]=0&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?rating[min]=4&page[offset]=0&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: search for an item by category + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 24, + "currentPage": 1, + "maxPage": 3, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "134", + "price": 1879, + "abstractName": "Acer Aspire S7", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 1879, + "DEFAULT": 1879 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 2000, + "ORIGINAL": 2000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/29759322_2351.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery_raw/29759322_2351.png" + } + ] + }, + ... + { + "abstractSku": "142", + "price": 21192, + "abstractName": "Asus Zenbook US303UB", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 21192, + "DEFAULT": 21192 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_lows/30943081_4685.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/30943081_4685.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + ... + { + "value": 6, + "doc_count": 24 + }, + ... + { + "value": 18, + "doc_count": 1 + } + ], + "activeValue": "6", + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 1879, + "max": 44182, + "activeMin": 1879, + "activeMax": 44182, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 24, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 24, + "children": [] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?category=6" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?category=6", + "last": "https://glue.mysprykershop.com/catalog-search?category=6&page[offset]=12&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?category=6&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?category=6&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: set the search results currency + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 220, + "currentPage": 1, + "maxPage": 22, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "060", + "price": 48113, + "abstractName": "Acer Liquid Jade", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "CHF", + "symbol": "CHF", + "name": "Swiss Franc" + }, + "grossAmount": 48113, + "DEFAULT": 48113 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/26027598-6953.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/26027598-6953.jpg" + } + ] + }, + ... + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "CHF", + "symbol": "CHF", + "name": "Swiss Franc" + }, + "grossAmount": 47150, + "ORIGINAL": 47150 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/30021637_4678.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/30021637_4678.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 220 + }, + ... + { + "value": 17, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 110 + }, + { + "value": "Video King", + "doc_count": 66 + }, + { + "value": "Budget Cameras", + "doc_count": 37 + }, + { + "value": "Sony Experts", + "doc_count": 26 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-CHF-GROSS_MODE", + "localizedName": "Price range", + "min": 0, + "max": 397554, + "activeMin": 0, + "activeMax": 397554, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 5, + "activeMin": 4, + "activeMax": 5, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 72, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 24, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 20, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 28, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?currency=CHF" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?currency=CHF", + "last": "https://glue.mysprykershop.com/catalog-search?currency=CHF&page[offset]=216&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?currency=CHF&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?currency=CHF&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: sort the results in ascending order + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": "name_asc", + "currentSortOrder": "asc" + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "210", + "price": 100000, + "abstractName": "Sony Bundle", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 100000, + "DEFAULT": 100000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/23120327-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/23120327-Sony.jpg" + } + ] + }, + { + "abstractSku": "016", + "price": 9999, + "abstractName": "Sony Cyber-shot DSC-W800", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 9999, + "DEFAULT": 9999 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21748907-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21748907-Sony.jpg" + } + ] + }, + { + "abstractSku": "017", + "price": 345699, + "abstractName": "Sony Cyber-shot DSC-W800", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 345699, + "DEFAULT": 345699 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21748906-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21748906-Sony.jpg" + } + ] + }, + { + "abstractSku": "020", + "price": 10580, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10580, + "DEFAULT": 10580 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10599, + "ORIGINAL": 10599 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081478-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081478-Sony.jpg" + } + ] + }, + { + "abstractSku": "019", + "price": 9999, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 9999, + "DEFAULT": 9999 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081473-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081473-Sony.jpg" + } + ] + }, + { + "abstractSku": "021", + "price": 10680, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10680, + "DEFAULT": 10680 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081475-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081475-Sony.jpg" + } + ] + }, + ... + { + "abstractSku": "024", + "price": 44500, + "abstractName": "Sony Cyber-shot DSC-WX350", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 44500, + "DEFAULT": 44500 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 45500, + "ORIGINAL": 45500 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21987578-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21987578-Sony.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 14 + }, + ... + { + "value": "Purple", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + { + "name": "storage_capacity", + "localizedName": "Storage Capacity", + "docCount": null, + "values": [ + { + "value": "8 GB", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "storage_capacity", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_asc" + } + } + ], + "links": { + "self": "glue.mysprykershop.com/catalog-search?q=Sony&sort=name_asc", + "last": "glue.mysprykershop.comc/atalog-search?q=Sony&sort=name_asc&page[offset]=36&page[limit]=12", + "first": "glue.mysprykershop.com/catalog-search?q=Sony&sort=name_asc&page[offset]=0&page[limit]=12", + "next": "glue.mysprykershop.comc/atalog-search?q=Sony&sort=name_asc&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: sort the results in descending order + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": "name_desc", + "currentSortOrder": "desc" + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "077", + "price": 14554, + "abstractName": "Sony Xperia Z3 Compact", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 14554, + "DEFAULT": 14554 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 15000, + "ORIGINAL": 15000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24584210-216.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24584210-216.jpg" + } + ] + }, + { + "abstractSku": "076", + "price": 35711, + "abstractName": "Sony Xperia Z3 Compact", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 35711, + "DEFAULT": 35711 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24394207-3552.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24394207-3552.jpg" + } + ] + }, + ... + { + "abstractSku": "080", + "price": 25214, + "abstractName": "Sony Xperia Z3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 25214, + "DEFAULT": 25214 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 26000, + "ORIGINAL": 26000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24394206-8583.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24394206-8583.jpg" + } + ] + }, + ... + { + "abstractSku": "090", + "price": 20160, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 20160, + "DEFAULT": 20160 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery/26219658_3401.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery_mediums/img_26219658_medium_1483953936_4642_16454.jpg" + } + ] + }, + ... + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ююю + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=name_desc&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: sort the search results by rating + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": "rating", + "currentSortOrder": "desc" + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "093", + "price": 24899, + "abstractName": "Sony SmartWatch 3", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 24899, + "DEFAULT": 24899 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24495843-7844.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24495843-7844.jpg" + } + ] + }, + { + "abstractSku": "078", + "price": 25584, + "abstractName": "Sony Xperia Z3 Compact", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 25584, + "DEFAULT": 25584 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24602396-8292.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24602396-8292.jpg" + } + ] + }, + { + "abstractSku": "020", + "price": 10580, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10580, + "DEFAULT": 10580 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10599, + "ORIGINAL": 10599 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081478-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081478-Sony.jpg" + } + ] + }, + { + "abstractSku": "024", + "price": 44500, + "abstractName": "Sony Cyber-shot DSC-WX350", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 44500, + "DEFAULT": 44500 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 45500, + "ORIGINAL": 45500 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21987578-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21987578-Sony.jpg" + } + ] + }, + ... + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=rating&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: sort search results by price ascending + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": "price_asc", + "currentSortOrder": "asc" + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "028", + "price": 3000, + "abstractName": "Sony Cyber-shot DSC-WX500", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 3000, + "DEFAULT": 3000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/low/7822598-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/medium/7822598-Sony.jpg" + } + ] + }, + { + "abstractSku": "202", + "price": 3918, + "abstractName": "Sony NEX-VG20EH", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 3918, + "DEFAULT": 3918 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 5000, + "ORIGINAL": 5000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/5782479-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/5782479-Sony.jpg" + } + ] + }, + ... + { + "abstractSku": "020", + "price": 10580, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10580, + "DEFAULT": 10580 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10599, + "ORIGINAL": 10599 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081478-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081478-Sony.jpg" + } + ] + }, + { + "abstractSku": "021", + "price": 10680, + "abstractName": "Sony Cyber-shot DSC-W830", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 10680, + "DEFAULT": 10680 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21081475-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21081475-Sony.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=price_asc&page[offset]=12&page[limit]=12" + } +} +``` + +
    + +
    Response sample: sort the search results by popularity (This is valid for Master Suite only and has not been integrated into B2B/B2C Suites yet.) + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": "popularity", + "currentSortOrder": "desc" + }, + "pagination": { + "numFound": 43, + "currentPage": 3, + "maxPage": 4, + "currentItemsPerPage": 12, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 12, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "195", + "price": 39467, + "abstractName": "Sony FDR-AXP33", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "\u20ac", + "name": "Euro" + }, + "grossAmount": 39467, + "DEFAULT": 39467 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/25904159_6059.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/gallery/25904159_6059.jpg" + } + ] + }, + { + "abstractSku": "196", + "price": 24940, + "abstractName": "Sony HDR-AS20", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "\u20ac", + "name": "Euro" + }, + "grossAmount": 24940, + "DEFAULT": 24940 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/23120327-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/23120327-Sony.jpg" + } + ] + }, + { + "abstractSku": "197", + "price": 23010, + "abstractName": "Sony HDR-AS20", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "\u20ac", + "name": "Euro" + }, + "grossAmount": 23010, + "DEFAULT": 23010 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21421718-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21421718-Sony.jpg" + } + ] + }, + { + "abstractSku": "199", + "price": 32909, + "abstractName": "Sony HXR-MC2500", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "\u20ac", + "name": "Euro" + }, + "grossAmount": 32909, + "DEFAULT": 32909 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/24788780-2045.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/24788780-2045.jpg" + } + ] + }, + ... + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + ... + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc\u0027s/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity&page=3" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity&page=3", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&sort=popularity&page[offset]=12&page[limit]=12" + } +} +``` + +
    + +
    +Response sample: set a page of search for results + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 43, + "currentPage": 3, + "maxPage": 5, + "currentItemsPerPage": 10, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "029", + "price": 41024, + "abstractName": "Sony Cyber-shot DSC-WX500", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 41024, + "DEFAULT": 41024 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 42000, + "ORIGINAL": 42000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/low/7822600-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/medium/7822600-Sony.jpg" + } + ] + }, + ... + { + "abstractSku": "111", + "price": 19568, + "abstractName": "Sony SmartWatch", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 19568, + "DEFAULT": 19568 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/gallery_mediums/img_12295890_medium_1481715683_8105_13110.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/15743_12295890-6463.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&page=3" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&page=3", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + +
    +Response sample: set a number of products per page in results + +```json +{ + "data": [ + { + "type": "catalog-search", + "id": null, + "attributes": { + "spellingSuggestion": null, + "sort": { + "sortParamNames": [ + "rating", + "name_asc", + "name_desc", + "price_asc", + "price_desc", + "popularity" + ], + "sortParamLocalizedNames": { + "rating": "Sort by product ratings", + "name_asc": "Sort by name ascending", + "name_desc": "Sort by name descending", + "price_asc": "Sort by price ascending", + "price_desc": "Sort by price descending", + "popularity": "Sort by popularity" + }, + "currentSortParam": null, + "currentSortOrder": null + }, + "pagination": { + "numFound": 43, + "currentPage": 1, + "maxPage": 2, + "currentItemsPerPage": 24, + "config": { + "parameterName": "page", + "itemsPerPageParameterName": "ipp", + "defaultItemsPerPage": 10, + "validItemsPerPageOptions": [ + 12, + 24, + 36 + ] + } + }, + "abstractProducts": [ + { + "abstractSku": "202", + "price": 3918, + "abstractName": "Sony NEX-VG20EH", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 3918, + "DEFAULT": 3918 + }, + { + "priceTypeName": "ORIGINAL", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 5000, + "ORIGINAL": 5000 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/5782479-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/5782479-Sony.jpg" + } + ] + }, + ... + { + "abstractSku": "023", + "price": 26723, + "abstractName": "Sony Cyber-shot DSC-WX220", + "prices": [ + { + "priceTypeName": "DEFAULT", + "currency": { + "code": "EUR", + "symbol": "€", + "name": "Euro" + }, + "grossAmount": 26723, + "DEFAULT": 26723 + } + ], + "images": [ + { + "externalUrlSmall": "https://images.icecat.biz/img/norm/medium/21758366-Sony.jpg", + "externalUrlLarge": "https://images.icecat.biz/img/norm/high/21758366-Sony.jpg" + } + ] + } + ], + "valueFacets": [ + { + "name": "category", + "localizedName": "Categories", + "docCount": null, + "values": [ + { + "value": 1, + "doc_count": 43 + }, + ... + { + "value": 14, + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "category", + "isMultiValued": false + } + }, + { + "name": "label", + "localizedName": "Product Labels", + "docCount": null, + "values": [ + { + "value": "SALE %", + "doc_count": 10 + } + ], + "activeValue": null, + "config": { + "parameterName": "label", + "isMultiValued": true + } + }, + { + "name": "color", + "localizedName": "Color", + "docCount": null, + "values": [ + { + "value": "Black", + "doc_count": 14 + }, + { + "value": "White", + "doc_count": 11 + }, + { + "value": "Silver", + "doc_count": 5 + }, + { + "value": "Grey", + "doc_count": 2 + }, + { + "value": "Pink", + "doc_count": 2 + }, + { + "value": "Red", + "doc_count": 2 + }, + { + "value": "Blue", + "doc_count": 1 + }, + { + "value": "Gold", + "doc_count": 1 + }, + { + "value": "Purple", + "doc_count": 1 + } + ], + "activeValue": null, + "config": { + "parameterName": "color", + "isMultiValued": true + } + }, + ... + { + "name": "merchant_name", + "localizedName": "Merchant", + "docCount": null, + "values": [ + { + "value": "Spryker", + "doc_count": 29 + }, + { + "value": "Sony Experts", + "doc_count": 26 + }, + { + "value": "Video King", + "doc_count": 26 + }, + { + "value": "Budget Cameras", + "doc_count": 14 + } + ], + "activeValue": null, + "config": { + "parameterName": "merchant_name", + "isMultiValued": true + } + } + ], + "rangeFacets": [ + { + "name": "price-DEFAULT-EUR-GROSS_MODE", + "localizedName": "Price range", + "min": 3000, + "max": 345699, + "activeMin": 3000, + "activeMax": 345699, + "docCount": null, + "config": { + "parameterName": "price", + "isMultiValued": false + } + }, + { + "name": "rating", + "localizedName": "Product Ratings", + "min": 4, + "max": 4, + "activeMin": 4, + "activeMax": 4, + "docCount": null, + "config": { + "parameterName": "rating", + "isMultiValued": false + } + } + ], + "categoryTreeFilter": [ + { + "nodeId": 5, + "name": "Computer", + "docCount": 1, + "children": [ + { + "nodeId": 6, + "name": "Notebooks", + "docCount": 0, + "children": [] + }, + { + "nodeId": 7, + "name": "Pc's/Workstations", + "docCount": 0, + "children": [] + }, + { + "nodeId": 8, + "name": "Tablets", + "docCount": 1, + "children": [] + } + ] + }, + ... + { + "nodeId": 16, + "name": "Fish", + "docCount": 0, + "children": [ + { + "nodeId": 18, + "name": "Vegetables", + "docCount": 0, + "children": [] + } + ] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24", + "last": "https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24&page[offset]=36&page[limit]=12", + "first": "https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24&page[offset]=0&page[limit]=12", + "next": "https://glue.mysprykershop.com/catalog-search?q=Sony&ipp=24&page[offset]=12&page[limit]=12" + } +} +``` + +
    + + + + +**Sorting parameters** + +| ATTRIBUTE | TYPE | DESCRIPTION | +|-------------------------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| sortParamNames | Array | List of the possible sorting parameters. The default Spryker Demo Shop parameters:
    • `rating`—sorting by product rating
    • `name_asc`—sorting by name, ascending
    • `name_desc`—sorting by name, descending
    • `price_asc`—sorting by price, ascending
    • `price_desc`—sorting by price, descending
    • `popularity`—sorting by popularity (**This is valid for Master Suite only and has not been integrated into B2B/B2C Suites yet.**)
    | +| sortParamLocalizedNames | Object | Localized names of the sorting parameters. | +| currentSortParam | String | The currently applied sorting parameter. | +| currentSortOrder | String | The current sorting order. | + +**Pagination** + +| ATTRIBUTE | TYPE | DESCRIPTION | +|---------------------------|---------|------------------------------------------------------| +| numFound | Integer | Number of the search results found. | +| currentPage | Integer | The current search results page. | +| maxPage | Integer | Total number of the search results pages. | +| currentItemsPerPage | Integer | Current number of the search results per page. | +| parameterName | String | Parameter name for setting the page number. | +| itemsPerPageParameterName | String | Parameter name for setting number of items per page. | +| defaultItemsPerPage | Integer | Default number of items per one search results page. | +| validItemsPerPageOptions | Array | Options for numbers per search results page. | + + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-products-response-attributes.md %} + +For other abstract product attributes, see [Retrieving abstract product prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html) + +**Value facets** + +| ATTRIBUTE | TYPE | DESCRIPTION | +|---------------|---------|-----------------------------------------------------------------| +| name | String | Name of the value facet. | +| localizedName | String | Localized name of the value facet. | +| values | Array | Values of the facet for the found items. | +| activeValue | Integer | Value of the facet specified in the current search request. | +| parameterName | String | Parameter name. | +| isMultiValued | Boolean | Indicates whether several values of the facet can be specified. | + +**Range facets** + +| ATTRIBUTE | TYPE | DESCRIPTION | +|---------------|---------|---------------------------------------------------------------------| +| name | String | Name of the range facet. | +| localizedName | String | Localized name of the range facet. | +| min | Integer | Minimum value of the range for the found items. | +| max | Integer | Maximum value of the range for the found items. | +| activeMin | Integer | Minimum value of the range specified in the current search request. | +| activeMax | Integer | Maximum value of the range specified in the current search request. | +| parameterName | String | Parameter name. | +| isMultiValued | Boolean | Indicates whether several values of the facet can be specified. | + +**Category tree filter** + +| ATTRIBUTE | TYPE | DESCRIPTION | +|-------------|---------|------------------------------------------------------------| +| nodeId | Integer | Category node ID. | +| name | String | Category name. | +| docCount | Integer | Number of the found items in the category. | +| children | Array | Array of node elements nested within the current category. | + +## Possible errors + +| CODE | REASON | +|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 313 | Currency is invalid. | +| 314 | Price mode is invalid. | +| 503 | Invalid type (non-integer) of one of the request parameters:
    • rating
    • rating.min
    • rating.max
    • page.limit
    • page.offset
    • category
    | + +For generic Glue Application errors that can also occur, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/category-filters-overview.md b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/category-filters-overview.md new file mode 100644 index 00000000000..0b580e5f86c --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/category-filters-overview.md @@ -0,0 +1,31 @@ +--- +title: Category filters overview +description: You can add, rearrange and define filters for any given parameter in the category tree, such as price or brand. +last_updated: Jul 8, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/category-filters-overview +originalArticleId: 086380e2-881f-48f1-b23a-88c4380b66c8 +redirect_from: + - /2021080/docs/category-filters-overview + - /2021080/docs/en/category-filters-overview + - /docs/category-filters-overview + - /docs/en/category-filters-overview + - /docs/pbc/all/search/202311.0/search-feature-overview/search-feature-overview/category-filters-overview.html + - /docs/scos/user/features/202204.0/search-feature-overview/category-filters-overview.html +--- + +To help your customers locate items in your shop more easily, you can add customizable *category filters* to the catalog pages or simply fall back to the standard category filters. You can add, rearrange and define filters for any given parameter in the category tree, such as price or brand. + +For details about how you can manage Category filters in the Back Office, see [Managing category filters](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/category-filters/assign-and-deassign-filters-from-categories.html) + +## Current constraints + +The feature has the following functional constraints, which are going to be resolved in the future: +- Category filters are shared across all the stores of a project. +- You can't restrict the availability of a category filter to a store. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Manage category filters](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/category-filters/assign-and-deassign-filters-from-categories.html) | diff --git a/docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-feature-overview.md b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/search-feature-overview.md similarity index 99% rename from docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-feature-overview.md rename to docs/pbc/all/search/202602.0/base-shop/search-feature-overview/search-feature-overview.md index 0b913598886..08bc9ee0685 100644 --- a/docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-feature-overview.md +++ b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/search-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/search-summary originalArticleId: 1e96b0d0-262f-4ab0-bc56-8c75b127ee08 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-feature-overview.html - /docs/scos/user/features/202005.0/search-feature-overview/search-preferences.html - /docs/scos/user/features/202009.0/search-feature-overview/search-feature-overview.html - /docs/scos/user/features/202108.0/search-feature-overview/search-feature-overview.html diff --git a/docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-types-overview.md b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/search-types-overview.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/search-feature-overview/search-types-overview.md rename to docs/pbc/all/search/202602.0/base-shop/search-feature-overview/search-types-overview.md diff --git a/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/standard-filters-overview.md b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/standard-filters-overview.md new file mode 100644 index 00000000000..41dba0d3d46 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/search-feature-overview/standard-filters-overview.md @@ -0,0 +1,64 @@ +--- +title: Standard filters overview +description: Learn about the Standard filters that helps customers to narrow down products they are looking for in your Spryker Cloud Commerce OS Shop. +last_updated: Jul 8, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/standard-filters-overview +originalArticleId: 0b675c4c-6163-4402-82a5-8a9198260fda +redirect_from: + - /docs/scos/user/features/201811.0/search-feature-overview/standard-filters-overview.html + - /docs/pbc/all/search/202311.0/search-feature-overview/search-feature-overview/standard-filters-overview.html + - /docs/scos/dev/feature-walkthroughs/202212.0/search-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202311.0/search-feature-walkthrough.html + - /docs/scos/user/features/202204.0/search-feature-overview/standard-filters-overview.html +--- + +Ecommerce solutions usually offer a huge product catalog to display products and their variations. To help buyers find the products they are looking for in the catalog, we have the *Standard Filters* feature. + +With Standard Filters, you can filter the products according to the specified price range, product ratings, product labels, color, material, or brand. + +![Filter Attributes](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Search+and+Filter/Standard+Filters/filter-attributes-b2c.png) + +## Filter types + +In Spryker Commerce OS, the following filter types exist: + +- **Single-select**—lets a user select only one filter option. + +
    + +
    + +- **Multi-select**—allows selecting several variants simultaneously. + +
    + +
    + +- **Range**—filters data in the dimension from the maximum and minimum value. In the current implementation of our demo shop, the range filter is applied to the abstract product prices. + +
    + +
    + +Products appropriate for the active filters are displayed in the results. + +Filter preferences can be configured in the **Back Office > Search and Filters > Filter Preferences**. Filter options depend on the attributes configured for the products. + +## Current constraints + +Price Range Filter is not supported with the Merchant Relations, that is why this filter is not included in the B2B demo shop. However, in [the B2C demo shop](/docs/about/all/about-spryker.html#demo-shops), you can still filter the products using the price range filter. + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Define filter preferences](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/filter-preferences/define-filter-preferences.html) | +| [Edit filter preferences](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/filter-preferences/edit-filter-preferences.html) | +| [Reorder category filters](/docs/pbc/all/search/{{page.version}}/base-shop/manage-in-the-back-office/filter-preferences/reorder-filter-preferences.html) | diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-personalization-with-headless-frontends.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-personalization-with-headless-frontends.md new file mode 100644 index 00000000000..ef0027146e7 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-personalization-with-headless-frontends.md @@ -0,0 +1,32 @@ +--- +title: Algolia Personalization with headless frontends +description: Find out how you can enable Algolia personalization in your Spryker shop based on headless approach (custom frontend or mobile application). +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +Algolia requires events from your application to support the following premium features: + +- Dynamic Re-Ranking +- Query Categorization +- Search analytics +- Revenue analytics +- A/B Testing + + +Spryker collects only Yves events by default. For custom frontends and mobile applications, we recommend using the Algolia SDK for your specific framework or platform and the built-in Algolia UI components. +Algolia UI components support event tracking for most of the required events by default. For information on Aloglia SDK for different platform, see the following docs. + +For web applications: +- JavaScript applications: [API Reference - JavaScript Widgets](https://www.algolia.com/doc/api-reference/widgets/js/) + - Standalone client for events (insights): [Insights API Client - JavaScript](https://www.algolia.com/doc/api-client/methods/insights/?client=javascript) +- React: [API Reference - React Widgets](https://www.algolia.com/doc/api-reference/widgets/react/) +- Vue: [Getting Started with Vue](https://www.algolia.com/doc/guides/building-search-ui/getting-started/vue/) +- Angular: [Getting Started with Angular](https://www.algolia.com/doc/guides/building-search-ui/getting-started/angular/) +- Flutter: [Getting Started with Flutter](https://www.algolia.com/doc/guides/building-search-ui/getting-started/flutter/) + +For mobile applications: +- Android: [Getting Started with Android](https://www.algolia.com/doc/guides/building-search-ui/getting-started/android/) +- iOS: [Getting Started with iOS](https://www.algolia.com/doc/guides/building-search-ui/getting-started/ios/) + +For additional conversion events, such as Add to Cart, Add to Shopping List, or Add to Wishlist, use the Insights API client for your framework or platform and the methods from [Insights API client methods](https://www.algolia.com/doc/api-client/methods/insights/). diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-search-by-custom-entity-index.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-search-by-custom-entity-index.md new file mode 100644 index 00000000000..0c04d9d7bc7 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-search-by-custom-entity-index.md @@ -0,0 +1,662 @@ +--- +title: Using Algolia search with custom indexes +description: Learn how to enable Algolia search for custom entities, such as Docs, in your Spryker-based project. +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +The Algolia Eco module supports searching custom entities that are already indexed in Algolia but are not natively supported by the Spryker eco module—like products or CMS pages. +This is useful for read-only search scenarios where data indexing is managed externally: documents, manufacturers, locations, events, or any other custom business entity. + +By following this guide, you will be able to do the following: +- Integrate Algolia search for entities other than products and CMS pages, such as docs or blogs. +- Configure entity mapping to custom Algolia indexes. + +{% info_block infoBox "" %} + +With this feature and configuration in `AlgoliaConfig::getEntityToIndexMappings()`, the module does not index data, publish events, or manage index lifecycle. +You need to populate Algolia indices separately—for example, using the Algolia Crawler or the Algolia API. + +{% endinfo_block %} + +## Prerequisites + +- You have access to the Algolia account in the Algolia Dashboard. +- You have integrated Algolia search in your Spryker project. For details, see [Integrate Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/integrate-algolia.html). +- You have an Algolia index created for your custom entity—for example, Docs—and populated with relevant data, for example, using the Algolia Crawler. + +It also helps to have the following [knowledge](https://www.algolia.com/doc): +- How Algolia indices are structured. +- The data schema of your entity in Algolia. +- Spryker's `SearchContext` and query plugin concepts. + +## How it works + +When a search request comes in, the search query plugin passes a source identifier to the Algolia search adapter. The adapter uses the entity-to-index mapping configuration to resolve the correct Algolia index name for the current store and locale, then executes the search query against that index. + +```text +Storefront Search Request + ↓ +Search Query Plugin (with sourceIdentifier) + ↓ +AlgoliaSearchAdapterPlugin + ↓ +QueryApplicabilityChecker + ↓ (checks entity-to-index mapping) +Entity-to-Index Mapping Config + ↓ +IndexNameResolver + ↓ (resolves correct index name) +Algolia Search API + ↓ +Search Results +``` + +**Key components:** +- **Source identifier**: a unique string identifying your entity type, for example, `document` or `manufacturer`. +- **Index name**: the actual Algolia index name, for example, `prod-documents-de_de`. +- **Mapping configuration**: an array defining source identifier to index name relationships per store and locale. +- **Query plugin**: a Spryker plugin that specifies the source identifier in `SearchContext`. + +## Set up search for a custom entity + +### 1. Prepare the Algolia index + +Make sure your custom entity data is indexed in Algolia before configuring the integration. + +**Option A: Via Algolia Dashboard** +1. Go to the Algolia dashboard. +2. Create a new index, for example, `documents_de`. +3. Upload your data via JSON import or add records manually in UI. + +**Option B: Via Algolia API** + +```php +$client = \Algolia\AlgoliaSearch\SearchClient::create('APP_ID', 'ADMIN_KEY'); +$index = $client->initIndex('documents_de'); + +$documents = [ + [ + 'objectID' => 'doc-1', + 'title' => 'Technical Documentation', + 'category' => 'Engineering', + 'content' => 'Detailed technical guide...', + 'url' => '/documents/technical-guide', + ], +]; + +$index->saveObjects($documents); +``` + +**Option C: Via an external system** + +Use your CMS, DAM, or other system to index data. Make sure the data includes all searchable fields. + +### 2. Configure entity-to-index mapping + +In `src/Pyz/Shared/Algolia/AlgoliaConfig.php`, define the mapping from source identifiers to Algolia index names: + +```php +> + */ + public function getEntityToIndexMappings(): array + { + return [ + // Single store, single locale + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['de_DE'], + 'indexName' => 'documents_de', + ], + + // Multi-locale support for the same store + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['en_US'], + 'indexName' => 'documents_en', + ], + + // Global entity (all stores, all locales) + [ + 'sourceIdentifier' => 'manufacturer', + 'store' => '*', + 'locales' => ['*'], + 'indexName' => 'manufacturers_global', + ], + + // Multi-store with wildcard locale + [ + 'sourceIdentifier' => 'location', + 'store' => 'US', + 'locales' => ['*'], + 'indexName' => 'locations_us', + ], + ]; + } +} +``` + +### 3. Create a search query plugin + +Create a query plugin for your custom entity. The `SOURCE_IDENTIFIER` constant must match the `sourceIdentifier` value you defined in the mapping configuration, in the example it's 'document'. + +```php +searchQueryTransfer = (new SearchQueryTransfer()) + ->setLocale($this->getFactory()->getLocaleClient()->getCurrentLocale()); + } + + public function setSearchString($searchString): void + { + $this->searchQueryTransfer->setQueryString($searchString); + } + + public function getSearchQuery(): SearchQueryTransfer + { + return $this->searchQueryTransfer; + } + + public function getSearchContext(): SearchContextTransfer + { + if ($this->searchContextTransfer === null) { + $this->searchContextTransfer = (new SearchContextTransfer()) + ->setSourceIdentifier(static::SOURCE_IDENTIFIER); + } + + return $this->searchContextTransfer; + } + + public function setSearchContext(SearchContextTransfer $searchContextTransfer): void + { + $this->searchContextTransfer = $searchContextTransfer; + } +} +``` + +### 4. Create a client module + +If you do not have a client module for your entity, create one. + +**`src/Pyz/Client/DocumentSearch/DocumentSearchClient.php`** + +```php +getFactory() + ->getSearchClient() + ->search($this->getFactory()->createDocumentSearchQuery(), $requestParameters); + } +} +``` + +**`src/Pyz/Client/DocumentSearch/DocumentSearchFactory.php`** + +```php +getProvidedDependency(DocumentSearchDependencyProvider::CLIENT_SEARCH); + } +} +``` + +**`src/Pyz/Client/DocumentSearch/DocumentSearchDependencyProvider.php`** + +```php +addSearchClient($container); + + return $container; + } + + /** + * @param \Spryker\Client\Kernel\Container $container + * + * @return \Spryker\Client\Kernel\Container + */ + protected function addSearchClient(Container $container): Container + { + $container->set(static::CLIENT_SEARCH, function (Container $container) { + return $container->getLocator()->search()->client(); + }); + + return $container; + } +} +``` + +### 5. Use the client in your application + +The following example shows how to use the client in a Yves controller: + +```php +query->get('q', ''); + + $searchResults = $this->getClient()->search([ + 'q' => $searchTerm, + 'page' => $request->query->getInt('page', 1), + 'ipp' => 12, + ]); + + return $this->view([ + 'searchTerm' => $searchTerm, + 'results' => $searchResults, + ], [], '@DocumentSearch/views/search/index.twig'); + } +} +``` + +### 6. Enable suggestions in the search autocomplete widget + +```php +use Spryker\Client\Kernel\AbstractPlugin; +use Spryker\Client\SearchExtension\Dependency\Plugin\GroupedResultFormatterPluginInterface; +use Spryker\Client\SearchExtension\Dependency\Plugin\ResultFormatterPluginInterface; + +class DocsSuggestionsSearchHttpResultFormatterPlugin extends AbstractPlugin implements ResultFormatterPluginInterface, GroupedResultFormatterPluginInterface +{ + public function getGroupName(): string + { + return 'suggestionByType'; + } + + public function getName(): string + { + return 'document'; // Entity Name + } + + /** + * @param \Generated\Shared\Transfer\SuggestionsSearchHttpResponseTransfer $searchResult + * @param array $requestParameters + * + * @return array + */ + public function formatResult($searchResult, array $requestParameters = []) + { + return $searchResult->getMatchedItemsBySourceIdentifiers()['document'] ?? []; + } +} +``` + +Enable the plugin in `CatalogDependencyProvider`: + +```php +// src/Pyz/Client/Catalog/CatalogDependencyProvider.php + +namespace Pyz\Client\Catalog; + +use Spryker\Client\Catalog\CatalogDependencyProvider as SprykerCatalogDependencyProvider; + +class CatalogDependencyProvider extends SprykerCatalogDependencyProvider +{ + /** + * @return array> + */ + protected function createSuggestionResultFormatterPluginVariants(): array + { + return [ + \Spryker\Shared\SearchHttp::TYPE_SUGGESTION_SEARCH_HTTP => [ + new CompletionSearchHttpResultFormatterPlugin(), + new CurrencyAwareCatalogSearchHttpResultFormatterPlugin( + new ProductSuggestionSearchHttpResultFormatterPlugin(), + ), + new CategorySuggestionsSearchHttpResultFormatterPlugin(), + new CmsPageSuggestionsSearchHttpResultFormatterPlugin(), + new DocsSuggestionsSearchHttpResultFormatterPlugin(), // New plugin for Docs suggestions + ], + ]; + } +} +``` + +## Real-world examples + +### Multi-store document library + +**Scenario**: A company has technical documentation indexed per store with different languages. + +**Algolia indices**: +- `docs-de-de_de`: German docs for the DE store. +- `docs-de-en_us`: English docs for the DE store. +- `docs-us-en_us`: English docs for the US store. + +**Configuration**: + +```php +public function getEntityToIndexMappings(): array +{ + return [ + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['de_DE'], + 'indexName' => 'docs-de-de_de', + ], + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['en_US'], + 'indexName' => 'docs-de-en_us', + ], + [ + 'sourceIdentifier' => 'document', + 'store' => 'US', + 'locales' => ['en_US'], + 'indexName' => 'docs-us-en_us', + ], + ]; +} +``` + +When a user on the DE store searches in German, queries go to `docs-de-de_de`. When the same user switches to English, queries go to `docs-de-en_us`. US store users always query `docs-us-en_us`. + +### Global manufacturer directory + +**Scenario**: A B2B platform has manufacturer data that is the same across all stores and languages. + +**Algolia index**: `manufacturers` (single global index). + +**Configuration**: + +```php +public function getEntityToIndexMappings(): array +{ + return [ + [ + 'sourceIdentifier' => 'manufacturer', + 'store' => '*', + 'locales' => ['*'], + 'indexName' => 'manufacturers', + ], + ]; +} +``` + +**Example Algolia record structure**: + +```json +{ + "objectID": "mfg-001", + "name": "ACME Corporation", + "country": "USA", + "industry": "Manufacturing", + "certifications": ["ISO9001", "ISO14001"], + "website": "https://acme.com" +} +``` + +### Store-specific locations + +**Scenario**: A retail chain with different store locations per country, available in any language. + +**Algolia indices**: `locations-de`, `locations-us`. + +**Configuration**: + +```php +public function getEntityToIndexMappings(): array +{ + return [ + [ + 'sourceIdentifier' => 'store-location', + 'store' => 'DE', + 'locales' => ['*'], + 'indexName' => 'locations-de', + ], + [ + 'sourceIdentifier' => 'store-location', + 'store' => 'US', + 'locales' => ['*'], + 'indexName' => 'locations-us', + ], + ]; +} +``` + +The corresponding query plugin uses `store-location` as the source identifier: + +```php +class StoreLocationSearchQueryPlugin extends AbstractPlugin implements QueryInterface, SearchContextAwareQueryInterface +{ + protected const SOURCE_IDENTIFIER = 'store-location'; + + // ... same implementation as DocumentSearchQueryPlugin +} +``` + +### Events calendar + +**Scenario**: Event management with localized event data available across all stores. + +**Algolia indices**: `events-de_de`, `events-en_us`. + +**Configuration**: + +```php +public function getEntityToIndexMappings(): array +{ + return [ + [ + 'sourceIdentifier' => 'event', + 'store' => '*', + 'locales' => ['de_DE'], + 'indexName' => 'events-de_de', + ], + [ + 'sourceIdentifier' => 'event', + 'store' => '*', + 'locales' => ['en_US'], + 'indexName' => 'events-en_us', + ], + ]; +} +``` + +**Example Algolia record structure**: + +```json +{ + "objectID": "evt-2026-001", + "title": "Tech Conference 2026", + "description": "Annual technology conference", + "start_date": "2026-06-15T09:00:00Z", + "location": "Berlin Convention Center", + "category": "Technology", + "price": 499, + "currency": "EUR", + "tags": ["conference", "technology", "networking"] +} +``` + +## Advanced configuration + +### Wildcard patterns + +Use `*` as a wildcard for store or locale to match all values. + +**All stores, specific locale:** + +```php +[ + 'sourceIdentifier' => 'global-product-catalog', + 'store' => '*', + 'locales' => ['en_US'], + 'indexName' => 'global-catalog-en', +] +``` + +**Specific store, all locales:** + +```php +[ + 'sourceIdentifier' => 'de-regulations', + 'store' => 'DE', + 'locales' => ['*'], + 'indexName' => 'regulations-de', +] +``` + +**All stores, all locales:** + +```php +[ + 'sourceIdentifier' => 'universal-icons', + 'store' => '*', + 'locales' => ['*'], + 'indexName' => 'icons-global', +] +``` + +### Dynamic index naming + +To use environment-specific index names: + +```php +public function getEntityToIndexMappings(): array +{ + $environment = APPLICATION_ENV; // for example, 'dev', 'staging', 'prod' + + return [ + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['de_DE'], + 'indexName' => sprintf('%s-documents-de_de', $environment), + ], + ]; +} +``` + +### Multiple indices for the same entity + +You can map the same source identifier to different indices based on store and locale: + +```php +public function getEntityToIndexMappings(): array +{ + return [ + [ + 'sourceIdentifier' => 'document', + 'store' => 'DE', + 'locales' => ['de_DE'], + 'indexName' => 'fashion-docs-de', + ], + [ + 'sourceIdentifier' => 'document', + 'store' => 'US', + 'locales' => ['en_US'], + 'indexName' => 'tech-docs-us', + ], + ]; +} +``` diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-widgets-integration.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-widgets-integration.md new file mode 100644 index 00000000000..e367bf80c38 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia-widgets-integration.md @@ -0,0 +1,84 @@ +--- +title: Integration of the Algolia UI Library in the Front End +description: A how-to guide for integrating the Algolia UI Library into the Spryker front end, covering architectural considerations, component customization, and key feature implementation. +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +This guide provides technical instructions for integrating the Algolia UI Library into the Spryker front end for the [Algolia eco module](https://github.com/spryker-eco/algolia). +It focuses on architectural approach, component customization, and implementation of core features. +The key challenge is that the Algolia UI Library is not natively aligned with the Spryker front-end architecture, +so your implementation will function as an independent set of components that consume data directly from the Algolia API. + +The purpose of this guide is to walk you through building a modern search experience within your Spryker shop. By following these steps, you will be able to implement a flexible and powerful search interface with features like advanced filtering, sorting, and search suggestions, while managing performance and maintaining visual consistency with your existing design. + +## Risks and Considerations + +- **Support & Maintenance**: Be aware of the additional effort required to support Algolia components. Changes in related Spryker Core components may not automatically apply and could require manual updates. +- **Architectural Alignment**: Algolia UI components are not natively aligned with the Spryker architecture. This may result in different APIs or extension points than you are used to. +- **Performance**: Additional API calls to SCOS to get product data (for example for variants or detailed information) could impact performance. A UX solution, such as skeleton loaders or partial rendering, is recommended to mitigate the impact of slow API calls. + +## Prerequisites + +Before you begin, ensure you have met the following requirements: + +- The **[Algolia eco module](https://github.com/spryker-eco/algolia)** is installed and configured. +- Product data is successfully **synced to your Algolia indices** for each locale and sorting strategy. +- You have a clear understanding of your indexed product attributes (for example SKU, Name, Description). +- You have chosen which **InstantSearch flavor** to use: vanilla JS, React InstantSearch, or Vue InstantSearch. +- The Algolia **application ID**, **Search-Only API key**, and the index name for the current locale are determined in the application context. + +## Implementing the Algolia UI Library + +Follow this step-by-step process to integrate the Algolia UI Library. + +### 1. Initialize InstantSearch + +First, add the necessary dependencies and initialize a single `InstantSearch` instance on your page. It is crucial to maintain only one instance and attach all search widgets to it using selectors. Enable URL routing to ensure search states (queries, filters) are shareable and linkable. + +### 2. Mount Core Widgets + +Mount the essential Algolia widgets to build the search interface. This includes: +- **`searchBox`**: For user queries. +- **`hits`**: To display search results. Use a custom renderer to display product information like URL, name, image, price, and rating directly from Algolia's attributes to avoid extra API calls. +- **`refinementList`**: For category and attribute filters (for example brand). +- **`sortBy`**: To allow users to switch between different sort strategies (for example rating, price ascending/descending). Ensure the index names are consistent with those created by the Algolia eco module. +- **`pagination`** and **`stats`**: For navigation and displaying result counts. +- **Advanced Filters**: Widgets like `ratingMenu` or `rangeSlider` for price can be implemented for more advanced filtering, provided the corresponding fields exist and are correctly formatted in your index. + +### 3. Customize Component Rendering and Styling + +To ensure the new components match your site's design, you will need to customize their appearance. + +- **Styling**: Apply your own styles to the Algolia UI components. For branding consistency and code independence, reuse existing style tokens and variables from Spryker, but **avoid reusing the exact CSS class names** from other Core components. This ensures that your Algolia implementation remains loosely coupled. +- **HTML Structure**: Customize the HTML structure and CSS classes for most components to align with your design system. +- **Granular Rendering**: Use granular rendering functions for components to maximize flexibility and make future customizations easier. + +### 4. Handle Spryker-Specific Data + +Displaying complex product data like variants and prices requires a specific approach to maintain performance. + +- **Product Variants**: This is a critical feature that requires a custom solution, as default Algolia components may not handle this complexity. You will need to make additional API calls to SCOS to fetch variant data (for example colors or sizes). Because these calls can be slow, a clear UX solution like skeleton loaders is necessary to manage user perception of performance. +- **Pricing**: Whenever possible, render prices directly from the data stored in Algolia records. **Avoid on-demand API calls to SCOS for prices**, as the potential latency can degrade the user experience. For dynamic pricing, consider a deferred hydration pattern. +- **Categories**: Use the `hierarchical_categories` attribute from your Algolia index to render category breadcrumbs and facets. +- **Merchants**: Render `merchant_name` or `merchant_reference` if present. + +### 5. Wire Events for Analytics + +To enable analytics and personalization features, you must wire user interaction events. + +- **Enable Insights**: Activate the `insights` feature in your `instantsearch` configuration. This allows user interactions to be sent to Algolia, powering features like Dynamic Re-Ranking and A/B testing. +- **Track Conversions**: Use `search-insights` to send additional conversion events, such as "Add to Cart," to Algolia. + + +## Summary + +By following this guide, you have integrated the Algolia UI Library into your Spryker front end. You have created an independent set of search components that call the Algolia API directly, styled them to match your brand, and implemented core features like filtering, sorting, and variant display. The end result is a fast, responsive, and modern search experience for your users, complete with analytics tracking. + +## Next Steps + +Now that you have a baseline implementation, you can focus on further enhancements: + +- **Performance Optimization**: Implement advanced strategies like caching or batching for any necessary SCOS API calls. +- **A/B Testing**: Use the analytics data you are now collecting to run A/B tests within the Algolia dashboard to optimize your search configuration. +- **Quality Assurance**: Thoroughly test the implementation, verifying URL synchronization, locale switching, and performance, while ensuring analytics events are visible in the Algolia dashboard. \ No newline at end of file diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia.md new file mode 100644 index 00000000000..6d764de4ee8 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/algolia.md @@ -0,0 +1,167 @@ +--- +title: Algolia +description: Algolia empowers Builders with Search and Recommendation services to create world-class digital experiences. +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +![algolia-hero](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/third-party-integrations/algolia/algolia-hero.png) + +Spryker comes with [Elasticsearch](https://www.elastic.co/elasticsearch/) as the default search engine, but you can replace it with [Algolia](https://www.algolia.com/). + +Algolia stands out for its high performance. With the Algolia integration, your users can perform advanced searches for active concrete and abstract products or content in your store. + +To use Algolia as your search engine, you need an Algolia account with a paid subscription. For details about integrating Algolia, see [Integrate Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/integrate-algolia.html). + +## Searchable attributes + +Your users can search for active concrete products by the following attributes: + +- SKU +- Name +- Description +- Keywords + +Additionally, the Algolia integration supports searching content (CMS pages) and other manually indexed content (PDFs). +In the Algolia Dashboard, you can configure other attributes to be searchable. + +{% info_block infoBox "" %} + +To index documentation in files like .PDFs and .DOC, you can use the Algolia Crawler or a custom implementation to extract content and publish using the Algolia API. + +{% endinfo_block %} + +{% info_block warningBox "" %} + +In search results, the Algolia integration groups all concrete products belonging to the same abstract product. + +{% endinfo_block %} + +## Indexes + +For a Spryker store, the product indexes contain all active concrete products that can appear in search results (by default, they are grouped by abstract product SKU). +Separate indexes are created for CMS pages (one per locale). +For documents or any other custom entities, you have to prepare a search index in Algolia. + +There are separate indexes for each locale and sorting strategy. With Algolia, search results in your store can be sorted by: + +- Relevance (primary index) +- Name (ascending and descending) +- Rating (highest to lowest, products only) +- Price (type, currency, ascending and descending, products only) + +For example, if your project has two locales for products, there will be 7-9 indexes per locale in one store: + +1. Primary index for locale A +2. Sorting replicas for locale A (name ascending, name descending, rating, price ascending, price descending) +3. Primary index for locale B +4. Sorting replicas for locale B (name ascending, name descending, rating, price ascending, price descending) + +Detailed explanation of the default indexes configuration, produced by Algolia eco module: + +*Store: store1, locale: en_US, prices: NET and GROSS, currency: EUR* + +- product-store1-en_us +- product-store1-en_us-asc-name +- product-store1-en_us-desc-name +- product-store1-en_us-asc-rating +- product-store1-en_us-desc-rating +- product-store1-en_us-asc-prices.eur.net +- product-store1-en_us-desc-prices.eur.net +- product-store1-en_us-asc-prices.eur.gross +- product-store1-en_us-desc-prices.eur.gross + +*Store: store1, locale: de_DE, prices: NET and GROSS, currency: EUR* + +- product-store1-de_de +- product-store1-de_de-asc-name +- product-store1-de_de-desc-name +- product-store1-de_de-asc-rating +- product-store1-de_de-desc-rating +- product-store1-de_de-asc-prices.eur.net +- product-store1-de_de-desc-prices.eur.net +- product-store1-de_de-asc-prices.eur.gross +- product-store1-de_de-desc-prices.eur.gross + +![algolia-indexes](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/algolia/algolia/algolia-index.png) + +The Algolia index is always kept up to date with products and CMS pages changes. If a Back Office user adds or changes a searchable product attribute, such as a description, the change is immediately reflected in Algolia search results. + +### How products are stored in Algolia + +Here is an example of product data stored in Algolia: + +```jsonc +{ + "sku": "017_21748906", + "name": "Sony Cyber-shot DSC-W800", + "abstract_name": "Sony Cyber-shot DSC-W800", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "url": "/en/sony-cyber-shot-dsc-w800-17", + "product_abstract_sku": "017", + "rating": 4.5, + "keywords": "Sony,Entertainment Electronics", + "images": { + "default": [ + { + "small": "https://images.icecat.biz/img/norm/medium/21748906-Sony.jpg", + "large": "https://images.icecat.biz/img/norm/high/21748906-Sony.jpg" + } + ] + }, + "category": [ + "Demoshop", + "Cameras & Camcorders", + "Digital Cameras" + ], + "label": [], + "hierarchical_categories": { + "lvl0": "Demoshop", + "lvl1": "Demoshop > Cameras & Camcorders", + "lvl2": "Demoshop > Cameras & Camcorders > Digital Cameras" + }, + "attributes": { + "brand": "Sony", + "color": "Silver", + "digital_zoom": "40 x", + "internal_memory": "29 MB", + "optical_zoom": "5 x", + "upcs": "0013803252897", + "usb_version": "2" + }, + "merchant_name": [ // Marketplace only + "Video King", + "Budget Cameras" + ], + "merchant_reference": [ // Marketplace only + "MER000002", + "MER000005" + ], + "search_metadata": [], // Field for project-specific attributes. + "concrete_prices": { + "eur": { + "gross": 345699, + "net": 311129 + }, + "chf": { + "gross": 397554, + "net": 357798 + } + }, + "prices": { + "eur": { + "gross": 345699, + "net": 311129 + }, + "chf": { + "gross": 397554, + "net": 357798 + } + }, + "objectID": "017_21748906" +} +``` + +## Next step + +- [Integrate Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/integrate-algolia.html) diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/customize-algolia.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/customize-algolia.md new file mode 100644 index 00000000000..6092ce1b3b5 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/customize-algolia.md @@ -0,0 +1,162 @@ +--- +title: Customize Algolia Integration +description: Learn how to customize Algolia in your Spryker shop. +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +The default Algolia integration configuration is similar to Spryker's default ElasticSearch configuration. You may want to customize this configuration to better suit your needs. + +## Searchable product attributes + +![algolia-searchable-attributes](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/third-party-integrations/configure-algolia/algolia-searchable-attributes.png) + +The **Searchable attributes** configuration defines which attributes are used to find results when searching with a query. + +The default searchable attributes are: +- `sku` +- `product_abstract_sku` +- `name` +- `abstract_name` +- `category` +- `description` +- `keywords` +- `attributes.brand` + +### Add or remove searchable attributes + +1. In the Algolia Dashboard, go to **Search > Index**. +2. Open the list of Algolia indices and locate all primary indices. +3. On the **Configuration** tab, select **Searchable attributes**. +4. In the **Searchable attributes** list, add or remove the attributes you need. +5. Click **Review and save settings**. This opens the **Review and save settings** window. +6. Enable **Copy these settings to other indices and/or replicas** and click **Save settings**. + +### Add extra product attributes + +You can add extra data to exported products using the pre-configured `searchMetadata` field on `ProductConcrete` and `ProductAbstract` transfers. + +There are several ways to add search metadata. This section shows how to implement a `ProductConcreteExpanderPlugin` as an example. + +Create a new plugin that implements `ProductConcreteExpanderPluginInterface` to add searchMetadata to `ProductConcreteTransfer`, include your logic inside the plugin's `expand` method: + +```php +use Spryker\Zed\Kernel\Communication\AbstractPlugin; +use Spryker\Zed\ProductExtension\Dependency\Plugin\ProductConcreteExpanderPluginInterface; + +class SearchMetadataExampleProductConcreteExpanderPlugin extends AbstractPlugin implements ProductConcreteExpanderPluginInterface +{ + /** + * @param array<\Generated\Shared\Transfer\ProductConcreteTransfer> $productConcreteTransfers + * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer> + */ + public function expand(array $productConcreteTransfers): array + { + foreach ($productConcreteTransfers as $productConcreteTransfer) { + $productConcreteTransfer->addSearchMetadata('isBestseller', true); + // ... + // OR + // ... + $searchMetadata = [ + 'isBestseller' => true, + 'popularity' => 100, + ]; + $productConcreteTransfer->setSearchMetadata($searchMetadata); + } + return $productConcreteTransfers; + } +} +``` + +{% info_block warningBox "Associative array" %} + +The `searchMetadata` field must be an associative array. Allowed values are scalars and arrays. + +{% endinfo_block %} + +#### Using the `searchMetadata` field in Algolia + +The `searchMetadata` field in Algolia product objects is a simple object that can be used in any index configuration, just like any other field. + +## Facets (Filters) + +![algolia-facets](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/third-party-integrations/configure-algolia/algolia-facets.png) + +The **Facets** configuration defines which attributes are used for search faceting. + +The default product attributes for faceting are: +- `attributes.brand` +- `attributes.color` +- `category` +- `label` +- `prices` +- `rating` +- For marketplaces only: `merchant_name` + +The `prices` attribute is an object with nested fields. Algolia creates facets for each nested field and for all currencies and pricing modes available in product entities. + +### Facet configuration + +Algolia uses facets to categorize and group data. + +#### Facet display + +All configured index facets are displayed in the filter list on Yves or via the Glue API `/catalog-search`. +The Algolia integration supports the `renderingContent` feature, which can be found in an index's "Configuration > Facet display" section. +Here, you can configure the order of facets and add only those relevant to end users. + +In the **Merchandising** > **Filter Preferences** section of the Back Office, you can define the filter types to be displayed on the Catalog and Search pages: single-select, multi-select, or range. +By default, the multi-select type is set for all facets provided by Algolia. + +#### Searchable + +Attributes defined as searchable can be used with Algolia's `searchForFacetValues` method, which is useful for Storefront integration. +This method is necessary to display catalog page facets when there are many possible values for each facet—by default, only 100 values are shown. To access other values, you must search for them using the `searchForFacetValues` method. +Select this option if you expect a large number of different values for a facet and use the Spryker Storefront. + +#### Filter only + +Attributes defined as filter only are not used for aggregation and can only be used to narrow down search result lists. +This approach is suitable for attributes where aggregated counts are not important. + +{% info_block warningBox "Glue API search response" %} + +Setting an attribute as `filter only` prevents it from appearing in the facets list in the Glue API search response. + +{% endinfo_block %} + +#### Not searchable + +This is the default option. This facet configuration enables aggregation of search results by facet values. +The `searchForFacetValues` method cannot be used with facets configured this way. Use this option with third-party frontends +or if you have a limited number of facet values. + +#### After distinct + +By default, facet aggregation is calculated after search results for a given query are processed by deduplication or grouping. +Disabling this option changes how facet aggregation is calculated for the field. We do not recommend disabling it. + +### Filter preferences with Algolia + +When using the Algolia integration, Algolia's facet configuration is used instead of Spryker's. + +In Algolia, you can configure the list of filters in **Configuration** > **Facet display**. + +Setting any Algolia facet to **filter only** mode removes it from the list of visible filters. + +## Add new attributes for faceting + +1. In the side pane, go to **Search > Index**. +2. Locate all primary indices. +3. On the **Configuration** tab, select **Facets**. +4. To adjust the **Attributes for faceting** list, add or remove attributes. +5. Click **Review and save settings**. This opens the **Review and save settings** window. +6. Enable **Copy these settings to other indices and/or replicas** and click **Save Settings**. + +## Custom ranking and sorting + +![algolia-ranking](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/search/third-party-integrations/configure-algolia/algolia-ranking.png) + +Algolia's **Ranking and sorting** configuration determines which products are shown first when customers search your catalog. +Learn more about custom ranking and sorting in the [Algolia documentation](https://www.algolia.com/doc/guides/managing-results/must-do/custom-ranking/). + diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/getting-access-to-algolia-dashboard.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/getting-access-to-algolia-dashboard.md new file mode 100644 index 00000000000..98ccbf99c43 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/getting-access-to-algolia-dashboard.md @@ -0,0 +1,15 @@ +--- +title: Getting access to Algolia dashboard +description: Learn how you can submit a ticket to get access to your Algolia dashboard for your Spryker based shop. +template: concept-topic-template +last_updated: Feb 20, 2026 +--- + + +If you ordered Algolia through Spryker, to get access to the dashboard, create a **Request Help with Algolia Activation** case by [contacting support](https://support.spryker.com). + +In the request, provide the email address of the user who you want to make the main admin of Algolia. The main admin will be able to invite other team members. + +Algolia supports up to 19 dashboard users. + +For information on setting up Algolia, see [Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/algolia.html). diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md new file mode 100644 index 00000000000..1eae69ce392 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md @@ -0,0 +1,374 @@ +--- +title: Integrate Algolia Personalization +description: Find out how you can enable Algolia personalization in your Spryker shop +last_updated: Feb 20, 2026 +template: howto-guide-template +--- + +This document describes how to integrate Algolia Personalization. This integration also enables the following Algolia premium features: + +- Dynamic Re-Ranking +- Query Categorization +- Search analytics +- Revenue analytics +- A/B Testing + +{% info_block infoBox "Third-party frontends" %} + +By default, Spryker supports Algolia Personalization only for Yves. To integrate Algolia Personalization with a third-party or mobile frontend, follow [Algolia Personalization for headless frontends](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/algolia-personalization-with-headless-frontends.html). + +{% endinfo_block %} + +## Prerequisites + +1. [Integrate Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/integrate-algolia.html) +2. Add products to your Algolia search indexes + +## Install and update Spryker packages + +1. Install a Spryker package for tracing events: + +```bash +composer require --with-dependencies spryker-shop/traceable-event-widget:^1.1.0 +``` + +If the command doesn't work, try running it with the `--with-all-dependencies` flag. + + +2. Update Spryker packages: + +```bash +composer update --with-dependencies spryker-shop/cart-page:^3.45.0 spryker-shop/catalog-page:^1.28.0 spryker-shop/checkout-page:^3.32.1 \ +spryker-shop/home-page:^1.2.0 spryker-shop/payment-page:^1.5.0 spryker-shop/product-detail-page:^3.23.0 spryker-shop/product-group-widget:^1.10.1 \ +spryker-shop/product-review-widget:^1.16.1 spryker-shop/product-set-detail-page:^1.11.0 spryker-shop/quick-order-page:^4.10.1 \ +spryker-shop/shop-ui:^1.82.0 +``` + +If the command doesn't work, try running it with the `--with-all-dependencies` flag. + +### Enable features + +1. Enable a widget that triggers events for user actions and sends them to [Algolia Insights](https://www.algolia.com/doc/guides/sending-events/getting-started/): + +```php +// src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php + +class ShopApplicationDependencyProvider extends SprykerShopApplicationDependencyProvider +{ + + protected function getGlobalWidgets(): array + { + return [ + //... + SprykerShop\Yves\TraceableEventWidget\Widget\TraceableEventWidget::class + ]; +} +``` + +2. Enable the plugin that generates an anonymous token for guest users in the session: + +```php +// src/Pyz/Yves/EventDispatcher/EventDispatcherDependencyProvider.php + +class EventDispatcherDependencyProvider extends SprykerEventDispatcherDependencyProvider +{ + + protected function getEventDispatcherPlugins(): array + { + return [ + //... + new Spryker\Yves\Customer\Plugin\EventDispatcher\AnonymousIdSessionAssignEventDispatcherPlugin(), + ]; +} +``` + +3. Build JavaScript assets for Yves using one of the following commands: + +```bash +npm ci && npm run yves +``` + +```bash +console frontend:project:install-dependencies && console frontend:yves:build +``` + +4. Install the `search-insights` dependency: + +```bash +npm i search-insights +``` + +## Test and configure Yves customizations to work with Algolia Personalization + +If you customized Yves templates at the [project level](https://docs.spryker.com/docs/dg/dev/frontend-development/{{page.version}}/yves/atomic-frontend/managing-components/overriding-components.html#create-component-folder-on-project-level) (`src/Pyz/Yves/`), some events may not trigger or may trigger with incorrect data. + +### Run the project in a testing environment + +1. To be able to see event logs in the console, enable debug mode by setting `TraceableEventWidgetConfig::isDebugEnabled()` to `true`. +2. Run the project locally or deploy to a testing environment. +3. Open the Storefront's home page. +4. In browser development console, go to settings. +5. Enable the "Preserve log" option. + +### Check triggered events and their payload + +Execute the following cases while monitoring the console for specified events: + +Home page cases: + +| CASE | EVENT | +| - | - | +| If the home page has products, click on a product. | `PRODUCT_CLICK` | +| If the home page has the add to cart button, click on it. | `ADD_TO_CART` | + + +Product Details page cases: + +| CASE | EVENT | +| - | - | +| Open the Product Details page | `PAGE_LOAD` with the product's SKU. | +| Click **Add to cart**. | `ADD_TO_CART` with the product's SKU, currency, price, and quantity. | +| Click **Add to shopping list**. | `ADD_TO_SHOPPING_LIST` with product's SKU. | +| Click **Add to wishlist** | `ADD_TO_WISHLIST` with the product's SKU. | + +Category and Search Results page cases: + +| CASE | EVENT | +| - | - | +| Open Category or Search Results page. | `QueryID` is present in the event payload. `PAGE_LOAD` with displayed products SKUs and search filters. | +| Click on a product. | `PRODUCT_CLICK` | +| Click **Add to cart**. | `ADD_TO_CART` with the product's SKU, currency, and price. | +| Click on a filter | `FILTER_CLICK` with a list of filters. | + +Cart page cases: + +| CASE | EVENT | +| - | - | +| If applicable: add a product from the "Add to cart" widget. | `ADD_TO_CART` | +| If applicable: save cart items to a shopping list. | `ADD_TO_SHOPPING_LIST` | + +Quick Order page cases: + +| CASE | EVENT | +| - | - | +| If applicable: add a product from the "Add to cart" widget. | `ADD_TO_CART` | +| If applicable: save cart items to a shopping list. | `ADD_TO_SHOPPING_LIST` | + +Order Success page cases: + +| CASE | EVENT | +| - | - | +| Open the **Order Success** page | `PAGE_LOAD` with currency, order total, SKUs, prices, and quantities of purchased products. | + +For a full list of available events, see the [traceable-events-algolia readme file](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-algolia/README.md). + + +### Common issues and solutions + +This section covers common issues with events and their solutions. Most solutions involve adding, changing, and fixing events on the [project level](https://docs.spryker.com/docs/dg/dev/frontend-development/{{page.version}}/yves/atomic-frontend/managing-components/overriding-components.html#create-component-folder-on-project-level). + +#### Prerequisites + +1. Locate the page template or view that is used for the page with faulty events. +2. On the project level, override the `{% raw %}{% block eventTracker %}{% endraw %}` block in the template. + +For details on the event configuration API, see the [traceable-events-orchestrator README](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-orchestrator/README.md). + +#### Issue: Event not triggering on user action + +If an event isn't firing, verify that the action, like `click` or `change`, is configured for the event, like `PRODUCT_CLICK`. Detailed steps: + +1. Check the configuration is set up for new and changed components. + +```twig +{% raw %}{% block eventTracker %}{% endraw %} + {% raw %}{% set events = {{% endraw %} + list: events.list | merge([ + { + event: 'NEEDED_EVENT_NAME', // e.g., PRODUCT_CLICK + name: 'NEEDED_EVENT_LISTENER', // e.g., click/change + triggers: [...event triggers data], + }, + ]), + data: events.data, + } %} + + {% raw %}{{ parent() }}{% endraw %} +{% raw %}{% endblock %}{% endraw %} +``` + +Configuration for built-in components is provided by default. For more details, see [API documentation](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-orchestrator/README.md). + +2. Check the Event Selector. CSS selectors are provided by default. If you changed selectors, update the configuration accordingly: + +```twig +{% raw %}{% block eventTracker %}{% endraw %} + {% raw %}{% set events = {{% endraw %} + list: events.list | merge([ + { + event: 'NEEDED_EVENT_NAME', // e.g., PRODUCT_CLICK + name: 'NEEDED_EVENT_LISTENER', // e.g., click/change/load + triggers: [ + { + selector: 'new_css_selector_path', // The element selector to monitor + /* event data configuration */ + }, + ], + }, + ]), + data: events.data, + } %} + + {% raw %}{{ parent() }}{% endraw %} +{% raw %}{% endblock %}{% endraw %} + +``` + +#### Issue: Incorrect event payload + +You can view event payload in the console under `Adapter Data:`. If payload is incorrect, check and adjust static and dynamic data configuration. + +- Adjust static data in the `eventTracker` block: + +```twig +{% raw %}{% block eventTracker %}{% endraw %} + {% raw %}{% set events = {{% endraw %} + list: events.list, + data: events.data | merge({ + existing_key_to_override: New Data, + new_key: New Data, + }), + } %} + + {% raw %}{{ parent() }}{% endraw %} +{% raw %}{% endblock %}{% endraw %} +``` + +- Adjust the configuration for dynamic data for the needed triggers. + +
    + Dynamic data configuration example + +```twig +{% raw %}{% set events = {{% endraw %} + list: events.list | merge([{ + event: 'EVENT_EXAMPLE', + name: 'click', + triggers: [ + { + selector: '.js-related-products', + groupAs: { + key: 'relatedProducts', // Group data under the 'relatedProducts' key + toArray: true, // Convert the grouped data into an array format + }, + data: { + details: { + selector: 'self', // Look for the 'details' attribute within the current element + flatten: true, // Flatten the structure of the object to simplify it + }, + name: { + selector: '.product-name', // Search for an element with the 'product-name' class within the monitored element + attribute: 'price', // Use the 'price' attribute as the value; if absent, fallback to the element's text content + }, + price: { + value: 'static value', // Assign a fixed value to the 'price' attribute + }, + attributes: { + selector: '.attribute-selector', + multi: true, // Collect all matching elements and return their data as an array + }, + metadata: { + multi: true, + selector: '.metadata-row', + composed: { // Create nested structures for more detailed data gathering and start searching elements from `.metadata-row` selector. + brand: { + selector: '.product-brand', + attribute: 'textContent' + }, + category: { + selector: '.product-category', + }, + }, + }, + }, + }, + ], + }]), + data: events.data, +} %} + +{# Expected transformed data format in the console: + { + ...global data/event metadata, + relatedProducts: { + // Flattened data from the 'details' attribute + name: VALUE, // The value taken from the 'name' selector or attribute + price: 'static value', // The fixed 'price' value + attributes: [VALUE, VALUE, VALUE, ...], // Array of values collected from elements matching '.attribute-selector' + metadata: [ + { + brand: VALUE, // 'brand' data extracted from the '.metadata-row .product-brand' element + category: VALUE, // 'category' data from the '.metadata-row .product-category' element + }, + { + brand: VALUE, // 'brand' data extracted from the '.metadata-row .product-brand' element + category: VALUE, // 'category' data from the '.metadata-row .product-category' element + }, + ... + ] + } + } +#} +``` + +
    + +For more information, see [API documentation](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-orchestrator/README.md). + + +## Examples of integration into demo shops + +For examples of Algolia Personalization integration into demo shops, see the following PRs: + +- [B2C Demo Shop](https://github.com/spryker-shop/b2c-demo-shop/pull/595/files) +- [B2C Marketplace Demo Shop](https://github.com/spryker-shop/b2c-demo-marketplace/pull/474/files) +- [B2B Demo Shop](https://github.com/spryker-shop/b2b-demo-shop/pull/542/files) +- [B2B Marketplace Demo Shop](https://github.com/spryker-shop/b2b-demo-marketplace/pull/490/files) + + + +## Update privacy policy + +With Algolia Personalization, user data is tracked and sent to Algolia. To ensure user privacy, you need to update your privacy policy and proactively collect users' consent for data tracking. The data consent popup can be similar to the following: + +```Text +User Data analytics + +To enhance your experience, we use data and analytics to understand how you interact with our site. +By accepting, you allow us to capture anonymous events for personalization, analysis, and continuous improvement of your experience on our platform. +``` + +### Disable user data tracking + +If a user doesn't consent to data tracking, no user data should be sent from the application. To stop sending user action tracking events, set the `disableUserActionTracking` flag in the cookie to `true`. + + +## Verify the installation + +1. On the Storefront, do the following as a guest user: +- Search products +- Filter search results +- From search results, go to a product's page +- Add products to cart +- Place orders +2. Repeat step 3 as a logged-in user. +3. In the [Algolia Dashboard](https://dashboard.algolia.com/users/sign_in), go to **Data Sources**>**Events**. + Make sure the events you've triggered are displayed. + + +### Configure Algolia features + +When your indexes have enough data, such as unique searches and events, you can start configuring [Personalization](https://www.algolia.com/doc/guides/personalization/ai-personalization/what-is-ai-personalization/), [Dynamic Re-Ranking](https://www.algolia.com/doc/guides/algolia-ai/re-ranking/), and [Query Categorization](https://www.algolia.com/doc/guides/algolia-ai/query-categorization/) features. + + +When updating the configuration of Algolia features, make sure to A/B test them before rolling out globally. A/B testing lets you test configuration and see how it affects conversion rates for a limited audience. For more details, see [A/B Testing](https://academy.algolia.com/training/00f72f14-0713-11ef-b9fe-0617d5264223/overview). diff --git a/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia.md new file mode 100644 index 00000000000..c44dda7df44 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/algolia/integrate-algolia.md @@ -0,0 +1,807 @@ +--- +title: Integrate Algolia +description: Learn how to integrate Algolia Search into your Spryker-based projects. +template: howto-guide-template +last_updated: Feb 20, 2026 +redirect_from: + - /docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/configure-algolia.html + - /docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/disconnect-algolia.html +--- + +This document explains how to integrate [Algolia](/docs/pbc/all/search/{{page.version}}/base-shop/third-party-integrations/algolia/algolia.html) with your Spryker shop. + +## Prerequisites + +Install the required module: + +```bash +composer require -W spryker-eco/algolia +``` + +## Configure Algolia credentials + +In `config/Shared/config_default.php` or, for local development, in `config_local.php`, add the following: + +```php +use SprykerEco\Shared\Algolia\AlgoliaConstants; + +$config[AlgoliaConstants::IS_ACTIVE] = true; +$config[AlgoliaConstants::APPLICATION_ID] = getenv('ALGOLIA_APPLICATION_ID'); +$config[AlgoliaConstants::ADMIN_API_KEY] = getenv('ALGOLIA_WRITE_API_KEY'); +$config[AlgoliaConstants::SEARCH_ONLY_API_KEY] = getenv('ALGOLIA_SEARCH_API_KEY'); +// Optional: use when sharing one Algolia account across multiple environments. Default is "production". +// $config[AlgoliaConstants::TENANT_IDENTIFIER] = 'john'; +``` + +## Integrate Algolia + +### 1. Enable the console command + +In `src/Pyz/Zed/Console/ConsoleDependencyProvider.php`, register the export console command: + +```php + + */ + protected function getConsoleCommands(Container $container): array + { + $commands = [ + // ... existing commands + new AlgoliaEntityExportConsole(), + ]; + + return $commands; + } +} +``` + +### 2. Configure entity exporter plugins + +In `src/Pyz/Zed/Algolia/AlgoliaDependencyProvider.php`, register the entity exporter plugins: + +```php + + */ + protected function getAlgoliaEntityExporterPlugins(): array + { + return [ + new ProductAlgoliaEntityExporterPlugin(), + new CmsPageAlgoliaEntityExporterPlugin(), + ]; + } +} +``` + +### 3. Configure the search adapter plugin + +In `src/Pyz/Client/Search/SearchDependencyProvider.php`, register the Algolia search adapter: + +```php + + */ + protected function getClientAdapterPlugins(): array + { + return [ + new AlgoliaSearchAdapterPlugin(), + ]; + } +} +``` + +### 4. Configure catalog search query plugins + +{% info_block infoBox "" %} + +This step requires `\Pyz\Shared\Algolia\AlgoliaConfig::isSearchInFrontendEnabledForProducts()` to return `true`. + +The integration also depends on SearchHttp module plugins. Make sure they are enabled in `src/Pyz/Client/Catalog/CatalogDependencyProvider.php`. + +{% endinfo_block %} + +In `src/Pyz/Client/Catalog/CatalogDependencyProvider.php`, register the Algolia search query plugins: + +```php + + */ + protected function createCatalogSearchQueryPluginVariants(): array + { + return [ + new AlgoliaSearchQueryPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryInterface> + */ + protected function createSuggestionQueryPluginVariants(): array + { + return [ + new AlgoliaSuggestionSearchQueryPlugin(), + ]; + } + + /** + * @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryInterface> + */ + protected function createProductConcreteCatalogSearchQueryPluginVariants(): array + { + return [ + new AlgoliaProductConcreteSearchQueryPlugin(), + ]; + } +} +``` + +### 5. Configure the CMS page search query plugin + +{% info_block infoBox "" %} + +This step is optional. It requires `\Pyz\Shared\Algolia\AlgoliaConfig::isSearchInFrontendEnabledForCmsPages()` to return `true`. + +The integration also depends on SearchHttp module plugins. Make sure they are enabled in `src/Pyz/Client/SearchHttp/SearchHttpDependencyProvider.php` and `src/Pyz/Client/CmsPageSearch/CmsPageSearchDependencyProvider.php`. + +{% endinfo_block %} + +In `src/Pyz/Client/CmsPageSearch/CmsPageSearchDependencyProvider.php`, register the Algolia search query plugin for CMS pages: + +```php + + */ + protected function getCmsPageSearchQueryPlugins(): array + { + return [ + new AlgoliaSearchQueryPlugin( + (new SearchContextTransfer()) + ->setSourceIdentifier(CmsPageSearchConfig::SOURCE_IDENTIFIER_CMS_PAGE), + ), + ]; + } +} +``` + +### 6. Generate transfers + +```bash +vendor/bin/console transfer:generate +``` + +### 7. Verify the installation + +```bash +vendor/bin/console | grep algolia +vendor/bin/console algolia:entity-export +``` + +### 8. Export data to Algolia + +```bash +vendor/bin/console algolia:entity-export --all + +# Or export specific entity types: +vendor/bin/console algolia:entity-export product +vendor/bin/console algolia:entity-export cms-page +``` + +For scheduling and additional options, see [Full indexing](#full-indexing). + +### 9. Verify data in the Algolia Dashboard + +1. Log in to Algolia. +2. In the **Search** section, check the created indexes and the data inside. +3. Run searches from the Algolia Dashboard. +4. Configure index settings like [facets](https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/) and [searchable attributes](https://www.algolia.com/doc/guides/managing-results/must-do/searchable-attributes/) as needed. + +### 10. Configure real-time synchronization + +In `src/Pyz/Zed/Publisher/PublisherDependencyProvider.php`, register the Algolia publisher plugins: + +```php + 'algolia-export-products', + 'command' => $logger . '$PHP_BIN vendor/bin/console algolia:entity:export product', + 'schedule' => '0 2 * * 0', + 'enable' => true, +]; + +$jobs[] = [ + 'name' => 'algolia-export-cms-pages', + 'command' => $logger . '$PHP_BIN vendor/bin/console algolia:entity:export cms-page', + 'schedule' => '30 2 * * 0', + 'enable' => true, +]; +``` + +- `0 2 * * 0`: runs at 2:00 AM every Sunday. +- `30 2 * * 0`: runs at 2:30 AM every Sunday. + +{% info_block infoBox "" %} + +Cron jobs complement the real-time publisher plugins. The publisher plugins handle incremental updates, while the cron jobs ensure full data consistency by performing periodic complete exports. + +{% endinfo_block %} + +## Configuration + +### Available configuration methods + +**Product events:** +- `getProductConcreteSubscribedEvents()`: product variant events. +- `getProductAbstractSubscribedEvents()`: product abstract events. +- `getProductConcreteUnpublishSubscribedEvents()`: delete events. + +**CMS page events:** +- `getCmsPageUpdateSubscribedEvents()`: page update events. +- `getCmsPageVersionPublishSubscribedEvents()`: version publish events. + +**Search:** +- `isSearchInFrontendEnabledForProducts()`: enables product search in the frontend. +- `isSearchInFrontendEnabledForCmsPages()`: enables CMS page search in the frontend. + +**Insights, analytics, and personalization:** +- `getIsPersonalizationEnabled()`: enables or disables Algolia Personalization. This feature requires a premium Algolia plan. +- `getProjectMappingFacets()`: maps facet names for Algolia Insights event tracking. + +### Default event subscriptions + +All publisher plugins get their subscribed events from `AlgoliaConfig`. The configuration automatically includes events from optional modules if they are installed: + +**Products:** +- All product abstract and product concrete events. +- `ProductBundle`: bundle events (if the module is installed). +- `PriceProduct`: price events (if the module is installed). +- `ProductLabel`: label events (if the module is installed). +- `ProductReview`: review events (if the module is installed). + +**CMS pages:** +- CMS: all CMS page and version events. + +### Customize event subscriptions + +To customize events, extend `AlgoliaConfig` in your project: + +```php + + */ + protected function getAlgoliaEntityExporterPlugins(): array + { + return [ + new ProductAlgoliaEntityExporterPlugin(), + new CmsPageAlgoliaEntityExporterPlugin(), + ]; + } +} +``` + +**2c. Register real-time publisher plugins** + +In `src/Pyz/Zed/Publisher/PublisherDependencyProvider.php`, add a new `getAlgoliaPlugins()` method and call it from `getPublisherPlugins()`: + +```php +use SprykerEco\Zed\Algolia\Communication\Plugin\Publisher\CmsPage\AlgoliaCmsPagePublisherPlugin; +use SprykerEco\Zed\Algolia\Communication\Plugin\Publisher\CmsPage\AlgoliaCmsPageVersionPublisherPlugin; +use SprykerEco\Zed\Algolia\Communication\Plugin\Publisher\Product\AlgoliaProductAbstractPublisherPlugin; +use SprykerEco\Zed\Algolia\Communication\Plugin\Publisher\Product\AlgoliaProductConcreteDeletePublisherPlugin; +use SprykerEco\Zed\Algolia\Communication\Plugin\Publisher\Product\AlgoliaProductConcretePublisherPlugin; + +// ... + +protected function getAlgoliaPlugins(): array +{ + return [ + new AlgoliaCmsPagePublisherPlugin(), + new AlgoliaCmsPageVersionPublisherPlugin(), + new AlgoliaProductAbstractPublisherPlugin(), + new AlgoliaProductConcretePublisherPlugin(), + new AlgoliaProductConcreteDeletePublisherPlugin(), + new ProductCategoryProductUpdatedEventTriggerPlugin(), + new ProductLabelProductUpdatedEventTriggerPlugin(), + ]; +} +``` + +**2d. Enable frontend search** + +Create `src/Pyz/Client/Algolia/AlgoliaConfig.php`: + +```php + + */ + protected function getRouteProvider(): array + { + return [ + new ImageSearchAiRouteProviderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +To validate the route provider, send an empty POST request to `https://mysprykershop.com/search-ai/image` and make sure the `{"success": false}` JSON response with 400 code is returned. + +{% endinfo_block %} + +### 4) Set up widgets + +1. To enable widgets, register the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---------------------|------------------------------------|---------------|--------------------------------------| +| ImageSearchAiWidget | Displays the image uploader popup. | | SprykerEco\Yves\ImageSearchAi\Widget | + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ImageSearchAiWidget::class, + ]; + } +} +``` + +## Integrate the feature frontend + +1. Integrate the frontend part using the example integration in Demo Shops: +- [B2B](https://github.com/spryker-shop/b2b-demo-shop/pull/491/files) +- [B2C](https://github.com/spryker-shop/b2c-demo-shop/pull/544/files) +- [B2B Marketplace](https://github.com/spryker-shop/b2b-demo-marketplace/pull/438/files) +- [B2C Marketplace](https://github.com/spryker-shop/b2c-demo-marketplace/pull/422/files) + +2. Apply the frontend changes: + +```bash +npm install +console frontend:project:install-dependencies +console frontend:yves:build +``` + +{% info_block warningBox "Verification" %} + +On Storefront, make sure that you can upload a product image and obtain a product URL if the corresponding product is found. + +{% endinfo_block %} diff --git a/docs/pbc/all/search/202512.0/base-shop/third-party-integrations/visual-search-powered-by-openai/visual-search-powered-by-openai.md b/docs/pbc/all/search/202602.0/base-shop/third-party-integrations/visual-search-powered-by-openai/visual-search-powered-by-openai.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/third-party-integrations/visual-search-powered-by-openai/visual-search-powered-by-openai.md rename to docs/pbc/all/search/202602.0/base-shop/third-party-integrations/visual-search-powered-by-openai/visual-search-powered-by-openai.md diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-a-search-query.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-a-search-query.md similarity index 99% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-a-search-query.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-a-search-query.md index 60ccbbc9cd0..e8410cba852 100644 --- a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-a-search-query.md +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-a-search-query.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/configuring-search-query originalArticleId: a769773d-0ce1-4c0c-86e9-02755c0f9999 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-a-search-query.html - /2021080/docs/configuring-search-query - /2021080/docs/en/configuring-search-query - /docs/configuring-search-query diff --git a/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-elasticsearch.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-elasticsearch.md new file mode 100644 index 00000000000..18ca10bb004 --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-elasticsearch.md @@ -0,0 +1,460 @@ +--- +title: Configure Elasticsearch +description: Elasticsearch is a NoSQL data store that lets you predefine the structure of the data you store in it. +last_updated: Feb 5, 2026 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/search-configure-elasticsearch +originalArticleId: 6aa9f4ab-25de-46bc-b734-54bccb25cf0b +redirect_from: + - /2021080/docs/search-configure-elasticsearch + - /2021080/docs/en/search-configure-elasticsearch + - /docs/search-configure-elasticsearch + - /docs/en/search-configure-elasticsearch + - /v6/docs/search-configure-elasticsearch + - /v6/docs/en/search-configure-elasticsearch + - /v5/docs/search-configure-elasticsearch + - /v5/docs/en/search-configure-elasticsearch + - /v4/docs/search-configure-elasticsearch + - /v4/docs/en/search-configure-elasticsearch + - /v3/docs/search-configure-elasticsearch + - /v3/docs/en/search-configure-elasticsearch + - /v2/docs/search-configure-elasticsearch + - /v2/docs/en/search-configure-elasticsearch + - /v1/docs/search-configure-elasticsearch + - /v1/docs/en/search-configure-elasticsearch + - /v5/docs/configure-elasticsearch + - /v5/docs/en/configure-elasticsearch + - /v4/docs/configure-elasticsearch + - /v4/docs/en/configure-elasticsearch + - /v6/docs/configure-elasticsearch + - /v6/docs/en/configure-elasticsearch + - /v3/docs/configure-elasticsearch + - /v3/docs/en/configure-elasticsearch + - /v2/docs/configure-elasticsearch + - /v2/docs/en/configure-elasticsearch + - /v6/docs/search-30 + - /v6/docs/en/search-30 + - /v6/docs/search-40 + - /v6/docs/en/search-40 + - /v5/docs/search-30 + - /v5/docs/en/search-30 + - /v5/docs/search-40 + - /v5/docs/en/search-40 + - /v4/docs/search-30 + - /v4/docs/en/search-30 + - /v4/docs/search-40 + - /v4/docs/en/search-40 + - /v3/docs/search-30 + - /v3/docs/en/search-30 + - /v3/docs/search-40 + - /v3/docs/en/search-40 + - /v2/docs/search-30 + - /v2/docs/en/search-30 + - /v2/docs/search-40 + - /v2/docs/en/search-40 + - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/configuring-elasticsearch.html + - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/configure-elasticsearch.html + - /docs/pbc/all/search/202311.0/tutorials-and-howtos/configure-elasticsearch.html +related: + - title: Configure search for multi-currency + link: docs/pbc/all/search/page.version/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.html + - title: Configure the search features + link: docs/pbc/all/search/page.version/base-shop/tutorials-and-howtos/configure-search-features.html + - title: Configure the search query + link: docs/pbc/all/search/page.version/base-shop/tutorials-and-howtos/configure-a-search-query.html + - title: Expand search data + link: docs/pbc/all/search/page.version/base-shop/tutorials-and-howtos/expand-search-data.html + - title: Facet filter overview and configuration + link: docs/pbc/all/search/page.version/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.html +--- + +Elasticsearch is a NoSQL data store that lets you predefine the structure of the data you store in it. + +Because the data structure is static, you need to define it in advance. The definitions of the indexes and mappings are written in JSON. For more information, see the [official Elasticsearch documentation](https://www.elastic.co/guide/index.html). + +The content of the configuration files must follow the conventions listed in the [Create index API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html) document of the official Elasticsearch documentation. + +{% info_block infoBox "Note" %} + +The current search installer supports only settings and mappings. However, if you need more, you can extend it on the project level. + +**Schema example**: For the main index called `page`, you can find the default schema configuration in `vendor/spryker/search-elasticsearch/src/Spryker/Shared/SearchElasticsearch/Schema/page.json`. + +{% endinfo_block %} + +{% info_block infoBox "OpenSearch compatibility" %} + +Spryker PaaS uses OpenSearch, an AWS-maintained fork of Elasticsearch. The configuration principles in this guide apply to both. For OpenSearch-specific features and version information, see the [OpenSearch documentation](https://opensearch.org/docs/{{page.version}}/). + +{% endinfo_block %} + +## Index naming convention + +Each configured store has its index, which is installed automatically. An index name consists of the following parts: + +- An optional prefix, which is defined by the `SearchElasticsearchConstants::INDEX_PREFIX` configuration option. +- A store name. +- A configuration file name. + +Index name components are delimited with an underscore—for example, `spryker_de_page`. + +## Schema configuration approaches + +Spryker supports two approaches for defining Elasticsearch index schemas. Understanding the difference helps you choose the right approach for your project. + +### Modern approach: Schema directory (Recommended) + +The modern and recommended approach uses JSON files in the `Schema` directory: + +- **Location**: `*/Shared/*/Schema/` +- **File naming**: `{index-name}.json` (for example, `page.json`, `myindex.json`) +- **Configuration method**: `SearchElasticsearchConfig::getJsonSchemaDefinitionDirectories()` +- **Use case**: Creating new indexes or extending existing ones + +**Examples**: + +- Core schema: `vendor/spryker/search-elasticsearch/src/Spryker/Shared/SearchElasticsearch/Schema/page.json` +- Project-level customization: `src/Pyz/Shared/Search/Schema/page.json` + +This approach offers flexibility through modular schema definitions. Files can contain complete index definitions or only the parts you want to extend or override. + +### Legacy approach: IndexMap directory (Deprecated) + +The older approach uses JSON files in the `IndexMap` directory: + +- **Location**: `*/Shared/*/IndexMap/` +- **File naming**: `search.json` +- **Configuration method**: `SearchConfig::getJsonIndexDefinitionDirectories()` (deprecated) +- **Status**: Maintained for backward compatibility but not recommended for new implementations + +{% info_block warningBox "Deprecation notice" %} + +The IndexMap approach is deprecated. For new projects or when extending existing schemas, use the modern Schema directory approach instead. + +{% endinfo_block %} + +## Schema merging and customization + +Spryker automatically merges all JSON files with the same name across different modules, enabling you to customize schemas without modifying core files. + +### How merging works + +1. The `SchemaDefinitionFinder` locates all JSON files in configured Schema directories +2. The `IndexDefinitionLoader` loads each file +3. The `IndexDefinitionMerger` merges files with matching names using `array_replace_recursive()` + +**Merging order**: + +1. Core vendor schemas (from `vendor/spryker/*/src/*/Shared/*/Schema/`) +2. Project-level schemas (from `src/*/Shared/*/Schema/`) + +Project-level definitions override core definitions for matching keys. + +### Merging example + +Core schema (`vendor/spryker/search-elasticsearch/src/Spryker/Shared/SearchElasticsearch/Schema/page.json`): + +```json +{ + "settings": { + "analysis": { + "analyzer": { + "suggestion_analyzer": { + "tokenizer": "standard", + "filter": ["lowercase"] + } + } + } + }, + "mappings": { + "page": { + "properties": { + "full-text": { + "type": "text" + } + } + } + } +} +``` + +Project-level schema (`src/Pyz/Shared/Search/Schema/page.json`): + +```json +{ + "settings": { + "analysis": { + "analyzer": { + "fulltext_index_analyzer": { + "tokenizer": "keyword", + "filter": ["lowercase", "fulltext_index_ngram_filter"] + } + } + } + }, + "mappings": { + "page": { + "properties": { + "full-text": { + "analyzer": "fulltext_index_analyzer" + } + } + } + } +} +``` + +Resulting merged schema: + +```json +{ + "settings": { + "analysis": { + "analyzer": { + "suggestion_analyzer": { + "tokenizer": "standard", + "filter": ["lowercase"] + }, + "fulltext_index_analyzer": { + "tokenizer": "keyword", + "filter": ["lowercase", "fulltext_index_ngram_filter"] + } + } + } + }, + "mappings": { + "page": { + "properties": { + "full-text": { + "type": "text", + "analyzer": "fulltext_index_analyzer" + } + } + } + } +} +``` + +### Store-specific schemas + +To create store-specific schema overrides, prefix the filename with the store code: + +- `de_page.json` - Applies only to the DE store +- `us_page.json` - Applies only to the US store +- `page.json` - Applies to all stores (unless overridden by store-specific files) + +This is useful when different stores require different analyzers, language-specific tokenizers, or other locale-specific configurations. + +## Source identifier management + +Spryker uses an allowlist mechanism to control which index schema files are processed during installation. This prevents accidental or unauthorized index creation. + +### How source identifiers work + +The source identifier is derived from the JSON filename: + +- `page.json` → source identifier: `page` +- `product-review.json` → source identifier: `product-review` +- `myindex.json` → source identifier: `myindex` + +Spryker loads and installs only files whose source identifiers are listed in `SearchElasticsearchConfig::getSupportedSourceIdentifiers()`. Files with unlisted source identifiers are skipped. + +**Code reference**: The filtering happens in `IndexDefinitionLoader::load()` at `src/Spryker/SearchElasticsearch/src/Spryker/Zed/SearchElasticsearch/Business/Definition/Loader/IndexDefinitionLoader.php:60-62`: + +```php +if (!$this->sourceIdentifier->isSupported($sourceIdentifier, $storeName)) { + continue; +} +``` + +### Configure supported source identifiers + +To add support for new indexes, override `SUPPORTED_SOURCE_IDENTIFIERS` in your project-level configuration: + +**src/Pyz/Shared/SearchElasticsearch/SearchElasticsearchConfig.php** + +```php +src/Pyz/Shared/Search/Schema/page.json + +```json +{ + "settings": { + "analysis": { + "analyzer": { + "fulltext_index_analyzer": { + "tokenizer": "keyword", + "filter": ["my_custom_word_delimiter_graph_filter", "lowercase", "fulltext_index_ngram_filter"] + }, + "fulltext_search_analyzer": { + "tokenizer": "keyword", + "filter": ["custom_word_delimiter_graph_filter", "lowercase"] + } + }, + "filter": { + "fulltext_index_ngram_filter": { + "type": "edge_ngram", + "min_gram": 2, + "max_gram": 20 + }, + "custom_word_delimiter_graph_filter": { + "type": "word_delimiter_graph", + "type_table": [ "& => ALPHA" ], + "split_on_case_change": false, + "split_on_numerics": false + } + } + } + }, + "mappings": { + "page": { + "properties": { + "full-text": { + "analyzer": "fulltext_index_analyzer", + "search_analyzer": "fulltext_search_analyzer" + }, + "full-text-boosted": { + "analyzer": "fulltext_index_analyzer", + "search_analyzer": "fulltext_search_analyzer" + } + } + } + } +} +``` + +
    + +After creating or modifying schema files, follow the installation steps in the [Install indexes and mappings](#install-indexes-and-mappings) section. + +## Install indexes and mappings + +To install or update indexes and mappings, run the following commands: + +```php +vendor/bin/console search:setup:sources +vendor/bin/console search:setup:source-map +``` + +The first command installs indexes that do not exist and [updates the mappings](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html) based on the JSON configurations. + +If an index is created with the given settings, those settings cannot be changed by running this process again, but the mapping can be modified. + +In the development environment, to create new analyzers or change the index settings, you must delete the index and run the installation process again. + +### Populate indexes with data + +After installation, populate the newly created index with data: + +```php +vendor/bin/console publish:trigger-events +``` + +### Generated helper classes + +After running the `search:setup:source-map` command, a helper class is autogenerated for every installed index. You can find these classes under the `\Generated\Shared\Search` namespace. The name of the generated class starts with the name of the index and is followed by the suffix `IndexMap`. + +For the default page index, the class is `\Generated\Shared\Search\PageIndexMap`. + +These classes provide information from the mapping, such as fields and metadata. Use these classes for references to program against something related to that mapping schema. + +If you change the mapping and run the installer, autogenerated classes change accordingly. + +## Update indexes with existing data + +Elasticsearch has limitations when updating indexes that contain data. If any issues occur, the errors provided by Elasticsearch can be confusing. + +To ensure an index is correct when updating schemas, follow these steps: + +1. Drop and recreate the index: + +```bash +APPLICATION_STORE=DE console search:index:delete +APPLICATION_STORE=DE console search:setup:sources +``` + +2. If the previous command introduced or may have introduced any changes to searchable data, rewrite the data: + +```bash +APPLICATION_STORE=DE console publish:trigger-events +``` + +3. Sync the data to Elasticsearch: + +```bash +APPLICATION_STORE=DE console sync:data +``` + +For help with more specific cases, engage with the [Spryker community](https://commercequest.space/) or [contact support](https://support.spryker.com). + +## Advanced configuration + +### Disable default mapping installation + +To disable the default mapping installation, override the core configuration defined in `Spryker\Zed\SearchElasticsearch\SearchElasticsearchConfig::getJsonSchemaDefinitionDirectories()` by implementing it on the project level—for example, in `Pyz\Zed\SearchElasticsearch\SearchElasticsearchConfig`. + +{% info_block warningBox "Warning" %} + +Disabling default mappings means you must provide all necessary schema configurations at the project level. This is an advanced configuration option and should only be used when you have specific requirements that cannot be met by extending the default schemas. + +{% endinfo_block %} diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-features.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-features.md similarity index 99% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-features.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-features.md index 781921c4898..ecfb76df499 100644 --- a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-features.md +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-features.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/configuring-the-search-features originalArticleId: 82a42db7-678d-405c-bc14-44685b7a8099 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-features.html - /2021080/docs/configuring-the-search-features - /2021080/docs/en/configuring-the-search-features - /docs/configuring-the-search-features diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md similarity index 99% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md index e5f1e5c6d4c..e2da633f882 100644 --- a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/search-multi-currency originalArticleId: bd8aa34b-bd53-4d64-8292-cfa026880e00 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/configure-search-for-multi-currency.html - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/configuring-search-for-multi-currency.html - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/configure-search-for-multi-currency.html - /docs/pbc/all/search/202311.0/tutorials-and-howtos/configure-search-for-multi-currency.html diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/expand-search-data.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/expand-search-data.md similarity index 99% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/expand-search-data.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/expand-search-data.md index 21176d35dbc..74e2b724fff 100644 --- a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/expand-search-data.md +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/expand-search-data.md @@ -4,6 +4,7 @@ description: Learn how to expand entity data and create new data types in the se template: howto-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/expand-search-data.html - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/expanding-search-data.html - /docs/scos/dev/back-end-development/data-manipulation/data-interaction/search/expand-search-data.html - /docs/pbc/all/search/202311.0/tutorials-and-howtos/expand-search-data.html @@ -76,7 +77,7 @@ class FooPageDataLoaderPlugin implements ProductPageDataLoaderPluginInterface return $productPageLoadTransfers; } -} +} ``` diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md similarity index 98% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md index c2d899fed6e..a92d07a2f5b 100644 --- a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.md @@ -6,6 +6,7 @@ template: howto-guide-template originalLink: https://documentation.spryker.com/2021080/docs/t-working-filter-facets originalArticleId: ec19f80a-9fad-4f44-8d60-8957e2665e0e redirect_from: + - /docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/facet-filter-overview-and-configuration.html - /2021080/docs/t-working-filter-facets - /2021080/docs/en/t-working-filter-facets - /docs/t-working-filter-facets diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-boost-cart-based-search.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-boost-cart-based-search.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-boost-cart-based-search.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-boost-cart-based-search.md diff --git a/docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-content-and-search-attribute-cart-based-catalog-personalization.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-content-and-search-attribute-cart-based-catalog-personalization.md similarity index 100% rename from docs/pbc/all/search/202512.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-content-and-search-attribute-cart-based-catalog-personalization.md rename to docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-content-and-search-attribute-cart-based-catalog-personalization/tutorial-content-and-search-attribute-cart-based-catalog-personalization.md diff --git a/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-integrate-any-search-engine-into-a-project.md b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-integrate-any-search-engine-into-a-project.md new file mode 100644 index 00000000000..365a95dd04d --- /dev/null +++ b/docs/pbc/all/search/202602.0/base-shop/tutorials-and-howtos/tutorial-integrate-any-search-engine-into-a-project.md @@ -0,0 +1,384 @@ +--- +title: "Tutorial: Integrate any search engine into a project" +description: Learn how to integrate any external search engine instead of the default Elasticsearch. +last_updated: Jun 16, 2021 +template: howto-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/tutorial-integrating-any-search-engine +originalArticleId: 1e7707ed-2b13-41d8-bdb8-c6013ac4587b +redirect_from: + - /2021080/docs/tutorial-integrating-any-search-engine + - /2021080/docs/en/tutorial-integrating-any-search-engine + - /docs/tutorial-integrating-any-search-engine + - /docs/en/tutorial-integrating-any-search-engine + - /v6/docs/tutorial-integrating-any-search-engine + - /v6/docs/en/tutorial-integrating-any-search-engine + - /docs/scos/dev/tutorials-and-howtos/introduction-tutorials/tutorial-integrating-any-search-engine-into-a-project.html + - /docs/pbc/all/search/202311.0/tutorials-and-howtos/tutorial-integrate-any-search-engine-into-a-project.html +--- + +In a Spryker-based project, you can use any external search provider instead of the default Elasticsearch. This tutorial shows how to replace the default Elasticsearch with any other search engine. + +## Challenge description + +Every search engine comes along with its own functionalities and search approaches. However, in most search platforms, the integration of search and search suggestions is similar. + +This tutorial shows how to integrate the FACT-Finder (PHP) search platform. A system integrator development team can use this guide to integrate other platforms, taking into account the differences between the target search platform. + +The integration is following the concept described in [Search Migration Concept](/docs/pbc/all/search/{{page.version}}/base-shop/install-and-upgrade/search-migration-concept.html). + +## Challenge solving highlights + +To use FACT-Finder as a search data provider, do the following: + +1. [Execute search and search suggestion requests](#executing), which implies the following actions: + + 1. Handling the search request. + 2. Building a query object from the customer's request. Usually, the request contains a query string, facets, and pagination. All project-specific parameters must be used. + 3. Making a request to FACT-Finder with the built query object. + 4. Mapping the response to the shop's specific format. + +2. [Handle search update events](#populate). + + + +### Executing search and search suggestion requests + +To execute the search and search suggestion requests, follow these steps: + +#### 1. Build and pass a query + +1. Define, for example, the `FfSearchQueryTransfer` object, which must contain at least `searchString` (string, customer's input) and `requestParams` (string, containing, for example, pagination and filters): + +```xml + + + + +``` + +2. Create a query model—for example, `FactFinderQuery`. The basic version can look like this: + +
    +Code sample + +```php +class FactFinderQuery implements QueryInterface, SearchContextAwareQueryInterface +{ + /** + * @var FfSearchQueryTransfer + */ + private $searchQueryTransfer; + + /** + * @var SearchContextTransfer + */ + private $searchContextTransfer; + + /** + * @param FfSearchQueryTransfer $queryTransfer + */ + public function __construct(FfSearchQueryTransfer $queryTransfer) + { + $this->searchQueryTransfer = $queryTransfer; + } + + /** + * @inheritDoc + */ + public function getSearchQuery() + { + return $this->searchQueryTransfer; + } + + /** + * @inheritDoc + */ + public function getSearchContext(): SearchContextTransfer + { + $this->searchContextTransfer = $this->searchContextTransfer ?? (new SearchContextTransfer())->setSourceIdentifier(FFSearchAdapterPlugin::FF); + + return $this->searchContextTransfer; + } + + /** + * @inheritDoc + */ + public function setSearchContext(SearchContextTransfer $searchContextTransfer): void + { + $this->searchContextTransfer = $searchContextTransfer; + } +} +``` + +
    + +3. In particular `catalogSearch` and `catalogSuggestSearch`, extend `Spryker\Client\Catalog\CatalogClient`: + +```php +public function catalogSuggestSearch($searchString, array $requestParameters = []) + { + $searchQuery = $this->buildFFSearchQuery($searchString, $requestParams); + + return $this + ->getFactory() + ->getSearchClient() + ->search($searchQuery); + } + + private function buildFFSearchQuery($searchString, $requestParams): FactFinderQuery + { + $ffSearchQueryTransfer = new FfSearchQueryTransfer(); + $ffSearchQueryTransfer->setSearchString($searchString) + ->setRequestParams($requestParams); + + $searchQuery = new FactFinderQuery($ffSearchQueryTransfer); + } +``` + +#### 2. Execute the search request + +To handle search requests through a different source, you need your own model implementing the `SearchAdapterPluginInterface` interface. + +The following is a template for this model: + +
    +Code sample: + +```php +class FFSearchAdapterPlugin implements SearchAdapterPluginInterface +{ + const FACT_FINDER = 'FACT_FINDER'; + + /** + * @inheritDoc + */ + public function search(QueryInterface $searchQuery, array $resultFormatters = [], array $requestParameters = []) + { + return ; + } + + /** + * @inheritDoc + */ + public function readDocument(SearchDocumentTransfer $searchDocumentTransfer): SearchDocumentTransfer + { + // TODO: Implement readDocument() method. + } + + /** + * @inheritDoc + */ + public function deleteDocument(SearchDocumentTransfer $searchDocumentTransfer): bool + { + // TODO: Implement deleteDocument() method. + } + + /** + * @inheritDoc + */ + public function deleteDocuments(array $searchDocumentTransfers): bool + { + // TODO: Implement deleteDocuments() method. + } + + /** + * @inheritDoc + */ + public function isApplicable(SearchContextTransfer $searchContextTransfer): bool + { + return $searchContextTransfer->getSourceIdentifier() === self::FACT_FINDER; + } + + /** + * @inheritDoc + */ + public function writeDocument(SearchDocumentTransfer $searchDocumentTransfer): bool + { + // TODO: Implement writeDocument() method. + } + + /** + * @inheritDoc + */ + public function writeDocuments(array $searchContextTransfers): bool + { + // TODO: Implement writeDocuments() method. + } + + /** + * @inheritDoc + */ + public function getName(): string + { + return self::FACT_FINDER; + } +} +``` + +
    + +The `isApplicable` method in the preceding template validates that the request is supposed to be processed in this adapter—in this example, by FACT-Finder. + +Make sure that all events affecting FACT-Finder-related product data are triggered with this type. For this purpose, the following change is required in `Pyz/Zed/ProductPageSearch/Persistence/Propel/Schema/spy_product_page_search.schema.xml`: + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +#### 3. Request data from FACT-Finder + +Implement method search in the adapter plugin. +Your search function receives `FactFinderQuery` with `FFSearchQueryTransfer` in it as the first argument. + +Prepare proper request to a FACT-Finder based on these parameters. + +If you need specific `$resultFormatters` or `$requestParameters`, use the arrays proposed in the adapter plugin. + +#### 4. Map response + +The general idea behind the mapping of the response is to make sure you can display the received data. + +The FACT-Finder module provides a response in `FactFinderSdkSearchResponse`, but Spryker provides the complete rendering of the search results and search suggestions based on the response from the default search provider, which is Elasticsearch. + +It means that in order to use the FACT-Finder response, you have to comply with the response structure produced there. This will be changed in the future, but for now, you have to implement mapping to the similar response Elasticsearch modules provides. +You have to respond with an object, supporting an array-based or `get`-based index—for example, creating a JSON object or a transfer object. + +
    Code sample of a response from the search provider: + +```json +{ + "facets": { + "category": {}, + "price-DEFAULT-EUR-GROSS_MODE": {}, + "rating": {}, + "label": {}, + "color": {}, + "storage_capacity": {}, + "brand": {}, + "touchscreen": {}, + "weight": {}, + "merchant_name": {} + }, + "sort": { + "sortParamNames": [], + "sortParamLocalizedNames": [], + "currentSortParam": "", + "currentSortOrder": "" + }, + "pagination": {}, + "products": [ + { + "images": [ + { + "fk_product_image_set": 277, + "id_product_image": 277, + "product_image_key": "product_image_277", + "updated_at": "2020-08-20 10:03:03.710824", + "external_url_small": "https:\/\/images.icecat.biz\/img\/gallery_mediums\/29231675_7943.jpg", + "external_url_large": "https:\/\/images.icecat.biz\/img\/gallery\/29231675_7943.jpg", + "created_at": "2020-08-20 10:03:03.710824", + "id_product_image_set_to_product_image": 277, + "sort_order": 0, + "fk_product_image": 277 + } + ], + "id_product_labels": [], + "price": 19700, + "abstract_name": "Samsung Galaxy S4 Mini", + "id_product_abstract": 63, + "type": "product_abstract", + "prices": { + "DEFAULT": 19700, + "ORIGINAL": 20000 + }, + "abstract_sku": "063", + "url": "\/en\/samsung-galaxy-s4-mini-63" + } + ], + "spellingSuggestion": null +} +``` + +
    + +Returning this JSON data as an object shows you an empty result page. + +{% info_block infoBox %} + +To see what is supported by Spryker's template, refer to `CatalogDependencyProvider::createCatalogSearchResultFormatterPlugins`. + +{% endinfo_block %} + +The response structure for search suggestions must be investigated in a similar way. + + + +### Populate Fact Finder with product data + +To handle search update events, use the instructions from the following sections. + + +#### 1. Adjust the Adapter plugin + +To handle search update events, you have to implement the following methods of the `SearchAdapterPluginInterface`: + +- `deleteDocument`—when a single document is supposed to be removed. You will receive an internal identifier as a key +- `deleteDocuments`—when documents are supposed to be removed in bulk. You will receive a list of internal identifiers +- `writeDocument` +- `writeDocuments` + +#### 2. Handle the events + +Since Spryker stores not only product data in Elasticsearch, but also CMS pages and categories, you have to make sure that only product data is handled by the FACT-Finder adapter. + +To achieve this, in `spy_product_page_search.schema.xml`, change the schema for the search documents. Make sure to use the same source identifier as used in the adapter class. + +```xml + + + + + + + +
    + + + + + +
    + +
    +``` + +#### 3. Map data + +To load and map data properly, you might have to adjust data loaders, expanders, and mappers in `ProductPageSearchDependencyProvider`, both for product abstract and product concrete. + +After completing these steps, the search engine is integrated into your project. + +## Using search service provider in Glue API + +The current version of the catalog search in Glue has more requirements for the response. + +It expects that `sort` value in the response supports `toArray` function and contains `sortParamNames`, `sortParamLocalizedNames`, `currentSortParam`, and `currentSortOrder` fields. As a reference, use the `RestCatalogSearchSortTransfer` transfer object. diff --git a/docs/pbc/all/search/202512.0/marketplace/glue-api-retrieve-autocomplete-and-search-suggestions.md b/docs/pbc/all/search/202602.0/marketplace/glue-api-retrieve-autocomplete-and-search-suggestions.md similarity index 100% rename from docs/pbc/all/search/202512.0/marketplace/glue-api-retrieve-autocomplete-and-search-suggestions.md rename to docs/pbc/all/search/202602.0/marketplace/glue-api-retrieve-autocomplete-and-search-suggestions.md diff --git a/docs/pbc/all/search/202512.0/marketplace/glue-api-search-the-product-catalog.md b/docs/pbc/all/search/202602.0/marketplace/glue-api-search-the-product-catalog.md similarity index 100% rename from docs/pbc/all/search/202512.0/marketplace/glue-api-search-the-product-catalog.md rename to docs/pbc/all/search/202602.0/marketplace/glue-api-search-the-product-catalog.md diff --git a/docs/pbc/all/search/202512.0/search.md b/docs/pbc/all/search/202602.0/search.md similarity index 100% rename from docs/pbc/all/search/202512.0/search.md rename to docs/pbc/all/search/202602.0/search.md diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-self-service-portal.md b/docs/pbc/all/self-service-portal/202602.0/install/install-self-service-portal.md new file mode 100644 index 00000000000..3fa36ffcf39 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-self-service-portal.md @@ -0,0 +1,8 @@ +--- +title: Install Self-Service Portal +description: Learn how to integrate Self-Service Portal into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-self-service-portal.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-based-catalog-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-based-catalog-feature.md new file mode 100644 index 00000000000..1c661e324c2 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-based-catalog-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the asset based catalog feature +description: Learn how to integrate SSP aset based catalog feature +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-asset-based-catalog-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-management-feature.md new file mode 100644 index 00000000000..94cdb1cf5bb --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-asset-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP Asset Management feature +description: Learn how to integrate SSP Asset Management into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-asset-management-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-dashboard-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-dashboard-management-feature.md new file mode 100644 index 00000000000..0f9fa749d7d --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-dashboard-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP Dashboard Management feature +description: Learn how to integrate SSP Dashboard Management into a Spryker project +last_updated: Jan 5, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-dashboard-management-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-file-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-file-management-feature.md new file mode 100644 index 00000000000..0eea32d0298 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-file-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP File Management feature +description: Learn how to integrate SSP File Management into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-file-management-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-inquiry-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-inquiry-management-feature.md new file mode 100644 index 00000000000..268604d0ad9 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-inquiry-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP Inquiry Management feature +description: Learn how to integrate SSP Inquiry Management into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-inquiry-management-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-model-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-model-management-feature.md new file mode 100644 index 00000000000..107e4ae753b --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-model-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP Model Management feature +description: Learn how to integrate SSP Model Management into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-model-management-feature.md %} \ No newline at end of file diff --git a/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-service-management-feature.md b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-service-management-feature.md new file mode 100644 index 00000000000..0666a0852fb --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/install-the-ssp-service-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the SSP Service Management feature +description: Learn how to integrate SSP Service Management into a Spryker project +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-ssp-service-management-feature.md %} diff --git a/docs/pbc/all/self-service-portal/202602.0/install/ssp-frontend-templates.md b/docs/pbc/all/self-service-portal/202602.0/install/ssp-frontend-templates.md new file mode 100644 index 00000000000..eac7b2d18c5 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/ssp-frontend-templates.md @@ -0,0 +1,9 @@ +--- +title: Set up SSP frontend templates +description: Learn how to set up frontend templates for Self-Service Portal features +last_updated: Jan 9, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/ssp-frontend-templates.md %} + diff --git a/docs/pbc/all/self-service-portal/202602.0/install/ssp-glossary-data-import.md b/docs/pbc/all/self-service-portal/202602.0/install/ssp-glossary-data-import.md new file mode 100644 index 00000000000..45cd46da692 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/install/ssp-glossary-data-import.md @@ -0,0 +1,8 @@ +--- +title: SSP glossary demo data +description: Check glossaries for Self-Service Portal +last_updated: Jan 8, 2026 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/ssp-glossary-data-import.md %} diff --git a/docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-add-ssp-assets.md b/docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-add-ssp-assets.md similarity index 99% rename from docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-add-ssp-assets.md rename to docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-add-ssp-assets.md index 75706091190..fb8d622bdff 100644 --- a/docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-add-ssp-assets.md +++ b/docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-add-ssp-assets.md @@ -26,11 +26,11 @@ This document describes how to add assets managed by companies. - **In Review**: The asset is being reviewed by a company user with admin permissions - **Approved**: The asset is approved and ready to be used - **Deactivated**: The asset can't be used - + 6. Optional: For **NOTE**, enter any useful information about the asset. 7. Optional: For **COMPANY**, enter and select one or more companies to add the asset to. 8. Optional: For **BUSINESS UNIT**, enter and select one or more business units to add the asset to. 9. Optional: For **BUSINESS UNIT OWNER**, select business unit that owns the asset. 10. Optional: To upload an image for the asset, click UPLOAD and select the image from your computer. 11. Click **Save**. - This opens the view asset page with a success message displayed. \ No newline at end of file + This opens the view asset page with a success message displayed. \ No newline at end of file diff --git a/docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-attach-ssp-files-to-assets-and-entities.md b/docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-attach-ssp-files-to-assets-and-entities.md similarity index 100% rename from docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-attach-ssp-files-to-assets-and-entities.md rename to docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-attach-ssp-files-to-assets-and-entities.md diff --git a/docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-upload-ssp-files.md b/docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-upload-ssp-files.md similarity index 99% rename from docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-upload-ssp-files.md rename to docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-upload-ssp-files.md index 4debdf0adde..ba9b080f196 100644 --- a/docs/pbc/all/self-service-portal/202512.0/manage-in-the-back-office/back-office-upload-ssp-files.md +++ b/docs/pbc/all/self-service-portal/202602.0/manage-in-the-back-office/back-office-upload-ssp-files.md @@ -11,7 +11,7 @@ template: back-office-user-guide-template This displays the selected files. 4. Click **Upload**. This shows a success message and displays the files in the list. - + ## Next steps [Attach SSP files to assets and company entities](/docs/pbc/all/self-service-portal/{{page.version}}/manage-in-the-back-office/back-office-attach-ssp-files-to-assets-and-entities.html) \ No newline at end of file diff --git a/docs/pbc/all/self-service-portal/202602.0/self-service-portal.md b/docs/pbc/all/self-service-portal/202602.0/self-service-portal.md new file mode 100644 index 00000000000..a304e1d5e3a --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/self-service-portal.md @@ -0,0 +1,35 @@ +--- +title: Self-Service Portal +description: Streamline after-sales operations with the B2B Self-Service Portal. Manage assets, services, inquiries, and documents from a single, role-based interface. +template: concept-topic-template +last_updated: Apr 10, 2025 +--- + + +The B2B Self-Service Portal (SSP) is a centralized platform that streamlines after-sales interactions, boosting operational efficiency and customer satisfaction. It brings together essential features such as asset management, inquiry handling, service coordination, file sharing, and dashboards into a single interface. This enables businesses to manage high-value or custom-built products, track service history, and maintain clear communication with customers. + +Through SSP, users can submit and monitor inquiries, schedule maintenance, and access key documents like manuals and service reports. The dashboard provides a personalized overview of relevant activities and metrics, tailored by user roles and permissions. Overall, SSP enhances transparency, speeds up support processes, and ensures secure access to business-critical information. + +{% info_block warningBox "Install all SSP features" %} + +For the Self-Service Portal to work correctly, you must install all SSP features. Each feature depends on the others for proper functionality. Make sure to install all of the following features: + +- [Install the SSP Asset Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-asset-management-feature.html) +- [Install the SSP Dashboard Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-dashboard-management-feature.html) +- [Install the SSP File Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-file-management-feature.html) +- [Install the SSP Inquiry Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-inquiry-management-feature.html) +- [Install the SSP Model Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-model-management-feature.html) +- [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-service-management-feature.html) +- [Install the Asset-Based Catalog feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-asset-based-catalog-feature.html) + +{% endinfo_block %} + +To learn more about SSP, see the following docs: +- [Self-Service Portal Asset Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-asset-management-feature-overview.html) +- [Self-Service Portal Asset-based catalog feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-asset-based-catalog-feature-overview.html) +- [Self-Service Portal Dashboard Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-dashboard-management-feature-overview.html) +- [Self-Service Portal File Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-file-management-feature-overview.html) +- [Self-Service Portal Inquiry Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-inquiry-management-feature-overview.html) +- [Self-Service Portal Models feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-model-management-feature-overview.html) +- [Self-Service Portal Service Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-service-management-feature-overview.html) +- [Self-Service Portal Service Management architecture overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-service-management-architecture-overview.html) diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-asset-based-catalog-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-asset-based-catalog-feature-overview.md similarity index 89% rename from docs/pbc/all/self-service-portal/202512.0/ssp-asset-based-catalog-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-asset-based-catalog-feature-overview.md index 3d4a3e5e769..c37d8190941 100644 --- a/docs/pbc/all/self-service-portal/202512.0/ssp-asset-based-catalog-feature-overview.md +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-asset-based-catalog-feature-overview.md @@ -22,25 +22,25 @@ You define compatibility at the model level by assigning product lists to a mode To build an asset-specific catalog, you typically follow these steps: -1. **Create a model and assign assets** - - Create a model that represents a machine family (for example, *Press Machine 1200 Series*). +1. **Create a model and assign assets** + - Create a model that represents a machine family (for example, *Press Machine 1200 Series*). - Assign all assets belonging to this machinery type to the model. -2. **Create spare part and service products** - - In the Product Back Office, create products that represent spare parts and services. +2. **Create spare part and service products** + - In the Product Back Office, create products that represent spare parts and services. - For spare parts, use the dedicated *spare part* product class to distinguish them from regular products. -3. **Add products to product lists** - - Group compatible spare parts and services into product lists, for example: - - *P1200 Hydraulic Components* - - *Electrical Sensor Kit for Series 1200* +3. **Add products to product lists** + - Group compatible spare parts and services into product lists, for example: + - *P1200 Hydraulic Components* + - *Electrical Sensor Kit for Series 1200* - *Maintenance Kit Type A* -4. **Assign product lists to models** - - Assign one or more product lists to each model. +4. **Assign product lists to models** + - Assign one or more product lists to each model. - All assets assigned to the model now inherit compatibility with the products from these lists. -5. **Use the model relations in the storefront** +5. **Use the model relations in the storefront** - When a user browses in an asset or model context, the storefront filters the catalog to products from the product lists assigned to that model. ## Storefront behavior diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-asset-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-asset-management-feature-overview.md similarity index 96% rename from docs/pbc/all/self-service-portal/202512.0/ssp-asset-management-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-asset-management-feature-overview.md index 4b8d83ebca4..feb919189c4 100644 --- a/docs/pbc/all/self-service-portal/202512.0/ssp-asset-management-feature-overview.md +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-asset-management-feature-overview.md @@ -2,6 +2,8 @@ title: SSP Assets Management feature overview description: The Asset Management feature allows customers abd Back Office users to manage assets within the organization. template: concept-topic-template +redirect_from: + - /docs/pbc/all/self-service-portal/202512.0/ssp-asset-management-feature-overview.html last_updated: Dec 18, 2025 --- diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-dashboard-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-dashboard-management-feature-overview.md similarity index 96% rename from docs/pbc/all/self-service-portal/202512.0/ssp-dashboard-management-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-dashboard-management-feature-overview.md index 990d8bb3ad7..85c2be4269c 100644 --- a/docs/pbc/all/self-service-portal/202512.0/ssp-dashboard-management-feature-overview.md +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-dashboard-management-feature-overview.md @@ -2,6 +2,8 @@ title: Self-Service Portal Dashboard Management feature overview description: View key metrics, assets, inquiries, and services in a role-based dashboard for company users, accessible from the storefront's customer account menu. template: concept-topic-template +redirect_from: + - /docs/pbc/all/self-service-portal/202512.0/ssp-dashboard-management-feature-overview.html last_updated: Dec 18, 2025 --- diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-file-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-file-management-feature-overview.md similarity index 94% rename from docs/pbc/all/self-service-portal/202512.0/ssp-file-management-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-file-management-feature-overview.md index 14899f693d1..9e18f59d3b7 100644 --- a/docs/pbc/all/self-service-portal/202512.0/ssp-file-management-feature-overview.md +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-file-management-feature-overview.md @@ -2,6 +2,8 @@ title: Self-Service Portal Files Management feature overview description: The Files Management feature allows Back Office users to manage files within the company. template: concept-topic-template +redirect_from: + - /docs/pbc/all/self-service-portal/202512.0/ssp-file-management-feature-overview.html last_updated: Dec 18, 2025 --- diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-inquiry-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-inquiry-management-feature-overview.md similarity index 97% rename from docs/pbc/all/self-service-portal/202512.0/ssp-inquiry-management-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-inquiry-management-feature-overview.md index 0986643bf7c..a5d4f33f7fc 100644 --- a/docs/pbc/all/self-service-portal/202512.0/ssp-inquiry-management-feature-overview.md +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-inquiry-management-feature-overview.md @@ -2,6 +2,8 @@ title: Self-Service Portal Inquiry Management feature overview description: Allow customers to submit and track inquiries in a structured way while enabling Back Office users to manage, resolve, and collaborate on customer requests. template: concept-topic-template +redirect_from: + - /docs/pbc/all/self-service-portal/202512.0/ssp-inquiry-management-feature-overview.html last_updated: Dec 15, 2025 --- @@ -112,7 +114,7 @@ From here, click **View** to open the inquiry details page. If the inquiry has a In the **Status** section, view the inquiry's current status and update it based on available transitions in the Inquiry State Machine. To check all status changes, click the **Show history** button. -You can see all inquire state machine states in **Administration** > **State Machine**. +You can see all inquire state machine states in **Administration** > **State Machine**. Customer support can create inquiries on behalf of customers using the [Agent Assist feature](/docs/pbc/all/user-management/{{site.version}}/base-shop/agent-assist-feature-overview.html). diff --git a/docs/pbc/all/self-service-portal/202512.0/ssp-model-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-model-management-feature-overview.md similarity index 100% rename from docs/pbc/all/self-service-portal/202512.0/ssp-model-management-feature-overview.md rename to docs/pbc/all/self-service-portal/202602.0/ssp-model-management-feature-overview.md diff --git a/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-architecture-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-architecture-overview.md new file mode 100644 index 00000000000..0611a962975 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-architecture-overview.md @@ -0,0 +1,157 @@ +--- +title: Self-Service Portal Service Management architecture overview +description: Architecture overview of the Service Management feature, including domain models, connections, and sequence diagrams. +template: concept-topic-template +last_updated: Jan 23, 2026 +--- + +This document provides an architecture overview of the Service Management feature, explaining how services are modeled, +connected, and processed throughout the system. + +## Overview + +The Service Management feature lets you sell services through the catalog in the same way as products. Customers can +book a service that is either delivered to their address or performed at a designated service point (for example, +after-sales maintenance or repair). Each service offer defines where the service is provided (service point), what is +provided (service type), and how it is fulfilled (shipment type such as On-Site Service or Delivery). + +To sell services, you first prepare the operational setup. Service points must be imported with their addresses and +enabled service types (for example, In-Center-Service). For each enabled combination, you then create a Service entity +per service point (service point + service type), which represents the actual service availability at that location. + +In parallel, shipment types must be imported (for example, Delivery and On-Site Service), and shipment methods must be +imported and assigned to a specific shipment type so checkout can offer the correct fulfillment options. + +Services are then modeled as service products by assigning a dedicated service product class, defining allowed shipment +types per variant, and creating product offers that link the service product to the relevant service points, services ( +service type + location), and shipment types. If scheduling is required, you can optionally enforce service date and +time selection during checkout. + +In marketplace scenarios, multiple merchants can publish offers for the same service product. On the Storefront, the +product details page aggregates compatible offers, shows the available shipment types per offer, and filters offers +based on the customer's current asset or model context—enabling a unified self-service experience to compare and +purchase compatible service options. + +## Storefront examples + +Services can be found in the related category **Services** in the navigation bar. + +![Services in navigation](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/storefront-service-in-navigation.png) + +Below is an example of the service product PDP page, where customers can choose the shipment type and the most +affordable option. + +![Service product PDP](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/service-product-pdp.png) + +By pressing **Select location**, a modal window opens with the available offers at the service points. + +![Select service point modal](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/select-service-point-modal.png) + +After adding the product to the cart, customers can check the location and preferred time to receive their service. + +![Cart with service](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/cart-with-service.png) + +Customers can review purchased services in **Home** > **Customer Account** > **Services** (including order reference, +service details, date/time, and state). + +![Customer account services](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/customer-account-services.png) + +Back Office users can manage them under **the Back Office** > **Customer Portal** > **Booked Services**. + +![Back Office booked services](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/backoffice-booked-services.png) + +The checkout supports multi-step behavior by grouping On-Site Service items separately and allowing service point +changes for those items (shipment type remains fixed). Current limitations include import-only offer pricing, reduced +support for some B2B features on product offers, and no shipment type changes in cart or checkout. + +## Glossary + +| Term | Definition | +|-------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Click and Collect (C&C) | C&C business model refers to a retail strategy where customers make purchases online and then collect their ordered products from a physical store or a designated pickup location. This model combines the convenience of online shopping with the immediacy of in-store pickup. | +| Service Point | A service point is a physical location with a collection of services that are available within the service point. A service point can combine any kind of services to create any kind of service point like a warehouse or a physical store. What a service point actually is or can be considered to be is defined by the services it provides. | +| Service Point Address | Additional setting of Service Point that defines specific location of the service point where customers can go to collect their orders. It includes the street address, city, state, postal code and country. The service point address is provided to customers during the checkout process or in the order confirmation email, allowing them to know where to go for order pickup. | +| Opening Hours | Additional setting of Service Point that refers to the specific hours during which customers can access the location for order pickups or returns. These hours determine when the service point is operational and available for customer interactions. | +| Service Type | Different categories or classifications of services that a business offers to its customers. These service types are often determined by the nature of the business. Examples: Pickup service, Return service, Stock keeping service, etc. | +| Service | Service represents a specific service type that are provided (enabled) in specific Service point. A service is a capability within a service point that is offered to other entities, for example customers, merchants, third parties, basically any business entity. A service can be a point of sale, a locker where you can deliver to and customers can pick up their goods. It could be as well a loading point or loading dock. A service itself can be an aggregation of business entities that must be a logical part of this service. A service in this context is a point of interaction that exists in the real world. | +| Shipment Type | Method or option available for delivering products purchased by customers. It represents the different modes of shipment or delivery that can be chosen during the checkout process. The specific delivery types offered may vary depending on the e-commerce platform or the business's logistics capabilities. Examples: Store pickup, Same-day delivery, Standard delivery, etc. | +| Product class | A product class is used to categorize a catalog item and drive service-specific behavior. For service products, it clearly distinguishes them from standard (physical) products and enables the required service flows in Back Office and Storefront. Out of the box, the main service-related product classes are: **Service** (identifies the product as a service sold via service offers linked to service points, services, and shipment types) and **Scheduled** (identifies the service as requiring date/time selection during checkout when appointment booking is mandatory). | + +## Feature models + +### Original feature model + +![Original feature model](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/original-feature-model.png) + +### Self Service Portal feature model + +![SSP Service feature model](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/ssp-feature-model.jpg) + +## Domain model + +![Domain model](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/domain-model.png) + +## Entity connections + +### Service Point connections + +| Connection | Description | Rationale | +|------------|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| SP1 | Every service must belong to a service point. One service point can have many services. | Services are assigned to service points where it is provided, the service is an instance of its type that is available at this service point. | +| SP2 | A service point must have one address. | A service point represents a physical location in the real world, for that reason, it must have an address and geo-location. | +| SP3 | A service point can belong to one or many stores. | Service point can belong to one or many (Spryker) stores. Connection between service point and store enables possibility to provide services for specified online store. For example, if service point is connected to two online stores (Adidas and Reebok) it means that it could provide pickup service for orders created in these two stores as physical location where customers could collect their orders. | + +### Service Type connections + +| Connection | Description | Rationale | +|------------|-------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| +| ST1 | Service type can have many services enabled in specific service points. | Service that have same service type could be created for any number of service points. The service point could have only one service of specific type. | + +### Shipment Type connections + +| Connection | Description | Rationale | +|------------|--------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ShT1 | Shipment type should have one or more delivery (shipping) methods. | Shipment type is a logical grouping of specific shipping methods. For example, "In store pickup" shipment type could be represented by following shipment methods: In-Store Counter pickup, Curbside pickup, Locker pickup, etc. | +| ShT2 | Shipment type can have none or one connected service type. | If shipment type that has connection with the service is selected on checkout, it means that user can select specific service point as a destination of corresponding shipment group. | +| ShT3 | A Shipment type can belong to one or many stores. | This connection makes shipment type available at specific stores. | +| ShT4 | A product can be distributed by multiple shipment types. | Enables flexible fulfillment options for the same product. | + +### Product Offer connections + +| Connection | Description | Rationale | +|------------|----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PO1 | Product offer can be connected to none or many services. | As Product Offer is used to share stock between various services (especially selling services). As stock physically can be only in one physical place, it means that Product offer MUST be connected to services that have same service point only. | +| PO2 | Product offer can be connected to none or many shipment types. | Same product offer could be connected with few shipment types. It means that offer could be delivered by two different shipment types but price of the product is same for both of them and stock is shared. So delivery will be done from one place. For example, single product offer can be created for Pickup and Ship from store shipment types. | + +### Product class connections + +| Connection | Description | Rationale | +|------------|-------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| PC1 | A product can be assigned to zero, one, or multiple product classes. | Supports flexible classification (for example, distinguishing Service vs. Scheduled services) without creating separate product structures. Enables feature logic and UI behavior based on product type. | +| PC2 | A sales order item stores a snapshot (copy) of the product classes that were assigned to the product at the time of purchase. | Preserves the purchase context for auditing and consistent processing even if product classes change later. Ensures correct downstream behavior (for example, service handling, scheduling, reporting). | + +## ERD diagram + +![ERD diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/erd-diagram.png) + +## Sequence diagrams + +### Back Office – Create Service Offer + +![Create Service Offer sequence diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/create-service-offer-sequence-diagram.png) + +### Storefront – Buy Service Product + +![Buy Service Product sequence diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/buy-service-product-sequence-diagram.png) + +### Back Office – Review Booked Services + +![Review Booked Services sequence diagram](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/self-service-portal/ssp-service-management-architecture-overview.md/review-booked-services-sequence-diagram.png) + +## Related documents + +| Feature overviews | +|--------------------------------------------------------------------------------------------------------------------------------------------------| +| [Self-Service Portal Service Management feature overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-service-management-feature-overview.html) | +| [Service Points feature overview](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html) | +| [Shipment feature overview](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) | diff --git a/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-feature-overview.md b/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-feature-overview.md new file mode 100644 index 00000000000..519090f1610 --- /dev/null +++ b/docs/pbc/all/self-service-portal/202602.0/ssp-service-management-feature-overview.md @@ -0,0 +1,161 @@ +--- +title: Self-Service Portal Service Management feature overview +description: Let customers book services for delivery or on-site at service points, with configurable products, shipment types, and review options in Storefront and Back Office. +template: concept-topic-template +last_updated: Dec 15, 2025 +--- + + +The *Service Management* feature enables customers to book a service that is either delivered to their address or provided at a designated service point. For example, you can offer after-sales support, such as maintenance or repair. + + +## Prerequisites for selling services in the catalog + +- Add service points and their addresses. A service point is a physical location where services are provided. For details, see [Service point](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html#service-point). +- Enable the **Service Visit** service type for service points. For details, see [Service](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html#service). +- Configure a shipment method with the **On-Site Service** shipment type. For details, see [Shipment type](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html#shipment-type). + +## Selling services as products + +This section describes how to set up components for selling services as products: + +1. Set up the service product class for concrete products. This distinguishes service products from regular products in the Back Office and Storefront. +2. Set up allowed shipment types for concrete products. This determines if a product is eligible for a specific shipment type. For services that are sold at service points, configure the on-site service shipment type. +3. Create one or more product offers for each service product. The offers must be associated with service points, services, and shipment types. +4. Optional: Set service date and time as required for checkout. This can be enabled for concrete products if scheduling is necessary. + +The following sections describe each step in more detail. + +## Marketplace support for service products + +In marketplace scenarios, multiple merchants can offer service products that are compatible with the same model or asset. The SSP Service Management feature supports this by: + +- Letting each merchant create its own service offers for the same service product. +- Associating each offer with service points, services, and shipment types. +- Respecting model and asset compatibility defined by the asset-based catalog. + +On the Storefront: + +- The product details page (PDP) aggregates compatible service offers from different merchants. +- For each offer, the PDP displays the configured shipment types—for example, **On-Site Service** or **Delivery**—so customers understand how the service will be provided. +- When a customer starts from an asset or model context, only service offers compatible with that context are shown. + +This provides a unified self-service experience where customers can compare and purchase compatible service offerings from multiple merchants while keeping the compatibility rules defined in the asset and model layer. + +### Importing product classes + +The product class defines the category of a product to distinguish between standard products, services, and any other product types. + +Import product types by using the console importer: + +**product_class.csv** + +| Parameter | Required | Type | Description | +|-----------|----------|--------|----------------------------| +| key | Yes | string | Key for the product class. | +| name | Yes | string | Name of the product class. | + + +### Adding product classes to products + +To add a product class to a product in the Back Office, go to **Catalog** and select the required product. Then, select a variant. + +Alternatively, you can import product type assignments using the console importer: + +**product_to_product_class.csv** + +| Parameter | Required | Type | Description | +|-------------------|----------|--------|----------------------------| +| sku | Yes | string | Product SKU | +| product_class_key | Yes | string | Key for the product class. | + + + +### Enabling service date and time for a product + +1. In the Back Office, go to **Catalog**. +2. Select the product that you want to update. +3. In the **Variants** section, select the product variant that you want to update. +4. In the **General** tab, select **Scheduled** product class. + + + + +### Defining allowed shipment types + +1. In the Back Office, go to **Catalog**. +2. Select the product that you want to update. +3. In the **Variants** section, select the product variant that you want to update. +4. For **Allowed Shipment Types**, select one or more shipment types. + A product requires at least one allowed shipment type to be displayed on the Storefront. + + + + +### Adding product offers for products + +1. In the Back Office, go to **Catalog** > **Offers**. +2. Click **Create Offer**. +3. Fill out the form by using the following field descriptions: + +| Offer parameter | Description | +|---|---| +| Offer status | Active or inactive. | +| Stores | Spryker Marketplace is a multi-store environment. You can define which stores display the offer. | +| Stock | Offer stock that is not dependent on the corresponding product stock. | +| Quantity | Always in stock. | +| Validity Dates | Specifies the period during which the product offer is visible on the Storefront. Concrete product validity dates have higher priority over the Offer validity dates. | +| Service Point | A service point is a physical location where services are provided. Depending on the services provided, there can be different kinds of service points, such as a warehouse or a physical store. | +| Services | A service represents a specific service type that is provided at a specific service point. For example, "On-Site Service at a retail location at Julie-Wolfthorn-Straße 1, 10115 Berlin" is a unique service. | +| Shipment Types | A shipment type is a way in which a customer receives an order after placing it. Shipment type examples: Delivery, On-Site Service, In-Store Pickup, Curbside Pickup. | + + + +### Reviewing purchased services on Storefront + +Customers can review previously purchased service products in **My Account** > **Services**. + +On the **Services** page, the following information is displayed: +- Order reference +- Service +- Date and time +- Created at +- State + + +Customers can use the search to filter purchased services by product name, SKU, or order reference. + +Customers can also filter the view by who purchased services: +- My booked services +- Booked services of a specific business unit +- Booked services of a specific company + +The latter two options require the appropriate permissions. For more information on company permissions, see [Company user roles and permissions overview](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/company-account-feature-overview/company-user-roles-and-permissions-overview.html). + + +## Reviewing purchased services in the Back Office + +Back Office users can view previously purchased service products in **Orders** > **Services**. + + +## Multi-step checkout + +The SSP checkout flow adds the following functionality: + +- Customers can switch between single-address and multi-address checkout for items with the **Delivery** shipment type. +- Items with the **On-Site Service** shipment type are displayed as a separate group. +- For **On-Site Service** items, customers can change the service point but not the shipment type. + +## Current constraints + +- You cannot add product offer prices in the Back Office; you can import them only. +- Some B2B features, such as Merchant Relations, are not supported by product offers. For more information, see [Product Offer constraints](/docs/pbc/all/offer-management/{{page.version}}/marketplace/marketplace-product-offer-feature-overview.html#current-constraints). +- Customers cannot change the shipment type in the cart or during checkout. + + + +## Related developer documents + +| Installation guides | Architecture | +|---------------------|--------------| +| [Install the SSP Service Management feature](/docs/pbc/all/self-service-portal/{{page.version}}/install/install-the-ssp-service-management-feature.html) | [Self-Service Portal Service Management architecture overview](/docs/pbc/all/self-service-portal/{{page.version}}/ssp-service-management-architecture-overview.html) | diff --git a/docs/pbc/all/service-point-management/202410.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md b/docs/pbc/all/service-point-management/202410.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md deleted file mode 100644 index be55f9ab8e0..00000000000 --- a/docs/pbc/all/service-point-management/202410.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Service Points + Shipment feature -description: Learn how to integrate the Service Points + Shipment feature into your project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202307.0/install-the-shipment-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-cart-feature.md b/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-cart-feature.md deleted file mode 100644 index d4a83c32836..00000000000 --- a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Service Points Cart feature -description: Learn how to integrate the Service Points Cart feature into your Spryker Unified Commerce Project. -last_updated: Oct 5, 2023 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/service-points/202311.0/install-and-upgrade/install-the-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-service-points-cart-feature.md %} diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md b/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md deleted file mode 100644 index 4b5658b5b95..00000000000 --- a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Install the Service Points + Customer Account Management feature -description: Learn how to install the Service Points + Customer Account Management feature -last_updated: Sep 04, 2023 -template: feature-integration-guide-template ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-service-points-customer-account-management-feature.md %} diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-feature.md b/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-feature.md deleted file mode 100644 index c965d42aff8..00000000000 --- a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-feature.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Install the Service Points feature -description: Learn how to integrate the Service Points feature into your Spryker Unified Commerce project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202304.0/install-the-service-points-feature.html - - /docs/uc/all/enhanced-click-collect/202307.0/install-and-upgrade/install-features/install-the-service-points-feature.html - - /docs/pbc/all/service-points/202400.0/install-and-upgrade/install-the-service-points-feature.html - - /docs/pbc/all/service-points/202400.0/unified-commerce/install-the-service-points-order-management-feature.html - - /docs/pbc/all/service-points/202311.0/unified-commerce/install-the-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-service-points-feature.md %} diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md b/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md deleted file mode 100644 index be55f9ab8e0..00000000000 --- a/docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Service Points + Shipment feature -description: Learn how to integrate the Service Points + Shipment feature into your project -last_updated: Aug 28, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202307.0/install-the-shipment-service-points-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shipment-service-points-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/service-point-management.md b/docs/pbc/all/service-point-management/202602.0/service-point-management.md new file mode 100644 index 00000000000..07fd5f466e4 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/service-point-management.md @@ -0,0 +1,8 @@ +--- +title: Service Points Management +description: Learn about the Spryker Service points feature, allowing you to provide your services at offline locations. +template: concept-topic-template +last_updated: Jan 8, 2026 +--- + +The *Service Points Management* capability lets your customers interact with your business's offline location by means of service points. You can configure various services to be provided at your stores and warehouses. diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-domains.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-domains.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-domains.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-domains.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-marketplace-merchant-product-offer-service-point-availability-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-marketplace-merchant-product-offer-service-point-availability-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-marketplace-merchant-product-offer-service-point-availability-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-marketplace-merchant-product-offer-service-point-availability-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-availability-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-availability-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-availability-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-availability-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-service-point-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-availability-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-availability-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-availability-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-availability-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-product-offer-shipment-type-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-service-point-cart-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-service-point-cart-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-service-point-cart-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-service-point-cart-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-service-points-domain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-service-points-domain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-service-points-domain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-service-points-domain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-shipment-type-service-point-subdomain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-shipment-type-service-point-subdomain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-shipment-type-service-point-subdomain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-shipment-type-service-point-subdomain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-shipment-types-domain.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-shipment-types-domain.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/click-collect-domains/click-collect-shipment-types-domain.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/click-collect-domains/click-collect-shipment-types-domain.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/enable-click-collect.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/enable-click-collect.md similarity index 98% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/enable-click-collect.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/enable-click-collect.md index 19698d1d33b..cde1aa32d68 100644 --- a/docs/pbc/all/service-point-management/202512.0/unified-commerce/enable-click-collect.md +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/enable-click-collect.md @@ -3,6 +3,8 @@ title: Enable Click & Collect description: Learn how to enable the Spryker Click&Collect feature in to your Spryker unified commerce project. last_updated: Nov 23, 2023 template: howto-guide-template +redirect_from: + - /docs/pbc/all/service-point-management/202512.0/unified-commerce/enable-click-collect.html --- To enable the default implementation of Click & Collect, follow the steps. diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md similarity index 93% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md index 0b784864aca..23fb33a7ca1 100644 --- a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.md @@ -3,6 +3,8 @@ title: "Import file details: service_point_address.csv" description: Learn how to configure service point addresses via importing data through the service point address CSV file in your Spryker unified commerce project. last_updated: Nov 23, 2023 template: data-import-template +redirect_from: + - /docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.html --- This document describes the `service_point_address.csv` file to configure [service point addresses](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html). diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-store.csv.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point-store.csv.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point-store.csv.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point-store.csv.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md similarity index 90% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md index eefeb8ad6a0..5d75ea46898 100644 --- a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.md @@ -3,6 +3,8 @@ title: "Import file details: service_point.csv" description: Learn how to configure service points information via importing data through the service point CSV file in your Spryker unified commerce project. last_updated: Nov 23, 2023 template: data-import-template +redirect_from: + - /docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-point.csv.html --- This document describes the `service_point.csv` file to configure [service points](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html). diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md similarity index 90% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md index c0232083f90..9e719046bf4 100644 --- a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.md @@ -3,6 +3,8 @@ title: "Import file details: service_type.csv" description: Learn how to configure service type information via importing data through the service type CSV file in your Spryker unified commerce project. last_updated: Nov 23, 2023 template: data-import-template +redirect_from: + - /docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service-type.csv.html --- This document describes the `service_type.csv` file to configure [service types](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html). diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md similarity index 93% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md index 9fe4aa4777a..e466db99cd6 100644 --- a/docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/import-and-export-data/import-file-details-service.csv.md @@ -3,6 +3,8 @@ title: "Import file details: service.csv" description: Learn how to configure service information via importing data through the service CSV file in your Spryker unified commerce project. last_updated: Nov 23, 2023 template: data-import-template +redirect_from: + - /docs/pbc/all/service-point-management/202512.0/unified-commerce/import-and-export-data/import-file-details-service.csv.html --- This document describes the `service.csv` file to configure [services](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/service-points-feature-overview.html). diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-checkout-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-checkout-feature.md new file mode 100644 index 00000000000..fa6320257f0 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-checkout-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Service Points Cart + Checkout feature +description: Learn how to integrate the Service Points Cart + Checkout feature into your project +last_updated: Oct 5, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-cart-checkout-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-feature.md new file mode 100644 index 00000000000..4b7d8dd2bd0 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-cart-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Service Points Cart feature +description: Learn how to integrate the Service Points Cart feature into your Spryker Unified Commerce Project. +last_updated: Oct 5, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-cart-feature.html + - /docs/pbc/all/service-points/202311.0/install-and-upgrade/install-the-service-points-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-cart-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md new file mode 100644 index 00000000000..92ade2eb52b --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Service Points + Customer Account Management feature +description: Learn how to install the Service Points + Customer Account Management feature +last_updated: Sep 04, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-customer-account-management-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-feature.md new file mode 100644 index 00000000000..c039f93cb80 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-feature.md @@ -0,0 +1,15 @@ +--- +title: Install the Service Points feature +description: Learn how to integrate the Service Points feature into your Spryker Unified Commerce project +last_updated: Aug 28, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/service-point-management/202507.0/unified-commerce/install-features/install-the-service-points-feature.html + - /docs/scos/dev/feature-integration-guides/202304.0/install-the-service-points-feature.html + - /docs/uc/all/enhanced-click-collect/202307.0/install-and-upgrade/install-features/install-the-service-points-feature.html + - /docs/pbc/all/service-points/202400.0/install-and-upgrade/install-the-service-points-feature.html + - /docs/pbc/all/service-points/202400.0/unified-commerce/install-the-service-points-order-management-feature.html + - /docs/pbc/all/service-points/202311.0/unified-commerce/install-the-service-points-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-order-management-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-order-management-feature.md new file mode 100644 index 00000000000..e01e6f39d9d --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-order-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Service Points + Order Management feature +description: Learn how to integrate the Service Points + Order Management feature into your project +last_updated: Aug 04, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-service-points-order-management-feature.md %} diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-product-offer-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-product-offer-feature.md new file mode 100644 index 00000000000..d3ad4be15f4 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-product-offer-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Service Points + Product Offer feature +description: Learn how to integrate the Service Points + Product Offer feature into your project +last_updated: Sep 04, 2023 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-product-offer-service-points-feature.md %} diff --git a/docs/pbc/all/service-point-management/202404.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md similarity index 100% rename from docs/pbc/all/service-point-management/202404.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/install-features/install-the-service-points-shipment-feature.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.md diff --git a/docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.md similarity index 100% rename from docs/pbc/all/service-point-management/202507.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-cart-checkout-feature-overview.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-cart-checkout-feature-overview.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-cart-checkout-feature-overview.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-cart-checkout-feature-overview.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-cart-feature-overview.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-cart-feature-overview.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-cart-feature-overview.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-cart-feature-overview.md diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-customer-account-management-feature-overview.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-customer-account-management-feature-overview.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-customer-account-management-feature-overview.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-customer-account-management-feature-overview.md diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-feature-overview.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-feature-overview.md new file mode 100644 index 00000000000..dcbb8e4e8e8 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-feature-overview.md @@ -0,0 +1,100 @@ +--- +title: Service Points feature overview +description: General overview of the Spryker Service Points feature enhancing your Spryker Unified Commerce based projects. +template: concept-topic-template +last_updated: Jan 19, 2024 +--- + +The *Service Points* feature lets you create and manage service points, service types, and associated services. + +## Service point + +A *service point* is a physical location where services are provided. Depending on the services provided, there can be different kinds of service points, like a warehouse or a physical store. The definition of a service point ultimately depends on the services it provides. + +To add service points using Glue API, see [Add service points](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.html). To import service points, see [Import file details: service_point.csv](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/import-and-export-data/import-file-details-service-point.csv.html). + +To add service point addresses using Glue API, see [Add service point addresses](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.html). To import service point addresses, see [Import file details: service_point_address.csv](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.html) + +## Service type + +A *service type* is a classification of services that a business offers to its customers. Service types are determined by the nature of the business. Service type examples: +- Pickup service +- Return service +- Rental service +- Repair service + +To add service types using Glue API, see [Add service types](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.html). + +To import service types, see [Import file details: service_type.csv](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/import-and-export-data/import-file-details-service-type.csv.html). + + +## Service + +A *service* represents a specific service type that is provided at a specific service point. Because each service is unique, if two service points provide services with the same service type, like pickup, those services are represented as two separate entities and are managed accordingly. For example, a pickup service at a retail location at Julie-Wolfthorn-Straße 1, 10115, Berlin is a unique service. + +To add services using Glue API, see [Add services](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.html). + +To import services, see [Import file details: service.csv](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/import-and-export-data/import-file-details-service.csv.html). + + +## Service points use cases + + +With the help of service points, types, and services, a store operator can model different use cases depending on their business needs. Here are some examples of services that can be implemented at the project level: +- Ship from store +- Car maintenance or installations services +- Product demonstration at a retail location +- Repair service at a retail location + + +## Service points on the Storefront + +When checking out, customers select a service point they want the order to be processes at. The feature is shipped with a search widget that lets them search service points by the following: +- Service point name +- Zip code +- City + +By default, search results are sorted by city. + +![service point search widget](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/service-points-feature-overview.md/service-point-search.png) + +You can add only predefined service points by default. But developers can configure customers to be able to enter custom addresses for service points. + +After placing an order, the customer can see the selected service point on the Order Details page. + +![Storefront order with a service point](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/service-points-feature-overview.md/storefront-order-service-point.png) + + +## Current constraints + +- Services can be configured only for product offers. +- Product catalog can't be filtered by a service type or a service provided in a specific service point. +- The product offer widget on the product details page is not supported. It doesn't show the differences between product offers based on the services assigned to them. As a result, differnt product offers are displayed as duplicates. +- Customers can't add products with preselected service points to cart. They can select service points only during checkout. +- If a product is added to cart without a product offer attached to it, this product can be purchased only with the *Delivery* shipment type. + + +## Related Business User documents + +| FEATURE OVERVIEWS | MERCHANT PORTAL GUIDES | +| - | - | +| [Shipment feature overview](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/shipment-feature-overview.html) | [Create and edit product offers](/docs/pbc/all/offer-management/{{page.version}}/unified-commerce/unified-commerce-create-and-edit-product-offers.html) | + + + +## Related Developer documents + +| INSTALLATION GUIDES | GLUE API GUIDES | +| - | - | +| [Install the Service Points feature](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/install-features/install-the-service-points-feature.html) | [Add service points](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.html) | +| [Install the Service Points + Shipment feature](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/install-features/install-the-service-points-shipment-feature.html) | [Retrieve service points](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.html) | +| [Install the Service Points + Customer Account Management feature](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.html) | [Update service points](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.html) | +| [Install the Service Points + Order Management feature](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/install-features/install-the-service-points-order-management-feature.html) | [Add service types](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.html) | +| [Install the Product Offer Shipment feature](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html) | [Retrieve service types](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.html) | +| [Install the Shipment + Customer Account Management feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.html) | [Update service types](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.html) | +| | [Add service point addresses](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.html) | +| | [Retrieve service point addresses](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.html) | +| | [Add service point addresses](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.html) | +| | [Add services](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.html) | +| | [Retrieve services](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.html) | +| | [Update services](/docs/pbc/all/service-point-management/{{page.version}}/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.html) | diff --git a/docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-order-management-feature.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-order-management-feature.md similarity index 100% rename from docs/pbc/all/service-point-management/202512.0/unified-commerce/service-points-order-management-feature.md rename to docs/pbc/all/service-point-management/202602.0/unified-commerce/service-points-order-management-feature.md diff --git a/docs/pbc/all/service-point-management/202602.0/unified-commerce/tutorials-and-howtos/howto-configure-shipment-types.md b/docs/pbc/all/service-point-management/202602.0/unified-commerce/tutorials-and-howtos/howto-configure-shipment-types.md new file mode 100644 index 00000000000..3d1a7451114 --- /dev/null +++ b/docs/pbc/all/service-point-management/202602.0/unified-commerce/tutorials-and-howtos/howto-configure-shipment-types.md @@ -0,0 +1,329 @@ +--- +title: "HowTo: Configure shipment types" +description: Learn how to configure shipment types in your Spryker Commerce OS project, including adding new types and disabling existing ones. +last_updated: Jan 13, 2026 +template: howto-guide-template +--- + +## Background + +A **Shipment Type** is a classification (for example, `delivery`, `in-center-service`, `on-site-service`) used to: + +- filter and validate available shipment methods during checkout, +- drive Storefront UI selection (shipment type toggler / defaults), +- support service-point and click & collect scenarios. + +Shipment types are **data-driven**: you import them and then assign them to shipment methods. + +--- + +## 1) Install / enable the Shipment Type feature + +If the feature is not installed yet, install it using [Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) . +After installation, ensure that data imports for shipment types and shipment-method relations are enabled. + +--- + +## 2) Add a new Shipment Type + +### Step 2.1 — Import the shipment type + +1. Add the shipment type to **`shipment_type.csv`**: + +```csv +key,name,is_active +in-center-service,In-Center Service,1 +``` + +2. Assign it to stores in **`shipment_type_store.csv`**: + +```csv +shipment_type_key,store_name +in-center-service,DE +``` + +3. Run imports: + +```bash +console data:import shipment-type +console data:import shipment-type-store +``` + +### Step 2.2 — Assign the shipment type to shipment methods + +1. Map shipment methods to the new shipment type in **`shipment_method_shipment_type.csv`**: + +```csv +shipment_method_key,shipment_type_key +spryker_dummy_shipment-standard,in-center-service +``` + +2. Run import: + +```bash +console data:import shipment-method-shipment-type +``` + +**Result:** checkout can now offer shipment methods that belong to the selected shipment type. + +--- + +## 3) Configure the default Shipment Type in Storefront (Yves) + +### 3.1 Define the default shipment type in config + +**File:** `src/Pyz/Yves/SelfServicePortal/SelfServicePortalConfig.php` + +Update `getDefaultSelectedShipmentTypeKey()` to the key you want as default: + +```php +public function getDefaultSelectedShipmentTypeKey(): string +{ + return static::SHIPMENT_TYPE_DELIVERY; // change this +} +``` + +Example for `in-center-service`: + +```php +public function getDefaultSelectedShipmentTypeKey(): string +{ + return static::SHIPMENT_TYPE_IN_CENTER_SERVICE; +} +``` + +Also review these methods (recommended): + +- `getShipmentTypeSortOrder()` – controls display order +- `getDeliveryLikeShipmentTypes()` – defines which types behave "delivery-like" + +--- + +### 3.2 Update Yves Twig defaults (project overrides) + +You must update **both** locations (and any duplicates) where defaults are defined. + +#### A) Address item form field list + +**File:** +`src/Pyz/Yves/CheckoutPage/Theme/default/components/molecules/address-item-form-field-list/address-item-form-field-list.twig` + +Change: + +{% raw %} + +```twig +{% set defaultShipmentTypes = ['delivery'] %} +``` + +{% endraw %} + +To: + +{% raw %} + +```twig +{% set defaultShipmentTypes = ['in-center-service'] %} +``` + +{% endraw %} + +Or (if you intentionally support multiple defaults): + +{% raw %} + +```twig +{% set defaultShipmentTypes = ['delivery', 'in-center-service'] %} +``` + +{% endraw %} + +#### B) Checkout address view + +**File:** +`src/Pyz/Yves/CheckoutPage/Theme/default/views/address/address.twig` + +Apply the **same change** wherever the default shipment types are set or passed into components: + +{% raw %} + +```twig +{% set defaultShipmentTypes = ['delivery'] %} +``` + +{% endraw %} + +→ + +{% raw %} + +```twig +{% set defaultShipmentTypes = ['in-center-service'] %} +``` + +{% endraw %} + +> If the template doesn't define `defaultShipmentTypes` explicitly but passes a default list to a molecule/organism, update the passed value accordingly. + +--- + +### 3.3 Update the Shipment Type toggler default "checked" logic (if overridden) + +If you override the widget template: + +**File:** +`src/Pyz/Yves/ShipmentTypeWidget/Theme/default/components/molecules/shipment-type-toggler/shipment-type-toggler.twig` + +This line is commonly hardcoded to `delivery`: + +{% raw %} + +```twig +checked: activeShipmentType == '' and row.vars.value == 'delivery' ? true, +``` + +{% endraw %} + +Change `delivery` to your chosen default key: + +{% raw %} + +```twig +checked: activeShipmentType == '' and row.vars.value == 'in-center-service' ? true, +``` + +{% endraw %} + +--- + +## 4) Values for the `SHIPMENT_TYPE_*` constants + +### Rule (important) + +The constant value must be **exactly the shipment type key** you import in `shipment_type.csv`. + +Example CSV: + +```csv +key,name,is_active +in-center-service,In-Center Service,1 +delivery,Delivery,1 +on-site-service,On-Site Service,1 +``` + +Then constants must be: + +```php +const SHIPMENT_TYPE_IN_CENTER_SERVICE = 'in-center-service'; +const SHIPMENT_TYPE_DELIVERY = 'delivery'; +const SHIPMENT_TYPE_ON_SITE_SERVICE = 'on-site-service'; +``` + +If the string differs (even slightly), shipment type selection/filtering will not work. + +--- + +## 5) Optional: Enable service-point / Click & Collect shipment types + +If your shipment type means the customer receives goods/services at a **service point** (pickup / in-center), configure the applicable shipment type keys. + +### 5.1 Product offer service availability shipment types + +**File:** `src/Pyz/Client/SelfServicePortal/SelfServicePortalConfig.php` + +```php +public function getProductOfferServiceAvailabilityShipmentTypeKeys(): array +{ + return [ + self::SHIPMENT_TYPE_IN_CENTER_SERVICE, + ]; +} +``` + +### 5.2 Shipment type keys which applicable for shipping address validation (service points Storefront API) + +**File:** `src/Pyz/Shared/ShipmentTypeServicePointsRestApi/ShipmentTypeServicePointsRestApiConfig.php` + +```php +public function getApplicableShipmentTypeKeysForShippingAddress(): array +{ + return [static::SHIPMENT_TYPE_KEY_IN_CENTER_SERVICE]; +} +``` + +### 5.3 Click & Collect example configs (only if used) + +- `src/Pyz/Yves/ClickAndCollectPageExample/ClickAndCollectPageExampleConfig.php` +- `src/Pyz/Zed/ClickAndCollectExample/ClickAndCollectExampleConfig.php` + +Ensure the shipment type key matches your imported keys. +There is a configuration to define which shipment types are used for Click & Collect. +And the ones that are pickup like shipment types. + +## 6) Verification checklist + +- `GET /shipment-types` returns the new type and it is active. +- Shipment type is assigned to the store (`shipment_type_store.csv`). +- At least one shipment method is mapped to it (`shipment_method_shipment_type.csv`). +- Storefront defaults (config + Twig + toggler checked logic) use the same key. +- Checkout shows only shipment methods belonging to the selected shipment type. + +--- + +## How to disable Shipment Types + +### A) Disable the Shipment Type feature (code-level) + +To fully disable the shipment type feature behavior in Storefront and Zed, **unwire the following plugins**: + +#### Yves + +**File:** `src/Pyz/Yves/CustomerPage/CustomerPageDependencyProvider.php` +Unwire: + +- `ShipmentTypeCheckoutAddressCollectionFormExpanderPlugin` +- `ShipmentTypeCheckoutMultiShippingAddressesFormExpanderPlugin` +- `ShipmentTypeCheckoutAddressStepPreGroupItemsByShipmentPlugin` + +#### Zed – Cart + +**File:** `src/Pyz/Zed/Cart/CartDependencyProvider.php` +Unwire: + +- `SspServiceShipmentTypePreReloadItemsPlugin` + +#### Zed – Checkout + +**File:** `src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php` +Unwire: + +- `ShipmentTypeCheckoutPreConditionPlugin` + +#### Zed – Shipment + +**File:** `src/Pyz/Zed/Shipment/ShipmentDependencyProvider.php` +Unwire: + +- `ShipmentTypeShipmentMethodFilterPlugin` + +**After disabling** + +- Remove or revert shipment-type-specific Twig overrides if they are no longer needed. +- Clear caches / deploy as per your process. + +--- + +### B) Disable a specific Shipment Type (data-level) + +If you want to keep the feature but disable just one type: + +- Set `spy_shipment_type.is_active = 0`, **or** +- Use Backend API (if enabled): `PATCH /shipment-types/{uuid}` with `"isActive": false`. + +**Result:** checkout validation rejects shipment methods tied to inactive shipment types, and Storefront will not offer them. + +## Common pitfalls + +- **Default value mismatch:** If config defaults say `in-center-service` but the toggler still checks `delivery`, the UI and quote may diverge. +- **Store mapping missing:** shipment type exists but doesn't show because it's not assigned in `shipment_type_store.csv`. +- **No method mapping:** shipment type exists but checkout has no shipment methods because `shipment_method_shipment_type.csv` wasn't updated. diff --git a/docs/pbc/all/shopping-list-and-wishlist/202404.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202404.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md deleted file mode 100644 index c83b23fd256..00000000000 --- a/docs/pbc/all/shopping-list-and-wishlist/202404.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Integrate the Shopping Lists + Product Options feature -description: In this guide, we provide step-by-step instruction on how to install Shopping Lists + Product Options Feature into Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shopping-lists-product-options-feature-integration -originalArticleId: 617431ef-6b41-41f7-8e31-e31c077a450c -redirect_from: - - /2021080/docs/shopping-lists-product-options-feature-integration - - /2021080/docs/en/shopping-lists-product-options-feature-integration - - /docs/shopping-lists-product-options-feature-integration - - /docs/en/shopping-lists-product-options-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/shopping-lists-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/shopping-lists-product-options-feature-integration.html - - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-product-options-feature.html - - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shopping-lists-product-options-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md deleted file mode 100644 index c83b23fd256..00000000000 --- a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Integrate the Shopping Lists + Product Options feature -description: In this guide, we provide step-by-step instruction on how to install Shopping Lists + Product Options Feature into Spryker-based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/shopping-lists-product-options-feature-integration -originalArticleId: 617431ef-6b41-41f7-8e31-e31c077a450c -redirect_from: - - /2021080/docs/shopping-lists-product-options-feature-integration - - /2021080/docs/en/shopping-lists-product-options-feature-integration - - /docs/shopping-lists-product-options-feature-integration - - /docs/en/shopping-lists-product-options-feature-integration - - /docs/scos/dev/feature-integration-guides/202200.0/shopping-lists-product-options-feature-integration.html - - /docs/scos/dev/feature-integration-guides/202311.0/shopping-lists-product-options-feature-integration.html - - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-product-options-feature.html - - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html - ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-shopping-lists-product-options-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md deleted file mode 100644 index 0f0e7003485..00000000000 --- a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Shopping Lists + Quick Add to Cart feature -description: Quick Add to Cart + Shopping Lists allow creating a shopping list to buy products. Learn how to integrate this feature into your Spryker based project. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template - - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-quick-add-to-cart-feature.html -redirect_from: -- /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.html ---- -{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-shopping-lists-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md deleted file mode 100644 index fa52e9f73e5..00000000000 --- a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Wishlist + Alternative Products feature -description: Learn how to install the Spryker Wishlist + Alternative Product features in to your Spryker Cloud Commerce OS projects. -last_updated: Jun 16, 2021 -template: feature-integration-guide-template - - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-wishlist-alternative-products-feature.html -redirect_from: -- /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-wishlist-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-company-business-unit.csv.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-company-business-unit.csv.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-company-business-unit.csv.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-company-business-unit.csv.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-company-user.csv.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-company-user.csv.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-company-user.csv.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-company-user.csv.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-item.csv.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-item.csv.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list-item.csv.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list-item.csv.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list.csv.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list.csv.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/import-and-export-data/file-details-shopping-list.csv.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/import-and-export-data/file-details-shopping-list.csv.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md similarity index 83% rename from docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md index 519f6711c94..813ea9d2680 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.md @@ -4,6 +4,7 @@ description: Learn how to install the Shopping List + Agent assist feature in to last_updated: Jul 6, 2021 template: feature-integration-guide-template redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.html - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-list-agent-assist-feature.html - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-list-agent-assist-feature.html --- diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.md new file mode 100644 index 00000000000..de35e7f6814 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.md @@ -0,0 +1,30 @@ +--- +title: Install the Shopping Lists feature +description: Learn how to install the Spryker Shopping List feature in to your Spryker Cloud Commerce OS Project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shopping-lists-feature-integration +originalArticleId: 58263f9f-e8b2-48f1-9564-caad27602169 +redirect_from: + - /2021080/docs/shopping-lists-feature-integration + - /2021080/docs/en/shopping-lists-feature-integration + - /docs/shopping-lists-feature-integration + - /docs/en/shopping-lists-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/shopping-lists-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/shopping-lists-feature-integration.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/integrate-the-shopping-lists-feature.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html +related: + - title: Install the Shopping Lists Glue API + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html + - title: Shopping list widget overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/shopping-lists-feature-overview/shopping-list-widget-overview.html + - title: Install the Shopping Lists + Product Options feature + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html + - title: Install the Shopping Lists Glue API + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html + - title: Shopping List Notes overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/shopping-lists-feature-overview/shopping-list-notes-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shopping-lists-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md new file mode 100644 index 00000000000..58b12318cd5 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.md @@ -0,0 +1,21 @@ +--- +title: Integrate the Shopping Lists + Product Options feature +description: In this guide, we provide step-by-step instruction on how to install Shopping Lists + Product Options Feature into Spryker-based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/shopping-lists-product-options-feature-integration +originalArticleId: 617431ef-6b41-41f7-8e31-e31c077a450c +redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html + - /2021080/docs/shopping-lists-product-options-feature-integration + - /2021080/docs/en/shopping-lists-product-options-feature-integration + - /docs/shopping-lists-product-options-feature-integration + - /docs/en/shopping-lists-product-options-feature-integration + - /docs/scos/dev/feature-integration-guides/202200.0/shopping-lists-product-options-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/shopping-lists-product-options-feature-integration.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-product-options-feature.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-product-options-feature.html + +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-shopping-lists-product-options-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md new file mode 100644 index 00000000000..3514b77a1c5 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Shopping Lists + Quick Add to Cart feature +description: Quick Add to Cart + Shopping Lists allow creating a shopping list to buy products. Learn how to integrate this feature into your Spryker based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-quick-add-to-cart-feature.html +redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-quick-add-to-cart-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-quick-add-to-cart-shopping-lists-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md new file mode 100644 index 00000000000..0bf0eec057e --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Wishlist + Alternative Products feature +description: Learn how to install the Spryker Wishlist + Alternative Product features in to your Spryker Cloud Commerce OS projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-wishlist-alternative-products-feature.html +redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202507.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-features/install-the-wishlist-alternative-products-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-wishlist-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.md new file mode 100644 index 00000000000..e04b71660c8 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.md @@ -0,0 +1,28 @@ +--- +title: Integrate the Shopping Lists Glue API +description: Learn how to integrate the Spryker Shopping Lists GLUE API in to your Spryker Cloud Commerce OS Projects. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-shopping-lists-feature-integration +originalArticleId: 36dac1bc-e05e-4a7e-85fa-af59e77fa7ee +redirect_from: + - /2021080/docs/glue-api-shopping-lists-feature-integration + - /2021080/docs/en/glue-api-shopping-lists-feature-integration + - /docs/glue-api-shopping-lists-feature-integration + - /docs/en/glue-api-shopping-lists-feature-integration + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-shopping-lists-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-shopping-lists-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-shopping-lists-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-shopping-lists-feature-integration.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/install-the-shopping-lists-glue-api.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html +related: + - title: Install the Shopping Lists feature + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/install-and-upgrade/install-features/install-the-shopping-lists-feature.html + - title: Managing shopping lists + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html + - title: Managing shopping list items + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-shopping-lists-glue-api.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202404.0/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglist-module.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglist-module.md new file mode 100644 index 00000000000..9a6f39d5103 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglist-module.md @@ -0,0 +1,38 @@ +--- +title: Upgrade the ShoppingList module +description: Learn how to upgrade to a newer version of the Spryker Shopping List Module within your Spryker Cloud Commerce OS projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shopping-list +originalArticleId: f172344d-4048-4ed1-b041-6bb68889ffcc +redirect_from: + - /2021080/docs/mg-shopping-list + - /2021080/docs/en/mg-shopping-list + - /docs/mg-shopping-list + - /docs/en/mg-shopping-list + - /v1/docs/mg-shopping-list + - /v1/docs/en/mg-shopping-list + - /v2/docs/mg-shopping-list + - /v2/docs/en/mg-shopping-list + - /v3/docs/mg-shopping-list + - /v3/docs/en/mg-shopping-list + - /v4/docs/mg-shopping-list + - /v4/docs/en/mg-shopping-list + - /v5/docs/mg-shopping-list + - /v5/docs/en/mg-shopping-list + - /v6/docs/mg-shopping-list + - /v6/docs/en/mg-shopping-list + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-shoppinglist.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shoppinglist.html + - /module_migration_guides/mg-shopping-list.htm + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/upgrade-the-shoppinglist-module.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglist-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shoppinglist-module.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md similarity index 98% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md index 6aa58063840..862b020ac61 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.md @@ -29,7 +29,7 @@ redirect_from: - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-shoppinglistpage.html - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-shoppinglistpage.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-shoppinglistpage.html - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shoppinglistpage.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shoppinglistpage.html - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/upgrade-the-shoppinglistpage-module.html - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistpage-module.html diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistwidget-module.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistwidget-module.md new file mode 100644 index 00000000000..2540a07024f --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistwidget-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the ShoppingListWidget module +description: Learn how to upgrade to a newer version of the Spryker Shopping List Widget Module within your Spryker Cloud Commerce OS projects. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-shopping-list-widget +originalArticleId: d537fa4a-770c-4b85-8b0e-579d491e4e06 +redirect_from: + - /2021080/docs/mg-shopping-list-widget + - /2021080/docs/en/mg-shopping-list-widget + - /docs/mg-shopping-list-widget + - /docs/en/mg-shopping-list-widget + - /v1/docs/mg-shopping-list-widget + - /v1/docs/en/mg-shopping-list-widget + - /v2/docs/mg-shopping-list-widget + - /v2/docs/en/mg-shopping-list-widget + - /v3/docs/mg-shopping-list-widget + - /v3/docs/en/mg-shopping-list-widget + - /v4/docs/mg-shopping-list-widget + - /v4/docs/en/mg-shopping-list-widget + - /v5/docs/mg-shopping-list-widget + - /v5/docs/en/mg-shopping-list-widget + - /v6/docs/mg-shopping-list-widget + - /v6/docs/en/mg-shopping-list-widget + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-shoppinglistwidget.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-shoppinglistwidget.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/upgrade-the-shoppinglistwidget-module.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-shoppinglistwidget-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-shoppinglistwidget-module.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md similarity index 99% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md index 1bb62ff0454..5a0fd657bb3 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.md @@ -30,7 +30,7 @@ redirect_from: - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-wishlist.html - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-wishlist.html - /module_migration_guides/mg-wishlist.htm - - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-wishlist.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-wishlist.html - /docs/pbc/all/shopping-list-and-wishlist/202311.0/base-shop/install-and-upgrade/upgrade-the-wishlist-module.html - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-wishlist-module.html related: diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.md new file mode 100644 index 00000000000..c9b6a06e304 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.md @@ -0,0 +1,650 @@ +--- +title: "Glue API: Manage shopping list items" +description: Learn how to manage Spryker shopping list items via the Glue API in your Spryker Cloud Commerce OS Projects. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-shopping-list-items +originalArticleId: 9800fd79-ab57-4778-a68e-50b23236a3cc +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-shopping-lists/managing-shopping-list-items.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/manage-using-glue-api/manage-shopping-list-items-via-glue-api.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.html + +related: + - title: Managing shopping lists + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html + - title: Shopping Lists feature overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html +--- + +This endpoint lets you manage shopping list items. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see these integration guides: +- [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) + +## Add items to a shopping list + +To add items to a shopping list, send the request: + +*** +`POST` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to add items to. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | concrete-products | + + +
    +Request sample: add items to a shopping list with the `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` unique identifier. + +`POST http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + } + } +} +``` + +
    + +
    +Request sample: add items to a shopping list with the `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` unique identifier. Include information about the concrete products in the shopping list in the response. + +`POST http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items?include=concrete-products` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + } + } +} +``` + +
    + +
    +Request sample: add a configurable product to a shopping list. + +`POST https://glue.myspryker.com/shopping-lists/333327a9-3654-5382-b81b-4992458ebae8/shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "sku": "093_24495843", + "quantity": 3, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2050\"}", + "configuration": "{\"time_of_day\": \"4\"}", + "configuratorKey": "installation_appointment_test", + "isComplete": true, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + } + } + } +} +``` + +
    + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| sku | String | ✓ | SKU of the product to add. Only [concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) and [configurable products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/configurable-product-feature-overview/configurable-product-feature-overview.html) are allowed. | +| quantity | Integer | ✓ | Quantity of the product to add. | +| productConfigurationInstance.displayData | Array |✓ | Array of variables that are proposed for a Storefront user to set up in the configurator. | +| productConfigurationInstance.configuration | Array | ✓ | Default configurable product configuration. | +| productConfigurationInstance.configuratorKey | String | ✓ | Configurator type. | +| productConfigurationInstance.isComplete | Boolean | ✓ | Shows if the configurable product configuration is complete:
    • `true`—configuration complete.
    • `false`—configuration incomplete.
    | +| productConfigurationInstance.quantity | Integer | ✓ | Quantity of the product that is added to the wishlist. | +| productConfigurationInstance.availableQuantity | Integer | ✓ | Product quantity available in the store. | + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +### Response + +
    +Response sample: add items to a shopping list. + +```json + { + "data": { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } +} +``` + +
    + +
    +Response sample: add items to a shopping list with the details on concrete products. + +```json + { + "data": { + "type": "shopping-list-items", + "id": "6283f155-6b8a-5d8c-96b7-3af4091eea3e", + "attributes": { + "quantity": 4, + "sku": "128_27314278" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/6283f155-6b8a-5d8c-96b7-3af4091eea3e" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/128_27314278" + } + } + ] +} +``` + +
    + +
    +Response sample: add a configurable product to a shopping list. + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "f4ef6ec3-d0c1-55f8-80c9-6ef120d4761f", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 3, + "sku": "093_24495843", + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.09.2050\"}", + "configuration": "{\"time_of_day\": \"4\"}", + "configuratorKey": "installation_appointment_test", + "isComplete": true, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "netAmount": 23434, + "grossAmount": 42502, + "priceTypeName": "DEFAULT", + "volumeQuantity": null, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 165, + "netAmount": 150, + "quantity": 5 + }, + { + "grossAmount": 158, + "netAmount": 145, + "quantity": 10 + }, + { + "grossAmount": 152, + "netAmount": 140, + "quantity": 20 + } + ] + } + ] + } + }, + "links": { + "self": "https://glue.de.scos.demo-spryker.com/shopping-lists/333327a9-3654-5382-b81b-4992458ebae8/shopping-list-items/f4ef6ec3-d0c1-55f8-80c9-6ef120d4761f" + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +## Change item quantity in a shopping list + +To change item quantity in a shopping list, send the request: + +*** +`PATCH` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items/*{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to update item quantity in. | +| ***{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list item to change the quantity of. To get it, [Retrieve shopping lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html#retrieve-shopping-lists), or [Retrieve a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html#retrieve-a-shopping-list) with the `shopping-list-items` included. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | concrete-products| + + +
    +Request sample: in the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a`, change quantity of the item with the id `00fed212-3dc9-569f-885f-3ddca41dea08`. + + `PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 12, + "sku": "005_30663301" + } + } +} +``` + +
    + + +
    +In the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a`, change quantity of the item with the id `00fed212-3dc9-569f-885f-3ddca41dea08`. Include information about the respective concrete product in the response. + +`PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08?include=concrete-products` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 12, + "sku": "005_30663301" + } + } +} +``` + +
    + +
    +Request sample: in the shopping list with the id `333327a9-3654-5382-b81b-4992458ebae8` change quantity of the configurable product item with the id `0323bd43-f9ff-5964-afe3-44a2085ce0c6`. + +`PATCH https://glue.mysprykershop.com/shopping-lists/333327a9-3654-5382-b81b-4992458ebae8/shopping-list-items/0323bd43-f9ff-5964-afe3-44a2085ce0c6` + +```json +{ +"data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 3, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Morning\", \"Date\": \"9.09.2055\"}", + "configuration": "{\"time_of_day\": \"4\"}", + "configuratorKey": "installation_appointment_edit123", + "isComplete": false, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + } + } + } +} +``` + +
    + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | Integer | ✓ | New quantity of the product. | +| productConfigurationInstance.displayData | Array |✓ | Array of variables that are proposed for a Storefront user to set up in the configurator. | +| productConfigurationInstance.configuration | Array | ✓ | Default configurable product configuration. | +| productConfigurationInstance.configuratorKey | String | ✓ | Configurator type. | +| productConfigurationInstance.isComplete | Boolean | ✓ | Shows if the configurable product configuration is complete:
    • `true`—configuration complete.
    • `false`—configuration incomplete.
    | +| productConfigurationInstance.quantity | Integer | ✓ | Quantity of the product that is added to the wishlist. | +| productConfigurationInstance.availableQuantity | Integer | ✓ | Product quantity available in the store. | + +### Response + +
    +Response sample: change item quantity in a shopping list. + +```json + { + "data": { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 12, + "sku": "005_30663301" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } +} +``` + +
    + +
    +Response sample: change item quantity in a shopping list with the details on concrete products. + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "6283f155-6b8a-5d8c-96b7-3af4091eea3e", + "attributes": {...}, + "links": {... }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/128_27314278" + } + } + ] +} + +``` + +
    + +
    +Response sample: in the shopping list with the id `333327a9-3654-5382-b81b-4992458ebae8` change quantity of the configurable product with the id `0323bd43-f9ff-5964-afe3-44a2085ce0c6`. + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "0323bd43-f9ff-5964-afe3-44a2085ce0c6", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 3, + "sku": "093_24495843", + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Morning\", \"Date\": \"9.09.2055\"}", + "configuration": "{\"time_of_day\": \"4\"}", + "configuratorKey": "installation_appointment_edit123", + "isComplete": false, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "netAmount": 23434, + "grossAmount": 42502, + "priceTypeName": "DEFAULT", + "volumeQuantity": null, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 165, + "netAmount": 150, + "quantity": 5 + }, + { + "grossAmount": 158, + "netAmount": 145, + "quantity": 10 + }, + { + "grossAmount": 152, + "netAmount": 140, + "quantity": 20 + } + ] + } + ] + } + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/333327a9-3654-5382-b81b-4992458ebae8/shopping-list-items/0323bd43-f9ff-5964-afe3-44a2085ce0c6" + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +## Remove an item from a shopping list + +To remove an item from a shopping list, send the request: + +*** +`DELETE` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items/*{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to delete an item from. | +| ***{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list item to remove. To get it, [Retrieve shopping lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html#retrieve-shopping-lists), or [Retrieve a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html#retrieve-a-shopping-list) with the `shopping-list-items` included. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: remove an item from a shopping list + +`DELETE http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08` + +### Response + +If the item is removed successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 400 | Provided access token is not an [access token of a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | +| 901 | Shop list name or item name is not specified or too long.
    OR
    Item quantity is not specified or too large.| +| 1501 | Shopping list ID or item is not specified. | +| 1503 | Specified shopping list is not found. | +| 1504 | Specified shopping list item is not found. | +| 1508 | Concrete product is not found. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.md new file mode 100644 index 00000000000..75293a61db9 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.md @@ -0,0 +1,863 @@ +--- +title: "Glue API: Manage shopping lists" +description: Learn how to manage Spryker shopping list via the Glue API in your Spryker Cloud Commerce OS Projects. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-shopping-lists +originalArticleId: 23652c0f-92b4-45c1-9053-905389353411 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-shopping-lists/managing-shopping-lists.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/manage-using-glue-api/manage-shopping-lists-via-glue-api.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/manage-using-glue-api/glue-api-manage-shopping-lists.html +related: + - title: Install the Shopping Lists Glue API + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html + - title: Managing shopping list items + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-shopping-list-items.html + - title: Shopping Lists feature overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html +--- + +With the help of the [Shopping Lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html) feature, company users can manage shopping lists for their company to plan purchasing activities beforehand. Unlike [Wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/wishlist-feature-overview.html), shopping lists contain not only a list of items to be purchased but also the quantity of each item. + + +In your development, the resources can help you to enable the shopping list functionality in your application. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) + + +## Create a shopping list + +To create a shopping list for a registered user, send the request: + +--- +`POST` **/shopping-lists** + +--- + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: create a shopping list + +`POST http://glue.mysprykershop.com/shopping-lists` + +```json +{ + "data":{ + "type": "shopping-lists", + "attributes":{ + "name":"My Shopping List" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | string | ✓ | Name of the shopping list to create. | + +### Response + +
    +Response sample: create a shopping list + +```json +{ + "data": { + "type": "shopping-lists", + "id": "sdb17f85-953f-565a-a4ce-e5cb02405f83", + "attributes": { + "owner": "Anne Boleyn", + "name": "Laptops", + "numberOfItems": 0, + "updatedAt": "2020-02-07 09:26:01.623754", + "createdAt": "2020-02-07 09:26:01.623754" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83" + } + } +} +``` + +
    +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-lists-response-attributes.md %} + + +## Retrieve shopping lists + +To retrieve shopping lists, send the request: + +*** +`GET` **/shopping-lists** +*** + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | shopping-list-items, concrete-products| + +{% info_block infoBox %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +{% endinfo_block %} + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/shopping-lists` | Retrieve all shopping lists. | +| `GET http://glue.mysprykershop.com/shopping-lists?include=shopping-list-items,concrete-products` | Retrieve all shopping lists with its items and respective concrete products. | + +### Response + +
    +Response sample: no shopping lists are retrieved + +```json + { + "data": [], + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists" + } +} +``` + +
    + + +
    +Response sample: Retrieve own and shared shopping lists + +```json +{ + "data": [ + { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List", + "numberOfItems": 19, + "updatedAt": "2020-02-07 07:59:09.621433", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + }, + { + "type": "shopping-lists", + "id": "184ea79d-a2d3-549a-8ca2-4ea36879ceee", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List 2", + "numberOfItems": 0, + "updatedAt": "2020-02-07 08:01:11.539074", + "createdAt": "2020-02-07 08:01:11.539074" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/184ea79d-a2d3-549a-8ca2-4ea36879ceee" + } + }, + { + "type": "shopping-lists", + "id": "f5ce1365-1429-5d99-97a9-c1b19e4fede6", + "attributes": { + "owner": "Niels Barr", + "name": "Shared Shopping List", + "numberOfItems": 0, + "updatedAt": "2020-02-07 09:34:41.438426", + "createdAt": "2020-02-07 09:34:41.438426" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/f5ce1365-1429-5d99-97a9-c1b19e4fede6" + } + } + ], + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists" + } +} +``` + +
    + +
    +Response sample: retrieve shopping lists with the details on its items and concrete products + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Acer Chromebook C730-C8T7", + "description": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long on a single charge. Indulge your e✓ and see everything in vivid detail on the Acer Chromebook's Full HD display. The Acer Chromebook features the latest 802.11ac wireless technology, for a smooth internet experience at connection speeds that are up to three times faster than that of previous-generation wireless technologies. The Acer Chromebook starts within 8 seconds, so you can wait less and do more. At less than an inch thin and extremely light, the Acer Chromebook is the perfect tool for on-the-go computing. Plus, it sports a fanless design for whisper-quiet computing.", + "attributes": { + "product_type": "Chromebook", + "form_factor": "clamshell", + "processor_threads": "2", + "processor_boost_frequency": "2.58 GHz", + "brand": "Acer", + "color": "Grey" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "metaTitle": "Acer Chromebook C730-C8T7", + "metaKeywords": "Acer,Entertainment Electronics", + "metaDESCRIPTION": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_threads": "Processor Threads", + "processor_boost_frequency": "Processor boost frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/136_24425591" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": {...}, + "links": {...}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "136_24425591" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 175", + "description": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies look like miniature scale models and much more. Capture the stunning detail in everyday subjects using 1 cm Macro to get right up close. Enjoy exceptional quality, detailed images thanks to 20.0 Megapixels and DIGIC 4+ processing. Face Detection technology makes capturing great shots of friends effortless, while Auto Zoom intelligently helps you select the best framing at the touch of a button.", + "attributes": { + "optical_zoom": "8 x", + "combined_zoom": "32 x", + "display": "LCD", + "hdmi": "no", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 175", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDESCRIPTION": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies loo", + "attributeNames": { + "optical_zoom": "Optical zoom", + "combined_zoom": "Combined zoom", + "display": "Display", + "hdmi": "HDMI", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/005_30663301" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": {...}, + "links": {....}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "005_30663301" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-lists-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + +## Retrieve a shopping list + +To retrieve a shopping list, send the request: + +*** +`GET` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to retrieve. | + + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXAMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | shopping-list-items, concrete-products| + +{% info_block infoBox "Included resources" %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +{% endinfo_block %} + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET http://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83` | Retrieve the shopping list with the id `sdb17f85-953f-565a-a4ce-e5cb02405f83`. | +| `GET http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items` | Retrieve the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` with its items. | +| `GET http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items,concrete-products` | Retrieve the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` with its items and respective concrete products. | + +### Response + +
    +Response sample: retrieve a shopping list + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List", + "numberOfItems": 19, + "updatedAt": "2020-02-07 07:59:09.621433", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + } +} +``` + +
    + +
    +Response sample: retrieve a shopping list with the details on the shopping list items + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 15, + "sku": "136_24425591" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a shopping list with the details on the shopping list items and concrete products + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Acer Chromebook C730-C8T7", + "description": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long on a single charge. Indulge your e✓ and see everything in vivid detail on the Acer Chromebook's Full HD display. The Acer Chromebook features the latest 802.11ac wireless technology, for a smooth internet experience at connection speeds that are up to three times faster than that of previous-generation wireless technologies. The Acer Chromebook starts within 8 seconds, so you can wait less and do more. At less than an inch thin and extremely light, the Acer Chromebook is the perfect tool for on-the-go computing. Plus, it sports a fanless design for whisper-quiet computing.", + "attributes": { + "product_type": "Chromebook", + "form_factor": "clamshell", + "processor_threads": "2", + "processor_boost_frequency": "2.58 GHz", + "brand": "Acer", + "color": "Grey" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "metaTitle": "Acer Chromebook C730-C8T7", + "metaKeywords": "Acer,Entertainment Electronics", + "metaDESCRIPTION": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_threads": "Processor Threads", + "processor_boost_frequency": "Processor boost frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/136_24425591" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": {...}, + "links": {...}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "136_24425591" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 175", + "description": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies look like miniature scale models and much more. Capture the stunning detail in everyday subjects using 1 cm Macro to get right up close. Enjoy exceptional quality, detailed images thanks to 20.0 Megapixels and DIGIC 4+ processing. Face Detection technology makes capturing great shots of friends effortless, while Auto Zoom intelligently helps you select the best framing at the touch of a button.", + "attributes": { + "optical_zoom": "8 x", + "combined_zoom": "32 x", + "display": "LCD", + "hdmi": "no", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 175", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDESCRIPTION": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies loo", + "attributeNames": { + "optical_zoom": "Optical zoom", + "combined_zoom": "Combined zoom", + "display": "Display", + "hdmi": "HDMI", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/005_30663301" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": {...}, + "links": {....}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "005_30663301" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-lists-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + + +## Edit a shopping list + +To edit a shopping list, send the request: + +*** +`PATCH` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to edit. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | shopping-list-items, concrete-products| + +{% info_block infoBox "Included resources" %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +{% endinfo_block %} + + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `PATCH http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` | Edit the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a`. | +| `PATCH http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items,concrete-products` | Edit the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` and include its items and respective concrete products into the response. | + +```json +{ + "data": { + "type": "shopping-lists", + "attributes": { + "name": "New Name" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION| +| --- | --- | --- |--- | +| name | String | ✓ | New name of the shopping list. | + +### Response + +
    +Response sample: edit a shopping list + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "New Name", + "numberOfItems": 19, + "updatedAt": "2020-02-08 14:17:38.288982", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + } +} +``` + +
    + +
    +Response sample: edit a shopping list with the details on its items and concrete products + +```json +"data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": {...}, + "included": [ + { + "type": "concrete-products", + "id": "090_24495844", + "attributes": { + "sku": "090_24495844", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDESCRIPTION": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/090_24495844" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 1, + "sku": "090_24495844" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "090_24495844" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/128_27314278" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 1, + "sku": "128_27314278" + }, + "links": { + "self": "http://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-lists-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + + +## Delete a shopping list + +To delete a shopping list, send the request: + +*** +`DELETE` **shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to delete. To get it, [Retrieve shopping lists](#retrieve-shopping-lists). | + +### Request + +Request sample: delete a shopping list + +`DELETE http://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83` + +### Response + +If the shopping list is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 400 | Provided access token is not an [access token of a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | +| 901 | Shop list name or item name is not specified or too long.
    **OR**
    Item quantity is not specified or too large.| +| 1501 | Shopping list ID or item is not specified. | +| 1503 | Specified shopping list is not found. | +| 1506 | Shopping list with given name already exists. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.md new file mode 100644 index 00000000000..afa4aa2e8d1 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.md @@ -0,0 +1,409 @@ +--- +title: "Glue API: Manage wishlist items" +description: Managing wishlist items via Glue API. +last_updated: Nov 29, 2021 +template: glue-api-storefront-guide-template +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-wishlists/managing-wishlist-items.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/manage-using-glue-api/manage-wishlist-items-via-glue-api.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.html +related: + - title: Managing wishlists + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Wishlist feature overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/wishlist-feature-overview.html +--- + +This endpoint allows you to add and remove items from wishlists. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Wishlist API Feature Integration](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.html) +- [Install the Product Configuration Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-configuration-glue-api.html) + +## Add an item to a wishlist + +To add an item to a wishlist, send the request: + +--- +`POST` **/wishlists/*{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*/wishlist-items** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** | Unique identifier of the wishlist to add the items to. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#retrieve-wishlists) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: add an item to a wishlist + +`POST https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a/wishlist-items` + +```json +{ + "data": { + "type": "wishlist-items", + "attributes": { + "sku": "064_18404924" + } + } + } +``` + +
    Request sample: add a configurable product to a wishlist + +`POST https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a/wishlist-items` + +```json +{ + "data": { + "type": "wishlist-items", + "attributes": { + "sku": "093_24495843", + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.12.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + } + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-request-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +### Response + +Response sample: add an item to a wishlist + +```json +{ + "data": { + "type": "wishlist-items", + "id": "064_18404924", + "attributes": { + "sku": "064_18404924" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/c917e65b-e8c3-5c8b-bec6-892529c64b30/wishlist-items/064_18404924" + } + } + } +``` + +
    Response sample: add a configurable product to a wishlist + +```json +{ + "data": { + "type": "wishlist-items", + "id": "093_24495843_98bf36f052d23f10a8a081694ad4f45e", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "093_24495843_98bf36f052d23f10a8a081694ad4f45e", + "sku": "093_24495843", + "availability": { + "isNeverOutOfStock": false, + "availability": false, + "quantity": "0.0000000000" + }, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.12.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": true, + "quantity": 3, + "availableQuantity": 4, + "prices": [ + { + "netAmount": 23434, + "grossAmount": 42502, + "priceTypeName": "DEFAULT", + "volumeQuantity": null, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 165, + "netAmount": 150, + "quantity": 5 + }, + { + "grossAmount": 158, + "netAmount": 145, + "quantity": 10 + }, + { + "grossAmount": 152, + "netAmount": 140, + "quantity": 20 + } + ] + } + ] + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/b70e1073-a740-5a48-bb5e-0449a9e51d53/wishlist-items/093_24495843_98bf36f052d23f10a8a081694ad4f45e" + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-availabilities-response-attributes.md %} + +## Update a wishlist item + +{% info_block warningBox "Warning" %} + +Only configurable products can be updated. + +{% endinfo_block %} + + +To update a wishlist item, send the request: + +--- +`PATCH` **/wishlists/*{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*/wishlist-items/*{% raw %}{{{% endraw %}wishlist_item_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** | Unique identifier of the wishlist to delete an item from. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#retrieve-wishlists) to get it. | +| ***{% raw %}{{{% endraw %}wishlist_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a configurable product to update. To get this identifier, [retrieve a wishlist with items included](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#retrieve-wishlists) or [add a configurable product to a wishlist](#add-an-item-to-a-wishlist). | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +
    Request sample: update a configurable product in a wishlist + +`PATCH https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a/wishlist-items/093_24495843_98bf36f052d23f10a8a081694ad4f45e` + +```json +{ + "data": { + "type": "wishlist-items", + "attributes": { + "sku": "093_24495843", + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": false, + "quantity": 4, + "availableQuantity": 4, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": 23434, + "grossAmount": 42502, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "netAmount": 150, + "grossAmount": 165, + "quantity": 5 + }, + { + "netAmount": 145, + "grossAmount": 158, + "quantity": 10 + }, + { + "netAmount": 140, + "grossAmount": 152, + "quantity": 20 + } + ] + } + ] + } + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-request-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +### Response + +
    Response sample: update a configurable product in a wishlist + +```json +{ + "data": { + "type": "wishlist-items", + "id": "093_24495843_98bf36f052d23f10a8a081694ad4f45e", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "093_24495843_98bf36f052d23f10a8a081694ad4f45e", + "sku": "093_24495843", + "availability": { + "isNeverOutOfStock": false, + "availability": false, + "quantity": "0.0000000000" + }, + "productConfigurationInstance": { + "displayData": "{\"Preferred time of the day\": \"Afternoon\", \"Date\": \"9.10.2021\"}", + "configuration": "{\"time_of_day\": \"2\"}", + "configuratorKey": "DATE_TIME_CONFIGURATOR", + "isComplete": false, + "quantity": 4, + "availableQuantity": 4, + "prices": [ + { + "netAmount": 23434, + "grossAmount": 42502, + "priceTypeName": "DEFAULT", + "volumeQuantity": null, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [ + { + "grossAmount": 165, + "netAmount": 150, + "quantity": 5 + }, + { + "grossAmount": 158, + "netAmount": 145, + "quantity": 10 + }, + { + "grossAmount": 152, + "netAmount": 140, + "quantity": 20 + } + ] + } + ] + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/b70e1073-a740-5a48-bb5e-0449a9e51d53/wishlist-items/093_24495843_94a23d655bf161d6ab0088457f4ea2fc" + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-prices-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-availabilities-response-attributes.md %} + + +## Delete a wishlist item + +To delete wishlist item, send the request: + +--- +`DELETE` **/wishlists/*{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*/wishlist-items/*{% raw %}{{{% endraw %}wishlist_item_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** | Unique identifier of the wishlist to delete an item from. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#retrieve-wishlists) to get it. | +| ***{% raw %}{{{% endraw %}wishlist_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a concrete or configurable product to delete. To get this identifier, [retrieve a wishlist with items included](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html#retrieve-wishlists) or [add an item to a wishlist](#add-an-item-to-a-wishlist). | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: delete a wishlist item + +`DELETE https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a/wishlist-items/064_18404924` + +### Response + +If the item is removed successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 201 | Cannot find the wishlist. | +| 206 | Cannot add an item to the wishlist. | +| 207 | Cannot remove the item. | +| 208 | An item with the provided SKU does not exist in the wishlist. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.md new file mode 100644 index 00000000000..d08c73ab474 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.md @@ -0,0 +1,849 @@ +--- +title: "Glue API: Manage wishlists" +description: Learn how to manage , create, update and delete Spryker wishlist via the Glue API in your Spryker Cloud Commerce OS Projects. +last_updated: Jun 16, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-wishlists +originalArticleId: b4729aa0-f527-4fd0-bf46-6d8e62b3013e +redirect_from: + - /docs/scos/dev/glue-api-guides/202200.0/managing-wishlists/managing-wishlists.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-wishlists/managing-wishlists.html + - /docs/pbc/all/shopping-list-and-wishlist/202311.0/manage-via-glue-api/manage-wishlists-via-glue-api.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html +related: + - title: Managing wishlist items + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.html + - title: Authenticating as a customer + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-a-customer.html + - title: Wishlist feature overview + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/wishlist-feature-overview.html + +--- + +The Wishlists API allows creating list and deleting [wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/wishlist-feature-overview.html), as well as managing the items inside them. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: + +- [Install the Wishlist Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-wishlist-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Product Labels Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-labels-glue-api.html) + +## Create a wishlist + +To create a wishlist, send the request: + +--- +`POST` **/wishlists** + +--- + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: create a wishlist + +`POST https://glue.mysprykershop.com/wishlists` + +```json +{ + "data":{ + "type": "wishlists", + "attributes":{ + "name":"christmas_gifts" + } + } + } +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | string | ✓ | Name of the wishlist to create. | + +### Response + +
    +Response sample: create a wishlist + +```json +{ + "data": { + "type": "wishlists", + "id": "09264b7f-1894-58ed-81f4-d52d683e910a", + "attributes": { + "name": "Name of the wishlist", + "numberOfItems": 0, + "createdAt": "2018-08-17 10:04:35.311557", + "updatedAt": "2018-08-17 10:04:35.311557" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a" + } + } + } +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlists-response-attributes.md %} + + +## Retrieve wishlists + +To retrieve all wishlists of a customer, send the request: + +--- +`GET` **/wishlists** + +--- + +### Request + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • wishlist-items
    • concrete-products
    • product-labels
    | + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/wishlists` | Retrieve all the wishlists of a customer. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items` | Retrieve all the wishlists of a customer with wishlist items. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products` | Retrieve all the wishlists of a customer with wishlist items and respective concrete products. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products,product-labels` | Retrieve all the wishlists of a customer with wishlist items, respective concrete products, and their product labels. | + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +### Response + +
    +Response sample: no wishlists are retrieved + +```json +{ + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/wishlists" + } + } +``` + +
    + +
    +Response sample: retrieve wishlists + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "1623f465-e4f6-5e45-8dc5-987b923f8af4", + "attributes": { + "name": "My Wishlist Name", + "numberOfItems": 0, + "createdAt": "2018-12-16 17:24:12.601033", + "updatedAt": "2018-12-16 17:24:12.601033" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/1623f465-e4f6-5e45-8dc5-987b923f8af4" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists" + } +} +``` + +
    + +
    +Response sample: retrieve wishlists with the details on the wishlist items + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "149_28346778" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items" + }, + "included": [ + { + "type": "wishlist-items", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/149_28346778" + } + } + ] +} +``` + +
    + + +
    +Response sample: retrieve wishlists with the details on the wishlist items and respective concrete products + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "149_28346778" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products" + }, + "included": [ + { + "type": "concrete-products", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "HP 200 250 G4", + "description": "Durable mobile design Rest assured that the HP 250 can keep up with assignments on the run. The durable chassis protects the notebook so it looks as professional as you do. Get connected with the value-priced HP 250 Notebook PC. Complete business tasks with Intel technology, essential multimedia tools and Windows 8.1 loaded on the HP 250. The durable chassis helps protect the notebook from the rigors of the day. HP, a world leader in PCs and touch technology helps equip you with a fully functional notebook ready to connect to all your peripherals and designed to fit the needs of business. HP, a world leader in PCs and touch technology helps equip you with a fully functional notebook ready to connect to all your peripherals and designed to fit the needs of business.", + "attributes": { + "form_factor": "clamshell", + "processor_cores": "2", + "thermal_design_power": "15 W", + "brand": "HP", + "color": "Black", + "processor_frequency": "1.6 GHz" + }, + "superAttributesDefinition": [ + "form_factor", + "color", + "processor_frequency" + ], + "metaTitle": "HP 200 250 G4", + "metaKeywords": "HP,Entertainment Electronics", + "metaDescription": "Durable mobile design Rest assured that the HP 250 can keep up with assignments on the run. The durable chassis protects the notebook so it looks as profes", + "attributeNames": { + "form_factor": "Form factor", + "processor_cores": "Processor cores", + "thermal_design_power": "Thermal Design Power (TDP)", + "brand": "Brand", + "color": "Color", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/149_28346778" + } + }, + { + "type": "wishlist-items", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/149_28346778" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "149_28346778" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve wishlists with the details on the wishlist items, respective concrete products, and their product labels + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlists-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + + +## Retrieve a wishlist + +To retrieve wishlist items, send the request: + +--- +`GET` **/wishlists/*{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** | Unique identifier of the wishlist to retrieve the items of. [Create a wishlist](#create-a-wishlist) or [retrieve all wishlists](#retrieve-wishlists) to get it. | + +### Request + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • wishlist-items
    • concrete-products
    • product-labels
    | + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items into the response. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items and respective concrete products into the response. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items, respective concrete products and their product labels into the response. | + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +### Response + +
    +Response sample: retrieve a wishlist + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1" + } + } +} +``` + +
    + +
    +Response sample: retrieve a wishlist with the details on the wishlist items + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with the details on the wishlist items and respective concrete products + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with the details on the wishlist items, respective concrete products, and their product labels + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlists-response-attributes.md %} + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlist-items-response-attributes.md %} + +{% include /pbc/all/glue-api-guides/{{page.version}}/product-labels-response-attributes.md %} + + +## Edit a wishlist + +To edit a wishlist, send the request: + +--- +`PATCH` **/wishlists** + +--- + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: edit a wishlist. The following sample changes the name of a wishlist. + +`PATCH https://glue.mysprykershop.com/wishlists` + + +```json +{ + "data": { + "type": "wishlists", + "id": "09264b7f-1894-58ed-81f4-d52d683e910a", + "attributes": { + "name": "birthday party" + } + } + } +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| id | string | ✓ | Unique identifier of the wishlist to update the name of. [Create a wishlist](#create-a-wishlist) or [retrieve all wishlists](#retrieve-wishlists) to get it. | +| name | string | ✓ | New name of the wishlist. | + +### Response + +{% include pbc/all/glue-api-guides/{{page.version}}/wishlists-response-attributes.md %} + + +## Delete a wishlist + +To delete a wishlist, send the request: + +--- +`DELETE` **/wishlists/*{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}wishlist_id{% raw %}}}{% endraw %}*** | Unique identifier of the wishlist to delete. [Create a wishlist](#create-a-wishlist) or [retrieve all wishlists](#retrieve-wishlists) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: delete a wishlist + +`DELETE https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a` + +### Response + +If the wishlist is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is invalid. | +| 002 | Access token is missing. | +| 201 | Wishlist with the specified ID is not found. | +| 202 | Wishlist with the same name already exists. | +| 203 | Cannot create a wishlist. | +| 204 | Cannot update the wishlist. | +| 205 | Cannot remove the wishlist. | +| 209 | ID is not specified. | +| 210 | Enter the name using only letters, numbers, underscores, spaces or dashes. | +| 901 | `name` field is empty. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-notes-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-notes-overview.md new file mode 100644 index 00000000000..a78652a0f05 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-notes-overview.md @@ -0,0 +1,24 @@ +--- +title: Shopping List Notes overview +description: With the feature, you can leave and manage notes for each item in the order. +last_updated: Jul 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/shopping-list-notes-overview +originalArticleId: f3bbe202-94da-4e64-9480-d57af69fb057 +redirect_from: + - /2021080/docs/shopping-list-notes-overview + - /2021080/docs/en/shopping-list-notes-overview + - /docs/shopping-list-notes-overview + - /docs/en/shopping-list-notes-overview + - /docs/scos/user/features/202311.0/shopping-lists-feature-overview/shopping-list-notes-overview.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/shopping-lists-feature-overview/shopping-list-notes-overview.html +--- + +The *Shopping List Notes* feature lets buyers manage notes for individual items they have on their shopping lists. For example, a bakery might have created a shopping list with products they buy regularly. Suppose, they have a 10 kg-flour bag on the shopping list, but they want to make sure that they always have enough amount of flour in their stock and therefore need to buy more sometimes. They can leave a note at the "flour bag" product saying "check if more than one bag should be purchased". Notes to shopping list items are added on the **Edit shopping list** page. Customers can edit and delete the created shopping list notes there as well. + +When customer transfers shopping list items to the cart, their notes are taken over as well, under the following conditions: + +- If an item *with notes* exists in a shopping list and is transferred to the cart, where the same item *does not exist*, the item is added with notes. +- If an item *with notes* exists in a shopping list and is transferred to the cart, where the same item *already exists* (with or without notes), the item is added as a *separate item* with notes. +- If an item *without notes* exists in a shopping list and is transferred to the cart, where the same item already exists *without notes*, the items are *merged*. +- If an item *without notes* exists in a shopping list and is transferred to the cart, where the same item *already exists with a note*, the item is added as a *separate item*. diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-printing-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-printing-overview.md new file mode 100644 index 00000000000..f7275393bcd --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-printing-overview.md @@ -0,0 +1,37 @@ +--- +title: Shopping list printing overview +description: Shopping list printing lets shop visitors print their own shopping lists and shopping lists shared with them from their account or the Shopping list view page. +last_updated: Jun 16, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/printing-shopping-list-overview +originalArticleId: 4545f8d7-3fbd-4aaf-9238-1eec836e630c +redirect_from: + - /2021080/docs/printing-shopping-list-overview + - /2021080/docs/en/printing-shopping-list-overview + - /docs/printing-shopping-list-overview + - /docs/en/printing-shopping-list-overview + - /2021080/docs/printing-shopping-list + - /2021080/docs/en/printing-shopping-list + - /docs/printing-shopping-list + - /docs/en/printing-shopping-list + - /docs/scos/user/features/202200.0/shopping-lists-feature-overview/shopping-list-printing-overview.html + - /docs/scos/user/features/202311.0/shopping-lists-feature-overview/shopping-list-printing-overview.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/shopping-lists-feature-overview/shopping-list-printing-overview.html +--- + +*Shopping lists* are used by companies to prepare and manage the list of products they intend to buy or the products that they buy regularly. Shopping lists are highly popular among restaurants, as they can easily prepare lists of food they order on a regular basis. However "digital" version of the shopping lists is not always convenient because, for example, restaurants, cafes, and bakeries prefer a paper version of the shopping list in the kitchen to collect handwritten notes or pin them to a wall, and subsequently make an order. *Shopping list printing* lets your customers print the list of products with barcodes they added to the shopping list in the webshop, as well as shopping lists shared with them. They can even order items from the printed shopping lists with the help of a barcode scanner. + + +The webshop users can print their shopping lists and shopping lists shared with them in two ways: + +- From **My Account > Shopping Lists**: + +![Overview page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+List/Print+Shopping+List/Printing+a+Shopping+List+Feature+Overview/actions-overview-page.png) + +- From the **Shopping List View** page, which can be accessed by clicking on the name of a shopping list on the **Shopping Lists** page: + +![Shopping list details page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+List/Print+Shopping+List/Printing+a+Shopping+List+Feature+Overview/shopping-list-details-page.png) + +Clicking **Print** opens a printable version of the **Shopping List** page, which contains the shopping lists name, product barcode, SKU, name, default price, and note: + +![Printing page](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+List/Print+Shopping+List/Printing+a+Shopping+List+Feature+Overview/print.png) diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-widget-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-widget-overview.md new file mode 100644 index 00000000000..d14528775e6 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-list-widget-overview.md @@ -0,0 +1,29 @@ +--- +title: Shopping list widget overview +description: For convenience and ease of use, when customer puts a cursor on the shopping list icon, a drop-down list with all their shopping lists is displayed. +last_updated: Jul 2, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/shopping-list-widget-overview +originalArticleId: 7c858d9c-3c11-43fd-b7da-b2e48e71df61 +redirect_from: + - /2021080/docs/shopping-list-widget-overview + - /2021080/docs/en/shopping-list-widget-overview + - /docs/shopping-list-widget-overview + - /docs/en/shopping-list-widget-overview + - /docs/scos/user/features/202200.0/shopping-lists-feature-overview/shopping-list-widget-overview.html + - /docs/scos/user/features/202311.0/shopping-lists-feature-overview/shopping-list-widget-overview.html + - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/shopping-lists-feature-overview/shopping-list-widget-overview.html +--- + +A *shopping list* is a list of items that a customer plans to buy. Many B2B customers compile shopping lists of items they buy regularly. Also, such customers often use multiple shopping lists to cover their specific purchasing needs. For example, cafes prefer using the *Shopping list* feature to create several shopping lists to save items they keep ordering every day or week. + +For customers' convenience and ease of use, the shopping list widget is placed in the very header. When a customer holds the pointer over the shopping list icon, a drop-down menu with all their shopping lists appears. For each shopping list the following details are provided in the drop-down menu: + +- Shopping list name. +- First and last name of the person who created the shopping list. +- Level of access for shopping list: full access (green) or read only (grey). To learn more about shopping list sharing and access levels, see [Multiple and Shared Shopping Lists overview](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html). +- The number of items in the shopping list. +- The **Create New List** button, which adds a new list in the **Shopping List** section. +- The **All Shopping Lists** button, which leads to the **Shopping Lists** page with all the shopping lists available for the customer. + +![Shopping List widget](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Shopping+List/Shopping+List+Widget/Shopping+List+Widget+Feature+Overview/Shopping-list-widget.png) diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md similarity index 98% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md index 37d3e546fcb..bca9fd9f5f1 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.md @@ -6,10 +6,11 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/multiple-and-shared-shopping-lists-overview originalArticleId: 6683a968-b4de-4e2b-aefc-2ab70fabe3b4 redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html - /docs/scos/user/features/202200.0/shopping-lists-feature-overview/shopping-lists-feature-overview.html - /docs/scos/user/features/202311.0/shopping-lists-feature-overview/shopping-lists-feature-overview.html - /docs/scos/dev/feature-walkthroughs/202311.0/shopping-lists-feature-walkthrough.html - - /docs/scos/dev/feature-walkthroughs/202200.0/shopping-lists-feature-walkthrough.html + - /docs/scos/dev/feature-walkthroughs/202200.0/shopping-lists-feature-walkthrough.html - /docs/pbc/all/shopping-list-and-wishlist/202204.0/base-shop/shopping-lists-feature-overview/shopping-lists-feature-overview.html --- diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/wishlist-feature-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/wishlist-feature-overview.md similarity index 98% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/wishlist-feature-overview.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/wishlist-feature-overview.md index 406e5a96fda..f746f261a39 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/wishlist-feature-overview.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/base-shop/wishlist-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/wishlist-feature-overview originalArticleId: 6af20838-1a7d-4112-9f8b-802995363403 redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202512.0/base-shop/wishlist-feature-overview.html - /docs/scos/user/features/202108.0/wishlist-feature-overview.html - /docs/scos/user/features/202200.0/wishlist-feature-overview.html - /docs/scos/user/features/202311.0/wishlist-feature-overview.html diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/domain-model-and-relationships/marketplace-shopping-lists-feature-domain-model-and-relationships.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/domain-model-and-relationships/marketplace-shopping-lists-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/domain-model-and-relationships/marketplace-shopping-lists-feature-domain-model-and-relationships.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/domain-model-and-relationships/marketplace-shopping-lists-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/domain-model-and-relationships/marketplace-wishlist-feature-domain-model-and-relationships.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/domain-model-and-relationships/marketplace-wishlist-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/domain-model-and-relationships/marketplace-wishlist-feature-domain-model-and-relationships.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/domain-model-and-relationships/marketplace-wishlist-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/import-file-details-product-offer-shopping-list.csv.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/import-file-details-product-offer-shopping-list.csv.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/import-file-details-product-offer-shopping-list.csv.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/import-file-details-product-offer-shopping-list.csv.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.md new file mode 100644 index 00000000000..5f7c07bf5a7 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.md @@ -0,0 +1,13 @@ +--- +title: Install the Marketplace Shopping Lists feature +last_updated: April 13, 2022 +description: This document describes the process how to integrate the Marketplace Shopping Lists feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Install the Marketplace Shopping Lists Glue API + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.html + - title: Marketplace Shopping Lists feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-shopping-lists-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-shopping-lists-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.md new file mode 100644 index 00000000000..04806952164 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Wishlist feature +last_updated: Jul 05, 2021 +description: This document describes the process how to integrate the Marketplace wishlist feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Wishlist feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-wishlist-feature-overview.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-wishlist-feature.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/install-and-upgrade/install-features/install-the-wishlist-merchant-switcher-feature.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-wishlist-merchant-switcher-feature.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/install-and-upgrade/install-features/install-the-wishlist-merchant-switcher-feature.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-features/install-the-wishlist-merchant-switcher-feature.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.md new file mode 100644 index 00000000000..b310bbfd176 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.md @@ -0,0 +1,11 @@ +--- +title: "Install the Marketplace Shopping Lists Glue API" +last_updated: May 5, 2022 +description: This document describes how to integrate the Shopping Lists feature API into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Shopping Lists feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-shopping-lists-feature-overview.html +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-shopping-lists-glue-api.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-prices-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-prices-glue-api.md new file mode 100644 index 00000000000..b5ec42e31fd --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-prices-glue-api.md @@ -0,0 +1,11 @@ +--- +title: Install the Marketplace Wishlist + Prices Glue API +description: Learn how to integrate the Spryker Prices + Marketplace Wishlist Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +related: + - title: Marketplace Wishlist feature walkthrough + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/marketplace-wishlist-feature-overview.html +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-prices-marketplace-wishlist-glue-api.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-product-offer-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-product-offer-glue-api.md new file mode 100644 index 00000000000..94589debf41 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-wishlist-product-offer-glue-api.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Wishlist + Product Offer Glue API +last_updated: Sep 13, 2021 +description: Learn how to integrate the Spryker Marketplace wishlist + Product Offer Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-product-offer-wishlist-glue-api.md %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-wishlist-marketplace-product-offer-prices-glue-api.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-wishlist-marketplace-product-offer-prices-glue-api.md new file mode 100644 index 00000000000..400129417bd --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/install-and-upgrade/install-glue-api/install-the-wishlist-marketplace-product-offer-prices-glue-api.md @@ -0,0 +1,86 @@ +--- +title: Install the Wishlist + Marketplace Product Offer Prices Glue API +description: Learn how to integrate the Spryker Marketplace wishlist + Product Offer Prices Glue API feature into a Spryker Marketplace project. +template: feature-integration-guide-template +last_updated: Feb 19, 2026 +related: +--- + +This document describes how to integrate the Marketplace Product Offer Prices + Wishlist Glue API feature into a Spryker project. + +## Install feature core + +Follow the steps below to install the Marketplace Product Offer Prices + Wishlist Glue API feature core. + +### Prerequisites + +Install the required features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --------------- | ------- | ---------- | +| Marketplace Wishlist | {{page.release_tag}} |[Install Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) | +| Marketplace Product Offer Prices API | {{page.release_tag}} |[Install the Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) | + + +### 1) Set up behavior + +Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +|---|---|---|---| +| PriceProductOfferWishlistItemExpanderPlugin | Expands the `WishlistItem` transfer object with product offer prices. | | Spryker\Zed\PriceProductOffer\Communication\Plugin\Wishlist | +| PriceProductOfferVolumeExtractorPlugin | Extracts volume prices from the price product offer collection. | | Spryker\Zed\PriceProductOfferVolume\Communication\Plugin\PriceProductOffer | + +**src/Pyz/Zed/Wishlist/WishlistDependencyProvider.php** + +```php + + */ + protected function getWishlistItemExpanderPlugins(): array + { + return [ + new PriceProductOfferWishlistItemExpanderPlugin(), + ]; + } +} +``` + +**src/Pyz/Zed/PriceProductOffer/PriceProductOfferDependencyProvider.php** + +```php + + */ + protected function getPriceProductOfferExtractorPlugins(): array + { + return [ + new PriceProductOfferVolumeExtractorPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `PriceProductOfferWishlistItemExpanderPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items`. You should get the price product collection within the `attributes` in the response. + +Make sure that `PriceProductOfferVolumeExtractorPlugin` is set up by sending the request `GET https://glue.mysprykershop.com/wishlists/{% raw %}{{wishlistId}}{% endraw %}?include=wishlist-items,selected-product-offers,product-offer-prices`. You should get the product offer volume prices within the `prices` in the response. + +{% endinfo_block %} diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.md new file mode 100644 index 00000000000..3590fcc1c68 --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.md @@ -0,0 +1,584 @@ +--- +title: "Glue API: Manage marketplace shopping list items" +description: Learn how to manage Spryker Marketplace shopping list items via the Spryker Glue API. +last_updated: May 20, 2022 +template: glue-api-storefront-guide-template +related: + - title: Managing shopping lists + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.html +--- + +This endpoint allows managing marketplace shopping list items. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Marketplace Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.html) + +## Add items to a shopping list + +To add items to a shopping list, send the request: + +*** +`POST` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to add items to. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | concrete-products | + + +
    +Request sample: add items to the shopping list + +`POST https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + } + } +} +``` + +
    + + +
    +Request sample: add items to the shopping list, and include information about the concrete products + +`POST https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items?include=concrete-products` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 4, + "sku": "128_27314278" + } + } +} +``` + +
    + + +
    +Request sample: add marketplace products to the shopping list + +`POST https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items?include=shopping-list-items` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + } + } +} +``` + +
    + + +
    +Request sample: add product offers to the shopping list + +`POST https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items?include=shopping-list-items` + +```json +{ + "data":{ + "type":"shopping-list-items", + "attributes":{ + "sku":"091_25873091", + "quantity": 3, + "productOfferReference":"offer3" + } + } +} +``` + +
    + + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| quantity | Integer | ✓ | Quantity of the product to add. | +| sku | String | ✓ | SKU of the product to add. Only [concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) are allowed. | +| productOfferReference | String | | Unique identifier of the product offer. | + +### Response + +
    +Response sample: add items to the shopping list + +```json + { + "data": { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } +} +``` + +
    + +
    +Response sample: add items to the shopping list, and include information about the concrete products + +```json + { + "data": { + "type": "shopping-list-items", + "id": "6283f155-6b8a-5d8c-96b7-3af4091eea3e", + "attributes": { + "quantity": 4, + "sku": "128_27314278" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/6283f155-6b8a-5d8c-96b7-3af4091eea3e" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/128_27314278" + } + } + ] +} +``` + +
    + +
    +Response sample: add marketplace products to the shopping list + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 3, + "sku": "110_19682159" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + } + } +} +``` + +
    + +
    +Response sample: add product offers to the shopping list + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf", + "attributes": { + "productOfferReference": "offer3", + "merchantReference": "MER000001", + "quantity": 3, + "sku": "091_25873091" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/946451d1-3c40-559e-95c7-ebda2d12bebf" + } + } +} +``` + +
    + + + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| quantity | Integer | Quantity of the product. | +| sku | String | Product SKU. | +| productOfferReference | String | Unique identifier of the product offer. | +| merchantReference | String | Unique identifier of the merchant. | + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + + +## Change item quantity in a shopping list + +To change the item quantity in a shopping list, send the request: + +*** +`PATCH` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items/*{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to update item quantity in. | +| ***{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list item to change the quantity of. To get it, [Retrieve shopping lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.html), or [Retrieve a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.html) with the `shopping-list-items` included. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | concrete-products| + +
    +Request sample: change the quantity of the items in the shopping list + +`PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 12, + "sku": "005_30663301" + } + } +} +``` + +
    + +
    +Request sample: change the quantity of the items in the shopping list, and include concrete products + +`PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08?include=concrete-products` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 12, + "sku": "128_27314278" + } + } +} +``` + +
    + +
    +Request sample: change the quantity of marketplace products in the shopping list + +`PATCH https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/29f1d940-00b6-5492-abf3-d2b5ff15f0b2` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 15, + "sku": "110_19682159" + } + } +} +``` + +
    + +
    +Request sample: change the quantity of product offers in the shopping list + +`PATCH https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/946451d1-3c40-559e-95c7-ebda2d12bebf` + +```json +{ + "data": { + "type": "shopping-list-items", + "attributes": { + "quantity": 10, + "sku": "091_25873091" + } + } +} +``` + +
    + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- |--- | +| sku | String | ✓ | SKU of the product you want to change the quantity of. Only [concrete products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/feature-overviews/product-feature-overview/product-feature-overview.html) are allowed. | +| quantity | Integer | ✓ | New quantity of the product. | + +### Response + +
    +Response sample: change the quantity of the items in the shopping list + +```json + { + "data": { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 12, + "sku": "005_30663301" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } +} +``` + +
    + +
    +Response sample: change the quantity of the items in the shopping list, and include concrete products + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "6283f155-6b8a-5d8c-96b7-3af4091eea3e", + "attributes": {...}, + "links": {... }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/128_27314278" + } + } + ] +} +``` + +
    + +
    +Response sample: change the quantity of marketplace products in the shopping list + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 15, + "sku": "110_19682159" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + } + } +} +``` + +
    + +
    +Response sample: change the quantity of product offers in the shopping list + +```json +{ + "data": { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf", + "attributes": { + "productOfferReference": "offer3", + "merchantReference": "MER000001", + "quantity": 10, + "sku": "091_25873091" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/946451d1-3c40-559e-95c7-ebda2d12bebf" + } + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +{% include pbc/all/glue-api-guides/{{page.version}}/shopping-list-items-response-attributes.md %} + + +## Remove an item from a shopping list + +To remove an item from a shopping list, send the request: + +*** +`DELETE` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*/shopping-list-items/*{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to delete an item from. | +| ***{% raw %}{{{% endraw %}shopping_list_item_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list item to remove. To get it, [Retrieve shopping lists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.html), or [Retrieve a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.html) with the `shopping-list-items` included. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: + +`DELETE https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08` + +### Response + +If the item is removed successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 400 | Provided access token is not an [access token of a сompany user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | +| 901 | Shop list name or item name is not specified or too long.
    **OR**
    Item quantity is not specified or too large.| +| 1501 | Shopping list ID is not specified. | +| 1502 | Shopping list item is not specified. | +| 1503 | Specified shopping list is not found. | +| 1504 | Shopping list item is not found. | +| 1505 | Shopping list write permission is required. | +| 1506 | Shopping list with given name already exists. | +| 1507 | Shopping list item quantity is not valid. | +| 1508 | Concrete product not found. | +| 1509 | Shopping list validation failed. | +| 1510 | Product is discontinued. | +| 1511 | Product is not active. | +| 1512 | Merchant is inactive. | +| 1513 | Merchant is not approved. | +| 1514 | Product offer is not approved. | +| 1515 | Product is not approved. | +| 1516 | Product offer is not active. | +| 1517 | Product offer is not found. | +| 1518 | Product is not equal to the current Store. | +| 1519 | Product offer is not equal to the current Store. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists-and-wishlists.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists-and-wishlists.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists-and-wishlists.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists-and-wishlists.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.md new file mode 100644 index 00000000000..25bbb8963cb --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-lists.md @@ -0,0 +1,1088 @@ +--- +title: "Glue API: Manage marketplace shopping lists" +description: Learn how to manage the Spryker Marketplace Shopping lists with GLUE API for your Spryker Marketplace projects. +last_updated: May 20, 2022 +template: glue-api-storefront-guide-template +related: + - title: Install the Marketplace Shopping Lists feature + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/install-and-upgrade/install-features/install-the-marketplace-shopping-lists-feature.html + - title: Install the Marketplace Shopping Lists Glue API + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.html + - title: Managing shopping list items + link: docs/pbc/all/shopping-list-and-wishlist/page.version/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.html +--- + +The Marketplace Shopping Lists API feature lets you manage shopping lists in the Marketplace, as well as managing the items in them. + +In your development, the resources can help you to enable the shopping list functionality in your application. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see: +- [Install the Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-shopping-lists-glue-api.html) +- [Install the Product Glue API](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/install-and-upgrade/install-glue-api/install-the-product-glue-api.html) +- [Install the Marketplace Shopping Lists Glue API](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-shopping-lists-glue-api.html) + + +## Create a shopping list + +To create a shopping list for a registered user, send the request: + +--- +`POST` **/shopping-lists** + +--- + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +Request sample: + +`POST https://glue.mysprykershop.com/shopping-lists` + +```json +{ + "data":{ + "type": "shopping-lists", + "attributes":{ + "name":"My Shopping List" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| name | string | ✓ | Name of the shopping list to create. | + +### Response + +Response sample: + +```json +{ + "data": { + "type": "shopping-lists", + "id": "sdb17f85-953f-565a-a4ce-e5cb02405f83", + "attributes": { + "owner": "Anne Boleyn", + "name": "Laptops", + "numberOfItems": 0, + "updatedAt": "2020-02-07 09:26:01.623754", + "createdAt": "2020-02-07 09:26:01.623754" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83" + } + } +} +``` + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --- | --- | --- | +| owner | String | First and last names of the shopping list owner. | +| name | String |Shopping list name. | +| numberOfItems | Integer | Number of items on the shopping list. | +| updatedAt | String | Date when the shopping list was last updated. | +| createdAt | String | Date when the shopping list was created. | + +## Retrieve shopping lists + +To retrieve shopping lists, send the request: + +*** +`GET` **/shopping-lists** +*** + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | shopping-list-items, concrete-products| + +{% info_block infoBox %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +{% endinfo_block %} + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/shopping-lists` | Retrieve all shopping lists. | +| `GET https://glue.mysprykershop.com/shopping-lists?include=shopping-list-items,concrete-products` | Retrieve all shopping lists with its items and respective concrete products. | + +### Response + +
    +Response sample: retrieve all shopping lists + +```json + { + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists" + } +} +``` + +
    + +
    +Response sample: retrieve own and shared shopping lists + +```json +{ + "data": [ + { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List", + "numberOfItems": 19, + "updatedAt": "2020-02-07 07:59:09.621433", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + }, + { + "type": "shopping-lists", + "id": "184ea79d-a2d3-549a-8ca2-4ea36879ceee", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List 2", + "numberOfItems": 0, + "updatedAt": "2020-02-07 08:01:11.539074", + "createdAt": "2020-02-07 08:01:11.539074" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/184ea79d-a2d3-549a-8ca2-4ea36879ceee" + } + }, + { + "type": "shopping-lists", + "id": "f5ce1365-1429-5d99-97a9-c1b19e4fede6", + "attributes": { + "owner": "Niels Barr", + "name": "Shared Shopping List", + "numberOfItems": 0, + "updatedAt": "2020-02-07 09:34:41.438426", + "createdAt": "2020-02-07 09:34:41.438426" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/f5ce1365-1429-5d99-97a9-c1b19e4fede6" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists" + } +} +``` + +
    + +
    +Response sample: retrieve all shopping lists with its items and respective concrete products + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Acer Chromebook C730-C8T7", + "description": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long on a single charge. Indulge your e✓ and see everything in vivid detail on the Acer Chromebook's Full HD display. The Acer Chromebook features the latest 802.11ac wireless technology, for a smooth internet experience at connection speeds that are up to three times faster than that of previous-generation wireless technologies. The Acer Chromebook starts within 8 seconds, so you can wait less and do more. At less than an inch thin and extremely light, the Acer Chromebook is the perfect tool for on-the-go computing. Plus, it sports a fanless design for whisper-quiet computing.", + "attributes": { + "product_type": "Chromebook", + "form_factor": "clamshell", + "processor_threads": "2", + "processor_boost_frequency": "2.58 GHz", + "brand": "Acer", + "color": "Grey" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "metaTitle": "Acer Chromebook C730-C8T7", + "metaKeywords": "Acer,Entertainment Electronics", + "metaDESCRIPTION": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_threads": "Processor Threads", + "processor_boost_frequency": "Processor boost frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/136_24425591" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": {...}, + "links": {...}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "136_24425591" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 175", + "description": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies look like miniature scale models and much more. Capture the stunning detail in everyday subjects using 1 cm Macro to get right up close. Enjoy exceptional quality, detailed images thanks to 20.0 Megapixels and DIGIC 4+ processing. Face Detection technology makes capturing great shots of friends effortless, while Auto Zoom intelligently helps you select the best framing at the touch of a button.", + "attributes": { + "optical_zoom": "8 x", + "combined_zoom": "32 x", + "display": "LCD", + "hdmi": "no", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 175", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDESCRIPTION": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies loo", + "attributeNames": { + "optical_zoom": "Optical zoom", + "combined_zoom": "Combined zoom", + "display": "Display", + "hdmi": "HDMI", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/005_30663301" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": {...}, + "links": {....}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "005_30663301" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For the response attributes, see [Create a shopping list](#create-a-shopping-list). + +For the attributes of included resources, see: +- [Add items to a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.html) + +## Retrieve a shopping list + +To retrieve a shopping list, send the request: + +*** +`GET` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to retrieve. | + + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. |
    • shopping-list-items
    • concrete-products
    • merchants
    • product-offers
    | + +{% info_block infoBox "Included resources" %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +To retrieve merchants in a shopping list, include `shopping-list-items` and `merchants` resources. + +To retrieve product offers in a shopping list, include `shopping-list-items` and `product-offers` resources. + +{% endinfo_block %} + + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `GET https://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83` | Retrieve the shopping list with the id `sdb17f85-953f-565a-a4ce-e5cb02405f83`. | +| `GET https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items` | Retrieve the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` with its items. | +| `GET https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items,concrete-products` | Retrieve the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` with its items and respective concrete products. | +| `GET https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce?include=shopping-list-items,merchants` | Retrieve the shopping list with the id `c0bc6296-8a0c-50d9-b25e-5bface7671ce` with its merchants. | +| `GET https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce?include=shopping-list-items,product-offers,product-offer-availabilities`| Retrieve the shopping list with the id `c0bc6296-8a0c-50d9-b25e-5bface7671ce` with its product offers and product offer availabilities. | + +### Response + +
    +Response sample: retrieve a shopping list + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "My Shopping List", + "numberOfItems": 19, + "updatedAt": "2020-02-07 07:59:09.621433", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + } +} +``` + +
    + +
    +Response sample: retrieve a shopping list with its items + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 15, + "sku": "136_24425591" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 4, + "sku": "005_30663301" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a shopping list with its items and concrete products + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "136_24425591", + "attributes": { + "sku": "136_24425591", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Acer Chromebook C730-C8T7", + "description": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long on a single charge. Indulge your e✓ and see everything in vivid detail on the Acer Chromebook's Full HD display. The Acer Chromebook features the latest 802.11ac wireless technology, for a smooth internet experience at connection speeds that are up to three times faster than that of previous-generation wireless technologies. The Acer Chromebook starts within 8 seconds, so you can wait less and do more. At less than an inch thin and extremely light, the Acer Chromebook is the perfect tool for on-the-go computing. Plus, it sports a fanless design for whisper-quiet computing.", + "attributes": { + "product_type": "Chromebook", + "form_factor": "clamshell", + "processor_threads": "2", + "processor_boost_frequency": "2.58 GHz", + "brand": "Acer", + "color": "Grey" + }, + "superAttributesDefinition": [ + "form_factor", + "color" + ], + "metaTitle": "Acer Chromebook C730-C8T7", + "metaKeywords": "Acer,Entertainment Electronics", + "metaDESCRIPTION": "Amazing mobility Slip the Acer Chromebook into your bag and work from anywhere, without recharging, because it has enough battery life to last all day long", + "attributeNames": { + "product_type": "Product type", + "form_factor": "Form factor", + "processor_threads": "Processor Threads", + "processor_boost_frequency": "Processor boost frequency", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/136_24425591" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": {...}, + "links": {...}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "136_24425591" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "005_30663301", + "attributes": { + "sku": "005_30663301", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Canon IXUS 175", + "description": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies look like miniature scale models and much more. Capture the stunning detail in everyday subjects using 1 cm Macro to get right up close. Enjoy exceptional quality, detailed images thanks to 20.0 Megapixels and DIGIC 4+ processing. Face Detection technology makes capturing great shots of friends effortless, while Auto Zoom intelligently helps you select the best framing at the touch of a button.", + "attributes": { + "optical_zoom": "8 x", + "combined_zoom": "32 x", + "display": "LCD", + "hdmi": "no", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 175", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDESCRIPTION": "Creative play Play with your creativity using a range of Creative Filters. Re-create the distortion of a fish-eye lens, make scenes in stills or movies loo", + "attributeNames": { + "optical_zoom": "Optical zoom", + "combined_zoom": "Combined zoom", + "display": "Display", + "hdmi": "HDMI", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/005_30663301" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": {...}, + "links": {....}, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "005_30663301" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a shopping list with its items and merchants + +```json +{ + "data": { + "type": "shopping-lists", + "id": "c0bc6296-8a0c-50d9-b25e-5bface7671ce", + "attributes": { + "owner": "Andrew Wedner", + "name": "Test shopping list", + "numberOfItems": 6, + "updatedAt": "2022-03-17 09:44:24.000000", + "createdAt": "2022-03-17 09:44:24.000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce?include=shopping-list-items,merchants" + }, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + }, + { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf" + } + ] + } + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/de/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker ist der Haupthändler auf dem Demo-Marktplatz.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 Tage", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

    § 1 Geltungsbereich & Abwehrklausel



    (1) Für die über diesen Internet-Shop begründeten Rechtsbeziehungen zwischen dem Betreiber des Shops (nachfolgend „Anbieter") und seinen Kunden gelten ausschließlich die folgenden Allgemeinen Geschäftsbedingungen in der jeweiligen Fassung zum Zeitpunkt der Bestellung.

    (2) Abweichende Allgemeine Geschäftsbedingungen des Kunden werden zurückgewiesen.

    § 2 Zustandekommen des Vertrages



    (1) Die Präsentation der Waren im Internet-Shop stellt kein bindendes Angebot des Anbieters auf Abschluss eines Kaufvertrages dar. Der Kunde wird hierdurch lediglich aufgefordert, durch eine Bestellung ein Angebot abzugeben.

    (2) Durch das Absenden der Bestellung im Internet-Shop gibt der Kunde ein verbindliches Angebot gerichtet auf den Abschluss eines Kaufvertrages über die im Warenkorb enthaltenen Waren ab. Mit dem Absenden der Bestellung erkennt der Kunde auch diese Geschäftsbedingungen als für das Rechtsverhältnis mit dem Anbieter allein maßgeblich an.

    (3) Der Anbieter bestätigt den Eingang der Bestellung des Kunden durch Versendung einer Bestätigungs-E-Mail. Diese Bestellbestätigung stellt noch nicht die Annahme des Vertragsangebotes durch den Anbieter dar. Sie dient lediglich der Information des Kunden, dass die Bestellung beim Anbieter eingegangen ist. Die Erklärung der Annahme des Vertragsangebotes erfolgt durch die Auslieferung der Ware oder eine ausdrückliche Annahmeerklärung.

    § 3 Eigentumsvorbehalt



    Die gelieferte Ware verbleibt bis zur vollständigen Bezahlung im Eigentum des Anbieters.

    § 4 Fälligkeit



    Die Zahlung des Kaufpreises ist mit Vertragsschluss fällig.

    ", + "cancellationPolicy": "Sie haben das Recht, binnen vierzehn Tagen ohne Angabe von Gründen diesen Vertrag zu widerrufen. Die Widerrufsfrist beträgt vierzehn Tage ab dem Tag, an dem Sie oder ein von Ihnen benannter Dritter, der nicht der Beförderer ist, die letzte Ware in Besitz genommen hat. Sie können dafür das beigefügte Muster-Widerrufsformular verwenden, das jedoch nicht vorgeschrieben ist. Zur Wahrung der Widerrufsfrist reicht es aus, dass Sie die Mitteilung über die Ausübung des Widerrufsrechts vor Ablauf der Widerrufsfrist absenden.", + "imprint": "

    Spryker Systems GmbH

    Julie-Wolfthorn-Straße 1
    10115 Berlin
    DE

    Phone: +49 (30) 2084983 50
    Email: info@spryker.com

    Vertreten durch
    Geschäftsführer: Alexander Graf, Boris Lokschin
    Registergericht: Hamburg
    Registernummer: HRB 134310

    ", + "dataPrivacy": "Für die Abwicklung ihrer Bestellung gelten auch die Datenschutzbestimmungen von Spryker Systems GmbH." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 3, + "sku": "110_19682159" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + }, + { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf", + "attributes": { + "productOfferReference": "offer3", + "merchantReference": "MER000001", + "quantity": 3, + "sku": "091_25873091" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/946451d1-3c40-559e-95c7-ebda2d12bebf" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a shopping list with its items, product offers and product offer availabilities + +```json +{ + "data": { + "type": "shopping-lists", + "id": "c0bc6296-8a0c-50d9-b25e-5bface7671ce", + "attributes": { + "owner": "Andrew Wedner", + "name": "Test shopping list", + "numberOfItems": 6, + "updatedAt": "2022-03-17 09:44:24.000000", + "createdAt": "2022-03-17 09:44:24.000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce?include=shopping-list-items,product-offers,product-offer-availabilities" + }, + "relationships": { + "shopping-list-items": { + "data": [ + { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + }, + { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf" + } + ] + } + } + }, + "included": [ + { + "type": "shopping-list-items", + "id": "29f1d940-00b6-5492-abf3-d2b5ff15f0b2", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "quantity": 3, + "sku": "110_19682159" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/29f1d940-00b6-5492-abf3-d2b5ff15f0b2" + } + }, + { + "type": "product-offers", + "id": "offer3", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000001", + "isDefault": null + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer3" + } + }, + { + "type": "shopping-list-items", + "id": "946451d1-3c40-559e-95c7-ebda2d12bebf", + "attributes": { + "productOfferReference": "offer3", + "merchantReference": "MER000001", + "quantity": 3, + "sku": "091_25873091" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/c0bc6296-8a0c-50d9-b25e-5bface7671ce/shopping-list-items/946451d1-3c40-559e-95c7-ebda2d12bebf" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer3" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + + +For response attributes, see [Create a shopping list](#create-a-shopping-list). + +For the attributes of included resources, see: +- [Add items to a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.html) +- [Retrieve merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html) +- [Retrieve product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html) + +## Edit a shopping list + +To edit a shopping list, send the request: + +*** +`PATCH` **/shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to edit. | + +### Request + +| HEADER KEY | TYPE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | String containing digits, letters, and symbols that authorize the company user. [Authenticate as a company user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html#authenticate-as-a-company-user) to get the value. | + +| QUERY PARAMETER | DESCRIPTION | EXEMPLARY VALUES | +| --- | --- | --- | +| include | Adds resource relationships to the request. | shopping-list-items, concrete-products| + +{% info_block infoBox "Included resources" %} + +To retrieve concrete products in a shopping list, include `shopping-list-items` and `concrete-products` resources. + +{% endinfo_block %} + + +| REQUEST SAMPLE | USAGE | +| --- | --- | +| `PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` | Edit the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a`. | +| `PATCH https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a?include=shopping-list-items,concrete-products` | Edit the shopping list with the id `ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a` and include its items and respective concrete products into the response. | + +```json +{ + "data": { + "type": "shopping-lists", + "attributes": { + "name": "New Name" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION| +| --- | --- | --- |--- | +| name | String | ✓ | New name of the shopping list. | + +### Response + +
    +Response sample: edit the shopping list + +```json +{ + "data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": { + "owner": "Spencor Hopkin", + "name": "New Name", + "numberOfItems": 19, + "updatedAt": "2020-02-08 14:17:38.288982", + "createdAt": "2020-02-07 07:59:09.621433" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a" + } + } +} +``` + +
    + +
    +Response sample: edit the shopping list with its items and respective concrete products + +```json +"data": { + "type": "shopping-lists", + "id": "ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a", + "attributes": {...}, + "links": {...}, + "relationships": {...}, + "included": [ + { + "type": "concrete-products", + "id": "090_24495844", + "attributes": { + "sku": "090_24495844", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony SmartWatch 3", + "description": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated, casual, vibrant colours and fitness style, all made from the finest materials. Designed to perform and impress, this smartphone watch delivers a groundbreaking combination of technology and style. Downloadable apps let you customise your SmartWatch 3 SWR50 and how you use it. Tell SmartWatch 3 SWR50 smartphone watch what you want and it will do it. Search. Command. Find.", + "attributes": { + "internal_ram": "512 MB", + "flash_memory": "4 GB", + "weight": "45 g", + "protection_feature": "Water resistent", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "flash_memory", + "color" + ], + "metaTitle": "Sony SmartWatch 3", + "metaKeywords": "Sony,Smart Electronics", + "metaDESCRIPTION": "The way you like it Whatever your lifestyle SmartWatch 3 SWR50 can be made to suit it. You can choose from a range of wrist straps—formal, sophisticated,", + "attributeNames": { + "internal_ram": "Internal RAM", + "flash_memory": "Flash memory", + "weight": "Weight", + "protection_feature": "Protection feature", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/090_24495844" + } + }, + { + "type": "shopping-list-items", + "id": "c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17", + "attributes": { + "quantity": 1, + "sku": "090_24495844" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/c3e12dfb-05e5-51c3-ae8f-ba2f07b6bd17" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "090_24495844" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "128_27314278", + "attributes": { + "sku": "128_27314278", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Lenovo ThinkCentre E73", + "description": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep your business-critical information safe through USB port disablement and the password-protected BIOS and HDD. You can also safeguard your hardware by physically securing your mouse and keyboard, while the Kensington slot enables you to lock down your E73. Lenovo Desktop Power Manager lets you balance power management and performance to save energy and lower costs. The E73 is also ENERGY STAR compliant, EPEAT® Gold and Cisco EnergyWise™ certified—so you can feel good about the planet and your bottom line. With SuperSpeed USB 3.0, transfer data up to 10 times faster than previous USB technologies. You can also connect to audio- and video-related devices with WiFi and Bluetooth® technology.", + "attributes": { + "processor_threads": "8", + "pci_express_slots_version": "3", + "internal_memory": "8 GB", + "stepping": "C0", + "brand": "Lenovo", + "processor_frequency": "3.6 GHz" + }, + "superAttributesDefinition": [ + "internal_memory", + "processor_frequency" + ], + "metaTitle": "Lenovo ThinkCentre E73", + "metaKeywords": "Lenovo,Tax Exempt", + "metaDESCRIPTION": "Small Form Factor Small Form Factor desktops provide the ultimate performance with full-featured scalability, yet weigh as little as 13.2 lbs / 6 kgs. Keep", + "attributeNames": { + "processor_threads": "Processor Threads", + "pci_express_slots_version": "PCI Express slots version", + "internal_memory": "Max internal memory", + "stepping": "Stepping", + "brand": "Brand", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/128_27314278" + } + }, + { + "type": "shopping-list-items", + "id": "00fed212-3dc9-569f-885f-3ddca41dea08", + "attributes": { + "quantity": 1, + "sku": "128_27314278" + }, + "links": { + "self": "https://glue.mysprykershop.com/shopping-lists/ecdb5c3b-8bba-5a97-8e7b-c0a5a8f8a74a/shopping-list-items/00fed212-3dc9-569f-885f-3ddca41dea08" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "128_27314278" + } + ] + } + } + } + ] +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For response attributes, see [Create a shopping list](#create-a-shopping-list). + +For the attributes of included resources, see: +- [Add items to a shopping list](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-shopping-list-items.html) + +## Delete a shopping list + +To delete a shopping list, send the request: + +*** +`DELETE` **shopping-lists/*{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** +*** + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}shopping_list_id{% raw %}}}{% endraw %}*** | Unique identifier of a shopping list to delete. To get it, [Retrieve shopping lists](#retrieve-shopping-lists). | + +### Request + +Request sample: + +`DELETE https://glue.mysprykershop.com/shopping-lists/sdb17f85-953f-565a-a4ce-e5cb02405f83` — Delete the shopping list with the id `sdb17f85-953f-565a-a4ce-e5cb02405f83`. + +### Response + +If the shopping list is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | Access token is incorrect. | +| 002 | Access token is missing. | +| 400 | Provided access token is not an [access token of a сompany user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-company-user.html). | +| 901 | Shop list name or item name is not specified or too long.
    **OR**
    Item quantity is not specified or too large.| +| 1501 | Shopping list ID is not specified. | +| 1502 | Shopping list item is not specified. | +| 1503 | Specified shopping list is not found. | +| 1504 | Shopping list item is not found. | +| 1505 | Shopping list write permission is required. | +| 1506 | Shopping list with given name already exists. | +| 1507 | Shopping list item quantity is not valid. | +| 1508 | Concrete product not found. | +| 1509 | Shopping list validation failed. | +| 1510 | Product is discontinued. | +| 1511 | Product is not active. | +| 1512 | Merchant is inactive. | +| 1513 | Merchant is not approved. | +| 1514 | Product offer is not approved. | +| 1515 | Product is not approved. | +| 1516 | Product offer is not active. | +| 1517 | Product offer is not found. | +| 1518 | Product is not equal to the current Store. | +| 1519 | Product offer is not equal to the current Store. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlist-items.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlist-items.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlist-items.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlist-items.md diff --git a/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.md new file mode 100644 index 00000000000..3241cffae5a --- /dev/null +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.md @@ -0,0 +1,2337 @@ +--- +title: "Glue API: Manage marketplace wishlists" +description: Retrieve details about wishlists and learn what else you can do with the resource in the Spryker Marketplace. +template: glue-api-storefront-guide-template +last_updated: Jan 2, 2024 +redirect_from: + - /docs/marketplace/dev/glue-api-guides/201811.0/wishlists/managing-wishlists.html + - /docs/marketplace/dev/glue-api-guides/201903.0/wishlists/managing-wishlists.html + - /docs/marketplace/dev/glue-api-guides/201907.0/wishlists/managing-wishlists.html + - /docs/marketplace/dev/glue-api-guides/202005.0/wishlists/managing-wishlists.html +related: + - title: Managing wishlist items + link: docs/pbc/all/shopping-list-and-wishlist/page.version/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.html +--- + +The Marketplace Wishlists API allows creating list and deleting [wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/wishlist-feature-overview.html) in the Marketplace, as well as managing the items in them. + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see [Install the Marketplace Wishlist feature](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-wishlist-feature.html) + +## Create a wishlist + +To create a wishlist, send the request: + +*** +`POST` **/wishlists** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ---------- | -------- | -------- | -------------- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: create a wishlist + +`POST https://glue.mysprykershop.com/wishlists` + +```json +{ + "data": { + "type": "wishlists", + "attributes": { + "name": "My_favourite_wishlist" + } + } +} +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| ------- | ----- | ------- | -------------- | +| name | string | ✓ | Name of the wishlist to create.| + +### Response + +Response sample: create a wishlist + +```json +{ + "data": { + "type": "wishlists", + "id": "57c96d55-8a37-5998-927f-7bb663b69094", + "attributes": { + "name": "My_favourite_wishlist", + "numberOfItems": 0, + "createdAt": "2021-07-13 14:50:08.755124", + "updatedAt": "2021-07-13 14:50:08.755124" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/57c96d55-8a37-5998-927f-7bb663b69094" + } + } +} +``` + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ------------ | ------ | --------------- | +| name | String | Name of the wishlist. | +| numberOfItems | Integer | Number of items in the wishlist. | +| createdAt | String | Creation date of the wishlist. | +| updatedAt | String | Date when the wishlist was updated. | + +## Retrieve wishlists + +To retrieve all wishlists of a customer, send the request: + + +*** +`GET` **/wishlists** +*** + +### Request + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| -------------- | ------------- | ----------- | +| include | Adds resource relationships to the request. |
    • wishlist-items
    • concrete-products
    • product-labels
    | + +| REQUEST SAMPLE | USAGE | +| -------------- | ----- | +| `GET https://glue.mysprykershop.com/wishlists` | Retrieve all the wishlists of a customer. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items` | Retrieve all the wishlists of a customer with wishlist items. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products` | Retrieve all the wishlists of a customer with wishlist items and respective concrete products. | +| `GET https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products,product-labels` | Retrieve all the wishlists of a customer with wishlist items, respective concrete products, and their product labels. | + + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ------------ | ----------- | -------- | --------- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +### Response + +
    +Response sample: no wishlists found + +```json +{ + "data": [], + "links": { + "self": "https://glue.mysprykershop.com/wishlists" + } + } +``` + +
    + +
    +Response sample: retrieve all the wishlists + + +```json + { + "data": [ + { + "type": "wishlists", + "id": "1623f465-e4f6-5e45-8dc5-987b923f8af4", + "attributes": { + "name": "My Wishlist Name", + "numberOfItems": 0, + "createdAt": "2018-12-16 17:24:12.601033", + "updatedAt": "2018-12-16 17:24:12.601033" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/1623f465-e4f6-5e45-8dc5-987b923f8af4" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists" + } + } +``` + +
    + +
    +Response sample: retrieve all the wishlists with wishlist items + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "149_28346778" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items" + }, + "included": [ + { + "type": "wishlist-items", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/149_28346778" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve all the wishlists with wishlist items and respective concrete products + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "149_28346778" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products" + }, + "included": [ + { + "type": "concrete-products", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "HP 200 250 G4", + "description": "Durable mobile design Rest assured that the HP 250 can keep up with assignments on the run. The durable chassis protects the notebook so it looks as professional as you do. Get connected with the value-priced HP 250 Notebook PC. Complete business tasks with Intel technology, essential multimedia tools and Windows 8.1 loaded on the HP 250. The durable chassis helps protect the notebook from the rigors of the day. HP, a world leader in PCs and touch technology helps equip you with a fully functional notebook ready to connect to all your peripherals and designed to fit the needs of business. HP, a world leader in PCs and touch technology helps equip you with a fully functional notebook ready to connect to all your peripherals and designed to fit the needs of business.", + "attributes": { + "form_factor": "clamshell", + "processor_cores": "2", + "thermal_design_power": "15 W", + "brand": "HP", + "color": "Black", + "processor_frequency": "1.6 GHz" + }, + "superAttributesDefinition": [ + "form_factor", + "color", + "processor_frequency" + ], + "metaTitle": "HP 200 250 G4", + "metaKeywords": "HP,Entertainment Electronics", + "metaDescription": "Durable mobile design Rest assured that the HP 250 can keep up with assignments on the run. The durable chassis protects the notebook so it looks as profes", + "attributeNames": { + "form_factor": "Form factor", + "processor_cores": "Processor cores", + "thermal_design_power": "Thermal Design Power (TDP)", + "brand": "Brand", + "color": "Color", + "processor_frequency": "Processor frequency" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/149_28346778" + } + }, + { + "type": "wishlist-items", + "id": "149_28346778", + "attributes": { + "sku": "149_28346778" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/149_28346778" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "149_28346778" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve all the wishlists with wishlist items, respective concrete products, and their product labels + +```json +{ + "data": [ + { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-16 15:02:21.121613", + "updatedAt": "2021-02-16 15:02:21.121613" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/wishlists?include=wishlist-items,concrete-products,product-labels" + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --------- | ------ | ----------------- | +| name | String | Name of the wishlist. | +| numberOfItems | Integer | Number of items in the wishlist. | +| createdAt | String | Creation date of the wishlist.| +| updatedAt | String | Date when the wishlist was updated.| + + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For attributes of the included resources, see: + +- [Add an item to a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.html#add-an-item-to-a-wishlist) +- [Retrieve a product label](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-product-labels.html) + +## Retrieve a wishlist + +To retrieve a specific wishlist, send the request: + +*** +`GET` {% raw %}**/wishlists/*{{wishlist_id}}***{% endraw %} +*** + +| PATH PARAMETER | DESCRIPTION | +| ---------------- | ------------------------- | +| {% raw %}***{{wishlist_id}}***{% endraw %} | Unique identifier of the wishlist to retrieve the items of. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ------------ | ----------- | ------- | -------------- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +| QUERY PARAMETER | DESCRIPTION | POSSIBLE VALUES | +| ---------- | -------------------- | --------------------- | +| include | Adds resource relationships to the request. |
    • wishlist-items
    • concrete-products
    • product-labels
    • concrete-product-availabilities
    • concrete-product-prices
    • merchants
    | + +| REQUEST SAMPLE | USAGE | +| ------------- | ------------ | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1` | Retrieve a wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items in the response. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items and respective concrete products in the response. | +| `GET https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels` | Retrieve the wishlist with the `246591f8-4f30-55ce-8b17-8482859b4ac1` identifier. Include wishlist items, respective concrete products and their product labels in the response. | +| `GET https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4?include=wishlist-items,concrete-products,concrete-product-availabilities` | Retrieve the wishlist with the `bb7dbe75-d892-582f-b438-d7f6cbfd3fc4`identifier. Include wishlist items, concrete products and concrete product availabilities in the response. | +| `GET https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4?include=wishlist-items,concrete-products,concrete-product-prices` | Retrieve the wishlist with the `bb7dbe75-d892-582f-b438-d7f6cbfd3fc4`identifier. Include wishlist items, concrete products, and their prices. | +| `GET https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items,concrete-products,product-offers` | Retrieve the wishlist with the `13c813a3-8916-5444-9f1b-e4d8c56a085d`identifier. Include wishlist items, concrete products and product offers for these products. | +| `GET https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d?include=wishlist-items,concrete-products,product-offers,product-offer-availabilities` | Retrieve the wishlist with the `13c813a3-8916-5444-9f1b-e4d8c56a085d`identifier. Include wishlist items and product offer availabilities. | +| `GET https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d?include=wishlist-items,concrete-products,product-offers,product-offer-prices` | Retrieve the wishlist with the `13c813a3-8916-5444-9f1b-e4d8c56a085d`identifier. Include wishlist items and product offer prices. | +| `GET https://glue.mysprykershop.com/wishlists/57c96d55-8a37-5998-927f-7bb663b69094?include=wishlist-items,merchants` | Retrieve the wishlist with the `57c96d55-8a37-5998-927f-7bb663b69094`identifier. Include wishlist items and merchant information. | + + + +### Response + +
    +Response sample: retrieve a wishlist + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1" + } + } +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items included + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items and respective concrete products included + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, respective concrete products, and product labels included + +```json +{ + "data": { + "type": "wishlists", + "id": "246591f8-4f30-55ce-8b17-8482859b4ac1", + "attributes": { + "name": "My wishlist", + "numberOfItems": 1, + "createdAt": "2021-02-24 13:52:34.582421", + "updatedAt": "2021-02-24 13:52:34.582421" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1?include=wishlist-items,concrete-products,product-labels" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "020_21081478" + } + ] + } + } + }, + "included": [ + { + "type": "product-labels", + "id": "5", + "attributes": { + "name": "SALE %", + "isExclusive": false, + "position": 3, + "frontEndReference": "highlight" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-labels/5" + } + }, + { + "type": "concrete-products", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "name": "Sony Cyber-shot DSC-W830", + "description": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing it, and slip in your pocket. Shooting great photos and videos is easy with the W800. Buttons are positioned for ease of use, while a dedicated movie button makes shooting movies simple. The vivid 2.7-type Clear Photo LCD display screen lets you view your stills and play back movies with minimal effort. Whip out the W800 to capture crisp, smooth footage in an instant. At the press of a button, you can record blur-free 720 HD images with digital sound. Breathe new life into a picture by using built-in Picture Effect technology. There's a range of modes to choose from – you don't even have to download image-editing software.", + "attributes": { + "hdmi": "no", + "sensor_type": "CCD", + "display": "TFT", + "usb_version": "2", + "brand": "Sony", + "color": "Black" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony Cyber-shot DSC-W830", + "metaKeywords": "Sony,Entertainment Electronics", + "metaDescription": "Styled for your pocket Precision photography meets the portability of a smartphone. The W800 is small enough to take great photos, look good while doing i", + "attributeNames": { + "hdmi": "HDMI", + "sensor_type": "Sensor type", + "display": "Display", + "usb_version": "USB version", + "brand": "Brand", + "color": "Color" + } + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/020_21081478" + }, + "relationships": { + "product-labels": { + "data": [ + { + "type": "product-labels", + "id": "5" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "020_21081478", + "attributes": { + "sku": "020_21081478" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/246591f8-4f30-55ce-8b17-8482859b4ac1/wishlist-items/020_21081478" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "020_21081478" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, concrete products and their availabilities + +```json +{ + "data": { + "type": "wishlists", + "id": "bb7dbe75-d892-582f-b438-d7f6cbfd3fc4", + "attributes": { + "name": "My_wishlist", + "numberOfItems": 1, + "createdAt": "2021-07-13 14:49:39.635172", + "updatedAt": "2021-07-13 14:49:39.635172" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "109_19416433" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-availabilities", + "id": "109_19416433", + "attributes": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/109_19416433/concrete-product-availabilities" + } + }, + { + "type": "concrete-products", + "id": "109_19416433", + "attributes": { + "sku": "109_19416433", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "109", + "name": "Sony SW2 SmartWatch", + "description": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on top of everything. If you like to get out running, you can use SmartWatch as your phone remote. If it rains, you can keep on going. SmartWatch 2 can take the rain. If it's bright and sunny, SmartWatch 2 has an impressive sunlight-readable display. Take it anywhere. When you are using a wireless Bluetooth® headset for music, you can use SmartWatch 2 as a phone remote to make or receive calls. When a call comes in, you can see who's calling in your SmartWatch display, press once to answer and enjoy hands-free calling at its easiest. You can also browse recent calls in your call log and use SmartWatch to initiate a call.", + "attributes": { + "display_type": "LCD", + "shape": "square", + "bluetooth_version": "3", + "battery_life": "168 h", + "brand": "Sony", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SW2 SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on", + "attributeNames": { + "display_type": "Display type", + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/109_19416433" + }, + "relationships": { + "concrete-product-availabilities": { + "data": [ + { + "type": "concrete-product-availabilities", + "id": "109_19416433" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "109_19416433", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "109_19416433", + "sku": "109_19416433", + "availability": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4/wishlist-items/109_19416433" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "109_19416433" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, concrete products and their prices + +```json +{ + "data": { + "type": "wishlists", + "id": "bb7dbe75-d892-582f-b438-d7f6cbfd3fc4", + "attributes": { + "name": "My_wishlist", + "numberOfItems": 1, + "createdAt": "2021-07-13 14:49:39.635172", + "updatedAt": "2021-07-13 14:49:39.635172" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "109_19416433" + } + ] + } + } + }, + "included": [ + { + "type": "concrete-product-prices", + "id": "109_19416433", + "attributes": { + "price": 12572, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 12572, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/109_19416433/concrete-product-prices" + } + }, + { + "type": "concrete-products", + "id": "109_19416433", + "attributes": { + "sku": "109_19416433", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "109", + "name": "Sony SW2 SmartWatch", + "description": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on top of everything. If you like to get out running, you can use SmartWatch as your phone remote. If it rains, you can keep on going. SmartWatch 2 can take the rain. If it's bright and sunny, SmartWatch 2 has an impressive sunlight-readable display. Take it anywhere. When you are using a wireless Bluetooth® headset for music, you can use SmartWatch 2 as a phone remote to make or receive calls. When a call comes in, you can see who's calling in your SmartWatch display, press once to answer and enjoy hands-free calling at its easiest. You can also browse recent calls in your call log and use SmartWatch to initiate a call.", + "attributes": { + "display_type": "LCD", + "shape": "square", + "bluetooth_version": "3", + "battery_life": "168 h", + "brand": "Sony", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SW2 SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Anywhere. Any weather SmartWatch 2 is the wireless accessory that has something for everybody. If you are a busy communicator, you will appreciate being on", + "attributeNames": { + "display_type": "Display type", + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/109_19416433" + }, + "relationships": { + "concrete-product-prices": { + "data": [ + { + "type": "concrete-product-prices", + "id": "109_19416433" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "109_19416433", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "109_19416433", + "sku": "109_19416433", + "availability": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/bb7dbe75-d892-582f-b438-d7f6cbfd3fc4/wishlist-items/109_19416433" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "109_19416433" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, concrete products, and product offers + +```json +{ + "data": { + "type": "wishlists", + "id": "13c813a3-8916-5444-9f1b-e4d8c56a085d", + "attributes": { + "name": "My wish list", + "numberOfItems": 3, + "createdAt": "2021-07-15 08:55:22.109760", + "updatedAt": "2021-07-15 08:55:22.109760" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d?include=wishlist-items,concrete-products,product-offers" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "011_30775359_offer59" + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18" + }, + { + "type": "wishlist-items", + "id": "111_12295890" + } + ] + } + } + }, + "included": [ + { + "type": "product-offers", + "id": "offer59", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer59" + } + }, + { + "type": "product-offers", + "id": "offer18", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer18" + } + }, + { + "type": "concrete-products", + "id": "011_30775359", + "attributes": { + "sku": "011_30775359", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "011", + "name": "Canon IXUS 180", + "description": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control and choose the perfect camera settings for you. Play with your creativity in stills or movies using a range of Creative Filters such as Fish Eye, Miniature and Toy Camera. Enjoy exceptional quality, detailed images ideal for creating stunning poster sized prints thanks to 20.0 Megapixels and DIGIC 4+ processing. An intelligent optical Image Stabilizer ensures sharp stills and steady movies in any situation, while the 6.8 cm (2.7") LCD screen allows easy viewing and sharing.", + "attributes": { + "megapixel": "20 MP", + "sensor_type": "CCD", + "display": "LCD", + "digital_zoom": "4 x", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 180", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control", + "attributeNames": { + "megapixel": "Megapixel", + "sensor_type": "Sensor type", + "display": "Display", + "digital_zoom": "Digital zoom", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/011_30775359" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + }, + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer59", + "attributes": { + "productOfferReference": "offer59", + "merchantReference": "MER000001", + "id": "011_30775359_offer59", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 37881, + "netAmount": 34093, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 32940, + "netAmount": 29646, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer59" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18", + "attributes": { + "productOfferReference": "offer18", + "merchantReference": "MER000001", + "id": "011_30775359_offer18", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 39986, + "netAmount": 35987, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 34770, + "netAmount": 31293, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer18" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "111_12295890", + "attributes": { + "sku": "111_12295890", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "111", + "name": "Sony SmartWatch", + "description": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your world's just a tap, swipe or press away. Want to do more with your SmartWatch? Download compatible applications on Google Play™. And customise your SmartWatch to make it exclusively yours. Customise your SmartWatch with a 20mm wristband. Or wear its stylish wristband. You can even use it as a clip. This ultra-thin Android™ remote was designed to impress. An elegant Android watch that'll keep you discreetly updated and your hands free.", + "attributes": { + "shape": "square", + "bluetooth_version": "3", + "battery_life": "72 h", + "display_type": "LCD", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your ", + "attributeNames": { + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "display_type": "Display type", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/111_12295890" + } + }, + { + "type": "wishlist-items", + "id": "111_12295890", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "111_12295890", + "sku": "111_12295890", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/111_12295890" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "111_12295890" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, concrete products, product offers, and product offer availabilities + +```json +{ + "data": { + "type": "wishlists", + "id": "13c813a3-8916-5444-9f1b-e4d8c56a085d", + "attributes": { + "name": "My wish list", + "numberOfItems": 3, + "createdAt": "2021-07-15 08:55:22.109760", + "updatedAt": "2021-07-15 08:55:22.109760" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d?include=wishlist-items,concrete-products,product-offers,product-offer-availabilities" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "011_30775359_offer59" + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18" + }, + { + "type": "wishlist-items", + "id": "111_12295890" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-availabilities", + "id": "offer59", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer59/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer59", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer59" + } + }, + { + "type": "product-offer-availabilities", + "id": "offer18", + "attributes": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer18/product-offer-availabilities" + } + }, + { + "type": "product-offers", + "id": "offer18", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer18" + } + }, + { + "type": "concrete-products", + "id": "011_30775359", + "attributes": { + "sku": "011_30775359", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "011", + "name": "Canon IXUS 180", + "description": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control and choose the perfect camera settings for you. Play with your creativity in stills or movies using a range of Creative Filters such as Fish Eye, Miniature and Toy Camera. Enjoy exceptional quality, detailed images ideal for creating stunning poster sized prints thanks to 20.0 Megapixels and DIGIC 4+ processing. An intelligent optical Image Stabilizer ensures sharp stills and steady movies in any situation, while the 6.8 cm (2.7") LCD screen allows easy viewing and sharing.", + "attributes": { + "megapixel": "20 MP", + "sensor_type": "CCD", + "display": "LCD", + "digital_zoom": "4 x", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 180", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control", + "attributeNames": { + "megapixel": "Megapixel", + "sensor_type": "Sensor type", + "display": "Display", + "digital_zoom": "Digital zoom", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/011_30775359" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + }, + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer59", + "attributes": { + "productOfferReference": "offer59", + "merchantReference": "MER000001", + "id": "011_30775359_offer59", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 37881, + "netAmount": 34093, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 32940, + "netAmount": 29646, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer59" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18", + "attributes": { + "productOfferReference": "offer18", + "merchantReference": "MER000001", + "id": "011_30775359_offer18", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 39986, + "netAmount": 35987, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 34770, + "netAmount": 31293, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer18" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "111_12295890", + "attributes": { + "sku": "111_12295890", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "111", + "name": "Sony SmartWatch", + "description": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your world's just a tap, swipe or press away. Want to do more with your SmartWatch? Download compatible applications on Google Play™. And customise your SmartWatch to make it exclusively yours. Customise your SmartWatch with a 20mm wristband. Or wear its stylish wristband. You can even use it as a clip. This ultra-thin Android™ remote was designed to impress. An elegant Android watch that'll keep you discreetly updated and your hands free.", + "attributes": { + "shape": "square", + "bluetooth_version": "3", + "battery_life": "72 h", + "display_type": "LCD", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your ", + "attributeNames": { + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "display_type": "Display type", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/111_12295890" + } + }, + { + "type": "wishlist-items", + "id": "111_12295890", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "111_12295890", + "sku": "111_12295890", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/111_12295890" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "111_12295890" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items, concrete products, product offers, and product offer prices + +```json +{ + "data": { + "type": "wishlists", + "id": "13c813a3-8916-5444-9f1b-e4d8c56a085d", + "attributes": { + "name": "My wish list", + "numberOfItems": 3, + "createdAt": "2021-07-15 08:55:22.109760", + "updatedAt": "2021-07-15 08:55:22.109760" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d?include=wishlist-items,concrete-products,product-offers,product-offer-prices" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "011_30775359_offer59" + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18" + }, + { + "type": "wishlist-items", + "id": "111_12295890" + } + ] + } + } + }, + "included": [ + { + "type": "product-offer-prices", + "id": "offer59", + "attributes": { + "price": 32940, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 32940, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer59/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer59", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000005", + "isDefault": true + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer59" + } + }, + { + "type": "product-offer-prices", + "id": "offer18", + "attributes": { + "price": 34770, + "prices": [ + { + "priceTypeName": "DEFAULT", + "netAmount": null, + "grossAmount": 34770, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + }, + "volumePrices": [] + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer18/product-offer-prices" + } + }, + { + "type": "product-offers", + "id": "offer18", + "attributes": { + "merchantSku": null, + "merchantReference": "MER000002", + "isDefault": false + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer18" + } + }, + { + "type": "concrete-products", + "id": "011_30775359", + "attributes": { + "sku": "011_30775359", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "011", + "name": "Canon IXUS 180", + "description": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control and choose the perfect camera settings for you. Play with your creativity in stills or movies using a range of Creative Filters such as Fish Eye, Miniature and Toy Camera. Enjoy exceptional quality, detailed images ideal for creating stunning poster sized prints thanks to 20.0 Megapixels and DIGIC 4+ processing. An intelligent optical Image Stabilizer ensures sharp stills and steady movies in any situation, while the 6.8 cm (2.7") LCD screen allows easy viewing and sharing.", + "attributes": { + "megapixel": "20 MP", + "sensor_type": "CCD", + "display": "LCD", + "digital_zoom": "4 x", + "brand": "Canon", + "color": "Blue" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Canon IXUS 180", + "metaKeywords": "Canon,Entertainment Electronics", + "metaDescription": "Effortless creativity Just point and shoot to capture fantastic photos or movies with one touch of the Auto Button, which allows Smart Auto to take control", + "attributeNames": { + "megapixel": "Megapixel", + "sensor_type": "Sensor type", + "display": "Display", + "digital_zoom": "Digital zoom", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/011_30775359" + }, + "relationships": { + "product-offers": { + "data": [ + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + }, + { + "type": "product-offers", + "id": "offer59" + }, + { + "type": "product-offers", + "id": "offer18" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer59", + "attributes": { + "productOfferReference": "offer59", + "merchantReference": "MER000001", + "id": "011_30775359_offer59", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 37881, + "netAmount": 34093, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 32940, + "netAmount": 29646, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer59" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "wishlist-items", + "id": "011_30775359_offer18", + "attributes": { + "productOfferReference": "offer18", + "merchantReference": "MER000001", + "id": "011_30775359_offer18", + "sku": "011_30775359", + "availability": { + "isNeverOutOfStock": false, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 39986, + "netAmount": 35987, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 34770, + "netAmount": 31293, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/011_30775359_offer18" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "011_30775359" + } + ] + } + } + }, + { + "type": "concrete-products", + "id": "111_12295890", + "attributes": { + "sku": "111_12295890", + "isDiscontinued": false, + "discontinuedNote": null, + "averageRating": null, + "reviewCount": 0, + "productAbstractSku": "111", + "name": "Sony SmartWatch", + "description": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your world's just a tap, swipe or press away. Want to do more with your SmartWatch? Download compatible applications on Google Play™. And customise your SmartWatch to make it exclusively yours. Customise your SmartWatch with a 20mm wristband. Or wear its stylish wristband. You can even use it as a clip. This ultra-thin Android™ remote was designed to impress. An elegant Android watch that'll keep you discreetly updated and your hands free.", + "attributes": { + "shape": "square", + "bluetooth_version": "3", + "battery_life": "72 h", + "display_type": "LCD", + "brand": "Sony", + "color": "Silver" + }, + "superAttributesDefinition": [ + "color" + ], + "metaTitle": "Sony SmartWatch", + "metaKeywords": "Sony,Smart Electronics", + "metaDescription": "Your world at your fingertips SmartWatch features an easy-to-use, ultra-responsive touch display. Finding your way around SmartWatch is super simple. Your ", + "attributeNames": { + "shape": "Shape", + "bluetooth_version": "Blootooth version", + "battery_life": "Battery life", + "display_type": "Display type", + "brand": "Brand", + "color": "Color" + }, + "productConfigurationInstance": null + }, + "links": { + "self": "https://glue.mysprykershop.com/concrete-products/111_12295890" + } + }, + { + "type": "wishlist-items", + "id": "111_12295890", + "attributes": { + "productOfferReference": null, + "merchantReference": "MER000001", + "id": "111_12295890", + "sku": "111_12295890", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "20.0000000000" + }, + "prices": [ + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 19568, + "netAmount": 17611, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 22503, + "netAmount": 20253, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/13c813a3-8916-5444-9f1b-e4d8c56a085d/wishlist-items/111_12295890" + }, + "relationships": { + "concrete-products": { + "data": [ + { + "type": "concrete-products", + "id": "111_12295890" + } + ] + } + } + } + ] +} +``` + +
    + +
    +Response sample: retrieve a wishlist with wishlist items and merchant information included + +```json +{ + "data": { + "type": "wishlists", + "id": "57c96d55-8a37-5998-927f-7bb663b69094", + "attributes": { + "name": "My_favourite_wishlist", + "numberOfItems": 1, + "createdAt": "2021-07-13 14:50:08.755124", + "updatedAt": "2021-07-13 14:50:08.755124" + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/57c96d55-8a37-5998-927f-7bb663b69094" + }, + "relationships": { + "wishlist-items": { + "data": [ + { + "type": "wishlist-items", + "id": "092_24495842_offer5" + } + ] + } + } + }, + "included": [ + { + "type": "merchants", + "id": "MER000001", + "attributes": { + "merchantName": "Spryker", + "merchantUrl": "/en/merchant/spryker", + "contactPersonRole": "E-Commerce Manager", + "contactPersonTitle": "Mr", + "contactPersonFirstName": "Harald", + "contactPersonLastName": "Schmidt", + "contactPersonPhone": "+49 30 208498350", + "logoUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-logo.png", + "publicEmail": "info@spryker.com", + "publicPhone": "+49 30 234567891", + "description": "Spryker is the main merchant at the Demo Marketplace.", + "bannerUrl": "https://d2s0ynfc62ej12.cloudfront.net/merchant/spryker-banner.png", + "deliveryTime": "1-3 days", + "faxNumber": "+49 30 234567800", + "legalInformation": { + "terms": "

    General Terms

    (1) This privacy policy has been compiled to better serve those who are concerned with how their 'Personally identifiable information' (PII) is being used online. PII, as used in US privacy law and information security, is information that can be used on its own or with other information to identify, contact, or locate a single person, or to identify an individual in context. Please read our privacy policy carefully to get a clear understanding of how we collect, use, protect or otherwise handle your Personally Identifiable Information in accordance with our website.

    (2) We do not collect information from visitors of our site or other details to help you with your experience.

    Using your Information

    We may use the information we collect from you when you register, make a purchase, sign up for our newsletter, respond to a survey or marketing communication, surf the website, or use certain other site features in the following ways:

    To personalize user's experience and to let us deliver the type of content and product offerings in which you are most interested.

    Protecting visitor information

    Our website is scanned on a regular basis for security holes and known vulnerabilities in order to make your visit to our site as safe as possible. Your personal information is contained behind secured networks and is only accessible by a limited number of persons who have special access rights to such systems, and are required to keep the information confidential. In addition, all sensitive/credit information you supply is encrypted via Secure Socket Layer (SSL) technology.

    ", + "cancellationPolicy": "You have the right to withdraw from this contract within 14 days without giving any reason. The withdrawal period will expire after 14 days from the day on which you acquire, or a third party other than the carrier and indicated by you acquires, physical possession of the last good. You may use the attached model withdrawal form, but it's not obligatory. To meet the withdrawal deadline, it's sufficient for you to send your communication concerning your exercise of the right of withdrawal before the withdrawal period has expired.", + "imprint": "

    Spryker Systems GmbH

    Julie-Wolfthorn-Straße 1
    10115 Berlin
    DE

    Phone: +49 (30) 2084983 50
    Email: info@spryker.com

    Represented by
    Managing Directors: Alexander Graf, Boris Lokschin
    Register Court: Hamburg
    Register Number: HRB 134310

    ", + "dataPrivacy": "Spryker Systems GmbH values the privacy of your personal data." + }, + "categories": [] + }, + "links": { + "self": "https://glue.mysprykershop.com/merchants/MER000001" + } + }, + { + "type": "wishlist-items", + "id": "092_24495842_offer5", + "attributes": { + "productOfferReference": "offer5", + "merchantReference": "MER000001", + "id": "092_24495842_offer5", + "sku": "092_24495842", + "availability": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "10.0000000000" + }, + "prices": [ + { + "priceTypeName": "ORIGINAL", + "grossAmount": 17459, + "netAmount": 15713, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 7459, + "netAmount": 5713, + "currency": { + "code": "EUR", + "name": "Euro", + "symbol": "€" + } + }, + { + "priceTypeName": "DEFAULT", + "grossAmount": 10000, + "netAmount": 8070, + "currency": { + "code": "CHF", + "name": "Swiss Franc", + "symbol": "CHF" + } + } + ] + }, + "links": { + "self": "https://glue.mysprykershop.com/wishlists/57c96d55-8a37-5998-927f-7bb663b69094/wishlist-items/092_24495842_offer5" + }, + "relationships": { + "merchants": { + "data": [ + { + "type": "merchants", + "id": "MER000001" + } + ] + } + } + } + ] +} +``` + +
    + +| ATTRIBUTE | TYPE | DESCRIPTION | +| ---------- | ----- | --------------- | +| name | String | Wishlist name. | +| numberOfItems | Integer | Number of items in the wishlist. | +| createdAt | String | Creation date of the wishlist. | +| updatedAt | String | Date when the wishlist was updated. | + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-products-response-attributes.md %} + +For the attributes of the included resources, see + +[Adding items to wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlist-items.html#add-an-item-to-a-wishlist) + +[Retrieving concrete product availabilities](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) + +[Retrieving concrete product prices](/docs/pbc/all/price-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html) + +[Retrieving product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/glue-api-retrieve-product-offers.html) + +[Retrieving merchants](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-merchants.html#merchants-response-attributes) + +## Edit a wishlist + +To edit a wishlist, send the request: + +*** +`PATCH` **/wishlists** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ------ | ------ | ------ | -------------- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: edit a wishlist + +`PATCH https://glue.mysprykershop.com/wishlists` + +The following sample changes the name of a wishlist. + +```json +{ + "data": { + "type": "wishlists", + "id": "09264b7f-1894-58ed-81f4-d52d683e910a", + "attributes": { + "name": "birthday party" + } + } + } +``` + +| ATTRIBUTE | TYPE | REQUIRED | DESCRIPTION | +| ------ | ---- | ------- | ----------------------- | +| id | string | ✓ | Unique identifier of the wishlist to update the name of. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html) to get it. | +| name | string | ✓ | New name of the wishlist. | + +### Response + +| ATTRIBUTE | TYPE | DESCRIPTION | +| --------- | ---- | --------------- | +| name | String | Name of the wishlist. | +| numberOfItems | Integer | Number of items in the wishlist. | +| createdAt | String | Creation date of the wishlist. | +| updatedAt | String | Date when the wishlist was updated. | + +## Delete a wishlist + +To delete a wishlist, send the request: + +--- +`DELETE` **/wishlists/*{{wishlist_id}}*** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --------- | ------------------- | +| ***{{wishlist_id}}*** | Unique identifier of the wishlist to delete. [Create a wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html#create-a-wishlist) or [retrieve all wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/marketplace/manage-using-glue-api/glue-api-manage-marketplace-wishlists.html) to get it. | + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| ---------- | -------- | ----- | ----------------- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the customer to send requests to protected resources. Get it by [authenticating as a customer](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-customer.html). | + +Request sample: + +`DELETE https://glue.mysprykershop.com/wishlists/09264b7f-1894-58ed-81f4-d52d683e910a` + +### Response + +If the wishlist is deleted successfully, the endpoint returns the `204 No Content` status code. + +## Possible errors + +| CODE | REASON | +| --- | ------------------------- | +| 201 | Cannot find the wishlist. | +| 202 | A wishlist with the same name already exists. | +| 203 | Cannot create a wishlist. | +| 204 | Cannot update the wishlist. | +| 205 | Cannot remove the wishlist. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-shopping-lists-feature-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-shopping-lists-feature-overview.md similarity index 98% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-shopping-lists-feature-overview.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-shopping-lists-feature-overview.md index 7b4c5455f2a..d9345772a86 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-shopping-lists-feature-overview.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-shopping-lists-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Shopping Lists feature overview description: This document contains concept information for the Marketplace Shopping List feature. template: concept-topic-template +redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-shopping-lists-feature-overview.html last_updated: Nov 21, 2023 --- diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-wishlist-feature-overview.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-wishlist-feature-overview.md similarity index 94% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-wishlist-feature-overview.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-wishlist-feature-overview.md index 247a9679bec..9b573f1ea90 100644 --- a/docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-wishlist-feature-overview.md +++ b/docs/pbc/all/shopping-list-and-wishlist/202602.0/marketplace/marketplace-wishlist-feature-overview.md @@ -2,6 +2,8 @@ title: Marketplace Wishlist feature overview description: Learn about the Spryker Marketplace Wishlist Feature with this overview, helping your shoppers save time by having their favourite items in one place. template: concept-topic-template +redirect_from: + - /docs/pbc/all/shopping-list-and-wishlist/202512.0/marketplace/marketplace-wishlist-feature-overview.html last_updated: Nov 21, 2023 --- diff --git a/docs/pbc/all/shopping-list-and-wishlist/202512.0/shopping-list-and-wishlist.md b/docs/pbc/all/shopping-list-and-wishlist/202602.0/shopping-list-and-wishlist.md similarity index 100% rename from docs/pbc/all/shopping-list-and-wishlist/202512.0/shopping-list-and-wishlist.md rename to docs/pbc/all/shopping-list-and-wishlist/202602.0/shopping-list-and-wishlist.md diff --git a/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md b/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md deleted file mode 100644 index 5c423ea6e8a..00000000000 --- a/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Product Tax Sets Glue API -description: This guide will guide you through the process of installing and configuring the Product Tax Sets API feature in your project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v2/docs/product-tax-sets-api-feature-integration-201903 -originalArticleId: abdf52c7-aadd-4d9e-84fa-1f7bd1790ed5 -redirect_from: - - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-tax-sets-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md b/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md deleted file mode 100644 index 9fe65577fd9..00000000000 --- a/docs/pbc/all/tax-management/202404.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Tax Glue API -description: This guide walks you through the process of installing and configuring the Product Tax Sets API feature in your project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/tax-api-feature-integration-201907 -originalArticleId: 48705764-af9f-4d16-be2f-6ba995e10ee1 -redirect_from: - - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-tax-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202410.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md b/docs/pbc/all/tax-management/202410.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md deleted file mode 100644 index 5c423ea6e8a..00000000000 --- a/docs/pbc/all/tax-management/202410.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Product Tax Sets Glue API -description: This guide will guide you through the process of installing and configuring the Product Tax Sets API feature in your project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v2/docs/product-tax-sets-api-feature-integration-201903 -originalArticleId: abdf52c7-aadd-4d9e-84fa-1f7bd1790ed5 -redirect_from: - - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-tax-sets-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md b/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md deleted file mode 100644 index 5c423ea6e8a..00000000000 --- a/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Product Tax Sets Glue API -description: This guide will guide you through the process of installing and configuring the Product Tax Sets API feature in your project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v2/docs/product-tax-sets-api-feature-integration-201903 -originalArticleId: abdf52c7-aadd-4d9e-84fa-1f7bd1790ed5 -redirect_from: - - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-product-tax-sets-glue-api.html - - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-tax-sets-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md b/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md deleted file mode 100644 index 9fe65577fd9..00000000000 --- a/docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Install the Tax Glue API -description: This guide walks you through the process of installing and configuring the Product Tax Sets API feature in your project. -last_updated: Nov 22, 2019 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/v3/docs/tax-api-feature-integration-201907 -originalArticleId: 48705764-af9f-4d16-be2f-6ba995e10ee1 -redirect_from: - - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-tax-glue-api.html - - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-tax-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/domain-model-and-relationships/tax-domain-model-and-relationships.md b/docs/pbc/all/tax-management/202602.0/base-shop/domain-model-and-relationships/tax-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/domain-model-and-relationships/tax-domain-model-and-relationships.md rename to docs/pbc/all/tax-management/202602.0/base-shop/domain-model-and-relationships/tax-domain-model-and-relationships.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/extend-and-customize/tax-module-reference-information.md b/docs/pbc/all/tax-management/202602.0/base-shop/extend-and-customize/tax-module-reference-information.md similarity index 99% rename from docs/pbc/all/tax-management/202512.0/base-shop/extend-and-customize/tax-module-reference-information.md rename to docs/pbc/all/tax-management/202602.0/base-shop/extend-and-customize/tax-module-reference-information.md index 251b3d46309..e2e7f7e8ab4 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/extend-and-customize/tax-module-reference-information.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/extend-and-customize/tax-module-reference-information.md @@ -5,7 +5,7 @@ description: The Tax module is responsible for handling tax rates that can apply template: concept-topic-template redirect_from: - /docs/scos/dev/feature-walkthroughs/202200.0/tax-feature-walkthrough/reference-information-tax-module.html - - /docs/scos/dev/feature-walkthroughs/202311.0/tax-feature-walkthrough/reference-information-tax-module.html + - /docs/scos/dev/feature-walkthroughs/202311.0/tax-feature-walkthrough/reference-information-tax-module.html - /docs/scos/dev/feature-walkthroughs/202311.0/tax-feature-walkthrough/reference-information-tax-module.html - /docs/pbc/all/tax-management/202311.0/extend-and-customize/tax-module-reference-information.html - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/extend-and-customize/tax-module-reference-information.html diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.md b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.md new file mode 100644 index 00000000000..6db5fbaf1b1 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.md @@ -0,0 +1,39 @@ +--- +title: "Import file details: product_abstract.csv" +description: Learn how to import file details for abstract products using the product abstract csv file within you Spryker based project. +last_updated: July 22, 2022 +template: data-import-template +redirect_from: + - /docs/pbc/all/tax-management/202311.0/import-and-export-data/import-file-details-product-abstract.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/import-and-export-data/import-file-details-product-abstract.csv.html + - /docs/pbc/all/tax-management/202204.0/base-shop/import-and-export-data/import-file-details-product-abstract.csv.html +--- + +This document describes how to import taxes for abstract products via `product_abstract.csv`. To import full information for abstract products, see ["Import file details: product_abstract.csv"](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html). + +## Import file dependencies + +[tax.csv](/docs/pbc/all/tax-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html) + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | + +| abstract_sku | ✓ | String | | SKU identifier of the abstract product. | +| tax_set_name | | String | | Name of the tax set. | + +## Import the file + +```bash +data:import:product-abstract +``` + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_product_abstract.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/import-and-export-data/import-tax-sets-for-abstract-products.md/template_product_abstract.csv) | Import file template with headers only. | +| [product_abstract.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/import-and-export-data/import-tax-sets-for-abstract-products.md/product_abstract.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-option.csv.md b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-option.csv.md new file mode 100644 index 00000000000..3618dcea216 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-product-option.csv.md @@ -0,0 +1,41 @@ +--- +title: "Import file details: product_option.csv" +description: Learn how to import product options information using the product options csv file within you Spryker based project. +last_updated: Aug 2, 2022 +template: data-import-template +redirect_from: + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-product-option.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-product-option.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/import-and-export-data/import-file-details-product-option.csv.html + - /docs/pbc/all/tax-management/202204.0/base-shop/import-and-export-data/import-file-details-product-option.csv.html +--- + + +This document describes how to import taxes for product options via `product_option.csv`. To import full information for product options, see ["Import file details: product_option.csv"](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html). + + +## Dependencies + +- [product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) +- [tax.csv](/docs/pbc/all/tax-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html) + + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| option_group_id | ✓ | String |If doesn't exist then it will be automatically created. | Identifier of the Product Option Group. | +| tax_set_name | | String || Name of the tax set. | + +## Import file command + +```bash +data:import:product-option +``` + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/Template_product_option.csv) | Exemplary import file with headers only. | +| [product_option.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Special+Product+Types/202109.0/product_option.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md new file mode 100644 index 00000000000..cad935e8c4c --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-shipment.csv.md @@ -0,0 +1,38 @@ +--- +title: "Import file details: shipment.csv" +description: Learn how to import shipment information using the shipment csv file within you Spryker based project for the tax management feature. +last_updated: Aug 2, 2022 +template: data-import-template +redirect_from: + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/import-and-export-data/import-file-details-shipment.csv.html + - /docs/pbc/all/tax-management/202204.0/base-shop/import-and-export-data/import-file-details-shipment.csv.html +--- + +This document describes how to import taxes for shipment methods via `shipment.csv`. To import full information for shipment methods, see ["Import file details: shipment.csv"](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-shipment.csv.html). + +## Import file dependencies + +[tax.csv](/docs/pbc/all/tax-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html) + + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| shipment_method_key| ✓ | String | | Identifier of the shipment method. | +| tax_set_name | ✓ | String | | Name of the tax set. | + +## Import command + +```bash +data:import:shipment +``` + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/import-and-export-data/import-tax-sets-for-shipment-methods.md/Template_shipment.csv) | Import file template with headers only. | +| [shipment.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/import-and-export-data/import-tax-sets-for-shipment-methods.md/shipment.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.md b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.md new file mode 100644 index 00000000000..46376a431ee --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.md @@ -0,0 +1,43 @@ +--- +title: "Import file details: tax_sets.csv" +description: Learn how to import tax sets information using the tax sets csv file within you Spryker based project for the tax management feature. +last_updated: Jun 23, 2021 +template: data-import-template +originalLink: https://documentation.spryker.com/2021080/docs/file-details-taxcsv +originalArticleId: c9d15906-3b02-44fd-9bde-eb6883f5f320 +redirect_from: + - /docs/scos/dev/data-import/201907.0/data-import-categories/commerce-setup/file-details-tax.csv.html + - /docs/scos/dev/data-import/202311.0/data-import-categories/commerce-setup/file-details-tax.csv.html + - /docs/pbc/all/tax-management/202311.0/import-and-export-data/import-file-details-tax-sets.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-tax-sets.html + - /docs/pbc/all/tax-management/202311.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/import-and-export-data/import-file-details-tax-sets.csv.html + - /docs/pbc/all/tax-management/202311.0/spryker-tax/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html + - /docs/pbc/all/tax-management/202204.0/base-shop/import-and-export-data/import-file-details-tax-sets.csv.html +--- + +This document describes the `tax.csv` file to configure the [tax](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html) information in your Spryker Demo Shop. + + +## Import file parameters + +| PARAMETER | REQUIRED | TYPE |REQUIREMENTS OR COMMENTS | DESCRIPTION | +| --- | --- | --- | --- | --- | +| tax_set_name | ✓ | String | | Name of the tax set. | +| country_name | ✓ | String | | Country to which the tax refers to. | +| tax_rate_name | ✓ | String | | Name of the tax rate.
    Tax rate is the ratio (usually expressed as a percentage) at which a business or person is taxed. | +| tax_rate_percent | ✓ | Float | | Tax rate, expressed as a percentage. | + +## Import command + +```bash +data:import:tax +``` + +## Import template file and content example + +| FILE | DESCRIPTION | +| --- | --- | +| [template_tax.csv template](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/Template+tax.csv) | Tax .csv template file (empty content, contains headers only). | +| [tax.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Commerce+Setup/tax.csv) | Exemplary import file with the Demo Shop data. | diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/import-and-export-data/tax-management-data-import.md b/docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/tax-management-data-import.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/import-and-export-data/tax-management-data-import.md rename to docs/pbc/all/tax-management/202602.0/base-shop/import-and-export-data/tax-management-data-import.md diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md new file mode 100644 index 00000000000..25174a5bdb9 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.md @@ -0,0 +1,16 @@ +--- +title: Install the Product Tax Sets Glue API +description: This guide will guide you through the process of installing and configuring the Product Tax Sets API feature in your project. +last_updated: Nov 22, 2019 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/v2/docs/product-tax-sets-api-feature-integration-201903 +originalArticleId: abdf52c7-aadd-4d9e-84fa-1f7bd1790ed5 +redirect_from: + - /docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html + - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-product-tax-sets-glue-api.html + - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-product-tax-sets-glue-api.html + - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-product-tax-sets-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-product-tax-sets-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md new file mode 100644 index 00000000000..ad8594aa82c --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/install-the-tax-glue-api.md @@ -0,0 +1,16 @@ +--- +title: Install the Tax Glue API +description: This guide walks you through the process of installing and configuring the Product Tax Sets API feature in your project. +last_updated: Nov 22, 2019 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/v3/docs/tax-api-feature-integration-201907 +originalArticleId: 48705764-af9f-4d16-be2f-6ba995e10ee1 +redirect_from: + - /docs/pbc/all/tax-management/202507.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html + - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/integrate-the-tax-glue-api.html + - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/install-the-tax-glue-api.html + - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/install-the-tax-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-tax-glue-api.md %} diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.md b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.md new file mode 100644 index 00000000000..372592579bf --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.md @@ -0,0 +1,21 @@ +--- +title: Upgrade the ProductTaxSetsRestApi module +description: Learn to upgrade to a newer version of the product tax sets rest api module within your Spryker Tax management feature. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/producttaxsetsrestapi-migration-guide +originalArticleId: fca03d8b-8277-49a2-9893-20db2baad42e +redirect_from: + - /docs/scos/dev/module-migration-guides/201907.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/scos/dev/module-migration-guides/202001.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/scos/dev/module-migration-guides/202005.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/scos/dev/module-migration-guides/202009.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/scos/dev/module-migration-guides/202108.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/scos/dev/module-migration-guides/202311.0/glue-api/migration-guide-producttaxsetsrestapi.html + - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.html + - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.html + - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/upgrade-the-producttaxsetsrestapi-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-glue-api-modules/upgrade-the-producttaxsetsrestapi-module.md %} diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-tax-module.md b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-tax-module.md new file mode 100644 index 00000000000..c428d84a0e9 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/install-and-upgrade/upgrade-the-tax-module.md @@ -0,0 +1,40 @@ +--- +title: Upgrade the Tax module +description: Learn to upgrade to a newer version of the tax module within your Spryker Tax management feature. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-tax +originalArticleId: 05ed776e-6fbb-49ce-ba7f-4fc0b4404e20 +redirect_from: + - /2021080/docs/mg-tax + - /2021080/docs/en/mg-tax + - /docs/mg-tax + - /docs/en/mg-tax + - /v1/docs/mg-tax + - /v1/docs/en/mg-tax + - /v2/docs/mg-tax + - /v2/docs/en/mg-tax + - /v3/docs/mg-tax + - /v3/docs/en/mg-tax + - /v4/docs/mg-tax + - /v4/docs/en/mg-tax + - /v5/docs/mg-tax + - /v5/docs/en/mg-tax + - /v6/docs/mg-tax + - /v6/docs/en/mg-tax + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/202311.0/migration-guide-tax.html + - /docs/scos/dev/module-migration-guides/migration-guide-tax.html + - /docs/pbc/all/tax-management/202311.0/install-and-upgrade/upgrade-the-tax-module.html + - /docs/pbc/all/tax-management/202311.0/base-shop/install-and-upgrade/upgrade-the-tax-module.html + - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/install-and-upgrade/upgrade-the-tax-module.html + - /docs/pbc/all/tax-management/202204.0/base-shop/install-and-upgrade/upgrade-the-tax-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-tax-module.md %} diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-rates.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/create-tax-rates.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-rates.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/create-tax-rates.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-sets.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/create-tax-sets.md similarity index 96% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-sets.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/create-tax-sets.md index 9ee1bfd310f..14a89c349a9 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-sets.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/create-tax-sets.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-tax-sets originalArticleId: b8a16bed-2e8b-4a25-b092-d41004fe0119 redirect_from: + - /docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/create-tax-sets.html - /2021080/docs/managing-tax-sets - /2021080/docs/en/managing-tax-sets - /docs/managing-tax-sets @@ -24,7 +25,7 @@ This document describes how to create [tax sets](/docs/pbc/all/tax-management/{{ ## Prerequisites -- [Create tax rates](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-rates.html). +- [Create tax rates](/docs/pbc/all/tax-management/{{page.version}}/base-shop/manage-in-the-back-office/create-tax-rates.html). - Review the [reference information](#reference-information-create-tax-sets) before you start, or look up the necessary information as you go through the process. ## Create a tax set diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/edit-tax-rates.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/edit-tax-rates.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/edit-tax-rates.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/edit-tax-rates.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/edit-tax-sets.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/edit-tax-sets.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/edit-tax-sets.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/edit-tax-sets.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/manage-taxes-in-the-back-office.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/manage-taxes-in-the-back-office.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-in-the-back-office/manage-taxes-in-the-back-office.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-in-the-back-office/manage-taxes-in-the-back-office.md diff --git a/docs/pbc/all/tax-management/202507.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md similarity index 97% rename from docs/pbc/all/tax-management/202507.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md index 9adee37e2db..8d9a11c4efc 100644 --- a/docs/pbc/all/tax-management/202507.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.md @@ -4,6 +4,7 @@ description: Learn how to retrieve tax sets when retrieving abstract products us last_updated: Jun 21, 2021 template: glue-api-storefront-guide-template redirect_from: + - /docs/pbc/all/tax-management/202507.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.html - /docs/pbc/all/tax-management/202311.0/manage-via-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.html - /docs/pbc/all/tax-management/202311.0/base-shop/spryker-tax/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.html - /docs/pbc/all/tax-management/202204.0/base-shop/manage-using-glue-api/retrieve-tax-sets-when-retrieving-abstract-products.html diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md b/docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md similarity index 98% rename from docs/pbc/all/tax-management/202512.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md rename to docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md index 31eb3cdf82d..00f6cc20c31 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/manage-using-glue-api/retrieve-tax-sets.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-tax-sets originalArticleId: 9b8f60f0-3815-4d5b-94df-64deb0771117 redirect_from: + - /docs/pbc/all/tax-management/202512.0/base-shop/manage-using-glue-api/retrieve-tax-sets.html - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-tax-sets.html - /docs/pbc/all/tax-management/202311.0/manage-via-glue-api/retrieve-tax-sets.html - /docs/pbc/all/tax-management/202311.0/spryker-tax/base-shop/manage-using-glue-api/retrieve-tax-sets.html diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/tax-feature-overview.md b/docs/pbc/all/tax-management/202602.0/base-shop/tax-feature-overview.md similarity index 99% rename from docs/pbc/all/tax-management/202512.0/base-shop/tax-feature-overview.md rename to docs/pbc/all/tax-management/202602.0/base-shop/tax-feature-overview.md index 8943fd7cbae..78b1ffb139f 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/tax-feature-overview.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/tax-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/tax-feature-overview originalArticleId: 2ca980d2-d08b-4511-b26c-4cafa8624283 redirect_from: + - /docs/pbc/all/tax-management/202512.0/base-shop/tax-feature-overview.html - /2021080/docs/tax-feature-overview - /2021080/docs/en/tax-feature-overview - /docs/tax-feature-overview diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/apply-avalara-tax-codes.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/apply-avalara-tax-codes.md new file mode 100644 index 00000000000..a3b90467802 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/apply-avalara-tax-codes.md @@ -0,0 +1,24 @@ +--- +title: Apply Avalara tax codes +description: Learn how to apply Avalara tax codes to calculate taxes within your Spryker Cloud Commerce OS Project. +last_updated: Aug 3, 2023 +template: concept-topic-template +redirect_from: +- /docs/pbc/all/tax-management/202311.0/base-shop/avalara/apply-avalara-tax-codes.html +--- + +[Avalara tax codes](https://help.avalara.com/Avalara_AvaTax_Update/Avalara_tax_codes) are processed in the background to define taxes for order items, and are not displayed on the Storefront or in the Back Office. Taxes are calculated during the checkout, and, by default, the taxes are shown at the final checkout step. + +To automate tax calculations for your shop, you need to apply the tax codes by importing them into your shop. You can import Avalara tax codes for the following entities: + +| ENTITY | IMPORT FILE DETAILS | +|-|-| +| Abstract product | [File details: product_abstract.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/products-data-import/import-file-details-product-abstract.csv.html) | +| Product option | [File details: product_option.csv](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/import-and-export-data/product-options/import-file-details-product-option.csv.html) | +| Shipment | [File details: shipment.csv](/docs/pbc/all/tax-management/{{page.version}}/base-shop/import-and-export-data/import-file-details-shipment.csv.html) | + +{% info_block infoBox %} + +Because shipment and products fall under different taxability categories, the Avalara tax code for shipment is different from that of the abstract product or product option. For details about the codes and categories, see [Avalara tax code search](https://taxcode.avatax.avalara.com/). + +{% endinfo_block %} diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/avalara.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/avalara.md new file mode 100644 index 00000000000..5dffa0e8c16 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/avalara.md @@ -0,0 +1,24 @@ +--- +title: Avalara +description: Learn about Sprykers third party Avalara and how you can integrate Avlara to enhance your Spryker based projects. +last_updated: Jun 18, 2021 +template: concept-topic-template +redirect_from: + - /docs/scos/user/technology-partners/202212.0/taxes/avalara.html + - /docs/pbc/all/tax-management/202311.0/base-shop/avalara/avalara.html + - /docs/pbc/all/tax-management/202204.0/base-shop/third-party-integrations/avalara.html +--- + +![Avalara-hero](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/Avalara/avalara-hero.png) + +*Avalara AvaTax* is a cloud-based software that provides the latest sales and tax calculations to your shopping cart or invoicing system at the point of purchase, while accounting for the following: + +- Tax rates for each state, county, and city. +- Laws, rules, and jurisdiction boundaries. +- Special circumstances like tax holidays and product exemptions. + +When calculating taxes, Avalara takes the items' [warehouse addresses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/inventory-management-feature-overview.html#defining-a-warehouse-address) into account. Therefore, each order item you calculate a tax for, must have a warehouse assigned. To learn how warehouses are assigned to order items by default, see [Avalara: Warehouse assignment to order items](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/inventory-management-feature-overview.html#avalara-warehouse-assignment-to-order-items). + +## Next steps + +[Install Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/avalara/install-avalara.html) diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-product-options.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-product-options.md new file mode 100644 index 00000000000..b5765cbcd50 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-product-options.md @@ -0,0 +1,152 @@ +--- +title: Install Avalara + Product Options +description: Learn how to install Avalara + Product options within your Spryker Cloud Commerce OS Project. +last_updated: Feb 27, 2026 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/avalara-tax-product-options-feature-integration +originalArticleId: baa66b26-825e-404a-a8e4-1b48cb00cd67 +redirect_from: + - /docs/scos/user/technology-partners/202212.0/taxes/avalara-tax-product-options-feature-integration.html + - /docs/scos/dev/technology-partner-guides/202212.0/taxes/avalara/integrating-avalara-tax-product-options.html + - /docs/pbc/all/tax-management/202311.0/base-shop/avalara/install-avalara-product-options.html + - /docs/pbc/all/tax-management/202204.0/base-shop/third-party-integrations/integrate-avalara-tax-product-options.html +--- + +To enable the Avalara + Product Options component of the Avalara partner integration, use the [spryker-eco/avalara-tax-product-option](https://github.com/spryker-eco/avalara-tax-product-option) module. + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the necessary features: + +|NAME | VERSION | INSTALLATION GUIDE | +|--- |----------------------| --- | +| Product Options | {{page.release_tag}} | | +| Avalara Tax | 0.2.0 | [Install Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/avalara/install-avalara.html) | + +### Install the required modules using Composer + +Install the required modules using Composer: + +```bash +composer require spryker-eco/avalara-tax-product-option:"^0.1.0" --update-with-dependencies +``` + + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +|MODULE | EXPECTED DIRECTORY | +| --- | --- | +|AvalaraTaxProductOption | vendor/spryker-eco/avalara-tax-product-option| + +{% endinfo_block %} + +### Set up database schema + +Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +|DATABASE ENTITY| TYPE| EVENT | +|--- |---| ---| +|spy_product_option_value.avalara_tax_code |column | created | + +{% endinfo_block %} + +### Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AvalaraProductOptionCreateTransactionRequestExpanderPlugin | Expands `AvalaraCreateTransactionRequestTransfer` with product option data. | | SprykerEco\Zed\AvalaraTaxProductOption\Communication\Plugin\AvalaraTax | +| AvalaraProductOptionCreateTransactionRequestAfterPlugin | Calculates taxes for `ProductOptions` based on `AvalaraCreateTransactionResponseTransfer`. | | SprykerEco\Zed\AvalaraTaxProductOption\Communication\Plugin\AvalaraTax | + +
    +src/Pyz/Zed/AvalaraTax/AvalaraTaxDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +1. Add an item with a product option to a cart. +2. Proceed to checkout. +3. On the summary page, you should see the calculated tax amount for your order, including taxes for product options. + +{% endinfo_block %} + +2. Update the following data import files: + +|FILE NAME | COLUMN TO ADD | LOCATION | +|--- | --- | --- | +|product_option.csv | avalara_tax_code | data/import/common/common/product_option.csv | + +3. To handle the new field, adjust `ProductOption` data importer using the following example: + +**data/import/common/common/product\_option.csv** + +```csv +shipment_method_key,name,carrier,taxSetName,avalaraTaxCode +spryker_dummy_shipment-standard,Standard,Spryker Dummy Shipment,Shipment Taxes,PC040111 +``` + +### 4) Import data + +```bash +console data:import product-option +``` + +{% info_block warningBox "Verification" %} + +Make sure that the data has been imported to `spy_product_option_value`. + +{% endinfo_block %} + +## Next steps + +[Install Avalara + Shipment](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/avalara/install-avalara-shipment.html) diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-shipment.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-shipment.md new file mode 100644 index 00000000000..eeed79f0343 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/avalara/install-avalara-shipment.md @@ -0,0 +1,155 @@ +--- +title: Install Avalara + Shipment +description: Learn how to install Avalara + shipment within your Spryker Cloud Commerce OS Project. +last_updated: Feb 27, 2026 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/avalara-tax-shipment-feature-integration +originalArticleId: a93d12c8-c40a-4cbb-b866-755ad29f2852 +redirect_from: + - /docs/scos/user/technology-partners/202212.0/taxes/avalara-tax-shipment-feature-integration.html + - /docs/scos/dev/technology-partner-guides/202212.0/taxes/avalara/integrating-avalara-tax-shipment.html + - /docs/pbc/all/tax-management/third-party-integrations/integrate-avalara-tax-shipment.html + - /docs/pbc/all/tax-management/202311.0/base-shop/avalara/install-avalara-shipment.html + - /docs/pbc/all/tax-management/202204.0/base-shop/third-party-integrations/integrate-avalara-tax-shipment.html +related: + - title: Tax feature overview + link: docs/pbc/all/tax-management/page.version/base-shop/tax-feature-overview.html +--- + +To enable the Avalara + Shipment component of the Avalara partner integration, use the [spryker-eco/avalara-tax-shipment](https://github.com/spryker-eco/avalara-tax-shipment) module. + +## Install feature core + +Follow the steps below to install the feature core. + +### Prerequisites + +Install the necessary features: + +| NAME | VERSION | INSTALLATION GUIDE | +| --- |----------------------| --- | +| Shipment | {{page.release_tag}} | [Install the Shipment feature](/docs/pbc/all/carrier-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-shipment-feature.html) | +| Avalara Tax | 0.2.0 | [Avalara Tax integration](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/avalara/install-avalara.html) | + +### Install the required modules + + +Install the required modules using Composer: + +```bash +composer require spryker-eco/avalara-tax-shipment:"^0.1.0" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|---|---| +| AvalaraTaxShipment |vendor/spryker-eco/avalara-tax-shipment| + +{% endinfo_block %} + +### Set up database schema + +Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +|---|---|---| +| spy_shipment_method.avalara_tax_code | column | created | + +{% endinfo_block %} + +### Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AvalaraShipmentCreateTransactionRequestExpanderPlugin | Expands `AvalaraCreateTransactionRequestTransfer` with shipments. | | SprykerEco\Zed\AvalaraTaxShipment\Communication\Plugin\AvalaraTax | +|AvalaraShipmentCreateTransactionRequestAfterPlugin | Calculates taxes for shipment methods based on `AvalaraCreateTransactionResponseTransfer`. | | SprykerEco\Zed\AvalaraTaxShipment\Communication\Plugin\AvalaraTax | + +**src/Pyz/Zed/AvalaraTax/AvalaraTaxDependencyProvider.php** + +```php + [..., 'US'], + ... +]; +``` + +2. To configure Avalara credentials, add the following template to configuration: + +**config/Shared/config\_default.php** + +```php + >> Avalara Tax + $config[AvalaraTaxConstants::AVALARA_TAX_APPLICATION_NAME] = 'YOUR_APPLICATION_NAME'; + $config[AvalaraTaxConstants::AVALARA_TAX_APPLICATION_VERSION] = 'YOUR_APPLICATION_VERSION'; + $config[AvalaraTaxConstants::AVALARA_TAX_MACHINE_NAME] = 'YOUR_MACHINE_NAME'; + $config[AvalaraTaxConstants::AVALARA_TAX_ENVIRONMENT_NAME] = 'AVALARA_ENVIRONMENT_NAME'; + $config[AvalaraTaxConstants::AVALARA_TAX_ACCOUNT_ID] = 'YOUR_ACCAUNT_ID'; + $config[AvalaraTaxConstants::AVALARA_TAX_LICENSE_KEY] = 'YOUR_LICENSE_KEY'; + $config[AvalaraTaxConstants::AVALARA_TAX_COMPANY_CODE] = 'YOUR_COMPANY_CODE'; +``` + +2. Based on the data from your Avalara account, replace the placeholders in the template as described below. + +|PLACEHOLDER | DESCRIPTION | +|--- | --- | +| YOUR_APPLICATION_NAME | Application name. | +| YOUR_APPLICATION_VERSION | Application version. | +| YOUR_MACHINE_NAME | Name of the machine specific to your project. | +| AVALARA_ENVIRONMENT_NAME | Environment name. Acceptable values are `sandbox`, `production` or the full URL of your AvaTax instance. | +| YOUR_ACCAUNT_ID | Client identifier. | +| YOUR_LICENSE_KEY | Client secret. | +| YOUR_COMPANY_CODE | Company code.| + +## 3) Add translations + +1. Append glossary according to your configuration: + +**data/import/glossary.csv** + +```csv +countries.iso.US,United States of America,en_US +countries.iso.US,vereinigte Staaten von Amerika,de_DE +``` + +2. Import data: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure that, in the database, the configured data has been added to the `spy_glossary` table. + +{% endinfo_block %} + +## 4) Set up database schema and transfer objects + +Apply database changes, generate entity and transfer changes: + +```bash +console propel:install +console transfer:generate +``` + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied by checking your database: + +| DATABASE ENTITY | TYPE | EVENT | +| --- | --- | --- | +| spy_tax_avalara_api_log | table | created | +| spy_tax_avalara_sales_order | table | created | +| spy_tax_avalara_sales_order_item | table | created | +| spy_tax_avalara_sales_detail | table | created | +| spy_product_abstract.avalara_tax_code | column | created | +| spy_product.avalara_tax_code | column | created | + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that the following changes have been applied in transfer objects: + +| TRANSFER | TYPE | EVENT | PATH | +| --- | --- | --- | --- | +| AvalaraApiLogTransfer | class | created | src/Generated/Shared/Transfer/AvalaraApiLogTransfer | +| AvalaraAddressTransfer | class | created | src/Generated/Shared/Transfer/AvalaraAddressTransfer | +| AvalaraLineItemTransfer | class | created | src/Generated/Shared/Transfer/AvalaraLineItemTransfer | +| AvalaraCreateTransactionTransfer | class | created | src/Generated/Shared/Transfer/AvalaraCreateTransactionTransfer | +| AvalaraCreateTransactionRequestTransfer | class | created | src/Generated/Shared/Transfer/AvalaraCreateTransactionRequestTransfer | +| AvalaraTransactionLineTransfer | class | created | src/Generated/Shared/Transfer/AvalaraTransactionLineTransfer | +| AvalaraTransactionTransfer | class | created | src/Generated/Shared/Transfer/AvalaraTransactionTransfer | +| AvalaraCreateTransactionResponseTransfer | class | created | src/Generated/Shared/Transfer/AvalaraCreateTransactionResponseTransfer | +| AvalaraAddressValidationInfoTransfer | class | created | src/Generated/Shared/Transfer/AvalaraAddressValidationInfoTransfer | +| AvalaraResolveAddressRequestTransfer | class | created | src/Generated/Shared/Transfer/AvalaraResolveAddressRequestTransfer | +| AvalaraResolveAddressResponseTransfer | class | created | src/Generated/Shared/Transfer/AvalaraResolveAddressResponseTransfer | +| QuoteTransfer.avalaraCreateTransactionResponse | property | created | src/Generated/Shared/Transfer/QuoteTransfer | +| ProductConcreteTransfer.avalaraTaxCode | property | created | src/Generated/Shared/Transfer/ProductConcreteTransfer | +| ProductAbstractTransfer.avalaraTaxCode | property | created | src/Generated/Shared/Transfer/ProductAbstractTransfer | +| ItemTransfer.avalaraTaxCode | property | created | src/Generated/Shared/Transfer/ItemTransfer | +| ItemTransfer.warehouse | property | created | src/Generated/Shared/Transfer/ItemTransfer | + +{% endinfo_block %} + +## 5) Set up behavior + +1. Activate the following plugins: + +| PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE | +| --- | --- | --- | --- | +| AvalaraItemTaxRateCalculatorPlugin | Calculates taxes based on the response data received from the Avalara Tax API.
    Use it instead of `ProductItemTaxRateCalculatorPlugin`, `ProductOptionTaxRateCalculatorPlugin`, and `ShipmentTaxRateCalculatorPlugin`. | None | SprykerEco\Zed\AvalaraTax\Communication\Plugin\Calculation | +| AvalaraTaxCodeItemExpanderPlugin | Expands `CartChangeTransfer.items` with an Avalara tax code. | None | SprykerEco\Zed\AvalaraTax\Communication\Plugin\Cart | +| AvalaraTaxCodeProductConcreteBeforeCreatePlugin | Expands product concrete with an Avalara tax code. | None | SprykerEco\Zed\AvalaraTax\Communication\Plugin\Product | +| AvalaraTaxCheckoutPreConditionPlugin | Checks if a request to Avalara was successful. | None | SprykerEco\Zed\AvalaraTax\Communication\Plugin\Checkout | +| ItemWarehouseCartOperationPostSavePlugin | Expands `QuoteTransfer.items` with a warehouse property. | None | SprykerEco\Zed\AvalaraTax\Communication\Plugin\Cart | +| AvalaraReadCheckoutDataValidatorPlugin | Validates the shipping address data. | None |SprykerEco\Zed\AvalaraTax\Communication\Plugin\CheckoutRestApi | + +
    +src/Pyz/Zed/Calculation/CalculationDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +1. Add items to a cart and proceed to checkout. +2. On the summary page, make sure the taxes are calculated and displayed for your order. + +{% endinfo_block %} + + + +
    +src/Pyz/Zed/Cart/CartDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +1. Add an address to a warehouse. +2. Increase the product stock of an item. +3. Add the item to cart. +4. Proceed to the summary page of checkout. +5. In the `spy_tax_avalara_api_log` table, make sure that the `ShipFrom` property is specified in the request data. + +{% endinfo_block %} + +
    +src/Pyz/Zed/Product/ProductDependencyProvider.php + +```php + + +{% info_block warningBox "Verification" %} + +1. Create an abstract product with the Avalara tax code specified. +2. Create a variant of this product. +3. Check that the product variant inherits the Avalara tax code. + +{% endinfo_block %} + +**src/Pyz/Zed/Checkout/CheckoutDependencyProvider.php** + +```php + **Standard Reports**. +2. Click **Report Output**. +3. Next to the report you want to view the taxes for, click **Action**>**View report**. +![vertex-report-output](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/vertex/configure-vertex/vertex-report-output.png) +4. On the invoice page, you can verify the invoice number that corresponds to the Spryker order number and the applicable country tax calculated by Vertex. +![invoice-in-vertex](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/vertex/configure-vertex/invoice-in-vertex.png) + + +## Verify Vertex Validator tax ID validation + +Validate a tax ID by sending a request to `/tax-id-validate` using Glue API. + +### Request + +```json +{ + "data": { + "type": "tax-id-validate", + "attributes": { + "countryCode": "**", + "taxId": "*****" + } + } +} +``` + +One of the following should be returned: + +Successful response: HTTP code: 200. + +```json +{ + "data": [], + "links": [] +} +``` + +Unsuccessful response: HTTP code: 400, 422. + +```json +{ + "errors": [ + { + "status": 400, + "detail": "Wrong format of the tax number." + } + ] +} +``` + +## Retain Vertex configuration after a destructive deployment + +{% info_block errorBox "" %} +[Destructive deployment](https://spryker.com/docs/dg/dev/acp/retaining-acp-apps-when-running-destructive-deployments.html) permanently deletes the configuration of Vertex. + +To run a destructive deployment, follow the steps: +1. Disconnect Vertex. +2. Run a destructive deployment. +3. Reconnect Vertex. + +{% endinfo_block %} + +## Next steps + +- [Troubleshooting Vertex](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/vertex/troubleshooting-vertex.html) diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/disconnect-vertex.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/disconnect-vertex.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/disconnect-vertex.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/disconnect-vertex.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md similarity index 91% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md index 7ee556708db..4db3193a0f5 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.md @@ -7,6 +7,8 @@ related: - title: Vertex link: docs/pbc/all/tax-management/page.version/base-shop/third-party-integrations/vertex/vertex.html redirect_from: + - /docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.html + - /docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.html - /docs/pbc/all/tax-management/202311.0/vertex/install-vertex.html - /docs/pbc/all/tax-management/202311.0/base-shop/vertex/install-vertex.html - /docs/pbc/all/tax-management/202400.0/third-party-integrations/vertex/install-vertex.html diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md similarity index 99% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md index f6de9e34c0b..4665d77ae39 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-acp-connector-module-for-tax-calculation.md @@ -177,7 +177,7 @@ use Spryker\Zed\Tax\Communication\Plugin\Calculator\TaxRateAverageAggregatorPlug new TaxAmountAfterCancellationCalculatorPlugin(), ]; } - + //... ``` @@ -397,9 +397,9 @@ use Spryker\Zed\TaxApp\Communication\Plugin\Oms\OrderRefundedEventListenerPlugin return $container; } - + //... - + # This configuration is necessary for Refund functionality /** * @return array<\Spryker\Zed\OmsExtension\Dependency\Plugin\OmsEventTriggeredListenerPlugin> @@ -410,7 +410,7 @@ use Spryker\Zed\TaxApp\Communication\Plugin\Oms\OrderRefundedEventListenerPlugin new OrderRefundedEventListenerPlugin(), ]; } - + //... ``` diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md similarity index 99% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md index f4263073ae0..02b11ccbc33 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-the-vertex-app.md @@ -258,7 +258,7 @@ class TaxAppDependencyProvider extends SprykerTaxAppDependencyProvider */ protected function getCalculableObjectTaxAppExpanderPlugins(): array { - return [ + return [ # This plugin stack is responsible for expansion of CalculableObjectTransfer based on present fields. Add your custom implemented expander plugins here following the example in `spryker/tax-app-vertex` module. // The following plugins are for Marketplace only. diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-vertex-validator.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-vertex-validator.md new file mode 100644 index 00000000000..26bb5908494 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/install-vertex/integrate-vertex-validator.md @@ -0,0 +1,107 @@ +--- +title: Integrate Vertex Validator +description: Find out how you can integrate the Vertex Validator into your Spryker shop +last_updated: Jun 4, 2025 +template: howto-guide-template +redirect_from: + - /docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/vertex/install-vertex/integrate-taxamo.html +--- + +To integrate Vertex Validator, take the following steps. + +## 1. Install required modules + +Update [spryker/tax-app](https://github.com/spryker/tax-app) to `^0.4.2` and install the [spryker/tax-app-rest-api](https://github.com/spryker/tax-app-rest-api) module: + +```bash +composer require spryker/tax-app:"^0.4.2" spryker/tax-app-rest-api:"^0.2.0" --update-with-dependencies +``` + +## 2. Add glossary keys + +1. Add the following keys to your existing glossary file: + +
    +Click to view all glossary keys + +```csv +key,translation,locale +tax_app.vertex.tax-number-country-blocked,Dieses Land ist in den Einstellungen blockiert.,de_DE +tax_app.vertex.tax-number-validation-not-available,Die Steuernummer konnte nicht durch den Dienst überprüft werden.,de_DE +tax_app.vertex.tax-number-ignored,"Die Steuernummer wurde ignoriert, da Nummern für diese Region, dieses Land oder diesen Verkäufer blockiert wurden.",de_DE +tax_app.vertex.tax-number-syntax-valid,Das Format der Steuernummer ist korrekt. Es wurden jedoch keine weiteren Prüfungen durchgeführt.,de_DE +tax_app.vertex.tax-number-syntax-invalid,Das Format der Steuernummer ist ungültig.,de_DE +tax_app.vertex.tax-number-considered-valid-in-domestic-country,Die Steuernummer ist im Heimatland des Verkäufers gültig.,de_DE +tax_app.vertex.tax-number-valid-according-to-external-service,Die Steuernummer wurde erfolgreich bei der Steuerbehörde validiert.,de_DE +tax_app.vertex.tax-number-invalid-according-to-external-service,Die Steuernummer wurde bei der Steuerbehörde überprüft und ist ungültig.,de_DE +tax_app.vertex.tax-number-validation-requested-additional-interactions,"Die Steuerbehörde verlangt zusätzliche Informationen (z. B. CAPTCHA), um die Nummer zu validieren.",de_DE +tax_app.vertex.tax-number-service-temporarily-unavailable,Der Validierungsdienst ist vorübergehend nicht erreichbar.,de_DE +tax_app.vertex.tax-number-syntax-considered-valid-but-not-verified,"Das Format der Steuernummer ist korrekt, aber der Status konnte nicht bestätigt werden, da der externe Dienst nicht reagierte.",de_DE +tax_app.vertex.tax-number-country-blocked,This county is blocked in the settings.,en_US +tax_app.vertex.tax-number-validation-not-available,The service was not able to validate this number.,en_US +tax_app.vertex.tax-number-ignored,"The number is ignored because the settings have been changed to block numbers for this region, country or seller.",en_US +tax_app.vertex.tax-number-syntax-valid,"The syntax of the ID is valid. However, no further validations were done. In cases where a checksum is required, like for India, the ID is considered valid if the syntax is valid and the checksum is not configured.",en_US +tax_app.vertex.tax-number-syntax-invalid,The syntax of the ID is invalid.,en_US +tax_app.vertex.tax-number-considered-valid-in-domestic-country,The Tax ID is valid in the domestic country of the supplier.,en_US +tax_app.vertex.tax-number-valid-according-to-external-service,The Tax ID has been validated against the Tax Authority's database of Tax IDs and is valid.,en_US +tax_app.vertex.tax-number-invalid-according-to-external-service,The Tax ID has been validated against the Tax Authority's database of Tax IDs and is invalid.,en_US +tax_app.vertex.tax-number-validation-requested-additional-interactions,"The Tax Authority has requested additional parameters. For example, a country might require CAPTCHA validation and needs more information before they can validate the ID.",en_US +tax_app.vertex.tax-number-service-temporarily-unavailable,Could not connect to validation service due to temporary unavailability of the service.,en_US +tax_app.vertex.tax-number-syntax-considered-valid-but-not-verified,The Tax ID syntax is valid but the ID's status could not be verified by the external service. This occurs when the on-error settings is set to syntax-check and external service does not respond.,en_US +tax_app.vertex.invalid-request-data,Invalid request data.,en_US +tax_app.vertex.invalid-request-data,Ungültige Anfragedaten.,de_DE +tax_app.vertex.tax-app-disabled,Tax service is disabled.,en_US +tax_app.vertex.tax-app-disabled,Die Steueranwendung ist deaktiviert.,de_DE +tax_app.vertex.tax-validator-unavailable,Tax Validator API is unavailable.,en_US +tax_app.vertex.tax-validator-unavailable,Die Steuerprüfungs-API ist nicht verfügbar.,de_DE +tax_app.vertex.validator-api-inactive,Unable to connect to Vertex Validator API: vertex app or tax id validation is inactive.,en_US +tax_app.vertex.validator-api-inactive,Verbindung zur Vertex Validator API fehlgeschlagen: Die Vertex-Anwendung oder der Steuernummern-Prüfdienst ist nicht aktiv.,de_DE +tax_app.vertex.request-failed,Request to Vertex API failed.,en_US +tax_app.vertex.request-failed,Anfrage an die Vertex-API fehlgeschlagen.,de_DE +tax_app.vertex.invalid-credentials,Invalid credentials.,en_US +tax_app.vertex.invalid-credentials,Ungültige Anmeldeinformationen.,de_DE +``` + +
    + +2. Import the updated glossary: + +```bash +console data:import:glossary +``` + +## 3. Configure Glue Application + +To integrate the Vertex Validator API, configure `GlueApplicationDependencyProvider` to enable Tax ID validator: + +```php + + */ + protected function getResourceRoutePlugins(): array + { + return [ + //.... + new TaxValidateIdResourceRoutePlugin(), + ]; + } + +} +``` + +## 4. Use translations + +To use translations, send requests with the `Accept-Language` header. For example, to use German translations, include the `Accept-Language: de` header. + +## Next step + +[Connect Vertex](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/vertex/connect-vertex.html) diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/project-configuration-for-vertex.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/project-configuration-for-vertex.md similarity index 100% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/project-configuration-for-vertex.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/project-configuration-for-vertex.md diff --git a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md similarity index 92% rename from docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md rename to docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md index a7d67c31827..ab809cca58d 100644 --- a/docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.md @@ -2,6 +2,8 @@ title: Troubleshooting Vertex description: Some hints and tips on troubleshoot issues related to the Vertex app within your Spryker project. template: troubleshooting-guide-template +redirect_from: + - /docs/pbc/all/tax-management/202512.0/base-shop/third-party-integrations/vertex/troubleshooting-vertex.html last_updated: Dec 4, 2023 --- This document contains common issues related to the Vertex app. diff --git a/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/vertex.md b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/vertex.md new file mode 100644 index 00000000000..05427f0cfb8 --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/base-shop/third-party-integrations/vertex/vertex.md @@ -0,0 +1,92 @@ +--- +title: Vertex +description: Spryker's third party Vertex technology partner, and how tax calculations can enhance your Spryker based project. +last_updated: May 17, 2024 +template: concept-topic-template +related: + - title: Install Vertex + link: docs/pbc/all/tax-management/page.version/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.html +redirect_from: + - /docs/pbc/all/tax-management/202311.0/vertex/vertex.html + - /docs/pbc/all/tax-management/202311.0/base-shop/vertex/vertex.html + - /docs/pbc/all/tax-management/202400.0/base-shop/third-party-integrations/vertex/vertex.html + - /docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/vertex/vertex-faq.html +--- + +![vertex-hero](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/vertex/vertex.md/vertex-hero.png) + +The Spryker-Vertex integration is part of the tax Category of Spryker's App Composition Platform. This integration is built with support for both the default Storefront as well as Spryker's GLUE APIs. For more information about Vertex, see the [Vertex website](https://www.vertexinc.com/). + +The Spryker Vertex app, based on the *Vertex O Series*, performs automatic, near-real-time tax calculations at the point of purchase while accounting for the following: + +- Tax rates in each state, county, and city. +- Laws, rules, and jurisdiction boundaries. +- Special circumstances like tax holidays and product exemptions. + +For more information about how Vertex calculates taxes, see the [Vertex O Series website](https://www.vertexinc.com/solutions/products/vertex-indirect-tax-o-series). + +The Spryker Vertex app offers the following features that are worth considering when comparing it to the default Spryker [Tax Management capability](/docs/pbc/all/tax-management/{{page.version}}/tax-management.html): + +- *Configure Vertex in Spryker*: Add your Vertex configurations, including your company code, in the App Composition catalog to connect your Spryker project to Vertex. +- *Tax determination and calculation*: View tax estimates during checkout and calculated taxes before generating an invoice. This feature works across all regions, including countries where taxes are included in the price. +- *Discounts Support*: The Vertex App uses both the discount and the amount paid by the customer, sending this information to Vertex for tax calculation and estimation. +- *Manage tax exemptions*: Configure your project to exclude tax-exempt customers using the Vertex App. +- *View invoice reports in Vertex dashboard*: The Vertex App allows customers to send invoice reports for paid orders from Spryker to Vertex. Customers can opt out of sending invoices to Spryker if they choose. +- *Support for refunds*: When order items are returned, refunded, or a paid order is canceled, the Vertex App updates the tax report in Vertex for accurate reporting and compliance. +- *Failover Solution*: Store owners and marketplace operators can manage refunds and ensure accurate tax reporting even during downtime. +- *Supported Product Types*: The integration currently supports tax calculation only for items/products created using Spryker Product capabilities. +- *Application of custom tax rules to products*: You can implement custom tax rules to accommodate unique product categorizations or specific tax regulations that apply to your business. The Vertex Integration provides a means for taxes to be calculated using these rules. + +
    + +
    + +## Supported Use Cases and Business Models + +1. Tax Calculation in Regions where taxes are excluded from prices. For example, in the US and Canada. +2. Tax Calculation in Regions where taxes are included in the price. For example, in the EU. +3. Marketplace: Every line item sent from Spryker to Vertex includes the customer's shipping address and the merchant's warehouse address, which Vertex uses for tax calculation. +4. Support for Delivery Terms: Vertex allows customers to set delivery terms within their dashboard, which are used in tax calculation. This is especially important for cross-border transactions when the seller wants to use the customer's location to determine the applicable tax rate. +5. Inclusion of Shipping Tax in the Total Tax Calculated: Spryker sends the selected shipping method to Vertex. The `delivery-method-key` set in Spryker is used for this purpose. Projects must ensure this is mapped correctly inside the Vertex App by following the steps below: + - In Vertex you create a Taxability Driver with the same value from Spryker + - In Vertex you create a Taxability Mapping for the driver to one of Vertex's defined Delivery Charges + + +The following diagram demonstrates the flow of the Vertex app integration: + +![vertex-app-flow](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/tax-management/vertex/vertex.md/vertex-app-flow.png) + + + +## How Vertex calculates taxes for different countries + +The Vertex app calculates taxes based on the tax rules and rates of the country where the product is shipped. The Vertex app uses the shipping address to determine the tax rate. + +In some cases, the Vertex app can't calculate taxes and returns a 0 tax rate. For example, when a seller is located in EU, and the buyer is located in the US. + +So, make sure your project has a logic for such cases. For example, when a buyer selects a shipping address different from the project's default tax region or country, a warehouse address in the respective region needs to be used. + + +## Product Class Code + +The Product Class Code is used to represent groups or categories of products or services with identical taxability. By default, Spryker Product SKU is sent as `LineItems[].product.value` and `LineItems.lineItemId`. The Vertex App doesn't create any Vertex Tax Categories. + +### Item Flexible Fields + +Item Flexible Fields are optional fields provided by a project. They are needed for the customization of tax calculation. Flexible Fields are supported by the Vertex app, and whether or not to use them is a business decision. + +## Freight tax for shipment + +Spryker doesn't support freight shipment in terms of big packaging support; but calculation of taxes for shipping prices is supported. + +## Sending invoices to Vertex through OMS + +The Spryker OMS transition command is used as an execution point to send a full order with all existing and custom fields provided by the project. The results will be visible in the Invoice Tax Details report. + + + +## Next steps + +[Install Vertex](/docs/pbc/all/tax-management/{{page.version}}/base-shop/third-party-integrations/vertex/install-vertex/install-vertex.html) diff --git a/docs/pbc/all/tax-management/202602.0/marketplace/install-the-tax-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/tax-management/202602.0/marketplace/install-the-tax-merchant-portal-marketplace-product-feature.md new file mode 100644 index 00000000000..f5d4360c67c --- /dev/null +++ b/docs/pbc/all/tax-management/202602.0/marketplace/install-the-tax-merchant-portal-marketplace-product-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Tax + Merchant Portal - Marketplace Product feature +last_updated: Jan 05, 2021 +description: This integration guide provides steps on how to integrate the Merchant Portal - Marketplace Product + Tax feature into a Spryker project. +template: feature-integration-guide-template +related: + - title: Marketplace Product feature walkthrough + link: docs/pbc/all/product-information-management/page.version/marketplace/marketplace-product-feature-overview.html + - /docs/pbc/all/tax-management/202311.0/spryker-tax/marketplace/install-the-tax-merchant-portal-marketplace-product-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-tax-feature.md %} diff --git a/docs/pbc/all/tax-management/202512.0/tax-management.md b/docs/pbc/all/tax-management/202602.0/tax-management.md similarity index 95% rename from docs/pbc/all/tax-management/202512.0/tax-management.md rename to docs/pbc/all/tax-management/202602.0/tax-management.md index 339ba8929c9..d65ab6ba4d1 100644 --- a/docs/pbc/all/tax-management/202512.0/tax-management.md +++ b/docs/pbc/all/tax-management/202602.0/tax-management.md @@ -2,6 +2,8 @@ title: Tax Management description: Tax Management PBC lets you define tax rates for different stores and products template: concept-topic-template +redirect_from: + - /docs/pbc/all/tax-management/202512.0/tax-management.html last_updated: Dec 5, 2023 --- diff --git a/docs/pbc/all/user-management/202410.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md b/docs/pbc/all/user-management/202410.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md deleted file mode 100644 index 2fffd624700..00000000000 --- a/docs/pbc/all/user-management/202410.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Install the Agent Assist + Cart feature -last_updated: Jul 6, 2021 -template: feature-integration-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/agent-assist-cart-feature-integration -originalArticleId: 98b85b04-aa2a-4eca-b968-413c6fb65726 -redirect_from: - - /2021080/docs/agent-assist-cart-feature-integration - - /2021080/docs/en/agent-assist-cart-feature-integration - - /docs/agent-assist-cart-feature-integration - - /docs/en/agent-assist-cart-feature-integration - - /docs/scos/dev/feature-integration-guides/202311.0/agent-assist-cart-feature-integration.html - - /docs/pbc/all/user-management/202204.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.html -related: - - title: Install the Agent Assist Glue API - link: docs/pbc/all/user-management/page.version/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-agent-assist-cart-feature.md %} diff --git a/docs/pbc/all/user-management/202410.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md b/docs/pbc/all/user-management/202410.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md deleted file mode 100644 index 0489ca6f78a..00000000000 --- a/docs/pbc/all/user-management/202410.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Portal Agent Assist feature -last_updated: Mar 7, 2022 -description: This document describes the process how to integrate the Merchant Portal Agent Assist feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/pbc/all/user-management/202403.0/marketplace/install-the-merchant-portal-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-agent-assist-feature.md %} diff --git a/docs/pbc/all/user-management/202507.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md b/docs/pbc/all/user-management/202507.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md deleted file mode 100644 index 0489ca6f78a..00000000000 --- a/docs/pbc/all/user-management/202507.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Portal Agent Assist feature -last_updated: Mar 7, 2022 -description: This document describes the process how to integrate the Merchant Portal Agent Assist feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/pbc/all/user-management/202403.0/marketplace/install-the-merchant-portal-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-agent-assist-feature.md %} diff --git a/docs/pbc/all/user-management/202512.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md b/docs/pbc/all/user-management/202512.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md deleted file mode 100644 index 0489ca6f78a..00000000000 --- a/docs/pbc/all/user-management/202512.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Install the Merchant Portal Agent Assist feature -last_updated: Mar 7, 2022 -description: This document describes the process how to integrate the Merchant Portal Agent Assist feature into a Spryker project. -template: feature-integration-guide-template -redirect_from: /docs/pbc/all/user-management/202403.0/marketplace/install-the-merchant-portal-agent-assist-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-agent-assist-feature.md %} diff --git a/docs/pbc/all/user-management/202602.0/base-shop/agent-assist-feature-overview.md b/docs/pbc/all/user-management/202602.0/base-shop/agent-assist-feature-overview.md new file mode 100644 index 00000000000..5332cd2c1ad --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/base-shop/agent-assist-feature-overview.md @@ -0,0 +1,72 @@ +--- +title: Storefront Agent Assist feature overview +description: An agent helps customers to perform activities in the online store and provides support by carrying out actions on customer's behalf in the web-shop +last_updated: Jul 20, 2021 +template: concept-topic-template +originalLink: https://documentation.spryker.com/2021080/docs/agent-assist-overview +originalArticleId: b5a82fe5-ecba-45ef-aa6b-1a7487fdf94c +redirect_from: + - /docs/scos/user/features/202108.0/agent-assist-feature-overview.html + - /docs/scos/dev/feature-walkthroughs/202311.0/agent-assist-feature-walkthrough.html + - /docs/scos/user/features/202204.0/agent-assist-feature-overview.html + - /docs/pbc/all/user-management/202204.0/base-shop/agent-assist-feature-overview.html +--- + +An *agent* is a person with unrivaled product knowledge who can help customers perform different activities in the Storefront. For example, a customer might call an agent and ask them to help choose the right product or assist with the buying process or even perform some actions in the Storefront on their behalf. Say, a customer wants to add items to a shopping list or create a company but cannot do it for some reason. This is when the agent steps in and provides practical support acting on the customer's behalf. + +## Setting up an agent user + +Every agent user is a Back Office user. When creating or editing a Back Office user, you can make them an agent assist by selecting this option. + +A Back Office user can create an agent user in **Users > Users**. + +To learn more about managing agent users in Back Office, see [Managing users](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html). + +![zed-agent-assist.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/user-management/base-shop/agent-assist-feature-overview.md/zed-agent-assist.png) + +## Agent Assist feature on the Storefront + +To act on a customer's behalf, the agent signs in at `https://mysprykershop.com/agent/login` with the agent account details and searches for the needed customer by typing their name or email in the customer search field. + +![customer-assitent.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/user-management/base-shop/agent-assist-feature-overview.md/customer-assitent.png) + +Once they find the needed customer, they select **Confirm** to impersonate them. + +This logs the agent into the selected customer account, so they see the shop the way the customer does and can do anything the customer asks for. If the customer's cart is stored in the database, the agent can see and manage the cart and its items. If the cart is stored only in the customer's session, the agent can't manage it. + +After performing all the requested actions, the agent ends the customer assistance session by selecting **End Customer Assistance**. + + + +This is how the Agent Assist feature works on the Spryker Demo Shop Storefront: +
    + +
    + + + +Check out this video tutorial on setting up an Agent user in a B2B company account: +
    + +
    + + + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create an agent user](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html#create-a-user) | + +## Related Developer documents + +|INSTALLATION GUIDES |GLUE API GUIDES |DATA IMPORT | +|---------|---------|---------| +| [Install the Agent Assist feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-feature.html) | [Authenticate as an agent assist](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html) | | +| [Install the Agent Assist Glue API](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html) | [Search by customers as an agent assist](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html) | | +| [Install the Customer Account Management feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-feature.html) | [Impersonate customers as an agent assist](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.html) | | +| [Install the Customer Account Management + Agent Assist feature](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-customer-account-management-agent-assist-feature.html) | [Managing agent assist authentication tokens](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html)| | diff --git a/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-acl-feature.md b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-acl-feature.md new file mode 100644 index 00000000000..a2238871d75 --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-acl-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the ACL feature +last_updated: Sep 10, 2024 +description: This integration guide provides steps on how to integrate the ACL feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/marketplace/dev/feature-integration-guides/202200.0/acl-feature-integration.html + - /docs/marketplace/dev/feature-integration-guides/202311.0/acl-feature-integration.html + - /docs/pbc/all/user-management/202403.0/base-shop/install-and-upgrade/install-the-acl-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-acl-feature.md %} diff --git a/docs/pbc/all/user-management/202404.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md similarity index 100% rename from docs/pbc/all/user-management/202404.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md rename to docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-cart-feature.md diff --git a/docs/pbc/all/user-management/202410.0/base-shop/install-and-upgrade/install-the-agent-assist-feature.md b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-feature.md similarity index 100% rename from docs/pbc/all/user-management/202410.0/base-shop/install-and-upgrade/install-the-agent-assist-feature.md rename to docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-feature.md diff --git a/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.md b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.md new file mode 100644 index 00000000000..21973b6d6a3 --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.md @@ -0,0 +1,28 @@ +--- +title: Install the Agent Assist Glue API +description: Learn how to Integrate the Glue API - Agent Assist feature into your Spryker based project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-agent-assist-feature-integration +originalArticleId: 3edbb45b-83fc-4123-ac09-3c80a98ab670 +redirect_from: + - /2021080/docs/glue-api-agent-assist-feature-integration + - /2021080/docs/en/glue-api-agent-assist-feature-integration + - /docs/glue-api-agent-assist-feature-integration + - /docs/en/glue-api-agent-assist-feature-integration + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-agent-assist-feature-integration.html + - /docs/pbc/all/user-management/202204.0/base-shop/install-and-upgrade/install-the-agent-assist-glue-api.html +related: + - title: Install the Agent Assist feature + link: docs/pbc/all/user-management/page.version/base-shop/install-and-upgrade/install-the-agent-assist-feature.html + - title: Authenticating as an agent assist + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-authenticate-as-an-agent-assist.html + - title: Impersonate customers as an agent assist + link: docs/pbc/all/user-management/page.version/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.html + - title: Managing agent assist authentication tokens + link: docs/pbc/all/identity-access-management/page.version/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html + - title: Search by customers as an agent assist + link: docs/pbc/all/user-management/page.version/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-agent-assist-glue-api.md %} diff --git a/docs/pbc/all/user-management/202507.0/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.md b/docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.md similarity index 100% rename from docs/pbc/all/user-management/202507.0/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.md rename to docs/pbc/all/user-management/202602.0/base-shop/install-and-upgrade/install-the-agent-assist-shopping-list-feature.md diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md index b3f8a5511e0..c831eb9da30 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.md @@ -4,6 +4,7 @@ description: Learn how to manage users and their permissions with roles and grou template: back-office-user-guide-template last_updated: Nov 21, 2023 redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.html - /docs/scos/user/back-office-user-guides/202311.0/users/best-practices-managing-users-and-their-permissions-with-roles-and-groups.html - /docs/pbc/all/user-management/202204.0/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.html related: diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md similarity index 95% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md index 68d00d617f9..b70584b6b2f 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-groups originalArticleId: 0fd86087-7869-43f7-b15a-997daa5800ca redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.html - /2021080/docs/managing-groups - /2021080/docs/en/managing-groups - /docs/managing-groups diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md index b2dccabbca8..ad5ad55a3b0 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-groups/edit-user-groups.md @@ -27,7 +27,7 @@ Review the [reference information](#reference-information-edit-user-groups) befo 2. On the **Edit Group** page, do any of the following: - Update the **TITLE**. - Remove one or more **ASSIGNED ROLES** from the group by clicking **x** next to the groups you want to remove. - - Select one or more roles to assign. + - Select one or more roles to assign. 3. Click **Save**. To de-assign a user from the group, in the **Users** section, click **Delete** next to the user you want to deassign. diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-roles/create-user-roles.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-roles/create-user-roles.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-roles/create-user-roles.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-roles/create-user-roles.md diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-roles/edit-user-roles.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-roles/edit-user-roles.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-user-roles/edit-user-roles.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-user-roles/edit-user-roles.md diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users-in-the-back-office.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users-in-the-back-office.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users-in-the-back-office.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users-in-the-back-office.md diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md similarity index 99% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md index dd7e8786c6a..8f276f5a5c8 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/assign-and-deassign-customers-from-users.md @@ -47,7 +47,7 @@ When assigning many customers at a time, it might be useful to click the **Custo 1. Next to the user you want to deassign customers from, click **Assign Customers**. 2. In the **Assigned customers** tab, clear the checkboxes next to the customers you want to deassign. 3. Click **Save**. - This refreshes the page with the success message displayed. The deassigned customers are displayed in the **Assigned customers** tab. + This refreshes the page with the success message displayed. The deassigned customers are displayed in the **Assigned customers** tab. **Tips and tricks** diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/create-users.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/create-users.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/create-users.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/create-users.md index 8aa8d17900f..23010f761c1 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/create-users.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/create-users.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-users originalArticleId: 835c1e16-904a-4ed9-82c8-50244c7b0ff2 redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/create-users.html - /docs/scos/user/back-office-user-guides/202311.0/users/managing-users/activating-and-deactivating-users.html - /docs/scos/user/back-office-user-guides/202311.0/users/managing-users/creating-users.html - /docs/pbc/all/user-management/202204.0/base-shop/manage-in-the-back-office/manage-users/create-users.html diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/delete-users.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/delete-users.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/delete-users.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/delete-users.md diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md similarity index 96% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md index 8e0cc729e1a..299798bad95 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-in-the-back-office/manage-users/edit-users.md @@ -4,6 +4,7 @@ description: Learn how you can edit users directly in the back office of your Sp template: back-office-user-guide-template last_updated: Jan 4, 2024 redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-in-the-back-office/manage-users/edit-users.html - /docs/scos/user/back-office-user-guides/202311.0/users/managing-users/editing-users.html - /docs/pbc/all/user-management/202204.0/base-shop/manage-in-the-back-office/manage-users/edit-users.html related: diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md similarity index 98% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md index 5cfbf3904f7..ea037ec1ca0 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/impersonating-customers-as-an-agent-assist originalArticleId: 603fa249-5eab-42d0-93c3-3c09f75da9d0 redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.html - /docs/scos/dev/glue-api-guides/202311.0/managing-agent-assists/impersonating-customers-as-an-agent-assist.html - /docs/pbc/all/user-management/202204.0/base-shop/manage-using-glue-api/glue-api-impersonate-customers-as-an-agent-assist.html related: @@ -118,6 +119,6 @@ After you've authenticated as a customer, you can impersonate them: - [Manage cart items](/docs/pbc/all/cart-and-checkout/{{page.version}}/base-shop/manage-using-glue-api/manage-carts-of-registered-users/glue-api-manage-items-in-carts-of-registered-users.html) - [Manage gift cards](/docs/pbc/all/gift-cards/{{page.version}}/manage-using-glue-api/glue-api-manage-gift-cards-of-registered-users.html) - [Manage wishlists](/docs/pbc/all/shopping-list-and-wishlist/{{page.version}}/base-shop/manage-using-glue-api/glue-api-manage-wishlists.html) -- [Manage orders](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html) +- [Manage orders](/docs/pbc/all/customer-relationship-management/{{page.version}}/base-shop/manage-using-glue-api/customers/glue-api-retrieve-customer-orders.html) Also, you can [refresh the agent assist authentication token](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html#refresh-an-agent-assist-authentication-token) or [revoke the agent assist refresh token](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-manage-agent-assist-authentication-tokens.html#revoke-an-agent-assist-refresh-token). diff --git a/docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md b/docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md similarity index 98% rename from docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md rename to docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md index e9dbe2ae2aa..386f804daf6 100644 --- a/docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md +++ b/docs/pbc/all/user-management/202602.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/searching-by-customers-as-an-agent-assist originalArticleId: 7e16c84e-9baf-4c1b-bab3-bb2d1db0a7d9 redirect_from: + - /docs/pbc/all/user-management/202512.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html - /docs/scos/dev/glue-api-guides/202311.0/managing-agent-assists/searching-by-customers-as-an-agent-assist.html - /docs/pbc/all/user-management/202204.0/base-shop/manage-using-glue-api/glue-api-search-by-customers-as-an-agent-assist.html related: @@ -236,7 +237,7 @@ To search by customers, send the request: "last": "http://glue.mysprykershop.com/agent-customer-search?q=sonia@spryker.com&page[offset]=0&page[limit]=10", "first": "http://glue.mysprykershop.com/agent-customer-search?q=sonia@spryker.com&page[offset]=0&page[limit]=10" } -} +} ```
    @@ -269,7 +270,7 @@ To search by customers, send the request: "last": "http://glue.mysprykershop.com/agent-customer-search?q=spencor&page[offset]=0&page[limit]=10", "first": "http://glue.mysprykershop.com/agent-customer-search?q=spencor&page[offset]=0&page[limit]=10" } -} +} ```
    @@ -302,7 +303,7 @@ To search by customers, send the request: "last": "http://glue.mysprykershop.com/agent-customer-search?q=de--5&page[offset]=0&page[limit]=10", "first": "http://glue.mysprykershop.com/agent-customer-search?q=de--5&page[offset]=0&page[limit]=10" } -} +} ```
    diff --git a/docs/pbc/all/user-management/202602.0/base-shop/user-and-rights-overview.md b/docs/pbc/all/user-management/202602.0/base-shop/user-and-rights-overview.md new file mode 100644 index 00000000000..83ebf7746cf --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/base-shop/user-and-rights-overview.md @@ -0,0 +1,114 @@ +--- +title: Users and rights overview +last_updated: Aug 20, 2021 +description: User and rights management is a general term that describes the security functionality for controlling user access to perform various roles throughout the system +template: concept-topic-template +originalLink: https://documentation.spryker.com/docs/user-and-rights-overview +originalArticleId: 4006b24f-fd0a-480a-9589-d2b822fdbde3 +redirect_from: +- /2021080/docs/user-and-rights-overview +- /2021080/docs/en/user-and-rights-overview +- /docs/user-and-rights-overview +- /docs/en/user-and-rights-overview +- /docs/scos/dev/feature-walkthroughs/202311.0/customer-account-management-feature-walkthrough/user-and-rights-overview.html +- /docs/scos/dev/feature-walkthroughs/202200.0/spryker-core-back-office-feature-walkthrough/user-and-rights-overview.html +- /docs/pbc/all/user-management/202204.0/base-shop/user-and-rights-overview.html +--- + +User and rights management is implemented in the following three bundles: + +- ACL—ACL stands for Access Control List. This is where you can manage your roles, groups, privileges and resources. +- Auth—manages the authorization of a specific user by returning true or false if the credentials are allowed to access the system or not. It is used for login, logout, and used by the login controller to verify if a given user token is authenticated. Login is authenticated with a form or a header (via token). Auth is also used to validate that Zed has authorization to process incoming requests from Yves or third parties such as payment providers. +- User—lets you create users and assign them to groups. Each group contains a set of roles. + +## Users and customers + +It is important to distinguish between users and customers. A user works with the back-end side of the store and handles the store maintenance such as creating users and assigning them to roles that will let them perform actions such as editing the CMS, activating and deactivating products, and managing discounts. A customer on the other hand is the final consumer of the online store—for example, the person who places orders. Customers are also managed in Zed but in a different section. + +Users are assigned to groups. Groups are a collection of Roles—for example, customer-care, root, or third-party. Roles have Resources (rules) assigned to them. Resources (rules) are used to assign specific privileges to a Role for example, a Sales Representative Role or a System Administrator Role. Resources are always /module/controller/action and you can use * as placeholder. + +- `/customer/*/*` would mean everything in /customer. +- `/customer/view/*` would mean a user can only see customers but can't edit them. + +## Managing users + +The Auth, ACL, and User bundles are configured and managed through the Zed user interface. Bundles correspond with the tabs in Zed. You can find which name to place here from the file `/project/config/Zed/navigation.xml` + +Also, you can find bundle names as well as controllers and actions in the file `communication/navigation.xml`. For example: + +![bundles_navigation.png](https://spryker.s3.eu-central-1.amazonaws.com/docs/scos/dev/feature-walkthroughs/spryker-core-back-office-feature-walkthrough/user-and-rights-overview.md/bundles_navigation.png) + +See [Managing users](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-users/create-users.html) to learn how to create and manage users, groups, and roles. + + + +{% info_block infoBox "Adding users in the ACL module" %} + +You can add Zed users not only via the Back Office, but also in the ACL module. To do so, add the user in `/Spryker/Zed/Acl/AclConfig::getInstallerUsers()`(see [AclConfig.php](https://github.com/spryker/acl/blob/d3193c9259ed2f2b6815f3b2c9f52f4e4e250bbe/src/Spryker/Zed/Acl/AclConfig.php) for example) and run `console setup:init-db`. + +{% endinfo_block %} + +## ACL configuration + +Apart from being able to configure user access to Zed resources via Zed UI, you can grant access to additional resources by specifying them in `config_*.php`. The following options are used to do that: + +- `AclConstants::ACL_DEFAULT_RULES`—is used to provide/restrict access to Zed resources, defined in the `Spryker/Zed/Auth/AuthConfig::$ingorable` property. For example: + +```php +$config[AclConstants::ACL_DEFAULT_RULES] = [ + // .... + [ + 'bundle' => 'auth', + 'controller' => 'login', + 'action' => 'index', + 'type' => 'deny', + ], + // .... +]; +``` + +In the example, we restrict access for everyone to Zed login page. This option affects both logged-in and anonymous users. The key feature is the ability to restrict/provide access for anonymous users. + +- `AclConstants::ACL_USER_RULE_WHITELIST`—is used to provide additional access to Zed resources for all logged-in users. For example: + +```php +$config[AclConstants::ACL_USER_RULE_WHITELIST] = [ + // .... + [ + 'bundle' => 'application', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], + // .... +]; +``` + +In the example, we grant access to the Application module resources for all users. + +{% info_block warningBox "Note" %} + +With the configuration provided in the example, users are granted access to these resources regardless of ACL configuration in ZED UI. + +{% endinfo_block %} + +- `AclConstants::ACL_DEFAULT_CREDENTIALS`—is used to provide additional access to Zed resources for a specific user. For example: + +```php +$config[AclConstants::ACL_DEFAULT_CREDENTIALS] = [ + 'winner@spryker.com' => [ + 'rules' => [ + [ + 'bundle' => '*', + 'controller' => '*', + 'action' => '*', + 'type' => 'allow', + ], + ], + ], +] +``` + +In the example, we grant the user **winner@spryker.com** access to all Zed resources. To make it work, we should also add **winner@spryker.com** to this option: `UserConstants::USER_SYSTEM_USERS`. Here, a system user is any user who has additional ACL rules defined for them in `config_*.php` file. + +- Note that if there is at least one `allow` type for a resource, the user will have access to it in spite of having a `deny` type for the same resource. It works for `AclConstants::ACL_USER_RULE_WHITELIST`, `AclConstants::ACL_DEFAULT_CREDENTIALS` and rules configured via Zed UI, except for `AclConstants::ACL_DEFAULT_RULES` as it's handled before checking if user logged in or not. diff --git a/docs/pbc/all/user-management/202602.0/marketplace/back-office-create-users.md b/docs/pbc/all/user-management/202602.0/marketplace/back-office-create-users.md new file mode 100644 index 00000000000..0b7b226758f --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/marketplace/back-office-create-users.md @@ -0,0 +1,46 @@ +--- +title: "Back Office: Create users" +description: Learn how to create new users directly in the Back Office for you Spryker Marketplace shop. +last_updated: Jan 14, 2024 +template: back-office-user-guide-template +--- + +This document describes how to create users in the Back Office for Marketplace. + +## Prerequisites + +- If you are new to the **Users** section, you might want to start with [Best practices: Managing users and their permissions with roles and groups](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/best-practices-manage-users-and-their-permissions-with-roles-and-groups.html). +- Create at least one user group. For instructions, see [Create user groups](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.html). +- Review the [reference information](#reference-information-create-users) before you start or look up the necessary information as you go through the process. + +## Create a user + +1. Go to **Users > Users**. +2. On the **Users** page, click **Add New User**. +3. On the **Create new User** page, enter an **E-MAIL**. +4. Enter a **PASSWORD**. +5. For **REPEAT PASSWORD**, enter the same password once again. +6. Enter a **FIRST NAME**. +7. Enter a **LAST NAME**. +8. For **ASSIGNED GROUPS**, select one or more user groups you want to assign this user to. +9. Optional: To make this user a customer agent, select **THIS USER IS AN AGENT IN STOREFRONT**. +10. Optional: To make this user a merchant agent, select **THIS USER IS AN AGENT IN MERCHANT PORTAL**. +11. Optional: To make the user a warehouse user, select **WAREHOUSE USER**. +12. For **INTERFACE LANGUAGE**, select a language suitable for the user. +13. Click **Create**. + +This opens the **Users** page with the success message displayed. The created user is displayed in the list. + +## Reference information: Create users + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| E-MAIL | Email address of the user. It will be used for logging in, resetting password, and getting notifications. | +| PASSWORD | The user will be using this password to log in. | +| REPEAT PASSWORD | Password confirmation. | +| FIRST NAME | User's first name. | +| LAST NAME | User's last name. | +| ASSIGNED GROUPS | User groups to assign this user to. User groups define what areas and actions the user will have access to. To learn how to create user groups, see [Create user groups](/docs/pbc/all/user-management/{{page.version}}/base-shop/manage-in-the-back-office/manage-user-groups/create-user-groups.html). | +| AGENT | Defines if this user is an [agent assist](/docs/pbc/all/user-management/{{page.version}}/base-shop/agent-assist-feature-overview.html) | +| WAREHOUSE USER| Defines if this user works in a warehouse to [fulfill orders](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/fulfillment-app-overview.html). | +| INTERFACE LANGUAGE | Defines the interface language of the Back Office for this user. | diff --git a/docs/pbc/all/user-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md b/docs/pbc/all/user-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md new file mode 100644 index 00000000000..f211f0e0be7 --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Merchant Portal Agent Assist feature +last_updated: Mar 7, 2022 +description: This document describes the process how to integrate the Merchant Portal Agent Assist feature into a Spryker project. +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/user-management/202403.0/marketplace/install-the-merchant-portal-agent-assist-feature.html + - /docs/pbc/all/user-management/202507.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.html + - /docs/pbc/all/user-management/202512.0/marketplace/install-and-upgrade/install-the-merchant-portal-agent-assist-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-agent-assist-feature.md %} diff --git a/docs/pbc/all/user-management/202512.0/marketplace/merchant-portal-agent-assist-feature-overview.md b/docs/pbc/all/user-management/202602.0/marketplace/merchant-portal-agent-assist-feature-overview.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/marketplace/merchant-portal-agent-assist-feature-overview.md rename to docs/pbc/all/user-management/202602.0/marketplace/merchant-portal-agent-assist-feature-overview.md diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-domain-model-and-relationships.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-domain-model-and-relationships.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-domain-model-and-relationships.md diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/execution-flow.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/execution-flow.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/execution-flow.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/execution-flow.md index 1f48df0ce3d..d0618bb7f68 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/execution-flow.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/execution-flow.md @@ -3,6 +3,8 @@ title: Execution flow last_updated: Nov 05, 2021 description: Performing model actions and selecting and applying rules for a query share some similarities, but they have some differences as well. A user with insufficient permissions during query execution will be forced to run a query that results in an empty collection when the system executes the query. template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/execution-flow.html --- ## Query processing flow diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-configuration.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-configuration.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-configuration.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-configuration.md diff --git a/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-overview.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-overview.md new file mode 100644 index 00000000000..15e1586db3f --- /dev/null +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/persistence-acl-feature-overview.md @@ -0,0 +1,68 @@ +--- +title: Persistence ACL feature overview +last_updated: Nov 05, 2021 +description: With the Persistence ACL feature, you can manage authorization at the database entity level, or even within a set of entities or segments. +template: feature-walkthrough-template +redirect_from: + - /docs/marketplace/dev/feature-walkthroughs/202212.0/persistence-acl-feature-walkthrough/persistence-acl-feature-walkthrough.html +--- + +With the Persistence ACL feature, you can manage authorization at the database entity level, or even within a set of entities or segments. This feature enables a flexible system of inheritance of rights, simplifying the configuration of access. + +Persistence ACL runs in the Persistence layer, as its name suggests. + +## Limitations + +The module is based on the Propel ORM (namely Propel Behavior and Propel Hooks). If you are not using `PropelOrm` to interact with data in your system, this module will not work. + + + +## How it works + +Persistence ACL supports permission checks both when executing queries and when performing actions on Active Record models. Upon installation and configuration, code is injected into the Active Record model and Query classes that check the user's permissions for the appropriate actions. This module uses Propel hooks. + +![The module in application layers](https://confluence-connect.gliffy.net/embed/image/13f16eaa-9491-43ab-887d-0004c716eef4.png?utm_medium=live&utm_source=custom) + +{% info_block warningBox "Important!" %} + +If you execute queries outside of Propel API, they WILL NOT be handled by Persistence ACL. + +{% endinfo_block %} + +During model operations, the following hooks are used: + +- `preInsert` + +- `preUpdate` + +- `preDelete` + + + +Query execution is performed using the following hooks: + +- `preSelectQuery` + +- `preUpdateQuery` + +- `preDeleteQuery` + +A query sent to the database is intercepted and modified with additional joins to limit the results of the query to only those records available to the current user. If the user attempts to perform a restricted action on an Active Record model (such as updating, deleting, or creating), then `\Spryker\Zed\AclEntity\Persistence\Exception\OperationNotAuthorizedException` is thrown. + +## Learn more + +- [Configuration](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-portal-core-feature-overview/persistence-acl-configuration.html) +- [Rules and scopes](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.html) +- [Execution flow](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/execution-flow.html) + +## Related Developer documents + +|INSTALLATION GUIDES | REFERENCES | HOWTOS | +|---------|---------|---------| +| [Install the ACL feature](/docs/pbc/all/user-management/{{page.version}}/base-shop/install-and-upgrade/install-the-acl-feature.html) | [Persistence ACL feature configuration](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/marketplace-merchant-portal-core-feature-overview/persistence-acl-configuration.html) | [HowTo: Split products by stores](/docs/marketplace/dev/howtos/how-to-split-products-by-stores.html)| +| | [Execution flow](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/execution-flow.html) | | +| | [Rules and scopes](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.html) | | +| | [Global scope](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.html) | | +| | [Segment scope](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.html) | | +| | [Inherited scope](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.html) | | +| | [Composite entity](/docs/pbc/all/user-management/{{page.version}}/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.html) | | diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md similarity index 94% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md index 2afc417da00..ec77a8b5271 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.md @@ -3,6 +3,8 @@ title: Composite entity last_updated: Nov 05, 2021 description: Composite entities of one Main Entity and one or more SubEntities and are represented by multiple tables in the database. template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/composite-entity.html --- There are some Domain Entities represented by multiple tables in the database. To make the feature usable, the CompositeEntity concept was introduced: Composite entities consist of one Main Entity and one or more SubEntities. Access is granted implicitly. An AclEntityRule for the Main Entity grants access to all its Sub Entities. Sub Entities cannot be used as standalone entities in an AclEntityRule or Segment. diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md similarity index 89% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md index c55bdb2947c..a90f4573ed7 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.md @@ -3,6 +3,8 @@ title: Global scope last_updated: Nov 05, 2021 description: Global scope rules apply to an entire collection of entities (for example, Users, Orders). template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/global-scope.html --- Global scope rules apply to an entire collection of entities (for example, Users, Orders). diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md index 09c773c35b9..93212465d51 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.md @@ -3,6 +3,8 @@ title: Inherited scope last_updated: Nov 05, 2021 description: Inherited scope rules apply when you need to grant access to an entity (child) that inherits from another entity (parent). template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/inherited-scope.html --- Inherited scope rules apply when you need to grant access to an entity (child) that inherits from another entity (parent). Here are a few examples of inheritance: diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md similarity index 97% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md index 0c6f2f9aae5..ababe780030 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.md @@ -3,6 +3,8 @@ title: Rules and scopes last_updated: Nov 05, 2021 description: The rule, in contrast to the configuration, is tied to the user (and his role) and determines the user's rights towards the entity. template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/rules-and-scopes.html --- The functionality of this feature is based on such fundamental concepts as Rule and Configuration. diff --git a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md similarity index 93% rename from docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md rename to docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md index 5b3f4f1f3f0..d4599b7bbed 100644 --- a/docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md +++ b/docs/pbc/all/user-management/202602.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.md @@ -3,6 +3,8 @@ title: Segment scope last_updated: Nov 05, 2021 description: The segment rules let you grant permissions to subset of an entity collection. Segment entities are connected through a plain many-to-many tables, this allows minimizing performance impact. template: concept-topic-template +redirect_from: + - /docs/pbc/all/user-management/202512.0/marketplace/persistence-acl-feature-overview/rules-and-scopes/segment-scope.html --- The segment rules let you grant permissions to subset of an entity collection. diff --git a/docs/pbc/all/user-management/202512.0/user-management.md b/docs/pbc/all/user-management/202602.0/user-management.md similarity index 100% rename from docs/pbc/all/user-management/202512.0/user-management.md rename to docs/pbc/all/user-management/202602.0/user-management.md diff --git a/docs/pbc/all/warehouse-management-system/202404.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md b/docs/pbc/all/warehouse-management-system/202404.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md deleted file mode 100644 index a87d313392a..00000000000 --- a/docs/pbc/all/warehouse-management-system/202404.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Warehouse picking + Product feature -description: Learn how to integrate the Warehouse picking + Product feature into your project -last_updated: Mar 30, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-warehouse-picking-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-picking-product-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md b/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md deleted file mode 100644 index 012c854cd20..00000000000 --- a/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Inventory Management + Alternative Products feature -description: Learn how to install the Inventory Management + Alternative Products feature -last_updated: Jun 16, 2021 -template: feature-integration-guide-template -redirect_from: -- /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-feature.md b/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-feature.md deleted file mode 100644 index cd5669b6956..00000000000 --- a/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-inventory-management-feature.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Install the Inventory Management feature -description: Learn how to install the Spryker inventory management feature in to your Spryker based project. -template: feature-integration-guide-template -last_updated: Feb 8, 2023 -redirect_from: - - /docs/pbc/all/warehouse-management-system/202311.0/unified-commerce/install-and-upgrade/install-the-inventory-management-feature.html - - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/install-the-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md b/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md deleted file mode 100644 index 5135749eeb2..00000000000 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Warehouse picking feature -description: Learn how to integrate the Spryker Warehouse picking feature into your Spryker Unified Commerce project -last_updated: Feb 10, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-warehouse-picking-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-picking-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md b/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md deleted file mode 100644 index a87d313392a..00000000000 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Install the Warehouse picking + Product feature -description: Learn how to integrate the Warehouse picking + Product feature into your project -last_updated: Mar 30, 2023 -template: feature-integration-guide-template -redirect_from: - - /docs/scos/dev/feature-integration-guides/202311.0/install-the-warehouse-picking-product-feature.html ---- - -{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-picking-product-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/inventory-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202512.0/base-shop/inventory-management-feature-overview.md deleted file mode 100644 index 1f7db28c43b..00000000000 --- a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/inventory-management-feature-overview.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Inventory Management feature overview -description: Learn how you can manage warehouse, stock, and availability with the Inventory Management feature -last_updated: Jul 22, 2021 -template: concept-topic-template -originalLink: /docs/pbc/all/warehouse-management-system/page.version/base-shop/inventory-management-feature-overview.html-feature-overview -originalArticleId: 6aaacd72-1ca1-4406-8614-0cacf94459d4 -redirect_from: - - /2021080/docs/inventory-management-feature-overview - - /2021080/docs/en/inventory-management-feature-overview - - /docs/inventory-management-feature-overview - - /docs/en/inventory-management-feature-overview - - /docs/scos/user/features/202200.0/inventory-management-feature-overview.html - - /docs/scos/user/features/202311.0/inventory-management-feature-overview.html - - /docs/pbc/all/warehouse-management-system/inventory-management-feature-overview.html - - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/inventory-management-feature-overview.html ---- - -The *Inventory Management* feature refers to warehousing and managing your store's stock. In this context, a *warehouse* is a physical place where your products are stored, and *stock* is the number of products available in the warehouse. See [Warehouse management](#warehouse-management) and [Stock management](#stock-management) for details about how to manage them. -Stock does not always reflect the real availability of products, as not all the items available in stock are available for sale. For example, if items are *reserved*, that is, there are pending orders with these items, they can not be ordered, even though physically, they are still in stock. The value that reflects the difference between the current quantity of products in stock and the quantity of these products in the pending orders, is referred to as the *availability* of products. The availability is calculated per store. For details about managing availability, see [Availability management](#availability-management). - -## Warehouse management - -You can [create warehouses in the Back Office](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) or [import them](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html). - -A warehouse can be assigned to a single store or shared between several stores. For the warehouse and stock management scenarios you can set up for your project, see [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html). You can manage relations between stores and warehouses in the Back Office or by importing the warehouse and store data. For details about managing warehouses and stores in the back office, see [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html). For details about importing the warehouse and store data, see [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html). - -### Defining a warehouse address - -You can define the warehouse address that will be used as the shipping origin address by importing the warehouse address data. For details about the import file, see [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html). - -### Avalara: Warehouse assignment to order items - -{% info_block warningBox %} - -By default, a warehouse is not linked to a sales order item. The logic described below applies only when [Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html) is integrated into your project. That is, it's used to get warehouse addresses to calculate taxes in the USA. - -{% endinfo_block %} - -During the checkout, once a buyer entered delivery addresses for all order items, be it a [single delivery](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/split-delivery-overview.html) or a split delivery, the order items are assigned to warehouses to fulfill them. - -By default, if a buyer orders several items of the same SKU, the requested item's stock is checked in all the warehouses of the store. Based on the item stock, the warehouses are sorted in descending order—for example: - -1. Never out of stock -2. 1000 items -3. 999 items -4. 2 items -5. 0 items - -If the requested quantity of the item is available in the first warehouse, that is, the one holding the biggest stock of the item, this warehouse is assigned to fulfill the order item. - -{% info_block infoBox %} - -The warehouse with the *never out of stock* item quantity is always assigned to the item. - -{% endinfo_block %} - -If the first warehouse's stock is insufficient to fulfill the order item, this warehouse and the next one are assigned to the order item to fulfill the remaining quantity. - -Schematically, the process looks like this: - -![image](https://confluence-connect.gliffy.net/embed/image/74e2001e-4443-4e6c-b3d6-fafb14548702.png?utm_medium=live&utm_source=custom) - -## Stock management - -When the order is made, the stock is not updated automatically in the system, and you have to set it manually. You can define stock only for concrete products. You can set stock by doing the following: - -- Editing product stock in the Back Office. For details, see [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). -- Importing the quantities of items stored in each of the warehouses. For details, see [Import file details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html). - -## Availability management - -In contrast to stock, availability considers not just the number of products in the warehouse but also current open orders. - -When a buyer places an order, the products in the order become *reserved*, and the product availability changes. The changes are reflected in the Back Office: The availability is equal to the stock before the order is placed, and after the order is placed, the availability decreases, but the stock remains the same. - -Product availability before the order: - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/before-order-placement.png) - -Product availability after the order: - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/after-order-placement.png) - -For details about checking product availability in the Back Office, see [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html). - -{% info_block infoBox %} - -The availability of a product bundle is defined by the availability of each product in the bundle. If at least one of them is out of stock, the entire bundle is unavailable. - -{% endinfo_block %} - -In the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html), a developer can use the `reserved` parameter to define the states at which the order items are reserved. There can also be states that release an item. For example, when the payment fails and the order is canceled, the item is not reserved anymore: - -
    -State machine example - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/state-machine.png) - -
    - -{% info_block infoBox "Unavailable products on the Storefront" %} - -For SEO purposes, products that are not available can still be displayed on the Storefront with the inactive **Add to cart** button. - -{% endinfo_block %} - -## Related Business User documents - -|BACK OFFICE USER GUIDES| -|---| -| [Create warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) | -| [Edit warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html) | -| [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html) | -| [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html) | - -## Related Developer documents - -| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | REFERENCES | -|---|---|---|---|-| -| [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | [Upgrade the Availability module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.html) | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html) | [File details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html) | | -| [Install the Inventory Management + Alternative Products feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html) | [Upgrade the AvailabilityCartConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.html) | [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html) | [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html) | -| [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | [Upgrade the AvailabilityGui module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.html) | [Retrieve availability when retrieving abstract products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html) | [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html) | | -|| [Upgrade the AvailabilityOfferConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.html) | [Retrieve availability when retrieving concrete products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html) | ["Import file details: warehouse.csv"](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) | | -| | [Upgrade the AvailabilityStorage module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.html) | | | | diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/check-availability-of-products.md b/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/check-availability-of-products.md deleted file mode 100644 index 1e794eeb96e..00000000000 --- a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/check-availability-of-products.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Check availability of products -description: Learn how to check availability of products directly in the Back Office of your Spryker based project. -last_updated: June 3, 2022 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/managing-products-availability -originalArticleId: a694b2d4-3f66-40fd-8539-d8b455c2da8f -redirect_from: - - /docs/scos/user/back-office-user-guides/202108.0/catalog/availability/managing-products-availability.html - - /docs/scos/user/back-office-user-guides/202200.0/catalog/availability/managing-products-availability.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/availability/managing-products-availability.html - - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-in-the-back-office/check-availability-of-products.html -related: - - title: Timed Product Availability Feature Overview - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html ---- - -To check a product's availability in the Back Office, follow the steps: - -1. Go to **Catalog > Availability**. -2. Next to the product you want to view the availability of, click **View**. - This opens the **Product Availability** page. -3. If you have multiple stores, select a **STORE**. - -| ATTRIBUTE | DESCRIPTION | -| - | - | -| ABSTRACT PRODUCT AVAILABILITY | Information about availability of an abstract product. | -| VARIANT AVAILABILITY | Information about availability of the product's variants. | -| SKU | Unique identifier of a product availability is displayed for. | -| NAME | Name of a product availability is displayed for. | -| AVAILABILITY | Defines if customers can order a product on the Storefront. | -| CURRENT STOCK | Number of products available for ordering. | -| RESERVED PRODUCTS | Number of products that were ordered and are being processes. Customers cannot order reserved products. | -| IS BUNDLE PRODUCT | Defines if the product for which availability is displayed is a product bundle. | -| IS NEVER OUT OF STOCK | Defines if the stock of a product can run out. | - -## Next steps - -[Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/inventory-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202512.0/inventory-management-feature-overview.md deleted file mode 100644 index 1f7db28c43b..00000000000 --- a/docs/pbc/all/warehouse-management-system/202512.0/inventory-management-feature-overview.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Inventory Management feature overview -description: Learn how you can manage warehouse, stock, and availability with the Inventory Management feature -last_updated: Jul 22, 2021 -template: concept-topic-template -originalLink: /docs/pbc/all/warehouse-management-system/page.version/base-shop/inventory-management-feature-overview.html-feature-overview -originalArticleId: 6aaacd72-1ca1-4406-8614-0cacf94459d4 -redirect_from: - - /2021080/docs/inventory-management-feature-overview - - /2021080/docs/en/inventory-management-feature-overview - - /docs/inventory-management-feature-overview - - /docs/en/inventory-management-feature-overview - - /docs/scos/user/features/202200.0/inventory-management-feature-overview.html - - /docs/scos/user/features/202311.0/inventory-management-feature-overview.html - - /docs/pbc/all/warehouse-management-system/inventory-management-feature-overview.html - - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/inventory-management-feature-overview.html ---- - -The *Inventory Management* feature refers to warehousing and managing your store's stock. In this context, a *warehouse* is a physical place where your products are stored, and *stock* is the number of products available in the warehouse. See [Warehouse management](#warehouse-management) and [Stock management](#stock-management) for details about how to manage them. -Stock does not always reflect the real availability of products, as not all the items available in stock are available for sale. For example, if items are *reserved*, that is, there are pending orders with these items, they can not be ordered, even though physically, they are still in stock. The value that reflects the difference between the current quantity of products in stock and the quantity of these products in the pending orders, is referred to as the *availability* of products. The availability is calculated per store. For details about managing availability, see [Availability management](#availability-management). - -## Warehouse management - -You can [create warehouses in the Back Office](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) or [import them](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html). - -A warehouse can be assigned to a single store or shared between several stores. For the warehouse and stock management scenarios you can set up for your project, see [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html). You can manage relations between stores and warehouses in the Back Office or by importing the warehouse and store data. For details about managing warehouses and stores in the back office, see [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html). For details about importing the warehouse and store data, see [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html). - -### Defining a warehouse address - -You can define the warehouse address that will be used as the shipping origin address by importing the warehouse address data. For details about the import file, see [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html). - -### Avalara: Warehouse assignment to order items - -{% info_block warningBox %} - -By default, a warehouse is not linked to a sales order item. The logic described below applies only when [Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html) is integrated into your project. That is, it's used to get warehouse addresses to calculate taxes in the USA. - -{% endinfo_block %} - -During the checkout, once a buyer entered delivery addresses for all order items, be it a [single delivery](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/split-delivery-overview.html) or a split delivery, the order items are assigned to warehouses to fulfill them. - -By default, if a buyer orders several items of the same SKU, the requested item's stock is checked in all the warehouses of the store. Based on the item stock, the warehouses are sorted in descending order—for example: - -1. Never out of stock -2. 1000 items -3. 999 items -4. 2 items -5. 0 items - -If the requested quantity of the item is available in the first warehouse, that is, the one holding the biggest stock of the item, this warehouse is assigned to fulfill the order item. - -{% info_block infoBox %} - -The warehouse with the *never out of stock* item quantity is always assigned to the item. - -{% endinfo_block %} - -If the first warehouse's stock is insufficient to fulfill the order item, this warehouse and the next one are assigned to the order item to fulfill the remaining quantity. - -Schematically, the process looks like this: - -![image](https://confluence-connect.gliffy.net/embed/image/74e2001e-4443-4e6c-b3d6-fafb14548702.png?utm_medium=live&utm_source=custom) - -## Stock management - -When the order is made, the stock is not updated automatically in the system, and you have to set it manually. You can define stock only for concrete products. You can set stock by doing the following: - -- Editing product stock in the Back Office. For details, see [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). -- Importing the quantities of items stored in each of the warehouses. For details, see [Import file details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html). - -## Availability management - -In contrast to stock, availability considers not just the number of products in the warehouse but also current open orders. - -When a buyer places an order, the products in the order become *reserved*, and the product availability changes. The changes are reflected in the Back Office: The availability is equal to the stock before the order is placed, and after the order is placed, the availability decreases, but the stock remains the same. - -Product availability before the order: - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/before-order-placement.png) - -Product availability after the order: - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/after-order-placement.png) - -For details about checking product availability in the Back Office, see [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html). - -{% info_block infoBox %} - -The availability of a product bundle is defined by the availability of each product in the bundle. If at least one of them is out of stock, the entire bundle is unavailable. - -{% endinfo_block %} - -In the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html), a developer can use the `reserved` parameter to define the states at which the order items are reserved. There can also be states that release an item. For example, when the payment fails and the order is canceled, the item is not reserved anymore: - -
    -State machine example - -![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/state-machine.png) - -
    - -{% info_block infoBox "Unavailable products on the Storefront" %} - -For SEO purposes, products that are not available can still be displayed on the Storefront with the inactive **Add to cart** button. - -{% endinfo_block %} - -## Related Business User documents - -|BACK OFFICE USER GUIDES| -|---| -| [Create warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) | -| [Edit warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html) | -| [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html) | -| [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html) | - -## Related Developer documents - -| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | REFERENCES | -|---|---|---|---|-| -| [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | [Upgrade the Availability module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.html) | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html) | [File details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html) | | -| [Install the Inventory Management + Alternative Products feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html) | [Upgrade the AvailabilityCartConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.html) | [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html) | [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html) | -| [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | [Upgrade the AvailabilityGui module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.html) | [Retrieve availability when retrieving abstract products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html) | [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html) | | -|| [Upgrade the AvailabilityOfferConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.html) | [Retrieve availability when retrieving concrete products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html) | ["Import file details: warehouse.csv"](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) | | -| | [Upgrade the AvailabilityStorage module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.html) | | | | diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/check-availability-of-products.md b/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/check-availability-of-products.md deleted file mode 100644 index 1e794eeb96e..00000000000 --- a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/check-availability-of-products.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Check availability of products -description: Learn how to check availability of products directly in the Back Office of your Spryker based project. -last_updated: June 3, 2022 -template: back-office-user-guide-template -originalLink: https://documentation.spryker.com/2021080/docs/managing-products-availability -originalArticleId: a694b2d4-3f66-40fd-8539-d8b455c2da8f -redirect_from: - - /docs/scos/user/back-office-user-guides/202108.0/catalog/availability/managing-products-availability.html - - /docs/scos/user/back-office-user-guides/202200.0/catalog/availability/managing-products-availability.html - - /docs/scos/user/back-office-user-guides/202311.0/catalog/availability/managing-products-availability.html - - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-in-the-back-office/check-availability-of-products.html -related: - - title: Timed Product Availability Feature Overview - link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html ---- - -To check a product's availability in the Back Office, follow the steps: - -1. Go to **Catalog > Availability**. -2. Next to the product you want to view the availability of, click **View**. - This opens the **Product Availability** page. -3. If you have multiple stores, select a **STORE**. - -| ATTRIBUTE | DESCRIPTION | -| - | - | -| ABSTRACT PRODUCT AVAILABILITY | Information about availability of an abstract product. | -| VARIANT AVAILABILITY | Information about availability of the product's variants. | -| SKU | Unique identifier of a product availability is displayed for. | -| NAME | Name of a product availability is displayed for. | -| AVAILABILITY | Defines if customers can order a product on the Storefront. | -| CURRENT STOCK | Number of products available for ordering. | -| RESERVED PRODUCTS | Number of products that were ordered and are being processes. Customers cannot order reserved products. | -| IS BUNDLE PRODUCT | Defines if the product for which availability is displayed is a product bundle. | -| IS NEVER OUT OF STOCK | Defines if the stock of a product can run out. | - -## Next steps - -[Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md b/docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md deleted file mode 100644 index 3f6b50320f9..00000000000 --- a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "Import file details: merchant_stock.csv" -last_updated: Feb 26, 2021 -description: This document describes the merchant_stock.csv file to configure merchant stock information in your Spryker shop. -template: import-file-template -redirect_from: - - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-stock.csv.html -related: - - title: Marketplace Merchant feature overview - link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html - - title: Execution order of data importers in Demo Shop - link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html ---- - -This document describes the `merchant_stock.csv` file to configure [merchant stock](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) information in your Spryker shop. - - -## Import file dependencies - -- [merchant-stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html) -- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) -- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) -- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) -- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) - -## Import file parameters - - -| PARAMETER | REQUIRED | TYPE | DEFAULT VALUE | REQUIREMENTS OR COMMENTS | DESCRIPTION | -| ------------- | -------- | ------ | ------------- | --------------------------------- | ----------------- | -| merchant_reference | ✓ | String | | Unique | Identifier of the merchant in the system. | -| stock_name | ✓ | String | | Stock name is defined as described in [merchant warehouse](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html). | Name of the stock. | - - -## Import template file and content example - -| FILE | DESCRIPTION | -| --------------------- | --------------------- | -| [template_merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/template_merchant_stock.csv) | Import file template with headers only. | -| [merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/merchant_stock.csv) | Example of the import file with Demo Shop data. | - -## Import command - -```bash -data:import merchant-stock -``` diff --git a/docs/pbc/all/warehouse-management-system/202512.0/availability-notification-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/availability-notification-feature-overview.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/availability-notification-feature-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/availability-notification-feature-overview.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/availability-notification-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/availability-notification-feature-overview.md similarity index 97% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/availability-notification-feature-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/availability-notification-feature-overview.md index 5504206e208..62f1d2499ac 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/availability-notification-feature-overview.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/availability-notification-feature-overview.md @@ -6,6 +6,7 @@ template: concept-topic-template originalLink: https://documentation.spryker.com/2021080/docs/availability-notification-feature-overview originalArticleId: 12e075cf-e5a0-4281-bef7-73f3b724bf35 redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/availability-notification-feature-overview.html - /2021080/docs/availability-notification-feature-overview - /2021080/docs/en/availability-notification-feature-overview - /docs/availability-notification-feature-overview diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/extend-and-customize/inventory-management-feature-modules-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/inventory-management-feature-modules-overview.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/extend-and-customize/inventory-management-feature-modules-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/inventory-management-feature-modules-overview.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-product-stock.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.md similarity index 96% rename from docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-product-stock.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.md index c547a02d71e..cb0a550642b 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-product-stock.csv.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.md @@ -6,6 +6,7 @@ template: data-import-template originalLink: https://documentation.spryker.com/2021080/docs/file-details-product-stockcsv originalArticleId: 3ee0b369-582a-42c5-a659-81fc4231281d redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.html - /docs/scos/dev/data-import/201811.0/data-import-categories/catalog-setup/stocks/file-details-product-stock.csv.html - /docs/scos/dev/data-import/201907.0/data-import-categories/catalog-setup/stocks/file-details-product-stock.csv.html - /docs/scos/dev/data-import/202311.0/data-import-categories/catalog-setup/stocks/stocks.html diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-warehouse.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/import-file-details-warehouse.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/warehouse-management-system-data-import.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/warehouse-management-system-data-import.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/warehouse-management-system-data-import.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/import-and-export-data/warehouse-management-system-data-import.md diff --git a/docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.md new file mode 100644 index 00000000000..e9ea27cdb7b --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.md @@ -0,0 +1,24 @@ +--- +title: Install the Availability Notification feature +description: The guide walks you through the process of installing the Product is Available Again feature into the project. +last_updated: March 27, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/availability-notification-feature-integration +originalArticleId: 86a00594-c9ee-42c8-bd9d-622866fd826c +redirect_from: + - /2021080/docs/availability-notification-feature-integration + - /2021080/docs/en/availability-notification-feature-integration + - /docs/availability-notification-feature-integration + - /docs/en/availability-notification-feature-integration + - /docs/scos/dev/feature-integration-guides/201903.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/availability-notification-feature-integration.html + - /docs/pbc/all/warehouse-management-system/install-and-upgrade/install-features/install-the-availability-notification-feature.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.html +related: + - title: Install the Availability Notification Glue API + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-availability-notification-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md new file mode 100644 index 00000000000..fe1ec598dbc --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md @@ -0,0 +1,27 @@ +--- +title: Install the Availability Notification Glue API +description: Learn how to integrate the Glue API - Availability Notification feature into your Spryker based project +last_updated: Jun 18, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-availability-notification-feature-integration +originalArticleId: d9bc0dfd-658f-412c-a127-d967b568de67 +redirect_from: + - /2021080/docs/glue-api-availability-notification-feature-integration + - /2021080/docs/en/glue-api-availability-notification-feature-integration + - /docs/glue-api-availability-notification-feature-integration + - /docs/en/glue-api-availability-notification-feature-integration + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.html +related: + - title: Install the Availability Notification feature + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.html + - title: Managing availability notifications + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.html + - title: Retrieve subscriptions to availability notifications + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-availability-notification-glue-api.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md new file mode 100644 index 00000000000..8cce9f14524 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md @@ -0,0 +1,10 @@ +--- +title: Install the Inventory Management + Alternative Products feature +description: Learn how to install the Inventory Management + Alternative Products feature +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html +--- +{% include pbc/all/install-features/{{page.version}}/install-the-alternative-products-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.md new file mode 100644 index 00000000000..6b810f16540 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.md @@ -0,0 +1,12 @@ +--- +title: Install the Inventory Management feature +description: Learn how to install the Spryker inventory management feature in to your Spryker based project. +template: feature-integration-guide-template +last_updated: Feb 8, 2023 +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html + - /docs/pbc/all/warehouse-management-system/202311.0/unified-commerce/install-and-upgrade/install-the-inventory-management-feature.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202404.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.md new file mode 100644 index 00000000000..571c5bb9abc --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.md @@ -0,0 +1,553 @@ +--- +title: Install the Product Availability Display feature +description: Learn how to install the Product Availability Display feature that shows stock quantities on product pages and in shopping carts +last_updated: February 13, 2026 +template: feature-integration-guide-template +related: + - title: Product Availability Display feature overview + link: /docs/pbc/all/warehouse-management-system/page.version/base-shop/product-availability-display-feature-overview.html +--- + +Use this guide to install the Product Availability Display feature. + +## Prerequisites + +Install the following required features: + +| NAME | VERSION | INSTALLATION GUIDE | +|------|---------|-------------------| +| Spryker Core | {{site.version}} | [Install the Spryker Core feature](/docs/pbc/all/miscellaneous/{{site.version}}/install-and-upgrade/install-features/install-the-spryker-core-feature.html) | +| Product | {{site.version}} | [Install the Product feature](/docs/pbc/all/product-information-management/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-product-feature.html) | +| Cart | {{site.version}} | [Install the Cart feature](/docs/pbc/all/cart-and-checkout/{{site.version}}/base-shop/install-and-upgrade/install-features/install-the-cart-feature.html) | + +## 1. Install the required modules + +Install the required modules using Composer: + +```bash +composer require spryker-feature/inventory-management:"dev-master" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------|-------------------| +| AvailabilityWidget | vendor/spryker-shop/availability-widget | +| AvailabilityWidgetExtension | vendor/spryker-shop/availability-widget-extension | +| AvailabilityCartConnector | vendor/spryker/availability-cart-connector | +| AvailabilityStorage | vendor/spryker/availability-storage | + +{% endinfo_block %} + +## 2. Set up configuration + +Add the following configuration to your project: + +### Yves configuration + +**src/Pyz/Yves/AvailabilityWidget/AvailabilityWidgetConfig.php** + +```php + + */ + protected function getExpanderPlugins(Container $container): array + { + return [ + new AvailabilityItemExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `AvailabilityItemExpanderPlugin` is registered by adding a product to the cart and verifying that `ItemTransfer.stockQuantity` and `ItemTransfer.isNeverOutOfStock` are populated. + +{% endinfo_block %} + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + return [ + new ProductViewAvailabilityStorageExpanderPlugin(), + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `ProductViewAvailabilityStorageExpanderPlugin` is registered by viewing a product detail page and verifying that `ProductViewTransfer.stockQuantity` and `ProductViewTransfer.isNeverOutOfStock` are populated. + +{% endinfo_block %} + +**src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php** + +```php + + */ + protected function getGlobalWidgets(): array + { + return [ + ProductAvailabilityWidget::class, + ]; + } +} +``` + +{% info_block warningBox "Verification" %} + +Make sure that `ProductAvailabilityWidget` is registered by checking that the availability widget appears on product detail pages and in the shopping cart. + +{% endinfo_block %} + +## 5. Set up templates + +Enable `ProductAvailabilityWidget` in the frontend templates. + +### Product detail page template + +Add the availability widget to the product detail page: + +**src/Pyz/Yves/ProductDetailPage/Theme/default/components/molecules/product-configurator/product-configurator.twig** + +```twig +{% raw %} +{% extends molecule('product-configurator', '@SprykerShop:ProductDetailPage') %} + +{% set isProductConcrete = data.product.idProductConcrete is not empty %} +{% set showProductAvailability = isProductConcrete %} + +{% block body %} + {# ... existing code ... #} + + {% set productAvailabilityWidget = findWidget('ProductAvailabilityWidget', [ + data.product + ]) %} + {% if showProductAvailability %} + {% if productAvailabilityWidget is not empty %} + {% widget productAvailabilityWidget only %}{% endwidget %} + {% endif %} + {% endif %} + + {# ... existing code ... #} + + {% widget 'AddToCartFormWidget' args [config, data.product, isDisabled, options] with { + data: { + isService: sspServiceDetectorWidget and sspServiceDetectorWidget.isService, + } + } only %} + {% block embeddedData %} + {# ... existing code ... #} + + {# Remove the following block if it exists: #} + {# {% if not data.product.available %} #} + {#

    {{ 'product.detail.out_of_stock' | trans }}

    #} + {# {% endif %} #} + {% endblock %} + {% endwidget %} + + {# ... rest of the template ... #} +{% endblock %} +{% endraw %} +``` + +### Product catalog template + +Add the availability widget to product cards in the catalog: + +**src/Pyz/Yves/ShopUi/Theme/default/components/molecules/product-card-item/product-card-item.twig** + +```twig +{% raw %} +{% extends model('component') %} + +{% block body %} + {# ... existing code ... #} + + {% block productInfo %} + {# ... existing code ... #} + {% block availability %} + {% set productAvailabilityWidget = findWidget('ProductAvailabilityWidget', [ + listItem + ]) %} + {% if productAvailabilityWidget is not empty %} + {% widget productAvailabilityWidget %}{% endwidget %} + {% endif %} + {% endblock %} + {# ... rest of the template ... #} + {% endblock %} +{% endblock %} +{% endraw %} +``` + +{% info_block warningBox "Verification" %} + +Make sure the availability widget displays correctly: +- On product detail pages, the widget appears below the product title and shows stock information +- In product catalogs and search results, each product card displays availability information +- The display format matches your configuration (indicator only or indicator with quantity) + +{% endinfo_block %} + +## 6. Optional: Add measurement unit support + +To display stock quantities with measurement units like "250 kg in stock", install additional modules and register plugins. + +### Install measurement unit modules + +```bash +composer require spryker-feature/measurement-units:"{{site.version}}" --update-with-dependencies +``` + +{% info_block warningBox "Verification" %} + +Make sure the following modules have been installed: + +| MODULE | EXPECTED DIRECTORY | +|--------|-------------------| +| ProductMeasurementUnitWidget | vendor/spryker-shop/product-measurement-unit-widget | +| ProductMeasurementUnitStorage | vendor/spryker/product-measurement-unit-storage | + +{% endinfo_block %} + +### Register measurement unit plugins + +**src/Pyz/Yves/AvailabilityWidget/AvailabilityWidgetDependencyProvider.php** + +```php + + */ + protected function getAvailabilityQuantityFormatterStrategyPlugins(): array + { + return [ + new ProductMeasurementUnitQuantityFormatterStrategyPlugin(), + ]; + } +} +``` + +Add `ProductViewMeasurementUnitExpanderPlugin` to the existing `ProductStorageDependencyProvider`: + +**src/Pyz/Client/ProductStorage/ProductStorageDependencyProvider.php** + +```php + + */ + protected function getProductViewExpanderPlugins(): array + { + return [ + new ProductViewAvailabilityStorageExpanderPlugin(), + new ProductViewMeasurementUnitExpanderPlugin(), // Add this line + ]; + } +} +``` + +{% info_block infoBox "Info" %} + +`ProductViewMeasurementUnitExpanderPlugin` requires the `spryker/product-measurement-unit-storage` module from step 6. + +{% endinfo_block %} + +{% info_block warningBox "Verification" %} + +Make sure that measurement units appear in availability displays by viewing a product that has a base measurement unit configured. The availability should display as "[quantity] [unit] in stock", for example, "250 kg in stock". + +{% endinfo_block %} + +## 7. Import glossary data + +Import glossary keys for availability translations: + +**data/import/common/common/glossary.csv** + +```csv +product.availability.available,Available,en_US +product.availability.available,Verfügbar,de_DE +product.availability.in_stock,"%number% in stock",en_US +product.availability.in_stock,"%number% auf Lager",de_DE +product.availability.out_of_stock,"Out of stock",en_US +product.availability.out_of_stock,"Nicht auf Lager",de_DE +``` + +Run the data import: + +```bash +console data:import glossary +``` + +{% info_block warningBox "Verification" %} + +Make sure the glossary keys have been imported by checking the `spy_glossary_key` and `spy_glossary_translation` tables. Verify that the availability widget displays the correct translations on the storefront. + +{% endinfo_block %} + +## 8. Optional: Import measurement unit translations + +If you enabled measurement unit support, import glossary keys for measurement unit names: + +**data/import/common/common/glossary.csv** + +```csv +measurement_units.item.name.short,pc,en_US +measurement_units.item.name.short,Stk,de_DE +measurement_units.standard.weight.kilo.name.short,kg,en_US +measurement_units.standard.weight.kilo.name.short,kg,de_DE +measurement_units.standard.weight.gram.name.short,g,en_US +measurement_units.standard.weight.gram.name.short,g,de_DE +measurement_units.standard.weight.tone.name.short,t,en_US +measurement_units.standard.weight.tone.name.short,t,de_DE +measurement_units.standard.weight.gbou.name.short,oz,en_US +measurement_units.standard.weight.gbou.name.short,oz,de_DE +measurement_units.standard.weight.usou.name.short,oz,en_US +measurement_units.standard.weight.usou.name.short,oz,de_DE +measurement_units.standard.weight.pund.name.short,lb,en_US +measurement_units.standard.weight.pund.name.short,lb,de_DE +measurement_units.standard.weight.huwg.name.short,GB cwt,en_US +measurement_units.standard.weight.huwg.name.short,GB cwt,de_DE +measurement_units.standard.weight.gbtn.name.short,GB ton,en_US +measurement_units.standard.weight.gbtn.name.short,GB ton,de_DE +measurement_units.standard.weight.ustn.name.short,US ton,en_US +measurement_units.standard.weight.ustn.name.short,US ton,de_DE +measurement_units.standard.weight.oztr.name.short,ozt,en_US +measurement_units.standard.weight.oztr.name.short,ozt,de_DE +measurement_units.standard.weight.ucwt.name.short,US cwt,en_US +measurement_units.standard.weight.ucwt.name.short,US cwt,de_DE +measurement_units.standard.length.metr.name.short,m,en_US +measurement_units.standard.length.metr.name.short,m,de_DE +measurement_units.standard.length.cmet.name.short,cm,en_US +measurement_units.standard.length.cmet.name.short,cm,de_DE +measurement_units.standard.length.mmet.name.short,mm,en_US +measurement_units.standard.length.mmet.name.short,mm,de_DE +measurement_units.standard.length.kmet.name.short,km,en_US +measurement_units.standard.length.kmet.name.short,km,de_DE +measurement_units.standard.length.inch.name.short,in,en_US +measurement_units.standard.length.inch.name.short,in,de_DE +measurement_units.standard.length.yard.name.short,yd,en_US +measurement_units.standard.length.yard.name.short,yd,de_DE +measurement_units.standard.length.foot.name.short,ft,en_US +measurement_units.standard.length.foot.name.short,ft,de_DE +measurement_units.standard.length.mile.name.short,mi,en_US +measurement_units.standard.length.mile.name.short,mi,de_DE +measurement_units.standard.area.smet.name.short,m²,en_US +measurement_units.standard.area.smet.name.short,m²,de_DE +measurement_units.standard.area.sqki.name.short,km²,en_US +measurement_units.standard.area.sqki.name.short,km²,de_DE +measurement_units.standard.area.smil.name.short,mm²,en_US +measurement_units.standard.area.smil.name.short,mm²,de_DE +measurement_units.standard.area.scmt.name.short,cm²,en_US +measurement_units.standard.area.scmt.name.short,cm²,de_DE +measurement_units.standard.area.sqin.name.short,in²,en_US +measurement_units.standard.area.sqin.name.short,in²,de_DE +measurement_units.standard.area.sqfo.name.short,ft²,en_US +measurement_units.standard.area.sqfo.name.short,ft²,de_DE +measurement_units.standard.area.sqmi.name.short,mi²,en_US +measurement_units.standard.area.sqmi.name.short,mi²,de_DE +measurement_units.standard.area.sqya.name.short,yd²,en_US +measurement_units.standard.area.sqya.name.short,yd²,de_DE +measurement_units.standard.area.acre.name.short,ac,en_US +measurement_units.standard.area.acre.name.short,ac,de_DE +measurement_units.standard.area.ares.name.short,a,en_US +measurement_units.standard.area.ares.name.short,a,de_DE +measurement_units.standard.area.hect.name.short,ha,en_US +measurement_units.standard.area.hect.name.short,ha,de_DE +measurement_units.standard.litr.name.short,L,en_US +measurement_units.standard.litr.name.short,L,de_DE +measurement_units.standard.celi.name.short,cL,en_US +measurement_units.standard.celi.name.short,cL,de_DE +measurement_units.standard.mili.name.short,mL,en_US +measurement_units.standard.mili.name.short,mL,de_DE +measurement_units.standard.gbga.name.short,GB gal,en_US +measurement_units.standard.gbga.name.short,GB gal,de_DE +measurement_units.standard.gbpi.name.short,GB pt,en_US +measurement_units.standard.gbpi.name.short,GB pt,de_DE +measurement_units.standard.uspi.name.short,US pt,en_US +measurement_units.standard.uspi.name.short,US pt,de_DE +measurement_units.standard.gbqa.name.short,GB qt,en_US +measurement_units.standard.gbqa.name.short,GB qt,de_DE +measurement_units.standard.usqa.name.short,US qt,en_US +measurement_units.standard.usqa.name.short,US qt,de_DE +measurement_units.standard.usga.name.short,US gal,en_US +measurement_units.standard.usga.name.short,US gal,de_DE +measurement_units.standard.barl.name.short,bbl,en_US +measurement_units.standard.barl.name.short,bbl,de_DE +measurement_units.standard.bcuf.name.short,BCF,en_US +measurement_units.standard.bcuf.name.short,BCF,de_DE +measurement_units.standard.bdft.name.short,BF,en_US +measurement_units.standard.bdft.name.short,BF,de_DE +measurement_units.standard.cbme.name.short,m³,en_US +measurement_units.standard.cbme.name.short,m³,de_DE +measurement_units.standard.miba.name.short,MMbbl,en_US +measurement_units.standard.miba.name.short,MMbbl,de_DE +measurement_units.standard.dgeu.name.short,DGE,en_US +measurement_units.standard.dgeu.name.short,DGE,de_DE +measurement_units.standard.ggeu.name.short,GGE,en_US +measurement_units.standard.ggeu.name.short,GGE,de_DE +measurement_units.standard.busl.name.short,bu,en_US +measurement_units.standard.busl.name.short,bu,de_DE +``` + +Run the data import: + +```bash +console data:import glossary +``` + +## 9. Set up frontend + +Build the frontend to include the new styles and assets: + +```bash +console frontend:yves:build +``` diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/inventory-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/inventory-management-feature-overview.md new file mode 100644 index 00000000000..587a8ad9be0 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/inventory-management-feature-overview.md @@ -0,0 +1,126 @@ +--- +title: Inventory Management feature overview +description: Learn how you can manage warehouse, stock, and availability with the Inventory Management feature +last_updated: Jul 22, 2021 +template: concept-topic-template +originalLink: /docs/pbc/all/warehouse-management-system/page.version/base-shop/inventory-management-feature-overview.html-feature-overview +originalArticleId: 6aaacd72-1ca1-4406-8614-0cacf94459d4 +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/inventory-management-feature-overview.html + - /2021080/docs/inventory-management-feature-overview + - /2021080/docs/en/inventory-management-feature-overview + - /docs/inventory-management-feature-overview + - /docs/en/inventory-management-feature-overview + - /docs/scos/user/features/202200.0/inventory-management-feature-overview.html + - /docs/scos/user/features/202311.0/inventory-management-feature-overview.html + - /docs/pbc/all/warehouse-management-system/inventory-management-feature-overview.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/inventory-management-feature-overview.html +--- + +The *Inventory Management* feature refers to warehousing and managing your store's stock. In this context, a *warehouse* is a physical place where your products are stored, and *stock* is the number of products available in the warehouse. See [Warehouse management](#warehouse-management) and [Stock management](#stock-management) for details about how to manage them. +Stock does not always reflect the real availability of products, as not all the items available in stock are available for sale. For example, if items are *reserved*, that is, there are pending orders with these items, they can not be ordered, even though physically, they are still in stock. The value that reflects the difference between the current quantity of products in stock and the quantity of these products in the pending orders, is referred to as the *availability* of products. The availability is calculated per store. For details about managing availability, see [Availability management](#availability-management). + +## Warehouse management + +You can [create warehouses in the Back Office](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) or [import them](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html). + +A warehouse can be assigned to a single store or shared between several stores. For the warehouse and stock management scenarios you can set up for your project, see [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html). You can manage relations between stores and warehouses in the Back Office or by importing the warehouse and store data. For details about managing warehouses and stores in the back office, see [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html). For details about importing the warehouse and store data, see [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html). + +### Defining a warehouse address + +You can define the warehouse address that will be used as the shipping origin address by importing the warehouse address data. For details about the import file, see [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html). + +### Avalara: Warehouse assignment to order items + +{% info_block warningBox %} + +By default, a warehouse is not linked to a sales order item. The logic described below applies only when [Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html) is integrated into your project. That is, it's used to get warehouse addresses to calculate taxes in the USA. + +{% endinfo_block %} + +During the checkout, once a buyer entered delivery addresses for all order items, be it a [single delivery](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/split-delivery-overview.html) or a split delivery, the order items are assigned to warehouses to fulfill them. + +By default, if a buyer orders several items of the same SKU, the requested item's stock is checked in all the warehouses of the store. Based on the item stock, the warehouses are sorted in descending order—for example: + +1. Never out of stock +2. 1000 items +3. 999 items +4. 2 items +5. 0 items + +If the requested quantity of the item is available in the first warehouse, that is, the one holding the biggest stock of the item, this warehouse is assigned to fulfill the order item. + +{% info_block infoBox %} + +The warehouse with the *never out of stock* item quantity is always assigned to the item. + +{% endinfo_block %} + +If the first warehouse's stock is insufficient to fulfill the order item, this warehouse and the next one are assigned to the order item to fulfill the remaining quantity. + +Schematically, the process looks like this: + +![image](https://confluence-connect.gliffy.net/embed/image/74e2001e-4443-4e6c-b3d6-fafb14548702.png?utm_medium=live&utm_source=custom) + +## Stock management + +When the order is made, the stock is not updated automatically in the system, and you have to set it manually. You can define stock only for concrete products. You can set stock by doing the following: + +- Editing product stock in the Back Office. For details, see [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). +- Importing the quantities of items stored in each of the warehouses. For details, see [Import file details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html). + +## Availability management + +In contrast to stock, availability considers not just the number of products in the warehouse but also current open orders. + +When a buyer places an order, the products in the order become *reserved*, and the product availability changes. The changes are reflected in the Back Office: The availability is equal to the stock before the order is placed, and after the order is placed, the availability decreases, but the stock remains the same. + +Product availability before the order: + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/before-order-placement.png) + +Product availability after the order: + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/after-order-placement.png) + +For details about checking product availability in the Back Office, see [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html). + +{% info_block infoBox %} + +The availability of a product bundle is defined by the availability of each product in the bundle. If at least one of them is out of stock, the entire bundle is unavailable. + +{% endinfo_block %} + +In the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html), a developer can use the `reserved` parameter to define the states at which the order items are reserved. There can also be states that release an item. For example, when the payment fails and the order is canceled, the item is not reserved anymore: + +
    +State machine example + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/state-machine.png) + +
    + +{% info_block infoBox "Unavailable products on the Storefront" %} + +For SEO purposes, products that are not available can still be displayed on the Storefront with the inactive **Add to cart** button. + +{% endinfo_block %} + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) | +| [Edit warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html) | +| [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html) | +| [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | REFERENCES | +|---|---|---|---|-| +| [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | [Upgrade the Availability module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.html) | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html) | [File details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html) | | +| [Install the Inventory Management + Alternative Products feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html) | [Upgrade the AvailabilityCartConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.html) | [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html) | [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html) | +| [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | [Upgrade the AvailabilityGui module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.html) | [Retrieve availability when retrieving abstract products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html) | [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html) | | +|| [Upgrade the AvailabilityOfferConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.html) | [Retrieve availability when retrieving concrete products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html) | ["Import file details: warehouse.csv"](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) | | +| | [Upgrade the AvailabilityStorage module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.html) | | | | diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/check-availability-of-products.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/check-availability-of-products.md new file mode 100644 index 00000000000..65ca43abe18 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/check-availability-of-products.md @@ -0,0 +1,39 @@ +--- +title: Check availability of products +description: Learn how to check availability of products directly in the Back Office of your Spryker based project. +last_updated: June 3, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-products-availability +originalArticleId: a694b2d4-3f66-40fd-8539-d8b455c2da8f +redirect_from: + - /docs/scos/user/back-office-user-guides/202108.0/catalog/availability/managing-products-availability.html + - /docs/scos/user/back-office-user-guides/202200.0/catalog/availability/managing-products-availability.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/availability/managing-products-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-in-the-back-office/check-availability-of-products.html +related: + - title: Timed Product Availability Feature Overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html +--- + +To check a product's availability in the Back Office, follow the steps: + +1. Go to **Catalog > Availability**. +2. Next to the product you want to view the availability of, click **View**. + This opens the **Product Availability** page. +3. If you have multiple stores, select a **STORE**. + +| ATTRIBUTE | DESCRIPTION | +| - | - | +| ABSTRACT PRODUCT AVAILABILITY | Information about availability of an abstract product. | +| VARIANT AVAILABILITY | Information about availability of the product's variants. | +| SKU | Unique identifier of a product availability is displayed for. | +| NAME | Name of a product availability is displayed for. | +| AVAILABILITY | Defines if customers can order a product on the Storefront. | +| CURRENT STOCK | Number of products available for ordering. | +| RESERVED PRODUCTS | Number of products that were ordered and are being processes. Customers cannot order reserved products. | +| IS BUNDLE PRODUCT | Defines if the product for which availability is displayed is a product bundle. | +| IS NEVER OUT OF STOCK | Defines if the stock of a product can run out. | + +## Next steps + +[Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/create-warehouses.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/create-warehouses.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/create-warehouses.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/create-warehouses.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/edit-warehouses.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/edit-warehouses.md similarity index 96% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/edit-warehouses.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/edit-warehouses.md index 36cc97f204e..fb3f40f6fc0 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/edit-warehouses.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/edit-warehouses.md @@ -6,6 +6,7 @@ template: back-office-user-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-warehouses originalArticleId: 0158ceb8-801b-45ed-bfc1-b34dc098253e redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/edit-warehouses.html - /2021080/docs/managing-warehouses - /2021080/docs/en/managing-warehouses - /docs/managing-warehouses diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/manage-warehouses-in-the-back-office.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/manage-warehouses-in-the-back-office.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/manage-warehouses-in-the-back-office.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-in-the-back-office/manage-warehouses-in-the-back-office.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-manage-availability-notifications.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.md similarity index 97% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-manage-availability-notifications.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.md index 5c92e42ed67..c2f1bb74381 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-manage-availability-notifications.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/managing-availability-notifications originalArticleId: 664b1f47-879b-43c4-8538-5f74397d6816 redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.html - /docs/scos/dev/glue-api-guides/201907.0/managing-products/managing-availability-notifications/managing-availability-notifications.html - /docs/scos/dev/glue-api-guides/201903.0/managing-products/managing-availability-notifications/managing-availability-notifications.html - /docs/scos/dev/glue-api-guides/202005.0/managing-products/managing-availability-notifications/managing-availability-notifications.html diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md new file mode 100644 index 00000000000..aceb4477f85 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md @@ -0,0 +1,81 @@ +--- +title: Retrieve abstract product availability +description: Learn how to retrieve information about availability of abstract products using Spryker GLUE API within your Spryker based projects. +last_updated: Jul 12, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-abstract-product-availability +originalArticleId: c712b4c5-0418-48a7-bb0a-bafd208dcf17 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-abstract-product-availability.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-abstract-product-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html +related: + - title: Retrieving abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html + - title: Retrieving abstract product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html + - title: Retrieving image sets of abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html + - title: Retrieving tax sets + link: docs/pbc/all/tax-management/page.version/base-shop/manage-using-glue-api/retrieve-tax-sets.html +--- + +This endpoint allows retrieving information about availability of abstract products. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) + +## Retrieve availability of an abstract product + +To retrieve availability of an abstract product, send the request: + +--- +`GET` **/abstract-products/*{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*/abstract-product-availabilities** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** | SKU of an abstract product to get availability for. | + +### Request + +Request sample: retrieve availability of an abstract product + +`GET http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities` + +### Response + +Response sample: retrieve availability of an abstract product + +```json +{ + "data": [{ + "type": "abstract-product-availabilities", + "id": "001", + "attributes": { + "availability": true, + "quantity": 10 + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" + } + }], + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-availabilities-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 305 | Availability is not found. | +| 311 | Abstract product SKU is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md similarity index 92% rename from docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md index 882b24c23de..5ecb210b787 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md @@ -4,10 +4,10 @@ description: Learn how to retrieve availability when retrieving abstract product last_updated: Aug 22, 2022 template: glue-api-storefront-guide-template redirect_from: -- /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-availability-when-retrieving-abstract-products.html -- /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html + - /docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-availability-when-retrieving-abstract-products.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html --- - This document describes how to retrieve availability when retrieving abstract products. To retrieve full information about abstract products, see [Retrieve abstract products](/docs/pbc/all/product-information-management/{{page.version}}/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html). ## Installation diff --git a/docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md similarity index 92% rename from docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md index c72e90cb585..4e4f27de273 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md @@ -4,10 +4,10 @@ description: Learn how to retrieve availability when retrieving concrete product last_updated: Aug 22, 2022 template: glue-api-storefront-guide-template redirect_from: -- /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-availability-when-retrieving-concrete-products.html -- /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html + - /docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-availability-when-retrieving-concrete-products.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html --- - This endpoint allows retrieving general information about concrete products. ## Installation diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md new file mode 100644 index 00000000000..d6d765c03ff --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md @@ -0,0 +1,96 @@ +--- +title: Retrieve concrete product availability +description: Learn how to retrieve availability of concrete products using Spryker GLUE API within your Spryker based projects. +last_updated: Jul 12, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-concrete-product-availability +originalArticleId: 0c67acf3-3c48-484e-8a9a-3889189c7f56 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/201907.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202005.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-concrete-product-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html +related: + - title: "Glue API: Retrieve concrete products" + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html + - title: Retrieving concrete product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html + - title: Retrieving image sets of concrete products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html + - title: Retrieving sales units + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html +--- + +This endpoint allows retrieving availability of concrete products. + + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html). + + + +## Retrieve availability of a concrete product + +--- +`GET` **/concrete-products/*{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*/concrete-product-availabilities** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get abailability for. | + +### Request + +Request sample: retrieve availability of a concrete product + +--- +`GET http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities` + +--- + +### Response + + +
    +Response sample: retrieve availability of a concrete product + +```json +{ + "data": [{ + "type": "concrete-product-availabilities", + "id": "001_25904006", + "attributes": { + "availability": true, + "quantity": 10, + "isNeverOutOfStock": false + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } + }], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-availabilities-response-attributes.md %} + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | +| 306 | Availability is not found. | +| 312 | Concrete product sku is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md similarity index 96% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md rename to docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md index d187aed55fe..a54ef55231d 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md @@ -6,6 +6,7 @@ template: glue-api-storefront-guide-template originalLink: https://documentation.spryker.com/2021080/docs/retrieving-subscriptions-to-availability-notifications originalArticleId: 59346a4d-f331-461f-a6b1-486500ae0d9c redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.html - /docs/scos/dev/glue-api-guides/201903.0/managing-products/managing-availability-notifications/retrieving-subscriptions-to-availability-notifications.html - /docs/scos/dev/glue-api-guides/201907.0/managing-products/managing-availability-notifications/retrieving-subscriptions-to-availability-notifications.html - /docs/scos/dev/glue-api-guides/202005.0/managing-products/managing-availability-notifications/retrieving-subscriptions-to-availability-notifications.html diff --git a/docs/pbc/all/warehouse-management-system/202602.0/base-shop/product-availability-display-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/product-availability-display-feature-overview.md new file mode 100644 index 00000000000..692e7a156d1 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/base-shop/product-availability-display-feature-overview.md @@ -0,0 +1,98 @@ +--- +title: Product Availability Display feature overview +description: The Product Availability Display feature shows stock quantities on product pages, in shopping carts, and in the Buy Box. +last_updated: February 13, 2026 +template: concept-topic-template +related: + - title: Install the Product Availability Display feature + link: /docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.html + - title: Buy Box feature overview + link: /docs/pbc/all/offer-management/page.version/marketplace/buy-box-feature-overview.html +--- + +The Product Availability Display feature shows stock quantities on product detail pages, in shopping carts, and in the Buy Box in marketplace scenarios. When you enable the feature, availability displays in three states: in stock with quantity, available (for never-out-of-stock products), or out of stock. + +## Display modes + +The feature supports two display modes: + +**Indicator only**: Shows the availability status without quantities. Products display as "Available" or "Out of stock." + +**Indicator with quantity**: Shows the availability status with exact quantities. Products display as "19 in stock" or "Out of stock." + +## Stock display on product detail page + +Availability information appears on product detail pages for concrete products (specific product variants). + +Product detail page showing stock quantity + +When a product has available inventory, the system displays the quantity. The format is "X in stock," for example, "19 in stock." + +### Never-out-of-stock products + +Products marked as never out of stock display "Available" without showing a quantity. These products remain available regardless of inventory levels. + +Product showing available status + +### Out of stock + +When a product has zero available inventory and is not marked as never out of stock, the system displays "Out of stock". + +Product showing out of stock + +### Dynamic updates with variant selection + +When customers select different product variants, such as color or size, the availability display updates automatically to show stock for the selected variant. + +## Stock display in shopping cart + +Availability information appears for each line item in the shopping cart. + +Shopping cart showing availability + +Each cart item displays its current availability status, for example "19 in stock" or "Available". If stock levels change after a customer adds items to the cart and before checkout, the cart display reflects the current availability. + +The system validates stock availability during checkout. If the requested quantity exceeds the available stock, checkout cannot be completed until the customer adjusts the order. + +## Measurement unit support + +When products have measurement units configured, availability displays with the unit. + +Product with measurement unit + +For example, "225.5 m in stock" instead of "225.5 in stock." The measurement unit is appended to the quantity based on the product's configured base unit. + +## Stock display in Buy Box + +In marketplace scenarios, when combined with the Buy Box feature, availability information appears per merchant offer. Customers can see stock availability for each merchant selling the product. + +For details about Buy Box integration, see [Buy Box feature overview](/docs/pbc/all/offer-management/{{page.version}}/marketplace/buy-box-feature-overview.html). + +## Configuration + +You configure the Product Availability Display feature at the code level. The following configuration options are available: +- **Enable or disable stock display**: The feature is disabled by default. +- **Display mode**: Indicator only or indicator with quantity. +- **Decimal precision**: Number of decimal places for quantities (default: 2). + +For configuration details, see [Install the Product Availability Display feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.html). + +## Use cases + +Use this feature when: +- Customers need to see stock quantities to plan purchases +- Customers need to verify availability before ordering +- Multiple merchants sell the same product and stock varies by merchant (marketplace scenarios) +- Products are sold in measurement units and quantities need to display with units + +## Limitations + +- Reserved or allocated stock is not shown separately. +- Backorder management and pre-orders are not supported. +- Per-warehouse availability is not displayed to customers. +- Restock notifications are not provided. +- Inventory forecasting and expected restock dates are not shown. + +## Related documents + +- [Install the Product Availability Display feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-product-availability-display-feature.html) diff --git a/docs/pbc/all/warehouse-management-system/202512.0/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md b/docs/pbc/all/warehouse-management-system/202602.0/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md rename to docs/pbc/all/warehouse-management-system/202602.0/domain-model-and-relationships/availability-notification-domain-model-and-relationships.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md b/docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md rename to docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/configure-product-availability-to-be-published-on-product-amount-changes.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/inventory-management-feature-modules-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/inventory-management-feature-modules-overview.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/extend-and-customize/inventory-management-feature-modules-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/inventory-management-feature-modules-overview.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md b/docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md new file mode 100644 index 00000000000..b80e2e36db7 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.md @@ -0,0 +1,112 @@ +--- +title: "Manage stocks in a multi-store environment: Best practices" +last_updated: Aug 13, 2021 +description: This document explains how to choose and implement the most suitable warehouse management workflow using the Inventory Management feature. +template: concept-topic-template +redirect_from: + - /docs/scos/dev/feature-walkthroughs/202311.0/inventory-management-feature-walkthrough/managing-stocks-in-a-multi-store-environment-best-practices.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html +--- + +In a multi-store environment, you can manage relationships between warehouses, stores, and databases in several ways. This article contains scenarios that can help you choose the most suitable warehouse management workflow and implement it using the [Inventory Management](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/inventory-management-feature-overview.html) feature. + +## Scenario 1: Separate warehouses and databases + +{% info_block warningBox %} + +- With [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html), this setup is only possible when stores belong to the different regions. +- To enable this scenario for your project, a developer needs to configure it. + +{% endinfo_block %} + +Suppose you own a large e-commerce business and ship orders worldwide. You want to manage logistics and products effectively. You also want each store to be completely independent from each other, so user, product, and other data is not shared between stores. + +In this case, each store can have its own warehouse and a separate database. Stocks, product reservations, and availability are not co-dependent between stores, and therefore do not need to be synced: + +![image](https://confluence-connect.gliffy.net/embed/image/62d92512-6863-421f-bdc8-abcc9682c784.png?utm_medium=live&utm_source=custom) + +This scenario is appropriate for big businesses managed from various locations, with worldwide deliveries. These stores do not depend on each other in any way and do not require additional communication or synchronization. + +## Scenario 2: A shared warehouse but separate databases + +{% info_block warningBox %} + +- With [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html), this setup is only possible when stores belong to the different regions. +- To enable this scenario for your project, a developer should configure it. For configuration details, see [implementation reference](#implementation-reference). + +{% endinfo_block %} + +Suppose you have a large e-commerce business, with many products and orders, and you want to separate all data for each of your stores. For some reason you do not need multiple warehouses, either because they cannot be spread out across different locations or your deliveries are within a specific part of the world. + +In this case, you can have a common warehouse for all your stores but separate databases. Since the warehouse is shared, for the correct product availability calculations, product reservations must be synced between the databases: + +![image](https://confluence-connect.gliffy.net/embed/image/728ee336-f3e0-4d03-b519-24bc15566360.png?utm_medium=live&utm_source=custom) + +This approach is appropriate for big businesses that can't have or don't need multiple warehouses, but still wish to have the data of each store separated. + +### Implementation reference + +To implement this scenario, you need these three additional database tables: + +- `spy_oms_product_reservation_store` to store reservation requests from other stores. +- `spy_oms_reservation_change_version` to store information about the time when the last reservation occurred. +- `spy_oms_reservation_last_exported_version` to store historic information on the last time reservaions were exported to other stores. + +Also, there are plugins to help you implement synchronization of the reservations: + + +| PLUGIN | DESCRIPTION | +| --- | --- | +|/Spryker/Zed/Oms/Business/OmsFacadeInterface::importReservation | You can use this plugin when reading export data from another store. The plugin stores reservation information to `spy_oms_product_reservation_store` table and updates all timestamps accordingly. | +| /Spryker/Zed/Oms/Communication/Plugin/Oms/ReservationHandler/ReservationVersionHandlerPlugin | The plugin is called when a customer makes an order, and a reservation is made. It stores reservation in the `spy_oms_reservation_change_version` database table. Register this plugin in `/Pyz/Zed/Oms/OmsDependencyProvider::getReservationHandlerPlugins` plugin stack. | +| /Spryker/Zed/Oms/Communication/Plugin/Oms/ReservationImport/ReservationExportPlugin | The plugin is called when a reservation export to another store is initiated. This plugin decides whether the export must be accepted. We do not provide the delivery mechanism: you could do this with files or a queue. For example, when `ReservationExportPlugin` is called, you can write a file copy to another server and read it there. Same for queue: you could publish an event in the queue and then consume it on the other end. | + +{% info_block infoBox "" %} + +There is a console command to export all reservations: `/Spryker/Zed/Oms/Communication/Console/ExportReservationConsole`. It triggers `ReservationExportPlugin` with reservations amounts to export. You can run this command as a cronjob. + +{% endinfo_block %} + +## Scenario 3: Separate warehouses but a shared database + +{% info_block infoBox "" %} + +This is the default scenario implemented in the [Spryker Demo Shops](/docs/about/all/about-spryker.html). + +{% endinfo_block %} + +Suppose you own a medium to large e-commerce business and ship orders worldwide. You want to manage logistics and products effectively, so each store has its own warehouse. You also want product reservations and availability to be separated per store, but you want all the data stored in one place. For example, if a product is unavailable in the DE store, but available in the AT store, a registered user can simply switch from the DE store to AT store and buy the product there. + +In this case, consider separated warehouses but a shared database: + +![image](https://confluence-connect.gliffy.net/embed/image/f02757ee-9f81-496b-8b71-5dbdb801afe8.png?utm_medium=live&utm_source=custom) + +{% info_block infoBox "" %} + +When a buyer places an order, a reservation record is created in the database. The record also contains information about the store the reservation is made for. + +{% endinfo_block %} + +This scenario is good for medium and large online shops that want to have a common database of product, user, and other data. It's a good option to, for example, allow registered users to buy from any store without having to re-register. + +## Scenario 4: Warehouse and database are shared between stores + +{% info_block infoBox "" %} + +To enable this scenario for your project, a developer needs to configure it. + +{% endinfo_block %} + +Suppose you own a small or large e-commerce business and can't have or don't need separate warehouses per store. You also want all the data stored in one place. So, for example, if a product is unavailable in the DE store, but available in the AT store, a registered user can switch from the DE store to AT store and buy the product there. + +In this instance, consider having a shared warehouse and a shared database for all stores. Since the warehouse is shared, for the correct product availability calculations, product reservations are synced between the stores: + +![image](https://confluence-connect.gliffy.net/embed/image/2848116a-7530-407f-8cef-384bdd82b9ac.png?utm_medium=live&utm_source=custom) + +{% info_block infoBox "" %} + +When a buyer places an order in one of the stores, the reservation with the store identifier is stored in the database. An event is created and published in the queue, and synchronization with the other stores happens. + +{% endinfo_block %} + +This scenario is especially good for small online shops with one warehouse that want to have a common database of product, user, and other data. diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-product-stock.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/import-and-export-data/import-file-details-product-stock.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-product-stock.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse-address.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse-address.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse-address.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse-address.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse-store.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse-store.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse-store.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse-store.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse.csv.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/import-file-details-warehouse.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/import-file-details-warehouse.csv.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/warehouse-management-system-data-import.md b/docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/warehouse-management-system-data-import.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/import-and-export-data/warehouse-management-system-data-import.md rename to docs/pbc/all/warehouse-management-system/202602.0/import-and-export-data/warehouse-management-system-data-import.md diff --git a/docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md rename to docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-feature-dynamic-multistore.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-feature.md new file mode 100644 index 00000000000..e9ea27cdb7b --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-feature.md @@ -0,0 +1,24 @@ +--- +title: Install the Availability Notification feature +description: The guide walks you through the process of installing the Product is Available Again feature into the project. +last_updated: March 27, 2023 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/availability-notification-feature-integration +originalArticleId: 86a00594-c9ee-42c8-bd9d-622866fd826c +redirect_from: + - /2021080/docs/availability-notification-feature-integration + - /2021080/docs/en/availability-notification-feature-integration + - /docs/availability-notification-feature-integration + - /docs/en/availability-notification-feature-integration + - /docs/scos/dev/feature-integration-guides/201903.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/availability-notification-feature-integration.html + - /docs/pbc/all/warehouse-management-system/install-and-upgrade/install-features/install-the-availability-notification-feature.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.html +related: + - title: Install the Availability Notification Glue API + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-the-availability-notification-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md new file mode 100644 index 00000000000..fe1ec598dbc --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-availability-notification-glue-api.md @@ -0,0 +1,27 @@ +--- +title: Install the Availability Notification Glue API +description: Learn how to integrate the Glue API - Availability Notification feature into your Spryker based project +last_updated: Jun 18, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-availability-notification-feature-integration +originalArticleId: d9bc0dfd-658f-412c-a127-d967b568de67 +redirect_from: + - /2021080/docs/glue-api-availability-notification-feature-integration + - /2021080/docs/en/glue-api-availability-notification-feature-integration + - /docs/glue-api-availability-notification-feature-integration + - /docs/en/glue-api-availability-notification-feature-integration + - /docs/scos/dev/feature-integration-guides/201903.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/201907.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-availability-notification-feature-integration.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-availability-notification-glue-api.html +related: + - title: Install the Availability Notification feature + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-availability-notification-feature.html + - title: Managing availability notifications + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.html + - title: Retrieve subscriptions to availability notifications + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-availability-notification-glue-api.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md rename to docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.md diff --git a/docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-feature.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.md rename to docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-feature.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md new file mode 100644 index 00000000000..1ab98b3064e --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/install-features/install-the-inventory-management-glue-api.md @@ -0,0 +1,22 @@ +--- +title: Install the Inventory Management Glue API +description: Learn how to integrate the Inventory Management feature API into a Spryker project. +last_updated: Jun 16, 2021 +template: feature-integration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/glue-api-inventory-management-feature-integration +originalArticleId: e7896d23-ba99-4d95-a3cc-654fbfaae463 +redirect_from: + - /docs/scos/dev/feature-integration-guides/201811.0/glue-api/glue-api-inventory-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202005.0/glue-api/glue-api-inventory-management-feature-integration.html + - /docs/scos/dev/feature-integration-guides/202311.0/glue-api/glue-api-inventory-management-feature-integration.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html +related: + - title: Install the Inventory Management feature + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html + - title: Retrieve abstract product availability + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html + - title: Retrieve concrete product availability + link: docs/pbc/all/warehouse-management-system/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html +--- + +{% include pbc/all/install-features/{{page.version}}/install-glue-api/install-the-inventory-management-glue-api.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md new file mode 100644 index 00000000000..35d406f3bb5 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the Availability module +description: Use the guide to upgrade or migrate to the new version of the Availability module in your Spryker based project. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-availability +originalArticleId: 53009fca-6f6b-4583-8946-eb521e6f8235 +redirect_from: + - /2021080/docs/mg-availability + - /2021080/docs/en/mg-availability + - /docs/mg-availability + - /docs/en/mg-availability + - /v1/docs/mg-availability + - /v1/docs/en/mg-availability + - /v2/docs/mg-availability + - /v2/docs/en/mg-availability + - /v3/docs/mg-availability + - /v3/docs/en/mg-availability + - /v4/docs/mg-availability + - /v4/docs/en/mg-availability + - /v5/docs/mg-availability + - /v5/docs/en/mg-availability + - /v6/docs/mg-availability + - /v6/docs/en/mg-availability + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-availability.html + - /docs/scos/dev/module-migration-guides/migration-guide-availability.html + - /module_migration_guides/mg-availability.htm + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-availability-module.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md new file mode 100644 index 00000000000..60d7145734f --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the AvailabilityCartConnector module +description: Use the guide to migrate to a new version of the AvailabilityCartConnector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-availability-cart-connector +originalArticleId: c7378d46-9fbb-446a-8e24-d0c0e13ce381 +redirect_from: + - /2021080/docs/mg-availability-cart-connector + - /2021080/docs/en/mg-availability-cart-connector + - /docs/mg-availability-cart-connector + - /docs/en/mg-availability-cart-connector + - /v1/docs/mg-availability-cart-connector + - /v1/docs/en/mg-availability-cart-connector + - /v2/docs/mg-availability-cart-connector + - /v2/docs/en/mg-availability-cart-connector + - /v3/docs/mg-availability-cart-connector + - /v3/docs/en/mg-availability-cart-connector + - /v4/docs/mg-availability-cart-connector + - /v4/docs/en/mg-availability-cart-connector + - /v5/docs/mg-availability-cart-connector + - /v5/docs/en/mg-availability-cart-connector + - /v6/docs/mg-availability-cart-connector + - /v6/docs/en/mg-availability-cart-connector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-availabilitycartconnector.html + - /docs/scos/dev/module-migration-guides/migration-guide-availabilitycartconnector.html + - /module_migration_guides/mg-availability-cart-connector.htm + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-availabilitycartconnector-module.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md new file mode 100644 index 00000000000..9b13c41876d --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.md @@ -0,0 +1,36 @@ +--- +title: Upgrade the AvailabilityGui module +description: Use the guide to update versions to the newer ones of the AvailabilityGui module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-availability-gui +originalArticleId: 72ac3792-f41b-4d99-b2de-67366a06a9b0 +redirect_from: + - /2021080/docs/mg-availability-gui + - /2021080/docs/en/mg-availability-gui + - /docs/mg-availability-gui + - /docs/en/mg-availability-gui + - /v1/docs/mg-availability-gui + - /v1/docs/en/mg-availability-gui + - /v2/docs/mg-availability-gui + - /v2/docs/en/mg-availability-gui + - /v3/docs/mg-availability-gui + - /v3/docs/en/mg-availability-gui + - /v4/docs/mg-availability-gui + - /v4/docs/en/mg-availability-gui + - /v5/docs/mg-availability-gui + - /v5/docs/en/mg-availability-gui + - /v6/docs/mg-availability-gui + - /v6/docs/en/mg-availability-gui + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-availabilitygui.html + - /docs/scos/dev/module-migration-guides/migration-guide-availabilitygui.html + - /module_migration_guides/mg-availability-gui.htm + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-availabilitygui-module.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md new file mode 100644 index 00000000000..2f2c6766469 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.md @@ -0,0 +1,37 @@ +--- +title: Upgrade the AvailabilityOfferConnector module +description: Use the guide to migrate to a new version of the AvailabilityOfferConnector module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-availability-offer-connector +originalArticleId: c60e70ad-a7d9-4bc7-a318-c1b173302b36 +redirect_from: + - /2021080/docs/mg-availability-offer-connector + - /2021080/docs/en/mg-availability-offer-connector + - /docs/mg-availability-offer-connector + - /docs/en/mg-availability-offer-connector + - /v1/docs/mg-availability-offer-connector + - /v1/docs/en/mg-availability-offer-connector + - /v2/docs/mg-availability-offer-connector + - /v2/docs/en/mg-availability-offer-connector + - /v3/docs/mg-availability-offer-connector + - /v3/docs/en/mg-availability-offer-connector + - /v4/docs/mg-availability-offer-connector + - /v4/docs/en/mg-availability-offer-connector + - /v5/docs/mg-availability-offer-connector + - /v5/docs/en/mg-availability-offer-connector + - /v6/docs/mg-availability-offer-connector + - /v6/docs/en/mg-availability-offer-connector + - /docs/scos/dev/module-migration-guides/201811.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/201903.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/201907.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-availabilityofferconnector.html + - /docs/scos/dev/module-migration-guides/migration-guide-availabilityofferconnector.html + - /module_migration_guides/mg-availability-offer-connector.htm + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-availabilityofferconnector-module.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md new file mode 100644 index 00000000000..dd6113caf0c --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.md @@ -0,0 +1,27 @@ +--- +title: Upgrade the AvailabilityStorage module +description: Use the guide to migrate to a new version of the AvailabilityStorage module. +last_updated: Jun 16, 2021 +template: module-migration-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/mg-availabilitystorage +originalArticleId: ed8f56c7-a35d-48f2-ba2a-edfe2151e67e +redirect_from: + - /2021080/docs/mg-availabilitystorage + - /2021080/docs/en/mg-availabilitystorage + - /docs/mg-availabilitystorage + - /docs/en/mg-availabilitystorage + - /v4/docs/mg-availabilitystorage + - /v4/docs/en/mg-availabilitystorage + - /v5/docs/mg-availabilitystorage + - /v5/docs/en/mg-availabilitystorage + - /v6/docs/mg-availabilitystorage + - /v6/docs/en/mg-availabilitystorage + - /docs/scos/dev/module-migration-guides/202001.0/migration-guide-availabilitystorage.html + - /docs/scos/dev/module-migration-guides/202005.0/migration-guide-availabilitystorage.html + - /docs/scos/dev/module-migration-guides/202009.0/migration-guide-availabilitystorage.html + - /docs/scos/dev/module-migration-guides/202108.0/migration-guide-availabilitystorage.html + - /docs/scos/dev/module-migration-guides/migration-guide-availabilitystorage.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.html +--- + +{% include pbc/all/upgrade-modules/upgrade-the-availabilitystorage-module.md %} diff --git a/docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md b/docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md rename to docs/pbc/all/warehouse-management-system/202602.0/install-and-upgrade/upgrade-modules/upgrade-the-stockgui-module.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/inventory-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/inventory-management-feature-overview.md new file mode 100644 index 00000000000..a7457e46ffb --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/inventory-management-feature-overview.md @@ -0,0 +1,125 @@ +--- +title: Inventory Management feature overview +description: Learn how you can manage warehouse, stock, and availability with the Inventory Management feature +last_updated: Jul 22, 2021 +template: concept-topic-template +originalLink: /docs/pbc/all/warehouse-management-system/page.version/base-shop/inventory-management-feature-overview.html-feature-overview +originalArticleId: 6aaacd72-1ca1-4406-8614-0cacf94459d4 +redirect_from: + - /2021080/docs/inventory-management-feature-overview + - /2021080/docs/en/inventory-management-feature-overview + - /docs/inventory-management-feature-overview + - /docs/en/inventory-management-feature-overview + - /docs/scos/user/features/202200.0/inventory-management-feature-overview.html + - /docs/scos/user/features/202311.0/inventory-management-feature-overview.html + - /docs/pbc/all/warehouse-management-system/inventory-management-feature-overview.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/inventory-management-feature-overview.html +--- + +The *Inventory Management* feature refers to warehousing and managing your store's stock. In this context, a *warehouse* is a physical place where your products are stored, and *stock* is the number of products available in the warehouse. See [Warehouse management](#warehouse-management) and [Stock management](#stock-management) for details about how to manage them. +Stock does not always reflect the real availability of products, as not all the items available in stock are available for sale. For example, if items are *reserved*, that is, there are pending orders with these items, they can not be ordered, even though physically, they are still in stock. The value that reflects the difference between the current quantity of products in stock and the quantity of these products in the pending orders, is referred to as the *availability* of products. The availability is calculated per store. For details about managing availability, see [Availability management](#availability-management). + +## Warehouse management + +You can [create warehouses in the Back Office](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) or [import them](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html). + +A warehouse can be assigned to a single store or shared between several stores. For the warehouse and stock management scenarios you can set up for your project, see [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html). You can manage relations between stores and warehouses in the Back Office or by importing the warehouse and store data. For details about managing warehouses and stores in the back office, see [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html). For details about importing the warehouse and store data, see [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html). + +### Defining a warehouse address + +You can define the warehouse address that will be used as the shipping origin address by importing the warehouse address data. For details about the import file, see [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html). + +### Avalara: Warehouse assignment to order items + +{% info_block warningBox %} + +By default, a warehouse is not linked to a sales order item. The logic described below applies only when [Avalara](/docs/pbc/all/tax-management/{{page.version}}/base-shop/tax-feature-overview.html) is integrated into your project. That is, it's used to get warehouse addresses to calculate taxes in the USA. + +{% endinfo_block %} + +During the checkout, once a buyer entered delivery addresses for all order items, be it a [single delivery](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/order-management-feature-overview/split-delivery-overview.html) or a split delivery, the order items are assigned to warehouses to fulfill them. + +By default, if a buyer orders several items of the same SKU, the requested item's stock is checked in all the warehouses of the store. Based on the item stock, the warehouses are sorted in descending order—for example: + +1. Never out of stock +2. 1000 items +3. 999 items +4. 2 items +5. 0 items + +If the requested quantity of the item is available in the first warehouse, that is, the one holding the biggest stock of the item, this warehouse is assigned to fulfill the order item. + +{% info_block infoBox %} + +The warehouse with the *never out of stock* item quantity is always assigned to the item. + +{% endinfo_block %} + +If the first warehouse's stock is insufficient to fulfill the order item, this warehouse and the next one are assigned to the order item to fulfill the remaining quantity. + +Schematically, the process looks like this: + +![image](https://confluence-connect.gliffy.net/embed/image/74e2001e-4443-4e6c-b3d6-fafb14548702.png?utm_medium=live&utm_source=custom) + +## Stock management + +When the order is made, the stock is not updated automatically in the system, and you have to set it manually. You can define stock only for concrete products. You can set stock by doing the following: + +- Editing product stock in the Back Office. For details, see [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). +- Importing the quantities of items stored in each of the warehouses. For details, see [Import file details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html). + +## Availability management + +In contrast to stock, availability considers not just the number of products in the warehouse but also current open orders. + +When a buyer places an order, the products in the order become *reserved*, and the product availability changes. The changes are reflected in the Back Office: The availability is equal to the stock before the order is placed, and after the order is placed, the availability decreases, but the stock remains the same. + +Product availability before the order: + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/before-order-placement.png) + +Product availability after the order: + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/after-order-placement.png) + +For details about checking product availability in the Back Office, see [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html). + +{% info_block infoBox %} + +The availability of a product bundle is defined by the availability of each product in the bundle. If at least one of them is out of stock, the entire bundle is unavailable. + +{% endinfo_block %} + +In the [state machine](/docs/pbc/all/order-management-system/{{page.version}}/base-shop/datapayload-conversion/state-machine/order-process-modelling-via-state-machines.html), a developer can use the `reserved` parameter to define the states at which the order items are reserved. There can also be states that release an item. For example, when the payment fails and the order is canceled, the item is not reserved anymore: + +
    +State machine example + +![image](https://spryker.s3.eu-central-1.amazonaws.com/docs/Features/Inventory+Management/state-machine.png) + +
    + +{% info_block infoBox "Unavailable products on the Storefront" %} + +For SEO purposes, products that are not available can still be displayed on the Storefront with the inactive **Add to cart** button. + +{% endinfo_block %} + +## Related Business User documents + +|BACK OFFICE USER GUIDES| +|---| +| [Create warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/create-warehouses.html) | +| [Edit warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html) | +| [Check availability of products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/check-availability-of-products.html) | +| [Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html) | + +## Related Developer documents + +| INSTALLATION GUIDES | UPGRADE GUIDES | GLUE API GUIDES | DATA IMPORT | REFERENCES | +|---|---|---|---|-| +| [Install the Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-feature.html) | [Upgrade the Availability module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availability-module.html) | [Retrieve abstract product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html) | [File details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html) | | +| [Install the Inventory Management + Alternative Products feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-alternative-products-feature.html) | [Upgrade the AvailabilityCartConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitycartconnector-module.html) | [Retrieve concrete product availability](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html) | [File details: warehouse_address.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-address.csv.html) | [Manage stocks in a multi-store environment: Best practices](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/extend-and-customize/manage-stocks-in-a-multi-store-environment-best-practices.html) | +| [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) | [Upgrade the AvailabilityGui module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitygui-module.html) | [Retrieve availability when retrieving abstract products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.html) | [File details: warehouse_store.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse-store.csv.html) | | +|| [Upgrade the AvailabilityOfferConnector module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilityofferconnector-module.html) | [Retrieve availability when retrieving concrete products](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.html) | ["Import file details: warehouse.csv"](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) | | +| | [Upgrade the AvailabilityStorage module](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-availabilitystorage-module.html) | | | | diff --git a/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/check-availability-of-products.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/check-availability-of-products.md new file mode 100644 index 00000000000..65ca43abe18 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/check-availability-of-products.md @@ -0,0 +1,39 @@ +--- +title: Check availability of products +description: Learn how to check availability of products directly in the Back Office of your Spryker based project. +last_updated: June 3, 2022 +template: back-office-user-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/managing-products-availability +originalArticleId: a694b2d4-3f66-40fd-8539-d8b455c2da8f +redirect_from: + - /docs/scos/user/back-office-user-guides/202108.0/catalog/availability/managing-products-availability.html + - /docs/scos/user/back-office-user-guides/202200.0/catalog/availability/managing-products-availability.html + - /docs/scos/user/back-office-user-guides/202311.0/catalog/availability/managing-products-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-in-the-back-office/check-availability-of-products.html +related: + - title: Timed Product Availability Feature Overview + link: docs/pbc/all/product-information-management/page.version/base-shop/feature-overviews/product-feature-overview/timed-product-availability-overview.html +--- + +To check a product's availability in the Back Office, follow the steps: + +1. Go to **Catalog > Availability**. +2. Next to the product you want to view the availability of, click **View**. + This opens the **Product Availability** page. +3. If you have multiple stores, select a **STORE**. + +| ATTRIBUTE | DESCRIPTION | +| - | - | +| ABSTRACT PRODUCT AVAILABILITY | Information about availability of an abstract product. | +| VARIANT AVAILABILITY | Information about availability of the product's variants. | +| SKU | Unique identifier of a product availability is displayed for. | +| NAME | Name of a product availability is displayed for. | +| AVAILABILITY | Defines if customers can order a product on the Storefront. | +| CURRENT STOCK | Number of products available for ordering. | +| RESERVED PRODUCTS | Number of products that were ordered and are being processes. Customers cannot order reserved products. | +| IS BUNDLE PRODUCT | Defines if the product for which availability is displayed is a product bundle. | +| IS NEVER OUT OF STOCK | Defines if the stock of a product can run out. | + +## Next steps + +[Edit stock of products and product bundles](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/create-warehouses.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/create-warehouses.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/create-warehouses.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/create-warehouses.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md new file mode 100644 index 00000000000..c697d4b4157 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.md @@ -0,0 +1,63 @@ +--- +title: Edit stock of products and product bundles +description: Learn how to edit stock of products and product bundles in the Back Office. +last_updated: June 3, 2022 +template: back-office-user-guide-template +redirect_from: + - /docs/scos/user/back-office-user-guides/202311.0/catalog/availability/edit-stock-of-products-and-product-bundles.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-in-the-back-office/edit-stock-of-products-and-product-bundles.html +--- + + +## Prerequisites + +Review the [reference information](#reference-information-edit-stock-of-products-and-product-bundles) before you start, or look up the necessary information as you go through the process. + +## Edit stock of a product variant + + +1. Go to **Catalog > Availability**. +2. Next to the abstract product owning the product variant you want to edit the stock of, click **View**. + This opens the **Product Availability** page. +3. Next to the product variant you want to edit the stock of, click **Edit Stock**. +4. On the **Edit Stock** page, enter **QUANTITY** per needed **STOCK TYPE**. +5. For **NEVER OUT OF STOCK** per **STOCK TYPE**, do the following: + - To make the product available regardless of its stock, select the checkbox. + - To make the product available only if its stock is more than 0, clear the checkbox. +6. Click **Save**. + This refreshes the page with a success message displayed. + +## Edit stock of a product variant in a product bundle + +1. Go to **Catalog > Availability**. +2. Next to the product bundle owning the product variant you want to edit the stock of, click **View**. + This opens the **Product Availability** page. +3. In the **VARIANT AVAILABILITY** pane, next to the needed product bundle, click **View bundled products**. + This opens the **BUNDLED PRODUCTS**. +4. Next to the product variant you want to edit the stock of, click **Edit Stock**. +5. On the **Edit Stock** page, enter **QUANTITY** per needed **STOCK TYPE**. +6. For **NEVER OUT OF STOCK** per **STOCK TYPE**, do the following: + - To make the product available regardless of its stock, select the checkbox. + - To make the product available only if its stock is more than 0, clear the checkbox. +7. Click **Save**. + This refreshes the page with a success message displayed. + + +## Reference information: Edit stock of products and product bundles + +| ATTRIBUTE | DESCRIPTION | +| --- | --- | +| STOCK TYPE | Name of the warehouse the stock is located in. | +| QUANTITY | Number of products in stock per warehouse. Accept decimals with up to 10 digits after the decimal separator and 20 digits in total. When you edit stock of a product variant belonging to a product bundle, the bundle's availability is calculated dynamically. For an example, see [Reference information: Availability calculation of product bundles](#reference-information-availability-calculation-of-product-bundles). | +| NEVER OUT OF STOCK | Defines if the product is available regardless of its stock per warehouse. Even if **QUANTITY** is 0, customers can still order the product. This is usually useful for digital items like gift cards. Setting this option for a real product may cause overbooking. | +| Available in stores | Defines the stores which the stock is available in per warehouse. | + +### Reference information: Availability calculation of product bundles + +Let's say you have two products: a smartphone and three glass screen protectors for it. They are sold both as separate products and as a bundle. This means that a customer can buy each of the products separately or buy a "smartphone+3 glass screen protectors" bundle. + +Each product has its own stock and availability value. Also, there is the availability of the bundle which is calculated based on each separate item's availability. The bundle consists of one smartphone and three glasses. This means that the bundle is only available when the following separate products meet the requirements: +- Smartphone: at least one in stock. +- Glass screen protector: at least three in stock. + +If only two screen protectors are available, regardless of the smartphone's stock, the bundle is not available. diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/edit-warehouses.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/edit-warehouses.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-in-the-back-office/edit-warehouses.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/edit-warehouses.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/manage-warehouses-in-the-back-office.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/manage-warehouses-in-the-back-office.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/manage-in-the-back-office/manage-warehouses-in-the-back-office.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-in-the-back-office/manage-warehouses-in-the-back-office.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-manage-availability-notifications.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-manage-availability-notifications.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-manage-availability-notifications.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md new file mode 100644 index 00000000000..aceb4477f85 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.md @@ -0,0 +1,81 @@ +--- +title: Retrieve abstract product availability +description: Learn how to retrieve information about availability of abstract products using Spryker GLUE API within your Spryker based projects. +last_updated: Jul 12, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-abstract-product-availability +originalArticleId: c712b4c5-0418-48a7-bb0a-bafd208dcf17 +redirect_from: + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/abstract-products/retrieving-abstract-product-availability.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-abstract-product-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-availability.html +related: + - title: Retrieving abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-abstract-products.html + - title: Retrieving abstract product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-abstract-product-prices.html + - title: Retrieving image sets of abstract products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/abstract-products/glue-api-retrieve-image-sets-of-abstract-products.html + - title: Retrieving tax sets + link: docs/pbc/all/tax-management/page.version/base-shop/manage-using-glue-api/retrieve-tax-sets.html +--- + +This endpoint allows retrieving information about availability of abstract products. + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html) + +## Retrieve availability of an abstract product + +To retrieve availability of an abstract product, send the request: + +--- +`GET` **/abstract-products/*{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*/abstract-product-availabilities** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}abstract_product_sku{% raw %}}}{% endraw %}*** | SKU of an abstract product to get availability for. | + +### Request + +Request sample: retrieve availability of an abstract product + +`GET http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities` + +### Response + +Response sample: retrieve availability of an abstract product + +```json +{ + "data": [{ + "type": "abstract-product-availabilities", + "id": "001", + "attributes": { + "availability": true, + "quantity": 10 + }, + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" + } + }], + "links": { + "self": "http://glue.mysprykershop.com/abstract-products/001/abstract-product-availabilities" + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/abstract-product-availabilities-response-attributes.md %} + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 305 | Availability is not found. | +| 311 | Abstract product SKU is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-abstract-products.md diff --git a/docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/base-shop/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-availability-when-retrieving-concrete-products.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md new file mode 100644 index 00000000000..d6d765c03ff --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.md @@ -0,0 +1,96 @@ +--- +title: Retrieve concrete product availability +description: Learn how to retrieve availability of concrete products using Spryker GLUE API within your Spryker based projects. +last_updated: Jul 12, 2021 +template: glue-api-storefront-guide-template +originalLink: https://documentation.spryker.com/2021080/docs/retrieving-concrete-product-availability +originalArticleId: 0c67acf3-3c48-484e-8a9a-3889189c7f56 +redirect_from: + - /docs/scos/dev/glue-api-guides/201811.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/201907.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202005.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202200.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/scos/dev/glue-api-guides/202311.0/managing-products/concrete-products/retrieving-concrete-product-availability.html + - /docs/pbc/all/warehouse-management-system/202311.0/base-shop/manage-using-glue-api/retrieve-concrete-product-availability.html + - /docs/pbc/all/warehouse-management-system/202204.0/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-availability.html +related: + - title: "Glue API: Retrieve concrete products" + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-concrete-products.html + - title: Retrieving concrete product prices + link: docs/pbc/all/price-management/page.version/base-shop/manage-using-glue-api/glue-api-retrieve-concrete-product-prices.html + - title: Retrieving image sets of concrete products + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-image-sets-of-concrete-products.html + - title: Retrieving sales units + link: docs/pbc/all/product-information-management/page.version/base-shop/manage-using-glue-api/concrete-products/glue-api-retrieve-sales-units.html +--- + +This endpoint allows retrieving availability of concrete products. + + +## Installation + +For detailed information on the modules that provide the API functionality and related installation instructions, see [Install the Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/install-and-upgrade/install-features/install-the-inventory-management-glue-api.html). + + + +## Retrieve availability of a concrete product + +--- +`GET` **/concrete-products/*{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*/concrete-product-availabilities** + +--- + +| PATH PARAMETER | DESCRIPTION | +| --- | --- | +| ***{% raw %}{{{% endraw %}concrete_product_sku{% raw %}}}{% endraw %}*** | SKU of a concrete product to get abailability for. | + +### Request + +Request sample: retrieve availability of a concrete product + +--- +`GET http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities` + +--- + +### Response + + +
    +Response sample: retrieve availability of a concrete product + +```json +{ + "data": [{ + "type": "concrete-product-availabilities", + "id": "001_25904006", + "attributes": { + "availability": true, + "quantity": 10, + "isNeverOutOfStock": false + }, + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } + }], + "links": { + "self": "http://glue.mysprykershop.com/concrete-products/001_25904006/concrete-product-availabilities" + } +} +``` + +
    + +{% include pbc/all/glue-api-guides/{{page.version}}/concrete-product-availabilities-response-attributes.md %} + + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 302 | Concrete product is not found. | +| 306 | Availability is not found. | +| 312 | Concrete product sku is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md b/docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/base-shop/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md rename to docs/pbc/all/warehouse-management-system/202602.0/manage-using-glue-api/glue-api-retrieve-subscriptions-to-availability-notifications.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/glue-api-retrieve-product-offer-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/glue-api-retrieve-product-offer-availability.md new file mode 100644 index 00000000000..77b48d93062 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/glue-api-retrieve-product-offer-availability.md @@ -0,0 +1,80 @@ +--- +title: "Glue API: Retrieve product offer availability" +description: Learn how to retrieve Marketplace product offer availabilities via Glue API for your Spryker Marketplace projects. +template: glue-api-storefront-guide-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/marketplace/dev/glue-api-guides/202311.0/product-offers/retrieving-product-offer-availability.html +related: + - title: Retrieving product offer prices + link: docs/pbc/all/price-management/page.version/marketplace/glue-api-retrieve-product-offer-prices.html + - title: Retrieving product offers + link: docs/pbc/all/offer-management/page.version/marketplace/glue-api-retrieve-product-offers.html +--- + +This document describes how to retrieve product offer availabilities via Glue API. + + +## Installation + +For detailed information about the modules that provide the API functionality and related installation instructions, see: +- [Install the Marketplace Product Offer Glue API](/docs/pbc/all/offer-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-glue-api.html) +- [Install the Marketplace Product Offer Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) +- [Install the Marketplace Product Offer Volume Prices Glue API](/docs/pbc/all/price-management/{{page.version}}/marketplace/install-and-upgrade/install-glue-api/install-the-marketplace-product-offer-prices-glue-api.html) + +## Retrieve availability of a product offer + +To retrieve a availability of a product offer, send the request: + +*** +`GET` {% raw %}**/product-offers/*{{offerId}}*/product-offer-availabilities**{% endraw %} +*** + +| PATH PARAMETER | DESCRIPTION | +| ------------------ | ---------------------- | +| {% raw %}***{{offerId}}***{% endraw %} | Unique identifier of a product offer to retrieve the availability of. To get it, [retrieve the offers of a concrete product](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/manage-using-glue-api/glue-api-retrieve-product-offers-of-concrete-products.html). | + +### Request + +Request sample: retrieve availability of a product offer + +`GET https://glue.mysprykershop.com/product-offers/offer56/product-offer-availabilities` + +### Response + +Response sample: retrieve availability of a product offer + +```json +{ + "data": [ + { + "type": "product-offer-availabilities", + "id": "offer56", + "attributes": { + "isNeverOutOfStock": true, + "availability": true, + "quantity": "0.0000000000" + }, + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer56/product-offer-availabilities" + } + } + ], + "links": { + "self": "https://glue.mysprykershop.com/product-offers/offer56/product-offer-availabilities" + } +} +``` + +{% include pbc/all/glue-api-guides/{{page.version}}/product-offer-availabilities-response-attributes.md %} + + + +## Possible errors + +| CODE | DESCRIPTION | +| - | - | +| 3701 | Product offer was not found. | +| 3702 | Product offer ID is not specified. | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md new file mode 100644 index 00000000000..2746292f7f8 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.md @@ -0,0 +1,47 @@ +--- +title: "Import file details: merchant_stock.csv" +last_updated: Feb 26, 2021 +description: This document describes the merchant_stock.csv file to configure merchant stock information in your Spryker shop. +template: import-file-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html + - /docs/marketplace/dev/data-import/202311.0/file-details-merchant-stock.csv.html +related: + - title: Marketplace Merchant feature overview + link: docs/pbc/all/merchant-management/page.version/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html + - title: Execution order of data importers in Demo Shop + link: docs/dg/dev/data-import/page.version/execution-order-of-data-importers.html +--- + +This document describes the `merchant_stock.csv` file to configure [merchant stock](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) information in your Spryker shop. + + +## Import file dependencies + +- [merchant-stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html) +- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) +- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) +- [merchant.csv](/docs/pbc/all/merchant-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant.csv.html) +- [warehouse.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-warehouse.csv.html) + +## Import file parameters + + +| PARAMETER | REQUIRED | TYPE | DEFAULT VALUE | REQUIREMENTS OR COMMENTS | DESCRIPTION | +| ------------- | -------- | ------ | ------------- | --------------------------------- | ----------------- | +| merchant_reference | ✓ | String | | Unique | Identifier of the merchant in the system. | +| stock_name | ✓ | String | | Stock name is defined as described in [merchant warehouse](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html). | Name of the stock. | + + +## Import template file and content example + +| FILE | DESCRIPTION | +| --------------------- | --------------------- | +| [template_merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/template_merchant_stock.csv) | Import file template with headers only. | +| [merchant_stock.csv](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Back-End/Data+Manipulation/Data+Ingestion/Data+Import/Data+Import+Categories/Marketplace+setup/merchant_stock.csv) | Example of the import file with Demo Shop data. | + +## Import command + +```bash +data:import merchant-stock +``` diff --git a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md similarity index 95% rename from docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md rename to docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md index 3e62b821abc..40f69cc1f99 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.md @@ -3,6 +3,8 @@ title: "Import file details: product_offer_stock.csv" last_updated: Feb 26, 2021 description: This document describes the product_offer_stock.csv file to configure merchant product offer stock in your Spryker shop. template: import-file-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.html related: - title: Marketplace Product Offer feature overview link: docs/pbc/all/offer-management/page.version/marketplace/marketplace-product-offer-feature-overview.html diff --git a/docs/pbc/all/warehouse-management-system/202507.0/marketplace/install-features/install-the-inventory-management-marketplace-product-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-inventory-management-marketplace-product-feature.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202507.0/marketplace/install-features/install-the-inventory-management-marketplace-product-feature.md rename to docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-inventory-management-marketplace-product-feature.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-inventory-management-merchant-portal-marketplace-product-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-inventory-management-merchant-portal-marketplace-product-feature.md new file mode 100644 index 00000000000..2f98762cdcf --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-inventory-management-merchant-portal-marketplace-product-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Inventory Management + Merchant Portal - Marketplace Product feature +last_updated: Sep 13, 2021 +description: In this article learn the process how to integrate theMerchant Portal - Marketplace Product + Inventory Management feature into a Spryker Marketplace project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-merchant-portal-marketplace-product-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-feature.md new file mode 100644 index 00000000000..1210f52b608 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Inventory Management feature +last_updated: May 15, 2023 +description: This document describes the process how to integrate the Marketplace Inventory Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-inventory-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-order-management-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-order-management-feature.md new file mode 100644 index 00000000000..b3f4b9e7ead --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-order-management-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Inventory Management + Order Management feature +last_updated: Sep 07, 2021 +description: This document describes the process how to integrate the Marketplace Inventory Management + Order Management feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-inventory-management-order-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.md new file mode 100644 index 00000000000..301830d9ab1 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Inventory Management + Packaging Units feature +last_updated: Sep 07, 2021 +description: This document describes the process how to integrate the Marketplace Inventory Management + Packaging Units feature into a Spryker project. +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/marketplace/install-the-marketplace-inventory-management-packaging-units-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.md new file mode 100644 index 00000000000..a0971b8dc62 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Inventory Management Glue API +description: This document describes the process how to integrate the Marketplace Inventory Management Glue API feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-inventory-management-glue-api.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-wishlist-glue-api.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-wishlist-glue-api.md new file mode 100644 index 00000000000..1a2d18470a2 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/install-glue-api/install-the-marketplace-inventory-management-wishlist-glue-api.md @@ -0,0 +1,8 @@ +--- +title: Install the Marketplace Inventory Management + Wishlist Glue API +description: This document describes how to integrate the Marketplace Inventory Management + Wishlist Glue API feature into a Spryker project. +template: feature-integration-guide-template +last_updated: Nov 21, 2023 +--- + +{% include pbc/all/install-glue-api/{{page.version}}/marketplace/install-the-marketplace-inventory-management-wishlist-glue-api.md %} diff --git a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/manage-availability.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/manage-availability.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/marketplace/manage-availability.md rename to docs/pbc/all/warehouse-management-system/202602.0/marketplace/manage-availability.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/marketplace/marketplace-inventory-management-feature-domain-model.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/marketplace-inventory-management-feature-domain-model.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/marketplace/marketplace-inventory-management-feature-domain-model.md rename to docs/pbc/all/warehouse-management-system/202602.0/marketplace/marketplace-inventory-management-feature-domain-model.md diff --git a/docs/pbc/all/warehouse-management-system/202602.0/marketplace/marketplace-inventory-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/marketplace-inventory-management-feature-overview.md new file mode 100644 index 00000000000..2e5d9667ab9 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/marketplace/marketplace-inventory-management-feature-overview.md @@ -0,0 +1,74 @@ +--- +title: Marketplace Inventory Management feature overview +description: Learn all about the Spryker Marketplace Inventory Management feature and how you can use it within your Spryker Marketplace store. +template: concept-topic-template +last_updated: Nov 21, 2023 +redirect_from: + - /docs/marketplace/user/features/202200.0/marketplace-inventory-management-feature-overview.html +--- + +The *Marketplace Inventory Management* feature enables maintaining stock and availability of merchant products and product offers that are sold in the Marketplace. +In the context of inventory management, the *warehouse* is the physical place where your products are stored, and stock is the number of products available in the warehouse. + +## Marketplace warehouse management + +When a merchant is created, the corresponding warehouse is created for this merchant. The warehouse name is composed of the following parts: `merchant name` + `merchant reference` + `warehouse` + `index` (starting with 1, 2). + +{% info_block infoBox "Example" %} + +"Spryker MER000001 Warehouse 1" where `Spryker` is the merchant name, `MER000001` is a merchant reference, and the index is `1` as it's the first warehouse created. + +{% endinfo_block %} + +A warehouse can be assigned to a single store or shared between several stores. For details about how you can manage warehouses and stores in the Back Office, see [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html). + +## Marketplace stock management + +The stock for product offers is defined in the corresponding merchant warehouse. The stock does not reflect the actual availability of products, as not all the items available in stock are available for sale. For example, when there are pending orders with offers, these order items are *reserved*, so they are not available for ordering, even if they are physically on hand. + +Merchants can define product offer stock in the Merchant Portal. For details, see [Managing product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/manage-merchant-product-offers.html). + +Also, you can do the following using the data import: + +- Manage stock of product offers for a merchant by importing the product offer and stock data separately: [File details: product_offer_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.html). +- Define stock when importing the product offer data: [File details: combined_merchant_product_offer.csv](/docs/pbc/all/offer-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.html). +- Import merchant stock data: [File details: merchant_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html). +- Import stock of merchant products: [File details: product_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/import-and-export-data/import-file-details-product-stock.csv.html). + +## Marketplace availability management + +The difference between the current quantity of items in stock and the quantity of these items in the pending orders is called the *availability* of products. + +Product offer availability calculation differs from the calculation of concrete products availability: + +| CONCRETE PRODUCT AVAILABILITY | PRODUCT OFFER AVAILABILITY | +| --------------------- | ------------------------ | +| Formula: Concrete product availability = Concrete product quantity - Concrete product reservations | Formula: Offer availability = Offer quantity - Offer reservations | + +Offer availability is considered on the Storefront: + +- On the product details page: While adding the offer to cart. +- On the cart page: The product stays in the cart if the attached offer is not available anymore, and a hint is shown. +- During the checkout: When clicking **Buy now**, the availability is rechecked. + +{% info_block infoBox "Example" %} + +Let's assume that a merchant has defined quantity 10 for product offer 1. A customer adds 8 items of the product offer 1 to cart and later updates the quantity to 12. In such a situation, the availability of the product offer 1 is checked, and the customer is notified to update the quantity of the product offer to the available number to proceed with the purchase. + +{% endinfo_block %} + +## Related Business User documents + +| MERCHANT PORTAL USER GUIDES | BACK OFFICE USER GUIDES | +| --------------------------- | ----------------------- | +| [Managing product offers](/docs/pbc/all/offer-management/{{page.version}}/marketplace/manage-merchant-product-offers.html) | [Managing warehouses](/docs/pbc/all/warehouse-management-system/{{page.version}}/base-shop/manage-in-the-back-office/edit-warehouses.html) | + +## Related Developer documents + +|INSTALLATION GUIDES |DATA IMPORT | +|---------|---------| +| [Install the Marketplace Inventory Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-feature.html) | [File details: merchant_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-merchant-stock.csv.html) | +| [Install the Marketplace Inventory Management Glue API](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-glue-api/install-the-marketplace-inventory-management-glue-api.html) | [File details: product_offer_stock.csv](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/import-and-export-data/import-file-details-product-offer-stock.csv.html) | +| [Install the Marketplace Inventory Management + Order Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) | [File details: combined_merchant_product_offer.csv](/docs/pbc/all/offer-management/{{page.version}}/marketplace/import-and-export-data/import-file-details-combined-merchant-product-offer.csv.html) | +| [Install the Marketplace Product + Inventory Management feature](/docs/pbc/all/product-information-management/{{page.version}}/marketplace/install-and-upgrade/install-features/install-the-marketplace-product-inventory-management-feature.html) || +| [Install the Marketplace Inventory Management + Packaging Units feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature.html) || diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md similarity index 88% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md index 2cdc2b9dabb..7624a4ec2ba 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.md @@ -3,6 +3,8 @@ title: Assign and deassign warehouses from warehouse users description: Learn how to assign and deassign warehouses to warehouse users in the Back Office last_updated: Sep 23, 2023 template: back-office-user-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/assign-and-deassign-warehouses-from-warehouse-users.html --- To assign and deassign warehouses from warehouse users in the Back Office, follow the steps: diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-fulfill-orders.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/fulfillment-app-fulfill-orders.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-fulfill-orders.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/fulfillment-app-fulfill-orders.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/fulfillment-app-overview.md similarity index 98% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/fulfillment-app-overview.md index 63658b7d911..0ede17b1c9e 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-overview.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/fulfillment-app-overview.md @@ -3,6 +3,8 @@ title: Fulfillment App overview description: Fulfillment App streamlines the process of fulfilling orders, learn all you need to know about the Spryker Fulfilment app for your Unified Commerce Store. last_updated: Oct 3, 2023 template: concept-topic-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/fulfillment-app-overview.html --- *Fulfillment App* streamlines the process of fulfilling orders. diff --git a/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md new file mode 100644 index 00000000000..e78f78c6ebf --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Warehouse picking feature +description: Learn how to integrate the Spryker Warehouse picking feature into your Spryker Unified Commerce project +last_updated: Feb 10, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/install-the-warehouse-picking-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-picking-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md new file mode 100644 index 00000000000..9942d856022 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Warehouse picking + Product feature +description: Learn how to integrate the Warehouse picking + Product feature into your project +last_updated: Mar 30, 2023 +template: feature-integration-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.html + - /docs/scos/dev/feature-integration-guides/202311.0/install-the-warehouse-picking-product-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-picking-product-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.md new file mode 100644 index 00000000000..41e5abbe8c6 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.md @@ -0,0 +1,11 @@ +--- +title: Install the Warehouse User Management feature +description: Learn how to install the Spryker Warehouse User Management feature in your Spryker Unified Commerce project +template: feature-integration-guide-template +last_updated: Jan 10, 2024 +redirect_from: + - /docs/scos/dev/feature-integration-guides/{{page.version}}/install-the-warehouse-user-management-feature.html + - /docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html +--- + +{% include pbc/all/install-features/{{page.version}}/unified-commerce/install-the-warehouse-user-management-feature.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.md new file mode 100644 index 00000000000..f201b8399f1 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/glue-api-authenticate-as-a-warehouse-user.md @@ -0,0 +1,59 @@ +--- +title: "Glue API: Authenticate as a warehouse user" +description: Learn how to authenticate as a warehouse user using Glue API in your Spryker Unified Commerce projects. +last_updated: Nov 13, 2023 +template: glue-api-storefront-guide-template +--- + +This endpoint allows authenticating as a warehouse user. Warehouse users need to authenticate to interact with picklists. + +## Installation + +[Install the Warehouse User Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html). + +## Authenticate as a warehouse user + +*** +`POST` **/warehouse-tokens** +*** + +### Request + +| HEADER KEY | HEADER VALUE | REQUIRED | DESCRIPTION | +| --- | --- | --- | --- | +| Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | + +Request sample: `POST http://glue-backend.mysprykershop.com/warehouse-tokens` + +### Response + +
    Response sample: authenticate as a warehouse user + +```json +[ + { + "tokenType": "Bearer", + "expiresIn": 604800, + "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJmcm9udGVuZCIsImp0aSI6ImEzZTViZTc0NjdkZTIwZTQ4YmEzN2YzNmM0YzRhZGUxZWQyNDc5MTJhZWVmODBlOGZhNjQ2NGYzYTI3NjUyYTE5NDRjNGI5ODVlYTA2YjQ0IiwiaWF0IjoxNzAwMDM2MjY2Ljc1MTI1MjksIm5iZiI6MTcwMDAzNjI2Ni43NTEyNTY5LCJleHAiOjE3MDA2NDEwNjYuNzM1ODMxLCJzdWIiOiJ7XCJpZF93YXJlaG91c2VcIjoxfSIsInNjb3BlcyI6WyJ3YXJlaG91c2UiXX0.deE1iflg8DSACky5lwua074FamXCJV3PPmUgNubhQ-YeVaspXc-saPl5-juF53uJUENTA9_uUmBK9i9hwLhzivEup5Oz8UpY0dYfzyvlq2CkL_FbaHvLNJXZUsnFeliqF0Py_Cdf54avQsqYgxKcbk9VeidRlzwGD2DgntqQnkpW-GOrMTNimR1XmbMbnTSQiz4H-wyS33fNMUcASkrJYt-Olorc_JVebVP4kjnUcHTOQJXeZvMWz3TciVBk0oWVeIY8hDqC8qK-rKrdbQCsSaS6R4L9G-CvUu8LcwhOXY3p57tsowQgwDLjLsVtIZyAWApXNOT8CGhCq_4wfl114Q", + "refreshToken": "def50200336e5b86d14b6e91ff16b70ebeb322f7dbf37138ba336e0c2c69b120835e3ff74481bf2f9e8c4e87ffe4d3da7081f5555b193a826514ccfddb50f2ea1665c803f94edfb95f8b8f07d3b8ead91dc2be6a529cc19a752b7113d80bdbe4804b4a21e3ba9a431af5cb667cd2eb8ccdd68939e72f10d56c89f1c7d95475bf6d67e55ac6bd43dad86878fdfab9ab2adf18577800e26338bd24329f1d3f58d920e415aabca412ae33f9600a0c0b2d11586c4a90e5a0fb47bae2b14eed3f33121e054f5ea0a47579d4e2b6e6fd166a4b8cb26a0e8dee3763fb59408748f7cda02e098d7297e68a4a8ae77c5d266195c5629ee7bd9234735c9599733d91222da0b3945748da0eae30e7da17eedb75821220db84be08aafb5f070cdc310c475ccf2ea15af148088d6d067b2dab86dba584d2122ec772bf4274b98b0bfbb684635829718653bb0cac58296da1bc8fb3c1700324ad140f3457b613ba58a9f1ac8405746a543ba2a05c6a07753265ca36496e1bcde0984e6ea8ee0d100fb457a12970bb6ded995848922f" + } +] +``` + +
    + +| ATTRIBUTE | TYPE | DESCRIPTION | +|-|-|-| +| tokenType | String | Type of the authentication token. Set this type when sending a request with the token. | +| expiresIn | Integer | Time in seconds in which the `access_token` token expires. | +| accessToken | String | Authentication token used to send requests to the protected resources available for this warehouse user. | +| refreshToken | String | Authentication token used to refresh `access_token`. | + + +## Possible errors + +| CODE | REASON | +| --- | --- | +| 001 | The provided access token is invalid. To get an access token, see [Authenticate as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | + +To view generic errors that originate from the Glue Application, see [Reference information: GlueApplication errors](/docs/integrations/spryker-glue-api/storefront-api/api-references/reference-information-storefront-application-errors.html). diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md similarity index 99% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md index 5af94b1253e..0ad8e8ecfb3 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-pick-picklist-items.md @@ -269,7 +269,7 @@ For detailed information about the modules that provide the API functionality an } ``` -
    + {% include pbc/all/glue-api-guides/{{page.version}}/picking-lists-response-attributes.md %} diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md similarity index 99% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md index 4bf68f8913d..d953e1d35f5 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.md @@ -2,6 +2,8 @@ title: "Glue API: Retrieve picklists" description: Learn how to retrieve picklist items using Spryker Glue API in your Spryker Unified Commerce Store. template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-retrieve-picklists.html last_updated: Dec 7, 2023 --- @@ -89,7 +91,7 @@ For detailed information about the modules that provide the API functionality an "self": "https://glue-backend.mysprykershop.com/picking-lists" } } -``` +``` @@ -506,7 +508,7 @@ For detailed information about the modules that provide the API functionality an } ``` - +
    diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md similarity index 97% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md index 530e214a78c..d466c41bbc9 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.md @@ -2,6 +2,8 @@ title: "Glue API: Start picking" description: Learn how to start picking items using Spryker Glue API in your Spryker Unified Commerce Store. template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-picklists/glue-api-start-picking.html last_updated: Dec 7, 2023 --- diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md similarity index 96% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md index c3df599552c..5779b3ff5ef 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.md @@ -2,6 +2,8 @@ title: "Glue API: Create warehouse user assignments" description: Learn how to create warehouse user assignments using Glue API within your Spryker Unified Commerce project. template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-create-warehouse-user-assignments.html last_updated: Dec 14, 2023 --- diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-delete-warehouse-user-assignments.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-delete-warehouse-user-assignments.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-delete-warehouse-user-assignments.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-delete-warehouse-user-assignments.md diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md similarity index 99% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md index 43ee68a29bc..847dc0f584a 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.md @@ -2,6 +2,8 @@ title: "Glue API: Retrieve warehouse user assignments" description: Learn how to retrieve warehouse user assignments using Glue API within your Spryker Unified Commerce project. template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-retrieve-warehouse-user-assignments.html last_updated: Dec 7, 2023 --- @@ -300,7 +302,7 @@ For detailed information about the modules that provide the API functionality an ```json { - "data": [ + "data": [ { "type": "warehouse-user-assignments", "id": "39fcc049-758b-5f96-96c4-ecd5e103a8f9", diff --git a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md similarity index 96% rename from docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md index a22fe56697a..8feb886e412 100644 --- a/docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.md @@ -2,6 +2,8 @@ title: "Glue API: Update warehouse user assignments" description: Learn how to update warehouse user assignments using Glue API within your Spryker Unified Commerce project. template: glue-api-storefront-guide-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202507.0/unified-commerce/manage-using-glue-api/manage-warehouse-user-assignments/glue-api-update-warehouse-user-assignments.html last_updated: Dec 7, 2023 --- @@ -134,7 +136,7 @@ Request sample: } ``` -
    + {% include pbc/all/glue-api-guides/{{page.version}}/warehouse-user-assignments-response-attributes.md %} diff --git a/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/set-up-fulfillment-app.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/set-up-fulfillment-app.md new file mode 100644 index 00000000000..4db190efe85 --- /dev/null +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/set-up-fulfillment-app.md @@ -0,0 +1,32 @@ +--- +title: Set up Fulfillment App +description: Learn how to install and configure Fulfillment App within your Spryker Unified Commerce projects. +last_updated: Feb 19, 2026 +template: howto-guide-template +--- + +This document describes how to install Fulfillment App and connect it to your project. + +## Install the required features + +To enable the support of Fulfillment App in your project, install the following features: + +| NAME | VERSION | INSTALLATION GUIDE | +|----------|------------------|--------------------| +| Warehouse picking | {{page.release_tag}} | [Install the Warehouse picking feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/install-and-upgrade/install-the-warehouse-picking-feature.html) | +| Warehouse User Management | {{page.release_tag}} | [Install the Warehouse User Management feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/install-and-upgrade/install-the-warehouse-user-management-feature.html) | +| Warehouse picking + Product | {{page.release_tag}} | [Install the Warehouse picking + Product feature](/docs/pbc/all/warehouse-management-system/{{page.version}}/unified-commerce/install-and-upgrade/install-the-warehouse-picking-product-feature.html) | + +## Install Fulfillment App + +For instructions on installing Fulfillment App, see [Set up Oryx](/docs/dg/dev/frontend-development/{{page.version}}/oryx/getting-started/set-up-oryx.html). + +## Connect Fulfillment App + +To connect Fulfillment App to your project using Glue API, set the URL of your Glue Backend API in the environment configuration: + +```text +... +SCOS_BASE_URL={GLUE_BACKEND_API_URL} +... +``` diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-picking-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/warehouse-picking-feature-overview.md similarity index 92% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-picking-feature-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/warehouse-picking-feature-overview.md index 6e724b1fd69..82aa1bd3a23 100644 --- a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-picking-feature-overview.md +++ b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/warehouse-picking-feature-overview.md @@ -3,6 +3,8 @@ title: Warehouse Picking feature overview description: General overview of the Warehouse Picking feature last_updated: Oct 3, 2023 template: concept-topic-template +redirect_from: + - /docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-picking-feature-overview.html related: - title: Fulfillment App overview link: docs/pbc/all/warehouse-management-system/page.version/unified-commerce/fulfillment-app-overview.html diff --git a/docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-user-management-feature-overview.md b/docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/warehouse-user-management-feature-overview.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/unified-commerce/warehouse-user-management-feature-overview.md rename to docs/pbc/all/warehouse-management-system/202602.0/unified-commerce/warehouse-user-management-feature-overview.md diff --git a/docs/pbc/all/warehouse-management-system/202512.0/warehouse-management-system.md b/docs/pbc/all/warehouse-management-system/202602.0/warehouse-management-system.md similarity index 100% rename from docs/pbc/all/warehouse-management-system/202512.0/warehouse-management-system.md rename to docs/pbc/all/warehouse-management-system/202602.0/warehouse-management-system.md diff --git a/docs/pbc/all/yves/install-and-upgrade/enable-zero-state-component-for-empty-data.md b/docs/pbc/all/yves/install-and-upgrade/enable-zero-state-component-for-empty-data.md new file mode 100644 index 00000000000..2ed23ce200f --- /dev/null +++ b/docs/pbc/all/yves/install-and-upgrade/enable-zero-state-component-for-empty-data.md @@ -0,0 +1,171 @@ +--- +title: Enable the Zero State Component for Empty Data +description: Learn how to enable the Zero State component in Spryker Cloud Commerce OS Yves so you can display user-friendly messages and visuals when no data is available. +last_updated: Feb 3, 2026 +template: module-migration-guide-template +--- + +This guide explains how to enable the **Zero State component** in Spryker Cloud Commerce OS Yves so you can display user-friendly messages and visuals when no data is available. + +To add the Zero State component to your project, include the `molecule('empty-state')` in the relevant Twig file. + +**vendor/spryker-shop/shop-ui/src/SprykerShop/Yves/ShopUi/Theme/default/components/molecules/empty-state/empty-state.twig** + +Example: + +```twig +{% raw %} +{% include molecule('empty-state') with { + data: { + title: 'title.glossary.key' | trans, + description: 'description.glossary.key' | trans, + iconName: 'icon-name', + actionButton: { + text: 'button.glossary.key' | trans, + link: url('url-key'), + qa: 'qa-key', + icon: { + name: 'icon-name', + }, + }, + }, +} only %} +{% endraw %} +``` + +--- + +## Steps to Enable the Zero State Component + +### 1. Update `SprykerShop` modules + +Update the following modules to the specified versions or higher: +- `spryker-shop/shop-ui`: 1.101.0 +- `spryker-shop/customer-page`: 2.73.0 +- `spryker-shop/sales-return-page`: 1.11.0 + +```bash +composer update spryker-shop/shop-ui:"^1.101.0" spryker-shop/customer-page:"^2.73.0" spryker-shop/sales-return-page:"^1.11.0" +``` + +--- + +### 2. Add icons to the icon sprite + +Add new icons into `icon-sprite` atom: + +**src/Pyz/Yves/ShopUi/Theme/default/components/atoms/icon-sprite/icon-sprite.twig** + +```twig +{% raw %} + + + Local Mall + + + + Globe Location Pin + + + + Add + + + + Shopping Bag Speed + + +{% endraw %} +``` + +--- + +### 3. Glossary keys + +Add glossary keys for the empty state component (for example, Customer pages – Addresses, Order History, and Returns): + +**data/import/common/common/glossary.csv** + +```csv +customer.account.address.no-addresses,Noch keine Adressen hinzugefügt!,de_DE +customer.account.address.no-addresses-description,"This is where you'll find and manage addresses once it's available.",en_US +customer.account.address.no-addresses-description,"Hier können Sie Ihre Adressen sehen und verwalten, sobald sie verfügbar sind.",de_DE +customer.order.no_orders,No order history available!,en_US +customer.order.no_orders,Keine Bestellungen gefunden!,de_DE +customer.order.no_orders_description,"This is where you'll find and manage order history once it's available.",en_US +customer.order.no_orders_description,"Hier können Sie Ihre Bestellhistorie sehen und verwalten, sobald sie verfügbar ist.",de_DE +return_page.account.no_return,No returns found!,en_US +return_page.account.no_return,Keine Retouren gefunden!,de_DE +return_page.account.no_return_description,"This is where you'll find and manage returns once it's available.",en_US +return_page.account.no_return_description,"Hier können Sie Ihre Retouren sehen und verwalten, sobald sie verfügbar sind.",de_DE +``` + +--- + +### 4. Update Twig files to enable the new `Zero State` component + +**src/Pyz/Yves/CustomerPage/Theme/default/components/molecules/order-table/order-table.twig** + +```twig +{% raw %} +{% if data.orders is empty %} + {% block noOrder %} + {{ parent() }} + {% endblock %} +{% else %} +{% endraw %} +``` + +**src/Pyz/Yves/CustomerPage/Theme/default/views/address/address.twig** + +```twig +{% raw %} +{% for address in data.addresses %} + ... +{% else %} + {% block emptyState %} + {% include molecule('empty-state') with { + data: { + title: 'customer.account.address.no-addresses' | trans, + description: 'customer.account.address.no-addresses-description' | trans, + iconName: 'globe-location-pin', + actionButton: { + text: 'customer.account.button.add_new_address' | trans, + link: url('customer/address/new'), + qa: 'customer-add-new-address', + icon: { + name: 'add', + }, + }, + }, + } only %} + {% endblock %} +{% endfor %} +{% endraw %} +``` + +--- + +{% info_block infoBox "Tip" %} +To prevent the newly created `Zero State` component from rendering on the `Customer/Overview` page, adjust the `order-table` molecule include by replacing the content of the `noOrder` block. + +**src/Pyz/Yves/CustomerPage/Theme/default/views/overview/overview.twig** + +```twig +{% raw %} +{% embed molecule('order-table', 'CustomerPage') with { + data: { + orders: data.orders, + ordersAggregatedItemStateDisplayNames: data.ordersAggregatedItemStateDisplayNames, + }, +} only %} + {% block noOrder %} +

    {{ 'customer.account.no_order' | trans }}

    + {% endblock %} +{% endembed %} +{% endraw %} +``` + +{% endinfo_block %} + +--- diff --git a/mdlint/bare-links.js b/mdlint/bare-links.js index 7e2bb91e422..6f668e8d2c8 100644 --- a/mdlint/bare-links.js +++ b/mdlint/bare-links.js @@ -5,9 +5,30 @@ module.exports = { function: function (params, onError) { const bareLinkRegex = /\bhttps?:\/\/[^\s<>"'`)]*/g; + // Build a set of line numbers that fall inside Liquid {% %} blocks + const liquidLines = new Set(); + let insideLiquid = false; + params.lines.forEach((line, index) => { + const trimmed = line.trim(); + if (!insideLiquid && trimmed.startsWith("{%")) { + insideLiquid = true; + } + if (insideLiquid) { + liquidLines.add(index + 1); // line numbers are 1-based + if (trimmed.includes("%}")) { + insideLiquid = false; + } + } + }); + params.tokens.forEach((token) => { // Only inspect inline text tokens if (token.type === "inline" && token.children) { + // Skip tokens whose line falls inside a Liquid block + if (liquidLines.has(token.lineNumber)) { + return; + } + let insideLink = false; let insideImage = false; diff --git a/needed_redirects.txt b/needed_redirects.txt new file mode 100644 index 00000000000..9860be854a0 --- /dev/null +++ b/needed_redirects.txt @@ -0,0 +1,9 @@ +🔍 Scanning for HTML files in ./_site... +📝 Found 5272 HTML files +🏗️ Building valid files index... +✅ Indexed 25398 valid paths +🔗 Processing redirects from markdown files... +✅ Added 27125 redirect paths +🔗 Checking internal links... + +✅ All internal links are valid! diff --git a/netlify.toml b/netlify.toml index 30ff7fbf1bb..115a2f71e59 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,64 +1,64 @@ # depth 0 [[redirects]] from = "/latest/*" -to = "/202512.0/:splat" +to = "/202602.0/:splat" status = 301 force = true [[redirects]] from = "/latest" -to = "/202512.0" +to = "/202602.0" status = 301 force = true # depth 1 [[redirects]] from = "/:a/latest/*" -to = "/:a/202512.0/:splat" +to = "/:a/202602.0/:splat" status = 301 force = true [[redirects]] from = "/:a/latest" -to = "/:a/202512.0" +to = "/:a/202602.0" status = 301 force = true # depth 2 [[redirects]] from = "/:a/:b/latest/*" -to = "/:a/:b/202512.0/:splat" +to = "/:a/:b/202602.0/:splat" status = 301 force = true [[redirects]] from = "/:a/:b/latest" -to = "/:a/:b/202512.0" +to = "/:a/:b/202602.0" status = 301 force = true # depth 3 [[redirects]] from = "/:a/:b/:c/latest/*" -to = "/:a/:b/:c/202512.0/:splat" +to = "/:a/:b/:c/202602.0/:splat" status = 301 force = true [[redirects]] from = "/:a/:b/:c/latest" -to = "/:a/:b/:c/202512.0" +to = "/:a/:b/:c/202602.0" status = 301 force = true # depth 4 [[redirects]] from = "/:a/:b/:c/:d/latest/*" -to = "/:a/:b/:c/:d/202512.0/:splat" +to = "/:a/:b/:c/:d/202602.0/:splat" status = 301 force = true [[redirects]] from = "/:a/:b/:c/:d/latest" -to = "/:a/:b/:c/:d/202512.0" +to = "/:a/:b/:c/:d/202602.0" status = 301 force = true